Lllezione 12 Template. Template. Lezione 12

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Lllezione 12 Template. Template. Lezione 12"

Transcript

1 Lezione 12 Cosa è un Il template è un meccanismo che consente di creare uno schema generico di funzione o di classe, che non fa esplicito riferimento a nessun particolare tipo di dati utile quando si devono implementare più funzioni o classi che si comportano allo stesso modo ma lavorano su dati di tipo diverso Il template consente di progettare solo uno schema generale per implementare una particolare operazione Il compilatore provvede a produrre da questo schema il codice effettivo per implementare l operazione su ogni tipo di dati (predefinito o definito dall utente) /02 1

2 Cosa è un di Funzione Il template di funzione è uno schema di funzione generica, che non fa esplicito riferimento a nessun particolare tipo di dati input consente di progettare un unica funzione per implementare una particolare operazione All interno del codice del programma di sarà una diversa funzione per implementare l operazione su ogni tipo di dati La generazione di tutte le funzioni è a carico del compilatore Il compilatore provvede a produrre da questo schema una diversa funzione per ogni tipo di dati 2 Cosa è un di Classe Il template di classe è uno schema di classe generica, che non fa esplicito riferimento a nessun particolare tipo di dati membro consente di progettare un unica classe per implementare un tipo di dato astratto, indipendente dal tipo di dato contenuto al suo interno All interno del codice del programma ci sarà una diversa classe per implementare il tipo di dato astratto per ogni possibile tipo di dato membro La generazione di tutte le classi e dei suoi metodi è a carico del compilatore Il compilatore provvede a produrre da questo schema una diversa classe per ogni tipo di dato membro /02 2

3 e Overloading L overloading consente di assegnare lo stesso nome a funzioni differenti il programmatore deve scrivere tutte le funzioni semplificazione esclusivamente lessicale (assegna un nome ad ogni operazione logica) Il template è uno schema di funzione che può essere applicato su diversi dati il programmatore deve scrivere una sola funzione tutte le versioni ricavate dallo schema devono avere la stessa implementazione e differire solo per il tipo dei dato su cui operano 4 Schemi di Funzione in C Molti linguaggi di programmazione hanno meccanismi che consentono di scrivere delle funzioni generiche In C è possibile usare le macro per produrre funzioni generiche #define max(a,b) ((a)>(b))? (a) : (b) Le macro effettuano una sostituzione testuale degli argomenti con i valori passati nella chiamata alla macro nessun controllo sui tipi il compilatore non è in grado di supportare il controllo sui tipi /02 3

4 Quando Creare di Funzioni Creare un template di funzioni se si devono usare più versioni della stessa funzione che lavorano su dati di tipo diverso Operano tutte alla stessa maniera ma usano variabili di tipo diverso int max(int, int); // massimo tra due interi char max(char, char); // massimo in un vettore di interi double max(double, double); // massimo tra due double Si possono utilizzare i template di funzioni per creare librerie di funzioni generiche l utente della libreria potrà utilizzare la libreria su qualunque tipo di dati 6 Definizione di un Il template di una funzione deve essere dichiarato o definito prima di essere utilizzato dal programma La definizione (dichiarazione) di un template di funzione è una definizione (dichiarazione) di una funzione parametrizzata T max( T* a, int dim) { \\ max in un array (di ogni tipo) T tmp = a[0]; for( int i = 1; i < dim; i++ ) if( a[i] > tmp ) tmp = a[i]; return tmp; /02 4

5 Parametri del Nella definizione (dichiarazione) di un template si deve specificare la lista dei parametri, tra <> Parametri rispetto ai quali è descritto il comportamento della funzione Un parametro può essere un tipo (parametro di tipo) Preceduto dalle parole class o typename un espressione costante (parametro di valore) Preceduta dal tipo del risultato dell espressione template <class T, int size> T max( T (&a)[size]) { \\ max in un array di dimensione size di tipo T 8 Corretta Definizione di un La parola riservata template e la lista dei parametri del template sono obbligatori Ogni parametro deve essere preceduto dal suo tipo class (typename) tipo predefinito (definito dall utente) Tutti i parametri devono avere nomi distinti Ogni parametro deve comparire nella firma della funzione Il nome del parametro non può essere ridefinito nella funzione /02 5

6 Esempi Dichiarazioni di template <class T, class T> T f(t, T); // ERRORE template <class T, U> void f(t, U); // ERRORE template <class T, typename U> void f(t, U); // CORRETTO template <class T, class U> U f(t, T); // ERRORE T f(t, T) { typedef double T; // ERRORE 10 Inizializzazione di Default dei Parametri del Lo standard C++ supporta l inizializzaione per default dei parametri di un template Valgono le stesse regole per l inizializzazione per default dei parametri di una funzione Non tutti i compilatori supportano questa proprietà I compilatori pre-standard non supportano l inizializzazione per default dei parametri del template /02 6

7 Istanziazione di un Quando il compilatore legge la definizione di un template non alloca nessuna memoria non è in grado di calcolare la dimensione del record di attivazione non sa come implementare la funzione parametrizzata La definizione delle varie istanze di funzioni ricavate dal template (istanziazione del template) avviene solo quando queste funzioni vengono utilizzate Funzione invocata dal programma assegnamento dell indirizzo della funzione ad un puntatore l'istruzione che provoca l'istanziazione è detta punto di istanziazione 12 Istanziazione di un Quando il programma invoca una delle funzioni ricavate dal template il compilatore opera nel seguente modo: 1. sospende la compilazione, 2. recupera la definizione del template, 3. deduce dalla chiamata i tipi ed i valori dei parametri 4. sostituisce ai parametri del template i tipi ed i valori dedotti, 5. definisce la funzione così ottenuta L istanziazione avviene soltanto la prima volta che una funzione viene invocata le chiamate successive sono implementate normalmente /02 7

8 Esempio Istanziazione T max(t*, int); int ai[4] = { 12, 8, 73, 45 ; int main() { int size = sizeof (ai) / sizeof (ai[0]); cout << "massimo di ai è: " << max( ai, size ) << endl; // istanzia max(int*, int) 14 Deduzione degli Argomenti E il processo attraverso il quale il compilatore ricava dagli argomenti della chiamata i tipi ed i valori da attribuire ai parametri del template per ogni prima occorrenza di un parametro del template nella lista dei parametri della funzione, assegna al parametro il tipo del corrispondente argomento della chiamata template <class T, class U> void f(t, U, T); f(0, a, 10); \\ genera f(int, char, int) f(0, a, 3.14); \\ ERRORE tutti gli argomenti parametrizzati devono corrispondere esattamente al tipo assegnato al parametro il tipo del risultato non conta per la deduzione /02 8

9 Algoritmo per Istanziazione Quando il compilatore legge una chiamata ad un template di funzione opera nel seguente modo Controlla che ogni parametro del template compaia compaia come parametro della funzione cerca nella firma la prima occorrenza di ogni parametro del template e gli assegna il tipo o il valore dell'argomento corrispondente controlla che tutte le altre occorrenze del parametro del template corrispondano esattamente (anche con corrispondenze banali) con i corrispondenti argomenti cerca una corrispondenza tra i parametri della funzione non parametrizzati ed i corrispondenti argomenti Se il compilatore non è in grado di dedurre il tipo di un parametro del template segnala un ambiguità 16 Esempio template <typename Type, int size> Type min( Type (&r_array)[size] ) { Type min_val = r_array[0]; for ( int i = 1; i < size; ++i ) if ( r_array[i] < min_val ) return min_val; min_val = r_array[i]; int ia[] = { 10, 7, 14, 3, 25, ia2[5] = { 10, 15, 2, 20, 16, *ptr; double da[6] = { 10.2, 7.1, 14.5, 3.6, 25.4 ; int *ptr = ia; int i = min( ia ); i = min( ia2 ); i = min(ptr); i = min( da ); // istanzia min(int(&)[5]) // invoca la funzione min(int(&)[5] // ERRORE // istanzia min(double(&)[6]) /02 9

10 Istanziazione Esplicita Nell invocare un template di funzione è possibile indicare esplicitamente il valore di un parametro del template il compilatore non esegue l'algoritmo di deduzione ed accetta la scelta del programmatore Utile per risolvere le situazioni di ambiguità T min(t, T); int main() { unsigned int ui = 1024; min(ui, 1024); // ERRORE min<int>(ui, 1024); // istanzia min(int, int) min<unsigned int>(ui, 1024); 18 Tipo del Risultato Parametrizzato Utilizzando l'istanziazione esplicita è possibile parametrizzare anche il tipo del risultato istanziazioni di questo template sono corrette solo se esplicite template <class T1, class T2, class T3> T1 min(t2, T3); per le istanziazioni dei parametri del template valgono le stesse regole dell'inizializzazione dei parametri di funzione per default char c; unsigned int ui; unsigned int ris = min(c, ui); // ERRORE ris = min<unsigned int, char, unsigned int>min(c, ui); ris = min<unsigned int>min(c, ui); /02 10

11 Risoluzione Ambiguità L'istanziazione esplicita può essere usata per eliminare l'ambiguità presente nella chiamata ad una funzione che ha argomenti parametrizzati T f(t); void g(int(*)(int)); void g(double(*)(double)); main() { g(&f); g(&f<int(*)(int)>); // ERRORE 20 Overloading di E possibile creare versioni sovrapposte di template di funzioni diversi template svolgono la stessa operazione logica ma in modi differenti tutte le istanze prodotte dai vari template devono differire tra loro per numero o tipo di argomenti Ogni istanza di un template è una funzione del programma che deve avere una firma che la identifica univocamente /02 11

12 Esempio Overloading di T min(t, T); T min(const T*, int); template <typename T> T min(const vector<t>&); int i = 0, ia[10]; i = min(3, 5); // corrisponde alla prima funzione i = min(ia, 10); // corrisponde alla seconda funzione template <class T, class U> int min(t, U); i = min(3, 5); // ambigua, perché? 22 Specializzazione di Per alcuni tipi di dati la versione generale fornita dal template di funzione può essere scorretta o inefficiente E' possibile definire un eccezione al template Lo schema generale del template viene utilizzato per generare funzioni per tutti i tipi di dati tranne quelli per cui sono specificate le eccezioni Per i tipi che fanno eccezione devono essere definite delle specializzazioni del template si può specializzare un template solo dopo aver dichiarato lo schema generale /02 12

13 Specializzazione Esplicita di La definizione di una specializzazione è una definizione di un template con i parametri istanziati T max(t, T); typedef const char* PCC; template <> PCC max<pcc>(pcc s1, PCC s2) { return(strcmp(s1, s2) > 0? s1 : s2); int main() { const char* p = max("ciao", "mondo"); // chiama la specializzazione e non istanzia il template 24 Utilizzo delle Specializzazioni La dichiarazione di una specializzazione deve precedere la prima chiamata alla funzione al momento della chiamata il compilatore deve sapere che deve usare la specializzazione invece del template La dichiarazione di una specializzazione deve essere inclusa in tutti i file in cui viene utilizzata la specializzazione non è possibile usare in un file la specializzazione e in un altro file istanziare il template conviene inserire la dichiarazione del template e delle sue specializzazioni nello stesso header file /02 13

14 Specializzazione Esplicita di T max(t, T); int main() { int i = max( 10, 5 ); // istanzia max( int, int ); const char *p = max( "ciao", "mondo" ); // istanzia const char* max( const char*, const char* ) cout << "i: " << i << " p: " << p << endl; return 0; typedef const char* PCC; template<> PCC max<pcc>(pcc s1, PCC s2) { // ERRORE, doppia definizione 26 Specializzazione Implicita di Una funzione che abbia la stessa firma di un'istanza del template è una specializzazione implicita sulle chiamate a questa funzione non valgono le regole restrittive della deduzione dei parametri del template la definizione di una specializzazione implicita deve precedere la sua istanziazione T min(t, int); int min(unsigned int,int); int i = min(3u,i); // viene chiamata la funzione ordinaria min /02 14

15 Risoluzione dell Overloading e Istanziazioni Nella risoluzione di un overloading il compilatore può istanziare funzioni da un template anche se non esplicitamente invocate nel creare l'insieme dei candidati istanzia tutte le funzioni che possono essere dedotte dagli argomenti della chiamata la funzione istanziata sarà realmente invocata solo se è la migliore funzione utilizzabile T sum(t, int); double sum(double, double); sum(3.14, 0); // istanzia ed invoca sum(double, int) 28 Risoluzione dell Overloading e Specializzazioni Implicite Se un template ha delle specializzazioni implicite nella lista delle funzioni candidate viene inserita sia la specializzazione che la funzione istanziata dal template la specializzazione è preferita rispetto alla funzione istanziata T min(t, T); int min(int, int); min(3, 2); /* la specializzazione e l'istanza del template sono candidate la specializzazione è invocata */ /02 15

16 Risoluzione dell Overloading e Specializzazioni Esplicite Se un template ha delle specializzazioni esplicite nella lista delle funzioni candidate viene inserita la specializzazione e non la funzione istanziata dal template la specializzazione è una candidata solo se la sua firma può essere dedotta dalla chiamata T min(t, T); template <> double min<double>(double, double); int min(int, int); min(3.14, 2); // no match min(3.14, 2.5); // la specializzazione è candidata 30 Risoluzione di una Chiamata ad una Funzione 1. Costruisce l'insieme delle funzioni candidate funzioni con lo stesso nome della funzione chiamata istanze di template con lo stesso nome della funzione chiamata e che possono essere dedotte dalla chiamata 2. Costruisce l'insieme delle funzioni utilizzabili seleziona le funzioni candidate i cui parametri corrispondono per tipo e numero agli argomenti della chiamata 3. Classifica il tipo di corrispondenza di ogni funzione utilizzabile 4. Seleziona la migliore funzione utilizzabile se ne esiste una sola la chiamata è risolta se ce ne sono più di una la chiamata è ambigua se non ce ne sono la chiamata non è risolta /02 16

17 Esempio T min(t, T); double min(double, double); main() { int i; double d; float f; min(0, i); // due candidate, invoca l'istanza del template per T = int min(3.14, d); // invoca la specializzazione min(0, f); // specializzazione unica candidata char min(char, char); // cosa succede alla terza chiamata? 32 Quando Creare di Classi Un template di classe permette di creare classi contenitore che possono essere utilizzate per contenere qualunque tipo di dati class Coda{ T* vett; ; Si possono utilizzare i template di classi per creare librerie di classi generiche l utente della libreria potrà utilizzare la classe della libreria istanziandola per qualunque tipo di dati /02 17

18 Definizione di un di Classi La definizione (dichiarazione) di un template di classi è strutturata come la definizione di una classe normale contiene lista dei parametri del template i parametri possono essere utilizzati nella definizione class Coda { public: Coda(); ~Coda(); void inserisci( const T& ); T& rimuovi(); bool vuota(); private: ; 34 Definizione Classe Coda class CodaItem { public: friend class Coda<T>; CodaItem(const T&); private: CodaItem<T>* succ; T item; ; class Coda { public: Coda(); ~Coda(); void inserisci( const T& ); T& rimuovi(); bool vuota(); private: CodaItem<T>* testa; CodaItem<T>* coda; ; /02 18

19 Istanziazione di un di Classi Quando il compilatore legge la definizione di un template di classi non alloca memoria Un istanza del template viene creata solo quando il programma definisce una variabile della classe per definire una variabile della classe bisogna specificare tutti i valori da assegnare ai parametri del template La definizione di un puntatore o un riferimento non istanzia il template Coda<int> qi; Coda<string> qs; Coda<double>* pqd; Coda q; // non istanzia il template // ERRORE 36 Istanziazione di un di Classi L istanziazione di un template può essere utilizzato come specificatore di tipo Non è possibile far riferimento al template della classe al di fuori dello scope del template /02 19

20 Punto di Istanziazione di un di Classi Il punto di istanziazione di un template è il momento in cui viene generata la classe Definizione di una variabile Dereferenziazione di un puntatore o di un riferimento Nel punto di istanziazione del template deve essere visibile la definizione del template Nel C++ pre-standard dovevano essere visibili anche le definizioni dei metodi La definizione di una classe va inserita in un file di intestazione mentre le definizioni dei suoi metodi vanno inseriti in un file di implementazione Ogni file in cui si istanzia il template include la definizione della classe 38 Metodi di di Classi I metodi di un template di classi sono template di funzioni Possono essere definiti inline all interno della definizione del template o esterni alla definizione class Coda { public: Coda() : testa(0), coda(0) {; ~Coda(); void inserisci( const T& ); T& rimuovi(); bool vuota() { return front == 0; private: CodaItem<T>* testa; CodaItem<T>* coda; ; /02 20

21 Metodi di di Classi Coda<T>::~Coda() { while(!vuota() ) rimuovi(); void Coda<T>::inserisci(const T& val) { CodaItem<T> *pt = new CodaItem<T>(val); if(vuota()) testa = coda = pt; else { coda->succ = pt; coda = pt; 40 Metodi di di Classi T& Coda<T>::rimuovi() { if(vuota()) { cerr << coda vuota << endl; exit(-1); CodaItem<T> *pt = testa; testa = testa->succ; T val = pt->item; delete pt; return val; /02 21

22 Relazioni di Amicizia per di Classi Esistono tre tipi di dichiarazioni di amicizia che possono comparire nella definizione di un template di classi class F; class CodaItem { friend class F; friend void f(); friend void F::f(); ; Le classi e le funzioni non template sono amiche di ogni istanza del template 42 Istanziazione dei Metodi di un di Classi I metodi di un template di classi vengono istanziati quando sono invocati per la prima volta L istanziazione dei metodi segue le regole dell istanziazione dei template di funzioni Il C++ pre-standard istanzia tutti i metodi del template di classi contemporaneamente alla istanziazione della classe /02 22

23 Relazioni di Amicizia per di Classi class F; void f(codaitem<t>); class Coda { friend class F<T>; friend void f(codaitem<t>); friend void F<T>::f(); ; Ogni istanza della classe F è amica della corrispondente classe Coda 44 Relazioni di Amicizia per di Classi class CodaItem { template <class U> friend class F; template <class U> friend void f(codaitem<u>); template <class U> friend void F<U>::f(); ; Tutte le istanze della classe F sono amiche di ogni istanza della classe CodaItem /02 23

24 Relazioni di Amicizia tra Coda e CodaItem class CodaItem { friend class Coda<T>; friend ostream& operator<<(ostream&, CodaItem<T>&); private: CodaItem(const T&); CodaItem<T>* succ; T item; ; 46 Output di Coda e CodaItem ostream& operator<<( ostream &os, const CodaItem<T> &qi ) { os << qi.item; return os; ostream& operator<<( ostream &os, const Coda<T> &q ) { os << "< "; CodaItem<T> *p; for ( p = q.testa; p; p = p->succ ) os << *p << " "; os << " >"; return os; /02 24

25 Elementi static di un Un template di classi può dichiarare dei membri static ogni istanza del template avrà le proprie copie dei dati static i dati static sono comuni solo tra variabili dello stesso tipo di istanziazione I dati static vengono istanziati solo quando vengono usati per la prima volta La sintassi per inizializzare un dato static di un template è int Coda<T>::cont = 1; 48 Membri static di CodaItem class CodaItem { friend class Coda<T>; friend ostream& operator<<(ostream&, CodaItem<T>&); private: static const unsigned int _blocco; static CodaItem<T>* free_list; CodaItem(const T&); void* operator new(size_t); void operator delete(void*, size_t); CodaItem<T>* succ; T item; ; CodaItem<T>* CodaItem<T>::free_list = 0; const unsigned int CodaItem<T>::_blocco = 24; /02 25

26 Uso Membri static di CodaItem void* CodaItem<T>::operator new( size_t size ) { CodaItem<T> *p; if (! free_list ) { size_t blo = _blocco * size; free_list = p = reinterpret_cast<codaitem<t>* > ( new char[blo] ); for ( ; p!= &free_list[ CodaItem_blocco - 1 ]; ++p ) p->succ = p + 1; p->succ = 0; p = free_list; free_list = free_list->succ; return p; 50 Uso Membri static di CodaItem void CodaItem<T>::operator delete( void *p, size_t ) { static_cast< CodaItem<T>* >( p )->succ = free_list; free_list = static_cast< CodaItem<T>* > ( p ); /02 26

27 Membri Il C++ standard consente la definizione di metodi template all interno di classi (sia template che non template) Tecnica ampiamente utilizzata nella libreria standard per supportare la programmazione generica Non supportata da compilatori pre-standard Ogni istanza della classe template contiene tutte le istanze del metodo template Il metodo template è istanziato quando viene invocato 52 Specializzazione di un di Classi E possibile definire delle versioni specializzate del template della classe template <> class Coda<LongDouble> { ; La specializzazione deve seguire la definizione del template La specializzazione deve essere inseritain tutti i file del programma In questo caso bisogna fornire le specializzazioni per tutti i metodi del template della classe E possibile definire anche solo la specializzazione di alcuni metodi della classe class LongDouble; template <> LongDouble Coda::remove() { /02 27

28 Specializzazioni Parziali Se il template ha più parametri è possibile fornire una specializzazione per solo uno dei parametri Può fornire implementazioni più efficienti per specifici valori del parametro 54 Risoluzione dei Nomi nei Ogni istanza del template ha un proprio scope locale il compilatore cerca di risolvere, se possibile, i nomi quando legge la definizione del template i nomi non dipendenti dal template sono risolti subito i nomi dipendenti dal template sono risolti dopo l'istanziazione Un nome potrebbe essere risolto con una variabile non visibile al momento della definizione del template T min(t* array, int size) { // size non dipende dal template T minval = array[0]; // minval dipende dal template for(int i = 1; i < size; i++) if(array[i] < minval) minval = array[i]; return minval; /02 28

29 Risoluzione dei Nomi nei Quando il template contiene una chiamata a funzione se tra gli argomenti non ci sono variabili dipendenti dal template la funzione deve essere dichiarata prima della definizione del template se tra gli argomenti ci sono variabili dipendenti dal template la funzione deve essere dichiarata prima della istanziazione del template T min(t* array, int size) { T minval = array[0]; // minval dipende dal template for(int i = 1; i < size; i++) if(array[i] < minval) minval = array[i]; print(minval); // print non dichiarata return minval; 56 Modelli di Compilazione di Al momento dell'istanziazione del template il compilatore deve produrre il codice del'istanza deve conoscere la definizione del template il compilatore deve interrompere la compilazione, risolvere i valori da assegnare ai parametri e generare la classe La definizione di una classe non determina allocazione di memoria La definizione di una classe può essere inserita più volte all interno dello stesso programma La definizione di un template di classe va inserita in un file di intestazione Il file viene incluso in tutti i file in cui deve essere istanziato il template /02 29

30 Modelli di Compilazione di I metodi del template di classi e i membri static si comportano come template di funzioni Le definizioni devono essere visibili nel punto in cui vengono istanziati I metodi sono istanziati solo quando vengono invocati per la prima volta Il C++ standard supporta due modelli di compilazione dei template di funzioni modello ad inclusione modello a separazione 58 Modello ad Inclusione La definizione di un metodo del template deve essere inclusi in ognuno dei file in cui il template è istanziato il template viene inserito in un header file la definizione del template è trattata come le funzioni inline Se l'header file viene incluso in più di un file il compilatore deve generare una sola copia di ogni istanza del template L implementazione dipende dal compilatore molti compilatori generano istanze del template in ogni file. Il linker seleziona una sola istanza e la utilizza per tutte le chiamate /02 30

31 Modello ad Inclusione in g++ Il g++ supporta il modello ad inclusione istanzia i template in tutti i file in cui sono richiesti solo una di queste istanziazioni è utilizzata Questo modello di compilazione è inefficiente sia per tempo che per spazio Possibile migliorare i tempi di compilazione dicendo al compilatore di non generare tutte queste copie 60 Istanziazione Esplicita Per obbligare il compilatore a generare una certa istanza in un file è possibile inserire una dichiarazione di istanziazione esplicita Istanzia sia la classe che tutti i suoi metodi Le definizioni dei metodi devono essere visibili l istanziazione esplicita si deve trovare nello stesso file della definizione dei template di funzione In genere si inserisce la definizione del template in un file di implementazione insieme alle istanziazioni esplicite template class Coda<int>; Bisogna garantire che il compilatore non istanzi gli stessi metodi anche in altri file si usa un opzione di compilazione per dire al compilatore di istanziare template solo se il programma ne fa richiesta esplicita in g++ Opzione no_implicit_istantiation /02 31

32 Modello a Separazione La dichiarazione del template viene inclusa in ogni file dove il template è utilizzato. La definizione viene inclusa in un file di implementazione linkato al programma le istanze del template sono gestite come le funzioni non inline la definizione del template deve essere resa visibile a tutti i file export T min(t x, T y) { export Coda { ; su molti compilatori questa organizzazione non funziona (Es. g++) 62 Esempio file min.h file min.c file main.c T min(t, T); export T min(t a, T b) { return (a < b? a : b); #include min.h main() { int i = min(3, 6); /02 32

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Dettagli

Inizializzazione, Assegnamento e Distruzione di Classi

Inizializzazione, Assegnamento e Distruzione di Classi Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della

Dettagli

Ingegneria del Software

Ingegneria del Software Ingegneria del Software Analisi Object Oriented ed Elementi di Programmazione OO Origini Le metodologie ad oggi nascono negli anni 70 ma si affermano solo nelgi anni 80 grazie alla nascita dei linguaggi

Dettagli

Java Native Interface Appunti

Java Native Interface Appunti Java Native Interface Appunti Riccardo Rizzo 1/8 Introduzione L'uso delle Java Native Interface e' giustificato tutte quelle volte che una applicazione non puo' essere scritta interamente in Java. Per

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Le operazioni di allocazione e deallocazione sono a carico del sistema. Allocazione della memoria In C++ è possibile creare (allocare) variabili in maniera statica o dinamica. Nell allocazione statica una variabile esiste ed è utilizzabile dal momento della sua dichiarazione

Dettagli

Gestione di files Motivazioni

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

Dettagli

costruttori e distruttori

costruttori e distruttori costruttori e distruttori Costruttore E un metodo che ha lo stesso nome della classe a cui appartiene: serve per inizializzare un oggetto all atto della sua creazione Ce ne possono essere uno, più di uno,

Dettagli

TUTORATO di LINGUAGGI I

TUTORATO di LINGUAGGI I TUTORATO di LINGUAGGI I Enrico Vianello TUTORATO di LINGUAGGI I contatti utili LE LEZIONI SI TERRANNO: VENERDI 12.30-14.30 PER INFORMAZIONI e DOMANDE: enrico.vianello@student.unife.it IL MATERIALE UTILIZZATO

Dettagli

Visibilità dei Membri di una Classe

Visibilità dei Membri di una Classe Visibilità dei Membri di una Classe Lezione 10 Ogni classe definisce un proprio scope racchiude il codice contenuto nella definizione della classe e di tutti i suoi membri ogni metodo della classe definisce

Dettagli

Gestione delle eccezioni in Java

Gestione delle eccezioni in Java Gestione delle eccezioni in Java Fondamenti di Informatica Ingegneria Gestionale Canale AL 1 Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel

Dettagli

3. Terza esercitazione autoguidata: progetto gestione voli

3. Terza esercitazione autoguidata: progetto gestione voli 9 3. Terza esercitazione autoguidata: progetto gestione voli Qui ci occupiamo di scrivere un programma abbastanza lungo, dedicato alla gestione di una tabella di dati. Una tabella e una struttura dati

Dettagli

strutturare dati e codice

strutturare dati e codice Puntatori e passaggio parametri strutturare dati e codice Tipo di dati int * Pi ; Op. dereferenziazione j = *Pi ; Op. indirizzo Pi = &i ; By value int f(int i) ; a = f(b) ; By address int f(int * Pi) ;

Dettagli

Generalizzazione di funzioni e di classi. Macro come funzioni generiche

Generalizzazione di funzioni e di classi. Macro come funzioni generiche Alessio Bechini - Corso di - Generalizzazione di funzioni e di classi Il meccanismo di template Macro come funzioni generiche long longmax(long x, long y) { Possibile soluzione int intmax(int x, int y)

Dettagli

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella Corso di Informatica Puntatori Anno Accademico 2010/2011 Francesco Tortorella Variabili, registri ed indirizzi Abbiamo visto che la definizione di una variabile implica l allocazione (da parte del compilatore)

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica Introduzione alla programmazione in C++ 1 Un introduzione Che cosa è il C++? La programmazione procedurale La programmazione orientata agli oggetti La programmazione

Dettagli

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

void funzioneprova() { int x=2; cout<<dentro la funzione x=<<x<<endl; } FUNZIONI 57. Cosa servono le funzioni? A spezzare il programma in diverse parti relativamente indipendenti fra loro, ovvero interagenti sono attraverso i parametri di input ed IL VALORE di uscita. In questo

Dettagli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1) Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi

Dettagli

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

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Unità Didattica 3 Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli

Dettagli

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste 4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

Allocazione dinamica della memoria - riepilogo

Allocazione dinamica della memoria - riepilogo Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della

Dettagli

Informatica Medica C++ Informatica Medica I semestre Docenti: Fabio Solari e Manuela Chessa. Sviluppo di un applicazione eseguibile

Informatica Medica C++ Informatica Medica I semestre Docenti: Fabio Solari e Manuela Chessa. Sviluppo di un applicazione eseguibile Corso di Laurea in Ingegneria Biomedica Informatica Medica I semestre Docenti: Fabio Solari e Manuela Chessa Prof. Fabio Solari: fabio.solari@unige.it (010-3532059) Prof. Manuela Chessa: manuela.chessa@unige.it

Dettagli

dall argomento argomento della malloc()

dall argomento argomento della malloc() Allocazione dinamica Quando? Tutte le volte in cui i dati possono crescere in modo non prevedibile staticamente a tempo di sviluppo Un array con dimensione i fissata a compile-time non è sufficiente È

Dettagli

Uso degli oggetti. Un programma Java. è un insieme di oggetti, ognuno istanza di una classe, che si inviano messaggi

Uso degli oggetti. Un programma Java. è un insieme di oggetti, ognuno istanza di una classe, che si inviano messaggi Uso degli oggetti Uso di oggetti predefiniti attraverso l'invio di messaggi. Il concetto di metodo; argomenti e restituzione di valori; segnatura e prototipo di un metodo. Il concetto di overloading. Le

Dettagli

Grammatica di base: Pointers

Grammatica di base: Pointers Grammatica di base: Pointers Esistono I puntatori a funzioni. Bisogna esplicitare esattamente il tipo di ritorno e il tipo di argomento. Per evitare ambiguità con il prefisso * nel declarator, il nome

Dettagli

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

3. La sintassi di Java

3. La sintassi di Java pag.9 3. La sintassi di Java 3.1 I tipi di dati statici In Java, come in Pascal, esistono tipi di dati statici predefiniti e sono i seguenti: byte 8 bit da -128 a 127 short 16 bit coincide con l integer

Dettagli

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole. Excel VBA VBA Visual Basic for Application VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole. 2 Prima di iniziare. Che cos è una variabile?

Dettagli

2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.

2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno. Tipo File Per memorizzare un dato su un supporto magnetico come un hard disk o un nastro, o più in generale su un'unità di memoria di massa viene utilizzata un tipo di dato chiamato file. Un file può essere

Dettagli

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

IL CONCETTO DI FILE. È illecito operare oltre la fine del file. IL CONCETTO DI FILE Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni su memoria di massa. Concettualmente, un file è una sequenza di registrazioni

Dettagli

Esonero del corso di Programmazione a Oggetti

Esonero del corso di Programmazione a Oggetti Esonero del corso di Programmazione a Oggetti Roma, 1 dicembre 2005 Considerate le seguenti definizioni di classi e interfacce in Java: interface Fumetto{ void esclama(); void utile(); class Personaggio

Dettagli

Librerie. Laboratorio di Informatica Antonio Monteleone 28

Librerie. Laboratorio di Informatica Antonio Monteleone 28 Librerie Una libreria è una collezione di funzioni (classi, variabili) usata per sviluppare applicazioni. Le funzioni (classi, variabili) contenute in una libreria si dicono da questa esportate. L'uso

Dettagli

Connessione ad internet

Connessione ad internet Introduzione al C++ Connessione ad internet Istruzioni per la connessione internet: - una volta connessi, aprire un browser (firefox) - in Modifica/preferenze/avanzate/rete/impostazioni - attivare la modalità

Dettagli

I puntatori e l allocazione dinamica di memoria

I puntatori e l allocazione dinamica di memoria I puntatori e l allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 2006 Politecnico di Torino 1 Allocare = collocare in

Dettagli

Introduzione alla Programmazione ad Oggetti in C++

Introduzione alla Programmazione ad Oggetti in C++ Introduzione alla Programmazione ad Oggetti in C++ Lezione 1 Cosa è la Programmazione Orientata agli Oggetti Metodologia per costruire prodotti software di grosse dimensioni che siano affidabili e facilmente

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009 Lab 02 Tipi semplici in C Obiettivo dell esercitazione Acquistare familiarità con i tipi di dato semplici supportati

Dettagli

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 08/03/07 Nota Questi lucidi sono tratti

Dettagli

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008 Programmazione I / Informatica generale Prova scritta 11 Giugno 2008 NOTA: Si trascuri ogni problema legato al tipo ed al valore di ritorno della funzione main. Inoltre, nei programmi è da sottintendere

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Programmazione. Laboratorio. Roberto Cordone DI - Università degli Studi di Milano

Programmazione. Laboratorio. Roberto Cordone DI - Università degli Studi di Milano Gestione della memoria p. 1/11 Programmazione Laboratorio Roberto Cordone DI - Università degli Studi di Milano Tel. 02 503 16235 E-mail: roberto.cordone@unimi.it Ricevimento: su appuntamento Lezioni:

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

Lezione 9: Strutture e allocazione dinamica della memoria

Lezione 9: Strutture e allocazione dinamica della memoria Lezione 9: Strutture e allocazione dinamica della memoria Laboratorio di Elementi di Architettura e Sistemi Operativi 9 Maggio 2012 Allocazione dinamica della memoria Memoria dinamica È possibile creare

Dettagli

Linguaggio C - Funzioni

Linguaggio C - Funzioni Linguaggio C - Funzioni Funzioni: Il linguaggio C è di tipo procedurale; ogni programma viene suddiviso in sottoprogrammi, ognuno dei quali svolge un determinato compito. I sottoprogrammi si usano anche

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore. 1 Esercizio 1 1. Immaginate di avere una calcolatore che invece che poter rappresentare i classici due valori per ogni bit (0/1) possa rappresentare 7 valori per ogni bit. (a) Quanti bit gli occorreranno

Dettagli

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Dall Algoritmo al Programma Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni IL PROGRAMMA Gli algoritmi sono modelli di descrizione astratti e per controllarne il funzionamento devono essere

Dettagli

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio 1-La memoria dinamica La scrittura di un programma (indipendentemente dal linguaggio adottato) deve sempre tener conto

Dettagli

Corso Programmazione 1 Capitolo 01: Concetti Elementari

Corso Programmazione 1 Capitolo 01: Concetti Elementari Corso Programmazione 1 Capitolo 01: Concetti Elementari Docente: Roberto Sebastiani - roberto.sebastiani@unitn.it Esercitatori: Mario Passamani - mario.passamani@unitn.it Alessandro Tomasi - alessandro.tomasi@unitn.it

Dettagli

ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)

ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia) ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia) Scrivere una funzione per definire se un numero è primo e un programma principale minimale che ne testa la funzionalità. #include

Dettagli

Funzioni. Il modello console. Interfaccia in modalità console

Funzioni. Il modello console. Interfaccia in modalità console Funzioni Interfaccia con il sistema operativo Argomenti sulla linea di comando Parametri argc e argv Valore di ritorno del programma La funzione exit Esercizio Calcolatrice 2, presente in tutti i programmi

Dettagli

Utilizzo e scrittura di classi

Utilizzo e scrittura di classi Utilizzo e scrittura di classi Corso di Programmazione 3 - Ingegneria dell Informazione e dell Organizzazione 14 novembre, 2001 Gino Perna Implementazione di classi in C++ UN ESEMPIO DI CLASSE: RISULTATI

Dettagli

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili Indirizzo di una funzione 2 Puntatori a funzioni Ver. 2.4 Si può chiamare una funzione utilizzando l indirizzo di memoria dal quale inizia il codice eseguibile della funzione stessa L indirizzo di memoria

Dettagli

AA 2006-07 LA RICORSIONE

AA 2006-07 LA RICORSIONE PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella

Dettagli

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad

Dettagli

Nomi e Ambiente. Nicola Fanizzi. Linguaggi di Programmazione [010194] 20 apr, 2016. Dipartimento di Informatica Università degli Studi di Bari

Nomi e Ambiente. Nicola Fanizzi. Linguaggi di Programmazione [010194] 20 apr, 2016. Dipartimento di Informatica Università degli Studi di Bari Nomi e Ambiente Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 20 apr, 2016 Sommario 1 Nomi Definizione Astrazione Elementare Progettazione

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E01 Esempi di programmi A. Miola Ottobre 2011 1 Contenuti Vediamo in questa lezione alcuni primi semplici esempi di applicazioni

Dettagli

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014 Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 18 31/03/2014 Funzioni: Dichiarazione e Definizione La dichiarazione di una funzione serve a comunicare al compilatore quali sono

Dettagli

puntatori Lab. Calc. AA 2007/08 1

puntatori Lab. Calc. AA 2007/08 1 puntatori Lab. Calc. AA 2007/08 1 parametri delle funzioni (dalla lezione scorsa) gli argomenti in C vengono passati by value dalla funzione chiamante alla funzione chiamata la lista degli argomenti viene

Dettagli

Laboratorio di Algoritmi e Strutture Dati. La gestione della memoria dinamica Heap

Laboratorio di Algoritmi e Strutture Dati. La gestione della memoria dinamica Heap Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Proff. Francesco Cutugno e Luigi Lamberti 2009 Cenni sui Processi Si definisce Programma un insieme di Istruzioni destinate

Dettagli

INFORMATICA - I puntatori Roberta Gerboni

INFORMATICA - I puntatori Roberta Gerboni 1 2 I puntatori in C++ Il puntatore un tipo di dato scalare, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Realizzazione di Liste Laboratorio di Algoritmi e Strutture Dati Domenico Redavid redavid@di.uniba.it Materiale di base gentilmente concesso dal dott. Nicola Di Mauro Ricercatore presso l'univ. di Bari

Dettagli

Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 20 Ottobre 2014

Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 20 Ottobre 2014 Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli 20 Ottobre 2014 1 Tipi non Predefiniti Abbiamo visto: Tipi elementari (int, float, char,...) Tipi composti (arrays e tipi non predefiniti) C++ permette

Dettagli

Alfabeto ed elementi lessicali del linguaggio C

Alfabeto ed elementi lessicali del linguaggio C Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2015-2016 Alfabeto ed elementi lessicali del linguaggio C Pietro Di Lena - pietro.dilena@unibo.it s t a t i c s h o r t l e g s ; i n

Dettagli

INFORMATICA E PROGRAMMAZIONE PROF. M. GIACOMIN ESPERIENZA IN AULA: ELABORAZIONE DI IMMAGINI A COLORI IN LINGUAGGIO C

INFORMATICA E PROGRAMMAZIONE PROF. M. GIACOMIN ESPERIENZA IN AULA: ELABORAZIONE DI IMMAGINI A COLORI IN LINGUAGGIO C INFORMATICA E PROGRAMMAZIONE PROF. M. GIACOMIN ESPERIENZA IN AULA: ELABORAZIONE DI IMMAGINI A COLORI IN LINGUAGGIO C DESCRIZIONE GENERALE In questa esperienza il C verrà utilizzato per elaborare immagini

Dettagli

Dynamic Linking. Introduzione Creazione di una libreria dinamica Uso di una libreria dinamica

Dynamic Linking. Introduzione Creazione di una libreria dinamica Uso di una libreria dinamica Dynamic Linking Introduzione Creazione di una libreria dinamica Uso di una libreria dinamica Dynamic Linking Il linking tra i moduli di un programma e le librerie da esso utilizzate può essere Statico

Dettagli

APPLICAZIONI SU PIU FILE

APPLICAZIONI SU PIU FILE APPLICAZIONI SU PIU FILE Serve poter sviluppare applicazioni su piú file: - alcune funzioni e alcune definizioni di dati in un file - altre funzioni e dati in file diversi Perché?? 1. Se il programma è

Dettagli

3) Il seguente numerale A1F0 in base 16 a quale numero in base 10 corrisponde?

3) Il seguente numerale A1F0 in base 16 a quale numero in base 10 corrisponde? Leggete attentamente le domande del test e date la/le vostra/e risposta/e. 1) Per quanto tempo la memoria RAM di un personal computer conserva le informazioni? Finchè lo hard disk funziona in modo corretto

Dettagli

Lezione 10: Librerie e compilazione separata

Lezione 10: Librerie e compilazione separata Lezione 10: Librerie e compilazione separata Laboratorio di Elementi di Architettura e Sistemi Operativi 16 Maggio 2012 Calendario della parte finale del corso Mer 23 Maggio ultima lezione sul C Gio 24

Dettagli

Funzioni. Corso di Fondamenti di Informatica

Funzioni. Corso di Fondamenti di Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Funzioni Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti e dei

Dettagli

Esercitazione 7. Procedure e Funzioni

Esercitazione 7. Procedure e Funzioni Esercitazione 7 Procedure e Funzioni Esercizio Scrivere un programma che memorizza in un array di elementi di tipo double le temperature relative al mese corrente e ne determina la temperatura massima,

Dettagli

La gestione della memoria

La gestione della memoria La gestione della memoria DOTT. ING. LEONARDO RIGUTINI DIPARTIMENTO INGEGNERIA DELL INFORMAZIONE UNIVERSITÀ DI SIENA VIA ROMA 56 53100 SIENA UFF. 0577234850-7102 RIGUTINI@DII.UNISI.IT HTTP://WWW.DII.UNISI.IT/~RIGUTINI/

Dettagli

Files in C++ Fondamenti di Informatica. R. Basili. a.a. 2006-2007

Files in C++ Fondamenti di Informatica. R. Basili. a.a. 2006-2007 Files in C++ Fondamenti di Informatica R. Basili a.a. 2006-2007 Sintesi Motivazioni Definizione di file in C++ Un esempio Uso dei file Esempi Esercizi Motivazioni il programma in esecuzione legge (sequenzialmente)

Dettagli

Il calcolatore. Architettura di un calcolatore (Hardware)

Il calcolatore. Architettura di un calcolatore (Hardware) Il calcolatore Prima parlare della programmazione, e' bene fare una brevissima introduzione su come sono strutturati i calcolatori elettronici. I calcolatori elettronici sono stati progettati e costruiti

Dettagli

Fondamenti di Informatica 2

Fondamenti di Informatica 2 Fondamenti di Informatica 2 della prova scritta del 28 Febbraio 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,8,-4; int N = 7; int min = 3; int i; Scrivere la porzione di codice

Dettagli

Esercizio: gestione di un conto corrente

Esercizio: gestione di un conto corrente Esercizio: gestione di un conto corrente Si realizzi un conto corrente bancario mediante: - una ASTRAZIONE DI DATO - un TIPO DI DATO ASTRATTO Il conto corrente è caratterizzato dalle seguenti informazioni:

Dettagli

Programmazione a Oggetti Lezione 10. Ereditarieta

Programmazione a Oggetti Lezione 10. Ereditarieta Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare

Dettagli

Sottoprogrammi: astrazione procedurale

Sottoprogrammi: astrazione procedurale Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j

Dettagli

Const, friend, static,this

Const, friend, static,this Const, friend, static,this Sommario Lo speficatore const per gli oggetti e le funzioni membro Le funzioni friend I membri static di una classe Il puntatore this Oggetti const Alcuni oggetti devono poter

Dettagli

PIANO DI LAVORO. a.s. 2015 / 2016

PIANO DI LAVORO. a.s. 2015 / 2016 PIANO DI LAVORO a.s. 2015 / 2016 Materia: INFORMATICA Classe: terza informatica- sez. A Data di presentazione: 15/10/2015 DOCENTI FIRMA Cerri Marta Bergamasco Alessandra Posta elettronica: itisleon@tin.it

Dettagli

Ricerca sequenziale di un elemento in un vettore

Ricerca sequenziale di un elemento in un vettore Ricerca sequenziale di un elemento in un vettore La ricerca sequenziale o lineare è utilizzata per ricercare i dati in un vettore NON ordinato. L algoritmo di ricerca sequenziale utilizza quan non ha alcuna

Dettagli

VARIABILI LOCALI E GLOBALI (ESTERNE)

VARIABILI LOCALI E GLOBALI (ESTERNE) VARIABILI LOCALI E GLOBALI (ESTERNE) Le variabili locali sono definite (ed il loro uso dichiarato) nella funzione (o nel blocco) che le usa; nascono quando la funzione entra in esecuzione e muoiono al

Dettagli

Esercizi di programmazione in C

Esercizi di programmazione in C Esercizi di programmazione in C Esercizio 1 Scrivere un programma in linguaggio C che legga da tastiera una sequenza di lunghezza ignota a priori di numeri interi positivi. Il programma, a partire dal

Dettagli

Ambienti di sviluppo integrato

Ambienti di sviluppo integrato Ambienti di sviluppo integrato Un ambiente di sviluppo integrato (IDE - Integrated Development Environment) è un ambiente software che assiste i programmatori nello sviluppo di programmi Esso è normalmente

Dettagli

Linguaggio C. Fondamenti. Struttura di un programma.

Linguaggio C. Fondamenti. Struttura di un programma. Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C La nascita del linguaggio C fu dovuta all esigenza di disporre di un Linguaggio ad alto livello adatto alla realizzazione

Dettagli

Fondamenti di Informatica T. Linguaggio C: i puntatori

Fondamenti di Informatica T. Linguaggio C: i puntatori Linguaggio C: i puntatori Il puntatore E` un tipo di dato scalare, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore

Dettagli

Indice. Introduzione. I tipi aritmetici. Variabili e Tipi Fondamentali in C++ (CAP 2, parte I) Alberto Garfagnini e Marco Mazzocco A.A.

Indice. Introduzione. I tipi aritmetici. Variabili e Tipi Fondamentali in C++ (CAP 2, parte I) Alberto Garfagnini e Marco Mazzocco A.A. Variabili e Tipi Fondamentali in C++ (CAP 2, parte I) Alberto Garfagnini e Marco Mazzocco Università degli studi di Padova A.A. 2014/2015 Indice Tipi semplici propri del linguaggio Variabili Tipi composti

Dettagli

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x. Funzioni Esercizio 1 Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x. Creare un altra funzione, di nome float cube(float x), che restituisce invece il

Dettagli

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30' Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit5.zip contenente i file necessari (solution di VS2008 e progetto compresi). Avvertenze per la consegna: apporre all inizio di

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione Linguaggi di Programmazione Sintassi e semantica Compilatori, interpreti e il linker Introduzione al C La funzione main del C 2 Definizione 1 Un linguaggio è un insieme di parole

Dettagli

Variabili e tipi di dato

Variabili e tipi di dato Variabili e tipi di dato Tutte le variabili devono essere dichiarate, specificandone il tipo La dichiarazione deve precedere l uso Il tipo è un concetto astratto che esprime: L allocazione di spazio per

Dettagli

Laboratorio di programmazione

Laboratorio di programmazione Laboratorio di programmazione Lezione VI Tatiana Zolo tatiana.zolo@libero.it 1 LE STRUCT Tipo definito dall utente i cui elementi possono essere eterogenei (di tipo diverso). Introduce un nuovo tipo di

Dettagli

Compito di Fondamenti di Informatica

Compito di Fondamenti di Informatica Compito di Fondamenti di Informatica In un magazzino viene utilizzato un archivio informatico, nel quale vengono memorizzate le informazioni relative ai prodotti contenuti nel magazzino e che ne permette

Dettagli

PROGRAMMA DI SCIENZE E TECNOLOGIE APPLICATE 2015/2016 Classe 2ª Sez. C Tecnologico

PROGRAMMA DI SCIENZE E TECNOLOGIE APPLICATE 2015/2016 Classe 2ª Sez. C Tecnologico ISTITUTO TECNICO STATALE MARCHI FORTI Viale Guglielmo Marconi n 16-51017 PESCIA (PT) - ITALIA PROGRAMMA DI SCIENZE E TECNOLOGIE APPLICATE 2015/2016 Classe 2ª Sez. C Tecnologico Docente PARROTTA GIOVANNI

Dettagli

Monitor. Introduzione. Struttura di un TDA Monitor

Monitor. Introduzione. Struttura di un TDA Monitor Monitor Domenico Cotroneo Dipartimento di Informatica e Sistemistica Introduzione E stato introdotto per facilitare la programmazione strutturata di problemi in cui è necessario controllare l assegnazione

Dettagli