Verifica di programmi C con SPIN
|
|
- Daniella Lupo
- 8 anni fa
- Visualizzazioni
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
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
DettagliIntroduzione 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
DettagliTipi 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
Dettagli4 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
DettagliGli 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
DettagliVariabili 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
DettagliLINGUAGGI 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
DettagliFasi 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
DettagliLinguaggio 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
DettagliAnalizzatore 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,
DettagliAlgoritmi 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
DettagliEsempio. 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
DettagliStrutture. 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
DettagliProf. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:
LA STRUTTURA DI RIPETIZIONE La ripetizione POST-condizionale La ripetizione PRE-condizionale INTRODUZIONE (1/3) Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto
DettagliInizializzazione, Assegnamento e Distruzione di Classi
Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della
DettagliEsempi di algoritmi. Lezione III
Esempi di algoritmi Lezione III Scopo della lezione Implementare da zero algoritmi di media complessità. Verificare la correttezza di un algoritmo eseguendolo a mano. Imparare a valutare le prestazioni
DettagliLABORATORIO 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
DettagliDescrizione 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
DettagliFONDAMENTI 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
DettagliMATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c
Caratteristiche MATLAB Linguaggio di programmazione orientato all elaborazione di matrici (MATLAB=MATrix LABoratory) Le variabili sono matrici (una variabile scalare equivale ad una matrice di dimensione
DettagliInterpretazione 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
DettagliLa 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
DettagliINFORMATICA 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
DettagliAllocazione dinamica della memoria - riepilogo
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della
DettagliGESTIONE 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
DettagliDefinizione 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
DettagliDI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1
DIAGRAMMI A BLOCCHI TEORIA ED ESERCIZI 1 1 Il linguaggio dei diagrammi a blocchi è un possibile formalismo per la descrizione di algoritmi Il diagramma a blocchi, o flowchart, è una rappresentazione grafica
DettagliCorrettezza. 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
DettagliAlgebra 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( x) ( x) 0. Equazioni irrazionali
Equazioni irrazionali Definizione: si definisce equazione irrazionale un equazione in cui compaiono uno o più radicali contenenti l incognita. Esempio 7 Ricordiamo quanto visto sulle condizioni di esistenza
DettagliTipi 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
DettagliLezione 8. La macchina universale
Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione
DettagliExcel avanzato. I nomi. Gli indirizzi e le formule possono essere sostituiti da nomi. Si creano tramite Inserisci Nome Definisci
Excel avanzato I nomi marco.falda@unipd.it Gli indirizzi e le formule possono essere sostituiti da nomi documentazione astrazione Si creano tramite Inserisci Nome Definisci Vengono raccolti nell area riferimento
DettagliSottoprogrammi: astrazione procedurale
Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j
DettagliEXCEL FUNZIONI PRINCIPALI
EXCEL FUNZIONI PRINCIPALI Funzione SE() Sintassi: SE(VERIFICA, VALORE SE VERO, VALORE SE FALSO): verifica un valore e ritorna una risposta in base al risultato vero/falso Esempio: =SE(A2=15; "OK"; "NO")
DettagliLe variabili. Olga Scotti
Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.
DettagliFondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main
Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli
DettagliCAPITOLO 7 - SCAMBIO DI MESSAGGI
CAPITOLO 7 - SCAMBIO DI MESSAGGI Lo scambio di messaggi è una forma di comunicazione nel quale un processo richiede al sistema operativo di mandare dei dati direttamente ad un altro processo. In alcuni
DettagliLuigi Piroddi piroddi@elet.polimi.it
Automazione industriale dispense del corso 10. Reti di Petri: analisi strutturale Luigi Piroddi piroddi@elet.polimi.it Analisi strutturale Un alternativa all analisi esaustiva basata sul grafo di raggiungibilità,
DettagliUna 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
DettagliProgrammazione 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
DettagliCOS È 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
DettagliSommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.
Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell
DettagliCorso di Informatica
Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down
Dettagli10 - 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
DettagliFunzioni funzione dominio codominio legge argomento variabile indipendente variabile dipendente
Funzioni In matematica, una funzione f da X in Y consiste in: 1. un insieme X detto dominio di f 2. un insieme Y detto codominio di f 3. una legge che ad ogni elemento x in X associa uno ed un solo elemento
DettagliDefinire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};
ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca
DettagliIntroduzione ai Metodi Formali
Intruzione ai Meti Formali Sistemi software anche molto complessi regolano la vita quotidiana, anche in situazioni life-critical (e.g. avionica) e business-critical (e.g. operazioni bancarie). Esempi di
DettagliMatlab: 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
DettagliCapitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2.
Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Dichiarazione di dati: le direttive DS e DC...3 2.1 Direttiva DS...3 2.2
DettagliEsercizi 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
DettagliI file di dati. Unità didattica D1 1
I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità
DettagliIntroduzione 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
DettagliLE SUCCESSIONI 1. COS E UNA SUCCESSIONE
LE SUCCESSIONI 1. COS E UNA SUCCESSIONE La sequenza costituisce un esempio di SUCCESSIONE. Ecco un altro esempio di successione: Una successione è dunque una sequenza infinita di numeri reali (ma potrebbe
DettagliInformatica. Rappresentazione dei numeri Numerazione binaria
Informatica Rappresentazione dei numeri Numerazione binaria Sistemi di numerazione Non posizionali: numerazione romana Posizionali: viene associato un peso a ciascuna posizione all interno della rappresentazione
DettagliAlgebra booleana. Si dice enunciato una proposizione che può essere soltanto vera o falsa.
Algebra booleana Nel lavoro di programmazione capita spesso di dover ricorrere ai principi della logica degli enunciati e occorre conoscere i concetti di base dell algebra delle proposizioni. L algebra
DettagliElementi 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
DettagliSistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory
FILE SYSTEM : INTERFACCIA 8.1 Interfaccia del File System Concetto di File Metodi di Accesso Struttura delle Directory Montaggio del File System Condivisione di File Protezione 8.2 Concetto di File File
DettagliLE FUNZIONI A DUE VARIABILI
Capitolo I LE FUNZIONI A DUE VARIABILI In questo primo capitolo introduciamo alcune definizioni di base delle funzioni reali a due variabili reali. Nel seguito R denoterà l insieme dei numeri reali mentre
DettagliALGEBRA DELLE PROPOSIZIONI
Università di Salerno Fondamenti di Informatica Corso di Laurea Ingegneria Corso B Docente: Ing. Giovanni Secondulfo Anno Accademico 2010-2011 ALGEBRA DELLE PROPOSIZIONI Fondamenti di Informatica Algebra
DettagliAPPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 17.XI.2015
APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 17.XI.2015 VINCENZO MARRA Indice Esercizio 1 1 Conversione di un numero naturale in base b.
DettagliCHIUSURE di MAGAZZINO di FINE ANNO
CHIUSURE di MAGAZZINO di FINE ANNO Operazioni da svolgere per il riporto delle giacenze di fine esercizio Il documento che segue ha lo scopo di illustrare le operazioni che devono essere eseguite per:
Dettaglidall 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 È
DettagliLa 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,
DettagliIntroduzione agli Abstract Data Type (ADT)
Introduzione agli Abstract Data Type (ADT) La nozione di tipo di dato astratto Sappiamo già che quando si affrontano problemi complessi è necessario procedere in due fasi: Specifica dell algoritmo Implementazione
DettagliRISOLUTORE AUTOMATICO PER SUDOKU
RISOLUTORE AUTOMATICO PER SUDOKU Progetto Prolog - Pierluigi Tresoldi 609618 INDICE 1.STORIA DEL SUDOKU 2.REGOLE DEL GIOCO 3.PROGRAMMAZIONE CON VINCOLI 4.COMANDI DEL PROGRAMMA 5.ESEMPI 1. STORIA DEL SUDOKU
DettagliRICORSIVITA. 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[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008
Se devo memorizzare più valori che sono in qualche modo parenti dal punto di vista logico, posso usare il concetto di vettore di variabili (array). Ad esempio, se devo memorizzare le temperature di tutti
DettagliMatematica in laboratorio
Unità 1 Attività guidate Attività 1 Foglio elettronico Divisibilità tra numeri naturali Costruisci un foglio di lavoro per determinare se a è divisibile per b, essendo a e b due numeri naturali, con a
DettagliConcetto di Funzione e Procedura METODI in Java
Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile
DettagliFondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C
Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009 Lab 02 Tipi semplici in C Obiettivo dell esercitazione Acquistare familiarità con i tipi di dato semplici supportati
DettagliDall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni
Dall Algoritmo al Programma Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni IL PROGRAMMA Gli algoritmi sono modelli di descrizione astratti e per controllarne il funzionamento devono essere
DettagliAutomatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione
Automatizzare i compiti ripetitivi I file batch Anno accademico 2000-01 1 Spesso capita di dover eseguire ripetutatmente una data sequenza di comandi Introdurli uno a uno da tastiera è un processo lento
DettagliIntroduzione al MATLAB c Parte 2
Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 18 gennaio 2008 Outline 1 M-file di tipo Script e Function Script Function 2 Costrutti di programmazione
DettagliModulo 3 - Elaborazione Testi 3.5 Stampa unione
Università degli Studi dell Aquila Corso ECDL programma START Modulo 3 - Elaborazione Testi 3.5 Stampa unione Maria Maddalena Fornari Stampa Unione Processo che permette di unire dati provenienti da tipi
DettagliOTTAVA 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
DettagliElementi 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
DettagliAlgoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Esercizi II parte Esercizio 1 Discutere la correttezza di ciascuna delle seguenti affermazioni. Dimostrare formalmente la validità
DettagliTabelle Pivot - DISPENSE
Tabelle Pivot - DISPENSE Definizione Pivot Table: strumento che permette di riepilogare ed analizzare i dati di una tabella dinamicamente. Sono utilità che consentono di aggregare i dati secondo i criteri
DettagliDispensa 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
DettagliSISTEMI DI NUMERAZIONE E CODICI
SISTEMI DI NUMERAZIONE E CODICI Il Sistema di Numerazione Decimale Il sistema decimale o sistema di numerazione a base dieci usa dieci cifre, dette cifre decimali, da O a 9. Il sistema decimale è un sistema
DettagliLe funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.
Le funzioni in C I programmi C sono costituiti da definizioni di variabili e funzioni. Una definizione di funzione ha il seguente formato: tipo-ritornato nome-funzione(lista-parametri) { dichiarazioni
DettagliRealizzazione di Politiche di Gestione delle Risorse: i Semafori Privati
Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad
DettagliCorso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011
Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011 Testo Il database di un videonoleggio è costituito da due vettori paralleli.
DettagliProgetto: ARPA Fonte Dati. ARPA Fonte Dati. Regione Toscana. Manuale Amministratore
ARPA Fonte Dati Regione Toscana 1 Redatto da L. Folchi (TAI) Rivisto da Approvato da Versione 1.1 Data emissione 09/10/13 Stato FINAL 2 Versione Data Descrizione 1,0 06/08/13 Versione Iniziale 1.1 09/10/2013
Dettagliper immagini guida avanzata Organizzazione e controllo dei dati Geometra Luigi Amato Guida Avanzata per immagini excel 2000 1
Organizzazione e controllo dei dati Geometra Luigi Amato Guida Avanzata per immagini excel 2000 1 Il raggruppamento e la struttura dei dati sono due funzioni di gestione dati di Excel, molto simili tra
DettagliRegione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da
ARPA Fonte Dati Regione Toscana Redatto da L. Folchi (TAI) Rivisto da Approvato da Versione 1.0 Data emissione 06/08/13 Stato DRAFT 1 Versione Data Descrizione 1,0 06/08/13 Versione Iniziale 2 Sommario
DettagliConvertitori numerici in Excel
ISTITUTO DI ISTRUZIONE SUPERIORE G. M. ANGIOY CARBONIA Convertitori numerici in Excel Prof. G. Ciaschetti Come attività di laboratorio, vogliamo realizzare dei convertitori numerici con Microsoft Excel
DettagliCluster. Vicino alla temperatura critica gli spin formano grandi gruppi (cluster)
Cluster Vicino alla temperatura critica gli spin formano grandi gruppi (cluster) all interno di ogni gruppo è molto improbabile riuscire a flippare uno spin perché ci sarebbe una grande perdita di energia,
DettagliTipicamente 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,
DettagliSono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza
Il problema di flusso di costo minimo (MCF) Dati : grafo orientato G = ( N, A ) i N, deficit del nodo i : b i (i, j) A u ij, capacità superiore (max quantità di flusso che può transitare) c ij, costo di
DettagliEsercizi su. Funzioni
Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità
DettagliGestione dei File in C
Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte
DettagliSoluzione dell esercizio del 2 Febbraio 2004
Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo
DettagliGUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL
GUIDA RAPIDA BOZZA 23/07/2008 INDICE 1. PERCHÉ UNA NUOVA VERSIONE DEI MODULI DI RACCOLTA DATI... 3 2. INDICAZIONI GENERALI... 4 2.1. Non modificare la struttura dei fogli di lavoro... 4 2.2. Cosa significano
DettagliAlgebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono
DettagliGestione della memoria. Paginazione Segmentazione Segmentazione con paginazione
Gestione della memoria Paginazione Segmentazione Segmentazione con paginazione Modello di paginazione Il numero di pagina serve come indice per la tabella delle pagine. Questa contiene l indirizzo di base
DettagliArduino: Programmazione
Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite
DettagliStudente: SANTORO MC. Matricola : 528
CORSO di LAUREA in INFORMATICA Corso di CALCOLO NUMERICO a.a. 2004-05 Studente: SANTORO MC. Matricola : 528 PROGETTO PER L ESAME 1. Sviluppare una versione dell algoritmo di Gauss per sistemi con matrice
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Lezione 11 Martedì 12-11-2013 1 Tecniche di allocazione mediante free list Generalmente,
Dettagli