La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 8 Aprile 2015."— Transcript della presentazione:

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

2 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 2

3 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEObiettivi Gli array, questi sconosciuti Gli array in C Array particolari: le stringhe 3

4 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: [ ]  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

5 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]); > 17vett[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

6 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 6

7 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... La dichiarazione 7

8 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 8

9 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]); 9 *pseudo-codice

10 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++){ } 10 *pseudo-codice

11 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... L’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

12 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++; } 12 Come crescono index e posix? *pseudo-codice

13 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... L’inserimento Problema 1 + Problema 2 for(index = 0, index < N, index++){ scanf(&voto[index]); } 13 *pseudo-codice

14 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... L’inserimento 14

15 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come salvare i voti... La stampa 15

16 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Mettiamo tutto insieme 16

17 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 17

18 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 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 Inizializzazione di un array

19 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 array

20 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 20 Problema: sequenza di interi Mostrare una sequenza di 10 interi nell'ordine inverso rispetto a quello con cui è stata introdotta dall’utente

21 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Provate senza array 21

22 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Provate senza array 22

23 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Provate senza array 23

24 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Provate con gli array… 24

25 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Provate con gli array… 25

26 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza: possibile soluzione 26

27 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza: possibile soluzione 27 E se ora volessi 100 numeri?

28 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza: possibile soluzione 28 E se ora volessi 100 numeri?

29 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 29 In testa al programma: #defineLUNG_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

30 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza con define 30

31 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza con define 31 E se ora volessi 17 numeri?

32 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sequenza con define 32 E se ora volessi 17 numeri?

33 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 stringhe

34 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Problema: inserisci nome 34

35 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 35 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

36 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE scanf: stringhe Vs char 36

37 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/ 37


Scaricare ppt "DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 8 Aprile 2015."

Presentazioni simili


Annunci Google