Fondamenti di Programmazione Ingegneria dell Automazione Industriale Ingegneria Elettronica e delle Comunicazioni
|
|
- Giuliano Farina
- 6 anni fa
- Visualizzazioni
Transcript
1 Fondamenti di Programmazione Ingegneria dell Automazione Industriale Ingegneria Elettronica e delle Comunicazioni Alessandro Saetti & Marco Sechi ( saetti,marco.sechi@ing.unibs.it) Università degli Studi di Brescia 1
2 Esercizi sulle classi (1º parte) 1. Definire la classe delle date del calendario con Un costruttore che inizializzi la data al capodanno del 2000; Un metodo che inizializzi la data con tre interi acquisiti da tastiera; Un metodo che visualizzi la data; Un metodo che faccia avanzare la data di una giornata. Scrivere un programma C++ che, sfruttando la classe precedentemente definita, inizializzi la data con tre interi acquisiti da tastiera, faccia avanzare la data di 15 giorni ed infine visualizzi la data risultante. 2
3 Esercizi sulle classi (1º parte) 2. Definire la classe dei numeri complessi con Un costruttore che inizializzi il numero complesso rappresentato con dati acquisiti da tastiera; Un costruttore che inizializzi il numero complesso con una data parte reale ed una data parte immaginaria; Un metodo che produca un numero complesso ottenuto incrementando un dato numero complesso con il numero complesso della classe; Un metodo che visualizzi il numero complesso nella forma x + yi ( x -yi se y è negativo). Scrivere un programma C++ che, sfruttando la classe precedentemente definita, inizializzi un numero complesso con dati acquisiti da tastiera, incrementi il numero complesso acquisito con il numero complesso 3.5 4i, ed infine visualizzi il numero complesso risultante. 3
4 Esercizio 1 Definire la classe delle date del calendario con Un costruttore che inizializzi la data al capodanno del 2000; Un metodo che inizializzi la data con tre interi acquisiti da tastiera; Un metodo che visualizzi la data; Un metodo che faccia avanzare la data di una giornata. Scrivere un programma C++ che, sfruttando la classe precedentemente definita, inizializzi la data con tre interi acquisiti da tastiera, faccia avanzare la data di 15 giorni ed infine visualizzi la data risultante. 4
5 Esercizi sulle classi (1 parte) Definire la classe delle date del calendario con Un costruttore che inizializzi la data al capodanno del 2000; Un metodo che inizializzi la data con tre interi acquisiti da tastiera; Un metodo che visualizzi la data; Un metodo che faccia avanzare la data di una giornata. Scrivere un programma C++ che, sfruttando la classe precedentemente definita, inizializzi la data con tre interi acquisiti da tastiera, faccia avanzare la data di 15 giorni ed infine visualizzi la data risultante. Esercizio 1 Impostiamo la solita struttura iniziale di un programma C, aggiungendo eventuali commenti /************************************************************************** * Nome: casa1-data.c * * Autore: Alessandro Saetti * * Data: 6/4/10 * ************************************************************************* #include <iostream> #include <stdlib.h> /* Nome: main * Scopo: Gestione delle date * Output: 0 se il programma termina correttamente int main() // Definizione classe // Utilizzo della classe system("pause"); return 0; Per la gestione dell I/O utilizzeremo gli oggetti globali di I/O cin e cout abbinati agli operatori di flusso << e >> per cui Includiamo <iostream> 5
6 Esercizi sulle classi (1 parte) Definire la classe delle date del calendario con Un costruttore che inizializzi la data al capodanno del 2000; Un metodo che inizializzi la data con tre interi acquisiti da tastiera; Un metodo che visualizzi la data; Un metodo che faccia avanzare la data di una giornata. Scrivere un programma C++ che, sfruttando la classe precedentemente definita, inizializzi la data con tre interi acquisiti da tastiera, faccia avanzare la data di 15 giorni ed infine visualizzi la data risultante. Ricordiamoci che per il costruttore non si deve dichiarare alcun valore di ritorno Iniziamo ad impostare la definizione per la classe Data. class Data public: Data() // Costruttore di default private: int aa, mm, gg; // Dati membro o attributi ; Esercizio 1 Implementiamo il costruttore di default (esternamente alla classe) /* Nome: Data::Data * Scopo: Costruttore di default della classe Data * Output: - Data::Data() gg = mm = 1; aa = 2000; // l operatore binario di risoluzione di visibilità // :: qualifica l appartenenza alla classe 6
7 Esercizi sulle classi (1 parte) Esercizio 1 Definire la classe delle date del calendario con Un costruttore che inizializzi la data al capodanno del 2000; Un metodo che inizializzi la data con tre interi acquisiti da tastiera; Un metodo che visualizzi la data; Un metodo che faccia avanzare la data di una giornata. Scrivere un programma C++ che, sfruttando la classe precedentemente definita, inizializzi la data con tre interi acquisiti da tastiera, faccia avanzare la data di 15 giorni ed infine visualizzi la data risultante. Implementiamo, all esterno della definizione della classe, la funzione membro acquisisci() #include <iostream> using namespace std; Aggiungiamo alla definizione della classe la dichiarazione della funzionemembro acquisisci() void Data::acquisisci() cout << "Inserisci giorno: "; cin >> gg; cout << "Inserisci mese: "; cin >> mm; cout << "Inserisci anno: "; cin >> aa; Ricordiamoci di inserire il tipo restituito dalla funzionemembro della classe (anche se void) class Data public: Data() void acquisisci(); private: int aa, mm, gg; ; Inseriamo l'istruzione "using namespace std" ("using directive"). Con essa si rendono accessibili tutti i membri del namespace std senza doverli qualificare ad ogni chiamata mediante l'operatore di risoluzione dello scope ::. Pertanto gli oggetti globali di I/O std::cin e std::cout potranno essere richiamati semplicemente con cin e cout. Per la gestione dell I/O utilizziamo gli oggetti globali di I/O cin e cout abbinati agli operatori di flusso << e >>. 7
8 Esercizi sulle classi (1 parte) Esercizio 1 Definire la classe delle date del calendario con Un costruttore che inizializzi la data al capodanno del 2000; Un metodo che inizializzi la data con tre interi acquisiti da tastiera; Un metodo che visualizzi la data; Un metodo che faccia avanzare la data di una giornata. Scrivere un programma C++ che, sfruttando la classe precedentemente definita, inizializzi la data con tre interi acquisiti da tastiera, faccia avanzare la data di 15 giorni ed infine visualizzi la data risultante. Implementiamo, esternamente alla classe, la funzione membro stampa() che mostra a video la data /* Nome: Data::stampa * Scopo: Stampa la data * Output: - void Data::stampa() cout << gg << "/" << mm << "/" << aa << endl; Aggiungiamo alla definizione della classe la dichiarazione della funzionemembro stampa() ricordandoci di aggiungere il tipo restituito class Data public: Data() void acquisisci(); void stampa(); private: int aa, mm, gg; ; 8
9 Esercizi sulle classi (1 parte) Prima di proseguire possiamo testare il programma che abbiamo implementato fino a questo punto. #include <iostream> using namespace std; class Data public: Data(); void acquisisci(); void avanza(); void stampa(); private: int aa, mm, gg; ; Data::Data() aa=2000; gg=mm=1; void Data::Acquisisci() cout << "Inserisci giorno: "; cin >> gg; cout << "Inserisci mese: "; cin >> mm; cout << "Inserisci anno: "; cin >> aa; Esercizio 1 void Data::Stampa() cout << gg << "/" << mm << "/ << aa << endl; Inventiamoci quindi un main() che ci consenta di testare tutte le funzionalità fino a questo punto implementate int main() Data d; d.stampa(); d.acquisisci(); d.stampa(); 9
10 Esercizi sulle classi (1 parte) Esercizio 1 Definire la classe delle date del calendario con Un costruttore che inizializzi la data al capodanno del 2000; Un metodo che inizializzi la data con tre interi acquisiti da tastiera; Un metodo che visualizzi la data; Un metodo che faccia avanzare la data di una giornata. Scrivere un programma C++ che, sfruttando la classe precedentemente definita, inizializzi la data con tre interi acquisiti da tastiera, faccia avanzare la data di 15 giorni ed infine visualizzi la data risultante. void Data::Avanza() gg++; // incremento il giorno // CORREGGO SE GG NON E SENSATO // 1) Calcolo l ultimo giorno // del mese indicato in mm // 2) se gg è maggiore dell ultimo // giorno del mese pongo gg = 1 // ed incremento mm di uno Per passare al giorno successivo incremento la variabile gg di 1... e poi procedo, se necessario, con opportune correzioni (Normalizzazione). // 3) se mm>12 incremento l anno // e pongo mm=1 Per determinare l ultimo giorno di ogni mese devo disporre di un elenco contenente tale valore distinto per mese. Il seguente array potrebbe essere adatto ai nostri scopi: int v[12] = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; Occorre però tener conto che febbraio, negli anni bisestili, ha 29 giorni. Un anno è bisesto quando è multiplo di 400 oppure se è divisibile per 4 ma non per 100. La condizione sottostante consente quindi di valutare se un anno aa è bisestile o meno: ( ((aa % 400)==0) ( ((aa % 4)==0) && ((aa % 100)!=0) ) ) 10
11 Esercizi sulle classi (1 parte) Per determinare se è un anno bisestile definiamo la funzione membro privata sottostante: #define TRUE 1 #define FALSE 0... /* Nome: Data::bisestile * Scopo: Determina se l'anno della data e' bisestile * Output: TRUE, se l'anno e' bisestile * FALSE, altrimenti int Data::bisestile() if (aa % 4 == 0 && aa % 100!= 0 aa % 400 == 0) return TRUE; return FALSE; Mentre per determinare l ultimo giorno del mese definiamo questa funzione membro privata: /* Nome: Data::giorni * Scopo: Restituisce il numero di giorni in un mese * Input: int mese: il mese da esaminare * Output: il numero di giorni di mese int Data::giorni(int mese) int v[12] = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; if (mese == 2 && bisestile()) return 29; else return v[mese-1]; Inseriamo le due #define TRUE e FALSE per rendere più leggibile il codice della funzionemembro bisestile() void Data::Avanza() gg++; // 1) Calcolo l ultimo giorno // del mese indicato in mm // 2)... // 3)... Esercizio 1 Se mese==2 ed aa è bisestile allora i giorni sono 29 altrimenti sono v[mese 1] 11
12 Esercizi sulle classi (1 parte) Esercizio 1 Continuiamo con l implementazione della funzione membro avanza() void Data::Avanza() gg++; // incremento il giorno // 1) Calcolo il nr di giorni // del mese indicato in mm if (gg > giorni(mm)) gg = 1; mm++; // 2) se gg è maggiore dell ultimo // giorno del mese pongo gg = 1 // ed incremento mm di uno // 3) se mm>12 incremento l anno // e pongo mm=1 if (mm > 12) mm = 1; aa++; Aggiorniamo la definizione della classe Data: le due funzioni membro bisestile() e giorni() sono destinate ad uso interno per la classe per cui le aggiungiamo alla sezione private:. La funzione membro avanza(), che deve essere usata nel main(), verrà posta nella sezione public: class Data public: Data(); void acquisisci(); void avanza(); void stampa(); private: int aa, mm, gg; int bisestile(); int giorni (); ; 12
13 Esercizi sulle classi (1 parte) Esercizio 1 Possiamo inserire le istruzioni utilizzate per la normalizzazione della variabile gg all interno di una funzione membro privata che chiameremo normalizza(): /* Nome: Data::normalizza * Scopo: Normalizza la data * Output: - * Note: Suppone che i giorni della data eccedano al * piu' di una unita' il numero di giorni possibili void Data::normalizza() if (gg > giorni(mm)) gg = 1; mm++; if (mm > 12) mm = 1; aa++; Completiamo la definizione della classe Data inserendo nella sezione private: la dichiarazione della funzione membro normalizza(): Mentre l implementazione della funzionemembro avanza() che utilizza la nuova funzione membro normalizza() diventa: /* Nome: Data::avanza * Scopo: Incrementa la data * corrente di un giorno * Output: - void Data::avanza() gg++; normalizza(); class Data public: Data(); void acquisisci(); void avanza(); void stampa(); private: int aa, mm, gg; bool bisestile(); int giorni (); void normalizza(); ; 13
14 Esercizi sulle classi (1 parte) Esercizio 1 Definire la classe delle date del calendario con Un costruttore che inizializzi la data al capodanno del 2000; Un metodo che inizializzi la data con tre interi acquisiti da tastiera; Un metodo che visualizzi la data; Un metodo che faccia avanzare la data di una giornata. Scrivere un programma C++ che, sfruttando la classe precedentemente definita, inizializzi la data con tre interi acquisiti da tastiera, faccia avanzare la data di 15 giorni ed infine visualizzi la data risultante. Sfruttando la classe Data e le sue funzioni membro possiamo ora implementare il nostro main() int main() Data oggi; int i; oggi.acquisisci(); for (i = 0; i < 15; i++) oggi.avanza(); cout << "Data dopo 15 giorni: "; oggi.stampa(); Acquisisco una data Avanzo di 15 giorni tramite un ciclo for Stampo la data system("pause"); return 0; 14
15 Esercizi sull uso delle classi (1 parte) Soluzione completa /************************************************************************** * Nome: casa1-data.c * * Autore: Alessandro Saetti * * Data: 6/4/10 * ************************************************************************* #include <iostream> #include <stdlib.h> #define TRUE 1 #define FALSE 0 using namespace std; class Data public: Data(); void acquisisci(); void stampa(); void avanza(); private: int gg, mm, aa; int bisestile(); int giorni(int mese); void normalizza(); ; Esercizio 1 15
16 Esercizi sull uso delle classi (1 parte) Esercizio 1.. soluzione completa /* Nome: Data::Data * Scopo: Costruttore di default della classe Data * Output: - Data::Data() gg = mm = 1; aa = 2000; /* Nome: Data::acqusisci * Scopo: Inizializzazione della data con interi acquisiti da tastiera * Output: - void Data::acquisisci() cout << "Inserisci giorno: "; cin >> gg; cout << "Inserisci mese: "; cin >> mm; cout << "Inserisci anno: "; cin >> aa; 16
17 Esercizi sull uso delle classi (1 parte).. soluzione completa /* Nome: Data::stampa * Scopo: Stampa la data * Output: - void Data::stampa() cout << gg << "/" << mm << "/" << aa << endl; /* Nome: Data::avanza * Scopo: Incrementa la data corrente di un giorno * Output: - void Data::avanza() gg++; normalizza(); /* Nome: Data::bisestile * Scopo: Determina se l'anno della data e' bisestile * Output: TRUE, se l'anno e' bisestile * FALSE, altrimenti Esercizio 1 17
18 Esercizi sull uso delle classi (1 parte).. soluzione completa int Data::bisestile() if (aa % 4 == 0 && aa % 100!= 0 aa % 400 == 0) return TRUE; return FALSE; /* Nome: Data::giorni * Scopo: Restituisce il numero di giorni in un mese * Input: int mese: il mese da esaminare * Output: il numero di giorni di mese int Data::giorni(int mese) int v[12] = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; if (mese == 2 && bisestile()) return 29; else return v[mese-1]; /* Nome: Data::normalizza * Scopo: Normalizza la data * Output: - * Note: Suppone che i giorni della data eccedano al piu' di * una unita' il numero di giorni possibili Esercizio 1 18
19 Esercizi sull uso delle classi (1 parte).. soluzione completa. void Data::normalizza() if (gg > giorni(mm)) gg = 1; mm++; if (mm > 12) mm = 1; aa++; /* Nome: main * Scopo: Gestione delle date * Output: 0 se il programma * termina correttamente Esercizio 1 int main() Data oggi; int i; oggi.acquisisci(); for (i = 0; i < 15; i++) oggi.avanza(); cout << "Data dopo 15 giorni: "; oggi.stampa(); system("pause"); return 0; 19
20 Esercizio 2 Definire la classe dei numeri complessi con Un costruttore che inizializzi il numero complesso rappresentato con dati acquisiti da tastiera; Un costruttore che inizializzi il numero complesso con una data parte reale ed una data parte immaginaria; Un metodo che produca un numero complesso ottenuto incrementando un dato numero complesso con il numero complesso della classe; Un metodo che visualizzi il numero complesso nella forma x + yi ( x - yi se y è negativo). Scrivere un programma C++ che, sfruttando la classe precedentemente definita, inizializzi un numero complesso con dati acquisiti da tastiera, incrementi il numero complesso acquisito con il numero complesso 3.5 4i, ed infine visualizzi il numero complesso risultante. 20
21 Esercizi sulle classi (1 parte) Esercizio 2 Definire la classe dei numeri complessi con Un costruttore che inizializzi il numero complesso rappresentato con dati acquisiti da tastiera; Un costruttore che inizializzi il numero complesso con una data parte reale ed una data parte immaginaria; Un metodo che produca un numeri complesso ottenuto incrementando un dato numero complesso con il numero complesso della classe; Un metodo che visualizzi il numero complesso nella forma x + yi ( x yi se y è negativo). Scrivere un programma C++ che, sfruttando la classe precedentemente definita, inizializzi un numero complesso con dati acquisiti da tastiera, incrementi il numero complesso acquisito con il numero complesso 3.5 4i, ed infine visualizzi il numero complesso risultante. Impostiamo la solita struttura iniziale di un programma C, aggiungendo eventuali commenti /************************************************************************** * Nome: lab1-complesso.c * * Autore: Alessandro Saetti * * Data: 6/4/10 * ************************************************************************* #include <iostream> #include <stdlib.h> // Definizione classe /* Nome: main * Scopo: Gestione dei numeri complessi * Output: 0 se il programma termina correttamente int main() system("pause"); // Utilizzo della classe return 0; 21
22 Esercizi sulle classi (1 parte) Esercizio 2 Definire la classe dei numeri complessi con Un costruttore che inizializzi il numero complesso rappresentato con dati acquisiti da tastiera; Un costruttore che inizializzi il numero complesso con una data parte reale ed una data parte immaginaria; Un metodo che produca un numeri complesso ottenuto incrementando un dato numero complesso con il numero complesso della classe; Un metodo che visualizzi il numero complesso nella forma x + yi ( x yi se y è negativo). Scrivere un programma C++ che, sfruttando la classe precedentemente definita, inizializzi un numero complesso con dati acquisiti da tastiera, incrementi il numero complesso acquisito con il numero complesso 3.5 4i, ed infine visualizzi il numero complesso risultante. Implementiamo il costruttore di default (quello senza argomenti) /* Nome: Complesso * Scopo: Inizializza il numero complesso con numeri acquisiti da tastiera * Output: - Complesso::Complesso() cout << "Parte reale: "; cin >> reale; cout << "Parte immaginaria: "; cin >> immag;... e il secondo costruttore, in overloading, distinto per la differente lista di argomenti /* Nome: Complesso::Complesso * Scopo: Costruttore alternativo della * classe complesso * Input: float r: la parte reale del * numero complesso * float i: la parte immaginaria * del numero complesso * Output: - Complesso::Complesso(float r, float i) reale = r; immag = i; 22
23 Esercizi sulle classi (1 parte) Esercizio 2 Definire la classe dei numeri complessi con Un costruttore che inizializzi il numero complesso rappresentato con dati acquisiti da tastiera; Un costruttore che inizializzi il numero complesso con una data parte reale ed una data parte immaginaria; Un metodo che produca un numeri complesso ottenuto incrementando un dato numero complesso con il numero complesso della classe; Un metodo che visualizzi il numero complesso nella forma x + yi ( x yi se y è negativo). Scrivere un programma C++ che, sfruttando la classe precedentemente definita, inizializzi un numero complesso con dati acquisiti da tastiera, incrementi il numero complesso acquisito con il numero complesso 3.5 4i, ed infine visualizzi il numero complesso risultante. Implementiamo la funzione membro somma() che aggiunge al numero complesso della classe il complesso passato come addendo /* Nome: Complesso::somma * Scopo: Somma un numero complesso al numero complesso rappresentato * dall'oggetto * Input: Complesso addendo: il numero complesso da sommare * Output: Restituisce la somma tra i due * numeri complessi Complesso Complesso::somma(Complesso addendo) return Complesso (reale + addendo.reale, immag + addendo.immag); e successivamente quella che stampa a video il numero complesso void Complesso::stampa() if ( (reale!=0) (immag==0) ) cout << reale; if (immag!=0) if ((immag > 0) && (reale!=0)) cout << "+"; if (immag!=1) cout << immag; cout << "i"; 23
24 Esercizi sulle classi (1 parte) class Complesso public: Complesso(); Complesso(float r, float i); Complesso somma(complesso addendo); void stampa(); private: float reale, immag; ; Esercizio 2 Definire la classe dei numeri complessi con Un costruttore che inizializzi il numero complesso rappresentato con dati acquisiti da tastiera; Un costruttore che inizializzi il numero complesso con una data parte reale ed una data parte immaginaria; Un metodo che produca un numeri complesso ottenuto incrementando un dato numero complesso con il numero complesso della classe; Un metodo che visualizzi il numero complesso nella forma x + yi ( x yi se y è negativo). Scrivere un programma C++ che, sfruttando la classe precedentemente definita, inizializzi un numero complesso con dati acquisiti da tastiera, incrementi il numero complesso acquisito con il numero complesso 3.5 4i, ed infine visualizzi il numero complesso risultante. Definiamo quindi la classe Complesso. Ricordiamoci di inserire, per ogni singola funzionemembro, il tipo di dato restituito Sfruttando la classe Complesso e le sue funzioni membro possiamo implementare ora il main(): int main() Complesso n1, n2(3.5, 4); n1.stampa(); n1 = n1.somma(n2); cout << " + "; n2.stampa(); cout << " = "; n1.stampa(); cout << endl; system("pause"); return 0; Definiamo due istanze della classe Complesso: n1 e n2. Stampo n1 e poi lo incremento di n2 Stampo n2 e il nuovo valore di n1 24
25 Esercizi sull uso delle classi (1 parte) Soluzione completa Esercizio 2 /************************************************************************** * Nome: lab1-complesso.c * * Autore: Alessandro Saetti * * Data: 6/4/10 * ************************************************************************* #include <iostream> #include <stdlib.h> using namespace std; class Complesso public: Complesso(float r, float i); Complesso(); Complesso somma(complesso addendo); void stampa(); private: float reale, immag; ; /* Nome: Complesso * Scopo: Inizializza il numero complesso con numeri acquisiti da tastiera * Output: - 25
26 Esercizi sull uso delle classi (1 parte) soluzione completa Esercizio 2 Complesso::Complesso() cout << "Parte reale: "; cin >> reale; cout << "Parte immaginaria: "; cin >> immag; /* Nome: Complesso::Complesso * Scopo: Costruttore alternativo della classe complesso * Input: float r: la parte reale del numero complesso * float i: la parte immaginaria del numero complesso * Output: - Complesso::Complesso(float r, float i) reale = r; immag = i; /* Nome: Complesso::somma * Scopo: Somma un numero complesso al numero complesso rappresentato * dall'oggetto * Input: Complesso addendo: il numero complesso da sommare * Output: Restituisce la somma tra i due numeri complessi 26
27 Esercizi sull uso delle classi (1 parte) soluzione completa Complesso Complesso::somma(Complesso addendo) return Complesso (reale + addendo.reale, immag + addendo.immag); /* Nome: Complesso::stampa * Scopo: Stampa il numero complesso * Output: - void Complesso::stampa() if ( (reale!=0) (immag==0) ) cout << reale; if (immag!=0) if ((immag > 0) && (reale!=0)) cout << "+"; if (immag!=1) cout << immag; cout << "i"; /* Nome: main * Scopo: Gestione dei numeri complessi * Output: 0 se il programma termina correttamente Esercizio 2 27
28 Esercizi sull uso delle classi (1 parte) soluzione completa. int main() Complesso n1, n2(3.5, 4); n1.stampa(); n1 = n1.somma(n2); cout << " + "; n2.stampa(); cout << " = "; n1.stampa(); cout << endl; system("pause"); return 0; Esercizio 2 28
29 Esercizi sulle classi (1 parte) Esercizio 2 Soluzione alternativa Esercizio 2 Soluzione alternativa OVERLOAD DEGLI OPERATORI Vediamo come possiamo implementare la soluzione dell esercizio 2 sfruttando l overload degli operatori. Prima di procedere ricordiamo che una famiglia di funzioni aventi lo stesso nome, ma un diverso set di argomenti (signature), è detta in rapporto di overloading, o sovraccaricata. L overloading, oltre alle funzioni, può essere applicato ai costruttori e agli operatori. Illustriamo ora brevemente la tecnica di overload degli operatori. 29
30 Esercizi sulle classi (1 parte) Overload degli operatori Overload degli operatori In C++ sono definiti dei tipi nativi (esempio: int, char, float, double...) sui quali è possibile applicare un insieme di operazioni convenzionali (rappresentate da simboli come +, *, /, etc ) Non sempre la realtà può essere rappresentata mediante i tipi nativi (si pensi a: numeri complessi, matrici, aggregazioni di dati, etc...) ma occorre fare ricorso a tipi astratti come ad esempio le classi. La semantica delle operazioni applicabili a tali tipi astratti potrebbe differire da quella comunemente associata ai simboli convenzionali per cui nasce la necessità di ridefinirne il significato. Ad esempio il simbolo + può assumere significati diversi a seconda del tipo di dato trattato. Prendiamo ad esempio queste operazioni di addizione : Operazione di somma applicata alle matrici Operazione di somma intesa come unione Il C++ permette di ridefinire il significato di un simbolo convenzionale rendendolo adatto al tipo astratto definito dal programmatore. La tecnica che consente questo è l overload degli operatori L uso del simbolo convenzionale per richiamare le operazioni definite in una classe permette una notazione più compatta che evita chiamate a funzioni specifiche che rendono meno leggibile il codice. 30
31 Esercizi sulle classi (1 parte) Overload degli operatori Overload degli operatori Nell esempio sottostante l immediatezza della formula, quando utilizzo gli operatori + e * rispetto a quella che usa le funzioni somma() e moltiplica(), è evidente : Y=SOMMA(A,MOLTIPLICA(B,C)) Operazione implementata mediante chiamate a funzioni specifiche. Y=A+B*C Operazione espressa con simboli convenzionali Per ottenere l'overload di un operatore bisogna creare una funzione il cui nome deve essere costituito dalla parola chiave operator seguita, con o senza blank, dal simbolo dell'operatore sovraccaricato (ad esempio: operator+). Gli argomenti della funzione corrispondono agli operandi dell operatore. tipo-restituito operatoroperatore (lista-argomenti) La ridefinizione di un operatore deve essere la più vicina possibile al senso che l operatore ha per i tipi nativi. Anche se è possibile definire in modo arbitrario ciò che fa un operatore si crea solo confusione quando questo determina una semantica inaspettata (si immagini una ridefinizione dell operatore + che effettua un operazione simile ad una sottrazione) 31
32 Esercizi sulle classi (1 parte) Overload degli operatori E' possibile effettuare l'overloading degli operatori mediante funzioni membro della classe stessa. In questo caso l oggetto chiamante coincide con il primo operando. Segue che le funzioni membro associate ad un operatore binario abbiano un solo parametro (corrispondente al right operand) mentre quelle relative ad operatori unari nessuno. class MyClass... + : operatore binario MyClass operator+(myclass); MyClass operator++(); // prefissa MyClass operator--(int notused); // suffissa... ; ++, : operatori unari Supponiamo di aver definito la classe Vettore2D e di voler implementare l overload dell operatore * in modo che abbiano significato le due operazioni: Vettore*Scalare overload degli operatori L overloading mediante funzioni membro non è sempre attuabile. Infatti questa modalità implica che l operando a sinistra debba essere un membro della classe ma questo non sempre possibile (si pensi alla somma tra un numero reale e uno immaginario oppure agli operatori di flusso >> e <<). Ecco un esempio: Il prodotto di uno scalare per un vettore Scalare*Vettore main()... C=A+B // oppure C=A.operator+(B); ++C // oppure C.operator++();... C-- // oppure C.operator++(1); C=A+B; è equivalente a C=A.operator+(B); Con l overloading dell operatore la chiamata della funzione "scompare" dal codice del programma e al suo posto viene usata una più "semplice e concisa rappresentazione costituita dal simbolo convenzionale associato all operazione. In entrambi i casi l overload dell operatore deve restituire un oggetto della classe Vettore2D. Nel primo caso il left operand Vettore appartiene alla classe Vettore2D e quindi la funzione operatore può essere funzione membro della classe stessa. Nel secondo caso il primo operando non appartiene alla classe Vettore2D e pertanto la funzione operatore deve essere esterna alla classe Vettore2D : 32
33 Esercizi sulle classi (1 parte) overload degli operatori Implementazione della classe di esempio Vettore2D: Costruttori Vettore2D::Vettore2D() x = 0; y = 0; class Vettore2D public: Vettore2D(); Vettore2D(float r, float i); Vettore2D operator*(float); friend Vettore2D operator*(float,vettore2d);... private: float x, y; ; Ecco un main() di esempio che utilizza la classe Vettore2D int main() Vettore2D P; Vettore2D A(4.2,4); P = A * 3; // oppure A.operator*(3);... // Istruzioni di di output P = 3 * A;... // Istruzioni di di output Vettore2D::Vettore2D(float a, float b) x = a; y = b; Una funzione friend in una classe ha accesso ai membri privati della classe pur non essendone membro Overload degli operatori Overloading mediante una funzione membro Vettore2D Vettore2D::operator*(float b) return Vettore2D (x*b, y*b ); senza friend i membri privati x e y di B non risulterebbero accessibili! Vettore2D operator*(float a, Vettore2D B) return Vettore2D (a*b.x, a*b.y); Overloading mediante una funzione esterna alla classe Esempio di esecuzione 33
34 Esercizi sulle classi (1 parte) Alcune precisazioni utili relative all overload degli operatori Gli operatori per i quali è ammesso l overload sono: Overload degli operatori Gli operatori per i quali non è ammesso l overload sono:. ::.*?: sizeof typeid Non si può ridefinire un operatore che opera su i tipi nativi (int, char, float, ) poiché questi non sono ne classi ne strutture. Quindi la ridefinzione int operator+(int, int); non è permessa Non si può cambiare l arità (numero di operandi) di un operatore e neppure la sua associatività Nonè concesso "inventare" nuovi simboli, ma si devono utilizzare solo quelli degli operatori esistenti. Le regole di precedenza restano legate al simbolo e non dipendono dal nuovo significato che l operatore ha assunto con l overloading (ad esempio l operatore * avrà sempre precedenza sul +). E possibile ridefinire più volte lo stesso operatore e l'ambiguità, come nel caso delle funzioni, viene risolta in base al contesto degli operandi, riconoscendone il tipo e decidendo di conseguenza quale definizione operatore applicare. Un operatore unario può essere ridefinito come funzione membro senza argomenti oppure come funzione non membro con un argomento. Analogamente un operatore binario può essere ridefinito come funzione membro con un argomento oppure come funzione non membro con due argomenti gli argomenti operandi sono generalmente passati by reference e dichiarati const, per maggiore sicurezza (const) e rapidità di esecuzione (passaggio by reference); L overload deve essere esplicito: fare l overload di = non condiziona +=, = o!= 34
35 Esercizi sulle classi (1 parte) Overload degli operatori di flusso Overload degli operatori di flusso << e >> Prima di procedere con l overload degli operatori di flusso analizziamo la gestione dell I/O implementata nella libreria iostream del C++. La libreria iostream del C++ mette a disposizione un insieme di classi, funzioni ed oggetti globali per l'esecuzione delle operazioni di input output. E in questa libreria che sono definiti gli oggetti globali di I/O cout, cerr e cin e che risultano collegati ai dispositivi standard di I/O stdout, stderr e stdin. Per utilizzare questi cout, cerr e cin occorre includere l'header file: <iostream>. Nella libreria iostream le operazioni di I/O vengono gestite in modo indipendente dal dispositivo effettivamente utilizzato e che può essere un device fisico, un file o un area di memoria come ad esempio una stringa. Le istruzioni di I/O vengono strutturate seguendo una particolare astrazione detta stream (flusso) che rappresenta un "qualcosa" da o verso cui "fluisce" una sequenza di bytes. Un oggetto stream può essere visto come un entità" da cui estrarre (input), o inserire (output) dei dati. 35
36 Esercizi sulle classi (1 parte) Overload degli operatori di flusso overload degli operatori di flusso << e >> Gli operatori di scorrimento << e >> sono operatori binari. Producono lo scorrimento a destra / sinistra dei bit del primo operando (left operand) in quantità pari al valore indicato nel right operand. Shift a sinistra Dentro la libreria iostream sono definite due classi globali, ostream e istream, corrispondenti agli stream di input e output. Queste due classi sovraccaricano gli operatori di scorrimento << e >>, dandogli la funzione di stampare e leggere dati. In questa libreria vengono create due istanze delle classi ostream e istream: cout (Console Output) e cin (Console Input) che vengono usate per stampare su schermo e leggere da tastiera. Nello stream l'operazione di output viene identificata mediante un'operazione di inserimento del dato (right operand) da scrivere nell'oggetto cout (left operand): cout << dato; mentre l'operazione di input mediante un'operazione di estrazione del dato da leggere (right operand) dall'oggetto cin. cin >> dato; 36
37 Esercizi sulle classi (1 parte) Overload degli operatori di flusso overload degli operatori di flusso << e >> Vediamo ora come estendere gli operatori di flusso anche ai tipi astratti in modo che l istruzione: cout << dato; generi a video la stampa dei valori assunti dai membri di Dato (dove Dato è un'istanza di una classe A). Prima di procedere dobbiamo fare due precisazioni: 1) Abbiamo posto come right operand dell operatore di flusso l istanza Dato della nostra classe A. L operando a sinistra dell operatore di flusso è invece un istanza istream o ostream (cin e cout), diversa dalla classe a cui appartiene Dato, quindi sarà necessario lavorare su funzioni friend. 2) Nell implementazione della funzione operatore dobbiamo individuare anche il tipo di valore che essa dovrà restituire. In C++ una chiamata del tipo: cout << 5 << endl << ciao ; è lecita per il fatto che il valore restituito dall overloading dell operatore di scorrimento << è nuovamente l oggetto cout. 37
38 Esercizi sulle classi (1 parte) Overload degli operatori di flusso overload degli operatori di flusso << e >> In questo modo l operazione si semplifica progressivamente: cout << 5 << endl << ciao ; cout << endl << ciao ; l esecuzione di cout << 5 restituisce lo stesso cout per cui ottengo: cout << endl << ciao ; cout << ciao ; un ulteriore esecuzione semplifica progressivamente l istruzione Quindi il valore restituito dalla funzione di overload sarà il riferimento allo stream passato come argomento alla stessa. Inoltre il parametro della funzione operatore relativo allo stream deve essere passato come reference visto che si deve lavorare sempre su quella particolare istanza. I prototipi delle nostre due funzioni saranno quindi: friend istream& operator>> (istream&, Dato&); friend ostream& operator<< (ostream&, Dato); Possiamo adesso passare all implementazione dell esercizio 2 sfruttando l overloading degli operatori. 38
39 Esercizi sulle classi (1 parte) SOLUZIONE ALTERNATIVA Esercizio 2 Soluzione alternativa Partendo dall implementazione della somma mediante la funzione membro convenzionale Complesso Complesso::somma(Complesso addendo) return Complesso (reale + addendo.reale, immag + addendo.immag); Utilizzando l implementazione della funzione stampa() void Complesso::stampa() if ( (reale!=0) (immag==0) ) cout << reale; if (immag!=0) if ((immag > 0) && (reale!=0)) cout << "+"; if (immag!=1) cout << immag; cout << "i"; implemento l overloading dell operatore somma (+) Complesso Complesso::operator+(Complesso addendo) return Complesso (reale + addendo.reale, immag + addendo.immag); scrivo l overloading dell operatore di flusso << ostream& operator<<(ostream &output, Complesso numero) if ( (numero.reale!=0) (numero.immag==0) ) output << numero.reale; if (numero.immag!=0) if ((numero.immag > 0) && (numero.reale!=0)) output << "+"; if (numero.immag!=1) output << numero.immag; output << "i"; return output; 39
40 Esercizi sulle classi (1 parte) SOLUZIONE ALTERNATIVA Riprendendo l implementazione del costruttore di default Complesso::Complesso() cout << "Parte reale: "; cin >> reale; cout << "Parte immaginaria: "; cin >> immag; Partendo dal main() originale int main() Complesso n1, n2(3.5, 4); n1.stampa(); n1 = n1.somma(n2); cout << " + "; n2.stampa(); cout << " = "; n1.stampa(); cout << endl; system("pause"); return 0; Al termine la nuova definizione della classe Complesso diventa: class Complesso public:... Complesso(); Complesso somma(complesso addendo); void stampa();... ; effettuo l overloading dell operatore di flusso >> Esercizio 2 soluzione alternativa istream& operator>>(istream& input, Complesso& numero) cout << "Parte reale: "; input >> numero.reale; cout << "Parte immaginaria: "; input >> numero.immag; return input; int main() Complesso n1, n2(3.5, 4); cin >> n1; cout << n1; n1 = n1 + n2; cout << " + " << n2 << " = " << n1 << endl; system("pause"); return 0; riscrivo il nuovo main() class Complesso public:... Complesso operator+(complesso addendo); friend ostream& operator<<(ostream &output, Complesso numero); friend istream& operator>>(istream& input, Complesso& numero);... ; 40
41 Esercizio 2 soluzione alternativa Esercizi sull uso delle classi (1 parte) Soluzione completa /************************************************************************** * Nome: lab1-complesso-bis.c * * Autore: Alessandro Saetti * * Data: 6/4/10 * ************************************************************************* #include <iostream> #include <stdlib.h> using namespace std; class Complesso public: Complesso(); Complesso(float r, float i); Complesso operator+(complesso addendo); friend ostream& operator<<(ostream &output, Complesso numero); // Agisce come funzione globale (le passo esplicitamente l'oggetto su // cui operare) ma puo' accedere ai membri privati dell'oggetto friend istream& operator>>(istream& input, Complesso& numero); private: float reale, immag; ; 41
42 Esercizi sull uso delle classi (1 parte) soluzione completa /* Nome: Complesso::Complesso * Scopo: Costruttore di default della classe complesso * Output: - Complesso::Complesso() reale = 0; immag = 0; /* Nome: Complesso::Complesso * Scopo: Costruttore alternativo della classe complesso * Input: float r: la parte reale del numero complesso * float i: la parte immaginaria del numero complesso * Output: - Complesso::Complesso(float r, float i) reale = r; immag = i; /* Nome: Complesso::operator+ * Scopo: Somma un numero complesso al numero complesso rappresentato * dall'oggetto * Input: Complesso addendo: il numero complesso da sommare Esercizio 2 soluzione alternativa 42
43 Esercizi sull uso delle classi (1 parte) soluzione completa * Output: Restituisce la somma tra i due numeri complessi Esercizio 2 soluzione alternativa * Nota: operator e' una parola chiave per il sovraccaricamento degli operatori Complesso Complesso::operator+(Complesso addendo) return Complesso(reale + addendo.reale, immag + addendo.immag); /* Nome: Complesso::operator<< * Scopo: Stampa il numero complesso * Input: ostream &output: Un flusso di dati * Complesso numero: Il numero complesso da stampare * Output: Il flusso di dati da stampare ostream& operator<<(ostream &output, Complesso numero) if ( (numero.reale!=0) (numero.immag==0) ) output << numero.reale; if (numero.immag!=0) if ((numero.immag > 0) && (numero.reale!=0)) output << "+"; if (numero.immag!=1) output << numero.immag; output << "i"; return output; 43
44 Esercizi sull uso delle classi (1 parte) soluzione completa Esercizio 2 soluzione alternativa /* Nome: Complesso::operator>> * Scopo: Acquisisce un numero complesso * Input: ostream &output: Un flusso di dati * Complesso numero: Il numero complesso da inizializzare con i dati * acquisiti * Output: Il flusso di dati in cui salvare i dati istream& operator>>(istream& input, Complesso& numero) cout << "Parte reale: "; input >> numero.reale; cout << "Parte immaginaria: "; input >> numero.immag; return input; /* Nome: main * Scopo: Gestione dei numeri complessi * Output: 0 se il programma termina correttamente 44
45 Esercizi sull uso delle classi (1 parte) soluzione completa. int main() Complesso n1, n2(3.5, 4); cin >> n1; cout << n1; n1 = n1 + n2; cout << " + " << n2 << " = " << n1 << endl; system("pause"); return 0; Esercizio 2 soluzione alternativa 45
46 Esercizi sulle classi (2º parte) 3. Definire la classe studente (matricola, nome, cognome) con Un metodo che inizializza i dati dello studente (matricola, nome e cognome) con dati acquisiti da tastiera; Un metodo che visualizzi i dati dello studente. Sfruttando la classe precedente, definire la classe aula (gruppo di studenti) con Un costruttore che azzera in numero di studenti nel gruppo; Un metodo che visualizza i dati degli studenti nel gruppo; Un metodo che rimuove dal gruppo lo studente avente un numero di matricola pari ad un intero acquisito da tastiera; Un metodo che inserisce un nuovo studente nel gruppo. Scrivere un programma C++ che, sfruttando le classi precedentemente definite, supporti (tramite un menù di opzioni) l aggiunta, la rimozione e la visualizzazione dei dati di studenti da un aula. 46
47 Esercizi sulle classi (2º parte) Definire la classe studente (matricola, nome, cognome) con Un metodo che inizializza i dati dello studente (matricola, nome e cognome) con dati acquisiti da tastiera; Un metodo che visualizzi i dati dello studente. Sfruttando la classe precedente, definire la classe aula (gruppo di studenti) con Un costruttore che azzera in numero di studenti nel gruppo; Un metodo che visualizza i dati degli studenti nel gruppo; Un metodo che rimuove dal gruppo lo studente avente un numero di matricola pari ad un intero acquisito da tastiera; Un metodo che inserisce un nuovo studente nel gruppo. Scrivere un programma C++ che, sfruttando le classi precedentemente definite, supporti (tramite un menù di opzioni) l aggiunta, la rimozione e la visualizzazione dei dati di studenti da un aula. 47
48 Esercizi sulle classi (2 parte) Esercizio 3 Definire la classe studente (matricola, nome, cognome) con Un metodo che inizializza i dati dello studente (matricola, nome e cognome) con dati acquisiti da tastiera; Un metodo che visualizzi i dati dello studente. Sfruttando la classe precedente, definire la classe aula (gruppo di studenti) con Un costruttore che azzera in numero di studenti nel gruppo; Un metodo che visualizza i dati degli studenti nel gruppo; Un metodo che rimuove dal gruppo lo studente avente un numero di matricola pari ad un intero acquisito da tastiera; Un metodo che inserisce un nuovo studente nel gruppo. Scrivere un programma C++ che, sfruttando le classi precedentemente definite, supporti (tramite un menù di opzioni) l aggiunta, la rimozione e la visualizzazione dei dati di studenti da un aula. Impostiamo la solita struttura iniziale di un programma C, aggiungendo eventuali commenti Non aggiungiamo #include <stdlib.h> poiché non ci serve usare system( Pause ) per sospendere l esecuzione del nostro programma. Infatti implementeremo un menù di opzioni che resta in attesa della scelta dell utente. /************************************************************************** * Nome: casa3-studente.c * * Autore: Alessandro Saetti * * Data: 6/4/10 * ************************************************************************* #include <iostream> /* * Nome: main * Scopo: Gestione di un gruppo di studenti * Output: 0 se il programma termina correttamente int main() // Definizione classe // Menu per gestire le chiamate ai metodi // fornite dalla classe AULA return 0; 48
49 Esercizi sulle classi (2 parte) Esercizio 3 Definire la classe studente (matricola, nome, cognome) con Un metodo che inizializza i dati dello studente (matricola, nome e cognome) con dati acquisiti da tastiera; Un metodo che visualizzi i dati dello studente. Sfruttando la classe precedente, definire la classe aula (gruppo di studenti) con Un costruttore che azzera in numero di studenti nel gruppo; Un metodo che visualizza i dati degli studenti nel gruppo; Un metodo che rimuove dal gruppo lo studente avente un numero di matricola pari ad un intero acquisito da tastiera; Un metodo che inserisce un nuovo studente nel gruppo. Scrivere un programma C++ che, sfruttando le classi precedentemente definite, supporti (tramite un menù di opzioni) l aggiunta, la rimozione e la visualizzazione dei dati di studenti da un aula. Implementiamo: il costruttore di default (quello senza argomenti) per la classe studente, /* Nome: Studente::Studente * Scopo: Costruttore di default della classe Studente * Output: - Studente::Studente() strcpy(nome, ""); strcpy(cognome, ""); matricola = 0; il metodo stampa() che visualizza i dati dello studente, /* Nome: Studente::stampa * Scopo: Stampa i dato dello studente * Output: - void Studente::stampa() cout << matricola << " " << nome << " " << cognome << " " << endl; 49
50 Esercizi sulle classi (2 parte) Definire la classe studente (matricola, nome, cognome) con Un metodo che inizializza i dati dello studente (matricola, nome e cognome) con dati acquisiti da tastiera; Un metodo che visualizzi i dati dello studente. Sfruttando la classe precedente, definire la classe aula (gruppo di studenti) con Un costruttore che azzera in numero di studenti nel gruppo; Un metodo che visualizza i dati degli studenti nel gruppo; Un metodo che rimuove dal gruppo lo studente avente un numero di matricola pari ad un intero acquisito da tastiera; Un metodo che inserisce un nuovo studente nel gruppo. Scrivere un programma C++ che, sfruttando le classi precedentemente definite, supporti (tramite un menù di opzioni) l aggiunta, la rimozione e la visualizzazione dei dati di studenti da un aula. il metodo per inserire un nuovo studente /* Nome: Studente::inserisci * Scopo: Inizializza i dati dello studente * con valori acquisiti da tastiera * Output: - void Studente::inserisci() cout << "Inserisci matricola: "; cin >> matricola; cout << "Inserisci nome: "; cin >> nome; cout << "Inserisci cognome: "; cin >> cognome; Per la gestione dell I/O utilizziamo gli oggetti globali di I/O cin e cout abbinati agli operatori di flusso << e >>. Esercizio 3 La funzione membro restituiscematricola() restituisce il contenuto della variabile membro privata contenente la matricola. Questo metodo viene utilizzato dalla funzione membro elimina() della classe Aula che definiremo successivamente /* Nome: Studente::restituisciMatricola * Scopo: Restituisce la matricola dello studente * Output: la matricola dello studente int Studente::restituisciMatricola() return matricola; Possiamo quindi definire la classe studente class Studente public: Studente(); void inserisci(); void stampa(); int restituiscimatricola(); private: char nome[dim1]; char cognome[dim1]; int matricola; ; 50
51 Esercizi sulle classi (2 parte) Esercizio 3 Definire la classe studente (matricola, nome, cognome) con Un metodo che inizializza i dati dello studente (matricola, nome e cognome) con dati acquisiti da tastiera; Un metodo che visualizzi i dati dello studente. Sfruttando la classe precedente, definire la classe aula (gruppo di studenti) con Un costruttore che azzera in numero di studenti nel gruppo; Un metodo che visualizza i dati degli studenti nel gruppo; Un metodo che rimuove dal gruppo lo studente avente un numero di matricola pari ad un intero acquisito da tastiera; Un metodo che inserisce un nuovo studente nel gruppo. Scrivere un programma C++ che, sfruttando le classi precedentemente definite, supporti (tramite un menù di opzioni) l aggiunta, la rimozione e la visualizzazione dei dati di studenti da un aula. Implementiamo: il metodo che stampa gli studenti presenti in una istanza di tipo aula /* Nome: Aula::stampa * Scopo: Stampa i dati del * gruppo degli studenti * Output: - void Aula::stampa() int i; for (i = 0; i < n; i++) aula[i].stampa(); il metodo che consente di aggiungere un nuovo studente alla classe (in fondo) /* Nome: Aula::aggiungi * Scopo: Aggiungi uno studente al * gruppo degli studenti * Output: - void Aula::aggiungi() aula[n++].inserisci(); Implementiamo quindi la classe Aula class Aula public: Aula(); void aggiungi(); void elimina(); void stampa(); private: Studente aula[dim2]; ; int n; la funzione membro che chiede la matricola dello studente da eliminare. L eliminazione avviene sostituendo lo studente da eliminare con l ultimo in elenco il costruttore di default /* Nome: Aula::Aula * Scopo: Costruttore di default * della classe Aula * Output: - Aula::Aula() n = 0; /* Nome: Aula::elimina * Scopo: Elimina uno studente dal gruppo * degli studenti * Output: - void Aula::elimina() int i, m; cout << "Inserisci matricola: "; cin >> m; for (i = 0; i < n; i++) if (aula[i].restituiscimatricola() == m) aula[i] = aula[n-1]; n = n - 1; 51
52 Esercizi sulle classi (2 parte) Definire la classe studente (matricola, nome, cognome) con Un metodo che inizializza i dati dello studente (matricola, nome e cognome) con dati acquisiti da tastiera; Un metodo che visualizzi i dati dello studente. Sfruttando la classe precedente, definire la classe aula (gruppo di studenti) con Un costruttore che azzera in numero di studenti nel gruppo; Un metodo che visualizza i dati degli studenti nel gruppo; Un metodo che rimuove dal gruppo lo studente avente un numero di matricola pari ad un intero acquisito da tastiera; Un metodo che inserisce un nuovo studente nel gruppo. Scrivere un programma C++ che, sfruttando le classi precedentemente definite, supporti (tramite un menù di opzioni) l aggiunta, la rimozione e la visualizzazione dei dati di studenti da un aula. Impostiamo il main() con un menù opzioni che richiama le funzionalità rese disponibili dai metodi della classe Aula. Esercizio 3 int main() Aula eip; int x; do cout << "1. Stampa\n2. Inserisci\n3. Elimina\n0. Esci\n-> "; cin >> x; switch(x) case 1: eip.stampa(); break; case 2: eip.aggiungi(); break; case 3: eip.elimina(); break; while(x!= 0); return 0; 52
Fondamenti di Informatica 2008 corso prof. A. Picariello. Operazioni sui FILE in C++
Fondamenti di Informatica 2008 corso prof. A. Picariello Operazioni sui FILE in C++ Librerie di I/O per la gestione dei FILE Il C++ consente di utilizzare le librerie standard di I/O del C mette anche
DettagliLaboratorio Informatica Classe 4A Serale Venerdì 18/02/2011. Gruppo. Cognome Riontino Nome Raffaele. Cognome Nome
Laboratorio Informatica Classe 4A Serale Venerdì 18/02/2011 Gruppo Cognome Riontino Nome Raffaele Cognome Nome TRACCIA 2 ARGOMENTO: LISTE TEMPO: 4h 1. Utilizzando Typedef definire un nuovo tipo di dato
DettagliCorso di Programmazione ad Oggetti
Corso di Programmazione ad Oggetti Funzioni e classi friend Overloading di operatori aa 2008/2009 Claudio De Stefano 1 Le funzioni friend Nella definzione di una classe è possibile elencare quali funzioni,
DettagliTipi strutturati - struct
Fondamenti di Programmazione A Appunti per le lezioni Gianfranco Rossi Tipi strutturati - struct Struttura dati (concreta) struct: sequenza di n elementi (n 0), rispettivamente di tipo t1,,tn (non necessariamente
DettagliINFORMATICA File di testo in C Roberta Gerboni
2018 - Roberta Gerboni File di testo in C++ Il linguaggio C++ mette a disposizione le seguenti classi per operare sui file (è necessario includere nel programma l header ), consentendo tipo di
DettagliL AMBIENTE CODE BLOCKS E L IO
L AMBIENTE CODE BLOCKS E L IO Il primo programma in C++ #include using namespace std; main() { cout
DettagliStruttura di un linguaggio
Il C nel C++ Struttura di un linguaggio Livello lessicale: regole per la definizione i simboli Livello sintattico: regole per la composizione dei simboli Livello semantico: significato delle strutture
DettagliIntroduzione al C++ Parte 2
Introduzione al C++ Parte 2 Sommario Le differenze fra C e C++ il qualificatore const i namespace gli stream Evitare modifiche accidentali Il qualificatore const indica che la variabile non può più essere
DettagliLa programmazione ad oggetti (OOP)
Oggetti e Classi (CAP 10) Alberto Garfagnini, Marco Mazzocco Università degli studi di Padova 30 Novembre 2011 La programmazione ad oggetti (OOP) È un approccio concettuale alla programmazione (indipendente
DettagliClasse Squadra. #include <iostream> using namespace std;
Classe Squadra Si vuole scrivere un programma che gestisce la classifica di un campionato tra squadre di calcio, ognuna identificata dal proprio nome. Il programma deve essere in grado di assegnare un
DettagliQualsiasi programma in C++ segue lo schema:
Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni
DettagliERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }
ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il
DettagliLezione 6 Introduzione al C++ Mauro Piccolo
Lezione 6 Introduzione al C++ Mauro Piccolo piccolo@di.unito.it Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,
DettagliAssegnazione di una variabile
Assegnazione di una variabile Per scrivere un valore dentro una variabile si usa l operatore di assegnazione, che è rappresentato dal simbolo =. Quindi, se scrivo int a; a = 12; assegno alla variabile
DettagliL AMBIENTE CODE BLOCKS E L IO
L AMBIENTE CODE BLOCKS E L IO Il primo programma #include main() { printf("ciao Mondo!"); } Il file deve essere salvato con estensione.c Il primo programma in C++ #include using
DettagliImplementazione dell albero binario in linguaggio C++
Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve
DettagliFondamenti di Informatica
Programmazione modulare (top-down) Fondamenti di Informatica 15. Funzioni in C++ (parte 1) Problemi complessi Conviene suddividere il programma in sottoprogrammi piu semplici mediante la metodologia di
DettagliLe funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità
Funzioni I Parte Indice Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità Le funzioni: la dichiarazione
DettagliGestione di files Motivazioni
Gestione di files Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera) il programma in esecuzione scrive (sequenzialmente)
DettagliElementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I
Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave
DettagliIl paradigma OO e le Classi
Oggetti e Classi (CAP 10) Alberto Garfagnini Università degli studi di Padova 1 Dicembre 2009 Il paradigma OO e le Classi La programmazione ad Oggetti () è una filosofia di programmazione che si basa sui
DettagliElementi di Informatica A. A. 2016/2017
Elementi di Informatica A. A. 2016/2017 Ing. Nicola Amatucci Università degli studi di Napoli Federico II Scuola Politecnica e Delle Scienze di Base nicola.amatucci@unina.it Programmazione C++ Parte 1
DettagliEreditarietà. Unità 9. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliInformatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1
Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)
DettagliStrutture di Controllo Iterative: Istruzione FOR
Linguaggio C Strutture di Controllo Iterative: Istruzione FOR 1 Istruzioni iterative! Anche dette cicli! Prevedono l esecuzione ripetitiva di altre istruzioni (corpo del ciclo)! Ad ogni iterazione del
DettagliStruttura di un programma C++
Struttura di un programma C++ // Programma semplice in C++ #include using namespace std; int main() { cout
DettagliStrutture di Controllo Iterative: Istruzione FOR
Linguaggio C Strutture di Controllo Iterative: Istruzione FOR 1 Istruzioni iterative n Anche dette cicli n Prevedono l esecuzione ripetitiva di altre istruzioni (corpo del ciclo) n Ad ogni iterazione del
DettagliLaboratorio di Algoritmi e Strutture Dati. Pile
Laboratorio di Algoritmi e Strutture Dati Pile Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso dal dott.
DettagliAmbienti di Programmazione per il Software di Base
Ambienti di Programmazione per il Software di Base Le Funzioni in C Esercizi sulle Funzioni svolti Esercizi sulle Funzioni da svolgere A.A. 2011/2012 Ambienti di Programmazione per il Software di Base
DettagliInformatica! Appunti dal laboratorio 1!
Informatica! Appunti dal laboratorio 1! Sistema Operativo! Windows 7, Windows 8, Mac OS X, Linux, Debian, Red Hat, etc etc! Il sistema operativo è un programma che serve a gestire TUTTE le risorse presenti
DettagliCorso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica
Corso di Fondamenti di Informatica Puntatori e Allocazione Dinamica I puntatori (Richiamo) Il C++ prevede puntatori a dati di qualsiasi natura, semplici o strutturati e puntatori a funzione. In particolare
DettagliVariabili e input/ Alessandra Giordani Lunedì 18 marzo
Variabili e input/ output da tastiera Alessandra Giordani agiordani@disi.unitn.it Lunedì 18 marzo 2013 http://disi.unitn.it/~agiordani/ Es. compilazione helloworld.c 2 Variabili e valori Una variabile
DettagliProgrammazione modulare
Programmiamo in.. Programmazione modulare Un programma complesso si suddivide in più sottoprogrammi o funzioni. Un programma suddiviso in piccoli pezzi, è più semplice da gestire da aggiornare da correggere
Dettaglia.a Codice corso: 21012
ESERCIZIO 1 Scrivere un programma in linguaggio C che lette dallo standard input due sequenze vettoriali ordinate di interi V1[n], V2[m] ne crei una terza V3[n+m] anch essa ordinata, che contenga tutti
DettagliCorso di Fondamenti di Informatica Il sistema dei tipi in C++
Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout
DettagliLe strutture /1. struct temp {char titolo[200]; char autore[100]; int pagine; } ; typedef struct temp libro;
Le strutture /1 Le strutture rappresentano un tipo di variabile che, diversamente dagli array, consente di gestire in modo compatto, mediante un'unico identificatore, un insieme di valori che non possiedano
DettagliDefinizione di classi. Walter Didimo
Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti
DettagliLaboratorio di Programmazione Lezione 2. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]
DettagliFondamenti di C++ Input/Output di base
Università della Calabria Corso di Laurea in Ingegneria Elettronica Programmazione Orientata agli Oggetti A.A. 2006/2007 Fondamenti di C++ Paolo Trunfio * * DEIS, Università della Calabria http://si.deis.unical.it/~trunfio
DettagliIntroduzione a C++ e alla programmazione OO. Nunzio Brugaletta
Introduzione a C++ e alla programmazione OO Nunzio Brugaletta 1 Di cosa si parla: Paradigma OOP e C ++ 98 Si determini quali classi si desiderano; si fornisca un insieme completo delle operazioni di ogni
DettagliInformatica! Appunti dal laboratorio 1!
Informatica Appunti dal laboratorio 1 Sistema Operativo Windows Vista, Windows 7, Mac OS X, Linux, Debian, Red Hat, etc etc Il sistema operativo è un programma che serve a gestire TUTTE le risorse presenti
DettagliOOP in C++ ha membro (dati membro) e funzioni membro In Java i dati membro sono chiamati attributi e le funzioni membro metodi
OOP in C++ Classi e Oggetti Una classe èuntipochehavariabili ha membro (dati membro) e funzioni membro In Java i dati membro sono chiamati attributi e le funzioni membro metodi Una variabile ab di un tipo
DettagliEsercitazione 11. Liste semplici
Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene
DettagliCorso di Fondamenti di Informatica Prof. Aldo Franco Dragoni Prova scritta del 21/06/2010. Avvertenze. Specifiche
Avvertenze Usare ESCLUSIVAMENTE penne ad inchiostro nero o blu (NO MATITE). Consegnare solo fogli formato A4 scritti da ambo le parti. In testa a ciascun foglio scrivere: cognome, nome, numero progressivo
DettagliUNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI MATEMATICA E FISICA
UNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI MATEMATICA E FISICA Laboratorio di Programmazione e Calcolo A.A. 2018-19 Test Finale Roma, 17 gennaio 2019 1) Le variabili A, B e C sono dichiarate int.
DettagliUn esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore)
Un esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore) Macchina astratta: un linguaggio di programmazione trasforma un calcolatore in una macchina
DettagliEsercizio 1: media di numeri reali (uso funzioni e struct)
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 5 Esercitazione: 2 novembre 2005 Esercizi sulle funzioni Esercizio 1: media di numeri reali (uso funzioni e struct) Le
DettagliINTRODUZIONE ALLA PROGRAMMAZIONE
INTRODUZIONE ALLA PROGRAMMAZIONE Prof. Enrico Terrone A. S: 2008/09 Definizioni Programmare significa risolvere problemi col computer, cioè far risolvere problemi al computer attraverso un insieme di informazioni
DettagliCostanti e Variabili
Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli
DettagliStandard Template Library
Standard Template Library Standard Template Library Progettata per gestire insiemi di dati in modo comodo ed efficiente senza conoscere dettagli implementativi Fa parte dello standard C++ È basata a sulla
DettagliCorso di Fondamenti di Informatica Tipi strutturati: Stringhe
Corso di Fondamenti di Informatica Tipi strutturati: Stringhe Anno Accademico Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri
DettagliIl C nel C++ Struttura di un linguaggio. Elementi lessicali. Spazi. Livello lessicale: Livello sintattico: Livello semantico:
Struttura di un linguaggio Il C nel C++ Livello lessicale: regole per la definizione i simboli Livello sintattico: regole per la composizione dei simboli Livello semantico: significato delle strutture
DettagliFondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012
Fondamenti di Informatica - 1 Prof. B.Buttarazzi A.A. 2011/2012 Sommario Operatore? Tipo di dato: struct La ricorsione Funzioni ricorsive Esercizi proposti 26/04/2012 2 Operatore? L'operatore? può essere
DettagliVariabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliC++ funzioni Alberto Ferrari. Alberto Ferrari Programmazione di applicazioni SW
C++ funzioni Alberto Ferrari http://en.cppreference.com FUNZIONI le funzioni caratterizzate da nome, parametri (numero, ordine e tipo) e tipo di ritorno le funzioni hanno un prototipo il prototipo non
DettagliLaboratorio di Informatica
Strutture di dati Laboratorio di Informatica 5. Strutture / Array di oggetti / Pila&Coda in C++ Una struttura è un insieme finito di variabili (dette campi) non necessariamente dello stesso tipo, ognuna
DettagliDati due punti sul piano calcolare la loro distanza
Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12
DettagliA. Veneziani - Le variabili puntatore
A. Veneziani - Le variabili puntatore I puntatori Una variabile puntatore è atta a contenere un indirizzo di memoria. Questo, quindi, è il tipo di dato contenuto in una variabile puntatore. A seconda dell
DettagliFondamenti di Programmazione
Fondamenti di Programmazione Ingegneria dell Automazione Industriale Ingegneria Elettronica e delle Comunicazioni Alessandro Saetti Marco Sechi e Andrea Bonisoli (email: alessandro.saetti,marco.sechi,andrea.bonisoli@ing.unibs.it)
DettagliIntroduzione al C++ (continua)
Introduzione al C++ (continua) I puntatori Un puntatore è una variabile che contiene un indirizzo di memoria pi_greco 3.141592 pi_greco_ptr indirizzo di 3.141592 & DEREFERENZIAZIONE RIFERIMENTO * se x
Dettagli#include <iostream> // libreria che gestisce flusso di input e output. using namespace std; // uso di librerie standard del C++
Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni
Dettagliciclo di vita della soluzione (informatica) di un problema
Università di Roma Tor Vergata L2-1 ciclo di vita della soluzione (informatica) di un problema errori run-time errori sintattici codice editor codice C++ compilatore esegui eseguibile OK risultati scorretti
DettagliLezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione
Lezione 5 e 6 - Concetto di blocco - Controllo del flusso di un programma - Costrutti per la scelta if e switch - Costrutti while e for - Operatori in C Fabio Scotti (2004-2009) Laboratorio di programmazione
DettagliLe Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia
Le Funzioni in C Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2010/2011 docente: prof. Michele Salvemini 1/24 Sommario Le funzioni Il
DettagliFile binari e file di testo
I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file
DettagliRappresentazione binaria delle variabili (int e char)
Rappresentazione binaria delle variabili (int e char) int e char son i due tipi utilizzati dal linguaggio C per la rappresentazione di valori interi; ai valori delle variabili del primo tipo sono assegnati
DettagliLinguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.
Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili
DettagliUniversità degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella
Corso di Informatica Tipi strutturati: Stringhe Anno Accademico 2010/2011 Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri quali
DettagliIntroduzione alle classi
Introduzione alle classi Corso di Programmazione 3 - Ingegneria dell Informazione e dell Organizzazione 23 ottobre, 2001 Gino Perna Esempi di semplici classi in C++ INTRODUZIONE AGLI OGGETTI Fin dall'inizio
DettagliFondamenti di Informatica Ing. Biomedica
Fondamenti di Informatica Ing. Biomedica Esercitazione n.8 Matrici Antonio Arena antonio.arena@ing.unipi.it Fondamenti di Informatica - Esercitazione n.8 2 Matrici In C++ viene trattata come array multi-dimesionale.
DettagliIngegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo
Ingegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo In C++ è possibile distinguere due aree distinte di memoria: memoria stack e memoria heap E
DettagliFondamenti di Programmazione
Fondamenti di Programmazione Ingegneria dell Automazione Industriale Ingegneria Elettronica e delle Comunicazioni Alessandro Saetti Marco Sechi e Andrea Bonisoli (email: alessandro.saetti,marco.sechi,andrea.bonisoli@unibs.it)
DettagliFondamenti di Programmazione
Fondamenti di Programmazione Ingegneria dell Automazione Industriale Ingegneria Elettronica e delle Comunicazioni Alessandro Saetti Marco Sechi e Andrea Bonisoli (email: {alessandro.saetti,marco.sechi,andrea.bonisoli@unibs.it)
DettagliTipi di dato. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliHOMEWORKS. in modo che il programma stampi N ripetizioni della stringa HelloWorld (su righe diverse), con N inserito dall utente.
HOMEWORKS Questi esercizi saranno proposti di tanto in tanto e forniti sempre SENZA soluzioni. Come materiale complementare ai libri di testo e alle lezioni frontali e di esercitazione, si consiglia di
DettagliProgrammazione in Java (I modulo)
Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto
DettagliA. Ferrari. informatica. Java basi del linguaggio. Alberto Ferrari Informatica
informatica Java basi del linguaggio Alberto Ferrari Informatica struttura di un programma Java /** * Classe EsempioProgramma * Un esempio di programmazione in Java * @author 4A Informatica */ public class
DettagliLe classi. Per questo introduciamo le classi. Una classe è un nuovo tipo di dato che integra insieme i dati e le funzioni che possono agire sui dati.
Le classi Abbiamo visto che le funzioni sono molto utili nella scomposizione top-down di un problema molto complesso; l uso dei parametri ci consente di associare valori diversi alle stesse variabili senza
DettagliEsercizio 1. Tavola ordinata in memoria centrale
Esercizio 1. Tavola ordinata in memoria centrale E dato un programma che realizza una rubrica telefonica come tavola in memoria centrale. In particolare, ogni elemento della tavola è caratterizzato dalle
DettagliFondamenti di programmazione parte 2. Elementi di informatica IGLP
Fondamenti di programmazione parte 2 Elementi di informatica IGLP Questo insieme di trasparenze è stato ideato e realizzato dai ricercatori e professori del Dipartimento di Informatica e Sistemistica dell
DettagliPuntatori. Grazie ai puntatori:
Puntatori Grazie ai puntatori: 1) è possibile permettere ad una funzione di modificare il contenuto di un area di memoria; 2) invece di passare ad una funzione tutto un blocco di memoria, si passa alla
DettagliFondamenti di Informatica II 3. Funzioni in C++ (parte 1)
Introduzione alle funzioni in C++ Fondamenti di Informatica II 3. Funzioni in C++ (parte 1) Corso di Laurea in Ingegneria Informatica A.A. 2008-2009 2 Semestre Corso (A-M) int main() int n, fattoriale=1;
Dettaglia.a Codice corso: 21012, 22010
ESERCIZIO 1 Scrivere un sotto-programma in linguaggio C++ che ricevuta una matrice quadrata come parametro restituisca al chiamante un valore booleano indicante se la matrice è simmetrica oppure no. Scrivere
DettagliRELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA
RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA Anno scolastico Lab informatica AULA n 35 Data inizio svolgimento Progr. relazione primo trimestre secondo pentamestre Cognome e Nome DATI DELLO STUDENTE
DettagliStandard Input e Standard Output
Istruzioni di I/O Standard Input e Standard Output Il C++ utilizza i concetti di standard input e standard output rispettivamente come astrazione di un canale per l ingresso e per l uscita dei dati In
DettagliLaboratorio di Informatica I
Struttura della lezione Lezione : Elementi lessicali del C Vittorio Scarano Corso di Laurea in Informatica Elementi lessicali e token Costanti Identificatori Operatori operatori di incremento/decremento
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
DettagliCapitolo 10 - Strutture
1 Capitolo 10 - Strutture Strutture In molte situazioni, una variabile non è sufficiente per descrivere un oggetto. Ad esempio, una posizione sul piano cartesiano è identificata da due coordinate, e la
DettagliAllocazione dinamica memoria
Allocazione dinamica memoria Marco Casazza 11/12/2017 1 Esercizio 1 1 /* 2 Creare una lista bidirezionale di interi, ovvero una lista 3 che permette lo scorrimento in entrambe le direzioni ( dal primo
Dettagli(Def. funzioni con parametri di tipo matrice)
ESERCIZIO 1 (Def. funzioni con parametri di tipo matrice) Scrivere un sotto-programma in linguaggio C++ che ricevuta una matrice quadrata come parametro restituisca al chiamante un valore booleano indicante
DettagliFondamenti di Programmazione
Fondamenti di Programmazione Ingegneria dell Automazione Industriale Ingegneria Elettronica e delle Comunicazioni Alessandro Saetti Marco Sechi e Andrea Bonisoli (email: {alessandro.saetti,marco.sechi,andrea.bonisoli}@unibs.it)
DettagliIL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Primo esempio di un programma Java Semplicissimo programma
Dettagli