Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoEloisa Lopez Modificato 11 anni fa
1
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e tipi di dati strutturati Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 9 Agosto 2013
2
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEObiettivi Array n-dimensionali: le matrici Dichiarazione di nuovi tipi di dato Dato strutturati 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 domani… 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 Excursus Matematico – Le Matrici 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 a ij 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 a i,j può essere indicato anche come A[i,j]. La notazione A = (a i,j ) indica che A è una matrice e che i suoi elementi sono denotati con a i,j Gli elementi con i due indici di riga e di colonna uguali, cioè gli elementi della forma a ii costituiscono la diagonale principale della matrice. 5
6
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Excursus Matematico – Le Matrici 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 : = A i,j + B i,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 : = cA i,j. Esempio: 6
7
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Excursus Matematico – Le Matrici 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 Lelemento di posizione (i,j) è dato dalla somma 7
8
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Excursus Matematico – Le Matrici 8
9
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Somma di matrici 37100 13112 58924 0 1 2 0123 2105 7962 5124 + = 58105 812174 1091128 c[i][j] = a[i][j] + b[i][j] #i nclude #define N 3 #define M 4 int main() { int a[N][M], b[N][M], c[N][M]; int i, j; //leggo la prima matrice for (i=0; i<N; i++) for (j=0; j<M; j++) scanf(%d, &a[i][j]); //leggo la seconda matrice for (i=0; i<N; i++) for (j=0; j<M; j++) scanf(%d, &b[i][j]); //calcolo e stampo la somma for (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
10
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 10
11
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Pausa 15 11
12
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come rappresento un pixel? 12 Il pixel è Il colore Come ottengo il verde? Con il formato RGB R: 91 G: 191 B: 33 PIXEL = {R, G, B}
13
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE ??? miastruttura ? Tipi di dati strutturati struct miastruttura { char campo1; float campo2; int campo3[2]; }; campo1 campo2 campo3 13
14
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(). 14
15
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 15
16
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. 16
17
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Numeri complessi 17
18
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 18
19
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. 19
20
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Schedine: dati 20
21
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Schedine: inserimento dati 21
22
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Schedine: copia valori 22
23
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Schedine: stampa dei risultati 23
24
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). 24
25
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 25 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
26
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 Credits Vito Perrone, Daniele Braga 26
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.