DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio –...

37
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Array e “stringhe” Marco D. Santambrogio – [email protected] Ver. aggiornata al 8 Aprile 2015

Transcript of DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio –...

Page 1: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Array e “stringhe”Array e “stringhe”

Marco D. Santambrogio – [email protected]. aggiornata al 8 Aprile 2015

Page 2: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Frase… insieme di Frase… insieme di carattericaratteri

• 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

2

Page 3: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

ObiettiviObiettivi

• Gli array, questi sconosciuti• Gli array in C• Array particolari: le stringhe

3

Page 4: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

4

• 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 arrayGli array

Page 5: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

5

• 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]

Gli arrayGli array

Page 6: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

La gara di nuoto: La gara di nuoto: con con salvataggiosalvataggio

• 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

6

Page 7: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Come Come salvaresalvare i voti... La i voti... La dichiarazionedichiarazione

7

Page 8: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Come Come salvaresalvare i voti... i voti... L’inserimentoL’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

8

Page 9: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Come Come salvaresalvare i voti... i voti... L’inserimentoL’inserimento

• Problema 1: devo salvare i dati nel mio array (int voto[10];)

scanf(&voto[posix]);

9

*pseudo-codice

Page 10: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Come Come salvaresalvare i voti... i voti... L’inserimentoL’inserimento

• Problema 2: devo definire un ciclo che mi permetta di scorrere N elementi

for(index = 0, index < N, index++){ }

10

*pseudo-codice

Page 11: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Come Come salvaresalvare i voti... i voti... L’inserimentoL’inserimento

• Problema 1 + Problema 2

for(index = 0, index < N, index++){scanf(&voto[posix]);

}

11

Non va bene!!!

1)Scrivo sempre in voto[posix]

2)Quanto vale posix???

*pseudo-codice

Page 12: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Come Come salvaresalvare i voti... i voti... L’inserimentoL’inserimento

• Problema 1 + Problema 2

posix = 0;for(index = 0, index < N, index++){

scanf(&voto[posix]);posix++;

}

12

Come crescono index e posix?

*pseudo-codice

Page 13: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Come Come salvaresalvare i voti... i voti... L’inserimentoL’inserimento

• Problema 1 + Problema 2

for(index = 0, index < N, index++){scanf(&voto[index]);

}

13

*pseudo-codice

Page 14: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Come Come salvaresalvare i voti... i voti... L’inserimentoL’inserimento

14

Page 15: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Come Come salvaresalvare i voti... La stampa i voti... La stampa

15

Page 16: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Mettiamo tutto insiemeMettiamo tutto insieme

16

Page 17: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Un piccolo riassunto…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

17

Page 18: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

18

• 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 arrayInizializzazione di un array

Page 19: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

19

• 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 arrayOperazioni sugli array

Page 20: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

20

Problema: sequenza di Problema: sequenza di interiinteri

• Mostrare una sequenza di 10 interi nell'ordine inverso rispetto a quello con cui è stata introdotta dall’utente

Page 21: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Provate senza arrayProvate senza array

21

Page 22: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Provate senza arrayProvate senza array

22

Page 23: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Provate senza arrayProvate senza array

23

Page 24: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Provate con gli array…Provate con gli array…

24

Page 25: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Provate con gli array…Provate con gli array…

25

Page 26: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Sequenza: Sequenza: possibile soluzionepossibile soluzione

26

Page 27: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Sequenza: Sequenza: possibile soluzionepossibile soluzione

27

E se ora volessi 100 numeri?

Page 28: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Sequenza: Sequenza: possibile soluzionepossibile soluzione

28

E se ora volessi 100 numeri?

Page 29: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

29

• 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 "Generalizziamo" con la direttiva ##definedefine

Page 30: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Sequenza con Sequenza con definedefine

30

Page 31: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Sequenza con Sequenza con definedefine

31

E se ora volessi 17 numeri?

Page 32: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Sequenza con Sequenza con definedefine

32

E se ora volessi 17 numeri?

Page 33: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

33

• 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 stringheLe stringhe

Page 34: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Problema: inserisci nomeProblema: inserisci nome

34

Page 35: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

35

Stringhe e caratteriStringhe 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

Page 36: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

scanf: stringhe Vs charscanf: stringhe Vs char

36

Page 37: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Aprile 2015.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Fonti per lo studio + Fonti per lo studio + CreditsCredits• 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/

37