Laboratorio di Programmazione aa 2012/2013 Riferimenti, Costruttori, Distruttori, Assegnazione
|
|
- Giuseppina Santini
- 5 anni fa
- Visualizzazioni
Transcript
1 Laboratorio di Programmazione aa 2012/2013 Riferimenti, Costruttori, Distruttori, Assegnazione Giorgio Grisetti 28 marzo 2013 In questa lezione vedremo come il C++ introduce una nuova modalità per passare oggetti modificabili: il riferimento. Analizzeremo inoltre in maggior dettaglio cosa avviene quando creiamo e distruggiamo un oggetto e vedremo come è possibile intervenire in queste fasi. Lo scopo è quello di introdurre dei meccanismi che ci permettano di definire nuovi tipi di dato che si comportino in maniera analoga a quella dei tipi definiti. 1 Riferimento ad un Tipo Finora abbiamo visto che, per passare ad una funzione un argomento che la funzione deve modificare, eravamo obbligati a passare il puntatore a tale argomento. Se, ad esempio, abbiamo una funzione del tipo: void settoone(int* i){ *i=1; per poterla invocare possiamo scrivere: { int k; settoone(&k); Il C++ rispetto al C aggiunge un po di zucchero sintattico a questa procedura, permettendoci di definire dei riferimenti ad un tipo di dato. Un riferimento si dichiara così: <type>& nomeriferimento; Ad esempio, la funzione settoone(int* i) diventerà: 1
2 void settoone(int& i){ i=1; Un tipo riferimento è accessibile come se fosse un tipo normale, con la differenza che è possibile modificarlo. Al suo interno il compilatore tratta un riferimento come un puntatore. La differenza rispetto all uso di puntatori è che un riferimento punta sempre (a meno di errori particolari), ad una locazione di memoria valida. Per essere creato, infatti, un riferimento ha bisogno di una variabile concreta. É di aiuto pensare ad un riferimento come ad un puntatore dereferenziato (*p). 2 La tormentata vita delle variabili Durante l esecuzione, è comune che un programma allochi e deallochi e copi un grande numero di variabili. In particolare: ogni volta che il flusso del programma entra in un blocco in cui è dichiarata una variabile, la corrispondente memoria viene allocata nello stack. ogni volta che il flusso del programma esce da un blocco, le corrispondenti variabili vengono eliminate Quando viene invocata una funzione: prima dell esecuzione della funzione stessa, allochiamo memoria nello stack per mantenere i valori dei suoi parametri, e copiamo in questa memoria il valore delle variabili passate come argomento dal chiamante tali variabili vivranno tutto il tempo della funzione quando la funzione termina, le sue variabili temporanee (inclusi i parametri) vengono distrutte l eventuale valore di ritorno viene copiato alla destinazione indicata dal chiamante, tramite l istruzione return. ogni volta che invochiamo una malloc od una free, allochiamo nello heap memoria per una variabile. Se la nostra variabile è una struct complessa che contiene puntatori ad altri elementi, la sua creazione comporta l invocazione di opportune funzioni di inizializzazione (construct). Stessa cosa accade nel momento in cui distruggiamo una variabile (dstruct). Ovviamente dobbiamo ricordarci sempre di compiere tali operazioni, e dobbiamo farlo in modo esplicito. Il C++ permette di definire le operazioni che devono essere eseguite dal compilatore nel momento in cui una variabile viene: creata, copiata, assegnata, 2
3 distrutta, mediante la definizione di appositi metodi che verranno invocati in modo automatico. Questo ha il vantaggio non indifferente di sollevare l utente dal compito di invocare esplicitamente le funzioni che si occupano di questo aspetto. Nel seguito vedremo come. 3 Costruttore Un costruttore è un metodo particolare di una classe che si dichiara così: struct MyStruct {.. MyStruct( <parameter list>); ; dove <parameter list> rappresenta la lista dei parametri, eventualmente vuota. Notate che un costruttore non ha argomenti di ritorno, neanche void. Nell implementazione scriveremo MyStruct::MyStruct(<parameter list>){ Quando creiamo una variabile di tipo MyStruct, dovremo invocare il costruttore in modo esplicito: MyStruct s(10); Possiamo aggiungere un costruttore alla struct vec in questo modo: struct Vec{ double* data; int dimension; Vec(int size); L implementazione del costruttore sarà tipo la seguente: Vec::Vec(int size) { this->data = vec_alloc(size); this->dimension = size; Se ora vogliamo creare un elemento della struct vec, che si auto inizializza, scriveremo Vec v1(100); 3
4 Nel caso in una struct non dichiarassimo alcun costruttore, verrà utilizzato il costruttore di default del C++, che non fa nulla. Se dichiariamo un costruttore con zero argomenti, (es. Vec::Vec()) tale costruttore verrà invocato al posto di quello di default. Ovvero, scrivendo: Vec v1; verrà invocato il nostro Vec::Vec(), non quello di default del C++. All interno di una struct possiamo definire più costruttori, purché questi abbiano una lista di argomenti (la parameter list che abbiamo visto prima) diversi. Il costruttore da invocare verrà scelto in base ai lista dei parametri passati come argomento. Ad esempio, possiamo avere tre costruttori: struct Vec{ double* data; int dimension; Vec(); Vec(int size); Vec(int size, double defaultvalue); Nel main, possiamo invocarli in modo esplicito:.. Vec v1(); // chiama il costruttore Vec() Vec v2(5); // chiama il costruttore Vec(int) Vec V3(5, 0.1); // chiama il costruttore Vec(int, double) É importante considerare che quando viene invocato un costruttore la memoria per la struct è già stata allocata, ma i puntatori al suo interno non sono stati inizializzati 1. Ergo, nel costruttore di Vec abbiamo rimosso la malloc per la struct. Per fare un po il punto: Un costruttore viene invocato ogni volta che si dichiara una variabile Se passiamo una lista di parametri vuota (quindi nessun parametro), viene invocato il costruttore di default Se si dichiarano solo costruttori con argomenti, questi nascondono quello di default, che puo essere recuperato riscrivendo il metodo MyStruct::MyStruct(). 4 Costruttore di Copia Un costruttore con una lista di argomenti particolare riveste un ruolo fondamentale nel passaggio di parametri e dei valori di ritorno delle funzioni. Tale costruttore è chiamato costruttore di copia, e si dichiara così: 1 questo non è necessariamente vero nel caso in cui struct derivi da un altra mediante il meccanismo dell ereditarietà. Approfondiremo questo aspetto nel seguito del corso. Per ora prendete questa affermazione per buona. 4
5 struct MyStruct { MyStruct(const MyStruct& s); ; Il costruttore di copia deve avere il comportamento specifico di copiare il parametro nell oggetto che si va creando. Il qualificatore const prima del riferimento serve a dire al compilatore che il parametro s, sebbene passato per riferimento, non verrà modificato. Ad esempio il costruttore di copia della nostra struct Vec sarà Vec::Vec(const Vec& v){ this->data = vec_alloc(v.dimension); this->dimension = v.dimension; memcpy(this->data, v.data, sizeof(double)*this->dimension); Notate che l accesso ai campi del parametro v avviene tramite l operatore. e non tramite ->. Questo infatti non è più un puntatore. Un costruttore di copia è invocato: 1. Ogni volta si passano dei parametri per valore 2. Ogni volta che viene invocata una return di un parametro passato per valore 3. In modo esplicito Il costruttore di copia non viene invocato se si passano puntatori ad un oggetto oppure se si passano riferimenti a tale oggetto. Ad esempio, possiamo riscrivere la funzione dot, che prende come parametro un vettore passato per riferimento: double Vec::dot(Vec b){ if (this->dimension!=b.dimension){ printf("fatal, attempt to dot product vectors of different dimensions"); return 0; return vec_dot(this->data, b.data,this->dimension); Nel main: Vec v1(100); Vec v2(100); double d = v1.dot(v2); // chiama il costruttore di copia per passare v2. Vec v3(v1); // chiama il costruttore di copia in modo esplicito; 5
6 5 Distruttori Con i costruttori abbiamo automatizzato il comportamento del compilatore nella creazione di oggetti. Possiamo fare lo stesso per la loro distruzione? Ovvero, possiamo dire che ogni volta che si vuole liberare memoria per una variabile, prima di liberarla occorre compiere alcune operazioni (ad esempio liberare altre zone di memoria puntate)? Se così non fosse, non starei scrivendo questo paragrafo. La cosa si fa mediante il metodo distruttore, che si dichiara come segue: struct MyStruct { ~MyStruct(); ; nell implementazione MyStruct::~MyStruct(){ Contrariamente ai costruttori, che potete definire a iosa, deve esistere un solo distruttore per struct e deve avere zero argomenti e zero valori di ritorno. Notate il simbolo tilde prima del nome del metodo (anche se è venuto un po storto). Nella nostra struct Vec il distruttore sarà così: Vec::~Vec(){ vec_free(this->data); Confrontatelo con il vecchio metodo destruct e meditate. Anche il distruttore non libera la memoria della struct, ma solo la roba appesa. Il distruttore viene invocato quando una variabile viene eliminata. Questo può avvenire nelle circostanze descritte nella sezione 2, ma prima di liberare la memoria della struct. 6 Assegnazione Con i meccanismi di sopra, possiamo creare, copiare e distruggere oggetti in modo abbastanza elegante. Se però vogliamo assegnare ad un oggetto il valore di un altro dobbiamo ancora ricorrere ad un metodo aggiuntivo (vedi vector_assign, la cui sintassi è molto meno intuitiva dell a=b;, che ci aspetteremmo se i due oggetti fossero tipi primitivi. La cosa è però resa possibile ricorrendo al meccanismo dell overloading: è un meccanismo molto potente che permette di ridefinire praticamente ogni operatore del C++ (inclusi gli usuali +,-,*,/. L overloading si effettua come segue: struct Vec{ double* data; int dimension; Vec& operator=(const Vec& v); 6
7 L implementazione del metodo è la seguente: Vec& Vec::operator =(const Vec& src) { resize(src.dimension); memcpy(this->data, src.data, src.dimension*sizeof(double)); return *this; // note that the = return a reference to the destination. ed avrà un comportamento analogo alla vecchia assign(). Ora finalmente possiamo eseguire un operazione di assegnazione, come se si trattasse di tipi primitivi, come segue: Vec v1(); Vec v2(); v1=v2; 7 Qualificatore const Nelle sezioni precendeti è comparsa una nuova parola chiave del C++, const. Il const e un qualificatore che serve a dire che una variabile non deve essere modificata. Metterlo dove serve aiuta a evitare errori, in quanto modifiche di una variabile all interno del corpo di una funzione in cui la variabile è dichiarata const verranno trattati come errori di compilazione. Possiamo usare const anche per dichiarare che un metodo non modifica l oggetto di invocazione, mettendo il qualificatore dopo la lista degli argomenti e prima del ; o della {. Ad esempio, il metodo print sara ragionevolmente const: void Vec::print() const; Il qualificatore const entra a far parte del tipo, perciò const Vec& e Vec& sono a tutti gli effetti due tipi differenti. 8 Esempio: la classe Vec Concludiamo questa sezione con una versione della struct Vec (che ora assomiglia sempre più ad una classe), in cui abbiamo introdotto costruttori e distruttori e aggiunto variabili passate per riferimentio dove necessario. #ifndef _LP_VECTOR_H_ #define _LP_VECTOR_H_ struct Vec{ double* data; int dimension; Vec(int size); // was construct(int size); Vec(const Vec& Vec); // was clone(vec*v) Vec& operator=(const Vec& v); // was assign() ~Vec(); // was destruct 7
8 void resize(int size); void fillrandom(); void read(); // reads something in the calling object void print() const; void scale(double d); void scaledsum(const Vec& src, double d); // double dot(const Vec& b); void convolve(const Vec& src1, const Vec& src2); int compare(const Vec& v2) const; ; #endif Il file.cpp sarà: #include "stdio.h" #include "vecutils.h" #include "lp_vec.h" #include <stdlib.h> #include <string.h> Vec::Vec(int size) { this->data = vec_alloc(size); this->dimension = size; Vec::Vec(const Vec& v){ this->data = vec_alloc(v.dimension); this->dimension = v.dimension; memcpy(this->data, v.data, sizeof(double)*this->dimension); Vec::~Vec(){ vec_free(this->data); Vec& Vec::operator =(const Vec& src) { resize(src.dimension); memcpy(this->data, src.data, src.dimension*sizeof(double)); return *this; void Vec::read(){ this->data = vec_read(&this->dimension); void Vec::print() const { 8
9 vec_print(this->data, this->dimension); void Vec::fillRandom(){ for (int i=0; i<this->dimension; i++){ this->data[i]=drand48(); void Vec::resize(int size) { if (this->dimension == size) return; vec_free(this->data); this->data = vec_alloc(size); this->dimension = size; void Vec::scale(double d){ vec_scale(this->data,this->dimension, d); void Vec::scaledSum(const Vec& src, double d){ if (this->dimension!=src.dimension){ printf("fatal, attempt to sum vectors of different dimensions"); return; vec_scaled_sum(this->data, src.data, src.dimension, d); double Vec::dot(const Vec& b){ if (this->dimension!=b.dimension){ printf("fatal, attempt to dot product vectors of different dimensions"); return 0; return vec_dot(this->data, b.data,this->dimension); void Vec::convolve(const Vec& src1, const Vec& src2) { resize(src1.dimension + src2.dimension); vec_convolve(this->data, src1.data, src1.dimension, src2.data, src2.dimension); int Vec::compare(const Vec& v2) const{ for (int i=0; i<this->dimension && i<v2.dimension; i++){ if (this->data[i]<v2.data[i]) return -1; else if (this->data[i]>v2.data[i]) return 1; 9
10 if (this->dimension<v2.dimension) return -1; if (this->dimension>v2.dimension) return 1; return 0; Notate che il main si semplifica notevolmente. #include <stdio.h> #include "lp_vec.h" int main(int argc, char** argv){ printf("input a vector\n"); Vec v1(0); v1.read(); printf("the vector you entered is\n"); v1.print(); Vec v2(0); do { printf("input another vector (of dimension %d)\n", v1.dimension); v2.read(); if (v2.dimension!= v1.dimension) { printf("wrong dimension, you netered %d, i required %d\n", v1.dimension, v1.dimension); while (v2.dimension!= v1.dimension); printf("the vector you entered is\n"); v2.print(); // copying the second vector using the copy constructor; Vec v2copy(v2); printf("the copy of the second vector is\n"); v2copy.print(); //multiplying the first vector by a scalar; double scale; printf("v1 is\n"); v1.print(); printf("insert a scale, to multiply the first vector\n"); scanf("%lf",&scale); v1.scale(scale); printf("v1*scale is\n"); v1.print(); 10
11 v2copy.scaledsum(v1, -1); printf("v2-v1*scale is\n"); v2copy.print(); printf("v1*v2 is %lf\n", v1.dot(v2)); Vec v3(0); v3.convolve(v1,v2); printf("the convolution is\n"); v3.print(); 9 Esercizio Obbligatorio Per la prossima puntata, prendete in mano la struct Mat introdotta durante l esercitazione e modificatela in modo da supportare costruttori e distruttori. Fate ALMENO il.h. 11
Corso di Grafica Computazionale
Corso di Grafica Computazionale Note di C++ Docente: Massimiliano Corsini Laurea Specialistica in Ing. Informatica Università degli Studi di Siena Note Iniziali Il C++ non ha il concetto dei packages In
DettagliLaboratorio 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
DettagliAllocazione 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
DettagliProgrammazione 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)
DettagliI 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
DettagliLa 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/
Dettagli3. 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
DettagliFondamenti 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
DettagliInizializzazione, 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
DettagliLe 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
Dettagli4 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
DettagliIngegneria 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
Dettaglicostruttori 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,
DettagliVARIABILI 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
DettagliConst, 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
DettagliUna funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.
Ricorsione Funzioni ricorsive Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente. Un esempio di funzione ricorsiva
Dettaglipuntatori 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
DettagliJava 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
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)
DettagliMemory Management. Local Storage. Global Storage. Delete esplicite
Memory Management Costruzione di Interfacce Lezione 13 Dal Java al C++ cignoni@iei.pi.cnr.it http://vcg.iei.pi.cnr.it/~cignoni Due grandi categorie di storage: Local, memoria valida solo all interno di
DettagliLaboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Operazioni su Liste Doppie e Circolari 2 1 Indice Liste puntate semplici: Gli elementi sono
DettagliUnità 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
DettagliLezione 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
DettagliUniversità 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)
Dettaglihttp://www.programmiamo.altervista.org/c/oop/o...
PROGRAMMIAMO Programma per la gestione di un conto corrente C++ - Costruttore e distruttore C++ Home Contatti Supponiamo ora di voler scrivere un programma a menu per la gestione di un conto corrente bancario.
DettagliUtilizzo 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
DettagliStrutture. 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
DettagliAppunti 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
Dettaglidall 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 È
DettagliLe funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.
Le funzioni in C I programmi C sono costituiti da definizioni di variabili e funzioni. Una definizione di funzione ha il seguente formato: tipo-ritornato nome-funzione(lista-parametri) { dichiarazioni
DettagliProcessi in Linux. Stru/ura file eseguibili
SISTEMI OPERATIVI Processi in Linux Stru/ura file eseguibili» ELF - Executable and Linking Format formato di default degli eseguibili in Linux definizione nel file include » StruGura un header contenente
Dettaglistrutturare 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) ;
DettagliDynamic 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
DettagliFondamenti 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
DettagliTUTORATO 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
DettagliIL 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
DettagliGli 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
DettagliIntroduzione al linguaggio C Gli array
Introduzione al linguaggio C Gli array Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome
DettagliAPPLICAZIONI 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 è
DettagliSottoprogrammi: astrazione procedurale
Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j
DettagliEsercitazione 10. Strutture ed Enumerazioni. Allocazione dinamica di memoria
Esercitazione 10 Strutture ed Enumerazioni Allocazione dinamica di memoria ESERCIZIO Scrivere una funzione che, dato un array di interi bidimensionale di dimensione n n, calcoli e stampi la somma degli
DettagliFondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 4A di Martedì 21 Giugno 2011 tempo a disposizione 2h
Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit4A.zip contenente i file necessari (progetto Visual Studio ed eventuali altri file di esempio). Avvertenze per la consegna:
DettagliAppello di Informatica B
Politecnico di Milano Facoltà di Ingegneria Industriale 19 febbraio 2004 Appello di Informatica B Prof. Angelo Morzenti - Prof. Vincenzo Martena Cognome e nome: Matricola: Tipo di prova: recupero I prova
DettagliOggetti 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
DettagliUso 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
DettagliLaboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Prof. Aniello Murano Implementazioni di Liste Doppiamente Puntate e Circolari Corso di Laurea Codice insegnamento Email docente Anno accademico Informatica 13917
DettagliLaboratorio 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
DettagliInformatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica
Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Dipartimento di Elettronica, Informazione e Bioingegneria Informatica B Sezione D Franchi Alessio Mauro,
DettagliLinguaggio 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
DettagliFondamenti 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
DettagliInformatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1)
Informatica 3 LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1) Modulo 1: Introduzione: oggetti e classi Modulo 2: Link e associazioni Modulo 3: Aggregazione Informatica 3 Lezione 7 -
DettagliAppunti 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)
DettagliFondamenti 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
DettagliVisibilità 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
DettagliLaboratorio 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
DettagliProgrammazione. 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:
DettagliCosa è importante: pom.xml Goal Plug-in Repository
Cos è Maven? Maven è un software usato principalmente per la gestione di progetti Java e build automation, ma è utile anche per gestire documentazione, report, dipendenze... Cosa è importante: pom.xml
DettagliESERCIZIO 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
DettagliAppunti 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)
DettagliPila.h versione 6. class Pila { private: int marker; int * contenuto; public:
1 Pila.h versione 6 struct Pila { private: int size; int defaultgrowthsize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialsize) ; Pila(); ~Pila() ; void copy(pila * to)
DettagliFunzioni. 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
DettagliIndirizzo 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
DettagliFunzioni 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
DettagliEsonero 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
DettagliGli ARRAY in FORTRAN 90
ELEMENTI DI PROGRAMMAZIONE Gli ARRAY in FORTRAN 90 Un ARRAY è un AGGREGATO di più DATI dello stesso TIPO (interi, reali, etc), ognuno univocamente individuato dal valore di uno oppure due.. e fino a sette
DettagliCorso di Programmazione ad Oggetti
Corso di Programmazione ad Oggetti Il meccanismo dell ereditarietà a.a. 2008/2009 Claudio De Stefano 1 L ereditarietà consente di definire nuove classi per specializzazione o estensione di classi preesistenti,
DettagliProblem solving avanzato
Problem solving avanzato Formulazione del problema Struttura dati e algoritmo Il programma 2 26 Politecnico di Torino 1 Dati in input (1/4) Sono dati due file di testo, contenenti le informazioni sulle
DettagliCREARE UNA LIBRERIA IN C
CREARE UNA LIBRERIA IN C Prima di cominciare a vedere come fare una libreria, dobbiamo capire di cosa abbiamo bisogno... di un file.h che sarà l'header della libreria (ovvero il file che conterrà i prototipi
DettagliEsercizio: 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:
DettagliFUNZIONI. La libreria standard del C fornisce una ricca collezione di funzioni, come le funzioni:
FUNZIONI La libreria standard del C fornisce una ricca collezione di funzioni, come le funzioni: double sqrt(double) double pow (double, double) della libreria matematica, che abbiamo già usato anche senza
DettagliProgrammazione ad eventi in PHP Implementare gli eventi e gestire una coda di messaggi
Implementare gli eventi e gestire una coda di messaggi Implementare in PHP la programmazione ad eventi Creare e gestire una coda di messaggi Usare gli eventi per scrivere componenti riusabili Gestire una
DettagliLab. di Sistemi Operativi - Esercitazione n 9- -Thread-
Lab. di Sistemi Operativi - Esercitazione n 9- -Thread- 1 Sommario Esercizi su: Comunicazione tra processi: la funzione pipe() Condivisione dati e codice tra due o più processi: concetto di Thread 2 -
DettagliGestione dei File in C
Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte
DettagliIntroduzione 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
DettagliRicerca 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
DettagliGrammatica 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
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 16 luglio 2015 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliGestione dei processi
Gestione dei processi Dormire unsigned int sleep(unsigned int); Attende un numero specificato di secondi a meno che non si verifichi un segnale Restituisce 0 se l'attesa è terminata senza interruzioni,
DettagliEsercizi. Assembly. Alessandro A. Nacci alessandro.nacci@polimi.it ACSO 2014/2014
Esercizi Assembly Alessandro A. Nacci alessandro.nacci@polimi.it ACSO 2014/2014 1 RIPASSO Architettura dei registri del 68K Di (0 i 7): registri di dato a 8, 16, 32 bit Ai (0 i 7): resgistri di a 16, 32
DettagliAA 2014-2015. 20. Nomi, binding
AA 2014-2015 20. Nomi, binding 1 Nomi Un nome in un linguaggio di programmazione è esa;amente quello che immaginate o la maggior parte dei nomi sono definia dal programma (gli idenaficatori) o ma anche
DettagliMIPS Instruction Set 2
Laboratorio di Architettura 15 aprile 2011 1 Architettura Mips 2 Chiamata a Funzione 3 Esercitazione Registri MIPS reference card: http://refcards.com/docs/waetzigj/mips/mipsref.pdf 32 registri general
DettagliVia Oberdan, 42, 48018 Faenza (RA) Italy Tel.: ++39-0546-677111 Fax: ++39-0546-677577 E-mail: support_ahd@eu.irco.com WAVE MODE MOBILE GUIDA RAPIDA
Via Oberdan, 4, 4808 Faenza (RA) Italy Tel.: ++9-0546-677 Fax: ++9-0546-677577 E-mail: support_ahd@eu.irco.com WAVE MODE MOBILE GUIDA RAPIDA * tasti con doppia funzionalità : dipende dalla modalità di
DettagliTipi 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
Dettagli12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,
DettagliGestione dei processi
Capitolo 1 Gestione dei processi 1.1 Creazione di un processo I principali eventi che possono dare luogo ad un nuovo processo sono: inizializzazione del sistema; esecuzione di una primitiva di sistema
DettagliCorso 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
DettagliCorso di Informatica Medica Esercitazione 1I 2013-2014.! Alessandro A. Nacci nacci@elet.polimi.it - alessandronacci.com
Corso di Informatica Medica Esercitazione 1I 2013-2014! Alessandro A. Nacci nacci@elet.polimi.it - alessandronacci.com 1 2 Esercizio 1 Scrivere un programma che legga due array di interi da tastiera dica
Dettaglihttp://esamix.labx Quotazione compareto( ) Quotazione piurecente( ) Quotazione Quotazione Quotazione non trovato count( )
Materiale di ausilio utilizzabile durante l appello: tutto il materiale è a disposizione, inclusi libri, lucidi, appunti, esercizi svolti e siti Web ad accesso consentito in Lab06. L utilizzo di meorie
DettagliLaboratorio di Algoritmi e Strutture Dati. Aniello Murano. www.dia.unisa.it/dottorandi/murano. Il linguaggio C II
Laboratorio di Algoritmi e Strutture Dati Aniello Murano www.dia.unisa.it/dottorandi/murano 1 Il linguaggio C II 2 1 Indice (seconda parte) Funzioni Array Puntatori Preprocessore Storage Class Ricorsione
DettagliL ambiente di simulazione SPIM
Architettura degli Elaboratori e delle Reti Lezione 14 L ambiente di simulazione SPIM Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 14 1/28
DettagliVBA è 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?
DettagliCompito 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
DettagliINFORMATICA 1 L. Mezzalira
INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello
DettagliRelazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore
Relazioni tra oggetti e classi : Generalizzazione Fondamenti di Informatica II 20. Laboratorio 6 Collegamenti e associazioni Le relazioni di tipo generalizzazione (specializzazione), servono per poter
DettagliGestione 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
Dettagli13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti
13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
DettagliAXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema
AXO Architetture dei Calcolatori e Sistema Operativo programmazione di sistema Il sistema operativo Il Sistema Operativo è un insieme di programmi (moduli software) che svolgono funzioni di servizio nel
DettagliGestione dinamica di una pila
Gestione dinamica di una pila Una pila o stack è una lista lineare a lunghezza variabile in cui inserimenti (push) ed estrazioni (pop) vengono effettuate ad un solo estremo, detto testa (top) della pila.
DettagliUD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita
UD4 - MATLAB M-file. Efficienza degli algoritmi. Formati d uscita M-files In MatLab è possibile eseguire istruzioni contenute in file esterni; Tali file sono chiamati M-file perché devono avere estensione.m
DettagliIntroduzione a GCC: GNU Compiler Collection
Introduzione a GCC: GNU Compiler Collection Caratteristiche di GCC Compilatore multipiattaforma modulare Disponibile per tutti i principali sistemi operativi Può produrre programmi per la maggior parte
Dettagli