La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – Ver. aggiornata al.

Presentazioni simili


Presentazione sul tema: "DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – Ver. aggiornata al."— Transcript della presentazione:

1 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 21 Marzo 2013

2 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Info sui Labs http://tinyurl.com/IEIMlabextra Ricordate di portare un adattatore! Gli esercizi, tolto il primo lab, saranno diversi tra il Lunedì ed il Giovedì Dove: EG 7 Quando Lunedì: 15.30 – 18.30 Giovedì: 13.00 – 16.00 2

3 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEImmagini 3 Come si rappresenta? Creiamo una griglia (aka matrice) Ma cosa contiene la matrice? I punti rappresentati, ad esempio, come int 100 57 17 11 07 28 09 12 Osservazioni Come rappresento i colori? Lo vedremo dopo… STRUCT Come aumento la risoluzione?

4 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 4 Gli array a 1D realizzano i vettori, quelli a 2D realizzano le matrici, …e così via Dichiarazione: int A[20][30]; A è una matrice di 20 30 elementi interi (600 variabili distinte) float F[20][20][30]; F è una matrice 3D di 20 20 30 variabili di tipo float (12.000!) Oppure a quattro dimensioni, ecc… Array a più dimensioni

5 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Prodotto di matrici #define N 3 #define M 4 #define L 5..... for (i=0; i<N; i++){ for (j=0; j<L; j++){ c[i][j] = 0; for (k=0; k<M; k++) c[i][j] = c[i][j]+(a[i][k]*b[k][j]); printf(%d, c[i][j]); } printf(\n); } 37100 13112 58924 0 1 2 0123 3 * 0 1 2 c[1][2] = ( a[1][k]*b[k][2]), con k = 0,..., 3 21043 79612 51250 110387 01234 18+ 22+6 0 1 2 01234 5

6 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEObiettivi Array particolari: le stringhe Dichiarazione di nuovi tipi di dato Dato strutturati 6

7 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 7 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ò larray stringa ha 5 elementi (non 4): Dichiarazione equivalente: char stringa[] {'w', 'o', 'r', 'd', '\0'}; drow \0 Le stringhe

8 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Problema: inserisci nome 8

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

10 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 10 char str1[32]; / str1 ha spazio per 32 char. / char str2[64]; / str2 ha spazio per 64 char. / / inizializza str1 con la stringa "alfa" / strcpy(str1, "alfa"); / str1 contiene "alfa" / / copia str1 in str2 / strcpy(str2, str1); / str2 contiene "alfa" / / lunghezza di str1 / x = strlen(str1); / x assume valore 4 / / scrivi str1 su standard output / printf("%s", str1); / scrive str1 su stdout / / leggi str1 da standard input / scanf("%s", str1); / str1 riceve da stdin / Operazioni su stringhe

11 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 11 char str1[32]; char str2[64]; scanf("%s", str1); > ciao / ora str1 contiene "ciao" / strcpy(str2, str1);/ str2 riceve "ciao" / val = strlen(str2); / val = 4 / printf("%s\n", str2); > ciao/ stampa "ciao" / Attenzione: strlen("") vale 0 ! Operazioni su stringhe

12 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Problema: copia stringhe 12

13 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 13 Il nome dellarray rappresenta lindirizzo del suo primo elemento, perciò quando ci si vuole riferire allintero array nella scanf non si mette il simbolo &! scanf("%s", stringa); Questa scanf legge in input i caratteri fino a quando trova il carattere blank (lo spazio), o linvio Perciò se nel buffer si trova una stringa troppo lunga, essa è memorizzata oltre la fine dell array !!! Ed è un errore grave !!! Particolarità delle stringhe

14 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Problema: non esiste strcpy! 14

15 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 15 E se non ci fosse la funzione strcpy() ? Assegneremmo sempre un carattere alla volta! char s1[N], s2[M]; /* assegnamento di s2, omesso */ int i = 0; while( i <= strlen(s2) && i < N ) { s1[i] = s2[i]; ++i; } N.B. funziona correttamente se s2 è una stringa ben formata (cioè terminata da '\0') e se s1 è sufficientemente grande da contenere i caratteri di s2 (N >= strlen(s2)) strcpy(s1, s2)

16 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 16 Una funzione apposita: strcmp(s1,s2) restituisce un intero confronta le due stringhe fino al \0 char str1[32], str2[64]; int diverse; /*... acquisizione di valori per le stringhe... (codice omesso)*/ diverse = strcmp(str1, str2); if( diverse == 0 ) printf("UGUALI\n"); else if( diverse < 0 ) printf("%s PRECEDE %s\n", str1, str2); else printf("%s SEGUE %s\n", str1, str2); Confrontare due stringhe

17 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Pausa 15 17

18 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come rappresento un pixel? 18 Il pixel è Il colore Come ottengo il verde? Con il formato RGB R: 91 G: 191 B: 33 PIXEL = {R, G, B}

19 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE ??? miastruttura ? Tipi di dati strutturati struct miastruttura { char campo1; float campo2; int campo3[2]; }; campo1 campo2 campo3 19

20 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Definire un nuovo tipo Sinonimi: typedef int Intero; Intero a; int b; typedef char Stringa[10]; Stringa c; char d[10]; Tipi enumerativi: typedef enum {lun,mar,mer,gio,ven,sab,dom} Settimana; Settimana giorno; giorno = lun; giorno = 3; /* 3 equivale a gio */ Non funziona con scanf() e printf(). 20

21 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE ??? ilMioRecord ? Definire un nuovo tipo Tipi strutturati: typedef struct { char campo1; float campo2; int campo3[2]; } Record; Record ilMioRecord; ilMioRecord.campo1 = ' A ' ; ilMioRecord.campo2 = 24.56; ilMioRecord.campo3[0] = 23; ilMioRecord.campo3[1] = 45; 24.5623A ilMioRecord 45 campo1 campo2 campo3 21

22 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Numeri complessi: problema Lutente inserisce due numeri complessi (parte reale e parte immaginaria) e lelaboratore esegue loperazione di somma Es: 3+4i + 5-6i = 8-2i Il programma chiede allutente se vuole calcolare unaltra somma. Se lutente inserisce il carattere q il programma termina, altrimenti ricomincia daccapo. 22

23 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Numeri complessi 23

24 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Numeri complessi: note "%f" stampa un numero float con il segno - se è negativo, senza segno se è positivo "%+f" stampa un numero float con il segno - se è negativo, con il segno+ se è positivo "i" non fa parte degli specificatori di formato 24

25 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Schedine: problema Il programma, partendo da un array di dimensione prefissata che contiene in ogni cella: data della giocata colonna con i tredici segni Copia in un altro vettore solo le giocate dellanno 2012 Quindi, visualizza queste giocate. 25

26 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Schedine: dati 26

27 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Schedine: inserimento dati 27

28 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Schedine: copia valori 28

29 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Schedine: stampa dei risultati 29

30 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Squadra di calcio: problema Il programma, partendo da un array che contiene i dati personali dei calciatori di una squadra, permette di calcolare: totale goal fatti dalla squadra goal fatti dagli attaccanti goal fatti dai centrocampisti goal fatti dai difensori totale goal subiti dalla squadra Il programma inoltre visualizza i dati personali di tutti i giocatori Per ogni giocatore, il programma memorizza: numero di maglia ruolo goal fatti (subiti, se è un portiere). 30

31 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 (No: 5.5.3, 5.5.4 e 5.6) Credits Vito Perrone, Daniele Braga 31


Scaricare ppt "DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – Ver. aggiornata al."

Presentazioni simili


Annunci Google