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

Dimensione: px
Iniziare la visualizzazioe della pagina:

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

Transcript

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

2 argomenti 1. dichiarazioni di puntatori 2. le operazione su puntatori (NULL, new, delete, &, *) 3. puntatori passati come parametri e ritornate come valori di funzioni 4. esempi/esercizi 5. le strutture dati dinamiche: liste 6. la funzione revert iterativa slide 2

3 prologo le strutture dati dinamiche sono strutture dati le cui dimensioni possono essere estese o ridotte durante l esecuzione del programma esempi: tutti i tipi di dati studiati finora hanno una dimensione che è nota staticamente ci sono casi in cui sono necessari dati la cui dimensione è sconosciuta al programmatore sequenza di caratteri da scrivere in modo invertito (sappiamo risolverlo solo con la ricorsione) numeri naturali grandi a piacere e operazioni su di esse pile, code, insiemi senza limitazioni sul numero di elementi alberi genealogici di famiglie e programmi che stampano la lista di avi di date persone (questi alberi aumentano col tempo man mano che nascono nuovi discendenti) questi problemi possono essere risolti con gli array, ma in modo insoddisfacente slide 3

4 prologo/cont non è possibile pensare di avere le strutture dati dinamiche in C++ come primitive, visto che sono infinite piuttosto bisogna individuare una operazione di base per implementare i tipi di dato dinamici a programma esempio: una pila può essere implementata in diversi modi o p p i p o p p i p o p p i p p o i p p [ci sono degli archi] slide 4

5 prologo/cont un arco significa che un elemento è logicamente connesso con un altro elemento occorre definire questa connessione logica per implementare i tipi di dato dinamici nella memoria ciò che accade è: progra mma p o p p i progr amma o 5C 1BA p 5C3 p 5C3 5C 0FA p 7E0 i 7E0 1BA connessioni logiche gli elementi sono strutture con due campi: uno di essi contiene il valore dell elemento, l altro contiene l indirizzo di memoria in cui si trova l elemento logicamente connesso slide 5 connessioni fisiche (in rosso sono rappresentati gli indirizzi di memoria)

6 puntatori quando si scrive il programma non è possibile sapere in quale indirizzo di memoria il dato sarà caricato possiamo solamente far riferimento agli indirizzi in maniera simbolica, utilizzando nomi che li rappresentano al momento non abbiamo ancora nessun tipo di dato indirizzo di memoria abbiamo utilizzato il concetto di indirizzo di memoria nel passaggio per riferimento -- vedi funzione scambia graficamente, anzichè scrivere indirizzi, scriveremo delle frecce, per indicare che un certo contenitore (una variabile) contiene l indirizzo di memoria di un dato: no progr amma o 5C 1BA p 5C3 p 5C3 5C 0FA p 7E0 i 7E0 1BA slide 6 progra mma o i p p p si

7 puntatori/cont. definizione (informale): il tipo di dato indirizzo di memoria è detto puntatore un puntatore non punta ad un indirizzo di memoria qualunque, ma solamente a indirizzi che contengono elementi di un certo tipo esempi: puntatori a interi num_p num 3 puntatori a caratteri car_p car a puntatori a strutture (liste/pile/code) struct_p struct a osservazione: il puntatore è un tipo di dato parametrico: dipende dal tipo di elementi a cui punta slide 7

8 dichiarazioni di puntatori per indicare che un identificatore è un puntatore a valori di un certo tipo, nella dichiarazione, si prefigge l identificatore con * esempi: int *p ; // p è un puntatore a interi double *f_p ; // f_p è un puntatore a float struct lista { int val ; struct lista *next ; } // next è un puntatore // a strutture lista slide 8

9 operazioni su puntatori NULL (puntatore vuoto) new (allocazione blocco di memoria) delete (deallocazione blocco di memoria) & (indirizzo di) * (dereferenziazione) slide 9

10 operazioni su puntatori/null la costante NULL rappresenta il puntatore vuoto di solito si usa come il puntatore memorizzato nell elemento finale di un struttura dati dinamica un programma attraversa una lista, visitando ciascun elemento attraverso puntatori successivi; quando si ottiene il puntatore NULL significa che è stata raggiunta la fine della lista la costante NULL può essere assegnata a qualunque puntatore esempi: int *p char *q, r ; p = NULL ; q = NULL ; if (p == NULL)... r = NULL ; // ERRORE! r non è un puntatore la costante NULL ha valore 0 ed è definita in diverse librerie, incluso iostream slide 10

11 operazioni su puntatori/new problema: la dichiarazione di puntatore alloca solo lo spazio che può contenere un indirizzo di memoria come fare a far puntare il puntatore ad una certa area? la funzione new permette di allocare dinamicamente la memoria per una variabile di tipo puntatore new prende in input un tipo e restituisce un puntatore ad un nuovo blocco di memoria che contiene elementi di quel tipo nump nump int *nump ; nump = new int ; le celle di memoria create usando l operatore new sono dette dinamiche le celle di memoria dinamiche sono create (e distrutte) quando il programma è in esecuzione slide 11

12 operazioni su puntatori/delete delete libera l area di memoria puntata dall argomento che deve essere un puntatore tali celle potranno così essere riutilizzate da successive chiamate a new il valore del puntatore dopo l invocazione di free è indefinito (dipende dal compilatore) -- dangling pointer delete non fa nulla se il puntatore in input è NULL esempio: delete nump ; heap heap nump A delete nump ; nump regola di programmazione: è buona norma riassegnare il puntatore dopo l invocazione di delete (riassegnare i dangling pointer) esempi: int *p ; while (true) { p = new int ; delete p ; } // non termina while (true) { p = new int ; } // termina con out-of memory slide 12

13 gestione della memoria durante l esecuzione la memoria (ram) del programma è divisa in due parti: stack e heap heap è l area di memoria in cui sono allocati nuovi blocchi di memoria (ad esempio, dalla funzione new) stack è l area di memoria in cui vengono allocati i record di attivazione delle funzioni programma identificatori globali stack heap new alloca memoria dall heap, delete libera la memoria dell heap slide 13

14 operazioni su puntatori/& l operatore &, applicato a una lhs-expression, restituisce il suo indirizzo di memoria (che può essere assegnato a un puntatore) esempio: int *p, n ; n = 5 ; p = &n ; p n = 5 ; p p = &n ; p n n 5 n 5 [è errore fare p = &5 o persino p = &(n*5) ] esempio: p struct lista *p, q q.val = 3 ; q.next = NULL ; p = &q ; q.val = 3 ; p q.next = NULL; p = & q ; p 3 slide 14 q q q 3

15 operazioni su puntatori/* (dereferenziazione) se si esegue int *nump ; newp = new int ; come si fa ad accedere alla cella puntata da newp (che è stata allocata dinamicamente)? serve un operazione che, preso un puntatore, restituisce l indirizzo di memoria per accedere all elemento puntato da esso il risultato di questa operazione deve essere una lhs-expression è l operazione di dereferenziazione * esempio: *p = 5 ; p newp = new int; p *p = 5; p 5 slide 15

16 operazioni su puntatori/esempi esempio (aliasing): int *nump, *numq, x ; x = 1 ; nump = &x ; *nump = 2 ; cout << *nump << x ; esempio (aliasing tra puntatori): numq = nump ; *numq = 1 ; cout << *nump << x ; esempio (differenza tra oggetti puntati e puntatori): numq = nump ; *numq = *nump ; slide 16 // cambia la locazione a cui // punta numq // cambia il contenuto della // locazione a cui punta numq

17 esercizi base su puntatori definire una variabile di tipo intero, incrementarla due volte attraverso due puntatori distinti e stampare il risultato allocare una variabile di tipo intero, incrementarla, stampare il risultato e deallocarla slide 17

18 puntatori passati come argomento di funzioni il parametro formale è un oggetto di tipo puntatore il parametro attuale è l indirizzo di una variabile esempio: funzione che prende in input dividendo e divisore, e restituisce quoziente e resto void division(int dvd, int dvs, int *q, int *r){ *q = dvd / dvs ; *r = dvd % dvs; } main(void){ int quot, rem; division(10, 3, &quot, &rem); cout << quot << rem ; } cosa stampa main? slide 18

19 puntatori passati come argomento di funzioni quot rem division(10, 3, &quot, &rem); quot rem dvd dvs q r 10 3 il passaggio dei parametri è per valore, ma vengono copiati i puntatori che consentono di modificare le variabili del chiamante *q = dvd/dvs; *r = dvd%dvs; quot rem dvd dvs q r quot rem slide 19

20 esempio/la funzione scambia siano a e b di tipo int void scambia(int x, int y){ int tmp ; tmp = x ; x = y ; y = tmp ; } // invocata con scambia(a,b) void scambia(int *x, int *y){ int tmp ; tmp = *x ; *x = *y ; *y = tmp ; } // invocata con scambia(&a,&b) void scambia(int& x, int& y){ int tmp ; tmp = x ; x = y ; y = tmp ; } // invocata con scambia(a,b) void scambia(int *x, int *y){ int *tmp ; tmp = x ; x = y ; y = tmp ; } // invocata con scambia(&a,&b) slide 20

21 tipi di dato astratto/le liste una lista è una sequenza di nodi che contengono dei valori (di un determinato tipo) e in cui ogni nodo, eccetto l ultimo, è collegato al nodo successivo mediante un puntatore head val a next b f dichiarazione di lista in C++ struct lista { } ; int val; lista *next; slide 21

22 tipi di dato astratto/le liste/operazioni dichiarazioni e inizializzazioni lista *p1, *p2, *p3 ; p1 = new lista ; (*p1).val = 1 ; p2 = new lista ; p1 p2 p3 1 2???? (*p2).val = 2 ; p3 = p2 ; collegamento tra nodi p1 1 (*p1).next = p2 ; p2 2?? p3 tre modi per accedere al campo val del secondo nodo (*p2).val (*p3).val (*((*p1).next)).val abbreviazione: in alternativa a scrivere (*p1).next si può scrivere p1->next slide 22

23 tipi di dato astratto/le liste/operazioni aggiunta di un nodo in coda p2->next = new lista ; (p2->next)->val = 3 ; p1 p2 p ?? ultimo elemento della lista: si memorizza nel campo next il valore NULL (p2->next)->next = NULL; p1 1 p2 2 p3 3 accesso agli elementi della lista: la testa è il primo elemento della lista la variabile p1 punta alla testa della lista una funzione che conosce l indirizzo contenuto in p1 ha accesso ad ogni elemento della lista slide 23

24 tipi di dato astratto/le liste/inserimento e rimoz. le liste (come tutte le strutture dinamiche) sono facilmente modificabili inserimento di un elemento in testa: p2 = new lista ; p2->val = 0 ; p2->next = p1 ; p1 = p2 ; p1 p2 p p1 0 inserimento di un elemento tra il primo e il secondo p2 = new lista ; p2->val = 4 ; p2->next = (p1->next)->next ; p1->next = p2 ; p2 p rimozione dell elemento di testa: p1 = p1->next ; rimozione del secondo elmento: p1->next slide 24 = (p1->next)->next ;

25 tipi di dato astratto/le liste/inserimento e rimoz. inserimento di un elemento in coda: while (p1->next!= NULL) // p1 punta a una lista non vuota p1 = p1->next ; p1->next = new lista ; p1 = p1->next ; p1->val = 10 ; p1->next = NULL ; // p1 non punta più all inizio della lista! domanda: perche` non si è scritto while (p1!= NULL) p1 = p1->next ; rimozione di un elemento dalla coda while (p1->next!= NULL) p1 = p1->next ; delete p1->next ; p1->next = NULL; // p1 punta a una lista non vuota // NON FUNZIONA! Perché? slide 25

26 esercizi sulle liste scrivere un programma che prende in input interi dall'utente finchè l'utente non inserisce 0, li inserisce in una lista e poi stampa la lista degli input stampa il valore più vicino alla media scrivere un programma che prende in input interi dall utente finchè l utente non inserisce 0, poi prende un altro intero n e rimuove dalla lista tutti gli interi multipli di n, quindi stampa la lista scrivere un programma che consente all'utente di lavorare su una lista di interi con le seguenti operazioni aggiungere un elemento in fondo vedere le informazioni dell'elemento corrente andare avanti di uno andare indietro di uno eliminare l'elemento corrente slide 26

27 tipi di dato astratto/le liste/stampa e ricerca stampa degli elementi memorizzati in una lista: void stampa_el(lista *p){ // versione ricorsiva if (p!= NULL) { cout << p->val << eol; stampa_el(p->next) ; } } // è tail recursive void stampa_el_it(lista *p){ while (p!= NULL) { cout << p->val ; p = p->next ; } } ricerca di un elemento nella lista // versione iterativa bool search_el(lista *p, const int e){ // versione ricorsiva if (p == NULL) return(false) ; else if (p->val == e) return(true) ; else return(search_el(p->next, e)) ; } // è tail recursive bool search_el_it(lista *p, const int e){ bool f = false ; while ((p!= NULL) && (!f)){ if (p->val == e) f = true ; else p = p->next ; } return(f) ; } slide 27 // versione iterativa

28 tipi di dato astratto/le liste/revert problema: scrivere una funzione una funzione iterativa che prende in input una sequenza di caratteri che termina con il. e la stampa invertita. void revert(){ } char c ; lista *p, *q; p = NULL ; cin >> c ; while (c!= '.') { q = new lista ; q->val = c ; q->next = p ; p = q ; cin >> c ; } cout << "\n la sequenza invertita e`: " ; while (p!= NULL){ cout << p->val ; p = p->next ;} slide 28

29 strutture dati dinamiche/esercizi 1. implementare il tipo di dato pila con le operazioni di (a) creazione della pila vuota, (b) push = inserimento di un elemento nella pila, (c) pop = eliminazione di un elemento dalla pila; (d) top = valore dell elemento in testa alla pila 2. implementare il tipo di dato coda con le operazioni di (a) creazione della coda vuota, (b) enqueue = inserimento di un elemento nella coda, (c) dequeue = eliminazione di un elemento dalla coda; (d) top_el = valore dell elemento in testa alla coda 3. implementare il tipo di dato insieme con le operazioni di (a) creazione dell insieme vuoto, (b) is_in = appartenenza di un elemento all insieme (c) union = unione di due insiemi; (d) intersection = intersezione di due insiemi slide 29

30 liste/varianti alcune delle operazioni precedenti sono scomode da implementare su liste come quelle viste fin'ora possiamo modificare leggermente la struttura dati lista per risolvere problemi quali accesso all'ultimo elemento nelle liste semplici è necessario scorrere tutta la lista è sufficiente tenere in una variabile statica il puntatore all'ultimo elemento della lista spostamento all'indietro nelle liste semplici è necessario scorrere tutta la lista cercando l'elemento che punta a quello corrente è sufficiente tenere in ogni elemento un puntatore al precedente nel primo elemento questo puntatore avrà valore NULL queste liste si chiamano liste bidirezionali o doppiamente linkate slide 30

31 lista/varianti/quando usarle vantaggio: semplificano alcuni tipi di operazioni ricerca di alcuni elementi svantaggio: complicano altre operazioni le informazioni addizionali devono essere aggiornate si complicano inserimenti e cancellazioni la ricerca del miglior compromesso si cerca di rendere più efficienti le operazioni più frequenti esempio: se ho molti inserimenti e cancellazioni cercherò di usare la struttura più semplice slide 31

32 liste bidirezionali: esercizi prendere in input caratteri e creare una lista bidirezionale che li contenga. Stampare i caratteri inseriti in ordine inverso e in ordine normale scrivere un programma che consente all'utente di lavorare su una lista bidirezionale di interi con le seguenti operazioni aggiungere un elemento in fondo vedere le informazioni dell'elemento corrente andare avanti di uno andare indietro di uno eliminare l'elemento corrente slide 32

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

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

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

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

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

LE FUNZIONI RICORSIVE. Cosimo Laneve

LE FUNZIONI RICORSIVE. Cosimo Laneve LE FUNZIONI RICORSIVE Cosimo Laneve 1 argomenti 1. ricorsione 2. versione ricorsiva e iterativa di programmi 3. commenti sulla complessità computazionale (efficienza) 4. esempi/esercizi 5. progettazione

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

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

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

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

Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Operazioni sulle liste Definiamo una serie di procedure e funzioni per operare sulle liste. Usiamo liste di interi per semplicità, ma tutte le operazioni sono realizzabili in modo del tutto analogo su

Dettagli

Fondamenti di Informatica T. Linguaggio C: i puntatori

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

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

Parte 4. Liste. P. Picasso Guernica, AA. 2015/16

Parte 4. Liste. P. Picasso Guernica, AA. 2015/16 Parte 4 Liste - AA. 2015/16 P. Picasso Guernica, 1937 4.1 4.2 Strutture dati complesse Per la risoluzione di alcuni problemi vi è la necessità di utilizzare strutture dati dinamiche e complesse Si consideri

Dettagli

Allocazione Dinamica della Memoria

Allocazione Dinamica della Memoria Allocazione Dinamica della Memoria Lorenzo Dusty Costa Federico Paolo Kircheis 30 Novembre 2011 1 Introduzione alle memoria dinamica Uno degli inconvenienti che spesso si incontrano nell'uso degli array

Dettagli

La ricorsione. Ver Claudio Fornaro - Corso di programmazione in C

La ricorsione. Ver Claudio Fornaro - Corso di programmazione in C La ricorsione Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C 2 Divide et impera Metodo di approccio ai problemi che consiste nel dividere il problema dato in problemi più semplici I risultati

Dettagli

Rappresentazione di liste mediante puntatori in linguaggio C

Rappresentazione di liste mediante puntatori in linguaggio C Rappresentazione di liste mediante puntatori in linguaggio C Specifica del tipo degli elementi typedef... TipoElemLista; struct StructLista TipoElemLista key; struct StructLista *next; ; typedef struct

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi: Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli

Dettagli

Operatore di indirizzo

Operatore di indirizzo Operatore di indirizzo L operatore unario di indirizzo & restituisce l indirizzo della locazione di memoria dell operando Il valore restituito non va usato come l- value (in quanto l indirizzo di memoria

Dettagli

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

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

Dettagli

Implementazione di Liste puntate

Implementazione di Liste puntate Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Implementazione di Liste puntate 2 1 Indice Liste puntate semplici: Gli elementi sono logicamente

Dettagli

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso INDICI PER FILE Strutture ausiliarie di accesso 2 Accesso secondario Diamo per scontato che esista già un file con una certa organizzazione primaria con dati non ordinati, ordinati o organizzati secondo

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Tipi di memoria dati Nella macchina astratta C esistono tre tipi di memoria per allocare

Dettagli

Puntatori. Fondamenti di Programmazione

Puntatori. Fondamenti di Programmazione Puntatori Fondamenti di Programmazione Funzioni utili stdio.h c = getchar(); restituisce un carattere letto da tastiera. Equivale a: scanf( %c, &c); putchar(c); scrive un carattere sullo schermo. Equivale

Dettagli

Gestione della Memoria

Gestione della Memoria Gestione della Memoria Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 27 apr, 2016 Sommario 1 Tecniche di gestione Progetto della gestione

Dettagli

Linguaggio C: puntatori

Linguaggio C: puntatori Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica A - GES Prof. Plebani A.A. 2006/2007 Linguaggio C: puntatori La presente dispensa e da utilizzarsi ai soli fini didattici previa

Dettagli

Programmazione (imperativa)

Programmazione (imperativa) Programmazione (imperativa) Corso di Laurea in Informatica Roberto Cordone DI - Università degli Studi di Milano Lezioni: Lunedì 12.00-13.00 e 14.00-16.00 Mercoledì 14.00-17.00 Laboratorio: Giovedì 12.00-13.00

Dettagli

Il C nel C++: Funzioni

Il C nel C++: Funzioni Il C nel C++: Funzioni Funzioni (1) il concetto -> spezzare il programma in parti (procedure) una funzione è un parte di programma dotata di un nome che può essere richiamata in altri punti del programma

Dettagli

Puntatori in C Lucidi della Pof.ssa Pazienza

Puntatori in C Lucidi della Pof.ssa Pazienza Puntatori in C Lucidi della Pof.ssa Pazienza http://www.uniroma2.it/didattica/foi2/ Puntatori L operatore di indirizzo & Indirizzi, puntatori Aritmetica dei puntatori L operatore di dereferenziazione *

Dettagli

Il linguaggio C. Notate che...

Il linguaggio C. Notate che... Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione

Dettagli

L'allocazione dinamica della memoria

L'allocazione dinamica della memoria L'allocazione dinamica della memoria Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino I puntatori Le variabili di tipo puntatore permettono di accedere alla memoria

Dettagli

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

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili

Dettagli

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica, Elettrica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011

Dettagli

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali

Dettagli

Introduzione alla Programmazione in Java attraverso un esempio commentato

Introduzione alla Programmazione in Java attraverso un esempio commentato Corso di Studi in Informatica Programmazione 1 corso B prof. Elio Giovannetti Introduzione alla Programmazione in Java attraverso un esempio commentato Programmazione 1 B - a.a. 2002-03 53 Modello di memoria

Dettagli

Passaggio parametri puntatore

Passaggio parametri puntatore Passaggio parametri puntatore Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it

Dettagli

Puntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Puntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm

Dettagli

Cesare Rota. Programmare con C++

Cesare Rota. Programmare con C++ Cesare Rota Programmare con C++ Questo fascicolo deve essere allegato al volume Programmare con C++ di Cesare Rota ISBN 978-88-203-4248-7, ne è parte integrante e non può essere venduto separatamente EDITORE

Dettagli

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari 7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa

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

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014 Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi

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

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per

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

Parte 2. Ricorsione. [M.C.Escher Drawing hands, 1948] - AA. 2012/13 2.1

Parte 2. Ricorsione. [M.C.Escher Drawing hands, 1948] - AA. 2012/13 2.1 Parte 2 Ricorsione - AA. 2012/13 [M.C.Escher Drawing hands, 1948] 2.1 Funzioni ricorsive Una funzione si dice ricorsiva se richiama se stessa, direttamente o indirettamente La ricorsione si dice diretta

Dettagli

Prof.Ing.S.Cavalieri Puntatori e Heap in Linguaggio C. Puntatori e Heap

Prof.Ing.S.Cavalieri Puntatori e Heap in Linguaggio C. Puntatori e Heap Puntatori e Heap 1.Cosa Sono i Puntatori? I puntatori sono fondamentalmente delle variabili, come quelle intere, reali e carattere. Tuttavia, l unica differenza consiste nel fatto che essi non contengono

Dettagli

In questa lezione Strutture dati elementari: Pila Coda

In questa lezione Strutture dati elementari: Pila Coda In questa lezione Strutture dati elementari: Pila Coda 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni che li modificano (insiemi dinamici). Le

Dettagli

Architettura dei calcolatori e sistemi operativi. Sottoprogrammi e MIPS. Espressioni algebriche. Capitolo 2 P&H

Architettura dei calcolatori e sistemi operativi. Sottoprogrammi e MIPS. Espressioni algebriche. Capitolo 2 P&H Architettura dei calcolatori e sistemi operativi Sottoprogrammi e MIPS Espressioni algebriche Capitolo 2 P&H Sottoprogrammi Modello di chiamata Area di attivazione Calcolare un espressione algebrica 2

Dettagli

Puntatori. Unità 6. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Puntatori. Unità 6. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto

Dettagli

Inserimento di un elemento in coda. quale va collegato quello nuovo. ultimo. *lista 8 3. aux. ultimo. *lista 8 3. aux

Inserimento di un elemento in coda. quale va collegato quello nuovo. ultimo. *lista 8 3. aux. ultimo. *lista 8 3. aux Inserimento di un elemento in coda Se la è vuota coincide con l inserimento in testa = è necessario il passaggio per indirizzo! Se la non è vuota, bisogna scandirla fino in fondo = dobbiamo usare un puntatore

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

Contenitori: Pile e Code

Contenitori: Pile e Code Contenitori: Pile e Code D O T T. I N G. L E O N A R D O R I G U T I N I D I PA R T I M E N T O I N G E G N E R I A D E L L I N F O R M A Z I O N E U N I V E R S I T À D I S I E N A V I A R O M A 5 6 5

Dettagli

Elementi di C++ di base

Elementi di C++ di base Elementi di C++ di base Corso di Programmazione 3 - Ingegneria dell Informazione e dell Organizzazione 10 ottobre, 2001 Gino Perna Esempi di semplici programmi in C++ Il programma più semplice consiste

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

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]

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

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1 Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1 1) Il bus in un computer trasporta a) solo dati b) solo istruzioni c) sia dati sia istruzioni 2) In una sequenza

Dettagli

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Programmazione Java Struttura di una classe, Costruttore, Riferimento this Programmazione Java Struttura di una classe, Costruttore, Riferimento this romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento

Dettagli

Corso di Fondamenti di Informatica. La ricorsione

Corso di Fondamenti di Informatica. La ricorsione Corso di Fondamenti di Informatica La ricorsione La ricorsione Si dice che un oggetto (una struttura dati, una funzione matematica, un concetto ) è ricorsivo se è possibile darne una definizione in termini

Dettagli

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

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

Dettagli

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

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

Alberi e alberi binari I Un albero è un caso particolare di grafo

Alberi e alberi binari I Un albero è un caso particolare di grafo Alberi e alberi binari Un albero è un caso particolare di grafo È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine ed entra

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

Esempio di Prova Scritta

Esempio di Prova Scritta Esempio di Prova Scritta La prova scritta è composta da alcuni esercizi per un totale di 10 punti (durata:circa 1h15 ). Le tipologie di esercizi possibili comprendono:! sintesi di una funzione ricorsiva/iterativa,

Dettagli

Mini-dispensa sui puntatori in C

Mini-dispensa sui puntatori in C Mini-dispensa sui puntatori in C P. Zavarise Versione 1 ottobre 013 1 Valore e indirizzo di una variabile Ripassiamo il significato di dal punto di vista del programmatore. int a=; Viene creata una variabile

Dettagli

Linguaggio C - sezione dichiarativa: costanti e variabili

Linguaggio C - sezione dichiarativa: costanti e variabili Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente

Dettagli

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa. 3 ITI - a.s. 2007-2008 Compiti di Informatica ESTATE 2008 ARRAY E STRINGHE Scrivere una funzione che carica da tastiera un array di n elementi e lo stampa invertendo il primo elemento con l'ultimo, il

Dettagli

Laboratorio di programmazione

Laboratorio di programmazione Laboratorio di programmazione Lezione VIII Tatiana Zolo tatiana.zolo@libero.it 1 PROGRAMMAZIONE A OGGETTI Quando si programma a oggetti si scompone il problema in sottogruppi di parti collegate che tengono

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

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

Dettagli

L Allocazione Dinamica della Memoria

L Allocazione Dinamica della Memoria L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento

Dettagli

Inside C : Puntatori. Indirizzo: operatore & p = &v; x = a; Puntatori Referenziazione e Dereferenziazione Arrays

Inside C : Puntatori. Indirizzo: operatore & p = &v; x = a; Puntatori Referenziazione e Dereferenziazione Arrays Pointers: Puntatori (I) Le variabili finora incontrate sono caratterizzate da un nome (o identificativo), un tipo, ed occupano un area di memoria di dimensione dipendente dal tipo. Per accedere ad una

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

Calcolatori Elettronici Lezione A4 Programmazione a Moduli

Calcolatori Elettronici Lezione A4 Programmazione a Moduli Calcolatori Elettronici Lezione A4 Programmazione a Moduli Ing. Gestionale e delle Telecomunicazioni A.A. 2007/08 Gabriele Cecchetti Sommario Programmazione a moduli Programmi con linguaggi misti Tempo

Dettagli

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C... Sommario PREFAZIONE...XI Aggiornamenti e novità... xi Lo scopo di questo libro... xii Diagramma delle dipendenze... xii La metodologia di insegnamento... xiii Panoramica sul libro... xvi Ringraziamenti...

Dettagli

Le risorse. Alcune definizioni

Le risorse. Alcune definizioni Le risorse Dicesi risorsa un qualunque oggetto, fisico o logico, di cui un processo necessita per portare a termine la sua evoluzione. Poiché un processo evolve eseguendo istruzioni (procedure), una risorsa

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Cosa sono i puntatori? I puntatori sono fondamentalmente delle variabili che non contengono un valore numerico o alfanumerico, ma un puntatore (ossia un indirizzo) alla locazione di memoria dove è memorizzato

Dettagli

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A. Cicli e array Laboratorio di Programmazione I 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 Lez. 8 - Introduzione all ambiente

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

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

Esercizio 1 Liste: calcolo perimetro di un poligono

Esercizio 1 Liste: calcolo perimetro di un poligono Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 12 Esercitazione: 28 gennaio 2005 Esercizi su liste, ricorsione, file. Scaletta Esercizio 1 Liste: calcolo perimetro di

Dettagli

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

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: 1 Tipi di dati 1 Tipi di dati Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: Tutto è un oggetto Tutto eredita implicitamente

Dettagli

Grafi: visita generica

Grafi: visita generica .. Grafi: visita generica Una presentazione alternativa (con ulteriori dettagli) Algoritmi di visita Scopo: visitare tutti i vertici di un grafo (si osservi che per poter visitare un vertice occorre prima

Dettagli

Heap e code di priorità

Heap e code di priorità Heap e code di priorità Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010

Dettagli

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco. Alberi Alberi Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Frodo Dudo Daisy Alberi Gli alberi sono una generalizzazione

Dettagli

3. Terza esercitazione autoguidata: progetto gestione voli

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

Dettagli

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

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length); Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di

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

Esercizi Programmazione I

Esercizi Programmazione I Esercizi Programmazione I 9 Novembre 201 Esercizio 1 Valutare e dare il tipo delle seguenti espressioni condizionali. 1 char a= a, b= b ; // a ha v a l o r e decimale 97 2 i n t i= 1, j= 2 ; 3 double x=

Dettagli

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy

Dettagli

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012 Funzioni e passaggio parametri Alessandra Giordani agiordani@disi.unitn.it Mercoledì 16 maggio 2012 http://disi.unitn.it/~agiordani/ Cosa vedremo oggi Le funzioni Il passaggio dei parametri Le dichiarazioni

Dettagli

Introduzione agli Algoritmi ed alle Strutture Dati Anno Accademico 2015/2016 Appello 23/6/2016

Introduzione agli Algoritmi ed alle Strutture Dati Anno Accademico 2015/2016 Appello 23/6/2016 1. Indicare quali delle seguenti affermazioni sono vere e quali sono false. a. n 3 = Θ (n 3log n ) b. n! = Ω(n n ) c. log n = Θ (log( n 2 )) d. n 3 =Ω(n) e. 9 log 3 n = Θ (n) 2. Si dimostri in modo formale

Dettagli

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

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)

Dettagli

Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList Esempio su strutture dati dinamiche: ArrayList 1 ArrayList! Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione

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

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

Strutture Dati. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Strutture Dati 1 / 16 Strutture Dati Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Strutture Dati 1 / 16 Introduzione Fino ad ora nei nostri programmi abbiamo usato Variabili;

Dettagli

I vettori in C. Vettori. Definizione di vettori in C. int dato[10] ; int. Numero di elementi. Tipo di dato base. Nome del vettore.

I vettori in C. Vettori. Definizione di vettori in C. int dato[10] ; int. Numero di elementi. Tipo di dato base. Nome del vettore. I vettori in C Sintassi della definizione Definizione di costanti Operazioni di accesso Vettori Definizione di vettori in C I vettori in C Definizione di vettori in C Definizione di vettori in C Stesse

Dettagli

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

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

Dettagli

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