La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Array n-dimensionali e tipi di dati strutturati

Presentazioni simili


Presentazione sul tema: "Array n-dimensionali e tipi di dati strutturati"— Transcript della presentazione:

1 Array n-dimensionali e tipi di dati strutturati
Process synchronization Operating System Array n-dimensionali e tipi di dati strutturati Marco D. Santambrogio – Ver. aggiornata al 8 Aprile 2016 © 2005 William Fornaciari

2 Logistica Laboratori Lunedì (3.30pm – 6pm) Giovedì (2pm – 4pm)
EG7 (No portatili e basta) L (portatili) Giovedì (2pm – 4pm) EG7 (i 40 del progetto + 1)

3 Ma prima…

4 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

5 Le stringhe 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'}; d r o w \0

6 Problema: inserisci nome

7 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

8 scanf: stringhe Vs char

9 Tornando ad oggi…

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

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

12 Array a più dimensioni 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…

13 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 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)

14 Le Matrici: gli elementi
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.

15 Le Matrici: somma (A + B)i,j: = Ai,j + Bi,j
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

16 Somma di matrici c[i][j] = a[i][j] + b[i][j] #include <stdio.h>
#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 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; c[i][j] = a[i][j] + b[i][j] 1 2 3 3 7 10 1 11 2 5 8 9 24 1 2 + 2 1 5 7 9 6 4 1 2 = 5 8 10 12 17 4 9 11 28 1 2 16

17 Le Matrici: 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.

18 Le Matrici: moltiplicazione tra 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 L’elemento di posizione (i,j) è dato dalla somma

19 Le Matrici: moltiplicazione - esempio

20 Prodotto di matrici 1 2 3 4 #define N 3 #define M 4 #define L 5 .....
1 2 3 4 1 2 3 2 1 4 3 7 9 6 5 11 8 3 7 10 1 11 2 5 8 9 24 c[1][2] =∑(a[1][k]*b[k][2]), con k = 0, ..., 3 1 1 * 2 2 3 1 2 3 4 #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”); 1 2 20

21 Come rappresento un pixel?
Il pixel è Il colore Come ottengo il verde? Con il formato RGB R: 91 G: 191 B: 33 PIXEL = {R, G, B}

22 Tipi di dati strutturati: pixel
struct pixel{ char G; char R; char B; };

23 Tipi di dati strutturati
struct miastruttura { char campo1; float campo2; int campo3[2]; }; ? miastruttura campo1 campo2 campo3

24 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().

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

26 Numeri complessi: problema
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.

27 Numeri complessi: completo

28 Numeri complessi: dati

29 Numeri complessi: Input

30 Numeri complessi: calcolo

31 Numeri complessi: Struct != Typedef

32 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

33 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 dell’anno 2010 Quindi, visualizza queste giocate.

34 Schedine: dati

35 Schedine: inserimento dati

36 Schedine: copia valori

37 Schedine: stampa dei risultati

38 Problemi di fine giornata…
Si scriva un programma che visualizzi gli istogrammi verticalmente: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

39 Fonti per lo studio + Credits
Informatica arte e mestiere, S. Ceri, D. Mandrioli, L. Sbattella, McGrawHill Credits Vito Perrone, Daniele Braga


Scaricare ppt "Array n-dimensionali e tipi di dati strutturati"

Presentazioni simili


Annunci Google