Tipi di dato e strutture dati

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Tipi di dato e strutture dati"

Transcript

1 Tipi di dato e strutture dati 1. Tipi di dato Pressoché tutti i linguaggi di programmazione tipati consentono all utente di definire nuovi tipi. Il C++ fornisce quattro modi per farlo: typedef, enum, struct, class. D altra parte i tipi predefiniti non sono soltanto degli identificatori riferiti a costanti o variabili i cui valori appartengano ad un determinato insieme (in C++ true e false se il tipo è bool, gli interi se il tipo è int, ecc.), ma anche una certa collezione di operazioni e di predicati (funzioni a valori booleani). In generale un tipo di dato è un modello matematico, cioè una struttura algebrica, consistente di un insieme di valori e di una collezione di operazioni su tali valori, che nel caso dei tipi definiti dall utente devono essere programmate. Una rappresentazione diagrammatica (incompleta) dei tipi int e bool è la seguente: + 0, 1, 2,, n, Interi not true, false Booleani Se si parla di modello matematico è perché si intende fare astrazione dalla concreta rappresentazione dei valori e quindi anche dagli algoritmi che realizzano le varie operazioni su di essi. Una descrizione astratta di una collezione di tipi di dato (ciascuno dei quali viene detto Abstract Data Type, o ADT) si suddivide in una specifica sintattica, in cui sono elencati tipi ed operatori, specificandone tipi e numero dei parametri ed il tipo dei valori, ed in una specifica semantica, con cui si descrive assiomaticamente o con pre e post condizioni, il significato degli operatori. Esempio Supponiamo di voler definire il tipo dei numeri razionali. La parte sintattica dell ADT potrebbe avere la forma: NewRatio: void Ratio Assign: Int, Int Ratio Sum: Ratio, Ratio Ratio Invert: Ratio Ratio LessOrEqual: Ratio, Ratio Bool dove ad esempio Assign: Int, Int Ratio indica che la funzione ha due parametri interi e ritorna un razionale, mentre NewRatio: void Ratio indica che NewRatio non ha alcun parametro, e ritorna un razionale.

2 Una possibile specifica semantica è quella equazionale, costituita cioè da equazioni della forma: LessOrEqual(Assign(a, b), Assign(c, d)) = (ad bc) Più maneggevole è una specifica basata su pre e post condizioni, come ad esempio: Assign(a, b) = r Pre: b > 0 Post: ritorna r = a/b Data una collezione di ADT, è possibile descrivere algoritmi che utilizzino questi tipi di dato. Il vantaggio di tale scrittura è che non dipende dalla realizzazione concreta dei tipi di dato utilizzati, che può essere quella di una libreria costruita da altri, ovvero essere ridefiniti (ad esempio per ragioni di maggior efficienza) senza dover riscrivere il codice degli algoritmi che li utilizzano. 2. Strutture dati Una volta fissata la specifica di un tipo occorre procedere alla sua realizzazione attraverso la definizione di strutture dati e di opportuni algoritmi per la loro manipolazione. In generale le strutture dati sono metodi di rappresentazione in memoria dei valori di un tipo. Poiché le rappresentazioni, in ultima analisi, non sono che sequenze di bit, è fondamentale definire delle regole per interpretarle, e quindi accedervi in lettura e per modificarle. Anche una semplice variabile di tipo intero corrisponde ad una struttura dati: di solito una parola macchina di due o quattro byte organizzati in modo tale che la metà dei valori rappresentabili sia interpretata come valori positivi e l altra metà come negativi (complementazione a 2). Tuttavia si parla di strutture dati, o anche di strutture informative, per riferirsi alla rappresentazione di collezioni di dati anziché a singoli valori di tipo di base. Gli esempi più elementari sono vettori e record. Un vettore è una n-pla di valori di uno stesso tipo T. Supposto che la rappresentazione di un valore di tipo T occupi k byte, un vettore di dimensione n si rappresenta con una sequenza di n k byte a partire da un dato indirizzo b, detto base del vettore. Allora l accesso al vettore avviene sfruttando il sistema di indirizzamento della memoria centrale: per trovare v[i], ossia l i-esima componente del vettore v basta infatti calcolare l indirizzo b + i k, ciò che spiega come mai in C++ il primo elemento di un vettore sia acceduto con v[0]. base = indirizzo del primo elemento V[i] = valore all indirizzo base + i dim(valore) In C++, come già avviene in C, un vettore (array) non è che una costante di tipo puntatore, vale a dire una variabile il cui valore (inalterabile) è l indirizzo di base del vettore: possiamo cioè dire che il tipo di v in int v[10]; V a f k z q d i w sia int*, ed infatti se dichiariamo int* p, l assegnazione p = v è lecita e sensata. L informazione int* è dunque utilizzata dal sistema per il calcolo della dimensione del singolo elemento, onde accedere correttamente ai valori memorizzati nel vettore. Tutto ciò è ancor più

3 trasparente quando si procede alla allocazione dinamica di un vettore. La dichiarazione ed inizializzazione: int* w = new int[10]; causa infatti un allocazione consecutiva di 10 interi, e l assegnazione a w dell indirizzo di base coincidente con quello del primo elemento. In C tutto ciò corrisponde all istruzione: int* w = (int*) malloc (sizeof(int) * 10); dove la funzione di libreria sizeof calcola la dimensione in byte di un valore in funzione del tipo; malloc alloca il numero di byte richiesto e ritorna un puntatore generico al primo byte di tale blocco; (int*) è un casting, o ridefinizione forzata del tipo, necessaria perché quest ultima informazione va perduta in quanto malloc prende in ingesso un semplice intero. Con new, che invece dipende da un tipo o comunque da un espressione di tipo, il casting non è più necessario. Le differenze tra le dichiarazioni di v e w sono che mentre v è una costante, w è una variabile e dunque può essere assegnata ad altro valore; inoltre la dimensione di v deve essere una costante mentre nel caso di w la costante 10 può essere rimpiazzata con una variabile il cui valore dipenderà dai dati in ingresso e dal momento in cui l istruzione viene eseguita. Naturalmente, come per tutte le allocazioni in memoria dinamica, la deallocazione del vettore cui punta w non è mai automatica, ma deve essere programmata mediante l istruzione: delete [] w; Che le componenti di un vettore debbano avere tutte lo stesso tipo costituisce un limite che si può superare utilizzando i record. Un record è infatti una k-pla di valori (ma con k di solito piuttosto piccolo) v, K 1,v di tipo k T 1, K,Tk rispettivamente. Questa eterogeneità di tipo non rende possibile l accesso basato su indici, per cui si ricorre a nomi o etichette di campo. La sintassi C/C++ per i record è: struct <nome record> { <tipo 1 > <etichetta campo 1 >; <tipo k > <etichetta campo k >; ; Il nome record è in realtà un tipo che viene così definito; ma il C++, come già il C, richiede che sia sempre preceduto dalla parola riservata struct: per evitare questo inconveniente basta premettere typedef e far seguire la definizione della struttura dal nome del tipo: typedef struct <nome record> { <tipo 1 > <etichetta campo 1 >; <tipo k > <etichetta campo k >; <nome tipo>; L accesso ai campi di un record sia in lettura che in scrittura avviene utilizzando un selettore rappresentato dal punto seguito dall etichetta del campo (ed eventualmente da altri operatori d accesso).

4 Esempi typedef struct ratio { int num; // numeratore int den; // denominatore > 0 Ratio; In questo caso, essendo i due campi dello stesso tipo, avremmo potuto scrivere: int num, den; Nel caso che segue, invece, i tipi dei campi sono differenti: typedef struct polynomial { int degree; // grado 0 double* coeff; // vettore dei coefficienti Polynomial; Si osservi come il tipo del vettore sia un puntatore (a double, se si intende avere coefficienti razionali rappresentati in virgola mobile ed in doppia precisione) e non un array, poiché si intende che la dimensione del vettore che ospita i coefficienti non sia fissata, ma dipenda dal grado, essendo pari a degree + 1. Ciò comporta che, per usare una variabile di tipo Polynomial, occorrerà inizializzarne i campi allocando il vettore dei coefficienti; una soluzione consiste nel creare una funzione con questo compito, ad esempio: Polynomial NewPolynomial (int deg) // Pre : deg 0 // Post: ritorna il polinomio x deg { Polynomial p; p.degree = deg; p.coeff = new double[deg + 1]; for (int i = 0; i < deg; i++) p.coeff[i] = 0; p.coeff[deg] = 1; return p; Quindi si potrà procedere ad una definizione ed inizializzazione come segue: Polynomial p = NewPolynomial(n); Sarà inoltre opportuno definire una funzione per la corretta deallocazione di un polinomio: infatti se la variabile p è una variabile locale (automatica), la sua rimozione dalla pila di sistema non comporta la deallocazione del vettore dei coefficienti; conviene dunque fornire una funzione il cui unico scopo sia quello di liberare la memoria da allocazioni non più utilizzate: void DeletePolynomial (Polynomial p) { delete [] p.coeff;

5 Tra la specifica di un tipo e la sua realizzazione mediante opportune strutture dati e funzioni deve evidentemente sussistere una relazione di adeguatezza o correttezza, che si può esprimere con il concetto algebrico di omomorfismo: se indichiamo con E la mappa che associa ai valori astratti le rispettive rappresentazioni concrete, allora per ogni funzione astratta f si chiede che: E( f ( v1, K, vn )) = E( f )( E( v1 ), K, E( vn )) dove E ( f ) indica la funzione che realizza (implementa) f. Per garantire la correttezza occorre mantenere vere certe proprietà della rappresentazione per tutta la durata della sua vita nella memoria dell elaboratore: ad esempio r.den > 0 nel caso dei razionali, oppure che la dimensione del vettore dei coefficienti sia pari al grado + 1 nel caso dei polinomi. L insieme delle caratteristiche di una struttura dati che si deve mantenere dopo successive modifiche prende il nome di invariante di struttura. 3. Strutture di puntatori Vettori e record non sono sufficienti per realizzare strutture dati complesse, se non attraverso complicate e rigide codifiche. Il C++ fa invece largo uso dei puntatori per la loro realizzazione, ciò di cui abbiamo già visto un esempio nel caso dei polinomi. Consideriamo ora il problema della rappresentazione di collezioni, cioè di insiemi o multinsiemi di valori. Definiamo innanzitutto un ADT degli insiemi (cosiddetti dinamici, poiché un insieme non è determinato dai suoi valori, ma dall identità di un contenitore): Tipi: Element, Set Operatori NewSet: void Set IsEmpty: Set Bool In: Element, Set Bool Insert: Element, Set Set Delete: Element, Set Set La semantica è definita: NewSet() = IsEmpty(s) = b In(e, s) = b Insert (e, s) = s Delete(e, s) = s Post: b = true sse s = Post: b = true sse e s Post: s = s {e Post: s = s {e Una soluzione ovvia consiste nell utilizzare un vettore parzialmente riempito: v dim proxlibero array

6 La cui definizione in C++ prende la forma: struct VettRec { int dim, proxlibero; Element *array; ; typedef VettRec* Set; L idea è che il vettore si considera riempito nell intervallo 0..proxlibero 1, onde un eventuale nuovo inserimento utilizzerà array[proxlibero] e comporterà l incremento di proxlibero. Se i valori di tipo Element non sono ordinati o comunque il vettore non è mantenuto ordinato, allora i tempi di accesso in ricerca sono lineari nel caso peggiore: bool In (Element e, Set s) { int i while (i < s.proxlibero && s.array[i]!= e) i++; return i < s.proxlibero; Se invece i valori sono ordinati allora la ricerca è O(log n): bool In (Element e, Set s) { int i = 0, j = s.proxlibero 1; bool trovato = false while (i <= j &&!trovato) { int m = (i + j)/2; if (v[m] == e) trovato = true; else if (v[m] < e) i = m + 1; else j = m 1; return trovato; Tuttavia i tempi di inserimento e cancellazione in un vettore ordinato restano lineari; in particolare è necessario scalare gli elementi che seguono il posto in cui e verrà inserito o eliminato: void Insert (Element e, Set& s) // Pre: s.proxlibero < s.dim oppure e s { int i, j; for (i = 0; i < s.proxlibero && v[i] < e; i++); if (i == s.proxlbero v[i]!= e) { for (j = s.proxlibero; j > i; j--) v[j] = v[j 1]; v[i] = e; s.proxlibero++; // altrimenti v[i] == e: nessun inserimento Pur senza migliorare rispetto a questi problemi, una struttura di puntatori detta lista consente quanto meno di evitare di scalare gli elementi nel caso di inserimento ordinato, e soprattutto di evitare la

7 restrizione espressa nella precondizione, vale a dire il limite sulla dimensione del vettore (e quindi sulla cardinalità dell insieme). Essenzialmente una lista è una catena di record, ciascuno formato da due campi, uno per l elemento, e l altro per un puntatore al record successivo: l La sua definizione pone tuttavia un problema: nel definire il tipo della lista occorre usare la stessa nozione di lista: infatti una lista realizzata attraverso record si può pensare come una coppia <elemento, lista degli elementi successivi>: info next Non è tuttavia possibile definire un record che contenga un campo il cui valore sia un record dello stesso tipo, perché la dimensione di un valore di questo genere sarebbe infinita. Il problema è invece risolto se il campo che corrisponde alla lista degli elementi successivi è un puntatore, la cui dimensione è addirittura costante (e piuttosto piccola), visto che dipende dall architettura della macchina. In definitiva la definizione in C++ risulta: struct Nodo { Element info; Lista next; ; typedef Nodo* Lista; L ultimo elemento della lista sarà un record il cui campo next non punta ad alcun altro elemento: si utilizza allora una costante il cui valore sia distinto da qualunque indirizzo di memoria: in C/C++ NULL. Utilizzeremo questa stessa costante per indicare la lista vuota. L operazione fondamentale sulle liste è l inserimento in testa, ossia come primo elemento. La funzione Cons effettua l allocazione del nuovo elemento, lo aggiunge davanti alla lista L e ritorna un puntatore alla nuova lista così ottenuta: Lista Cons (Element e, Lista L) { Lista nl = new Nodo; nl->info = e; nl->next = L; return nl; Si osservi la notazione nl->info il cui significato è (*nl).info. Questa funzione ha due inverse, che sono in sostanza le due proiezioni: Element Head (Lista L) // Pre: L non è vuota

8 { return L->info; Lista& Tail (Lista L) // Pre: L non è vuota { return L->next; La funzione Tail ritorna un riferimento perché è utile poterla utilizzare come lato sinistro in un assegnazione. La funzione Cons è utilizzata per gli inserimenti in qualunque posizione, come mostra la seguente funzione: void Inserimento (Element e, int i, Lista& L) // Pre: 1 i lunghezza(l) + 1 // Post: e è inserito in L come i-esimo el. { if (i == 1) L = Cons(e, L); else // 1 < i lunghezza(l) + 1 { int j = 1; Lista p = L; while (j < i-1 && p!= NULL) // inv. p punta al j-esimo el. di L { j++; p = Tail(p); if (p!= NULL) // allora j == i-1, Tail(p) = Cons(e, Tail(p)); La stessa funzione si può definire in modo ricorsivo, ottenendo un testo più compatto e di pari efficienza, se si prescinde dall uso della pila di sistema: Lista InsRic (Element e, int i, Lista L) { if (i == 1) return Cons(e, L); else { Tail(L) = InsRic (e, i-1, Tail(L)); return L; Trovare il predecessore di un elemento in una lista comporta una scansione della parte della lista che lo precede. Una realizzazione più efficace utilizza anche un puntatore al predecessore: L In questa realizzazione, detta lista doppia circolare, non solo è fatta di record con puntatori al successivo ed al predecessore, ma ha un elemento fittizio cui L punta detto sentinella, il cui ruolo è sia quello di marcare l inizio e la fine della lista, sia di rendere più semplici le operazioni di inserimento e cancellazione. Ad esempio per inserire un elemento cui punta q dopo quello cui punta p le operazioni da compiere sono:

9 temp = p->next; p->next = q; q->pred = p; temp->pred = q; q->next = temp; Allora, se l inserimento avviene in testa, anziché in un diverso punto della lista, basta che p punti alla sentinella, e non occorre trattare questo caso a parte, come avviene in Inserimento visto sopra.

I numeri razionali. Specifica: la sintassi. Specifica: la semantica

I numeri razionali. Specifica: la sintassi. Specifica: la semantica Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi Che cos è un tipo di dato? Tutti i linguaggi di programmazione tipati forniscono tipi ed operatori predefiniti

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

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

Specifica: la sintassi. Specifica: la semantica. Specifica: la semantica

Specifica: la sintassi. Specifica: la semantica. Specifica: la semantica Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi Che cos è un tipo di dato? Tutti i linguaggi di programmazione tipati forniscono tipi ed operatori predefiniti

Dettagli

Le liste. ADT e strutture dati per la rappresentazione di sequenze. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 5

Le liste. ADT e strutture dati per la rappresentazione di sequenze. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 5 Le liste ADT e strutture dati per la rappresentazione di sequenze L ADT delle liste Una lista di valori di tipo A è una sequenza finita: a1, a2, L, an dove ai A, per ogni i valore lunghezza posizione L

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

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

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

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

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

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

Pile e code. ADT e strutture dati per la rappresentazione di sequenze ad accesso LIFO e FIFO

Pile e code. ADT e strutture dati per la rappresentazione di sequenze ad accesso LIFO e FIFO Pile e code ADT e strutture dati per la rappresentazione di sequenze ad accesso LIFO e FIFO Le Pile Una pila è una struttura dati lineare, alla quale gli elementi possono essere aggiunti o sottratti da

Dettagli

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2) ADT LISTA Pochi Linguaggi forniscono tipo lista fra predefiniti (LISP, Prolog); per gli altri, ADT lista si costruisce a partire da altre strutture dati (in C tipicamente vettori o puntatori) OPERAZIONI

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

Tipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Tipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A. Array di Tipi di dato utente Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2016/2017 Array di Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7 Lez. 8 - Introduzione

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

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

Trasformare array paralleli in array di record

Trasformare array paralleli in array di record Trasformare array paralleli in array di record Un array è una struttura di dati omogenea: gli elementi dell array sono tutti dello stesso tipo (che è il tipo dell array). A volte è necessario gestire informazioni

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

Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java

Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java 1 Specifica ed Implementazione di Tipi di Dato Astratti in Java cos è un tipo di dato astratto specifica di tipi di dati astratti un tipo

Dettagli

Trasformare array paralleli in array di record

Trasformare array paralleli in array di record Trasformare array paralleli in array di record Un array è una struttura di dati omogenea: gli elementi dell array sono tutti dello stesso tipo (che è il tipo dell array). A volte è necessario gestire informazioni

Dettagli

L'Allocazione Dinamica della Memoria nel linguaggio C

L'Allocazione Dinamica della Memoria nel linguaggio C L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria

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

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

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

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

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

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 21 Strutture dinamiche Gli array ci permettono di memorizzare un insieme di dati dello stesso tipo Deve essere noto staticamente il

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

Linked Lists. Liste linkate (1) liste linkate ( stack, queues ), trees. Liste linkate come strutture

Linked Lists. Liste linkate (1) liste linkate ( stack, queues ), trees. Liste linkate come strutture Linked Lists Liste linkate () La combinazione di class/struct e puntatori porta alla creazioni di interessanti Abstract Data Type liste linkate ( stack, queues ), trees Liste linkate come strutture struct

Dettagli

Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari.

Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari. Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari. Algoritmi e Strutture Dati + Lab A.A. / Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro ALBERO

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

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

Costruttori/distruttori. Sovraccarico degli operatori. Costruttori/distruttori. Necessità di un cotruttore

Costruttori/distruttori. Sovraccarico degli operatori. Costruttori/distruttori. Necessità di un cotruttore Costruttori/distruttori. Sovraccarico degli operatori. Costruttori/distruttori Quando un oggetto viene allocato viene eseguita una routine di inizializzazione: il costruttore. Quando viene deallocato si

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

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

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C Tipi di dati strutturati e Linguaggio C Record o strutture Il costruttore struct in C Dati strutturati Record Un record o struttura è una struttura dati ottenuta aggregando elementi di tipo diverso che

Dettagli

La programmazione nel linguaggio C

La programmazione nel linguaggio C Cancellazione : versione ricorsiva Sfruttiamo la visione ricorsiva della struttura dati per realizzare la cancellazione in modo ricorsivo 1. la cancellazione della vuota non richiede alcuna azione 2. la

Dettagli

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza

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

3) Descrivere l architettura di un elaboratore tramite astrazione a livelli

3) Descrivere l architettura di un elaboratore tramite astrazione a livelli Di seguito sono elencati una serie di domande tipo esonero ; i quiz vogliono dare un sistema di autovalutazione e di confronto allo studente che deve prepararsi alla prova di metà corso. Il numero e l

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Università di Camerino Corso di Laurea in Informatica (12 CFU) I periodo didattico Emanuela Merelli email:emanuela.merelli@unicam.it Argomenti della lezione Elementi di un linguaggio

Dettagli

Array e puntatori in C

Array e puntatori in C Array e puntatori in C Diapositive adattate dalle omonime create dalla Dottoressa di Ricerca Giovanna Melideo per il corso di Laboratorio di Algoritmi e Strutture Dati 10/05/2005 LP2-04/05 - Appunti di

Dettagli

Cosa si intende con stato

Cosa si intende con stato Il concetto di stato Cosa si intende con stato I una particolare configurazione delle informazioni di una macchina, che in qualche modo memorizza le condizioni in cui si trova, e che cambia nel tempo passando

Dettagli

Esonero di Informatica I. Ingegneria Medica

Esonero di Informatica I. Ingegneria Medica Di seguito sono elencati una serie di domande tipo esonero ; i quiz vogliono dare un sistema di autovalutazione e di confronto allo studente che deve prepararsi alla prova di metà corso. Il numero e l

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

Problemi e algoritmi. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 (da U. de' Liguoro - Alg. & Spe. 03/04)

Problemi e algoritmi. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 (da U. de' Liguoro - Alg. & Spe. 03/04) Problemi e algoritmi Il che cosa e il come Il che cosa ed il come Problema: descrive che cosa si deve calcolare Specifica (di un algoritmo): descrive che cosa calcola un algoritmo Algoritmo: descrive come

Dettagli

Esercizi su strutture dati

Esercizi su strutture dati Esercizi su strutture dati Marco Alberti Programmazione e Laboratorio, A.A. 2016-2017 Dipartimento di Matematica e Informatica - Università di Ferrara Ultima modifica: 21 dicembre 2016 Liste collegate

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

Problemi e algoritmi. Il che cosa ed il come. Il che cosa ed il come. Il che cosa e il come

Problemi e algoritmi. Il che cosa ed il come. Il che cosa ed il come. Il che cosa e il come Problemi e algoritmi Il che cosa e il come Problema: descrive che cosa si deve calcolare Specifica (di un algoritmo): descrive che cosa calcola un algoritmo Algoritmo: descrive come effettuare un calcolo

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

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX Indice Prefazione Gli Autori Ringraziamenti dell Editore La storia del C XVII XXIX XXXI XXXIII PARTE A Capitolo 1 Computer 1 1.1 Hardware e software 2 1.2 Processore 3 1.3 Memorie 5 1.4 Periferiche di

Dettagli

Lezione 8 Struct e qsort

Lezione 8 Struct e qsort Lezione 8 Struct e qsort Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort

Dettagli

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico

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

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

5. Quinta esercitazione autoguidata: liste semplici

5. Quinta esercitazione autoguidata: liste semplici 22 5. Quinta esercitazione autoguidata: liste semplici 5.1. Liste rappresentate mediante strutture e puntatori (LISTE1.C, LISTE2.C) Scrivere un programma che - costruisce una lista di k interi (con k letto

Dettagli

Strutture dati. Le liste

Strutture dati. Le liste Strutture dati Le liste Introduzione Una lista è una successione finita di valori di un tipo (insieme di valori e ordine). Come tipo di dato è qualificata dalle operazioni che ci si possono svolgere: inserimento

Dettagli

La Struttura Dati Pila

La Struttura Dati Pila La Struttura Dati Pila La pila o stack è una particolare struttura dati in cui l'inserimento e la cancellazione sono consentite solo in una specifica posizione, chiamata cima (top) dello stack. La gestione

Dettagli

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A Matematica 13/11/2007 Teoria Compito A Domanda 1 Descrivere, eventualmente utilizzando uno schema, gli elementi funzionali di una CPU. Domanda 2 Java è un linguaggio compilato o interpretato? Motivare

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

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

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

Studio degli algoritmi

Studio degli algoritmi COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.2006/07 Prof. V.L. Plantamura Dott.ssa A. Angelini Studio degli algoritmi Dato un problema P, le problematiche riguardano: Sintesi

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e strutture dati Roberto Cordone A. A. 2015-16 Capitolo 4 Implementazioni delle partizioni Nota: queste dispense sono un rapido riassunto delle lezioni svolte nel dicembre 2015 e gennaio 2016.

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 Il sistema dei tipi in C++

Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout

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

Allocazione dinamica

Allocazione dinamica Allocazione dinamica Quando non si sa a priori quanto un array debba essere grande allocazione dinamica di array Quando si deve restituire un array come risultato di una funzione (a meno di non barare

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

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.200.2005/06 Prof. V.L. Plantamura Dott.ssa A. Angelini Confronto di algoritmi Uno stesso problema può essere risolto in modi diversi,

Dettagli

Cognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :

Cognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) : PROGRAMMAZIONE (Corsi B e C) Pre-appello di Gennaio 2004 (A.A. 2003/2004) PROGRAMMAZIONE (B e C) S. Straordinaria - Appello di Gennaio (A.A. 2002/2003) 22 Gennaio 2004 ore 11 Aula II di Facoltà (Durata:

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

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

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore

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

Introduzione al linguaggio C Puntatori

Introduzione al linguaggio C Puntatori Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016

Dettagli

Quicksort e qsort() Alessio Orlandi. 28 marzo 2010

Quicksort e qsort() Alessio Orlandi. 28 marzo 2010 Quicksort e qsort() Alessio Orlandi 28 marzo 2010 Intro Quicksort è l algoritmo di ordinamento più implementato, insieme con Mergesort. Tutte le librerie standard UNIX ne prevedono una implementazione.

Dettagli

Le precondizioni e postcondizioni aggiunte al prototipo, consentono di fornire una specificazione precisa della funzione

Le precondizioni e postcondizioni aggiunte al prototipo, consentono di fornire una specificazione precisa della funzione OBIETTIVO CORRETTEZZA: specificazione completa con precondizioni e postcondizioni Le precondizioni e postcondizioni aggiunte al prototipo, consentono di fornire una specificazione precisa della funzione

Dettagli

Strutture dati dinamiche in C (II)

Strutture dati dinamiche in C (II) Strutture dati dinamiche in C (II) Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi lisi@di.uniba.it Sommario Le liste concatenate (ancora ma in modo più formale) L

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

CORSO DI PROGRAMMAZIONE

CORSO DI PROGRAMMAZIONE ISTITUTO TECNICO INDUSTRIALE G. M. ANGIOY SASSARI CORSO DI PROGRAMMAZIONE INTRODUZIONE ALLE ISTRUZIONI ITERATIVE DISPENSA 03.01 03-01_Iterazioni_[ver_15] Questa dispensa è rilasciata sotto la licenza Creative

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

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

Fondamenti di informatica, Sez. Ing. Informatica, Ing. Gestionale, Ing. Ambientale II prova in itinere, 29 Gennaio 2009

Fondamenti di informatica, Sez. Ing. Informatica, Ing. Gestionale, Ing. Ambientale II prova in itinere, 29 Gennaio 2009 Fondamenti di informatica, Sez. Ing. Informatica, Ing. Gestionale, Ing. Ambientale II prova in itinere, 29 Gennaio 2009 Esercizio 1 (punti 3) Sia data la funzione ricorsiva seguente: void elabora (unsigned

Dettagli

Espressioni aritmetiche

Espressioni aritmetiche Espressioni aritmetiche Consideriamo espressioni costruite a partire da variabili e costanti intere mediante applicazione delle operazioni di somma, sottrazione, prodotto e divisione (intera). Ad esempio:

Dettagli

Laboratorio di Architettura lezione 5. Massimo Marchiori W3C/MIT/UNIVE

Laboratorio di Architettura lezione 5. Massimo Marchiori W3C/MIT/UNIVE Laboratorio di Architettura lezione 5 Massimo Marchiori W3C/MIT/UNIVE Da Alto a Basso livello: compilazione Come si passa da un linguaggio di alto livello a uno di basso livello? Cioe a dire, come lavora

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

UNITÀ DIDATTICA 5 LA RETTA

UNITÀ DIDATTICA 5 LA RETTA UNITÀ DIDATTICA 5 LA RETTA 5.1 - La retta Equazione generica della retta Dalle considerazioni emerse nel precedente capitolo abbiamo compreso come una funzione possa essere rappresentata da un insieme

Dettagli

Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a

Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a Puntatori in C Puntatori Variabili tradizionali indirizzo int a = 5; A00E... Proprietà della variabile a: nome: a A010 A012 5 tipo: int A014 valore: 5 indirizzo: A010 Finora abbiamo usato solo le prime

Dettagli

dott. Sabrina Senatore

dott. Sabrina Senatore dott. Sabrina Senatore Dipartimento di Informatica Riepilogo strutture 1 Sintassi della dichiarazione: typedef struct nome_tipo { Dichiarazione dei campi nome_tipo; typedef struct point{ int x; int y;

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

Tipi di dato, Alessandra Giordani Lunedì 7 maggio 2011

Tipi di dato, Alessandra Giordani Lunedì 7 maggio 2011 Tipi di dato, memoria e conversioni Alessandra Giordani agiordani@disi.unitn.it Lunedì 7 maggio 2011 http://disi.unitn.it/~agiordani/ Il linguaggio C è esplicitamente tipato: occorre esplicitamente associare

Dettagli

Hash Table. Hash Table

Hash Table. Hash Table Hash Table La ricerca di un elemento su una lista (semplice o doppia) presenta una complessità di tipo O(n), dato che occorre scandire (al più) l intera lista per poter trovare l elemento desiderato. Le

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

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

Linguaggi, Traduttori e le Basi della Programmazione

Linguaggi, Traduttori e le Basi della Programmazione Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2011/2012 docente: Prof. Ing. Michele Salvemini Sommario Il Linguaggio I Linguaggi di Linguaggi

Dettagli

Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Array. Parte 7. 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

La struttura dati LISTA

La struttura dati LISTA Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati LISTA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una lista è una struttura dati astratta che rappresenta

Dettagli