DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio...

26
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati Stringhe e tipi di dati strutturati strutturati Marco D. Santambrogio – [email protected] Ver. aggiornata al 9 Agosto 2013

Transcript of DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio...

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Stringhe e tipi di dati Stringhe e tipi di dati strutturatistrutturati

Marco D. Santambrogio – [email protected]. aggiornata al 9 Agosto 2013

Page 2: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

ObiettiviObiettivi

• Array n-dimensionali: le matrici• Dichiarazione di nuovi tipi di dato• Dato strutturati

2

Page 3: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

ImmaginiImmagini

3

Come si rappresenta?Creiamo una griglia(aka matrice)

Ma cosa contiene la matrice?I punti rappresentati, ad esempio, come int

100100

100

57

17 11 07

28 09 12

Osservazioni

Come rappresento i colori?Lo vedremo domani…

Come aumento la risoluzione?

Page 4: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

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 202030 variabili di tipo float

(12.000!)

• Oppure a quattro dimensioni, ecc…

Array a più dimensioniArray a più dimensioni

Page 5: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Excursus Matematico – Le Excursus Matematico – Le MatriciMatrici

• In matematica, una matrice è uno schieramento rettangolare di oggetti (di solito numeri), organizzati in righe (orizzontali) e colonne (verticali)

• In generale, una matrice ha m righe e n colonne, con m e n interi positivi fissati. Spesso una matrice è descritta indicando con aij il generico elemento posizionato alla riga i-esima e alla colonna j-esima

• I vettori si possono considerare matrici con una sola riga o una sola colonna (detti più precisamente vettore riga e vettore colonna)

• Se la matrice si chiama A, l'elemento ai,j può essere indicato anche come A[i,j]. La notazione A = (ai,j) indica che A è una matrice e che i suoi elementi sono denotati con ai,j

• Gli elementi con i due indici di riga e di colonna uguali, cioè gli elementi della forma aii costituiscono la diagonale principale della matrice.

5

Page 6: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Excursus Matematico – Le Excursus Matematico – Le MatriciMatrici

Somma• Due matrici A e B si possono sommare se hanno le stesse

dimensioni• La loro somma A + B è definita come la matrice i cui elementi

sono ottenuti sommando i corrispettivi elementi di A e B. Formalmente:(A + B)i,j: = Ai,j + Bi,j Per esempio

Moltiplicazione per uno scalare • È un'operazione che, data una matrice A ed un numero c

(detto scalare), costruisce una nuova matrice cA, il cui elemento è ottenuto moltiplicando l'elemento corrispondente di A per c(cA)ij: = cAi,j. Esempio:

6

Page 7: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Excursus Matematico – Le Excursus Matematico – Le MatriciMatrici

Prodotto riga per colonna • La moltiplicazione tra due matrici A e B è un'operazione più

complicata delle precedenti. A differenza della somma, non è definita sommando semplicemente gli elementi aventi lo stesso posto La definizione di moltiplicazione che segue è motivata dal fatto

che una matrice modellizza una applicazione lineare, e in questo modo il prodotto di matrici corrisponde alla composizione di applicazioni lineari

• La moltiplicazione è definita soltanto se il numero di righe di B coincide con il numero n di colonne di A. Il risultato è una matrice con lo stesso numero di righe di A e lo stesso numero di colonne di B

• L’elemento di posizione (i,j) è dato dalla somma

7

Page 8: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Excursus Matematico – Le Excursus Matematico – Le MatriciMatrici

8

Page 9: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Somma di matriciSomma di matrici

3 7 10 0

1 3 11 2

5 8 9 24

0

1

2

0 1 2 3

2 1 0 5

7 9 6 2

5 1 2 4

+

=

5 8 10 5

8 12 17 4

10 9 11 28

c[i][j] = a[i][j] + b[i][j]#include <stdio.h>#define N 3#define M 4int main() { int a[N][M], b[N][M], c[N][M];

int i, j;//leggo la prima matricefor (i=0; i<N; i++) for (j=0; j<M; j++) scanf(“%d”, &a[i][j]);

//leggo la seconda matricefor (i=0; i<N; i++) for (j=0; j<M; j++) scanf(“%d”, &b[i][j]); //calcolo e stampo la sommafor (i=0; i<N; i++){ for (j=0; j<M; j++){

c[i][j]=a[i][j]+b[i][j]; printf(“%d “, c[i][j]);

} printf(“\n”);}return 0;

}

0

1

2

0

1

2

9

Page 10: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Prodotto di matriciProdotto 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”);

}

3 7 10 0

1 3 11 2

5 8 9 24

0

1

2

0 1 2 3

3

*

0

1

2

c[1][2] =∑(a[1][k]*b[k][2]), con k = 0, ..., 3

2 1 0 4 3

7 9 6 1 2

5 1 2 5 0

11 0 3 8 7

0 1 2 3 4

18+22+6

0

1

2

0 1 2 3 4

10

Page 11: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Pausa 15’Pausa 15’

11

Page 12: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Come rappresento un Come rappresento un pixel?pixel?

12

Il pixel è Il coloreCome ottengo il verde?Con il formato RGBR: 91G: 191B: 33

PIXEL = {R, G, B}

Page 13: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

? ??

miastruttura ?

Tipi di dati strutturatiTipi di dati strutturati

struct miastruttura{

char campo1;float campo2;int campo3[2];

};

13

Page 14: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Definire un nuovo tipoDefinire 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().

14

Page 15: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

? ??

ilMioRecord

?

Definire un nuovo tipoDefinire 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.56 23A

ilMioRecord

45

campo1 campo2 campo3

15

Page 16: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Numeri complessi: Numeri complessi: problemaproblema• L’utente inserisce due numeri

complessi (parte reale e parte immaginaria) e l’elaboratore esegue l’operazione di somma Es: 3+4i + 5-6i = 8-2i

• Il programma chiede all’utente se

vuole calcolare un’altra somma. Se l’utente inserisce il carattere ‘q’ il programma termina, altrimenti ricomincia daccapo.

16

Page 17: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Numeri complessiNumeri complessi

17

Page 18: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Numeri complessi: noteNumeri 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

18

Page 19: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Schedine: problemaSchedine: 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 dell’anno 2012

• Quindi, visualizza queste giocate.

19

Page 20: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Schedine: datiSchedine: dati

20

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Schedine: inserimento datiSchedine: inserimento dati

21

Page 22: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Schedine: copia valoriSchedine: copia valori

22

Page 23: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Schedine: stampa dei Schedine: stampa dei risultatirisultati

23

Page 24: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Squadra di calcio: Squadra di calcio: problemaproblema• 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).

24

Page 25: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

25

Problemi di fine giornata…Problemi di fine giornata…

• Si scriva un programma che visualizzi gli istogrammi verticalmente:

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 19 3 15 7 11 9 13 5 17 1 0 1 2 3 4 5 6 7 8 9

Page 26: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al.

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

• Credits Vito Perrone, Daniele Braga

26