Semantica operazionale dei Linguaggi di Programmazione Imperativi. Espressioni. Sistema di transizioni per la semantica

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Semantica operazionale dei Linguaggi di Programmazione Imperativi. Espressioni. Sistema di transizioni per la semantica"

Transcript

1 Sistema di transizioni per la semantica Il nostro sistema non prevede la gestione degli errori di tipo o la gestione degli errori di scope delle veriabili Esso si bloccherà solo in caso di espressioni booleane o aritmetiche senza valore (divisione per zero o variabili non assegnate) I costrutti che prenderemo in considerazione saranno i comandi semplici - assegnamento, condizionale e ciclo while - i blocchi e le dichiarazioni Più in là introdurremo le classi, gli oggetti e definiremo la semantica della chiamata dei metodi in Java Semantica operazionale dei Linguaggi di Programmazione Imperativi Semantica operazionale del nucleo di Java Rosario Culmone, Luca Tesei Lucidi tratti dalla dispensa Elementi di Semantica Operazionale R. Barbuti, P. Mancarella e F. Turini Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.3/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.1/83 Espressioni Sistema di transizioni per la semantica Estendiamo la sintassi, e quindi il relativo sistema di transizioni per la valutazione, delle espressioni aritmetiche viste in precedenza In particolare aggiungiamo al dominio semantico Val, oltre ai numeri naturali, anche i valori booleani IB = {tt,ff che verranno rappresentati sintatticamente con i simboli true e false rispettivamente Val = IN IB Il linguaggio viene esteso con una serie di operatori per definire espressioni (le proposizioni) il cui valore è un valore di verità (ad esempio 5>3) e per combinare tali espressioni A partire da questo punto in poi ci concentreremo sulla definizione di un sistema di transizioni che esegue i programmi di un linguaggio Java semplificato La definizione di questo sistema corrisponde a dare una semantica formale ai costrutti sintattici del linguaggio Questo perché il sistema di transizioni è un sistema formale Il linguaggio Java semplificato avrà come tipi di dato fondamentali solo int e boolean Più in là introdurremo le classi, gli oggetti e quindi i tipi riferimento Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.4/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.2/83

2 Semantica delle espressioni booleane Sintassi delle espressioni Abbiamo già definito la semantica delle espressioni aritmetiche, cioè quelle il cui valore è un numero di IN Per quanto concerne le espressioni a valori booleani, osserviamo che gli operatori &&, e! corrispondono agli operatori logici, e Come nel caso delle espressioni a valori naturali, le regole che definiscono la semantica delle espressioni booleane sono guidate dalla sintassi e, in esse, utilizziamo delle premesse che corrispondono ad operazioni elementari tra valori di verità che si suppone di saper calcolare La sintassi completa delle espressioni aritmetiche e booleane del nostro linguaggio è la seguente: Exp ::= Const_val Ide (Exp) Exp Op Exp!Exp Op ::= + - * / % == < <= > >= && Const_val ::= Num Bool Bool ::= true false Num ::= Num Cif Cif Cif ::= Ide ::= Ide Letter Ide Cif Letter Letter ::= a b... z A B... Z Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.7/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.5/83 Semantica delle espressioni booleane Cominciamo dalla semantica delle espressioni booleane più semplici: true,σ exp tt (exp true ) false,σ exp ff (exp false ) Queste regole corrispondono allo schema di regola (exp n ) per le costanti naturali Metavariabili Nel seguito, ometteremo la distinzione esplicita tra valori e rappresentazioni e utilizzeremo le seguenti convenzioni: n,m,n,m,... denotano valori in IN, o loro rappresentazioni ; b,b,b 1,... denotano valori in IB, o loro rappresentazioni; E,E,... denotano generiche espressioni x,y,z,... denotano identificatori. Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.8/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.6/83

3 Semantica delle espressioni booleane Semantica delle espressioni booleane Con la seguente regola raggruppiamo tutte le regole che riguardano gli operatori di relazione (confronto) previsti nella sintassi del linguaggio Il simbolo rel sta per uno qualunque dei sei simboli sintattici ==,!=, <, >, >= e <= previsti dal linguaggio Il simbolo rel sta per la corrispondente funzione semantica (=,,,,, rispettivamente) Queste regole definiscono gli operatori del linguaggio &&, e! in termini dei corrispondenti operatori logici, e E, σ exp b E, σ exp b b = b b E E, σ exp b (exp or ) E, σ exp b E, σ exp b b = b b E && E, σ exp b (exp and ) Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.11/83 Semantica delle espressioni booleane Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.9/83 Semantica delle espressioni booleane (exp rel ) esprime quindi contemporaneamente sei regole E, σ exp n E, σ exp n b = n rel n E rel E, σ exp b (exp rel ) E,σ exp b b = b!e,σ exp b (exp not ) Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.12/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.10/83

4 Semantica di un comando Costrutti che alterano lo stato La semantica, il significato, che associamo a un comando C è quello di essere una funzione che, preso uno stato di partenza σ, restituisce uno stato di arrivo σ in cui si possono osservare gli effetti del comando C [C]σ = σ se e solo se C,σ com σ Lo stato di partenza σ modella l input (nel nostro linguaggio semplificato non ci sono costrutti di input) Lo stato σ di arrivo modella l output (non ci sono nemmeno costrutti di output) La valutazione di espressioni non modifica lo stato del sistema (non modifica la memoria) Valutare 3+x oppure (4*y)/3 lascia lo stato del sistema invariato Esiste un altra classe di costrutti che altera lo stato del sistema. Vediamo la sintassi semplificata dei comandi: Com ::= Ide = Exp; Block if (Exp) Com else Com while (Exp) Com Block ::= {Stat_List Stat_List ::= Com Com Stat_List Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.15/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.13/83 Assegnamento Sistemi di transizioni per i comandi E,σ exp v x=e;,σ com σ[ v / x ] (com = ) Le configurazioni del sistema di transizioni per i comandi, S com, sono di due tipi: Γ com = { C,σ C Com, σ Σ {σ σ Σ T com = {σ σ Σ Il comando di assegnamento è un costrutto che modifica lo stato. La notazione σ[ v / x ] rappresenta la modifica di stato, come abbiamo visto Ricordiamo che lo stato non viene modificato se la variabile x non è definita in nessun frame Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.16/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.14/83

5 Esempio: Lista di assegnamenti 1 Sequenze di comandi e blocchi Consideriamo la lista di comandi: x = 2; y = 3; x = x-1; e lo stato σ 0 = {x 0,y 0.Ω. Abbiamo dunque la derivazione: x = 2;y = 3;x = x 1;,σ 0 com { (com Stat list ), (d1): x = 2;,σ 0 com σ 0 [ 2 / x ], σ 1 = σ 0 [ 2 / x ], (d2): y = 3;x = x 1;,σ 1 com σ 1 [ 1 / x, 3 / y ] σ 1 [ 1 / x, 3 / y ] = σ 0 [ 1 / x, 3 / y ] σ 0 [ 1 / x, 3 / y ] = {x 1,y 3.Ω Utilizziamo la metavariabile Slist per indicare alberi della categoria sintattica Stat_List La semantica di un albero di Stat_List, dato uno stato di partenza σ, corrisponde all esecuzione, in sequenza, di tutti i comandi che formano la lista Ogni comando potrà modificare lo stato Ogni comando (tranne il primo) deve operare a partire dallo stato generatosi dopo l esecuzione del comando precedente nella lista In questa prima versione la gestione del blocco è banale: non bisogna appilare un nuovo frame per ogni blocco dato che non prevediamo la possibilità di dichiarare variabili Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.19/83 Esempi2: Lista di assegnamenti 1 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.17/83 Sequenze di comandi e blocchi dove (d1) è la derivazione: (d1): x = 2;,σ 0 com { (com = ), E [2]σ 0 = 2 σ 0 [ 2 / x ] Slist,σ com σ (com Block ) {Slist,σ com σ C,σ com σ Slist,σ com σ (com Stat list ) C Slist,σ com σ In una sequenza del tipo C 1 C 2...C k,, la sottosequenza C 2...C k inizia ad operare nello stato lasciato dalla valutazione del comando C 1 dell intera sequenza. Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.20/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.18/83

6 Esempio: Lista di assegnamenti 5 Esempio: Lista di assegnamenti 3 Le uguaglianze del tipo σ = σ[...] che compaiono nei vari passi, non corrispondono a premesse di regole, ma all introduzione di nomi di comodo per gli stati intermedi del calcolo Le scritture del tipo E [3]σ 0 [ 2 / x ] = 3 corrispondono a derivazioni del sistema S exp che non esplicitiamo: diamo direttamente il risultato che può essere comunque sempre verificato facendo la derivazione Le sottoderivazioni che corrispondono a singoli comandi di assegnamento sono sufficientemente semplici da poter essere, nel seguito, esplicitate direttamente nelle giustificazioni senza fare sottoderivazioni e, detto σ 1 lo stato σ 0 [ 2 / x ], (d2) è la derivazione: (d2): y = 3;x = x 1;,σ 1 com { (com Stat list ), (d3): y = 3;,σ 1 com σ 1 [ 3 / y ], σ = σ 1 [ 3 / y ], (d4): x = x 1;,σ com σ [ 1 / x ], σ [ 1 / x ] = σ 0 [ 1 / x, 3 / y ] σ 0 [ 1 / x, 3 / y ] Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.23/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.21/83 Esempio: Lista di assegnamenti 6 Esempio: Lista di assegnamenti 4 x = 2;y = 3;x = x 1;,σ 0 com { (com Stat list ), (com = ): E [2]σ 0 = 2, x = 2;,σ 0 com σ 0 [ 2 / x ], σ 1 = σ 0 [ 2 / x ], (d1): y = 3;x = x 1;,σ 1 com σ 1 [ 1 / x, 3 / y ] σ 1 [ 1 / x, 3 / y ] = σ 0 [ 1 / x, 3 / y ] σ 0 [ 1 / x, 3 / y ] = {x 1,y 3.Ω Infine, le sotto-derivazioni (d3) e (d4) sono le seguenti: (d3): y = 3;,σ 0 [ 2 / x ] com { (com = ), E [3]σ 0 [ 2 / x ] = 3 σ 0 [ 2 / x, 3 / y ] (d4): x = x 1;,σ 0 [ 2 / x, 3 / y ] com { (com = ), E [x 1]σ 0 [ 2 / x, 3 / y ] = 1 σ 0 [ 1 / x, 3 / y ] Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.24/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.22/83

7 Comando condizionale Esempio: Lista di assegnamenti 7 E,σ exp tt C1,σ com σ if (E) C1 else C2,σ com σ (com if tt ) E,σ exp ff C2,σ com σ if (E) C1 else C2,σ com σ (com if ff ) dove, detto σ 1 lo stato σ 0 [ 2 / x ], (d1) è la sottoderivazione: (d1): y = 3;x = x 1;,σ 1 com { (com Stat list ), (com = ) : E [3]σ 1 = 3, y = 3;,σ 1 com σ 1 [ 3 / y ], σ = σ 1 [ 3 / y ], (com = ) : E [x 1]σ = 1, x = x 1;,σ com σ [ 1 / x ] σ [ 1 / x ] = σ 0 [ 1 / x, 3 / y ] σ 0 [ 1 / x, 3 / y ] Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.27/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.25/83 Comando iterativo Il nostro linguaggio semplificato ha come unico costrutto iterativo il ciclo while Anche il while richiede l uso di due regole che gestiscono lo stesso caso sintattico, ma sono mutuamente esclusive a seconda del valore di verità della guardia Comando condizionale Per esprimere la semantica dell if-else utilizziamo due regole La prima regola potrà essere applicata quando nello stato corrente l espressione di controllo è vera La seconda regola quando è falsa Le due regole corrispondono allo stesso caso sintattico, ma le premesse le rendono mutuamente esclusive (si può applicare l una oppure l altra, mai entrambe insieme) Con l if il sistema S com si può bloccare se l espressione dell if-else non ha un valore definito (S exp si blocca) Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.28/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.26/83

8 Condizioni di esecuzione Comando iterativo Non possiamo quindi assumere l ipotesi induttiva e non siamo garantiti che l esecuzione della sottoderivazione terminerà! Tuttavia non si tratta di una definizione circolare in quanto la componente stato della configurazione è diversa Se il programma è ben scritto prima o poi si arriverà in uno stato in cui la guardia del ciclo diventa falsa e il ciclo uscirà E,σ exp ff while (E) C,σ com σ E,σ exp tt C,σ com σ while (E) C,σ com σ while (E) C,σ com σ (com while ff ) (com while tt ) Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.31/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.29/83 Esempio: Comando iterativo 1 while (x>0) x=x-1;, {x 2.Ω com {(com while tt ) : E [x > 0]{x 2.Ω = tt, (com = ) : E [x-1]{x 2.Ω = 1 x=x-1;, {x 2.Ω com {x 1.Ω, (d1): while (x>0) x=x-1;, {x 1.Ω com {x 0.Ω {x 0.Ω Condizioni di esecuzione Vi sono due possibili contesti di valutazione di while (E) C: (com while ff ) identifica la semantica del comando while con quella del comando vuoto nel caso che la condizione è falsa A differenza di tutte le altre regole di S com la regola (com while tt ) non rispetta la regola fondamentale delle chiamate ricorsive Infatti la chiamata a com nella premessa non viene fatta su un sottoalbero dell albero di partenza, ma sullo stesso albero sintattico del while Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.32/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.30/83

9 Considerazioni sus com Esempio: Comando iterativo 2 Si noti che esistono configurazioni bloccate, ovvero non è possibile applicare alcuna transizione. Un esempio x = 5 8;,σ : l unica regola potenzialmente applicabile è (com = ), che però non può essere applicata in quanto non vi è modo di soddisfare la sua premessa (non esiste infatti alcun v IN per cui E [5 8]σ = v). Le configurazioni bloccate di questo tipo corrispondono a situazioni di errore. (d1): while (x>0) x=x-1;, {x 1.Ω com { (com while tt ) : E [x > 0]{x 1.Ω = tt, (com = ) : E [x-1]{x 1.Ω = 0, x=x-1;, {x 1.Ω com {x 0.Ω, (d2): while (x>0) x=x-1;, {x 0.Ω com {x 0.Ω {x 0.Ω Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.35/83 Considerazioni sus com Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.33/83 Esempio: Comando iterativo 3 In generale, il fatto che una configurazione sia bloccata o meno dipende dallo stato: la configurazione x / y,σ è bloccata se, nello stato σ, il valore associato ad y è 0, non lo è altrimenti. Errori di questo tipo sono detti dinamici, in quanto rilevabili solo al momento dell esecuzione. Un altra categoria di errori dinamici corrisponde a configurazioni che danno origine ad una sequenza infinita di passi di derivazione. (d2): while (x>0) x=x-1;, {x 0.Ω com { (com while ff ) : E [x > 0]{x 0.Ω = ff {x 0.Ω Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.36/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.34/83

10 Cicli Nella nostra semantica operazionale le configurazioni bloccate corrispondenti ai due tipi di errori dinamici appena visti non sono distinguibili, anche se esse corrispondono a situazioni diverse dal punto di vista del calcolo. Cicli Si consideri ad esempio la configurazione while(x > 0)x = x +1;, {x 2.Ω L unica regola del sistema S com potenzialmente applicabile è chiaramente (com while tt ), dal momento che E [x > 0]{x 2.Ω = tt. L applicazione della regola (com while tt ) richiede però, tra le premesse, di determinare una transizione del tipo while (x > 0) x = x +1;, {x 3.Ω com σ, per qualche σ. Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.39/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.37/83 Dimostrazione di equivalenza La semantica operazionale può essere utilizzata per dimostrare proprietà interessanti, come ad esempio l equivalenza tra espressioni e/o comandi. Informalmente, diciamo che due comandi (espressioni) sono equivalenti se hanno lo stesso comportamento in qualunque contesto, ovvero a partire dallo stesso stato iniziale. Cicli Anche in questo caso l unica regola potenzialmente applicabile è (com while tt ) (essendo E [x > 0]{x 3.Ω = tt), ed ancora una delle sue premesse corrisponde a determinare una transizione del tipo while (x > 0) x = x +1;, {x 4.Ω com σ. Questo procedimento non ha mai termine (dal momento che nessuno degli stati intermedi del calcolo corrisponde mai ad una situazione in cui la guardia del comando ha valore ff ). Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.40/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.38/83

11 com C 1,σ σ[ 5 / x ] C 2,σ Derivazioni { (com if tt ), E [true]σ = tt, (com = ) : E [5]σ = 5, x = 5;,σ com σ[ 5 / x ] com { (com = ) : E [5]σ = 5 σ[ 5 / x ] Definizione di equivalenza Due comandi C e C sono equivalenti se, per ogni stato σ, vale una delle seguenti condizioni: a) né C,σ né C,σ portano in una configurazione terminale; b) C,σ e C,σ portano nella stessa configurazione terminale. Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.43/83 Conclusione In questo caso, nelle due derivazioni non abbiamo fatto alcuna ipotesi sullo stato iniziale σ ed abbiamo ottenuto lo stesso stato finale: i due comandi, quindi, a partire da un generico stato portano nella stessa configurazione terminale. Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.41/83 Esempio Consideriamo ad esempio i due comandi seguenti: C 1 : if (true) x=5; else x=6; C 2 : x=5; e dimostriamone l equivalenza. Sia dunque σ un generico stato e valutiamo C 1,σ e C 2,σ. Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.44/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.42/83

12 Conclusioni Abbiamo così concluso che i due comandi portano nello stesso stato finale, a partire da un generico stato iniziale in cui E [x > 2]σ = tt. Ciò non conclude tuttavia la dimostrazione, che deve considerare anche tutti gli altri stati, ovvero quelli in cui E [x > 2]σ = ff. Sia allora σ un generico stato in cui E [x > 2]σ = ff. Esempio Consideriamo i due comandi seguenti: C 1 : if (x>2) y=1; else y=2; C 2 : if (x<=2) y=2; else y=1; La dimostrazione di equivalenza avviene ragionando per casi: consideriamo dapprima uno stato σ tale che E [x > 2]σ = tt. Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.47/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.45/83 C 1,σ Derivazioni com { (com if ff ), E [x > 2]σ = ff, (com = ) : E [2]σ = 2, y = 2;,σ com σ[ 2 / y ] σ[ 2 / y ] com C 1,σ σ[ 1 / y ] Derivazioni { (com if tt ), E [x > 2]σ = tt, (com = ) : E [1]σ = 1, y = 1;,σ com σ[ 1 / y ] com C 2,σ σ[ 2 / y ] { (com if tt ), E [x<=2]σ = tt, (com = ) : E [2]σ = 2, y = 2;,σ com σ[ 2 / y ] C 2,σ com { (com if ff ), E [x<=2]σ = ff, (com = ) : E [1]σ = 1, y = 1;,σ com σ[ 1 / y ] σ[ 1 / y ] Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.48/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.46/83

13 Esempio Equivalenza debole Vediamo un ultimo esempio, in cui è ancora necessario un ragionamento per casi. Consideriamo i due comandi: C 1 : if (E) x=true; else x=false; C 2 : x=e; dove E è una qualsiasi espressione booleana. Un altro tipo di equivalenza, più debole, è quella che si limita a considerare i due costrutti (comandi o espressioni) in un particolare stato. Consideriamo ad esempio le due espressioni: E 1 = (x +8) / y E 2 = ((x y) +y) / 2 e dimostriamone l equivalenza rispetto ad uno stato σ tale che σ(x) = 5 e σ(y) = 2. Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.51/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.49/83 Analisi per casi Consideriamo un generico stato σ e scindiamo la dimostrazione in tre casi. (i) E [E]σ non è definita. In questo caso entrambi i comandi non portano in alcuna configurazione terminale. (ii) E [E]σ = tt. In questo caso abbiamo due derivazioni (iii) E [E]σ = ff. In questo caso abbiamo due derivazioni Conclusioni Abbiamo visto che: E 1,σ exp 6 E 2,σ exp 6 insieme forniscono l equivalenza di E 1 ed E 2 in σ. Si noti che gli stati σ tali che σ(x) = 5 e σ(y) = 2 sono infiniti, ma questo non basta per dimostrare l equivalenza di E 1 ed E 2 in tutti i possibili stati. Infatti, in uno stato σ tale che σ (x) = 1 e σ (y) = 1 le due espressioni danno un risultato diverso (verificarlo per esercizio). Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.52/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.50/83

14 Semantica delle dichiarazioni Derivazioni caso (ii) frame e stato servono per modellare associazioni tra nomi e valori. Il costrutto linguistico è la dichiarazione la dichiarazioni di variabili corrisponde ad associazioni modificabili nello stato la modifica delle associazioni avviene mediante il comando di assegnamento non analizzeremo le dichiarazioni di costanti, corrispondenti ad associazioni non modificabili. ad ogni nome è associato un tipo, ovvero l insieme dei valori che possono essere associati ci limiteremo solo ai tipi int e boolean com C 1,σ σ[ tt / x ] C 2,σ { (com if tt ), E [E]σ = tt, (com = ): E [true]σ = tt, x = true;,σ com σ[ tt / x ] com { (com = ): E [E]σ = tt, x = E;,σ com σ[ tt / x ] σ[ tt / x ] Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.55/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.53/83 Sintassi della dichiarazione Derivazioni caso (iii) La sintassi di una dichiarazione è data dalle seguenti produzioni: Decl ::= int Ide; boolean Ide; int Ide = Exp; boolean Ide = Exp; C 1,σ com { (com if ff ), E [E]σ = ff, (com = ): E [false]σ = ff, x = false;,σ com σ[ ff / x ] σ[ ff / x ] C 2,σ com { (com = ): E [E]σ = ff, x = E;,σ com σ[ ff / x ] σ[ ff / x ] Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.56/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.54/83

15 { Dichiarazione errata int x; x = 10; y = x + 5; int y; La dichiarazione della variabile y segue il suo utilizzo. Dichiarazioni nei blocchi Ogni identificatore di variabile, prima di essere utilizzato in una espressione o in un comando, deve essere dichiarato Una dichiarazione può essere fatta in un qualunque punto di una sequenza all interno di un blocco Dal punto di vista sintattico, ciò comporta la seguente modifica delle produzioni già date: Block ::= {Stat_List Stat_List ::= Stat Stat Stat_List Stat ::= Com Decl L utilizzo di un nome all interno di un assegnamento o di una espressione è lecito solo se tale nome è stato prima dichiarato Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.59/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.57/83 Blocchi annidati Esempio di dichiarazioni { int x; x = 10; {... int y; y = x + 5; { int x; x = 10; int y; y = x + 5; La dichiarazione di ciascuna variabile deve precedere il suo uso. Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.60/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.58/83

16 Esempio di dichiarazioni annidate Regole delle dichiarazioni { int x; x = 10; { x = y+1; int y; y = x + 5; L assegnamento x=y+1 è errato Generalmente le dichiarazioni seguono le seguenti regole nel bloccho interno viene dichiarata la variabile y ed usata la variabile x (con riferimento all esempio precedente) alla fine di un blocco tutte le variabili in esso dichiarate cessano di esistere Bisogna dare regole semantiche per descrivere formalmente questi comportamenti. Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.63/83 Esempio di dichiarazioni annidate Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.61/83 Regole delle dichiarazioni { int x; x = 10; { int z; z = 20; int y; y = z + 5; Nel seguito indicheremo con: locali tutte le variabili dichiarate all interno di un blocco globali tutte le variabili visibili nel blocco ma non dichiarate in esso L assegnamento y = z + 5 è errato Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.64/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.62/83

17 Formalizzazione delle dichiarazioni Per i tipi elementari T nel nostro caso int o boolean possono essere dichiarate variabili senza inizializzazione per indicare un valore iniziale non definito verrà indicato con Formalizzazione delle dichiarazioni Formalizzazione delle dichiarazioni mediante la semantica operazionale introduzione del sistema di transizione S dec aggiungere nel frame una associazione per ogni dichiarazione le configurazioni non terminali di S dec sono del tipo D,σ dove D è un dichiarazione e σ è uno stato le configurazioni terminali sono stati Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.67/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.65/83 Regole per la dichiarazione σ = ϕ.σ σ = ϕ[ / x ].σ (dec var 1 ) T x;,σ dec σ σ = ϕ.σ E,σ exp v σ = ϕ[ v / x ].σ (dec var 2 ) T x = E;,σ dec σ Formalizzazione delle dichiarazioni Bisogna tenere presente che: la dichiarazione fissa il tipo dei valori che può assumere non associeremo l informazione del tipo alla variabile (nel nostro caso) vi sono due tipi di contesti in è definita la semantica semantica statica coerenza dei tipi semantica dinamica assegnamento. Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.68/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.66/83

18 Regole Dove agiscono La regola (com Block ) formalizza che: un blocco viene eseguito in uno stato nel quale è stato impilato un nuovo frame nel blocco sono presenti le dichiarazioni nello stato dopo il blocco cessano le variabili locali mentre permangono le modificha apportate alla variabilo globali Le dichiarazioni vengono fatte nei blocchi quindi vengono modificate le regole (com Block ) e (com Stat List ). ogni blocco introduce un frame che conterrà le associazioni con le variabili dichiarate la variabile cessa di esistere terminata l esecuzione del blocco le liste di dichiarazioni e comandi (elementi di Stat_list) sono trattate da un sottosistema Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.71/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.69/83 Esempio: dichiarazioni annidate Liste di dichiarazioni e/o comandi Esempio con rappresentazione grafica del frame e dello stato { int x; x = 5; { (1) int y; y = x + 5; (2) x = x + y; (3) (4) x = 2*x; (5) Slist, ω.σ slist ϕ.σ (com Block ) {Slist, σ com σ S Decl S, σ dec σ (slist dec ) S, σ slist σ S Com S, σ com σ (slist com ) S, σ slist σ S, σ slist σ Slist, σ slist σ (slist list ) S Slist, σ slist σ Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.72/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.70/83

19 Esempio 3 Esempio 1 Dopo l esecuzione dell assegnamento (3) abbiamo il seguente stato: y 10 x 15 Supponiamo che tale blocco venga eseguito a partire dallo stato vuoto, Ω. Lo stato al punto (1), al momento cioè dell ingresso nel blocco annidato, è il seguente: x 5 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.75/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.73/83 Esempio 4 Esempio 2 All uscita del blocco annidato, punto (4), il frame precedentemente creato cessa di esistere x 15 Dopo l esecuzione dell assegnamento (2), lo stato si presenta come segue: y 10 x 5 Si noti come l ingresso nel blocco annidato abbia causato la creazione di un nuovo frame, destinato a contenere le variabili dichiarate, appunto, in tale blocco (nel caso specifico y) Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.76/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.74/83

20 Esempio: ridichiarazione annidata Esempio 5 { int x = 10; int y = 20; { (1) int x = 100; (2) y = y + x; (3) y = y + x; (4) ed è in quest ultimo stato che viene eseguito l assegnamento (5), a seguito del quale abbiamo lo stato conclusivo x 30 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.79/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.77/83 Esempio 1 Esempio: ridichiarazione annidata Lo stato al punto (1), al momento cioè dell ingresso nel blocco annidato, è il seguente: x 10 y 20 Vediamo infine un esempio che mostra come la semantica data consenta anche di trattare il caso di blocchi annidati in cui uno stesso identificatore viene ridefinito (purchè non nello stesso blocco). Questa possibilità, è nella tradizione dei linguaggi imperativi quali Algol, Pascal e C, e viene contemplata anche in Java. Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.80/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.78/83

21 Esempio 4 Esempio 2 Dopo l uscita dal blocco annidato, il frame corrispondente cessa di esistere e dunque il riferimento ad x in (4) è ora un riferimento alla dichiarazione di x del blocco più esterno. L effetto dell assegnamento (4) è dunque rappresentato dal seguente stato: x 10 y 130 Dopo l esecuzione della dichiarazione (2), lo stato si presenta come segue: x 100 x 10 y 20 Si noti che la nuova variabile x fa parte del frame più recente, corrispondente al blocco annidato. Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.83/83 Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.81/83 Esempio 3 In questo stato viene eseguito l assegnamento (3), il cui effetto è rappresentato dal nuovo stato: x 100 x 10 y 120 Si noti che, nell espressione y+x, il riferimento ad x è un riferimento alla dichiarazione più recente per x. Università degli Studi di Camerino - Corso di Laurea in Informatica - Programmazione - Semantica - Semantica operazionale del nucleo di Java p.82/83

Semantica operazionale dei linguaggi di Programmazione

Semantica operazionale dei linguaggi di Programmazione Semantica operazionale dei linguaggi di Programmazione Stato Rosario Culmone, Luca Tesei 19/12/2007 UNICAM - p. 1/?? Espressioni con variabili Espandiamo il sistema exp in modo da trattare il nuovo caso

Dettagli

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl Approfondimento 2.1 Non è questo il testo dove trattare esaurientemente queste tecniche semantiche. Ci accontenteremo di dare un semplice esempio delle tecniche basate sui sistemi di transizione per dare

Dettagli

Cosa si intende con stato

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

Dettagli

Oggetti sintattici. Semantica operazionale dei linguaggi di Programmazione. Oggetti sintattici. Funzioni di valutazione semantica

Oggetti sintattici. Semantica operazionale dei linguaggi di Programmazione. Oggetti sintattici. Funzioni di valutazione semantica Oggetti sintattici Abbiamo più volte sottolineato il fatto che le stringhe di un linguaggio sono di base oggetti simbolici puri Non hanno un significato particolare associato, a parte quello di essere

Dettagli

Istruzioni di controllo: SEQUENZA

Istruzioni di controllo: SEQUENZA Istruzioni di controllo: SEQUENZA Negli esempi visti in precedenza gli algoritmi sono stati descritti come sequenze di passi elementari del tipo Passo 1. azione 1 Passo 2. azione 2... Abbiamo utilizzato

Dettagli

Semantica operazionale dei linguaggi di Programmazione

Semantica operazionale dei linguaggi di Programmazione Semantica operazionale dei linguaggi di Programmazione Sistemi di transizioni (2) Rosario Culmone, Luca Tesei Lucidi tratti dalla dispensa Elementi di Semantica Operazionale R. Barbuti, P. Mancarella e

Dettagli

INTRODUZIONE ALLA LOGICA DI HOARE. Corso di Logica per la Programmazione A.A. 2013/14

INTRODUZIONE ALLA LOGICA DI HOARE. Corso di Logica per la Programmazione A.A. 2013/14 INTRODUZIONE ALLA LOGICA DI HOARE Corso di Logica per la Programmazione A.A. 2013/14 INTRODUZIONE Dall inizio del corso ad ora abbiamo introdotto, un po alla volta, un linguaggio logico sempre più ricco:

Dettagli

Linguaggi di programmazione: sintassi e semantica Sintassi fornita con strumenti formali: Semantica spesso data in modo informale

Linguaggi di programmazione: sintassi e semantica Sintassi fornita con strumenti formali: Semantica spesso data in modo informale LOGICA DI HOARE INTRODUZIONE Linguaggi di programmazione: sintassi e semantica Sintassi fornita con strumenti formali: es. grammatica in BNF Semantica spesso data in modo informale di stile operazionale

Dettagli

Scelte. Costrutto condizionale. Il costrutto if. Il costrutto if. Rappresentazione con diagramma a blocchi. Il costrutto if

Scelte. Costrutto condizionale. Il costrutto if. Il costrutto if. Rappresentazione con diagramma a blocchi. Il costrutto if Scelte Costrutto condizionale Scelte, blocchi Fino ad ora il corpo dei metodi che abbiamo scritto aveva solo un modo di essere eseguito: in sequenza dalla prima istruzione all ultima In applicazioni non

Dettagli

7 Procedure. Estensioni sintattiche Dec ::= void Ide (Ptype Ide) Block Com ::= Ide(Exp);

7 Procedure. Estensioni sintattiche Dec ::= void Ide (Ptype Ide) Block Com ::= Ide(Exp); 7 Procedure Nei linguaggi di programmazione è di fondamentale importanza riuscire a scrivere dei programmi che siano facili da leggere e da modificare. Lo scopo di funzioni e procedure è quello di permettere

Dettagli

PROGRAMMAZIONE III Appello del 7/03/2003

PROGRAMMAZIONE III Appello del 7/03/2003 PROGRAMMAZIONE III Appello del 7/03/2003 Scrivere in stampatello COGNOME, NOME e NUMERO DI MATRICOLA (se conosciuto) su ogni foglio consegnato e sul testo, che va consegnato insieme al compito. ESERCIZIO

Dettagli

LA LOGICA DI HOARE. Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella

LA LOGICA DI HOARE. Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella LA LOGICA DI HOARE Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella INTRODUZIONE Dall inizio del corso ad ora abbiamo introdotto, un po alla volta, un linguaggio logico

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 13 Comando Iterativo Sequenze (array) ed Aggiornamento Selettivo pag. 1 Regole di Inferenza per Triple di Hoare: Comando Iterativo Semantica informale del Comando Iterativo

Dettagli

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09 Linguaggi procedurali Paolo Bison Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09 Linguaggi procedurali, Paolo Bison, FI08, 2008-09-29 p.1 Linguaggi procedurali classe

Dettagli

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 6 - Blocchi e cicli Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 13 Sistema di Dimostrazioni per le Triple di Hoare Comando Vuoto, Assegnamento, Sequenza, Condizionale pag. 1 Tripla di Hoare Soddisfatta: richiamo Data una Tripla

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 12 Sistema di Dimostrazioni per le Triple di Hoare Comando Vuoto, Assegnamento, Sequenza, Condizionale A. Corradini e F.Levi Dip.to Informatica Logica per la Programmazione

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 12 Sistema di Dimostrazioni per le Triple di Hoare Comando Vuoto, Assegnamento, Sequenza, Condizionale pag. 1 Tripla di Hoare Soddisfatta: richiamo Data la tripla di

Dettagli

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

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

Dettagli

Introduzione alla programmazione

Introduzione alla programmazione Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste

Dettagli

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso Unità Didattica 2 Linguaggio C Espressioni, Operatori e Strutture linguistiche per il controllo del flusso 1 Espressioni e assegnazioni Le espressioni sono definite dalla grammatica: espressione = variabile

Dettagli

Semantica Operazionale del linguaggio imperativo IMP

Semantica Operazionale del linguaggio imperativo IMP Aniello Murano Semantica Operazionale del linguaggio imperativo IMP 2 Lezione n. Parole chiave: Sem. Operazionale Corso di Laurea: Informatica Codice: Email Docente: murano@ na.infn.it A.A. 2008-2009 Introduzione

Dettagli

Costrutti di Programmazione Strutturata. Informatica 1 / 22

Costrutti di Programmazione Strutturata. Informatica 1 / 22 Costrutti di Programmazione Strutturata Informatica 1 / 22 Costrutti di Base Ricordi? Un algoritmo è detto strutturato se usa solo Sequenze di istruzioni Selezioni (se predicato allora fai istruzioni altrimenti

Dettagli

1 Il Paradigma Imperativo

1 Il Paradigma Imperativo 1 Il Paradigma Imperativo 1.1 Imp : un semplice linguaggio imperativo Abbiamo visto in Fun un meccanismo eager per la valutazione dei parametri di una funzione ed un meccanismo lazy. Una situazione analoga

Dettagli

La programmazione nel linguaggio JavaScript. Il programma

La programmazione nel linguaggio JavaScript. Il programma Il programma Nei linguaggi di programmazione il programma è una funzione che ha come argomento i dati digitati in input e opportunamente convertiti. la descrizione della funzione (ovvero il programma)

Dettagli

Strutture di controllo decisionali

Strutture di controllo decisionali Capitolo 3 Strutture di controllo decisionali ANDREA GINI Dopo aver introdotto il concetto di variabile e di array, è giunto il momento di analizzare a fondo i restanti costrutti del linguaggio Java. Come

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2006/07 Università di Padova Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.1 Pseudo codice linguaggio testuale mix di linguaggio naturale ed elementi

Dettagli

ESEMPI DI TRIPLE DI HOARE. Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella

ESEMPI DI TRIPLE DI HOARE. Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella ESEMPI DI TRIPLE DI HOARE Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella ESEMPIO DI SEQUENZA DI COMANDI Verificare la tripla: Per la Regola per la Sequenza, dobbiamo

Dettagli

Lezione 6 Introduzione al C++ Mauro Piccolo

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

Dettagli

Ing. Lorenzo Vismara

Ing. Lorenzo Vismara Ing. Lorenzo Vismara ! "# #!$#%&# '(!)&!*)&#*$# +!, +$-.(( #!((%&#, #!& %&) /$#01&&#2! 0#( 3452 $ 6#( 1 2 &## #!7 #89): #;##( 1? )#&)< $9): #@82 #)AA)#&#&$( #7)&#7& @B && ##@A&#C 7 $C#&7 @B A&#)@#7&#

Dettagli

Tecniche di prova per induzione

Tecniche di prova per induzione Aniello Murano Tecniche di prova per induzione 3 Lezione n. Parole chiave: Induzione Corso di Laurea: Informatica Codice: Email Docente: murano@ na.infn.it A.A. 2008-2009 Riassunto delle lezioni precedenti

Dettagli

Programmazione II. Lezione 3. Daniele Sgandurra 26/10/2010.

Programmazione II. Lezione 3. Daniele Sgandurra 26/10/2010. Programmazione II Lezione 3 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 26/10/2010 1/35 Programmazione II Lezione 3 26/10/2010 Sommario 1 2 Semantica 2/35 Programmazione II Lezione 3 26/10/2010 Parte

Dettagli

Contenuti. Elementi di semantica denotazionale ed operazionale. Sintassi astratta. Sintassi e semantica. ! sintassi astratta e domini sintattici

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

Dettagli

Strutture di controllo iterative

Strutture di controllo iterative Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Introduzione Problema Scrivere un programma che acquisisca da standard input un intero

Dettagli

interpretazione astratta

interpretazione astratta interpretazione astratta Cosimo Laneve interpretazione astratta una tecnica utilizzata da 30 anni (Patrick e Radhia Cousot nel 1977) per trattare in modo sistematico astrazioni e approssimazioni nata per

Dettagli

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione Lezione 5 e 6 - Concetto di blocco - Controllo del flusso di un programma - Costrutti per la scelta if e switch - Costrutti while e for - Operatori in C Fabio Scotti (2004-2009) Laboratorio di programmazione

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica del Primo Ordine: Motivazioni, Sintassi e Interpretazioni Logica per la Programmazione Lezione 7 Formule Valide, Conseguenza Logica Proof System per la Logica del Primo Ordine Leggi per i Quantificatori

Dettagli

ESEMPI DI TRIPLE DI HOARE. Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella

ESEMPI DI TRIPLE DI HOARE. Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella ESEMPI DI TRIPLE DI HOARE Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella ESEMPIO DI SEQUENZA DI COMANDI Verificare la tripla: Per la Regola per la Sequenza, dobbiamo

Dettagli

Elementi di Semantica Operazionale. Appunti per gli studenti di Fondamenti di Programmazione (corsi A-B-C)

Elementi di Semantica Operazionale. Appunti per gli studenti di Fondamenti di Programmazione (corsi A-B-C) Elementi di Semantica Operazionale Appunti per gli studenti di Fondamenti di Programmazione (corsi A-B-C) Corso di Laurea in Informatica Università di Pisa A.A. 2004/05 R. Barbuti, P. Mancarella e F. Turini

Dettagli

Semantiche dei linguaggi di programmazione

Semantiche dei linguaggi di programmazione Semantiche dei linguaggi di programmazione By Giulia Costantini (819048) e Giuseppe Maggiore (819050) Contents La semantica del linguaggio... 1 Tipi di semantica... 1 Esempio di semantica operazionale...

Dettagli

5 - Istruzioni condizionali

5 - Istruzioni condizionali 5 - Istruzioni condizionali 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

L assegnamento. Andrea Marin. a.a. 2011/2012. Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time

L assegnamento. Andrea Marin. a.a. 2011/2012. Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Abbiamo visto È conveniente definire una macchina astratta C Lo stato della macchina ci

Dettagli

CORSO DI PROGRAMMAZIONE

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

Dettagli

Dispensa su. Funzioni Booleane. Jianyi Lin Università degli Studi di Milano

Dispensa su. Funzioni Booleane. Jianyi Lin Università degli Studi di Milano Dispensa su Funzioni Booleane Jianyi Lin Università degli Studi di Milano jianyi.lin@unimi.it 18 novembre 2011 1 Operazioni booleane In questa sezione introduciamo il concetto di funzione booleana e accenniamo

Dettagli

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

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

Dettagli

Descrizione di un algoritmo

Descrizione di un algoritmo Descrizione di un algoritmo Si descrive un algoritmo cercando di sintetizzare il più possibile la sua sequenza di passi; Non si utilizza un linguaggio di programmazione specifico, ma è meglio utilizzare

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 3 Analisi dettagliata di un programma /* commento */ Possono estendersi su più linee apparire in qualsiasi parte del programma. Alternativamente

Dettagli

Interpreti, compilatori e semantica operazionale

Interpreti, compilatori e semantica operazionale Interpreti, compilatori e semantica operazionale 1 Linguaggi di programmazione Come si comprendono le caratteristiche di un linguaggio di programmazione? Molte risposte diverse manuali, documentazione

Dettagli

Programmazione in Java (I modulo)

Programmazione in Java (I modulo) Programmazione in Java (I modulo) Lezione 7 Iterazioni nei programmi:definite e indefinite Tre costrutti: While Do...While For Esempi Istruzioni di iterazione Le istruzioni iterative permettono di ripetere

Dettagli

Corso: Fondamenti di Linguaggi di Programmazione

Corso: Fondamenti di Linguaggi di Programmazione Corso: Fondamenti di Linguaggi di Programmazione Paola Giannini Chiusure e Binding statico e dinamico Paola Giannini, a.a. 2017/2018 FONDAMENTI LINGUAGGI Binding statico e dinamico 1 / 8 Stack e Sostituzione

Dettagli

Assegnazione di una variabile

Assegnazione di una variabile Assegnazione di una variabile Per scrivere un valore dentro una variabile si usa l operatore di assegnazione, che è rappresentato dal simbolo =. Quindi, se scrivo int a; a = 12; assegno alla variabile

Dettagli

STRUTTURE DI CONTROLLO DEL C++

STRUTTURE DI CONTROLLO DEL C++ STRUTTURE DI CONTROLLO DEL C++ Le istruzioni if e else Le istruzioni condizionali ci consentono di far eseguire in modo selettivo una singola riga di codice o una serie di righe di codice (che viene detto

Dettagli

Introduzione al C. Lez. 1 Elementi. Rossano Venturini

Introduzione al C. Lez. 1 Elementi. Rossano Venturini Introduzione al C Lez. 1 Elementi Rossano Venturini rossano@di.unipi.it Pagine del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start http://algoritmica.spox.spoj.pl/alglab2013 Lezioni

Dettagli

Laboratorio di Python

Laboratorio di Python Problem solving, Ricorsione, Università di Bologna 13 e 15 marzo 2013 Sommario 1 2 3 4 Errore di semantica Esercizio def vocali(s): voc='' for c in s: if c in 'aeiou': voc=voc+c return voc Cerchiamo di

Dettagli

Sviluppo di programmi

Sviluppo di programmi Sviluppo di programmi FASE 1: Dare un nome al problema partendo dall analisi del problema FASE 2: Scrivere la specifica funzionale FASE 3: Scrittura dell algoritmo FASE 3.1: Introduzione delle variabili

Dettagli

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico

Dettagli

Risoluzione di un problema

Risoluzione di un problema Algoritmi Risoluzione di un problema Descrizione di un problema! Individuazione di un ALGORITMO! Metodo risolutivo (progetto) Introduzione 2 Algoritmo Sequenza finita di mosse che risolve in un tempo finito

Dettagli

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale Algebra di Boole Stefano Cagnoni Algebra di Boole L algebra

Dettagli

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

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

Dettagli

Il C nel C++ Struttura di un linguaggio. Elementi lessicali. Spazi. Livello lessicale: Livello sintattico: Livello semantico:

Il C nel C++ Struttura di un linguaggio. Elementi lessicali. Spazi. Livello lessicale: Livello sintattico: Livello semantico: Struttura di un linguaggio Il C nel C++ Livello lessicale: regole per la definizione i simboli Livello sintattico: regole per la composizione dei simboli Livello semantico: significato delle strutture

Dettagli

Tipi di dato primitivi

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

Dettagli

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

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A. Cicli e array Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7 Lez. 8 - Introduzione all ambiente

Dettagli

Informatica 3. LEZIONE 2: Sintassi e semantica

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

Dettagli

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO Rappresentazione degli algoritmi Problema Algoritmo Algoritmo descritto con una qualche notazione Programma Defne del procedimento

Dettagli

Informatica e Bioinformatica: AND, OR, NOT

Informatica e Bioinformatica: AND, OR, NOT 31 marzo 2014 Algebra di Boole L algebra di Boole opera su due valori di verità, VERO e FALSO, mutuamente esclusivi. Nell algebra di Boole è possibile definire funzioni (che chiameremo operazioni logiche)

Dettagli

Laboratorio 3 (SmallC: Alberi Astratti con Tipi Algebrici in OCaml)

Laboratorio 3 (SmallC: Alberi Astratti con Tipi Algebrici in OCaml) Laboratorio 3 (SmallC: Alberi Astratti con Tipi Algebrici in OCaml) Sommario: 6 aprile, 2018 - Ocaml: Tipi Algebrici o Concreti. Sintassi Astratta: Esprimiamo Dcl con Tipi Algebrici OCaml. Programmare

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica del Primo Ordine: Motivazioni, Sintassi e Interpretazioni Logica per la Programmazione Lezione 1 Calcolo Proposizionale: sintassi e semantica Tautologie Esempi di Formalizzazione di Enunciati pag.

Dettagli

Struttura di un linguaggio

Struttura di un linguaggio Il C nel C++ Struttura di un linguaggio Livello lessicale: regole per la definizione i simboli Livello sintattico: regole per la composizione dei simboli Livello semantico: significato delle strutture

Dettagli

Istruzioni Condizionali

Istruzioni Condizionali Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 6 Istruzioni Condizionali Carla Limongelli Settembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Istruzioni condizionali

Dettagli

LA METAFORA DELL UFFICIO

LA METAFORA DELL UFFICIO LA METAFORA DELL UFFICIO Lavagna di lavoro Lavagna di programma Sportello utenti Impiegato Capo Ufficio LAVAGNA DI LAVORO Chiamiamo variabili le posizioni sulla lavagna, identificate ognuna da un nome

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica Le classi di istruzioni in C++ 1 Le classi di istruzioni in C++ SEQUENZIALI Statement semplice Statement composto CONDIZIONALI if < expr.> else switch case

Dettagli

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

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

Dettagli

Strutture di Controllo

Strutture di Controllo Strutture di Controllo Istruzioni condizionali e cicli http://www.dia.uniroma3.it/~roselli/ roselli@dia.uniroma3.it Credits Materiale a cura del Prof. Franco Milicchio Introduzione Fino ad ora, il nostro

Dettagli

Sintassi. Linguaggi. 4: Sintassi. Claudio Sacerdoti Coen. Universitá di Bologna 24/02/2011. Claudio Sacerdoti Coen

Sintassi. Linguaggi. 4: Sintassi. Claudio Sacerdoti Coen. Universitá di Bologna 24/02/2011. Claudio Sacerdoti Coen Linguaggi 4: Universitá di Bologna 24/02/2011 Outline 1 Wikipedia: La sintassi è la branca della linguistica che studia i diversi modi in cui le parole si uniscono tra loro per formare

Dettagli

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

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

Dettagli

Informatica AA 2005/06. Programmazione M.A. Alberti. Operatori in Java 1. Operatori in Java. Espressioni aritmetiche. Espressioni booleane

Informatica AA 2005/06. Programmazione M.A. Alberti. Operatori in Java 1. Operatori in Java. Espressioni aritmetiche. Espressioni booleane Operatori in Java Operatori in Java Corso di laurea in Informatica Operatori aritmetici Operatori di uguaglianza e relazionali Operatori logici in espressioni booleane La precedenza degli operatori L associatività

Dettagli

LOGICA DEL PRIMO ORDINE: PROOF SYSTEM. Corso di Logica per la Programmazione A.A. 2013/14 Andrea Corradini

LOGICA DEL PRIMO ORDINE: PROOF SYSTEM. Corso di Logica per la Programmazione A.A. 2013/14 Andrea Corradini LOGICA DEL PRIMO ORDINE: PROOF SYSTEM Corso di Logica per la Programmazione A.A. 2013/14 Andrea Corradini LOGICA DEL PRIMO ORDINE: RIASSUNTO Sintassi: grammatica libera da contesto (BNF), parametrica rispetto

Dettagli

Per gli esercizi sulla algebra booleana, si consiglia di verificare tramite tabelle di verità le equivalenze logiche proposte sulle dispense.

Per gli esercizi sulla algebra booleana, si consiglia di verificare tramite tabelle di verità le equivalenze logiche proposte sulle dispense. Fondamenti di Informatica - A. Fantechi Raccolta di esercizi Per gli esercizi sulla algebra booleana, si consiglia di verificare tramite tabelle di verità le equivalenze logiche proposte sulle dispense.

Dettagli

Programmazione in Java (I modulo)

Programmazione in Java (I modulo) Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto

Dettagli

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

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

Dettagli

Laboratorio di Python

Laboratorio di Python Istruzione di condizione, Input da tastiera, Università di Bologna 6 e 8 marzo 2013 Sommario 1 Tipi di errore e Debugging 2 3 4 Outline Tipi di errore e Debugging 1 Tipi di errore e Debugging 2 3 4 Esercizio

Dettagli

Linguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto

Linguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto rammatiche e Linguaggi Liberi da Contesto Abbiamo visto che molti linguaggi non sono regolari. Consideriamo allora una classe piu ampia di linguaggi, i Linguaggi Liberi da Contesto (CFL) i CFL sono stati

Dettagli

Fondamenti di Programmazione Recupero Primo Parziale 30 Gennaio 2008 Traccia A

Fondamenti di Programmazione Recupero Primo Parziale 30 Gennaio 2008 Traccia A Fondamenti di Programmazione Recupero Primo Parziale 30 Gennaio 2008 Traccia A Cognome: Nome: Corso di Laurea N. Matricola: Giorno non preferito per l orale (Matematici) Giorno non preferito per l orale

Dettagli

print((math.floor(1345/10)%10); print (Math.floor(1345/100)%10); Le funzioni in JavaScript

print((math.floor(1345/10)%10); print (Math.floor(1345/100)%10); Le funzioni in JavaScript Funzioni Funzioni predefinite della libreria matematica Funzioni disponibili: Math.sqrt(x) radice quadrata Math.log(x) logaritmo naturale in base e di x Math.abs(x) valore assoluto di x Math.ceil(x) arrotonda

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica del Primo Ordine: Motivazioni, Sintassi e Interpretazioni Logica per la Programmazione Lezione 8 Modelli, Formule Valide, Conseguenza Logica Proof Systems Regole di inferenza per Calcolo Proposizionale

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione 3: Istruzioni ed operatori booleani. Vittorio Scarano Corso di Laurea in Informatica Università di Salerno Soluzioni agli esercizi Istruzioni (statement) semplici e di controllo

Dettagli

ISTRUZIONI ISTRUZIONI SEMPLICI

ISTRUZIONI ISTRUZIONI SEMPLICI ISTRUZIONI istruzioni azioni modifica permanente dello stato interno strutture di controllo ::= ::= ::=

Dettagli

Programmazione C Massimo Callisto De Donato

Programmazione C Massimo Callisto De Donato 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

Fondamenti d Informatica: Linguaggio While. Barbara Re, Phd

Fondamenti d Informatica: Linguaggio While. Barbara Re, Phd Fondamenti d Informatica: Linguaggio While Barbara Re, Phd Il linguaggio WHILE } La computabilità come supporto ai moderni linguaggi di programmazione } Si può generalizzare rispetto ad una vasta famiglia

Dettagli

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

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

Dettagli

Linguaggi, Traduttori e le Basi della Programmazione

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

Dettagli

Esercitazione 2. Espressioni booleane Il comando if-else

Esercitazione 2. Espressioni booleane Il comando if-else Esercitazione 2 Espressioni booleane Il comando if- Espressioni booleane L espressione (i==100) è un espressione booleana. La sua valutazione può restituire solo uno dei due valori booleani true = 1 (in

Dettagli

Prima introduzione al linguaggio C

Prima introduzione al linguaggio C Prima introduzione al linguaggio C I Abbiamo visto come un programma non sia altro che un algoritmo codificato in un linguaggio di programmazione. I Problema: quale linguaggio scegliere per la codifica

Dettagli

Programmazione A.A Costrutti di base. ( Lezione XII, parte I ) Gestione dell input. Prof. Giovanni Gallo Dr.

Programmazione A.A Costrutti di base. ( Lezione XII, parte I ) Gestione dell input. Prof. Giovanni Gallo Dr. Programmazione A.A. 2002-03 I Costrutti di base ( Lezione XII, parte I ) Gestione dell input Prof. Giovanni Gallo Dr. Gianluca Cincotti Dipartimento di Matematica e Informatica Università di Catania e-mail

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 15 Sistema di Dimostrazioni per le Triple di Hoare Sequenze (Array) e Aggiornamento Selettivo A. Corradini e F.Levi Dip.to Informatica Logica per la Programmazione

Dettagli