Programmazione Procedurale in Linguaggio C++

Documenti analoghi
Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Tecnologie di Sviluppo per il Web

Programmazione Procedurale in Linguaggio C++

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Elementi di Informatica A. A. 2016/2017

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

Concetto di Funzione e Procedura METODI in Java

Strategie di programmazione

Introduzione al linguaggio C Puntatori

Il problema dello zaino

Esercizi C sui tipi definiti dall utente

Funzioni, Stack e Visibilità delle Variabili in C

Corso di Fondamenti di Informatica Tipi strutturati: Strutture typedef Anno Accademico 2008/2009 Francesco Tortorella

Strutture Dati. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Strutture Dati 1 / 16

Linguaggio C - sezione dichiarativa: costanti e variabili

Esercizi di Algoritmi e Strutture Dati

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Programmazione Orientata agli Oggetti in Linguaggio Java

Gestione di files Motivazioni

Implementazione dell albero binario in linguaggio C++

Esercizi. La funzione swapint() primo tentativo

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Lezione 6 Introduzione al C++ Mauro Piccolo

1) definizione di una rappresentazione 2) specificazione di un algoritmo (dipendente dalla rappresentazione) 3) traduzione in un linguaggio

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Programmazione Procedurale in Linguaggio C++

C: panoramica. Violetta Lonati

Istruzioni semplici e strutturate

Lezione 8 Struct e qsort

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Costanti e Variabili

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2009/2010

Definizione di classi. Walter Didimo

Programmazione Orientata agli Oggetti in Linguaggio Java

Capitolo 10 - Strutture

Università di Roma Tor Vergata L12-1

Programmazione Orientata agli Oggetti in Linguaggio Java

Linguaggio C. tipi di dati definiti dall utente. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Tecnologie di Sviluppo per il Web

Introduzione alla programmazione in C++

Introduzione ai Calcolatori Elettronici

Funzioni, puntatori, strutture. Lab. Calc. AA 2006/07

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Array. Anno Accademico 2010/2011 Francesco Tortorella

Funzioni di libreria. Richiedono tutte. #include <math.h> fabs(x) sqrt(x) pow(x,a) exp(x) log(x)

Reti di calcolatori Introduzione al corso

Calcolatori Elettronici Lezione A4 Programmazione a Moduli

Struttura dei programmi C

uguale livello gerarchico non vi sono funzioni più importanti di altre main main

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

#include <iostream> // libreria che gestisce flusso di input e output. using namespace std; // uso di librerie standard del C++

Tecnologie di Sviluppo per il Web

nome (lista_parametri) Funzioni funzioni predefinite: sqrt(x) log(x) usare queste funzioni significa: specificare il valore degli argomenti

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Laboratorio di programmazione

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

Modulo 2: Strutture fondamentali della programmazione Java

Linguaggio C++ Linguaggi di terza generazione

Programmazione Orientata agli Oggetti in Linguaggio Java

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

Tecnologie di Sviluppo per il Web

Qualsiasi programma in C++ segue lo schema:

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Sottoprogrammi: astrazione procedurale

Un esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore)

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

Ordinamento. Lorenzo Donatiello,Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna

Programmazione Orientata agli Oggetti in Linguaggio Java

Tipi di dato semplici

Tipi di dato. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Linguaggio C: le funzioni. Introduzione e sintassi

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

Array k-dimensionali

Stringhe e tipi di dati strutturati

Esercitazione 11. Liste semplici

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Programmazione Orientata agli Oggetti in Linguaggio Java

Dati aggregati. Violetta Lonati

Aggregati di dati eterogenei: il tipo struct. Esercizi risolti

Programmazione in Python. Moreno Marzolla

Transcript:

Programmazione Procedurale in Linguaggio C++ Tipi Strutturati Parte 3 Record versione 2.1 Questolavoroè concessoin uso secondoi termini di unalicenzacreative Commons (vedi ultima pagina) G. Mecca Università della Basilicata mecca@unibas.it Tipi Strutturati: Record >> Sommario Sommario Introduzione Dichiarazione di Record (o Strutture ) Descrizione del Modello Sintassi e Semantica Utilizzo dei Record (o Strutture ) Sintassi e Semantica Nidificazione Nidificazione e Passaggio dei Parametri 2

Tipi Strutturati: Record >> Introduzione Introduzione Record (o Strutture ) funzionalità dei linguaggi di programmazione che consente di rappresentare in un prg. oggetti attraverso varie componenti (variabili) Differenze nell uso un array serve a rappresentare una collezione di dati tutti dello stesso tipo un record serve a rappresentare un unico dato con struttura complessa 3 Tipi Strutturati: Record >> Introduzione Introduzione Differenze con gli array in un record, le componenti possono non essere dello stesso tipo ogni componente ha un nome (identificatore) e non un indice intero gli array sono una funzionalità essenziale dei linguaggi di programmazione procedurali i record non sono essenziali (in alcuni linguaggi, es: FORTRAN 77, non esistono) 4

Tipi Strutturati: Record >> Introduzione Introduzione Principale utilità dei record semplificazione del codice (dichiarazione di meno variabili, minor numero di parametri) maggiore leggibilità del codice (le variabili che rappresentano un oggetto sono raggruppate e quindi meglio identificabili) Un esempio: equazioni di II grado >> equazioni4lib.h >> equazioni4lib.cpp >> equazioni4.cpp un equazione di II grado richiede 3 numeri 5 Tipi Strutturati: Record >> Dichiarazione di Record Dichiarazione di Record Processo a due passi I passo: descrivo il modello del record che voglio utilizzare II passo: utilizzo il modello come nuovo tipo di dato per dichiarare variabili Modello del record descrizione della struttura del record può essere utilizzato dovunque sia previsto un tipo di dato in aggiunta a quelli di base 6

Tipi Strutturati: Record >> Dichiarazione di Record Dichiarazione di Record: Esempi struct equazione { float a, b, c; ; equazione eq1, eq2; struct partita { string squadracasa, squadratrasferta; int golcasa, goltrasferta; char segno; ; partita partite[n]; descrizione del modello di record dichiarazione di 2 variabili secondo il modello descrizione del modello di record dichiarazione di un array di variabili secondo il modello 7 Tipi Strutturati: Record >> Dichiarazione di Record Descrizione del Modello di Record Sintassi struct <nome> {<elencoattributi>; Dove ATTENZIONE: errore frequente <nome> è un identificatore <elencoattributi> è l elenco delle componenti del record, detti attributi (o campi ) una lista di dichiarazioni del genere <tipoattributo> <nomeattributo>; 8

Tipi Strutturati: Record >> Dichiarazione di Record Descrizione del Modello di Record Semantica la descrizione del modello diventa un nuovo identificatore di tipo si aggiunge ai tipi di base (int, float, char, ecc.) e ai tipi predefiniti (string, ofstream ecc.) Di conseguenza può essere utilizzato per dichiarare variabili, costanti e parametri 9 Tipi Strutturati: Record >> Dichiarazione di Record Dichiarazione delle Variabili Sintassi ordinaria <nomemodello> <nomevar>; Semantica ha l effetto di dichiarare un numero di variabili pari agli attributi del modello più una variabile per il record nel suo complesso nome delle variabili costituito da due parti ovvero: <nomevar>.<nomeattributo> 10

Tipi Strutturati: Record >> Dichiarazione di Record Dichiarazione delle Variabili Esempio #99 struct equazione { float a, b, c; ; #101 #102 #103 eq1 eq1.a eq1.b eq1.c eq2.a equazione eq1, eq2; #104 #105 eq2 eq2.b eq2.c #106 in totale: 8 variabili 11 Tipi Strutturati: Record >> Dichiarazione di Record Dichiarazione di Record Attenzione in questo caso avrei potuto anche dichiarare due array (componenti dello stesso tipo) Esempio float eq1[3], eq2[3]; a quale coefficiente corrisponde eq1[0]? (a, b o c) a quale coefficiente corrisponde eq1[1]? (a, b o c) a quale coefficiente corrisponde eq1[2]? (a, b o c) E una soluzione metodologicam. inappropriata 12

Tipi Strutturati: Record >> Dichiarazione di Record Dichiarazione delle Variabili Esempio struct partita { string squadracasa; #99 string squadratrasferta; #101 int goalcasa; #102 int goaltrasferta; #103 char segno; #104 ; #105 p p.squadracasa p.squadratrasferta p.goalcasa p.goaltrasferta p.segno partita p; in totale: 6 variabili 13 Tipi Strutturati: Record >> Dichiarazione di Record Dichiarazione delle Variabili Un annotazione importante differenza fondamentale tra descrizione del modello e dichiarazione (di var. o param.) la descrizione del modello NON produce effetti sulla memoria, la dichiarazione sì la descrizione del modello ha solo l effetto di rendere il modello un nuovo tipo di dato ATTENZIONE: Errore frequente la descrizione del modello deve finire con ; 14

Tipi Strutturati: Record >> Dichiarazione di Record Dichiarazione delle Variabili Inizializzazione anche in questo caso è possibile inizializzare gli attributi alla dichiarazione Sintassi <modello> <nomevar> = {<listavalori>; Dove <listavalori> è un elenco di valori di tipo opportuno, uno per ogni attributo del record, separati da virgole 15 Tipi Strutturati: Record >> Dichiarazione di Record Dichiarazione delle Variabili Esempio equazione eq = {5, 2, 5; partita p = { Juventus, Inter, 4, 0, 1 ; 16

Tipi Strutturati: Record >> Utilizzo di Record Utilizzo dei Record Regola generale come gli array, di norma le operazioni sui record si effettuano attributo per attributo ovvero lavorando singolarmente sulle variabili che rappresentano gli attributi Alcune eccezioni istruzioni di assegnazione utilizzo nei sottoprogrammi 17 Tipi Strutturati: Record >> Utilizzo di Record Utilizzo dei Record Istruzioni di assegnazione attributo per attributo oppure tutto in una volta Esempio struct equazione { float a, b, c; ; void main() { equazione eq1 = {5, 2, 5; equazione eq2; eq2 = eq1; equivalente a: eq2.a = eq1.a; eq2.b = eq1.b; eq2.c = eq1.c; 18

Tipi Strutturati: Record >> Utilizzo di Record Utilizzo dei Record Passaggio dei parametri la variabile che rappresenta il record nel suo complesso può essere usata come argomento per i sottoprogrammi Parametro di tipo record tanti parametri, uno per ciascun attributo Differenza con gli array passaggio dei parametri avviene in modo ordinario, sia per valore che per riferimento 19 Tipi Strutturati: Record >> Utilizzo di Record Utilizzo dei Record Passaggio dei parametri standard nello spazio di memoria del parametro viene copiato il valore del record argomento, attributo per attributo Passaggio dei parametri per riferimento nello spazio di memoria del parametro viene copiato l indirizzo del primo registro del record utilizzato come argomento 20

Tipi Strutturati: Record >> Utilizzo di Record Esempio: Equazioni void leggidatiequazione (equazione &eq) { cout << "Inserisci i coefficienti dell'equazione \n"; cin >> eq.a; cin >> eq.b; cin >> eq.c; return; void stampadatiequazione (equazione eq) { cout << "------------ Equazione --------------\n"; cout << eq.a << "x2+"<< eq.b <<"x+" << eq.c << "=0 \n"; return; float discriminante (equazione eq) { return eq.b*eq.b-4*eq.a*eq.c; parametro per riferimento parametri standard 21 Tipi Strutturati: Record >> Utilizzo di Record Esempio: Equazioni void leggidatiequazione (equazione &eq) { cout << "Inserisci coeff."; cin >> eq.a; cin >> eq.b; cin >> eq.c; return; #99 #101 #102 #103 #104 eq1 eq2 eq1.a eq1.b eq1.c eq2.a eq2.b 2 5 2 void main() { equazione eq1, eq2; leggidatiequazione(eq1); leggidatiequazione(eq2); if (discriminante(eq1)>=0 && discriminante(eq2)>=0) { #105 #106 eq eq2.c 22

Tipi Strutturati: Record >> Utilizzo di Record Esempio: Equazioni #99 float discriminante (equazione eq) { return eq.b*eq.b-4*eq.a*eq.c; #101 #102 #103 eq1 eq1.a eq1.b eq1.c eq2.a 2 5 2 1 #104 eq2 eq2.b 2 void main() { equazione eq1, eq2; leggidatiequazione(eq1); leggidatiequazione(eq2); if (discriminante(eq1)>=0 && discriminante(eq2)>=0) { #105 #106 #107 #108 eq eq2.c eq.a eq.b eq.c 1 2 5 2 23 Tipi Strutturati: Record >> Utilizzo di Record Utilizzo dei Record Risultato delle funzioni le funzioni possono restituire come risultato dei record (ulteriore differenza con gli array) Esempio: calcolo delle radici reali struct radicireali { float x, y; ; radicireali calcolaradici (equazione eq) { radicireali rr; rr.x=(-eq.b+sqrt(discriminante(eq)))/(2*eq.a); rr.y=(-eq.b-sqrt(discriminante(eq)))/(2*eq.a); return rr; NOTA: una funzione del genere può essere usata solo in una assegnazione del tipo: radicireali radici1; radici1 = calcolaradici(eq1) 24

Tipi Strutturati: Record >> Utilizzo di Record Utilizzo dei Record Per il resto le operazioni sui record (lettura, stampa ecc.) vengono fatte attributo per attributo Differenza rispetto agli array nel caso degli array, è possibile utilizzare cicli per rendere più compatto il codice nel caso dei record questo vantaggio non esiste; le istruzioni devono essere scritte per ciascun attributo separatamente 25 Tipi Strutturati: Record >> Utilizzo di Record Utilizzo di Record Record e array i record possono essere combinati con gli array per rappresentare collezioni di dati con struttura complessa Esempio: Partite di Serie A dati i risultati di una giornata di serie A, calcolare e stampare i segni in schedina un array di 9 partite 26

Tipi Strutturati: Record >> Dichiarazione di Record Esempio: Partite di Serie A const int N=9; struct partita { ; string squadracasa; string squadratrasf; int goalcasa; int goaltrasferta; char segno; partita partite[n]; in totale: 55 variabili -1 array -9 componenti -5 attributi per componente #99 #101 #102 #103 #104 #140 #141 #142 #143 #144 #145 partite partite[0] partite[8] partite[0].squadracasa partite[0].squadratrasf partite[0].goalcasa partite[0].goaltrasferta partite[0].segno partite[8].squadracasa partite[8].squadratrasf partite[8].goalcasa partite[8].goaltrasferta partite[8].segno 27 Tipi Strutturati: Record >> Utilizzo di Record Esempio: Partite di Serie A Nota la definizione del modello di record partita, così come la costante N, devono essere dichiarati a livello di file visibilità globale, perché vengono usati sostanzialmente in tutti i moduli del programma questo non contravviene all indicazione di non usare variabili globali, visto che non si tratta di variabili 28

Tipi Strutturati: Record >> Utilizzo di Record Esempio: Partite di Serie A struct partita { string squadracasa, squadratrasferta; int goalcasa, goaltrasferta; char segno; ; const int N=9; void leggipartite(partita partite[n]); void stampapartite(partita partite[n]); void calcolasegni(partita partite[n]); void main() { partita partite[n]; leggipartite(partite); calcolasegni(partite); stampapartite(partite); 29 Tipi Strutturati: Record >> Utilizzo di Record Esempio: Partite di Serie A void leggipartite(partita partite[n]){ int i; for (i=0; i<n; i++) { leggipartita(partite[i]); return; void leggipartita(partita &p){ cout << "Squadra in casa : "; getline(cin, p.squadracasa); cout << "Squadra in trasferta : "; getline(cin, p.squadratrasferta); cout << "Goal squadra in casa : "; cin >> p.goalcasa; cout << "Goal squadra in trasferta: "; cin >> p.goaltrasferta; cin.ignore(); return; ha l effetto di chiamare N volte la procedura leggipartita i=0 leggipartita(partite[0]) i=1 leggipartita(partite[1]) necessaria per rimuovere il carattere \n dal flusso prima della lettura della stringa successiva 30

Tipi Strutturati: Record >> Dichiarazione di Record Esempio: Partite void leggipartita(partita &p){ getline(cin, p.squadracasa); partite #102 partite[0] partite[0].goalcasa 0 void leggipartite #103 partite[0].goaltrasferta 0 (partita partite[n]){ #104 partite[0].segno int i; for (i=0; i<n; i++) { #140 partite[8].squadracasa leggipartita(partite[i]); partite[8] return; #144 partite[8].segno #145 partite void main() { #146 i 01 partita partite[n]; #147 p #105 leggipartite(partite); 31 #99 #101 partite[0].squadracasa Juve partite[0].squadratrasf Inter Tipi Strutturati: Record >> Utilizzo di Record Esempio: Partite di Serie A void calcolasegni(partita partite[n]){ int i; for (i=0; i<n; i++) { if (partite[i].goalcasa > partite[i].goaltrasferta) { partite[i].segno='1'; else { if (partite[i].goalcasa<partite[i].goaltrasferta) { partite[i].segno='2'; else { partite[i].segno='x'; return; 32

Tipi Strutturati: Record >> Utilizzo di Record Esempio: Partite di Serie A void stampapartite(partita partite[n]){ int i; for (i=0; i<n; i++) { stampapartita(partite[i]); return; void stampapartita(partita p){ cout << p.squadracasa << "- << p.squadratrasferta << " \t"; cout << p.goalcasa << "-" << p.goaltrasferta << " \t" << p.segno << endl; return; ha l effetto di chiamare N volte la procedura stampapartita i=0 stampapartita(partite[0]) i=1 stampapartita(partite[1]) 33 Tipi Strutturati: Record >> Dichiarazione di Record Esempio: Partite void stampapartita(partita p){ void stampapartite (partita partite[n]){ int i; for (i=0; i<n; i++) { stampapartita(partite[i]); return; void main() { partita partite[n]; stampapartite(partite); #146 #147 #148 #149 #150 Juve Inter #151 p.segno X 34 #99 #101 #102 #103 #104 #140 #144 #145 partite partite[0] partite[8] partite i p partite[0].squadratrasf partite[0].goalcasa partite[0].goaltrasferta partite[0].segno partite[8].squadracasa partite[8].segno partite[0].squadracasa Juve p.squadracasa p.squadratrasf p.goalcasa p.goaltrasferta Inter 0 0 X 0 0 0

Tipi Strutturati: Record >> Nidificazione Nidificazione Due categorie di tipi di dato tipi di base (int, float, double, char, bool) e assimilati (string, ifstream, ofstream) tipi strutturati Tipi strutturati costruiti utilizzando array e record array e record possono essere liberamente nidificati 35 Tipi Strutturati: Record >> Nidificazione Nidificazione Un esempio sovrapposizione di rettangoli Rettangolo oggetto rappresentato da due punti nel piano cartesiano Punto oggetto rappresentato da due coordinate reali nel piano cartesiano 36

Tipi Strutturati: Record >> Nidificazione Esempio: Sovrapp. di Rettangoli struct punto { float x, y; ; #99 #101 r1 r1.v1 r1.v1.x r1.v1.y struct rettangolo { punto v1, v2; ; #102 #103 #104 r1.v2 r2.v1 r1.v2.x r1.v2.y r2.v1.x #105 r2 r2.v1.y rettangolo r1, r2; #106 #107 r2.v2 r2.v2.x r2.v2.y #108 record che contiene al suo interno due record >> rettangoli2.cpp 37 Tipi Strutturati: Record >> Nidificazione Nidificazione Nidificazioni profonde sono possibili array e record che al loro interno contengono altri record ed altri array utile ad esempio per rappresentare collezioni (array) di oggetti (record) i quali contengono al loro interno ulteriori oggetti (record) o collezioni (array) di valori in questo caso l unica attenzione da prestare è al meccanismo dei nomi delle variabili 38

Tipi Strutturati: Record >> Nidificazione Nidificazione In particolare per i nomi delle componenti degli array: [ ] per i nomi degli attributi dei record:. Esempio partite del campionato di serie A con risultato squadre complete di formazioni data della partita 39 Tipi Strutturati: Record >> Nidificazione Nidificazione struct giocatore { string nome; int maglia; ; struct squadra { string nome; giocatore formazione[11]; ; struct data { int giorno, mese, anno; ; struct partita { squadra sq1, sq2; int goal1, goal2; data d; ; partita p[9]; 40

Tipi Strutturati: Record >> Nidificazione #10 p[0].sq1.nome #11 p[0].sq1.formazione[0] #12 p[0].sq1 #13 #14 p[0].sq1.formazione[10] #15 #16 p[0].sq2.nome #17 p[0].sq2.formazione[0] #18 p[0] p[0].sq2 #19 #20 p[0].sq2.formazione[10] #21 p[0].sq1.formazione[0].nome p[0].sq1.formazione[0].maglia p[0].sq1.formazione[10].nome p[0].sq1.formazione[10].maglia p[0].sq2.formazione[0].nome p[0].sq2.formazione[0].maglia p[0].sq2.formazione[10].nome p[0].sq2.formazione[10].maglia #22 p[0].goal1 #23 p[0].goal2 #24 p[0].data.giorno #25 p[0].data p[0].data.mese #26 p[0].data.anno #27 p[1] p[1].sq1 p[1].sq1.nome #28 Juventus Buffon 1 Nedved 11 Inter Toldo 1 Recoba 20 4 0 11 1 2003 Lazio 41 Tipi Strutturati: Record >> Nidificazione Nidificazione e Passaggio dei Param. Attenzione in questi casi NON conviene passare i dati per valore: la copia richiederebbe tempo Nel caso degli array il passaggio avviene comunque per riferimento Nel caso dei record possono esserci problemi 42

Tipi Strutturati: Record >> Nidificazione Nidificazione e Passaggio dei Param. Esempio: squadra la variabile s non dovrebbe mai essere passata per valore per evitare che venga effettuata la copia di tutte le componenti dell array struct squadra { string nome; string giocatori[30]; ; void leggi(squadra &s); void stampa (squadra &s); void main() { squadra s; leggi (s); stampa (s); 43 Tipi Strutturati: Record >> Nidificazione Nidificazione e Passaggio dei Param. NOTA questo vale solo nel caso di record che contengono array e solo se gli array hanno un numero alto di componenti in tutti gli altri casi bisogna scegliere il tipo di parametro più appropriato (standard o per riferimento) 44

Tipi Strutturati: Record >> Sommario Riassumendo Record dichiarare oggetti con struttura complessa Dichiarazione descrizione del modello (ATTENZIONE) dichiarazione delle variabili Utilizzo i vantaggi principali: dichiarazioni e parametri Nidificazione profonda Passaggio dei Parametri 45 Termini della Licenza Termini della Licenza This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Questo lavoro viene concesso in uso secondo i termini della licenza Attribution-ShareAlike di Creative Commons. Per ottenere una copiadella licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. 46