DATI STRUTTURATI Array bidimensionali o matrici Una matrice
DATI STRUTTURATI: Array bidimensionali o matrici Una matrice è un insieme di valori a ciascuno dei quali sono associati due indici: il primo corrisponde alla riga e il secondo alla colonna. Gli elementi della matrice sono OMOGENEI fra loro, cioè dello stesso tipo. A= B= Il vettore è un caso particolare di matrice ad una sola dimensione. LINK: http: //math. ec. unipi. it/algebra/matric/pagine/introd. htm
DATI STRUTTURATI: Array bidimensionali o matrici DICHIARAZIONE IN C/C++ tipo nome. M [nrighe] [ncolonne] Esempio: int mdati [2] [3] ; indica una matrice di 6 elementi che si possono pensare disposti in 2 righe (numerate da 0 a 1) e 3 colonne (numerate da 0 a 2) E’ possibile riferirsi ad un elemento della matrice conoscendo gli indici: mdati[0][2] è l’elemento della matrice mdati posto nella riga zero e colonna seconda.
DATI STRUTTURATI: Array bidimensionali o matrici La lettura e la stampa di una matrice deve essere eseguita elemento per elemento (come per il vettore) e quindi sempre gestita tramite due cicli annidati(es. due FOR). Normalmente la scansione avviene per righe. Es. CODICE di lettura void leggimatrice() {for (i=o; i<nrighe; i++) for (j=0; j<ncol; j++) cin>> mdati[i][j]; }
Esercizi • Scrivi un sottoprogramma per stampare una matrice. • Data in input una matrice quadrata di ordine n, creare e stampare la matrice trasposta. • Verificare se una matrice quadrata è simmetrica. • In una matrice di numeri interi cercare il valore minimo e la sua posizione. • Data una matrice di numeri interi calcolare la media di ogni colonna e inserirla in un array. • Creare una matrice che contenga la tavola pitagorica di ordine 10. • Cercare un valore in una matrice e se è presente restituirne la posizione.
DATI STRUTTURATI : LE STRUCT Tipo definito dall’utente i cui elementi possono essere eterogenei (di tipo diverso). Introduce un nuovo tipo di dato. Dichiarazione: struct nome_strut { tipo var 1; tipo var 2; . . . tipo vark; }; //Ora posso creare delle variabili di tipo nome_struttura: nome_strut var_struttura;
LE STRUCT Altra possibilità di dichiarazione: struct nome_struttura { tipo var 1; . . . tipo vark; } var_struttura 1, var_struttura 2; Il tipo di ciascuna componente della struct può essere uno qualsiasi fra i tipi standard o anche un tipo definito dall’utente e quindi a sua volta una struct data { int giorno; int mese; int anno; ; }; struct studente { char[20] cognome; char[20] nome ; data_nascita; };
LE STRUCT ØAccesso ai campi: tramite l’operatore “punto”. var_struttura 1. var 1 =. . . ; tipo t = var_struttura 1. var 2; ØAssegnamento di strutture: Per le strutture, a differenza degli array, è` definito l'operatore di assegnamento, ma solo se le variabili sono dello stesso tipo. struct s 1 { int a, b; }; struct s 2 { int a, b; }; . . . s 1 x, y; s 2 z; . . . y = x; ! OK z = x; ! ERRORE: non corrispondenza di tipo.
LE STRUCT ØConfronto tra strutture: non possibile. Occorre considerare i singoli campi delle strutture. Il seguente frammento di codice produce un errore: Ø if (x == y) Occorre considerare i singoli campi delle strutture: if (x. a == z. a && x. b == z. b) n. b. Østrutture diverse possono avere campi con lo stesso nome; Ø i nomi dei campi possono essere gli stessi di variabili e funzioni già utilizzate.
ESERCIZIO 1)Creare una STRUCT "persona" con due campi: nome e numero di telefono. Scrivere un programma che, una volta riempite con i dati necessari tre variabili di tipo "persona", dia le seguenti 3 possibilità: 1. conoscere il nome a partire da un numero di telefono; 2. conoscere il numero di telefono a partire da un nome; 3. stampa l’intera rubrica.
ARRAY DI STRUCT: tabelle Si definisce una struttura e poi si dichiara un array di quel tipo. Esempio: struct studenti { string nome; string cognome; int anno_immatricolazione; }; studenti elenco_studenti[100]; Per accedere ad una struttura specifica indicizzare il nome della struttura: cout << elenco_studenti[2]. cognome stampa il cognome memorizzato nella variabile membro cognome dello studente i cui dati sono nella 3° struttura dell’array (l’indice dell’array parte sempre da 0!).
ESERCIZI 2) Array di struct e funzioni: leggere ‘n’ struct di persone (‘n’ inserito dall’utente) con due campi, nome ed età, e restituire il nome della piu’giovane o di una delle piu’ giovani. Utilizzare una funzione per la lettura dei dati delle struct e una che restituisca l’indice della persona selezionata. 3) Crea un array di record "studente“ (cognome, array contenente i voti della pagella). Presenta all’utente un menu’ con varie possibilita’: • media; • Numero voti insufficienti • voto piu’ alto; • voto piu’ basso; Realizza ciascuna operazione con una sub/funzione. Possibili estensioni dell’esercizio: altre operazioni possibili sono vedere quante volte e’ stato preso un certo voto; fare un grafico dell’andamento dei voti (es. con una matrice di caratteri). Ampliare il record "studente" inserendo anche nome materia
- Slides: 11