Strutture Dati. Nicola Fanizzi. Linguaggi di Programmazione [010194] 9 mag, Dipartimento di Informatica Università degli Studi di Bari

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Strutture Dati. Nicola Fanizzi. Linguaggi di Programmazione [010194] 9 mag, Dipartimento di Informatica Università degli Studi di Bari"

Transcript

1 Strutture Dati Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 9 mag, 2016

2 Sommario 1 Tipi e sistemi di tipi Definizioni Sistemi di tipi 2 Tipi scalari Tipi scalari e ordinali Booleani Caratteri Numerici: interi, reali, complessi void Enumerazioni e intervalli 3 Tipi Composti Record Array Insiemi Puntatori 4 Relazioni fra tipi Equivalenza Compatibilità e conversione di tipo Polimorfismo Controllo e Inferenza 5 Strutture dati e gestione della memoria Dangling reference Garbage collection Strutture Dati 9 mag, / 88

3 Agenda 1 Tipi e sistemi di tipi Definizioni Sistemi di tipi 2 Tipi scalari 3 Tipi Composti 4 Relazioni fra tipi 5 Strutture dati e gestione della memoria Strutture Dati 9 mag, / 88

4 Introduzione Scopi dei Tipi di dato: Progetto: supporto all organizzazione concettuale Programma: supporto alla correttezza Traduzione: supporto all implementazione Strutture Dati 9 mag, / 88

5 Tipi Definizione (Tipo) Un tipo di dato è una collezione di valori omogenei, effettivamente presentabili, dotata di un insieme di operazioni che manipolano tali valori Omogeneità I valori condividono alcune proprietà strutturali Presentabilità Devono potere avere una presentazione finita per la loro scrittura es. non esiste un tipo dei numeri reali veri e propri Operazioni La stessa collezione di valori può essere impiegata in tipi diversi a seconda delle operazioni definite es. i tipi interi nei vari linguaggi Strutture Dati 9 mag, / 88

6 Tipi utilità Progetto: Supporto all organizzazione concettuale Dominare la complessità dei problemi Esplicitare i concetti tipici attraverso nuovi tipi Aumento di leggibilità (documentazione) e di sicurezza (controlli automatici) Strutture Dati 9 mag, / 88

7 Tipi utilità [... cont.] Programma: Supporto alla correttezza Vincoli di tipo (problemi di semantica) errori HW es. salto a zona di memoria che non contiene codice errori logici es. somma intero + stringa Controlli semantica statica: Type checker come i commenti ma i controlli sono effettuabili automaticamente non risolvono tutti i problemi logici: es. formule della fisica, prima controlli sulle dim. Polimorfismo es. stessa funzione (es. sort) su strutture di tipi diversi Sicurezza: vincoli soddisfatti ma problemi rilevati in fase d esecuzione? linguaggi sicuri e non es. dangling reference Strutture Dati 9 mag, / 88

8 Tipi utilità [... cont.] Traduzione: Supporto all implementazione Informazioni per la macchina astratta disponibili staticamente Dimensione richiesta per l allocazione sia nel RdA sullo stack sia su heap Ottimizzazioni sulle op. d accesso Calcoli statici Ind. oggetto + offset (no ricerca per nome) Strutture Dati 9 mag, / 88

9 Sistemi di tipi Sistema di tipi: complesso delle informazioni e delle regole che governano i tipi di un linguaggio 1 Insieme dei tipi predefiniti 2 Costrutti per definire nuovi tipi 3 Meccanismi per il controllo dei tipi Regole di equivalenza: due tipi formalmente diversi possono essere equivalenti livello semantico Regole di compatibilità: un valore di un tipo diverso da quello atteso può essere comunque utilizzato Regole di inferenza: attribuzione di un tipo ad un espressione complessa in base alle componenti 4 se/quali vincoli controllare staticamente/dinamicamente Strutture Dati 9 mag, / 88

10 Sistemi di tipi - sicurezza Un sistema di tipi (e, per estensione, un linguaggio) si dice type-safe 1 (sicuro a livello di tipi) quando nessun programma può ignorare le differenze tra tipi definite dal sistema/linguaggio nessun programma può generare errori inattesi derivanti da violazioni di tipo a run-time ad esempio: accesso a memoria non allocata chiamata di un valore che non si riferisce ad una funzione 1 o strongly typed (fortemente tipizzato). Strutture Dati 9 mag, / 88

11 Classificazione dei tipi In base ai valori (... ed alle operazioni): denotabili possono essere associati ad un nome esprimibili possono essere il risultato di una espressione complessa (più di un semplice nome) memorizzabili possono essere memorizzati in una variabile Strutture Dati 9 mag, / 88

12 Classificazione dei tipi [... cont.] Esempi Tipo delle funzioni (int -> int) valore denotabile: possiamo associare un nome ad una funzione 1 int succ (int x) { 2 return x + 1; 3 } valore esprimibile: solo nei ling. funzionali e non negli imperativi Funzioni risultato della valutazione di un espressione valore memorizzabile idem (ML, HASKELL, SCHEME) Strutture Dati 9 mag, / 88

13 Sistemi di tipi controlli Tipizzazione statica: controlli a compile-time (es. JAVA) Controlli anticipati Correttezza garantita per ogni sequenza d esecuzione Controlli a run-time inutili: maggiore efficienza Progettazione più complessa se il linguaggio deve anche essere type-safe Compilazione lenta e complessa ma facilita debugging/testing Tipizzazione dinamica: controlli a run-time (es. LISP) Ogni oggetto ha un descrittore che ne contiene il tipo La macchina astratta controlla la correttezza degli operandi nelle operazioni Il compilatore ha generato codice di controllo opportuno Caratteristiche previene errori di tipo (troppo tardi?) esecuzione meno efficiente Strutture Dati 9 mag, / 88

14 Sistemi di tipi controlli [... cont.] Osservazioni Programmi sicuri che la tipizzazione statica può male interpretare come errati: Controllo statico: più conservatore Esempio dato il frammento: 1 int x; 2 if (1==0) x = "errore"; 3 else x = x + 2; l esecuzione non causa errore ma risulta non corretto al controllo statico Controllo sui tipi in generale: problema indecidibile Per prudenza un controllo statico esclude anche casi non pericolosi, come il precedente In molti linguaggi (es. PASCAL) controllo statico+dinamico es. utilizzo di vettori con controllo degli indici a run-time Strutture Dati 9 mag, / 88

15 Indecidibilità del controllo sui tipi Controllo statico: più conservatore 1 int x; 2 Proc(); 3 x = "errore"; Se si potesse sapere sempre se Proc() termina allora si potrebbe segnalare l errore di tipo E se Proc() non terminasse mai? allora l errore di tipo non si verificherebbe quindi il programma sarebbe corretto Essendo il problema della fermata indecidibile lo sarà anche quello del controllo della correttezza dei tipi Strutture Dati 9 mag, / 88

16 Agenda 1 Tipi e sistemi di tipi 2 Tipi scalari Tipi scalari e ordinali Numerici: interi, reali, complessi void Enumerazioni e intervalli 3 Tipi Composti 4 Relazioni fra tipi 5 Strutture dati e gestione della memoria Strutture Dati 9 mag, / 88

17 Tipi scalari Tipi scalari (o semplici): tipi i cui valori sono atomici, i.e. non sono costituiti da aggregati di altri valori notazione type <nometipo> = <espressione>; Tipi ordinali (o discreti): dotati di una relazione d ordine totale Valori: discreti booleani, caratteri, interi, enumerazioni ed intervalli Operazioni: precedente e successivo Utili per gli indici Strutture Dati 9 mag, / 88

18 Booleani Per valori logici (o di verità) Valori: uno per il vero (es. true) uno per il falso (es. false) Operazioni: congiunzione (and), disgiunzione (or), negazione (not), or esclusivo, uguaglianza Valori denotabili, esprimibili, memorizzabili Memorizzazione nelle minime unità di memoria indirizzabili Strutture Dati 9 mag, / 88

19 Caratteri Valori: un insieme di codici di caratteri fissato durante la progettazione del linguaggio Es: ASCII, UNICODE Operazioni: logiche uguaglianza, confronti, ordinali carattere successivo (succ) o precedente (prec) Valori denotabili, esprimibili, memorizzabili Memorizzazione con 1 (ASCII) o 2 (UNICODE) byte Strutture Dati 9 mag, / 88

20 Interi Valori: sottoinsieme finito dei numeri interi fissato durante la progettazione del linguaggio o della macchina astratta Di solito del tipo [ 2 t, +2 t 1] A volte sono possibili interi di lunghezza illimitata Operazioni aritmetiche e confronti Somma, differenza, prodotto, divisione (intera), resto, potenza Valori denotabili, esprimibili, memorizzabili Memorizzazione con un numero (pari) di byte in complemento a due Strutture Dati 9 mag, / 88

21 Reali numeri reali in virgola fissa Valori: sottoinsieme finito dei numeri razionali fissato durante la progettazione del linguaggio o della macchina astratta Ampiezza e granularità, ecc. dell insieme dipendono dalla rappresentazione scelta Operazioni aritmetiche e confronti Somma, differenza, prodotto, divisione (intera), resto, esponenziale, radice quadrata Valori denotabili, esprimibili, memorizzabili Memorizzazione con un numero di 4 o 8 byte complemento a 2 numero fissato di bit per la parte decimale Strutture Dati 9 mag, / 88

22 Reali [... cont.] virgola mobile Valori: sottoinsieme finito dei numeri razionali fissato durante la progettazione del linguaggio o della macchina astratta Ampiezza e granularità, ecc. dell insieme dipendono dalla rappresentazione scelta Operazioni aritmetiche e confronti Somma, differenza, prodotto, divisione (intera), resto, esponenziale, radice quadrata Valori denotabili, esprimibili, memorizzabili Memorizzazione con un numero di 4,8,10 byte Standard IEEE 754 Strutture Dati 9 mag, / 88

23 Complessi numeri complessi Valori: sottoinsieme finito dei numeri complessi fissato durante la progettazione del linguaggio Ampiezza e granularità, ecc. dell insieme dipendono dalla rappresentazione scelta Operazioni aritmetiche e confronti Somma, differenza, prodotto, divisione (intera), resto, esponenziale, radice quadrata Valori denotabili, esprimibili, memorizzabili Memorizzazione con una coppia di reali in virgola mobile Strutture Dati 9 mag, / 88

24 void Valori: un solo valore void o unit (insieme singoletto) oppure { } una funzione matematica non può avere codominio vuoto sono tali le funzioni che divergono sempre Operazioni: nessuna Utile a denotare operazioni che non restituiscono un valore utile (ma hanno effetti collaterali) es. assegnamento (in molti linguaggi) ossia restituiscono un unico valore implicitamente Strutture Dati 9 mag, / 88

25 Enumerazioni Tipi semplici definiti dall utente Valori: un insieme finiti di costanti caratterizzate da un proprio nome es. type giorni = (lun,mar,mer,gio,ven,sab,dom); Operazioni: confronti, operatori per raggiungere il valore precedente o il successivo Vantaggi Aumenta la leggibilità Ausilio del controllo dei tipi Memorizzazione: mappaggio sugli interi In alcuni linguaggi (C/C++, ADA,...) si possono anche scegliere esplicitamente Strutture Dati 9 mag, / 88

26 Intervalli Tipi semplici definiti dall utente Valori: sottoinsieme contiguo dei valori di un altro tipo scalare (tipo base) 1 type NumeriLotto = 1..90; 2 Giorniferiali = lun..ven; Operazioni: confronti, operatori per raggiungere il valore precedente o il successivo Vantaggi Maggiore la leggibilità Ausilio al controllo dei tipi: dinamico Memorizzazione: mappati sugli interi Come per il tipo base Strutture Dati 9 mag, / 88

27 Agenda 1 Tipi e sistemi di tipi 2 Tipi scalari 3 Tipi Composti Record Array Insiemi Puntatori 4 Relazioni fra tipi 5 Strutture dati e gestione della memoria Strutture Dati 9 mag, / 88

28 Tipi Composti Tipi non scalari, ottenuti per combinazione di tipi più semplici Record (o strutture): collezione di valori eterogenei Array: collezione di valori omogenei Insiemi: sottoinsiemi di un tipo (base, ordinale) Puntatori: l-valori per accedere indirettamente ad altri valori Tipi ricorsivi: definiti per ricorsione Strutture Dati 9 mag, / 88

29 Record (o strutture) Record: Collezione di un numero finito (e spesso ordinato) di elementi detti campi Ogni campo è caratterizzato dal nome dal tipo (anche diverso da quello degli altri campi) si può assimilare quindi ad una variabile Spesso è possibile annidare record all interno di record Strutture Dati 9 mag, / 88

30 Record (o strutture) [... cont.] Esempio 1 type studente = struct { 2 int matricola; 3 float statura; 4 }; Esempio annidamento 1 type Aula = struct { 2 char nome[5]; 3 int capienza; 4 struct { 5 char dipart[10]; 6 int tel; 7 } segreteria; 8 }; Aula a; 11 a.nome = B-1 12 a.segreteria.tel = 1234; Strutture Dati 9 mag, / 88

31 Record (o strutture) [... cont.] Operazioni: selezione, indicata con. alcuni linguaggi ammettono assegnazione e test di uguaglianza tra interi record se non permesse bisogna procedere campo per campo l ordine dei campi può essere significativo Memorizzazione in locazioni contigue nell ordine di definizione Diverse organizzazioni possibili dovute all allineamento Migliora l efficienza nel reperimento Esempio arch. 32bit nome capienza dipartimento telefono Strutture Dati 9 mag, / 88

32 Record varianti e unioni Record varianti: record con campi mutuamente esclusivi Nomi e sintassi diverse per ogni linguaggio es. in PASCAL, record con una parte della struttura variabile: solo una delle varianti ammesse è significativa Esempio 1 type studente = record 2 nome: array [1..6] of char; 3 matricola: integer; 4 case fuoricorso: boolean of 5 true: (ultimoanno: maxint); 6 false:( inpari: boolean; 7 anno: (primo,secondo,terzo) 8 ) 9 end; Strutture Dati 9 mag, / 88

33 Record varianti e unioni [... cont.] unioni strutture con campi mutualmente esclusivi Nomi e sintassi diverse per ogni linguaggio es. in C, struttura con un solo campo alla volta valido union per la parte variante 1 struct studente { 2 char[6] nome; 3 int matricola; 4 int fuoricorso; 5 union { int ultimoanno; 6 struct { int inpari; 7 int anno; 8 } studente_in_corso; 9 } campi_varianti; 10 } Strutture Dati 9 mag, / 88

34 Record varianti e unioni [... cont.] Record varianti vs. Unioni Similarità Differenze Le varianti e le unioni condividono le stesse aree di memoria In C un campo della union è svincolato dal resto più flessibile più oneroso per il programmatore più rischioso Livelli di nomi: In PASCAL, campo come gli altri: s.inpari In C, occorre aggiungere ulteriori livelli di nomi Strutture Dati 9 mag, / 88

35 Record varianti e unioni [... cont.] Problema di sicurezza modifica tag discriminante con assegnamento ordinario (in PASCAL e C) La macchina astratta potrebbe controllare (dinamicamente) il tag per sapere se il record è usato correttamente risolve molti problemi semantici ma non tutti 1 type Tre = 1..3; ma anche 2 var tmp: record 1 tmp.quale:=1; 3 case quale: Tre of 2 tmp.a:=123; 4 1: (a:integer); 3 tmp.quale:=3; 5 2: (b:boolean); 4 write(tmp.c); 6 3: (c:char); 5 ( 7 end * semanticamente errato, 6 ma non rilevato 8... * ) 9 tmp.quale:=1; 10 tmp.a:=123; 11 write(tmp.c); 12 ( * errore a run-time * ) Strutture Dati 9 mag, / 88

36 Array Array: Collezione finita di elementi dello stesso tipo (tipo base) indicizzata su un intervallo di tipo ordinale (tipo indice) Specifica Nome Tipo indice Tipo dei componenti es. in C: int v[10]; Array multidimensionali: usando indici molteplici a volte come array di array op. di slicing ritagliare una fetta, fissando una dim. Strutture Dati 9 mag, / 88

37 Array [... cont.] Operazioni Selezione: si indica (spesso tra [...]) un espressione il cui valore rappresenta l indice dell elemento da selezionare es. array monodimensionale: v[<espr>] es. array multidimensionale: m[<espr_1>][<espr_2>]...[<espr_n>] Assegnamento Test di uguaglianza ed altri test di confronto Op. dell algebra lineare nei ling. che supportano il trattamento delle matrici Slicing slice: sezione di array costituita da elementi contigui in una data dimensione (es. un piano) in alcuni linguaggi si possono estrarre anche selezioni diagonali cornici, ecc. Strutture Dati 9 mag, / 88

38 Array [... cont.] Controlli Selezione entro i limiti del tipo indice A run-time Per un linguaggio safe: il compilatore genera controlli per ogni selezione generazione spesso disattivabile con un opzione del compilatore Safety & security Attacchi buffer overflow Strutture Dati 9 mag, / 88

39 Array [... cont.] Memorizzazione Sezioni contigue di memoria Array monodimensionale Allocazione secondo l ordine degli indici Array multidimensionale Ordine di riga Elementi contigui differiscono di un unita nell indice più a destra nella lista Ordine di colonna Elementi contigui differiscono di un unita nell indice più a sinistra nella lista Dividere nell una o l altra maniera può avere un impatto sull efficienza del caching Strutture Dati 9 mag, / 88

40 Array [... cont.] Calcolo degli indici Dato un array m a n dimensioni di tipo T T m[l 1,U 1 ][L 2,U 2 ]...[L n,u n ] S n : unità di mem. indirizzabili per elem. di T (per riga) S n 1 = (U n L n + 1)S n (slice di ordine superiore)... S 1 = (U 2 L 2 + 1)S 2 Per cercare l indirizzo di m[i 1 ][i 2 ]...[i n ] all indirizzo iniziale, si somma l offset: (i 1 L 1 )S 1 + (i 2 L 2 )S (i n L n )S n Se le dim. sono tutte note, meglio usare: i 1 S i n S n (L 1 S L n S n ) n moltiplicazioni, n addizioni, n sottrazioni (che non servono se gli indici partono da 0, i L is i predeterminato) Strutture Dati 9 mag, / 88

41 Array [... cont.] Forma (shape): numero delle dim. e intervallo per ogni dim. Quando viene fissata? Statica al momento della compilazione (dim. fissate) Array nel RdA (o nella mem. per le var. globali) Accesso tramite la formula precedente Elaborazione della dichiarazione Intervallo indici dipendente da un espressione variabile Calcolo a run-time Array nel RdA: ma offset non noto! Parte fissa (offset) e parte variabile (ind. indiretto) Dinamica Limiti modificabili Allocazione sull heap: (sulla pila non è possibile) Nel RdA: puntatore all array Strutture Dati 9 mag, / 88

42 Array [... cont.] Dope vector: descrittore di array di forma non nota staticamente Allocato nella parte a lunghezza fissa del RdA riservata all array Contiene: puntatore alla prima cella dell area di mem. riservata all array informazioni dinamiche utili (non memorizzate se determinabili staticamente) numero dimensioni limiti per ogni dim. (L i, U i ) occupazione per ogni dim. (S i ) Accesso ad un elemento: accesso per offset tramite frame pointer al dope vector calcolo della formula precedente si somma all indirizzo dell inizio dell array Strutture Dati 9 mag, / 88

43 Array [... cont.]... lunghezza variabile m... var locali lunghezza fissa frame pointer L 3 S 3 L 2 S 2 L 1 S 1 puntatore ad m... ind.ritorno parametri dope vector di m Strutture Dati 9 mag, / 88

44 Insiemi Insieme: collezione di valori che costituiscono un sottoinsieme di un tipo base (universo) Solitamente il tipo base è ordinale (PASCAL) Esempi set of char S; set of Giorni IG; WE = (Sab, Dom); Operazioni Appartenenza (, in) Unione (+), intersezione ( * ), differenza (-) (a volte anche complemento) Rappresentazione vettori di bit (vettore caratteristico) V j = 1 sse il j-esimo elemento dell universo appartiene all insieme Tabelle hash... Strutture Dati 9 mag, / 88

45 Puntatori Puntatore: tipo di variabili atte a contenere l-valori, direttamente manipolabili, utili a riferirsi indirettamente ad altre var. In genere è possibile indicare anche il tipo delle variabili puntate TipoBase * P; In PASCAL o ADA: possono solo puntare a variabili del tipo dato In C/C++: non c è un vincolo stretto Ove presenti, consentono la definizione di tipi ricorsivi senza primitive apposite Nei linguaggi con variabili-riferimento, gli l-valori non possono essere manipolati direttamente valore nullo: il puntatore non punta ad alcuna variabile es. null (o nil, in PASCAL) Strutture Dati 9 mag, / 88

46 Puntatori [... cont.] Operatori Assegnamento di un valore ad un puntatore mediante Allocazione esplicita int * p; p = (int * ) malloc(sizeof (int)); Costruttori (di oggetti) Operatore & float pigreco = , * pp; pp = &pigreco; Dereferenziazione ^ (PASCAL) oppure * (in C/C++) es. precedente: float circ = 2 * r * ( * pp ); Vale sia per l l-valore sia per l r-valore Strutture Dati 9 mag, / 88

47 Puntatori [... cont.] test di uguaglianza Creazione di strutture ricorsive Quando non previste dal linguaggio es. lista di interi (successione ordinata di dim. variabile) 1 typedef nodo * lista_int; 2 typedef struct { int val; 3 lista_int succ} nodo; Strutture Dati 9 mag, / 88

48 Puntatori [... cont.] Aritmetica In C ed alcuni derivati: operazioni aritmetiche su puntatori Incremento/decremento di un puntatore: p++ / p-- indirizzo incrementato di sizeof(tipobase) Sottrazione di puntatori: p1 - p2 Offset tra p1 e p2 Somma di un quantità ad un puntatore: p + n punta alla variabile con offset pari a n * sizeof(tipobase) Nociva per la type-safety del linguaggio Non c è garanzia che in tutti i momenti un puntatore punti effettivamente ad una variabile del tipo atteso 1 int * p; 2 int * c; 3 p = (int * ) malloc(sizeof(int)); 4 c = (char * ) malloc(sizeof(char)); 5 p = p+1 6 c++; Strutture Dati 9 mag, / 88

49 Puntatori [... cont.] Deallocazione implicita nessuno strumento per deallocare la memoria avviene quando non c è più spazio sullo heap possibile recuperare memoria inutilizzata tecniche di garbage collection esplicita costrutto previsto dal linguaggio In C: funzione free() free(p) libera la memoria della variabile puntata da p e conviene anche assegnare: p=null; se p vale già null allora si ha un errore semantico Dangling reference: puntatori con valore diverso da null che puntano a zone non più significative memoria deallocata o ri-allocata riferimenti non validi alla pila d esecuzione (anche con deallocazione implicita) Strutture Dati 9 mag, / 88

50 Tipi ricorsivi Tipi composti in cui un valore può contenere (un riferimento ad) un valore dello stesso tipo Esempi (pseudocodice): 1 type ListaInt = { int val; 2 ListaInt next; } 1 type AlberoChar = { char val; 2 AlberoChar sinistro; 3 AlberoChar destro; } Operazioni Selezione Test di uguaglianza Strutture Dati 9 mag, / 88

51 Tipi ricorsivi [... cont.] Rappresentati con strutture dati su heap Ling. Imperativi: Strutture concatenate (ottenute con riferimenti/puntatori) Allocazione esplicita Ling. Funzionali: espressione diretta di val. di tipi ricorsivi No deallocazione 1 ListaInt: (2,(33,(1,(4,(3,(1,21,null))))))) 2 3 CharAlbero: 4 (A, 5 (B, 6 (C,null,null), 7 (D, 8 (E,null,null), 9 null 10 ), 11 (F,null,null) 12 ) B A C / / D / E / / F / / Strutture Dati 9 mag, / 88

52 Tipi di funzioni Alcuni linguaggi permettono di definire tipi di funzioni i valori di questi tipi sono funzioni tipo di funzione denotato con T f(s1 s1, S2 s2,..., Sn sn) {...} oppure anche con S1 x S2 x... x Sn -> T Operazioni Definizione (soprattutto funzionali) Applicazione (chiamata su parametri effettivi) Valori implementati come puntatori PASCAL, C, C++ Strutture Dati 9 mag, / 88

53 Agenda 1 Tipi e sistemi di tipi 2 Tipi scalari 3 Tipi Composti 4 Relazioni fra tipi Equivalenza Compatibilità e conversione di tipo Polimorfismo Controllo e Inferenza 5 Strutture dati e gestione della memoria Strutture Dati 9 mag, / 88

54 Equivalenza Regole utili a stabilire quando due tipi, formalmente diversi, sono intercambiabili, ossia non distinguibili nel loro uso per due tipi equivalenti, ogni espressione/valore del primo tipo è anche espressione/valore del secondo e viceversa Definizione di un nuovo tipo type nuovotipo = espressionetipo Regole per la sua interpretazione: Definizione opaca: equivalenza per nome Definizione trasparente: equivalenza strutturale Strutture Dati 9 mag, / 88

55 Equivalenza per nome Ogni nuova definizione introduce un nuovo tipo Definizione (equivalenza per nome) Due tipi si dicono equivalenti per nome sse hanno lo stesso nome un tipo è equivalente solo a se stesso Esempio T1 = 1..10; T2 = 1..10; T3 = int; T4 = int; sono tutti diversi e non equivalenti Strutture Dati 9 mag, / 88

56 Equivalenza per nome [... cont.] Osservazioni vincolo indebolito in alcuni linguaggi (PASCAL) nell es. la ridenominazione genera alias e non nuovi tipi (caso di T3 e T4) Ogni def. di tipo in un solo punto: OK dal punto di vista ingegneristico Equivalenza relativa ad un programma, non in generale Strutture Dati 9 mag, / 88

57 Equivalenza strutturale Definizioni trasparenti: nome come abbreviazione del nuovo tipo definito conta la sostituzione dei nomi con le definizioni dei tipi Definizione (Equivalenza strutturale) Due tipi T1 e T2 sono strutturalmente equivalenti sse hanno lo stesso nome, oppure T1 è definito con type T1 = espressione; ed espressione rappresenta un tipo equivalente a T2, oppure T1 e T2 definiti applicando lo stesso costruttore di tipo a due tipi tra loro equivalenti Strutture Dati 9 mag, / 88

58 Equivalenza strutturale [... cont.] Esempi (pseudo-codice) equivalenza di T3 e T4 1 type T1 = int; 2 type T2 = char; 3 type T3 = struct { T1 a; T2 b; } 4 type T4 = struct { int a; char b; } equivalenti? 1 type S = struct { int a; int b; } 2 type T = struct { int n; int m; } 3 type U = struct { int m; int n; } equivalenti? (ricorsione) 1 type R1 = struct { int a; R2 p; } 2 type R2 = struct { int a; R1 p; } Osservazioni Strutture Dati 9 mag, / 88

59 Equivalenza strutturale [... cont.] Equivalenza strutturale non legata al singolo programma Sostituzione sempre possibile: si parla di trasparenza referenziale I linguaggi spesso adottano regole di equivalenza miste Strutture Dati 9 mag, / 88

60 Compatibilità Il tipo T è compatibile con il tipo S sse un valore del tipo T è ammesso in qualsiasi contesto in cui sarebbe richiesto un valore di tipo S Compatibilità più debole dell equivalenza Due tipi equivalenti sono sempre compatibili (ma non viceversa) Relazione riflessiva, transitiva ma non simmetrica es. char e int Relazione adottata da molti linguaggi nella disciplina dell assegnamento: tra il tipo dell espressione (RHS) e quello della variabile (LHS) nella disciplina del passaggio parametri Strutture Dati 9 mag, / 88

61 Compatibilità [... cont.] Gradi di compatibilità: T compatibile con S 1 T e S equivalenti 2 I valori di T costituiscono un sottoinsieme dei valori di S es. tipi intervallo 3 Tutte le operazioni per S sono ammissibili sui valori di T es. record e op. di selezione. type S = struct {int a;} type T = struct {int a; char b;} rel. di sottotipo (nei linguaggi ad oggetti) 4 I valori di T corrispondono canonicamente a certi valori di S int e float 5 I valori di T corrispondono ad alcuni valori di S, tramite una convenzione per la trasformazione da T a S float e int, tramite arrotondamento, troncamento,... Strutture Dati 9 mag, / 88

62 Conversione di tipo Conversione implicita: operata tacitamente dalla macchina astratta si chiama anche coercizione, o conversione forzata Conversione esplicita: indicata mediante costrutti linguistici nel sorgente del programma si chiama anche cast Strutture Dati 9 mag, / 88

63 Coercizioni Se T compatibile con S: valori di tipo T sono ammessi dov è atteso un valore di tipo S Conversione operata dalla m. astratta (o dal compilatore) Implementazioni Stessa rappresentazione livello sintattico, nulla da aggiungere Compatibilità canonica codice di conversione (a run-time) aggiunto dalla m. astratta es. da int a float Corrispondenza arbitraria es. dominio di T sovrainsieme di quello di S la macchina astratta inserisce codice per la conversione (e controllo dinamico per la type safety) es.: T è int e S è un intervallo di interi Strutture Dati 9 mag, / 88

64 Conversioni esplicite Annotazioni nel linguaggio che specificano il tipo in cui trasformare un valore di un altro tipo Possibilità Indicazione sintattica S s = (S)t; Indicazione per la macchina astratta (come prima) Vantaggi In genere, possibile anche quando basterebbe la compatibilità Maggiore leggibilità Indipendenza dal contesto sintattico Utili ad overloading e polimorfismo Strutture Dati 9 mag, / 88

65 Polimorfismo Sistema di tipi monomorfo: ogni oggetto ha un solo tipo Sistema di tipi polimorfo: ogni oggetto può avere più tipi Casi di polimorfismo in molti linguaggi (anche datati) operatore + int x int -> int oppure float x float -> float funzione length: non dipende dal tipo di vettore Funzioni polimorfiche indipendenti da tipi specifici Es. ordinamento di vettori (di interi, caratteri, ecc.) con uso di tipi generici: void sort(<t>[] v) Tipologie: Polimorfismo ad hoc (overloading) Polimorfismo universale p. parametrico p. di sottotipo o inclusione Strutture Dati 9 mag, / 88

66 Polimorfismo [... cont.] Polimorfismo ad hoc: overloading Nome sovraccaricato quando vi corrispondono più oggetti L informazione del contesto aiuta a decidere staticamente es. operatore + es. funzioni con ugual nome ma tipo e numero di parametri differente Polimorfismo apparente Legato ai nomi più che agli oggetti del linguaggio es. funzioni distinte / codice distinto Può essere gestito con una fase di pre-processing assegna un nome interno diverso ai nomi sovraccarichi Overloading Coercizione es. + polimorfico 1 + 2, , , Strutture Dati 9 mag, / 88

67 Polimorfismo [... cont.] Polimorfismo parametrico universale: un valore può assumere tanti tipi diversi, ottenuti per istanziazione di un unico schema universale Codice di gestione unico che lavora uniformemente le differenze non contano Istanziazione automatica: compilatore o macchina astratta in base al contesto Strutture Dati 9 mag, / 88

68 Polimorfismo [... cont.] Esempi p. universale Valore null vale per tutti i tipi puntatore (T * ) Tipo indicabile con <T> * void sort(<t>[] v) funzione di tipo <T>[]->void Funzione di swap() chiamata da sort() void swap(reference <T>, reference <T>) e istanziazione 1 int * k = null; 2 char v,w; 3 int i,j; swap(v,w); 6 swap(i,j); Strutture Dati 9 mag, / 88

69 Polimorfismo [... cont.] Polimorfismo parametrico universale p. esplicito annotazioni esplicite: <T> Template C++, Generics JAVA 5.0+ p. implicito operato dal modulo di inferenza dei tipi Ling. di scripting Ling. funzionali: l applicazione comporta istanziazione giusta es. fun Ide(x){return x;} è di tipo <T> -> <T> Funzioni di ordine superiore es. fun Comp(f,g,x){return f(g(x));} di tipo ((<S> -> <T>) (<R> -> <S>) <R>) -> <T> Strutture Dati 9 mag, / 88

70 Polimorfismo [... cont.] Non tutte le istanziazioni dello schema universale sono ammissibili, quindi: forma limitata tipica degli OOL una forma di compatibilità strutturale Nel p. universale di sottotipo: un valore può assumere una molteplicità di tipi diversi, ottenuti istanziando, in uno schema generale, un parametro con sottotipi di un tipo assegnato esprimibile tramite la notazione: S :< T.S -> void dove :< indica la rel. di sottotipo istanziabile con qualunque sottotipo S di T Strutture Dati 9 mag, / 88

71 Polimorfismo [... cont.] Implementazione gestione statica: a linking-time istanziazione funzioni polimorfe (in base ai tipi) produzione codice opportuno (più copie del template) e collegamento efficiente come per le funzioni non polimorfiche es. template C++ gestione dinamica: unica versione del codice generata rappresentazione più complessa: invece di allocare i dati sul RdA vengono allocati loro descrittori (dim., struttura, ind.) più flessibile ma meno efficiente a run-time es. in ML Strutture Dati 9 mag, / 88

72 Controllo di tipo Il controllo di tipo determina e controlla la compatibilità dei tipi degli oggetti: assegnazioni, dichiarazioni, uso parametri, conversioni,... statico: modulo del compilatore (semantica statica) segue l albero sintattico (bottom-up) determina e trasmette le informazioni sui tipi degli oggetti coinvolti dinamico: modulo di supporto al run-time Strutture Dati 9 mag, / 88

73 Inferenza di tipo Inferenza: deduzione dei tipi coinvolti in assenza di informazione esplicita spesso sostituisce il controllo di tipo es. in JAVASCRIPT, ML,... quando non si può determinare subito il tipo si utilizzano variabili di tipo: a es. fun f(n) { return n+1; } si può dedurre che f è di tipo int-> int caso difficile: fun g(v) { return v; } polimorfa Strutture Dati 9 mag, / 88

74 Inferenza di tipo [... cont.] Algoritmo: dato l albero di derivazione assegnare un tipo/var. di tipo ad ogni nodo (anche variabile) risalire l albero imponendo vincoli (uguaglianze di tipo) usare l algoritmo di unificazione per risolvere i vincoli Esempio fun f(n) { return n+1; } <funzione> a = int->int fun f ( <par> ) <blocco> z=int n { <istruzione> } return <espr> ; x = y = int x n + 1 y Strutture Dati 9 mag, / 88

75 Agenda 1 Tipi e sistemi di tipi 2 Tipi scalari 3 Tipi Composti 4 Relazioni fra tipi 5 Strutture dati e gestione della memoria Dangling reference Garbage collection Strutture Dati 9 mag, / 88

76 Dangling reference Esempio 1 int * p = malloc(); 2 int * q = malloc(); 3 4 * p = 123; 5 * q = 321; 6 7 q=p; 8 9 free(p); // q dangling reference! Strutture Dati 9 mag, / 88

77 Dangling reference - tombstone Si aggiunge un livello di indirizzamento indiretto, quello della tombstone allocazione di nuovo oggetto su heap/pila: crea tombstone copia tra puntatori: copia indirizzi di tombstone deallocazione (da heap/pila): inserimento valore nullo speciale Strutture Dati 9 mag, / 88

78 Dangling reference - tombstone [... cont.] p = malloc(); q = malloc(); * p = 123; * q = 321; q = p; free(p); p RIP q Osservazioni spazio: memoria aggiuntiva cimitero: zona di memoria speciale per le tombstone riuso delle tombstone (garbage collection) tempo: doppia dereferenziazione eventualmente + garbage collection Strutture Dati 9 mag, / 88

79 Dangling reference locks & keys lucchetto parola in memoria inizializzata con valore casuale associata all oggetto allocato chiave parola in memoria corrispondente ad un lucchetto puntatore = indirizzo + chiave allocazione di nuovo oggetto su heap: crea lucchetto copia tra puntatori: copia di indirizzo e chiave dereferenziazione: controllo che la chiave del puntatore apra il lucchetto (abbia lo stesso valore) deallocazione: inserimento valore nullo speciale nel lucchetto Strutture Dati 9 mag, / 88

80 Dangling reference locks & keys [... cont.] p = malloc(); q = malloc(); * p = 123; * q = 321; q = p; free(p); p q Osservazioni spazio: memoria aggiuntiva tempo : op. più efficienti che con il tombstone deallocazione automatica della mem. aggiuntiva Strutture Dati 9 mag, / 88

81 Garbage collection Deallocazione implicita GC: Storia dei LdP LISP 60 JAVA 90 Fasi (non necessariamente separate) distinguere gli oggetti utilizzati dagli altri per sicurezza politica conservativa recuperare la memoria degli oggetti non utilizzati Classificazione dei GC contatori di riferimenti marcatura mark & sweep mark & compact copia Strutture Dati 9 mag, / 88

82 Garbage collection contatori Un contatore (reference count) per ogni oggetto; solo per la m. astratta: inaccessibile al programmatore allocazione: inizializza il contatore a 1 assegnazione q = p; (o anche quando si esce da un ambiente locale con puntatori) incremento del contatore della var. puntata da p decremento del contatore della var. puntata da q deallocazione: quando un contatore raggiunge il valore 0 si può deallocare la memoria e restituirla alla lista libera Osservazioni se l oggetto da deallocare contiene puntatori applica la procedura ricorsivamente vantaggi: semplicità e incrementalità svantaggi: inefficienza; GC non funziona con str. circolari Strutture Dati 9 mag, / 88

83 Garbage collection mark & sweep mark sweep marcatura oggetti non in uso attraversando l heap a partire dai puntatori sulla pila (root set), visita in ampiezza/profondità degli oggetti referenziati, lungo gli archi rappresentati dai puntatori, etichettando gli oggetti attraversati come in uso deallocazione degli oggetti marcati come non in uso Osservazioni (svantaggi) non incrementale: parte quando la memoria si sta esaurendo frammentazione esterna inefficiente: tempo proporzionale alla dim. dell heap sfavorisce la località dei riferimenti in memoria Strutture Dati 9 mag, / 88

84 Garbage collection pointer reversal Per visitare agevolmente strutture concatenate (es. alberi) in fase di deallocazione occorre uno stack (ricorsione) Con il rovesciamento dei puntatori basta ricordare il nodo corrente e quello precedente A A B F / / B F / / C / D / / p.prec C / D / corrente E / / stack: A B C p.corr E / / Strutture Dati 9 mag, / 88

85 Garbage collection mark & compact Problema della frammentazione causato dal mark & sweep Fase di sweep = fase di compattamento oggetti spostati in zone di mem. contigue più passaggi necessari Osservazioni svantaggi più passaggi necessari: marcatura calcolo nuovi puntatori, spostamento,... vantaggi no frammentazione località dei riferimenti lista libera monoblocco Strutture Dati 9 mag, / 88

86 Garbage collection copia No fase marcatura: copia (e compattazione) dei blocchi vivi GC stop & copy: heap diviso in 2 semispazi (FromSpace,ToSpace) normalmente solo 1 in uso (FromSpace); memoria libera = unico blocco memoria esaurita: chiamata al GC a partire dal root set si copia (alg. di Cheney) nell altro semispazio (tospace), compattando quindi ToSpace e FromSpace si scambiano i ruoli Osservazioni vantaggi allocazione efficiente: soprattutto se è noto il fabbisogno degli oggetti vivi contemporaneamente no frammentazione Strutture Dati 9 mag, / 88

87 Garbage collection copia [... cont.] FromSpace ToSpace root set root set ToSpace FromSpace libera Strutture Dati 9 mag, / 88

88 Riferimenti Gabbrielli & Martini: Linguaggi di Programmazione, McGraw-Hill. 2a edizione. Cap. 10 Strutture Dati 9 mag, / 88

Programmazione II. Lezione 16. Daniele Sgandurra 14/12/2010.

Programmazione II. Lezione 16. Daniele Sgandurra 14/12/2010. Programmazione II Lezione 16 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 14/12/2010 1/29 Programmazione II Lezione 16 14/12/2010 Sommario 1 2/29 Programmazione II Lezione 16 14/12/2010 Parte I 3/29

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 7 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 19 Marzo 2007 Tipo di dato Definition In

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione Corso di Laurea in Informatica Strutturare i dati Valeria Carofiglio (Questo materiale è una rivisitazione del materiale prodotto da Nicola Fanizzi) obiettivi Tipi e Sistemi

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 14 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Informatica Università degli Studi di Milano 23 Aprile 2013 Cosa servono i tipi durante l analisi

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

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

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free Variabili dinamiche Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free 1 Tipi di variabili in C In C è possibile classificare le variabili in

Dettagli

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi: Tipi di dato Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi: esprimere in modo sintetico la loro rappresentazione in memoria, e un insieme di operazioni ammissibili permettere

Dettagli

Programmazione II. Lezione 7. Daniele Sgandurra 9/11/2010.

Programmazione II. Lezione 7. Daniele Sgandurra 9/11/2010. Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione II Lezione 7 9/11/2010 Sommario 1 Gestione della Memoria 2/24 Programmazione II Lezione 7 9/11/2010

Dettagli

Astrazione Dati. Nicola Fanizzi. Linguaggi di Programmazione [010194] 10 mag, Dipartimento di Informatica Università degli Studi di Bari

Astrazione Dati. Nicola Fanizzi. Linguaggi di Programmazione [010194] 10 mag, Dipartimento di Informatica Università degli Studi di Bari Astrazione Dati Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 10 mag, 2016 Sommario 1 Astrazione dati Incapsulamento Esempio / ADT pila

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 13 Alberto Ceselli (thanks C. Braghin) alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 21 Aprile 2009

Dettagli

Linguaggi di Programmazione Corso C. Parte n.10 Gestione della Memoria. Nicola Fanizzi

Linguaggi di Programmazione Corso C. Parte n.10 Gestione della Memoria. Nicola Fanizzi Linguaggi di Programmazione Corso C Parte n.10 Gestione della Memoria Nicola Fanizzi (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Gestione della Memoria I moderni linguaggi

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

DISPENSE DI PROGRAMMAZIONE LINGUAGGI A TIPIZZAZIONE FORTE: IL COSTRUTTO DI TIPO. TIPI SEMPLICI: TIPI PRE-DEFINITI E TIPI DEFINITI DAL PROGRAMMATORE.

DISPENSE DI PROGRAMMAZIONE LINGUAGGI A TIPIZZAZIONE FORTE: IL COSTRUTTO DI TIPO. TIPI SEMPLICI: TIPI PRE-DEFINITI E TIPI DEFINITI DAL PROGRAMMATORE. DISPENSE DI PROGRAMMAZIONE Modulo 3 Linguaggi di programmazione: dati e controllo (Parte I) LINGUAGGI A TIPIZZAZIONE FORTE: IL COSTRUTTO DI TIPO. TIPI SEMPLICI: TIPI PRE-DEFINITI E TIPI DEFINITI DAL PROGRAMMATORE.

Dettagli

Informatica 3. LEZIONE 5: Tipi di dati

Informatica 3. LEZIONE 5: Tipi di dati Informatica 3 LEZIONE 5: Tipi di dati Modulo 1: Tipi e costruttori di tipo Modulo 2: Tipi definiti dall utente e tipi di dati astratti Modulo 3: Sistemi di tipi Informatica 3 Lezione 5 - Modulo 1 Tipi

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

Informatica 3. Informatica 3. LEZIONE 5: Tipi di dati. Lezione 5 - Modulo 1. Tipi predefiniti. Introduzione

Informatica 3. Informatica 3. LEZIONE 5: Tipi di dati. Lezione 5 - Modulo 1. Tipi predefiniti. Introduzione Informatica 3 Informatica 3 LEZIONE 5: Tipi di dati Lezione 5 - Modulo 1 Modulo 1: Tipi e costruttori di tipo Modulo 2: Tipi definiti dall utente e tipi di dati astratti Modulo 3: Sistemi di tipi Tipi

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

Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente. per variabili di tipo array, in cui dover

Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente. per variabili di tipo array, in cui dover ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente la loro esistenza deve essere prevista e dichiarata a priori Questo può rappresentare un problema

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori

Dettagli

Macchine astratte, linguaggi, interpretazione, compilazione

Macchine astratte, linguaggi, interpretazione, compilazione Macchine astratte, linguaggi, interpretazione, compilazione 1 Macchine astratte una collezione di strutture dati ed algoritmi in grado di memorizzare ed eseguire programmi componenti della macchina astratta

Dettagli

Programmazione II. Lezione 9. Daniele Sgandurra 16/11/2010.

Programmazione II. Lezione 9. Daniele Sgandurra 16/11/2010. Programmazione II Lezione 9 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 16/11/2010 1/31 Programmazione II Lezione 9 16/11/2010 Sommario 1 Gestione della Memoria 2/31 Programmazione II Lezione 9 16/11/2010

Dettagli

Lezione 6 Introduzione al C++ Mauro Piccolo

Lezione 6 Introduzione al C++ Mauro Piccolo Lezione 6 Introduzione al C++ Mauro Piccolo piccolo@di.unito.it Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi. Programmi. Ciclo di sviluppo di programmi. Obiettivo

Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi. Programmi. Ciclo di sviluppo di programmi. Obiettivo Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi Istruzioni variabili e tipi Sottoprogrammi Strutture di controllo Ricorsione 1 2 Obiettivo Ciclo di sviluppo di programmi Risoluzione

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

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double Il cast Cast implicito Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto Per esempio: byte short int long float double int x = 10; float f; f = x; Il valore di

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

Allocazione dinamica della memoria

Allocazione dinamica della memoria Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati

Dettagli

Informatica 3. LEZIONE 2: Sintassi e semantica

Informatica 3. LEZIONE 2: Sintassi e semantica Informatica 3 LEZIONE 2: Sintassi e semantica Modulo 1: Introduzione ai concetti di sintassi e semantica Modulo 2: Il concetto di binding Modulo 3: Variabili Modulo 4: Routine Convenzioni dei nomi Informatica

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

PROGRAMMAZIONE Gestione della Memoria e Garbage Collection

PROGRAMMAZIONE Gestione della Memoria e Garbage Collection PROGRAMMAZIONE 2 23. Gestione della Memoria e Garbage Collection 1 Gestione della memoria Static area dimensione fissa, contenuti determinati e allocati a tempo di compilazione Runtime stack dimensione

Dettagli

Informatica e Tecnologie per la Produzione del Software Crediti formativi 7+2

Informatica e Tecnologie per la Produzione del Software Crediti formativi 7+2 Principali informazioni sull insegnamento Titolo insegnamento Linguaggi di programmazione Corso di studio Informatica e Tecnologie per la Produzione del Software Crediti formativi 7+2 Denominazione inglese

Dettagli

La sezione di dichiarazione delle costanti 1.2 I tipi elementari Classificazione dei tipi Il tipo integer Il tipo boolean

La sezione di dichiarazione delle costanti 1.2 I tipi elementari Classificazione dei tipi Il tipo integer Il tipo boolean Laboratorio di Programmazione A.A. 2000\2001 La sezione di dichiarazione delle costanti 1.2 I tipi elementari Classificazione dei tipi Il tipo integer Il tipo boolean Editazione a cura di: de Pinto E.

Dettagli

Indice. Prefazione. 3 Oggetti e Java 53

Indice. Prefazione. 3 Oggetti e Java 53 Prefazione xv 1 Architettura dei calcolatori 1 1.1 Calcolatori e applicazioni 1 1.1.1 Alcuni esempi di applicazioni 3 1.1.2 Applicazioni e interfacce 4 1.2 Architettura dei calcolatori 7 1.2.1 Hardware

Dettagli

Dichiarazioni e tipi predefiniti nel linguaggio C

Dichiarazioni e tipi predefiniti nel linguaggio C Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo. Premessa Programmi provati sul compilatore Borland C++ 1.0 Altri compilatori:

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

ALGORITMI E STRUTTURE DATI

ALGORITMI E STRUTTURE DATI Esercitazioni del corso di: ALGORITMI E STRUTTURE DATI Tutor: Francesca Piersigilli email: francesca.piersigilli@unicam.it Strutture dati elementari Tecniche di organizzazione dei dati: scelta della struttura

Dettagli

Informatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione

Informatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione Informatica 3 Informatica 3 LEZIONE 2: Sintassi e semantica Lezione 2- Modulo 1 Modulo 1: Introduzione ai concetti di sintassi e semantica Modulo 2: Il concetto di binding Modulo 3: Variabili Modulo 4:

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

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione Corso di Laurea in Informatica Astrarre sui dati Valeria Carofiglio (Questo materiale è una rivisitazione del materiale prodotto da Nicola Fanizzi) Obiettivi tipi di dato astratti

Dettagli

Lezione March 26-28, Lezione 18-19

Lezione March 26-28, Lezione 18-19 March 26-28, 2012 Tipi di Dati e Tipi del Linguaggio Terminologia: Tipi (o classi) di dato e Tipi del linguaggio Tipi di Dato: Proprietà Generali Scalari Strutturati Sistemi di deallocazione di memoria

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

Il puntatore. Il puntatore

Il puntatore. Il puntatore Il puntatore È un tipo scalare, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Il dominio di una variabile di tipo puntatore è un insieme di indirizzi: Il valore di una

Dettagli

Liste concatenate e allocazione dinamica

Liste concatenate e allocazione dinamica Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2017/2018 Calendario delle lezioni Ogni lezione consta di una spiegazione assistita da slide,

Dettagli

! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente

! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente ! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente!!la loro esistenza deve essere prevista e dichiarata a priori! Questo può rappresentare un problema soprattutto per variabili

Dettagli

Programmazione I - corso B a.a prof. Viviana Bono

Programmazione I - corso B a.a prof. Viviana Bono Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 12 Riepilogo e complementi sui tipi Ripasso del sistema di tipi

Dettagli

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

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

Dettagli

Il linguaggio C Variabili e tipi di dato primitivi

Il linguaggio C Variabili e tipi di dato primitivi Il linguaggio C Variabili e tipi di dato primitivi main() { /*definizioni variabili: */ char y= a ; /*codice(a)=97*/ int x,x,y; unsigned int Z; float SUM; double r; /* parte istruzioni: */ X=27; Y=4; Z

Dettagli

Nomi. Nomi e ambiente. Nomi e oggetti denotabili. Sintassi

Nomi. Nomi e ambiente. Nomi e oggetti denotabili. Sintassi Nomi Nomi e ambiente Blocchi e regole di scoping Meccanismi di astrazione fondamentale per gestire la complessità del software. Uso dei nomi: un meccanismo di astrazione. Nome: sequenza di caratteri usata

Dettagli

Macchine Astratte. Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari. Linguaggi di Programmazione feb, 2016

Macchine Astratte. Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari. Linguaggi di Programmazione feb, 2016 Macchine Astratte Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione 010194 29 feb, 2016 Sommario 1 Introduzione Macchina astratta Interprete Implementazione

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

cap.6 del testo a cosa servono i tipi nei linguaggi di programmazione cos è un linguaggio type safe

cap.6 del testo a cosa servono i tipi nei linguaggi di programmazione cos è un linguaggio type safe cap.6 del testo a cosa servono i tipi nei linguaggi di programmazione cos è un linguaggio type safe 1 tipi statici e tipi dinamici in generale i LP hanno tipi statici, cioè ogni variabile ha un tipo dichiarato

Dettagli

Corso di Fondamenti di Informatica Università degli Studi di Cassino

Corso di Fondamenti di Informatica Università degli Studi di Cassino Un linguaggio ad alto livello deve offrire degli strumenti per: rappresentare le informazioni di interesse dell algoritmo definire le istruzioni che costituiscono l algoritmo Cominciamo ad analizzare la

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 2 I tipi di dato Prerequisiti Concetto di relazione e funzione Concetto di insieme numerico Operatori aritmetici Operatori relazionali 2 Introduzione Abbiamo visto che un

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

Strutture Dati. Nicu Sebe. Informatica Nicu Sebe 1 / 27

Strutture Dati. Nicu Sebe. Informatica Nicu Sebe 1 / 27 Strutture Dati Nicu Sebe Informatica Nicu Sebe 1 / 27 Dati e Tipi di Dati e Spazi Una variabile è caratterizzata dal suo Tipo Specifica i valori che può assumere (Insieme di Definizione) Specifica a quanti

Dettagli

Il potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO

Il potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T4 A1 Allocazione dinamica 1 Prerequisiti Programmazione elementare Programmazione ad oggetti Dati semplici e strutturati 2 1 Introduzione In molti problemi capita di non conoscere

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

Programmazione con Java

Programmazione con Java Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:

Dettagli

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc() Allocazione Statica Finora abbiamo visto che le variabili sono sempre definite staticamente. Questo è un limite perché la loro esistenza deve essere prevista e dichiarata a priori. In particolare per variabili

Dettagli

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Primo esempio di un programma Java Semplicissimo programma

Dettagli

Caratteristiche di un linguaggio ad alto livello

Caratteristiche di un linguaggio ad alto livello Caratteristiche di un linguaggio ad alto livello Un linguaggio ad alto livello deve offrire degli strumenti per: rappresentare le informazioni di interesse dell algoritmo definire le istruzioni che costituiscono

Dettagli

Esercizi. Grammatiche, scoping. Univ. di Udine. Grammatiche, scoping (Univ. di Udine) Esercizi 1 / 29

Esercizi. Grammatiche, scoping. Univ. di Udine. Grammatiche, scoping (Univ. di Udine) Esercizi 1 / 29 Esercizi Grammatiche, scoping Univ. di Udine Grammatiche, scoping (Univ. di Udine) Esercizi 1 / 29 Linguaggi e grammatiche Definire i numeri divisibili per 2 in base 3, come grammatica libera da contesto

Dettagli

Corso di Fondamenti di Informatica e Laboratorio

Corso di Fondamenti di Informatica e Laboratorio Corso di Fondamenti di Informatica e Laboratorio Corsi di Laurea Ingegneria Informatica (O-Z) Corsi di Laurea Ingegneria delle Telecomunicazioni - (A-Z) (ordinamento 03) A.A. 2009-2010 Prof. Giuseppe Mangioni

Dettagli

Tipi user-defined. parte dichiarativa globale:

Tipi user-defined. parte dichiarativa globale: Il C mette a disposizione un insieme di tipi di dato predefiniti (tipi built-in) e dei meccanismi per definire nuovi tipi (tipi user-defined) Vediamo le regole generali che governano la definizione di

Dettagli

LINGUAGGI DI PROGRAMMAZIONE!

LINGUAGGI DI PROGRAMMAZIONE! LINGUAGGI DI PROGRAMMAZIONE! Il potere espressivo di un linguaggio è! caratterizzato da:! quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente)! quali istruzioni

Dettagli

Gestione della memoria

Gestione della memoria Gestione della memoria Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2017 2018 Allocazione di memoria A una variabile puntatore si può assegnare

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

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

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input

Dettagli

La programmazione nel linguaggio C. Liste

La programmazione nel linguaggio C. Liste Liste È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse. Esempi: sequenza di interi (23 46 5 28 3) sequenza di caratteri ( x r f ) sequenza di

Dettagli

Linguaggi e grammatiche. Esercizi. Linguaggi e grammatiche. Linguaggi e grammatiche

Linguaggi e grammatiche. Esercizi. Linguaggi e grammatiche. Linguaggi e grammatiche Esercizi Grammatiche, scoping Univ. di Udine Grammatiche, scoping (Univ. di Udine) Esercizi 1 / 29 Linguaggi e grammatiche Definire i numeri divisibili per 2 in base 3, come grammatica libera da contesto

Dettagli

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Primo esempio di un programma Java Semplicissimo programma

Dettagli

Strutture Dati. Luca Abeni

Strutture Dati. Luca Abeni Strutture Dati Luca Abeni Dati e Tipi di Dati Una variabile è caratterizzata dal suo Tipo Specifica i valori che può assumere (Insieme di Definizione) Specifica a quanti byte di memoria la variabile è

Dettagli

Liste concatenate e allocazione dinamica

Liste concatenate e allocazione dinamica Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide, e seguita

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

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

ARRAY DI PUNTATORI. ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori

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

Dettagli

La gestione della memoria. Gestione della memoria. Uso della Memoria RAM

La gestione della memoria. Gestione della memoria. Uso della Memoria RAM La gestione della memoria Gestione della memoria Stack di attivazione, Heap Come il compilatore-interprete, organizza i dati necessari all esecuzione del programma. Alcuni aspetti organizzativi già visti

Dettagli

Tipi di dato primitivi

Tipi di dato primitivi Tipi di dato primitivi (oltre int) Tipi di dato primitivi int (già trattati) Valori logici (ricordati) Valori reali Valori carattere Informatica - A.A. 2009/2010 - Tipi di dato 2 1 Valori logici (il caso

Dettagli

Gli oggetti. Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo. Incapsulamento. Oggetti. Contatore. Invio di Messaggi

Gli oggetti. Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo. Incapsulamento. Oggetti. Contatore. Invio di Messaggi Gli oggetti Linguaggi di Programmazione: Paradigmi di Programmazione (Sperimentazioni) Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-149 Torino Ogni

Dettagli

Parte 3. Puntatori. [S. Dalí The temptation of St. Anthony, 1946] - AA. 2015/16 3.1

Parte 3. Puntatori. [S. Dalí The temptation of St. Anthony, 1946] - AA. 2015/16 3.1 Parte 3 Puntatori [S. Dalí The temptation of St. Anthony, 1946] 3.1 3.2 Puntatori Approfondimento rispetto alla trattazione vista nel corso precedente Finora come avete utilizzato i puntatori? Principalmente

Dettagli

Gestione della memoria

Gestione della memoria Garbage collection Gestione della memoria Static area dimensione fissa, contenuti determinati e allocati a compilazione Run-time stack dimensione variabile (record attivazione) gestione sottoprogrammi

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 2017

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

VARIABILE STRUTTURATA

VARIABILE STRUTTURATA DISPENSE DI PROGRAMMAZIONE Modulo 3 Parte 2 Ha collaborato alla editazione Giuseppe Porcelli VARIABILE STRUTTURATA Una variabile di tipo strutturato possiede più di una singola COMPONENTE. Per definire

Dettagli

Espressioni ed operatori in C

Espressioni ed operatori in C Espressioni ed operatori in C Espressioni Il C è un linguaggio basato su espressioni Una espressione è una notazione che denota un valore mediante un processo di valutazione Una espressione può essere

Dettagli

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Elementi di Base Parte 3 Istruzioni di Assegnazione G. Mecca M. Samela Università della Basilicata Elementi di Base >> Sommario Sommario Introduzione Istruzioni

Dettagli

Il linguaggio C. Puntatori e Array

Il linguaggio C. Puntatori e Array Il linguaggio C Puntatori e Array Puntatori I puntatori sono variabili i cui valori sono indirizzi di locazioni in cui sono memorizzate altre variabili architettura a 32 bit: 232-1 indirizzi, ma non si

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

Puntatori. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Puntatori. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico Puntatori Stefano Ferrari Università degli Studi di Milano stefanoferrari@unimiit Programmazione anno accademico 2016 2017 Puntatori I processori organizzano la memoria in N celle di dimensione fissata

Dettagli

Fondamenti di programmazione parte 2. Elementi di informatica IGLP

Fondamenti di programmazione parte 2. Elementi di informatica IGLP Fondamenti di programmazione parte 2 Elementi di informatica IGLP Questo insieme di trasparenze è stato ideato e realizzato dai ricercatori e professori del Dipartimento di Informatica e Sistemistica dell

Dettagli