Array e “stringhe” - home.deib.polimi.it · DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e...
Transcript of Array e “stringhe” - home.deib.polimi.it · DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e...
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Array e “stringhe”
Marco D. Santambrogio – [email protected]
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Logistica Laboratori
2
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Logistica Laboratori
3@DrepssedDarth
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Logistica Laboratori
• Lunedì (3.30pm – 6pm)§ EG7 (No portatili e basta)§ L26.1.3 (portatili)
4
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Logistica Laboratori
• Lunedì (3.30pm – 6pm)§ EG7 (No portatili e basta)§ L26.1.3 (portatili)
• Giovedì (2pm – 4pm)§ EG7 (20 dei 31 gruppi del progetto)
5
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
6
BESTIARIO
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Bestiario…
• Assegnamento di un valore ad una variabile
7
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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)
8
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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)
• Confronto/test
9
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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)
• Confronto/test§ x == 5 (e.g., if (x == 5))§ dato == ‘x’; (e.g., if (dato == ‘x’))
10
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Bestiario…
• L’uso del punto e virgola!
11
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Bestiario…
• L’uso del punto e virgola!
if (x == 5);printf (“\n Vero”);
else printf (“\n Falso!”);
12
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Bestiario…
13
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Bestiario…
• L’uso del punto e virgola!
if (x == 5)printf (“\n Vero”);
else printf (“\n Falso!”);
14
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Passaggio di dati “alla printf”
15
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Passaggio di dati “alla printf”
int dato=3;printf(“il dato vale %d”, &dato);
16
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Passaggio di dati “alla printf”
int dato=3;printf(“il dato vale %d”, &dato);
• Dato è passato per copia!!!!
17
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Passaggio di dati “alla printf”
int dato=3;printf(“il dato vale %d”, &dato);
• Dato è passato per copia!!!!
printf(“il dato vale %d”, dato);
18
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
19
Problema: sequenza di interi
• Mostrare una sequenza di 10 interi nell'ordine inverso rispetto a quello con cui è stata introdotta dall’utente
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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
20
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Obiettivi
• Gli array, questi sconosciuti• Gli array in C• Array particolari: le stringhe
21
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
22
• 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]
v[6]
-45
6 0
72
1543 -89
0
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
Gli array
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
23
• 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[5-2] è equivalente a vett[3] ed è equivalente a vett[x]
Gli array
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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
24
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Come salvare i voti... La dichiarazione
25
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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
26
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Come salvare i voti... L’inserimento
• Problema 1: devo salvare i dati nel mio array (int voto[10];)
scanf(&voto[posix]);
27
*pseudo-codice
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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++){ }
28
*pseudo-codice
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Come salvare i voti... L’inserimento
• Problema 1 + Problema 2
for(index = 0, index < N, index++){scanf(&voto[posix]);
}
29
Non va bene!!!
1) Scrivo sempre in voto[posix]
2) Quanto vale posix???
*pseudo-codice
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Come salvare i voti... L’inserimento
• Problema 1 + Problema 2
posix = 0;for(index = 0, index < N, index++){
scanf(&voto[posix]);posix++;
}
30
Come crescono index e posix?
*pseudo-codice
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Come salvare i voti... L’inserimento
• Problema 1 + Problema 2
for(index = 0, index < N, index++){scanf(&voto[index]);
}
31
*pseudo-codice
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Come salvare i voti... L’inserimento
32
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Come salvare i voti... La stampa
33
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Mettiamo tutto insieme
34
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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
35
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
36
• Sintassi compatta: int n[5] = {1, 2, 3, 4, 5};
§ Inizializzazione parziale: gli elementi più a destra sono posti a 0int 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
Inizializzazione di un array
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
37
• 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 */ }
Operazioni sugli array
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
38
WAT
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
39
WAT
CI TORNEREMO… I PUNTATORI
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
40
I NON HO CAPITO MOLTO A COSA SERVANO GLI ARRAY…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
41
Problema: sequenza di interi
• Mostrare una sequenza di 10 interi nell'ordine inverso rispetto a quello con cui è stata introdotta dall’utente
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Provate senza array
42
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Provate senza array
43
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Provate senza array
44
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Provate con gli array…
45
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Provate con gli array…
46
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Sequenza: possibile soluzione
47
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Sequenza: possibile soluzione
48
E se ora volessi 100 numeri?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Sequenza: possibile soluzione
49
E se ora volessi 100 numeri?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
50
• 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
"Generalizziamo" con la direttiva #define
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Sequenza con define
51
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Sequenza con define
52
E se ora volessi 17 numeri?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Sequenza con define
53
E se ora volessi 17 numeri?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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
54
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
55
• 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'};
drow \0
Le stringhe
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Problema: inserisci nome
56
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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'
ATTENZIONELe 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
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
scanf: stringhe Vs char
58
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Fonti per lo studio + Credits
• Fonti per lo studio§ Informatica arte e mestiere, S. Ceri, D.
Mandrioli, L. Sbattella, McGrawHill• Capitolo 5
• Credits§ Daniele Braga - http://home.dei.polimi.it/
braga/
59