public class volume { public static void main (String[] args) { final double bott_vol =2.0; final double latt_vol = 0.355; int bott_num = 4; int latt_num.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

I Linguaggi di programmazione
Algebra Relazionale 3 Università degli Studi del Sannio
I SISTEMI LINEARI.
Sistemi di numerazione
Sommario Nelle lezioni precedenti abbiamo introdotto tutti gli elementi che formano un particolare tipo di linguaggio logico, denominato linguaggio predicativo.
Semantica di linguaggi di programmazione Ne esistono differenti stili a seconda di paradigma di programmazione uso (validazione, prototyping, verifica.
Type Checking (1° parte)
Algoritmi e Programmazione
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.
Metodologie di Programmazione = decomposizione basata su astrazioni
Semantica operazionale
INSIEMI INSIEME= gruppo di oggetti di tipo qualsiasi detti elementi dell’insieme. Un insieme è definito quando viene dato un criterio non ambiguo che.
1 Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Il ragionamento classico
Semantica Denotazionale
Semantiche dei linguaggi di programmazione
Sistemi basati su conoscenza Conoscenza e ragionamento Prof. M.T. PAZIENZA a.a
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Assegnamento di valore a una variabile Anno Accademico 2009/2010.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Definizione di Algoritmo
Soluzione Esercizio - Classe Vettore
Funzioni, Rappresentazioni e Coscienza
CALCOLO LETTERALE Concetto di monomio Addizione di monomi
Modelli simulativi per le Scienze Cognitive
Fondamentidi Programmazione Corso: Fondamenti di Programmazione Classe: PARI-DISPARI Docente: Prof. Luisa Gargano Testo: Aho, Ulman, Foundations of Computer.
Semantica Operazionale Strutturata
mosaic manipola oggetti primitivi (ruota e unisci) regole:
Ingegneria della conoscenza e sistemi esperti Dario Bianchi, 1999 Conoscenza e ragionamento Logica dei predicati del primo ordine.
Il Linguaggio C.
Espressioni condizionali
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede.
LINGUAGGI DI PROGRAMMAZIONE
Programmazione in Java Claudia Raibulet
JAVA Franco Bombi 8 ottobre FB Introduzione Java è un linguaggio di impiego generale, basato su classi e orientato agli oggetti Java.
LA SCOMPOSIZIONE DI POLINOMI IN FATTORI
I primi insiemi che si incontrano in matematica sono quelli dei numeri;  daremo qui una breve descrizione dei principali insiemi numerici, delle loro operazioni.
Introduzione ai linguaggi formali e alle stringhe
Sintassi: Programma e classi Program::=prog {ClassDeclList {StatList}} ClassDeclList::=ClassDecl ClassDeclList |  ClassDecl::=class Ide c [StaticMetDefList]
1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.
Introduzione a Javascript
Rappresentazione dell’informazione nel calcolatore.
Calcolo letterale.
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []
Nucleo di Java: Struttura e Semantica Espressioni Assegnamento Controllo di sequenza Dichiarazioni.
Fondamenti di Informatica1 Memorizzazione su calcolatore L'unità atomica è il bit (BInary DigiT) L'insieme di 8 bit è detta byte Altre forme di memorizzazione:
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
Linguaggi di programmazione: panoramica Linguaggi di programmazione ad alto livello: – –Programmazione procedurale – –Programmazione object oriented –
Grammatiche Grammatiche libere da contesto Grammatiche regolari
Elementi di semantica denotazionale ed operazionale
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
STRUTTURA DI UN PROGRAMMA C In prima battuta, la struttura di un programma C è definita dalla seguente produzione: ::= { }
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
Rappresentazione dell'informazione
La codifica dei numeri.
FI - Algoritmi e Programmazione 1 Variabili Consentono di aumentare notevolmente la potenza espressiva. Una variabile è caratterizzata da:  Un nome 
Conversione binario-ottale/esadecimale
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Programmazione dei Calcolatori Elettronici
Lezione 2 : Basi del linguaggio Variabili. Come visto nella lezione 1 le classi registrano il proprio stato nelle variabili  int cadenza = 0;  int velocita.
Linguaggi, stringhe e alfabeti. Linguaggi e grammatiche Un linguaggio è un sistema di comunicazione tra persone che permette di trasmettere informazioni.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Introduzione alle Classi e agli Oggetti in Java 1.
IL NUMERO …qualche idea…..
Transcript della presentazione:

public class volume { public static void main (String[] args) { final double bott_vol =2.0; final double latt_vol = 0.355; int bott_num = 4; int latt_num = 10; double totale = bott_vol * bott_num + latt_vol * latt_num; System.out.print(“volume totale ” + totale + “ litri” ); } Linguaggi: Semantica Programma in Java Cosa significa? cosa calcola ? a cosa serve ? è corretto?

La correttezza sintattica è data dalla grammatica di Java Programma::= Modulo Moduli Modulo::= Imports Classe Classi Moduli ::= Modulo Moduli |  Importazioni::= Importa ; Imports |  Importa:= import java.Ide.(Ide | * ) Classe::= Descrittori class Ide Def Classi ::= Classe Classi |  Descrittori::= public | private | static | final | ...

6/19/20153 Sintassi e semantica La sintassi di un linguaggo di programmazione è in genere descritta in modo molto rigoroso. La semantica viceversa è descritta in modo non formale e quindi poco rigoroso. I vantaggi di una descrizione formale della semantica sono: –aiutano nella definizione di programmi per la soluzione dei problemi, –permette di ragionare sulla correttezza dei programmi, –aiuta a far sì che implementazioni diverse del linguaggio diano gli stessi risultati. –Infine studiare la semantica fa comprendere i problemi che bisogna affrontare nell’implementazione del linguaggio

Semantica Operazionale: Sistemi di Transizioni Sistema di transizioni: S  Sistema di transizioni: S   configurazioni (Stati)  configurazioni (Stati) T   finali T   finali    x  relazione di transizione    x  relazione di transizione Derivazione D: Derivazione D:  *  chiusura antisimmetrica, riflessiva, transitiva di   *  chiusura antisimmetrica, riflessiva, transitiva di   i  *  k   i  …   k  D  i  *  k   i  …   k  D

6/19/20155 Un esempio Data la grammatica G= definiamo un sistema di transizione nel modo seguente:  ={  |  ({a,b}  {S})*} T ={  |   {a,b}*}  S   ({a,b}  {S})}  ab     S   ({a,b}  {S})}  aSb   

Regole (R) condizionali per   1  2     n    ’ Le  i sono premesse e sono relazioni tra espressioni che contengono costanti, variabili e operatori del tipo (=, ≠, ). Le variabili sono quelle che permettono di istanziare la regola. Le indichiamo con Vars(R). La copertura delle variabili serve a garantire la fondatezza della regola.

Copertura delle variabili  1  2     n    ’ Sia x  Vars(R), x è coperta in R se e solo se vale una delle seguenti condizioni: 1)x occorre  ; 2)esiste in R una premessa  i del tipo y=t tale che y è coperta in R e x  Vars(t) 3)esiste in R una premessa  i del tipo x=t tale che tutte le variabili in Vars(t) sono coperte. 4)esiste in R una premessa  i del tipo  ’  ’ tale che tutte le variabili in  sono coperte in R e x  Vars(  ’) Sia R la seguente regola condizionale

6/19/20158 Sostituzioni e istanziazioni Sia V= {x 1,...x k } è un insieme di variabili, si dice sostituzione l’insieme di associazioni ={c 1 /x 1,... c k /x k } dove c 1,... c k sono costanti. Dato un termine o espressione E questo può essere istanziato su una sostituzione (E). L’istanza è l’espressione che si ottiene rimpiazzando in E tutte le variabili che occorrono in con i rispettivi valori. –es. V= {x,y} e sia E = x<y+1 l’espressione se ={4/x,2/y} allora (E) = 4<2+1 = 4<3= false –se invece ={2/x, 3/y} allora (E) = 2<3+1 2< 4= true

6/19/20159 Derivazione    ’ Sia un sistema di transizioni con (r  )...(r n ) regole condizionali, abbiamo che    ’ se e solo se esiste una regola condizionale r i per cui esiste una sostituzione per le variabili in r i  tale che: tutte le premesse di (r i )  sono soddisfatte; la conclusione di (r i )  è proprio    ’ Le variabili (spesso di seguito denotate con , , ,  ) rappresentano generici elementi del dominio del discorso, e si riconoscono perchè, nelle premesse, ne viene definito l’intervallo di variabilità.

6/19/ Grammatiche LC come sistemi di transizioni Data una G= si può definire un sistema di transizioni nel seguente modo: le configurazioni sono sequenze di simboli in  V le configurazioni terminali sono sequenze di simboli in  la relazione di transizione è definita in base alle produzioni, nel seguente modo: Per ogni produzione A::=  P è definita una regola condizionale.   (  V )*   A   precondizioni/premesse/prerequisiti

6/19/ Un esempio Data la grammatica G= definiamo un sistema di transizione nel modo seguente:  ={  |  ({a,b}  {S})*} T ={  |   {a,b}*}   ({a,b}  {S})}  S   ab    ({a,b}  {S})}  S   aSb 

6/19/ Rev   Rev  { |   } T Rev  { |   }  Rev  {<x ,    Un esempio: la reverse di una sequenza di caratteri Soluzione con solo coppie di sequenze. La configurazione iniziale è

6/19/ Rev   Rev  { |   }  {  |   } T Rev  {  |   }  Rev  {<x ,       Un’altra soluzione: la reverse Soluzione con coppie di sequenze, che termina con una singola sequenza

6/19/ Rem   Rem  { |  , x  { START,STOP }  } T Rem  { |   },  Rem  {  (1) x    * Rem   * Rem  } Esempio eliminazione di ripetuti (2) (3) (4)

6/19/ Eliminazione dei ripetuti: Eliminazione dei ripetuti: Esempio di applicazione  (3) 0 0 ={a/x 0,cbbb/  0, /  0 }  *  (4) 1 1 ={a/x 1,c/y 1,bbb/  1, /  1 }  *  (4) 2 2 ={c/x 2,b/y 2,bb/  2, /  2 }  *  (3) 3 3 ={b/x 3,b/  3, /  3 }  *  (3) 4 4 ={b/x 4,  /  4, /  4 }  *  (2) 5 5 ={b/x 5 }  4 = b  3 = b  2 = b  1 = cb  0 = acb  b b b cb acb

6/19/ Addizionatore di numeri Vediamo come esempio un addizionatore di numeri interi, che fa uso di due sistemi di transizione: –un addizionatore di cifre decimali –l’addizionatore di numeri la grammatica per definire i numeri da addizionare è la seguente: Num::= Num Cif | Cif Cif::= 0|1|2|3|4|5|6|7|8| = 513

6/19/ Addizione <456,57>   } <45,5,3,1> <4,0,13,1> <0,0,513,0>  513

6/19/ Addizionatore di cifre Addizionatore di cifre: S cr  Addizionatore di cifre: S cr   cr  { | r  {0,1}, c,c’  Cif}   cr  { | r  {0,1}, c,c’  Cif}  { | r  {0,1}, c  Cif} { | r  {0,1}, c  Cif} T cr  { | r  {0,1}, c  Cif}T cr  { | r  {0,1}, c  Cif}  cr  cr  cr  cr  cr  cr ….…..  cr  cr  cr  cr

6/19/ Addizionatore di numeri Addizionatore di Num: S +   +  { | n,n’  Num}  { | r  {0,1}, n,n’,m  Num}  {n | n  Num} T +  {n | n  Num}  +  cr (i)  +  cr (ii)  +  cr (iii)  +

6/19/ Transizioni  + (continua)  cr  +  + m  cr  + se ≠ (vi)  cr  + (v) (iv) (vii)  cr  + (viii)  cr  + (ix)

6/19/ Applicazione dell’addizionatore <92,512>  + {(iV),  cr } <9,51,4,0>  + {(iX),  cr } <0,5,04,1>  + {(vi),  cr } <0,0,604,0>  + {(v)} 604

Macchina S +             Continua 3

6/19/ Rappresentazione e semantica I numeri (che indichiamo qui con  sulla dispensa sono N) con le loro operazioni sono entità astratte che godono di importanti proprietà. Per utilizzarli e studiarli gli uomini hanno inventato delle rappresentazioni (concrete) di tali entità: –quella che conosciamo e usiamo normalmente sono i numeri arabi su base decimale, –i Romani ne usavano una diversa (I,II, III, IV,...X,..L...) –ne esistono molte altre, ad esempio su basi diverse (2,3,...ecc). Nel definire la semantica di un linguaggio di programmazione, dove le algebre dei numeri sono rappresentate da tipi predefiniti (int, long, real,..) e importante chiarire la differenza tra valore e rappresentazione.

Correttezza: Rappresentazione e Semantica dei numeri  : Num ->   (0) = 0  ….  (9) = 9   (nc) =  (n)x10 +  (c)  :  -> Num (0) = 0  Num …. (9) = 9  Num (n) = (n  10 ) (n mod 10 )  Num, n>9  + * m   (n) +  (n’) =  (m) Sia  l’insieme dei numeri naturali  ={0,1,2,3,...} con le usuali operazioni di somma, sottrazione, ecc., e gli operatori di relazione (=, ≠,>,ecc). Mentre Num sono sequenze di simboli che rappresentano i numeri naturali nella solita rappresentazione decimale. funzione di valutazione  funzione di rappresentazione

6/19/ Rappresentazione binaria La rappresentazione che utilizza il minimo numero di simboli è la rappresentazione binaria (quella usata dai calcolatori). Tale rappresentazione è definita dalla seguente funzione di valutazione :  (0) = 0   (1) = 1   ( yb ) = (  (y)  2) +  ( b )  Si calcoli il valore di  (1100) cioè il numero rappresentato dalla stringa binaria 1100.