Verifica di programmi C con SPIN

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Verifica di programmi C con SPIN"

Transcript

1 Verifica di programmi C con SPIN

2 Importanza delle astrazioni Astrazione (perdita di dettaglio) è un concetto cruciale nella verifica Per individuare una buona astrazione bisogna tener conto sia della proprietà da verificare che delle risorse a disposizione Non tutto può essere automatizzato il giudizio umano è necessario per effettuare delle scelte effettuate le scelte il resto del procedimento di astrazione può essere meccanizzato Obiettivo: estrarre automaticamente un modello astratto dal source code, seguendo funzioni di astrazione definite dall'utente

3 Estrazione di modelli PROMELA da C #include <stdio.h> int main(void) { int lower, upper, step; float fahr, celsius; lower = 0; upper = 300; step = 20; fahr = lower; } while (fahr <= upper) { } celsius = (5.0/9.0) * (fahr ); printf("%4.0f %6.1f\n", fahr, celsius); fahr = fahr + step;

4 Control-flow: nessun problema Strutture di controllo di Promela (eccetto chiamate ricorsive) sono tipiche della programmazione strutturata fahr = lower; do od :: (fahr <= upper) -> celsius = (5/9) * (fahr-32); printf("%d %d\n", fahr, celsius); fahr = fahr + step; :: else -> break

5 Costrutti e definizioni non supportate in Promela Occorre basarsi sull'astrazione Ad es. possiamo definire un'astrazione del tipo: "ogni float è mappato a int" o addirittura "a bool" Questo non è sempre la cosa più conveniente a volte è preferibile avere un modello che sia il più vicino possibile al sistema ad es. possiamo mantenere i dati e le computazioni su float Possiamo sfruttare il fatto che SPIN genera codice C da Promela (pan.c) per eseguire la verifica Infatti, è possibile includere parti di codice C in un programma Promela con l'istruzione c_code

6 Parole chiave c_code e c_expr c_code { celsius = (5/9) * (fahr-32); }; il codice contenuto nel blocco preceduto da c_code, viene considerato trusted da SPIN è quindi non viene verificato e non viene neanche analizzato dal suo parser versione con guardia: c_code [fahrtocelsius]{ celsius = (5/9) * (fahr-32); }; dove fahrtocelsius è una qualsiasi espressione condizionale se fahrtocelsius è vera, allora si esegue il codice in {.. } altrimenti, l'esecuzione prosegue come se si violasse un'asserzione c_expr è analogo a c_code, usato per espressioni che non possono essere espresse direttamente in Promela

7 Parola chiave c_state possiamo includere variabili usate nella porzione di codice in C nello stato del modello Promela c_state "float fahr" "Local main" c_state "float celsius" "Local main" dicono che le dichiarazioni "float fahr" e "float celsius" devono essere inserite nella dichiarazione del proctype main con visibilità locale in questo caso, il blocco c_code di prima va modificato per dire che celsius e fahr sono variabili importate definite localmente in proctype main c_code { Pmain->celsius = (5/9) * (Pmain->fahr-32); } c_state può comparire solo fuori da ogni proctype (globale);

8 Parola chiave c_state c_state può essere seguito da 2 o 3 stringhe tra doppi apici la prima riporta la dichiarazione in C della variabile la seconda riporta lo scope della variabile la terza è opzionale e viene usata per specificare un valore iniziale sono possibili 3 scope: Global, Local e Hidden. se viene usato Local, questo deve essere seguito dal nome del proctype in cui la dichiarazione deve comparire se viene usato "Hidden" la variabile sarà dichiarata globale ma ma non farà parte dello stato del modello

9 Parola chiave c_decl c_decl è usato per dichiarare nuovi tipi in C che vengono usati in altri punti del codice (tipi definiti con typedef) ad es. c_decl { typedef struct Pair { int x; int y;} Pair; } ma anche c_decl { \#include "types.h"} può comparire solo fuori da ogni proctype (globale);

10 Parola chiave c_track c_track è usato per dichiarare che una variabile (definita in qualsiasi modo) o più in generale un pezzo di memoria fa parte dello stato del modello ha due parametri: indirizzo iniziale e taglia (in numero di byte) della memoria da considerare ad es. c_code { Pair p;} ; c_track "&p" "sizeof(pair)" può comparire solo fuori da ogni proctype (globale); SPIN codifica il verificatore in modo che ogni variabile dichiarata c_track viene copiata e cancellata dallo stato del modello nelle esplorazioni dello spazio degli stati cancellazioni/copie impiegano tempo preferibile usare c_state se possibile

11 Note le primitive di Promela per includere codice C sono pensate per l'estrazione di modelli da programmi C i frammenti di codice C non sono analizzati da SPIN né come parsing né come verifica il codice viene inglobato nel verificatore generato da SPIN e quindi vengono dati in pasto direttamente al compilatore (il significato è ottenuto tramite il compilatore C) quando viene eseguita una traccia d'errore tuttavia questi frammenti di codice C vengono eseguiti e quindi gli stati (incluse le variabili importate dai frammenti) possono essere visualizzati in tutte le componenti

12 Estrazione automatica di modelli: Modex Modello estratto con Modex da esempio conversione temperature: c_state "float fahr" "Local main" c_state "float celsius" "Local main" active proctype main() { } int lower; int upper; int step; c_code { Pmain->lower=0; }; c_code { Pmain->upper=300; }; c_code { Pmain->step=20; }; c_code { Pmain->fahr=Pmain->lower; }; do :: c_expr { (Pmain->fahr <= Pmain->upper) }; c_code { Pmain->celsius = ((5.0/9.0)*(Pmain->fahr-32.0)); }; c_code { Printf("%4.0f %6.1f\n", Pmain->fahr, Pmain->celsius); }; c_code { Pmain->fahr = (Pmain->fahr+Pmain->step); }; :: else -> break od

13 Note modello costruito da Modex: fa in modo che tutte le variabili abbiano il prefisso appropriato usa Printf una funzione predefinita di SPIN che: sopprime le chiamate a printf quando SPIN visita lo state space durante la verifica esegue printf quando avviene simulazione su traccia d'errore con file.trail SPIN non controlla il contenuto del codice C incorporato nel modello Promela (possono annidarsi errori) le versioni di c_code e c_expr con condizione, possono essere usate per testare precondizioni (embedded assertions)

14 Embedded assertion c_state "int *ptr;" "Local main"... c_code [Pmain->ptr!= NULL] { *(Pmain->ptr) = 5; }; codice viene eseguito a patto che il puntatore non sia nullo c_code { int *ptr; int x[256]; int j; };... c_code { ptr = x; }; if :: c_expr [j >= 0 && j < 256] { x[j]!= 25 } -> c_code [ptr >= x && ptr < &(x[256])] { *ptr = 25; } :: else fi prima condizione testa che indice array è entro i limiti seconda condizione stessa cosa ma per accesso tramite puntatore

15 Traduzione di default di Modex Modex se non vengono passate delle astrazioni definite dall'utente esegue una trasformazione di default: ogni instruzione del codice che non ha un equivalente in Promela viene semplicemente inglobata usando le primitive c_code, c_expr, c_state, c_decl e c_track le astrazioni per le istruzioni non esprimibili in Promela possono essere espresse in forma tabulare (lookup table) prima colonna contiene l'istruzione C seconda colonna come lo vogliamo rimpiazzare nel modello

16 Modex lookup table di default tavola usata da Modex per l'estrazione del modello dal programma di conversione temperature: 1. (fahr<=upper) 2.!(fahr<=upper) 3. lower=0 4. upper= step=20 6. fahr=lower 7. fahr=(fahr+step) 8. celsius=((5/9)*(fahr-32)) 9. printf("%4.0f %6.1f\n",fahr,celsius) c_expr { (Pmain->fahr<=Pmain->upper) } else c_code { Pmain->lower=0; } c_code { Pmain->upper=300; } c_code { Pmain->step=20; } c_code { Pmain->fahr=Pmain->lower; } c_code { Pmain->fahr=(Pmain->fahr+Pmain->step); } c_code { Pmain->celsius=((5.0/9.0)*(Pmain->fahr-32.0)); } c_code { Printf("%4.0f %6.1f\n", \ Pmain->fahr, Pmain->celsius); }

17 Sovrascrittura delle traduzioni di default ogni regola di default usata da Modex può essere forzata stabilendo una nuova regola di conversione Ad es. rimpiazziamo le variabili con una versione int: Declare int fahr main Declare int celsius main Declare int upper Declare int lower Declare int step main main main Declare deve essere seguito da tre campi separati da tab nome tipo di dati nome variabile scope della variabile (se è locale indicare nome proctype, si usa la parola chiave Global per globale)

18 Sovrascrittura delle traduzioni di default per effetto della nuova definizione molte istruzioni del programma C possono essere interpretate direttamente in Promela si usa la parola chiave keep Le prime 7 entry della tabella diventano: 1. (fahr<=upper) 2.!(fahr<=upper) 3. lower=0 4. upper= step=20 6. fahr=lower 7. fahr=(fahr+step) keep else keep keep keep keep keep

19 Sovrascrittura delle traduzioni di default l'istruzione "celsius=((5/9)*(fahr-32))" deve essere modificata in "celsius=((fahr-32)*5)/9" in quanto ora "/" è una divisione intera nella printf occorre sostituire i marcatori di conversione con %d 8. celsius=((5/9)*(fahr-32)) 9. printf("%4.0f %6.1f\n",fahr,celsius) regola seguita da Modex: cerca per una entry nella prima colonna della tabella fornita dall'utente se trova il testo ricercato, usa la traduzione data altrimenti usa la regola di default celsius=((fahr-32)*5)/9 printf("%d %d\n",fahr,celsius)

20 Modello ottenuto con nuove regole active proctype main() { int step; int lower; int upper; int celsius; int fahr; lower = 0; upper = 300; step = 20; fahr = lower; do :: (fahr<=upper); celsius = ((fahr-32)*5)/9; printf("%d %d\n", fahr, celsius); fahr=(fahr+step) :: else -> break od }

21 Astrazione di programmi astrazione è una funzione α: dominio concreto dominio astratto ad es.: funzione definita tramite una Modex lookup table P: programma del dominio concreto ad es.: programma C α(p): programma del dominio astratto ottenuto tramite α ad es.: modello Promela di P ottenuto tramite la lookup table α L: proprietà logica ad es.: formula LTL su simboli di P per effetto dell'astrazione L può non essere definita per α(p) e può necessitare trasformare consistentemente L in α(l) ad es.: L può far riferimento ad una program location cancellata da α α(l) è quindi un'astrazione di L, il corrispondente di L tramite α nel dominio astratto

22 Astrazione di programmi denotato con α l'inverso di un'astrazione α, si ha che per ogni istruzione s: s α(α(s)) Vale quanto segue: per ogni computazione π di P, α(π) definisce un'unica computazione di α(p) corrispondente e per ogni esecuzione di π' in α(p), α(π') definisce un insieme di sequenze di istruzioni di P corrispondenti Un'astrazione rimuove dettaglio: una sequenza di α(π') può non corrispondere ad alcuna esecuzione di P in ogni caso, esiste almeno una sequenza di α(π') che corrisponde ad esecuzione di P

23 Correttezza logica (soundness) Definizione: α è logicamente corretta rispetto a P e L se per ogni computazione π di P che soddisfa L la computazione α(π) di α(p) anche soddisfa α(l) un'astrazione che è logicamente corretta esclude i falsi positivi (se il modello astratto rivela un bug allora il programma concreto ha quel bug)

24 Correttezza logica (completeness) Definizione: α è logicamente completa rispetto a P e L se per ogni computazione astratta π di α(p) che soddisfa α(l) ogni computazione concreta di P in α(π) soddisfa L un'astrazione che è logicamente completa esclude i falsi negativi (se il modello astratto non presenta bug allora anche il programma concreto è esente da bug)

25 Selective data hiding metodo di astrazione corretto e completo rispetto ad ogni proprietà espressa in LTL si basa sulla capacità di individuare dei dati che sono irrilevanti rispetto alla proprietà da verificare e che quindi possono essere rimossi dal modello (insieme alle istruzioni che li usano) questo metodo può essere automatizzato attraverso un semplice algoritmo di slicing (SPIN ne implementa uno) si parte dalla formula e si individuano tutti i dati che sono direttamente utilizzati (simboli, etichette, variabili) poi si seguono le dipendenze nel programma e si accumulano nuovi dati fino a che non se possono più aggiungere tutti gli dati che non sono stati inseriti sono irrilevanti vengono cancellati insieme alle operazioni collegate

26 Selective data hiding con Modex cancellazione avviene rimpiazzando espressioni irrilevanti con true istruzioni irrilevanti con skip la caratteristica positiva di questo metodo è che le astrazioni ottenute sono sia corrette che complete la caratteristica negativa è che questo non necessariamente vale per proprietà che non possono essere espresse come LTL (ad es. assenza di deadlock)

27 Esempio: word count 1 chan STDIN; 2 int c, nl, nw, nc; 3 4 init { 5 bool inword = false; 6 7 do 8 :: STDIN?c -> 9 if 10 :: c == -1 -> break /* EOF */ 11 :: c == '\n' -> nc++; nl++ 12 :: else -> nc++ 13 fi; 14 if 15 :: c == ' ' c == '\t' c == '\n' -> 16 inword = false 17 :: else -> 18 if 19 ::!inword -> 20 nw++; inword = true 21 :: else /* do nothing */ 22 fi 23 fi 24 od; 25 assert(nc >= nl); 26 printf("%d\t%d\t%d\n", nl, nw, nc) 27 }

28 Modello ottenuto con SPIN 1 chan STDIN; 2 int c, nl, nw, nc; 3 4 init { do 8 :: STDIN?c -> 9 if 10 :: c == -1 -> break /* EOF */ 11 :: c == '\n' -> nc++; nl++ 12 :: else -> nc++ 13 fi; 14 if 15 :: true -> 16 skip 17 :: true -> 18 if 19 :: true-> 20 skip ; skip 21 :: true 22 fi 23 fi 24 od; 25 assert(nc >= nl); 26 printf("%d\t%d\n", nl, nc) 27 }

29 Selective restriction metodo di astrazione né corretto né completo può essere ugualmente utile in caso non esista un metodo sound/complete oppure non consente di ottenere modelli trattabili consiste nel limitare la verifica ad una restrizione del problema di partenza ad es. limitare la capacità dei buffer o il numero massimo di processi attivi è molto utile nella fase iniziale della verifica per studiare il problema su una variante del sistema di minore complessità

30 Data type abstraction metodo di astrazione logicamente corretto ma non necessariamente completo consiste nel ridurre il dominio di alcuni dati selezionati ad esempio modellare floating point con interi oppure interi con tre valori (positivo, zero, negativo) una simile astrazione può essere motivata dalla considerazione che le proprietà da verificare non dipendono dai valori effettivi ma dai valori astratti individuati astrarre i valori di alcune variabili può avere conseguenze anche su altre variabili si effettua un analisi delle dipendenze tra variabili e eventualmente si procede ad una modifica

31 Galois connection Siano: (V, ), (A, ): insiemi dotati di ordinamento parziale α: V A (astrazione) β: A V (concretizzazione) la coppia (α, β) è una Galois connection se: per ogni x V e per ogni y A, α(x) y sse x β(y) Sia γ una concretizzazione definita in modo che γ(y) α(y) Ogni astrazione α tale che (α, γ) è una Galois connection è logicamente completa

32 Esempio consideriamo la formula: nota: nella formula è importante il segno non il valore consideriamo il frammento di codice: (x>5); x=0; x++; possiamo usare una funzione di astrazione α che mappa ogni intero negativo a true e ogni altro intero a false definiamo la funzione di concretizzazione γ tale che: γ(true)=-1 e γ(false)=0 consideriamo come relazione d'ordine: per il dominio concreto : ordinamento per interi crescenti per il dominio astratto : true precede false Si può verificare che (α, γ) è una Galois connection, e quindi l'astrazione definita da α è logicamente completa

33 Esempio: trasformazione del codice tabella trasformazione codice: la formula diventa

34 Falsi negativi utilizzando metodi di astrazione che non sono logicamente completi (incomplete) si possono verificare dei falsi negativi i falsi positivi non sono un grosso problema in genere: con la simulazione guidata del controesempio trovato si può subito individuare l'informazione mancante che ha generato il falso positivo si modifica di conseguenza l'astrazione e si ripete l'analisi analizzare i falsi negativi è in genere molto più complicato

35 Esercizi verificare la correttezza di un programma C a scelta verificare la correttezza di un programma C che implementa il quicksort

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Esempio. chan request = [0] of { byte }; active proctype Server() { byte client; end: do :: request? client -> printf("client %d\n", client); od }

Esempio. chan request = [0] of { byte }; active proctype Server() { byte client; end: do :: request? client -> printf(client %d\n, client); od } Canali in Promela Sistemi distribuiti un sistema distribuito è costituito da un insieme di processi e un insieme di canali di comunicazione ogni processo rappresenta un nodo di computazione del sistema

Dettagli

Linguaggio C. Fondamenti. Struttura di un programma.

Linguaggio C. Fondamenti. Struttura di un programma. Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C La nascita del linguaggio C fu dovuta all esigenza di disporre di un Linguaggio ad alto livello adatto alla realizzazione

Dettagli

Alfabeto ed elementi lessicali del linguaggio C

Alfabeto ed elementi lessicali del linguaggio C Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2015-2016 Alfabeto ed elementi lessicali del linguaggio C Pietro Di Lena - pietro.dilena@unibo.it s t a t i c s h o r t l e g s ; i n

Dettagli

I tipi di dato astratti

I tipi di dato astratti I tipi di dato astratti.0 I tipi di dato astratti c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 001/00.0 0 I tipi di dato astratti La nozione di tipo di dato

Dettagli

Corso di Laurea in INFORMATICA

Corso di Laurea in INFORMATICA Corso di Laurea in INFORMATICA Algoritmi e Strutture Dati MODULO 2. Algebre di dati Dati e rappresentazioni, requisiti delle astrazioni di dati, costrutti. Astrazioni di dati e dati primitivi. Specifica

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

La selezione binaria

La selezione binaria Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Introduzione L esecuzione di tutte le istruzioni in sequenza può non è sufficiente per

Dettagli

Gestione dei File. dischi nastri cd

Gestione dei File. dischi nastri cd Gestione dei File Per mantenere disponibili i dati tra le diverse esecuzioni di un programma, questi si devono archiviare in file su memoria di massa (dati persistenti): dischi nastri cd Un file è un astrazione

Dettagli

Interpretazione astratta

Interpretazione astratta Interpretazione astratta By Giulia Costantini (819048) e Giuseppe Maggiore (819050) Contents Interpretazione astratta... 2 Idea generale... 2 Esempio di semantica... 2 Semantica concreta... 2 Semantica

Dettagli

Esercizi di programmazione in C

Esercizi di programmazione in C Esercizi di programmazione in C Esercizio 1 Scrivere un programma in linguaggio C che legga da tastiera una sequenza di lunghezza ignota a priori di numeri interi positivi. Il programma, a partire dal

Dettagli

Sottoprogrammi: astrazione procedurale

Sottoprogrammi: astrazione procedurale Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j

Dettagli

Breve riepilogo della puntata precedente:

Breve riepilogo della puntata precedente: Breve riepilogo della puntata precedente: 1. In C, il passaggio dei parametri alle funzioni avviene sempre per copia, ovvero il valore del parametro viene copiato all'interno della variabile che rappresenta

Dettagli

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti Nascita di Java L uscita di Java, verso la metà degli anni novanta, fu accolta con molto entusiasmo dalla comunità dei programmatori e dei provider di servizi internet perché permetteva agli utenti del

Dettagli

Tipi di Dato Ricorsivi

Tipi di Dato Ricorsivi Tipi di Dato Ricorsivi Luca Abeni September 2, 2015 1 Tipi di Dato Vari linguaggi di programmazione permettono all utente di definire nuovi tipi di dato definendo per ogni nuovo tipo l insieme dei suoi

Dettagli

Analizzatore lessicale o scanner

Analizzatore lessicale o scanner Analizzatore lessicale o scanner Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Lo scanner, attraverso un esame carattere per carattere dell'ingresso,

Dettagli

Unità B3 Strutture di controllo

Unità B3 Strutture di controllo (A) CONOSCENZA TERMINOLOGICA Dare una breve descrizione dei termini introdotti: I/O su console Package Blocco di controllo Oggetto System.out Oggetto System.in Oggetto Tastiera Metodo readline() Strutture

Dettagli

Corso di Esercitazioni di Programmazione

Corso di Esercitazioni di Programmazione Corso di Esercitazioni di Programmazione Introduzione Dott.ssa Sabina Rossi Informazioni Pagina web del corso: News Orari Mailing list Lezioni Esercitazioni Date esami Risultati esami.. http://www.dsi.unive.it/~prog1

Dettagli

Algebra Booleana ed Espressioni Booleane

Algebra Booleana ed Espressioni Booleane Algebra Booleana ed Espressioni Booleane Che cosa è un Algebra? Dato un insieme E di elementi (qualsiasi, non necessariamente numerico) ed una o più operazioni definite sugli elementi appartenenti a tale

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

INFORMATICA 1 L. Mezzalira

INFORMATICA 1 L. Mezzalira INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

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

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 18 dicembre 2007 Esercizio 1: rappresentazione di una tabella di occorrenze L obiettivo è quello di rappresentare in modo efficiente

Dettagli

Problem solving elementare su dati vettoriali

Problem solving elementare su dati vettoriali Problem solving elementare su dati vettoriali Introduzione Verifiche su sequenze di dati Selezione o ricerca di dati 2 2006 Politecnico di Torino 1 Introduzione (1/2) I problemi di verifica consistono

Dettagli

Esercitazione 3. Corso di Fondamenti di Informatica

Esercitazione 3. Corso di Fondamenti di Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 3 Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti

Dettagli

LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B

LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B 23.XI.2012 VINCENZO MARRA Indice Esercizio 1 1 Menu 1 Tempo: 35 min. 2 Commento 1 2 Esercizio 2 2 Ordinamento e ricerca binaria con la classe

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati schifano@fe.infn.it Laurea di Informatica - Università di Ferrara 2011-2012 [1] Strutture dati Dinamiche: Le liste Una lista è una sequenza di elementi di un certo tipo in cui è possibile aggiungere e/o

Dettagli

Dispensa 3. 1.1 YACC: generalità

Dispensa 3. 1.1 YACC: generalità Dispensa 3 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in un

Dettagli

Linguaggio C - Funzioni

Linguaggio C - Funzioni Linguaggio C - Funzioni Funzioni: Il linguaggio C è di tipo procedurale; ogni programma viene suddiviso in sottoprogrammi, ognuno dei quali svolge un determinato compito. I sottoprogrammi si usano anche

Dettagli

Abstract Data Type (ADT)

Abstract Data Type (ADT) Abstract Data Type Pag. 1/10 Abstract Data Type (ADT) Iniziamo la nostra trattazione presentando una nozione che ci accompagnerà lungo l intero corso di Laboratorio Algoritmi e Strutture Dati: il Tipo

Dettagli

Fasi di creazione di un programma

Fasi di creazione di un programma Fasi di creazione di un programma 1. Studio Preliminare 2. Analisi del Sistema 6. Manutenzione e Test 3. Progettazione 5. Implementazione 4. Sviluppo 41 Sviluppo di programmi Per la costruzione di un programma

Dettagli

Variabili e tipi di dato

Variabili e tipi di dato Variabili e tipi di dato Tutte le variabili devono essere dichiarate, specificandone il tipo La dichiarazione deve precedere l uso Il tipo è un concetto astratto che esprime: L allocazione di spazio per

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Appunti di Informatica 1. Gianluca Rossi

Appunti di Informatica 1. Gianluca Rossi Appunti di Informatica 1 Gianluca Rossi Versione maggio 2011 Indice 1 Algoritmi, macchine e linguaggi di programmazione 3 1.1 La macchina di Von Neumann........................ 5 1.2 Dal linguaggio macchina

Dettagli

Metodi formali per la verifica dell affidabilità di sistemi software (e hardware) (Peled, Software Reliability Methods, cap. 1) Importanza della

Metodi formali per la verifica dell affidabilità di sistemi software (e hardware) (Peled, Software Reliability Methods, cap. 1) Importanza della Metodi formali per la verifica dell affidabilità di sistemi software (e hardware) (Peled, Software Reliability Methods, cap. 1) Importanza della verifica di sistemi (safety-critical, commercially critical,

Dettagli

GUIDA BASE DI PASCAL

GUIDA BASE DI PASCAL 1 GUIDA BASE DI PASCAL Un algoritmo, nel suo significato più ampio, è sequenza logica di istruzioni elementari (univocamente interpretabili) che, eseguite in un ordine stabilito, permettono la soluzione

Dettagli

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. www.dia.unisa.it/dottorandi/murano. Il linguaggio C II

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. www.dia.unisa.it/dottorandi/murano. Il linguaggio C II Laboratorio di Algoritmi e Strutture Dati Aniello Murano www.dia.unisa.it/dottorandi/murano 1 Il linguaggio C II 2 1 Indice (seconda parte) Funzioni Array Puntatori Preprocessore Storage Class Ricorsione

Dettagli

BOZZA. cin per la comunicazione dal dispositivo di input standard, la tastiera, al programma (stream di input standard)

BOZZA. cin per la comunicazione dal dispositivo di input standard, la tastiera, al programma (stream di input standard) Capitolo 6 Input/output su file BOZZA 6.1 Stream e file L input/output in C ++, in particolare quello su file, avviene tramite stream. stream. Uno stream è un astrazione di un canale di comunicazione,

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E04 Esempi di algoritmi e programmi C. Limongelli - A. Miola Novembre 2011 1 Contenuti q Somma di una sequenza di numeri interi

Dettagli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1) Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C CORSO DI LABORATORIO DI INFORMATICA CORSO DI LAUREA IN SDM ANNO ACCADEMICO 2011-2012 Docente: R. Sparvoli Esercitazioni: R. Sparvoli, F. Palma OTTAVA ESPERIENZA DI LABORATORIO L elaborazione dei files

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

FONDAMENTI di INFORMATICA L. Mezzalira FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software

Dettagli

Definizione di nuovi tipi in C

Definizione di nuovi tipi in C Definizione di nuovi tipi in C typedef Ancora sui tipi di dato Ogni elaboratore è intrinsecamente capace di trattare domini di dati di tipi primitivi numeri naturali, interi, reali caratteri e stringhe

Dettagli

Tipi di dato-prima parte

Tipi di dato-prima parte Corso di Fondamenti di Informatica Corso di Laurea in Ingegneria Meccanica (A-K) Tipi di dato-prima parte Ing. Agnese Pinto 1 di 15 Tipi di dato Sommario Tipi di dato Classificazione dei tipi di dato Tipi

Dettagli

dall argomento argomento della malloc()

dall argomento argomento della malloc() Allocazione dinamica Quando? Tutte le volte in cui i dati possono crescere in modo non prevedibile staticamente a tempo di sviluppo Un array con dimensione i fissata a compile-time non è sufficiente È

Dettagli

Struttura dati FILE. Concetto di FILE

Struttura dati FILE. Concetto di FILE Struttura dati FILE Concetto di FILE Per poter mantenere disponibili dei dati tra diverse esecuzioni di un programma (PERSISTENZA dei dati), è necessario poterli archiviare su memoria di massa. Un file

Dettagli

Utilizzo del linguaggio Basic utilizzando l interfaccia di Excel Silvia Patacchini

Utilizzo del linguaggio Basic utilizzando l interfaccia di Excel Silvia Patacchini Introduzione all utilizzo di Visual Basic for Application Utilizzo del linguaggio Basic utilizzando l interfaccia di Excel Silvia Patacchini PROGRAMMAZIONE Insieme delle attività da svolgersi per creare

Dettagli

Verifica del codice con Interpretazione Astratta

Verifica del codice con Interpretazione Astratta Verifica del codice con Interpretazione Astratta Daniele Grasso grasso@dsi.unifi.it grasso.dan@gmail.com Università di Firenze, D.S.I., Firenze, Italy December 15, 2009 D.Grasso (Università di Firenze)

Dettagli

Elementi di semantica denotazionale ed operazionale

Elementi di semantica denotazionale ed operazionale Elementi di semantica denotazionale ed operazionale 1 Contenuti! sintassi astratta e domini sintattici " un frammento di linguaggio imperativo! semantica denotazionale " domini semantici: valori e stato

Dettagli

CALCOLO DEL MASSIMO COMUN DIVISORE

CALCOLO DEL MASSIMO COMUN DIVISORE CALCOLO DEL MASSIMO COMUN DIVISORE Problema: "calcolare il Massimo Comun Divisore (M.C.D.) di due numeri naturali, A e B, secondo l'algoritmo cosiddetto delle sottrazioni successive". L'algoritmo "delle

Dettagli

Esempio. Esempio. Linguaggio di Programmazione. Linguaggi di programmazione. Linguaggio di computazione. Linguaggi di programmazione

Esempio. Esempio. Linguaggio di Programmazione. Linguaggi di programmazione. Linguaggio di computazione. Linguaggi di programmazione Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Fondamenti di Informatica Problema e metodologie di progetto Linguaggio C: Introduzione Monica Mordonini Problema e Algoritmo

Dettagli

CONTROLLI AUTOMATICI E AZIONAMENTI ELETTRICI Ingegneria Meccatronica

CONTROLLI AUTOMATICI E AZIONAMENTI ELETTRICI Ingegneria Meccatronica CONTROLLI AUTOMATICI E AZIONAMENTI ELETTRICI Ingegneria Meccatronica CONTROLLI AUTOMATICI e AZIONAMENTI ELETTRICI INTRODUZIONE A MATLAB Ing. Alberto Bellini Tel. 0522 522626 e-mail: alberto.bellini@unimore.it

Dettagli

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente. Ricorsione Funzioni ricorsive Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente. Un esempio di funzione ricorsiva

Dettagli

Connessione ad internet

Connessione ad internet Introduzione al C++ Connessione ad internet Istruzioni per la connessione internet: - una volta connessi, aprire un browser (firefox) - in Modifica/preferenze/avanzate/rete/impostazioni - attivare la modalità

Dettagli

Introduzione al Linguaggio C

Introduzione al Linguaggio C Introduzione al Linguaggio C File I/O Daniele Pighin April 2009 Daniele Pighin Introduzione al Linguaggio C 1/15 Outline File e dati Accesso ai file File I/O Daniele Pighin Introduzione al Linguaggio C

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Semantica dei programmi. La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma.

Semantica dei programmi. La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma. Semantica dei programmi La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma. Semantica operazionale: associa ad ogni programma la sequenza delle sue

Dettagli

PROGRAMMAZIONE AVANZATA JAVA E C. Massimiliano Redolfi. Lezione 7: Code, Stack, Liste PAJC. Ricerca. prof. Massimiliano Redolfi PAJC

PROGRAMMAZIONE AVANZATA JAVA E C. Massimiliano Redolfi. Lezione 7: Code, Stack, Liste PAJC. Ricerca. prof. Massimiliano Redolfi PAJC PROGRAMMAZIONE AVANZATA JAVA E C Massimiliano Redolfi Lezione 7: Code, Stack, Liste Ricerca 2 Ricerca Se dobbiamo cercare un elemento in un array possiamo trovarci in due situazioni Elementi non ordinati

Dettagli

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++ ISTITUTO TECNICO INDUSTRIALE STATALE G A L I L E O F E R R A R I S DIISPENSA DII IINFORMATIICA E SIISTEMII AUTOMATIICII LA GESTIONE DEI FILE DI TESTO IN C++ Le classi per la gestione dei file. Il C++ è

Dettagli

Richiesta pagina PHP (es: index.php)

Richiesta pagina PHP (es: index.php) PHP PHP = personal home page SERVER Richiesta pagina PHP (es: index.php) Server Web (Apache) in ascolto sulla porta 80, si accorge che la pagina richiesta è una pagina PHP in base all'estensione o con

Dettagli

I metodi formali nel processo di sviluppo del software

I metodi formali nel processo di sviluppo del software I metodi formali nel processo di sviluppo del software I metodi formali consentono di creare una specifica più completa, uniforme e non ambigua di quelle prodotte usando i metodi convenzionali ed orientati

Dettagli

Primi programmi in C

Primi programmi in C Primi programmi in C Docente: Violetta Lonati PAS classe A042 Corso introduttivo pluridisciplinare in Informatica Nota: ricordate le opzioni principali del comando gcc (per eventuali dubbi, consultate

Dettagli

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi TIPI DI DATO Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi numeri naturali, interi, reali caratteri e stringhe di caratteri e quasi sempre anche collezioni di oggetti,

Dettagli

If a cascata, switch, boolean

If a cascata, switch, boolean If a cascata, switch, boolean If a cascata Switch Il tipo boolean Operatori logici, valutazione pigra 1 If a cascata Consideriamo una semplice classe che deve descrivere con una stringa gli effetti di

Dettagli

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione basata sul campo d utilizzo. I principali package sono:

Dettagli

10 - Programmare con gli Array

10 - Programmare con gli Array 10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto LEZIONE

Dettagli

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware COS È UN LINGUAGGIO? Un linguaggio è un insieme di parole e di metodi di combinazione delle

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 05 La rappresentazione dell informazione Carla Limongelli Ottobre 2011 http://www.dia.uniroma3.it/~java/fondinf/ La rappresentazione

Dettagli

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio 1-La memoria dinamica La scrittura di un programma (indipendentemente dal linguaggio adottato) deve sempre tener conto

Dettagli

Il tipo di dato astratto Pila

Il tipo di dato astratto Pila Il tipo di dato astratto Pila Il tipo di dato Pila Una pila è una sequenza di elementi (tutti dello stesso tipo) in cui l inserimento e l eliminazione di elementi avvengono secondo la regola seguente:

Dettagli

ARRAY E STRINGHE. G. Frosini Slide 1

ARRAY E STRINGHE. G. Frosini Slide 1 ARRAY E STRINGHE G. Frosini Slide 1 Array: VARIABILI ARRAY struttura dati costituita da elementi (anche nessuno, array vuoto) dello stesso tipo; tipo array: tipo degli elementi, non numero degli elementi;

Dettagli

La struttura dati ad albero binario

La struttura dati ad albero binario La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,

Dettagli

STRUTTURE NON LINEARI

STRUTTURE NON LINEARI PR1 Lezione 13: STRUTTURE NON LINEARI Michele Nappi mnappi@unisa.it www.dmi.unisa.it/people/nappi Per la realizzazione della presentazione è stato utilizzato in parte materiale didattico prodotto da Oronzo

Dettagli

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata Esempi di Problema: Prendere un Caffè al Distributore Università degli Studi di Udine Facoltà di Ingegneria CORSO DI LAUREA IN SCIENZE dell ARCHITETTURA Elementi di Informatica, e Programmi D. Gubiani

Dettagli

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

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

Dettagli

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni Funzioni Le funzioni Con il termine funzione si intende, in generale, un operatore che, applicato a un insieme di operandi, consente di calcolare un risultato, come avviene anche per una funzione matematica

Dettagli

Verifica che una grammatica sia Context Free nel GrammaReader

Verifica che una grammatica sia Context Free nel GrammaReader Verifica che una grammatica sia Context Free nel GrammaReader Sommario Dispensa di Linguaggi di Programmazione Corrado Mencar Pasquale Lops In questa dispensa si descrivono alcune soluzioni per verificare

Dettagli

Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione

Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione Informatica 3 Informatica 3 LEZIONE 6: Il controllo dell esecuzione Modulo 1: La gestione delle eccezioni Modulo 2: Programmazione concorrente Lezione 6 - Modulo 1 La gestione delle eccezioni Politecnico

Dettagli

Corso di Programmazione I dati nei linguaggi di programmazione Tipi Semplici. I dati nei linguaggi di programmazione. Dati. Dott.

Corso di Programmazione I dati nei linguaggi di programmazione Tipi Semplici. I dati nei linguaggi di programmazione. Dati. Dott. Materiale didattico preparato dal dott. Stefano Ferilli Corso di Programmazione I dati nei linguaggi di programmazione Tipi Semplici Dott. Pasquale Lops lops@di.uniba.it Corso di Programmazione - DIB 1/49

Dettagli

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 10 Correttezza A. Miola Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Correttezza 1 Contenuti Introduzione alla correttezza

Dettagli

Introduzione alla verifica automatica

Introduzione alla verifica automatica Sistemi digitali Introduzione alla verifica automatica Utilizzati in quasi tutte le attività umane Complessità elevata semplici sistemi hanno milioni di linee di codice Tempi di realizzazione sempre più

Dettagli

Corso di Programmazione ad oggetti

Corso di Programmazione ad oggetti Corso di Programmazione ad oggetti Il sistema di I/O del C++ a.a. 2008/2009 Claudio De Stefano 1 Il Modello di Von Neumann Il Modello di Von Neumann prevede che la CPU carichi in maniera sequenziale i

Dettagli

RICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3

RICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3 RICORSIVITA 1. Cos è la ricorsività? La ricorsività è un metodo di soluzione dei problemi che consiste nell esprimere la soluzione relativa al caso n in funzione della soluzione relativa al caso n-1. La

Dettagli

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore Relazioni tra oggetti e classi : Generalizzazione Fondamenti di Informatica II 20. Laboratorio 6 Collegamenti e associazioni Le relazioni di tipo generalizzazione (specializzazione), servono per poter

Dettagli

L utility Unix awk [Aho-Weinberger-Kernighan]

L utility Unix awk [Aho-Weinberger-Kernighan] L utility Unix awk [Aho-Weinberger-Kernighan] L utility awk serve per processare file di testo secondo un programma specificato dall utente. L utility awk legge riga per riga i file ed esegue una o più

Dettagli

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012 Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012 Concetti importanti da (ri)vedere Programmazione imperativa Strutture di

Dettagli

11 Realizzazione del File System. 11.1.1 Struttura a livelli (fig. 11.1) 11.4 Allocazione dei file

11 Realizzazione del File System. 11.1.1 Struttura a livelli (fig. 11.1) 11.4 Allocazione dei file 11 Realizzazione del File System 1 Metodi di allocazione Allocazione contigua Allocazione concatenata e varianti Allocazione indicizzata e varianti Gestione dello spazio libero 11.1.1 Struttura a livelli

Dettagli

Matlab: Strutture di Controllo. Informatica B

Matlab: Strutture di Controllo. Informatica B Matlab: Strutture di Controllo Informatica B Tipo di dato logico È un tipo di dato che può avere solo due valori true (vero) 1 false (falso) 0 I valori di questo tipo possono essere generati direttamente

Dettagli

Elementi di semantica operazionale

Elementi di semantica operazionale Elementi di semantica operazionale 1 Contenuti sintassi astratta e domini sintattici un frammento di linguaggio imperativo semantica operazionale domini semantici: valori e stato relazioni di transizione

Dettagli

Descrizione di un algoritmo

Descrizione di un algoritmo Descrizione di un algoritmo Un algoritmo descrive due tipi fondamentali di oper: calcoli ottenibili tramite le oper primitive su tipi di dato (valutazione di espressioni) che consistono nella modifica

Dettagli

LA RAPPRESENTAZIONE DELLE INFORMAZIONI

LA RAPPRESENTAZIONE DELLE INFORMAZIONI ISTITUTO TECNICO E LICEO SCIENTIFICO TECNOLOGICO ANGIOY LA RAPPRESENTAZIONE DELLE INFORMAZIONI Prof. G. Ciaschetti DATI E INFORMAZIONI Sappiamo che il computer è una macchina stupida, capace di eseguire

Dettagli

Elementi di Informatica

Elementi di Informatica Università degli Studi di Udine Facoltà di Ingegneria CORSO DI LAUREA IN SCIENZE dell ARCHITETTURA Elementi di Informatica Algoritmi, e Programmi D. Gubiani 29 marzo 2010 D. Gubiani Algoritmi, e Programmi

Dettagli

SISTEMI OPERATIVI 14 settembre 2015 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR

SISTEMI OPERATIVI 14 settembre 2015 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR SISTEMI OPERATIVI 14 settembre 2015 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR Cognome: Nome: Matricola: 1. Ricordate che non potete usare calcolatrici o materiale

Dettagli

Fondamenti di Informatica Ingegneria Clinica Lezione 19/11/2009. Prof. Raffaele Nicolussi

Fondamenti di Informatica Ingegneria Clinica Lezione 19/11/2009. Prof. Raffaele Nicolussi Fondamenti di Informatica Ingegneria Clinica Lezione 19/11/2009 Prof. Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via B. Castiglione 59-00142 Roma Docente Raffaele Nicolussi rnicolussi@fub.it Lezioni

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

GESTIONE INFORMATICA DEI DATI AZIENDALI

GESTIONE INFORMATICA DEI DATI AZIENDALI GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy zanoni@volterra.uniroma2.it Rudimenti di programmazione Programming

Dettagli