Programmazione Procedurale in Linguaggio C++

Documenti analoghi
Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

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

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Elementi di Informatica A. A. 2016/2017

Programmazione Procedurale in Linguaggio C++

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

Programmazione Procedurale in Linguaggio C++

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

Funzioni, Stack e Visibilità delle Variabili in C

Esercizi C sui tipi definiti dall utente

Costanti e Variabili

Istruzioni semplici e strutturate

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

Gestione di files Motivazioni

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

Linguaggio C - sezione dichiarativa: costanti e variabili

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

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

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

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

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

Programmazione Procedurale in Linguaggio C++

Strategie di programmazione

Concetto di Funzione e Procedura METODI in Java

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

Università di Roma Tor Vergata L12-1

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

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Introduzione al linguaggio C Puntatori

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

Implementazione dell albero binario in linguaggio C++

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

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

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

Linguaggio C++ Linguaggi di terza generazione

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

Introduzione alla programmazione in C++

Struttura dei programmi C

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

Definizione di classi. Walter Didimo

Sottoprogrammi: astrazione procedurale

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

Laboratorio di programmazione

Lezione 8 Struct e qsort

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

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

Programmazione Procedurale in Linguaggio C++

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

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

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

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

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

Informatica 3. LEZIONE 2: Sintassi e semantica

array: strumento per costruire rappresentazioni di tipi strutturati omogenei

Array k-dimensionali

Calcolatori Elettronici Lezione A4 Programmazione a Moduli

Appunti, esempi ed esercizi sui linguaggi C/C++

Introduzione a Matlab

Il linguaggio C Strutture

Linguaggio C: le funzioni. Introduzione e sintassi

C: panoramica. Violetta Lonati

Capitolo 10 - Strutture

Aggregati di dati eterogenei: il tipo struct. Esercizi risolti

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Array multidimensionali e stringhe

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

Tipi di dato semplici

Esercizi. La funzione swapint() primo tentativo

Informatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione

Linguaggio C: le funzioni. Introduzione e sintassi

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

Modulo 2: Strutture fondamentali della programmazione Java

La classe std::vector della Standard Template Library del C++

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Qualsiasi programma in C++ segue lo schema:

Esercitazione 11. Liste semplici

Struct, enum, Puntatori e Array dinamici

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Strutture dati e loro organizzazione. Gabriella Trucco

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

Linguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin

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

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)

Dati aggregati. Violetta Lonati

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

Il linguaggio C. Notate che...

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

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

Programmazione ad oggetti

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Trasformare array paralleli in array di record

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Stringhe e tipi di dati strutturati

Linguaggio C Struct e union

Programmazione Procedurale in Linguaggio C++

Transcript:

Programmazione Procedurale in Linguaggio C++ Tipi Strutturati Parte 3 Record G. Mecca M. Samela Università della Basilicata 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 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 Metodologicamente 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 no (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 un equazione di II grado richiede 3 numeri >> equazioni4lib.cpp 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 specificati nel modello più una variabile per il record nel suo complesso nome delle variabili costituito da due parti nome della variabile <nomevar> nome dell attributo <nomeattributo> ovvero: <nomevar>.<nomeattributo> 10

Tipi Strutturati: Record >> Dichiarazione di Record Dichiarazione delle Variabili Esempio #99 struct equazione { float a, b, c; #100 #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 delle Variabili Esempio struct partita { string squadracasa; #99 #100 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 12

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 ; 13 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 14

Tipi Strutturati: Record >> Dichiarazione di Record Dichiarazione delle Variabili Esempio equazione eq = {5, 2, 5 partita p = { Juventus, Inter, 4, 0, 1 15 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 passaggio dei parametri 16

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; 17 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 Differenza con gli array passaggio dei parametri avviene in modo ordinario è possibile sia il passaggio per valore che il passaggio per riferimento 18

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 19 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 20

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; 21 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 22

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 23 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 #100 #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 #100 24

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 25 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); 26

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; necessaria per rimuovere il carattere \n dal flusso prima della lettura della stringa successiva 27 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; 28

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; 29 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 30

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 31 Tipi Strutturati: Record >> Nidificazione Esempio: Sovrapp. di Rettangoli struct punto { float x, y; struct rettangolo { punto v1, v2; rettangolo r1, r2; #99 #100 #101 #102 #103 #104 #105 #106 #107 #108 r1 r2 r1.v1 r1.v2 r2.v1 r2.v2 r1.v1.x r1.v1.y r1.v2.x r1.v2.y r2.v1.x r2.v1.y r2.v2.x r2.v2.y record che contiene al suo interno due record >> rettangoli2.cpp 32

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 33 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 34

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]; 35 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 36

Tipi Strutturati: Record >> Sommario Riassumendo Record dichiarare oggetti con struttura complessa Dichiarazione descrizione del modello (ATTENZIONE) dichiarazione delle variabili Utilizzo i vantaggi principali: passaggio dei parametri Nidificazione profonda 37