Cesare Rota. Programmare con C++

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Cesare Rota. Programmare con C++"

Transcript

1 Cesare Rota Programmare con C++ Questo fascicolo deve essere allegato al volume Programmare con C++ di Cesare Rota ISBN , ne è parte integrante e non può essere venduto separatamente EDITORE ULRICO HOEPLI MILANO

2 Indice Strutture dinamiche di dati 3 I atori 3 Lista 6 La pila 7 La coda 13 Lista ordinata 15 2

3 I atori Strutture dinamiche di dati L uso degli array comporta una limitazione che consiste nel disporre di un numero fisso di posti. Ovviamente in molti problemi questa limitazione non è accettabile, quando la dimensione dell array deve cambiare durante l esecuzione del programma. Per superare queste limitazioni, nei linguaggi di programmazione è stata introdotta la possibilità di definire strutture dinamiche di dati, cioè strutture alle quali viene assegnato lo spazio necessario in memoria centrale soltanto quando e se serve durante l esecuzione del programma. Le tecniche di programmazione per la gestione dinamica delle strutture di dati si basano su meccanismi e funzioni che utilizzano un nuovo tipo di dato, il atore, e che consentono di allocare e di togliere lo spazio di memoria assegnato ad un dato; inoltre la gestione complessiva della memoria risulta più efficiente in quanto gli spazi assegnati non devono essere necessariamente contigui. Una variabile atore è un indirizzo che permette di accedere ad un'altra variabile, così come un numero di telefono permette di raggiungere una persona. Il valore della variabile non è di per sé importante, mentre lo è il contenuto della variabile ata. Il tipo atore definisce variabili del linguaggio C++ dalle caratteristiche molto particolari. Esempio Puntatore Il seguente programma presenta un breve esempio sull uso di un atore, e contiene tutte le procedure e le notazioni necessarie al suo impiego. Codice #include <cstdlib> #include <iostream> using namespace std; int main () Puntatore.cpp //definisce la variab. q come un atore ad un intero int* q; // inizializza q q = NULL; // q è vuoto // assegna a q l'indirizzo di un'area di memoria contenente un int q = new int; // assegna 10 al atore *q = 10; // scrivi il contenuto di *q cout << *q; // elimina lo spazio ato da q. q resta vuoto; delete q; 3

4 Programmare con C } // scrivi due righe vuote cout << "\n\n"; // arresta esecuzione e termina programma system ("pause"); return 0 ; Altri esempi di definizione di tipo atore sono: double *pdouble; bool *pbool; char *pchar; Analisi del codice Alla riga 8 viene definita la variabile q che, all interno del programma, è in grado di contenere l indirizzo di un area di memoria adatta a contenere un intero. L istruzione di riga 11 del programma è l inizializzazione del atore q; come tutte le variabili anche q ha bisogno di essere inizializzata prima di essere utilizzata. Il valore NULL è un valore particolare che significa nulla : un atore che vale NULL non a alcuna variabile, ma possiede un valore definito. All inizio dell esecuzione i atori sono indefiniti, cioè contengono valori non determinati. Se si tenta di leggere il contenuto di un atore indefinito, si può ottenere un valore imprevedibile, ma se si tenta di scriverlo si possono causare errori in esecuzione. Infatti il atore indefinito contiene un indirizzo di memoria casuale e non è esclusa la possibilità che tale indirizzo corrisponda alla posizione di altre variabili o al codice stesso del programma. Se un programma che tratta atori fornisce, durante l esecuzione, risultati diversi da quelli attesi è probabile che stia lavorando con qualche atore indefinito. Alla riga 14 la funzione new riserva un area destinata a contenere la variabile ata. L operatore new esegue l'operazione di allocazione della memoria necessaria a contenere una variabile del tipo ato: nel caso dell'esempio una variabile intera. L allocazione consiste nel trovare uno spazio di memoria libero, grande a sufficienza per contenere la variabile richiesta, e quindi ad occuparlo, segnalando tale spazio come non disponibile per altri usi. Tutte le variabili ate trovano lo spazio necessario in un'area apposita, chiamata heap (letteralmente, mucchio). Le variabili ate vengono chiamate variabili dinamiche in conseguenza del fatto che esse vengono generate durante l'esecuzione del programma, apo in modo dinamico. Successivi utilizzi dell operatore new occupano spazi differenti dell area di heap, fino eventualmente a riempirla. La riga 23 del programma utilizza l operatore delete q;, che annulla l effetto di New, liberando la memoria occupata dalla variabile e rendendola disponibile per altri usi. Se si tenta di eseguire questa procedura usando un atore a NULL o un atore indefinito si ha un errore in esecuzione. Esempio PuntatoreA Di seguito viene presentato un programma che usa di proposito un atore indefinito; 4

5 Strutture dinamiche di dati Codice #include <cstdlib> #include <iostream> using namespace std; int main () } atorea.cpp //definisce la variab. q come un atore ad un intero int* q; // scrive *q, senza inizializzarlo cout << *q; // scrivi due righe vuote cout << "\n\n"; // arresta esecuzione e termina programma system ("pause"); return 0 ; se si esegue il programma precedente, si ottiene la visualizzazione del seguente messaggio di errore generato dall istruzione di riga 11. Si è verificato un errore in atorea.exe. L'applicazione verrà chiusa. Prima di approfondire ulteriormente l argomento, riassumiamo in breve i concetti principali esposti: i atori sono variabili che permettono di generare ed accedere a variabili di un tipo assegnato durante l'esecuzione di un programma; le variabili così ottenute si chiamano variabili dinamiche; il valore NULL può essere assegnato a qualsiasi atore per indicare che non a a nulla; con la procedura q = new int; si crea una variabile dinamica, con delete la si distrugge. Volendo definire un atore ad una variabile di tipo non elementare, come un array o un record, si deve operare come nell esempio che segue: struct UnaStruttura int c1 ; char c2 ; }; UnaStruttura *p; p= new UnaStruttura; p->c1 = 10; Nel codice precedente è definita una struttura che contiene due membri: c1 e c2; l ultima istruzione mostra come accedere a un membro della struttura. L operatore -> permette l accesso al singolo membro di un struttura. 5

6 Programmare con C++ Nel codice precedente il valore 10 viene assegnato solo a c1. Lista La lista semplice è un insieme di elementi composti da un'informazione e da uno o più atori ad altri elementi dello stesso tipo; si dice nodo un elemento della lista: ogni nodo è una struttura, costituita da uno o più campi contenenti informazioni, e da un campo atore contenente l'indirizzo del nodo successivo; il primo nodo è indirizzato da un atore ( Testa della lista); il campo atore dell ultimo elemento contiene NULL. La lista è una insieme di dati, formato da elementi dello stesso tipo collegati in catena, la cui lunghezza varia dinamicamente. La struttura del singolo elemento (informazione + atore) suggerisce per esso l uso delle strutture (struct): in essa alcuni campi sono destinati alle informazioni, ed un altro al atore. testa fondo NU LL Per realizzare una lista usando i atori espliciti occorre definire il tipo di oggetti che compongono la lista (nodi). Per esempio: Nodo Punt 6

7 Strutture dinamiche di dati struct Nodo int ; Nodo * ; }; Nodo * Primo; Tra le strutture dinamiche assumono particolare importanza le strutture dette pila e coda. Come si vedrà nelle pagine successive per questi due insiemi di dati è possibile presentare un esempio tratto dalla vita di tutti giorni e un esempio ricavato dalle funzioni definite nella maggior parte dei sistemi operativi attualmente in uso. Le strutture di cui parliamo vengono definite in modo astratto attraverso le funzioni che possono essere attivate su ciascun insieme di dati. La pila Possiamo definire la struttura di pila in astratto, descrivendo le uniche procedure che possono operare su di essa e non ammettendo altri tipi di intervento. La pila può essere considerata come un elenco ordinato nel quale si può aggiungere un elemento con la funzione detta Push e dal quale può essere estratto un elemento con una procedura detta Pop. La regola di funzionamento della pila è: l'ultimo elemento inserito con un push è il primo elemento ad essere estratto con un pop. Per evidenziare il funzionamento della struttura a pila, essa viene spesso chiamata struttura LIFO, acronimo di Last In First Output, ovvero l'ultimo ad entrare è il primo ad uscire. Consideriamo un esempio tratto dalla vita quotidiana e pensiamo a che cosa si può fare con una pila di piatti: su di essa si può aggiungere in testa un nuovo piatto (push) e da essa si può levare un piatto (pop) sempre solo dalla testa. Viene illustrata, ora, un importante applicazione della pila nell ambito della gestione di un sistema di elaborazione. Quando nell esecuzione di un programma si incontra una richiesta di cedere il controllo a una funzione (con terminologia meno accurata, ma più comprensibile si può anche dire: quando nell esecuzione di un programma si incontra una richiesta di salto a una funzione ), occorre memorizzare il o in cui tornare una volta che la funzione sia stata eseguita. Questo o viene detto indirizzo di rientro. Se nella funzione si incontra un altro salto simile, occorre memorizzare un secondo indirizzo di rientro e così via. Quando una funzione termina, il rientro deve avvenire all ultimo o memorizzato per proseguire l elaborazione nell unità (programma o funzione) che aveva richiesto l ultimo salto a funzione. Gli indirizzi di rientro seguono, perciò, la logica di funzionamento della pila e possono quindi utilmente essere memorizzati in una struttura dati di questo tipo. 7

8 Programmare con C++ Esempio CreaPila Inserire in una pila una serie di numeri naturali dati in input. La serie termina con il numero zero. Indicazioni per la soluzione L esempio richiede la creazione di una pila: tale creazione comporta l operazione di inserimento in testa (PUSH) dei dati, di volta in volta, letti da tastiera; poiché i dati digitati sono una sequenza di numeri interi, come richiede il testo dell esempio, si tratta di creare una pila di numeri naturali. Quindi l algoritmo richiesto è formato principalmente da una struttura di controllo MENTRE dove, per ogni numero intero inserito, vengono ripetute le seguenti operazioni 1. Leggi un numero. 2. Crea un nuovo nodo con l informazione da inserire. 3. Collega il nuovo elemento al primo elemento della lista. 4. Aggiorna il atore di testa della lista a are al nuovo elemento. Le operazioni indicate sopra vengono presentate con uno schema grafico allo scopo di fare maggiore chiarezza su come si può operare con i atori (vedi pag. successiva). Crea atore Nuovo a nuovo Nodo Testa Nuo vo Assegna a il valore letto N ; assegna al atore del nuovo nodo il valore di testa. Nuo vo N NU LL Aggiorna il atore di testa della lista a are al nuovo elemento. Testa N NU LL Pseudocodifica // Struttura dati Nodo int atore a Nodo pun } Funzione Push (Testa) Aggiunge dati in testa alla lista crea nodo Nuovo Assegna N a di Nuovo Assegna Testa a pun di Nuovo Aggiorna il atore di testa della lista a are al nuovo elemento. 8

9 Strutture dinamiche di dati FINE Push INIZIO Definisci Testa come atore a Nodo Inizializza Testa a NULL chiedi e leggi intero N MENTRE N!= 0 Richiama Push(Testa) chiedi e leggi intero N FINE MENTRE FINE Dalla pseudocodifica precedente viene sviluppato soltanto il codice relativo alla funzione Push; anche per tutti gli esempi successivi lo schema del programma principale resterà inalterato e verrà presentato solo il codice della funzione in esame. Codice struct Nodo int ; Nodo * pun; }; int N; void Push(Nodo* &Testa, int N) } Prova di esecuzione Nodo * Nuovo; Nuovo = new Nodo; Nuovo-> = N; Nuovo->pun = Testa; Testa = Nuovo; Push.cpp 9

10 Programmare con C++ Poiché l esempio non richiede la visualizzazione dei risultati, per avere una prova di esecuzione significativa si rimanda all esempio successivo. Analisi del codice Il codice è relativo alla sola funzione Push: dalla riga 13 alla 17 si sviluppa la funzione che serve per inserire in testa alla pila un nuovo nodo; alle righe 13,14 viene creato un nuovo nodo ato dal atore Nuovo; le righe 15,16 completano i dati della struttura Nuovo; nella riga 15 a viene assegnato il numero letto in input e nella riga 16 al atore viene assegnato l indirizzo di testa della pila. La riga 17 aggiorna il atore di testa della lista a are al nuovo elemento. Esempio CreaStampaPila Visitare la lista dall inizio alla fine e per ogni elemento scrivere su video il membro Indicazioni per la soluzione Tutti nodi della lista devono essere elaborati: in questo caso l elaborazione consiste solo nella scrittura del dato contenuto nel nodo. Quando una elaborazione viene estesa a tutti i nodi di una struttura dinamica si parla di visita della struttura Pseudocodifica // Struttura dati Nodo int atore a Nodo pun } Funzione StampaLista (Testa) Definisci atore p Assegna a p il valore di Testa MENTRE pila non finita Scrivi dato Passa a nodo successivo FINE MENTRE FINE StampaLista //p!= NULL Codice StampLista.cpp 1 void StampaLista(Nodo * Testa) 2 3 cout<<"\n\ninizio stampa \n"; 4 Nodo * p; 5 p = Testa; 6 while (p!= NULL) 7 8 cout <<"\t"<< p-><<" \n"; 9 p = p->pun; 10 } 11 cout<<"fine stampa \n"; 12 } 10

11 Strutture dinamiche di dati Analisi del codice La funzione di stampa è costituita principalmente da una ripetizione MENTRE e la visita della struttura avviene utilizzando un atore p che, alla riga 5, è inizializzato a Testa. Le righe che vengono ripetute sono la 8 e la 9: la prima scrive il contento di, la seconda incrementa il atore per passare al nodo successivo; la ripetizione si arresta quando il atore risulta = NULL (riga 6). Prova di esecuzione Esempio PopPila Data una lista non vuota realizzare una funzione che elimina il primo elemento di testa (pop) Indicazioni per la soluzione Il problema da risolvere si configura nel seguente modo: Se la lista non è vuota si aggiorna il atore di testa della lista o, per meglio dire, si assegna a Testa il atore al nodo successivo. Pseudocodifica Funzione Pop (Testa) Chiedi (vuoi togliere il primo nodo dalla lista? (s/n)) MENTRE Risp = s SE la lista non è vuota (Testa!= NULL) assegna a Testa il atore al nodo successivo Chiedi (vuoi togliere un altro nodo dalla lista? (s/n)) FINE MENTRE FINE Pop Lo schema che segue offre una rappresentazione grafica di quanto deve essere realizzato dalla funzione richiesta nell esempio. 11

12 Programmare con C++ testa POP testa fondo fondo NU LL NU LL Codice Pop.cpp 1 void Pop (Nodo * &Testa) 2 3 char r = 's'; 4 cout << "\nvuoi togliere il primo nodo dalla lista? (s/n)"; 5 cin >> r; 6 while (r == 's') 7 8 if (Testa!= NULL) 9 Testa = Testa->pun; 10 cout << "vuoi togliere un altro nodo? (s/n)"; 11 cin >> r; 12 } 13 } Prova di esecuzione 12

13 Strutture dinamiche di dati Analisi del codice La riga 9 è l elemento risolutore della funzione: aggiorna il atore Testa in modo che i al nodo successivo. Tale operazione viene fatta solo se la pila non è vuota. La coda Possiamo definire la struttura di coda in astratto, descrivendo le uniche funzioni che possono operare su di essa e non ammettendo altri tipi di intervento. La coda può essere considerata come un elenco ordinato nel quale si può aggiungere un elemento con la procedura detta Accoda e dal quale può essere estratto un elemento con una procedura detta Pop. La regola di funzionamento della coda è: l'ultimo elemento inserito con un Accoda è l ultimo elemento ad essere estratto con un pop. Per evidenziare il funzionamento della struttura a coda, essa viene spesso chiamata struttura FIFO, acronimo di First In First Output, ovvero il primo a entrare è il primo ad uscire. Consideriamo un esempio tratto dalla vita quotidiana e pensiamo a quale è la dinamica di una coda di persone davanti allo sportello di un ufficio: se tutte le persone della coda si comportano in modo corretto (evento rarissimo), quando il primo della coda ha terminato le proprie pratiche allo sportello, si allontana da essa (pop); se arriva una nuova persona, si mette in coda (si accoda). Con lo stesso criterio viene chiamata struttura FIFO (First In First Out, che significa il primo entrato è il primo ad uscire) una struttura nella quale, in senso figurato, i dati entrano da una parte ed escono dalla parte opposta. pop accoda sportello La struttura FIFO viene chiamata anche coda proprio perché funziona nello stesso modo. Così come si usa dire impilare o accatastare riferendosi alle pile, si dice accodare riferendosi alle code. Viene illustrata, ora, un importante applicazione della coda nell ambito della gestione di un sistema di elaborazione. Lavorando sui computer multiutente è frequente che si accodino stampe o lavori nelle rispettive code: i moduli software del sistema operativo che gestiscono queste attività del sistema di elaborazione seguono infatti il principio FIFO, per cui se più utenti richiedono le stampe sulla stessa stampante, esse vengono eseguite nello stesso ordine con cui sono state richieste (coda di SPOOL). L esempio che segue mostra la struttura della funzione Accoda, funzione che caratterizza la PILA; come già detto, questa funzione aggiunge un elemento a una lista facendo in modo che la gestione dei nodi segua il criterio First In First Output (FIFO). Esempio Accoda Accodare un nuovo nodo a una lista data Indicazioni per la soluzione Quelle che seguono sono le operazioni principali per realizzare l accodamento di un nuovo nodo a una lista: 13

14 Programmare con C++ 1. Visita della lista fino ad individuare l ultimo nodo (definire il atore Fondo come atore all ultimo nodo). 2. Creazione di un nuovo nodo con le informazioni da aggiungere. 3. Collegamento dell ultimo nodo al nuovo nodo appena creato. Pseudocodifica Funzione Accoda (Fondo, Testa, N) //Aggiunge dati in coda Cerca l ultimo elemento della lista e aggiorna il atore Fondo crea nodo Nuovo Assegna N a di Nuovo Assegna Testa a pun di Nuovo Se lista vuota // Se (Testa = = NULL) ALLORA Aggiorna il atore di testa della lista a are al nuovo elemento ALTRIMENTI Aggiorna il atore Fondo a are al nuovo elemento FINE Accoda Codice Accoda.cpp 1 void Accoda(Nodo* &Fondo, Nodo * &Testa,int N) 2 3 Nodo* p; 4 Nodo* q; 5 6 for (q = Testa; q!= 0; q = q->pun) 7 Fondo = q; 8 q = new Nodo; 9 q-> = N; 10 q->pun = 0; 11 if (Testa == NULL) 12 Testa = q; 13 else 14 Fondo->pun = q; 15 } Prova di esecuzione 14

15 Strutture dinamiche di dati Analisi del codice Nelle righe 3 e 4 vengono definiti due nuovi atori locali. La riga 6 serve per visitare l intera lista e individua il atore all ultimo elemento (atore Fondo). La riga 9, assegna N a di Nuovo, la riga 10 assegna Testa al atore di Nuovo. La riga 11 controlla che la lista non sia vuota: SE lista vuota, ALLORA Aggiorna il atore di testa della lista a are al nuovo nodo (riga 12), ALTRIMENTI Aggiorna il atore Fondo a are al nuovo nodo (riga 14). Lista ordinata Esempio ListaOrdinata Definire una funzione che sia in grado di inserire un numero dato in input in una lista ordinata. Indicazioni per la soluzione In primo luogo vengono presentati in modo sintetico i passi da eseguire per realizzare quanto richiesto alla funzione: 1. Visita la lista finché si incontra un nodo contenente nel campo un valore maggiore di quello da inserire oppure si incontra la fine della lista. 2. Crea un nuovo nodo con l informazione da inserire. 3. Inserisci il nuovo elemento. Pseudocodifica Funzione Inserimento (Testa, N) definisci p, q, Nuovo come atori a Nodo ricerca nella lista il nodo che contiene l intero minore dell intero da inserire salva in p e in q l indirizzo di tale nodo crea nodo Nuovo compila i suoi campi SE la lista q a alla testa ALLORA aggiorna Testa ALTRIMENTI aggiorna l indirizzo del atore del nodo trovato FINE Inserimento Codice Inserimento.cpp void Inserimento(Nodo* &Testa,int N) Nodo * p = 0; Nodo * q; Nodo * Nuovo; for (q = Testa; q!= 0 && q-> < N; q = q->pun) p = q; Nuovo = new Nodo; Nuovo-> = N; Nuovo->pun = q; // controlla se si deve inserire in testa if (q == Testa) Testa = Nuovo; 15

16 Programmare con C } else p->pun = Nuovo; Analisi del codice Alle righe 3,4,5 vengono definiti tre atori p, q e Nuovo: i primi due sono di lavoro, il terzo serve, come negli esempi precedenti, a creare il nuovo nodo da inserire nella lista. La riga 6 è la più complessa e serve per visitare la lista e per cercare il nodo prima del quale aggiungere il nuovo che contiene l intero acquisito da tastiera, essa è formata da una struttura for che necessita di una descrizione accurata: si tratta di una visita della lista che inizia dalla testa (prima istruzione: q = Testa;) e si sposta nei nodi successivi (terza istruzione: q = q->pun ); la ripetizione for continua se non si è arrivati in fondo (q!= 0 AND < N). Applicando la legge di DeMorgan il for si arresta se si è arrivati in fondo (q = = 0 OR >= N). In questo caso, va eseguito l inserimento del nuovo nodo. Alle righe 8, 9 e 10 viene creato un nuovo nodo e in esso vengono inseriti i nuovi dati. Dalla riga 12 alla riga 15 vengono aggiornati i atori: della testa se il nuovo dato va inserito per primo o del nodo prima del quale va inserito il nuovo intero. Prova di esecuzione 16

INTRODUZIONE ALLA PROGRAMMAZIONE

INTRODUZIONE ALLA PROGRAMMAZIONE INTRODUZIONE ALLA PROGRAMMAZIONE Prof. Enrico Terrone A. S: 2008/09 Definizioni Programmare significa risolvere problemi col computer, cioè far risolvere problemi al computer attraverso un insieme di informazioni

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

Esercizi Strutture dati di tipo astratto

Esercizi Strutture dati di tipo astratto Salvatore Cuomo Esercizi Strutture dati di tipo astratto Lezione n. 20 Parole chiave: Strutture dati, pile code, liste Corso di Laurea: Informatica Insegnamento: Programmazione II, modulo di Laboratorio

Dettagli

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Puntatori e dintorni Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;

Dettagli

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe. Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe. 1) Comprendere il problema 2) Stabilire quali sono le azioni da eseguire per risolverlo 3) Stabilire la

Dettagli

Pr1: determinare il maggiore di n numeri interi n. Fondamenti di Informatica Prof. Vittoria de Nitto Personè

Pr1: determinare il maggiore di n numeri interi n. Fondamenti di Informatica Prof. Vittoria de Nitto Personè Pr1: determinare il maggiore di n numeri interi 1 2 3 4 n 1 Pr1: determinare il maggiore di n numeri interi 1 2 3 4 n P1. trovare il maggiore fra i primi 2 numeri; P2. trovare il maggiore fra il terzo

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Strutture di dati Laboratorio di Informatica 5. Strutture / Array di oggetti / Pila&Coda in C++ Una struttura è un insieme finito di variabili (dette campi) non necessariamente dello stesso tipo, ognuna

Dettagli

Strutture dati e loro organizzazione. Gabriella Trucco

Strutture dati e loro organizzazione. Gabriella Trucco Strutture dati e loro organizzazione Gabriella Trucco Introduzione I linguaggi di programmazione di alto livello consentono di far riferimento a posizioni nella memoria principale tramite nomi descrittivi

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Liste semplici (semplicemente linkate) Una lista semplice e costituita da nodi Laboratorio di Informatica 7. Strutture complesse di dati in C++ Ogni nodo e una struttura che contiene : Dati Un riferimento

Dettagli

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 Strutture dati Il che cosa e il come Il che cosa ed il come Struttura dati: descrive come sono organizzati i dati e come sono realizzate le operazioni su di essi (cioe come si accede ai dati) Specifica

Dettagli

Fondamenti di Informatica II

Fondamenti di Informatica II Università degli studi di Messina Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica e delle Telecomunicazioni Fondamenti di Informatica II Tipi di dati astratti(adt)- seconda parte Coda Struttura

Dettagli

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

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano Scope delle variabili e passaggio parametri Danilo Ardagna Politecnico di Milano 1-4-2014 Introduzione! Con le funzioni è stato introdotto un meccanismo per definire dei piccoli programmi all interno di

Dettagli

Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori

Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Salvatore Mandrà 7 Ottobre 2008 1 Esercizio L esercizio prevede l implementazione di funzioni per il prodotto di una matrice per un vettore, attraverso

Dettagli

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

La classe std::vector della Standard Template Library del C++ La classe std::vector della Standard Template Library del C++ Alberto Garfagnini Università degli studi di Padova 23 Ottobre 2013 Programmazione generica in C++ : i Template I templates sono probabilmente

Dettagli

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica Corso di Fondamenti di Informatica Puntatori e Allocazione Dinamica I puntatori (Richiamo) Il C++ prevede puntatori a dati di qualsiasi natura, semplici o strutturati e puntatori a funzione. In particolare

Dettagli

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste Sequenze Sommario Le strutture dati elementari per implementare sequenze: Vettori Liste Strutture dati elementari Le strutture dati vettore e lista sono fra le strutture dati più usate e semplici Il loro

Dettagli

Informatica 1. Prova di recupero 21 Settembre 2001

Informatica 1. Prova di recupero 21 Settembre 2001 Informatica 1 Prova di recupero 21 Settembre 2001 Si risolvano i seguenti esercizi. Ai fini della determinazione del voto finale il loro punteggio andrà sommato al punteggio del laboratorio. Il tempo complessivo

Dettagli

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 5 Martedì 25-10-2016 Definizione di processo Esiste una distinzione concettuale

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario

Dettagli

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

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Compendio sottoinsieme del C++ a comune col C (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Librerie 1/2 Il solo insieme di istruzioni di un linguaggio di programmazione

Dettagli

Il linguaggio C Strutture

Il linguaggio C Strutture Il linguaggio C Strutture Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C -- Strutture 2 Ringraziamenti Questi

Dettagli

ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)

ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte) ADT: Abstract Data Type I tipi di dati astratti (I parte) Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Scopo Livello di astrazione sui dati tale da mascherare completamente

Dettagli

Tipi di dato e Strutture dati elementari

Tipi di dato e Strutture dati elementari Tipi di dato e Strutture dati elementari Ing. Paolo Craca Anno accademico 2007/2008 Tipi di dato e Strutture dati elementari 1 / 40 Cosa vedremo in questo seminario 1 Introduzione 2 Pile 3 Code 4 5 Bibliografia

Dettagli

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento.

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento. Un ulteriore semplificazione si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine (e l inizio) di una lista. Questa soluzione va contemplata

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica Il tipo puntatore; l allocazione dinamica della memoria Claudio De Stefano - Corso di Fondamenti di Informatica 1 puntatori una variabile di tipo puntatore al tipo x

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione

Dettagli

Laboratorio di Programmazione Lezione 3. Cristian Del Fabbro

Laboratorio di Programmazione Lezione 3. Cristian Del Fabbro Laboratorio di Programmazione Lezione 3 Cristian Del Fabbro Prossima lezione GIOVEDÌ 12 NOVEMBRE ORE 14:00 Array a.k.a. vettore Un array è una collezione ordinata di dati omogenei (cioé sono tutti dello

Dettagli

La struttura dati CODA

La struttura dati CODA Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta

Dettagli

INFORMATICA. Strutture iterative

INFORMATICA. Strutture iterative INFORMATICA Strutture iterative Strutture iterative Si dice ciclo (loop) una sequenza di istruzioni che deve essere ripetuta più volte consecutivamente. Si consideri ad esempio il calcolo del fattoriale

Dettagli

Introduzione ai puntatori in C Definizione

Introduzione ai puntatori in C Definizione Introduzione ai puntatori in C Definizione Un puntatore è una variabile che contiene l indirizzo di un altra variabile Tramite i puntatori si può quindi accedere a un oggetto indirettamente (si usa il

Dettagli

STRUTTURE DI CONTROLLO DEL C++

STRUTTURE DI CONTROLLO DEL C++ STRUTTURE DI CONTROLLO DEL C++ Le istruzioni if e else Le istruzioni condizionali ci consentono di far eseguire in modo selettivo una singola riga di codice o una serie di righe di codice (che viene detto

Dettagli

Una breve introduzione all implementazione in C di algoritmi su grafo

Una breve introduzione all implementazione in C di algoritmi su grafo Una breve introduzione all implementazione in C di algoritmi su grafo A cura di Gianmaria Leo Introduzione La lezione è un introduzione a concetti e strumenti che permettono l implementazione di algoritmi

Dettagli

Informatica! Appunti dal laboratorio 1!

Informatica! Appunti dal laboratorio 1! Informatica! Appunti dal laboratorio 1! Sistema Operativo! Windows 7, Windows 8, Mac OS X, Linux, Debian, Red Hat, etc etc! Il sistema operativo è un programma che serve a gestire TUTTE le risorse presenti

Dettagli

Elementi di Informatica A. A. 2016/2017

Elementi di Informatica A. A. 2016/2017 Elementi di Informatica A. A. 2016/2017 Ing. Nicola Amatucci Università degli studi di Napoli Federico II Scuola Politecnica e Delle Scienze di Base nicola.amatucci@unina.it Programmazione C++ Parte 2

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]

Dettagli

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

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella Corso di Informatica Tipi strutturati: Stringhe Anno Accademico 2010/2011 Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri quali

Dettagli

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto Argomenti della lezione Introduzione agli Algoritmi e alle Strutture Dati Operazioni su Liste Dr. Emanuela Merelli Tipi di Dato Astratto Lista Lineare Pila Coda Concetto di Struttura dati dinamiche Lista

Dettagli

Esercitazione 6. Array

Esercitazione 6. Array Esercitazione 6 Array Arrays Array (o tabella o vettore): è una variabile strutturata in cui è possibile memorizzare un numero fissato di valori tutti dello stesso tipo. Esempio int a[6]; /* dichiarazione

Dettagli

Alberi ed Alberi Binari

Alberi ed Alberi Binari Alberi ed Alberi Binari Il tipo di dato Albero Un albero è una struttura di data organizzata gerarchicamente. È costituito da un insieme di nodi collegati tra di loro: ogni nodo contiene dell informazione,

Dettagli

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; } Liste con sentinella Un ulteriore semplificazione delle operazioni sulle liste si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine e l inizio

Dettagli

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 18.III.2015 VINCENZO MARRA Indice Parte 1. L algoritmo euclideo 3 Esercizio 1 3 L algoritmo euclideo

Dettagli

Informatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list

Informatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list LEZIONE 13: Liste doppie, pile e code Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda Lezione 13 - Modulo 1 Free list Politecnico di Milano - Prof. Sara Comai 1 Politecnico di

Dettagli

Primi passi col linguaggio C

Primi passi col linguaggio C Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta

Dettagli

Gestione dinamica della memoria

Gestione dinamica della memoria Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.

Dettagli

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

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico

Dettagli

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

1) definizione di una rappresentazione 2) specificazione di un algoritmo (dipendente dalla rappresentazione) 3) traduzione in un linguaggio soluzione di un problema 1) definizione di una rappresentazione 2) specificazione di un algoritmo (dipendente dalla rappresentazione) 3) traduzione in un linguaggio rappresentazioni disponibili in C++:

Dettagli

Strutture di Controllo

Strutture di Controllo Introduzione Strutture di Controllo per strutture condizionali e cicliche Quando si affronta la programmazione si devono indicare al computer delle istruzioni da eseguire. Se il computer potesse comprendere

Dettagli

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico Click to edit Algoritmo Master title style algoritmo: un insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce un risultato e si arresta in un tempo finito

Dettagli

Le strutture di controllo in C++

Le strutture di controllo in C++ Le strutture di controllo in C++ Docente: Ing. Edoardo Fusella Dipartimento di Ingegneria Elettrica e Tecnologie dell Informazione Via Claudio 21, 4 piano laboratorio SECLAB Università degli Studi di Napoli

Dettagli

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

Dettagli

Corso di Fondamenti di Informatica Classi di istruzioni 2

Corso di Fondamenti di Informatica Classi di istruzioni 2 Corso di Informatica Classi di istruzioni 2 Anno Accademico 2010/2011 Francesco Tortorella Strutture di controllo Caratteristica essenziale degli algoritmi è la possibilità di decidere le operazioni da

Dettagli

Strutture Dinamiche. Fondamenti di Informatica

Strutture Dinamiche. Fondamenti di Informatica Strutture Dinamiche Fondamenti di Informatica 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione Companies, srl 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato));

Dettagli

Pile Le pile: specifiche e realizzazioni attraverso rappresentazioni sequenziali e collegate. Pile e procedure ricorsive

Pile Le pile: specifiche e realizzazioni attraverso rappresentazioni sequenziali e collegate. Pile e procedure ricorsive Pile Le pile: specifiche e realizzazioni attraverso rappresentazioni sequenziali e collegate. Pile e procedure ricorsive Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di

Dettagli

Scrittura formattata - printf

Scrittura formattata - printf Esercizi su Input/Output con formato FormattedIO 1 Scrittura formattata - printf Funzione printf int printf ( , ) La funzione restituisce un valore intero uguale ai caratteri

Dettagli

Introduzione alla programmazione

Introduzione alla programmazione Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste

Dettagli

PILE E CODE. Pile (stack):

PILE E CODE. Pile (stack): PILE E CODE Sono tipi di dato che consentono di rappresentare sequenze di elementi in cui gli inserimenti e le cancellazioni sono eseguiti con particolari modalita` (politiche o discipline). Pile (stack):

Dettagli

Allocazione Dinamica della Memoria

Allocazione Dinamica della Memoria Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10 Scelta delle variabili Quando

Dettagli

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL 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

Dettagli

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

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto

Dettagli

Gestione degli impegni Requisiti generali Si fissi come ipotesi che la sequenza di impegni sia ordinata rispetto al tempo,, e che ogni lavoratore abbi

Gestione degli impegni Requisiti generali Si fissi come ipotesi che la sequenza di impegni sia ordinata rispetto al tempo,, e che ogni lavoratore abbi Fondamenti di Informatica T-1 modulo 2 Laboratorio 10: preparazione alla prova d esame 1 Esercizio 1 - Gestione degli impegni Gli impegni giornalieri dei dipendenti di un azienda devono essere aggiornati

Dettagli

Esercitazione 4. Comandi iterativi for, while, do-while

Esercitazione 4. Comandi iterativi for, while, do-while Esercitazione 4 Comandi iterativi for, while, do-while Comando for for (istr1; cond; istr2) istr3; Le istruzioni vengono eseguite nel seguente ordine: 1) esegui istr1 2) se cond è vera vai al passo 3 altrimenti

Dettagli

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere

Dettagli

Linguaggio C: PUNTATORI

Linguaggio C: PUNTATORI Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE Francesco Tura francesco.tura@unibo.it 1 Lo strumento dell informatico: ELABORATORE ELETTRONICO [= calcolatore = computer] Macchina multifunzionale Macchina

Dettagli

Introduzione alle stringhe e algoritmi collegati

Introduzione alle stringhe e algoritmi collegati Introduzione alle stringhe e algoritmi collegati Algoritmicamente August 15, 2009 1 Introduzione 1.1 Introduzione ai caratteri In informatica o più generalmente in una terminologia scientifica, il carattere

Dettagli

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni. Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni. Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro

Dettagli

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl Approfondimento 2.1 Non è questo il testo dove trattare esaurientemente queste tecniche semantiche. Ci accontenteremo di dare un semplice esempio delle tecniche basate sui sistemi di transizione per dare

Dettagli

Algoritmi di ordinamento: Array e ricorsione

Algoritmi di ordinamento: Array e ricorsione Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Indice Algoritmi di ordinamento: Insertion

Dettagli

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

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal Algoritmi, Strutture Dati e Programmi : Programmazione in Pascal Prof. Alberto Postiglione AA 2007-2008 Università degli Studi di Salerno Il Linguaggio di Programmazione Pascal Esistono molti linguaggi

Dettagli

Università di Roma Tor Vergata L12-1

Università di Roma Tor Vergata L12-1 Università di Roma Tor Vergata L12-1 soluzione di un problema fl 1) definizione di una rappresentazione 2) specificazione di un algoritmo (dipendente dalla rappresentazione) 3) traduzione in un linguaggio

Dettagli

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

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN Breve Manuale di Riferimento sulla Sintassi Linguaggi e versione aggiornata al 05/02/2004 Sommario Elementi di Base... 2 Dati, Tipi e Dichiarazioni... 2 Tipi di Dato di Base... 2 Tipi di Dato Strutturati...

Dettagli

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Esercizio 1: funzione con valore di ritorno di tipo puntatore Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 7 Esercitazione: 14 dicembre 2005 Esercizi su ricorsione, manipolazione stringhe, strutture dinamiche Problema: Esercizio

Dettagli

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono

Dettagli

Parametri Formali di una Funzione e Record di Attivazione

Parametri Formali di una Funzione e Record di Attivazione Parametri Formali di una Funzione e Attivazione Un record di attivazione rappresenta il mondo di una funzione, e contiene tutto ciò che ne caratterizza l esistenza, tra cui ad esempio: le variabili locali

Dettagli

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22 Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)

Dettagli

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di

Dettagli

Stringhe e allocazione dinamica della memoria

Stringhe e allocazione dinamica della memoria Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per

Dettagli

Programmazione I - Laboratorio

Programmazione I - Laboratorio Programmazione I - Laboratorio Esercitazione 6 - Liste Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list Esercitazione: Implementazione in linguaggio C dell ADT Stack con l utilizzo di linked list Laboratorio di Programmazione Introduzione un ADT (Abstract Data Type) è un modello (formale) che generalizza

Dettagli

Struttura dati astratta Coda

Struttura dati astratta Coda CODE Struttura dati astratta Coda La coda o queue è una struttura dati astratta in cui l'inserimento e l estrazione sono consentite solo in specifiche posizioni; in particolare, l'inserimento è consentito

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 09 ADT: Lista, Pila, Coda A. Miola Marzo 2007 http://www.dia.uniroma3.it/~java/fondinf2/ ADT: Lista, Pila, Coda 1 Contenuti Tipo

Dettagli

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

#include <iostream> // libreria che gestisce flusso di input e output. using namespace std; // uso di librerie standard del C++ Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni

Dettagli

Calcolare x n = x x x (n volte)

Calcolare x n = x x x (n volte) Calcolare x n = x x x (n volte) Abbiamo bisogno di: una variabile ris in cui ad ogni iterazione del ciclo si ha un risultato parziale, e che dopo l ultima iterazione contiene il risultato finale; una variabile

Dettagli

Strutture Dati Dinamiche

Strutture Dati Dinamiche Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti

Dettagli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del

Dettagli

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L attività di progettare e realizzare un programma è detta programmazione

Dettagli

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;

Dettagli

La scrittura di un programma Modellizzazione del programma Scrittura del codice Esercizi. Sperimentazioni I. Alberto Garfagnini, Marco Mazzocco

La scrittura di un programma Modellizzazione del programma Scrittura del codice Esercizi. Sperimentazioni I. Alberto Garfagnini, Marco Mazzocco Sperimentazioni I Alberto Garfagnini, Marco Mazzocco Università degli studi di Padova 10 Novembre 2011 La scrittura di un programma Modellizzazione programma Flowcharts Pseudocode Scrittura del codice

Dettagli

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità Laboratorio di Algoritmi e Strutture Dati Code con Priorità Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso

Dettagli

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali MASTER Information Technology Excellence Road (I.T.E.R.) Array Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Tipi di dato stutturati In C si possono

Dettagli

La scrittura di un programma Modellizzazione del programma Scrittura del codice Esercizi. Sperimentazioni I. Alberto Garfagnini, Marco Mazzocco

La scrittura di un programma Modellizzazione del programma Scrittura del codice Esercizi. Sperimentazioni I. Alberto Garfagnini, Marco Mazzocco Sperimentazioni I Alberto Garfagnini, Marco Mazzocco Università degli studi di Padova 30 Ottobre 2013 La scrittura di un programma Modellizzazione programma Flowcharts Pseudocode Scrittura del codice Esercizi

Dettagli

Costanti e Variabili

Costanti e Variabili Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli

Dettagli

I PUNTATORI E LE STRUTTURE DATI DINAMICHE. Cosimo Laneve/Ivan Lanese

I PUNTATORI E LE STRUTTURE DATI DINAMICHE. Cosimo Laneve/Ivan Lanese I PUNTATORI E LE STRUTTURE DATI DINAMICHE Cosimo Laneve/Ivan Lanese argomenti 1. dichiarazioni di puntatori 2. le operazione su puntatori (NULL, new, delete, &, *) 3. puntatori passati come parametri e

Dettagli

La Gestione della Memoria. Carla Binucci e Walter Didimo

La Gestione della Memoria. Carla Binucci e Walter Didimo La Gestione della Memoria Carla Binucci e Walter Didimo Esecuzione di programmi Java L esecuzione di un programma Java richiede: la compilazione del codice Java in bytecode Java (un linguaggio macchina

Dettagli

PROGRAMMAZIONE: Le strutture di controllo

PROGRAMMAZIONE: Le strutture di controllo PROGRAMMAZIONE: Le strutture di controllo Prof. Enrico Terrone A. S: 2008/09 Le tre modalità La modalità basilare di esecuzione di un programma è la sequenza: le istruzioni vengono eseguite una dopo l

Dettagli