Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Process synchronization
Operating System Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 6 Aprile 2016 © 2005 William Fornaciari
2
Logistica Laboratori
3
Logistica Laboratori @DrepssedDarth
4
Logistica Laboratori Lunedì (3.30pm – 6pm) EG7 (No portatili e basta)
L (portatili)
5
Logistica Laboratori Lunedì (3.30pm – 6pm) Giovedì (2pm – 4pm)
EG7 (No portatili e basta) L (portatili) Giovedì (2pm – 4pm) EG7 (20 dei 31 gruppi del progetto)
6
BESTIARIO
7
Bestiario… Assegnamento di un valore ad una variabile
8
Bestiario… Assegnamento di un valore ad una variabile x = 5; (int x)
dato = ‘x’; (char dato) d = y/3.14; (float d, y or float d; int y)
9
Bestiario… Assegnamento di un valore ad una variabile Confronto/test
x = 5; (int x) dato = ‘x’; (char dato) d = y/3.14; (float d, y or float d; int y) Confronto/test
10
Bestiario… Assegnamento di un valore ad una variabile Confronto/test
x = 5; (int x) dato = ‘x’; (char dato) d = y/3.14; (float d, y or float d; int y) Confronto/test x == (e.g., if (x == 5)) dato == ‘x’; (e.g., if (dato == ‘x’))
11
Bestiario… L’uso del punto e virgola!
12
Bestiario… L’uso del punto e virgola! if (x == 5); printf (“\n Vero”);
else printf (“\n Falso!”);
13
Bestiario…
14
Bestiario… L’uso del punto e virgola! if (x == 5) printf (“\n Vero”);
else printf (“\n Falso!”);
15
Passaggio di dati “alla printf”
16
Passaggio di dati “alla printf”
int dato=3; printf(“il dato vale %d”, &dato);
17
Passaggio di dati “alla printf”
int dato=3; printf(“il dato vale %d”, &dato); Dato è passato per copia!!!!
18
Passaggio di dati “alla printf”
int dato=3; printf(“il dato vale %d”, &dato); Dato è passato per copia!!!! printf(“il dato vale %d”, dato);
19
Problema: sequenza di interi
Mostrare una sequenza di 10 interi nell'ordine inverso rispetto a quello con cui è stata introdotta dall’utente
20
La gara di nuoto: con salvataggio
Problema Si hanno10 giudici 1 giudice = 1 voto Si vogliono memorizzare i 10 voti, per poterli rileggere Ogni voto è nell’itervallo 0-10 Dato un tuffo, calcolare La media dei voti Il voto massimo ed il voto minimo
21
Obiettivi Gli array, questi sconosciuti Gli array in C
Array particolari: le stringhe
22
Gli array Gruppi di celle consecutive
-45 6 72 1543 -89 62 -3 1 6453 78 dichiarazione v[0] v[1] v[2] v[3] v[11] v[10] v[9] v[8] v[7] v[5] v[4] posizione elemento int v[12]; nome array Gruppi di celle consecutive Rappresentano gruppi di variabili con lo stesso nome e lo stesso tipo Per riferirsi a un elemento, si specificano: Il nome dell’array La posizione dell’elemento (indice) Sintassi: <nomearray>[<posizione>] Il primo elemento ha indice 0 L’n° elemento dell’array v è v[n-1]
23
Gli array Gli elementi di un array sono normali variabili:
vett[0] 3; printf("%d", vett[0]); > 3 scanf("%d", &vett[1]); > 17 vett[1] assume valore 17 Si possono usare espressioni come indici: se x 3 vett[52] è equivalente a vett[3] ed è equivalente a vett[x]
24
La gara di nuoto: con salvataggio
Problema Si hanno10 giudici 1 giudice = 1 voto Si vogliono memorizzare i 10 voti, per poterli rileggere Ogni voto è nell’itervallo 0-10 Dato un tuffo, calcolare La media dei voti Il voto massimo ed il voto minimo
25
Come salvare i voti... La dichiarazione
26
Come salvare i voti... L’inserimento
Problema 1: devo salvare i dati nel mio array (int voto[10];) Problema 2: devo definire un ciclo che mi permetta di scorrere N elementi
27
Come salvare i voti... L’inserimento
Problema 1: devo salvare i dati nel mio array (int voto[10];) scanf(&voto[posix]); *pseudo-codice
28
Come salvare i voti... L’inserimento
Problema 2: devo definire un ciclo che mi permetta di scorrere N elementi for(index = 0, index < N, index++){ } *pseudo-codice
29
Come salvare i voti... L’inserimento
Problema 1 + Problema 2 for(index = 0, index < N, index++){ scanf(&voto[posix]); } Non va bene!!! Scrivo sempre in voto[posix] Quanto vale posix??? *pseudo-codice
30
Come salvare i voti... L’inserimento
Problema 1 + Problema 2 posix = 0; for(index = 0, index < N, index++){ scanf(&voto[posix]); posix++; } Come crescono index e posix? *pseudo-codice
31
Come salvare i voti... L’inserimento
Problema 1 + Problema 2 for(index = 0, index < N, index++){ scanf(&voto[index]); } *pseudo-codice
32
Come salvare i voti... L’inserimento
33
Come salvare i voti... La stampa
34
Mettiamo tutto insieme
35
Array: collezione di dati omogenei
Un piccolo riassunto… Array: collezione di dati omogenei Dichiare il tipo dei suoi dati Dichiarare la sua dimensione Come si accede ai dati di un array? Come a normali variabili Esempio di scrittura Esempio di lettura
36
Inizializzazione di un array
Sintassi compatta: int n[5] {1, 2, 3, 4, 5}; Inizializzazione parziale: gli elementi più a destra sono posti a 0 int n[5] {13}; tutti gli altri elementi sono posti a 0 Specificare troppi elementi tra le graffe è un errore di sintassi Se la lunghezza dell’array è omessa, gli inizializzatori la determinano: int n[] {5, 47, 2, 0, 24}; è equivalente a: int n[5] {5, 47, 2, 0, 24}; In tal caso la dimensione è inferita automaticamente, e si avranno 5 elementi nell’array
37
Operazioni sugli array
Si opera sui singoli elementi, uno per volta Non è possibile operare sull’intero array, agendo su tutti gli elementi simultaneamente / come ricopiare array1 in array2 / int array1[10], array2[10]; int i; . . . array2 array1; / ERRATO / for( i 0; i 10; i ) array2[i] array1[i]; / CORRETTO /
38
WAT
39
WAT CI TORNEREMO… I PUNTATORI
40
I NON HO CAPITO MOLTO A COSA SERVANO GLI ARRAY…
41
Problema: sequenza di interi
Mostrare una sequenza di 10 interi nell'ordine inverso rispetto a quello con cui è stata introdotta dall’utente
42
Provate senza array
43
Provate senza array
44
Provate senza array
45
Provate con gli array…
46
Provate con gli array…
47
Sequenza: possibile soluzione
48
Sequenza: possibile soluzione
E se ora volessi 100 numeri?
49
Sequenza: possibile soluzione
E se ora volessi 100 numeri?
50
"Generalizziamo" con la direttiva #define
In testa al programma: #define LUNG_SEQ 100 Così possiamo adattare la lunghezza del vettore alle eventuali mutate esigenze senza riscrivere la costante 100 in molti i punti del programma Il preprocessore sostituisce nel codice LUNG_SEQ con 100 prima della compilazione La lunghezza dell’array, quindi, anche in questo caso è decisa al momento della compilazione del programma Nella dichiarazione degli array non si usano mai variabili per specificarne la dimensione
51
Sequenza con define
52
Sequenza con define E se ora volessi 17 numeri?
53
Sequenza con define E se ora volessi 17 numeri?
54
Frase… insieme di caratteri
Che cosa è una frase? Un insieme di caratteri Come la rappresento? Un insieme, di tante variabili carattere? Una variabile, insieme di caratteri? supercali fragili stiche spiralidoso
55
Le stringhe Array di caratteri: spesso chiamati stringhe
Quando rappresentano “caratteri da leggersi in fila” Dichiarazione+inizializzazione di una stringa: char stringa[] "word"; Il carattere nullo '\0' termina le stringhe Perciò l’array stringa ha 5 elementi (non 4): Dichiarazione equivalente: char stringa[] {'w', 'o', 'r', 'd', '\0'}; d r o w \0
56
Problema: inserisci nome
57
Stringhe e caratteri Qual è la differenza tra 'x' e "x"?
'x' è una costante di tipo char, rappresentata in memoria da un intero "x" è una stringa costante, rappresentata in memoria da un array che contiene i caratteri: 'x' e '\0' ATTENZIONE Le stringhe non sono propriamente un tipo di dato (non sono un tipo base!) Non hanno operatori nativi, ma una serie di funzioni nella libreria standard che permettono di manipolarle
58
scanf: stringhe Vs char
59
Fonti per lo studio + Credits
Informatica arte e mestiere, S. Ceri, D. Mandrioli, L. Sbattella, McGrawHill Capitolo 5 Credits Daniele Braga -
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.