ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA. Objective Caml version 3.06
|
|
- Silvano Locatelli
- 7 anni fa
- Visualizzazioni
Transcript
1 1 ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA # Objective Caml version 3.06 Il cancelletto è il prompt di Caml. # 3*8;; - : int = 24 LETTURA: viene letta un espressione (3*8), terminata da ;; e dalla pressione del tasto di ritorno carrello (ENTER) VALUTAZIONE: viene calcolato il valore dell espressione STAMPA: viene stampato il valore dell espressione, specificando di che tipo è: - : int il valore è di tipo int (intero) = 24 il valore è 24 # <ESPRESSIONE> ;; - : <TIPO> = <VALORE>
2 2 Il calcolo procede valutando espressioni. OGNI ESPRESSIONE DEL LINGUAGGIO HA UN VALORE E UN TIPO Quando si immette un espressione al prompt di OCaml (seguita da ;; e <ENTER>), OCaml ne calcola e stampa il valore e il tipo. # (5/2, 5 mod 2);; - : int * int = (2, 1) # if not(3>0) then "pippo" else "pluto";; - : string = "pluto" /, mod, not sono FUNZIONI PRIMITIVE del linguaggio int * int è il tipo delle coppie di interi if...then...else... è un espressione condizionale; if, then, else sono PAROLE CHIAVE "pippo", "pluto" sono stringhe
3 3 L ambiente di valutazione La valutazione di un espressione avviene in un AMBIENTE che contiene il significato (VALORE) di un insieme di parole (VARIABILI). Quando si avvia l interprete OCaml, le espressioni vengono valutate nell ambiente predefinito, che contiene il significato delle operazioni primitive del linguaggio. # succ;; - : int -> int = <fun> # succ 4;; - : int = 5 # abs;; - : int -> int = <fun> # abs (-3);; - : int = 3 # fst;; - : a * b -> a = <fun> # fst (3,"pippo");; - : int = 3
4 4 Un programma è una collezione di dichiarazioni (di variabili, funzioni, tipi,...) L ambiente può essere esteso mediante # let three = 3;; val three : int = 3 # three * 8;; - : int = 24 DICHIARAZIONI Una dichiarazione dà un nome a un valore I nomi dei valori si chiamano VARIABILI # let base = 3;; val base : int = 3 # let altezza = 4;; val altezza : int = 4 # let area = base * altezza;; val area : int = 12 let <VARIABILE> = <ESPRESSIONE>;;
5 5 DICHIARAZIONI # let pi = ;; val pi : float = float: tipo dei numeri reali (IR) # let r = 2.0;; val r : float = 2. NELLE ESPRESSIONI: # let area = pi *. r *. r;; val area : float = *. moltiplicazione sui reali Il tipo degli operandi deve essere consistente con quello richiesto dagli operatori, senza eccezioni. Caml distingue le operazioni sugli interi * + / - dalle corrispondenti operazioni sui reali (float) *. +. /. -. # let area = pi * r * r;; Characters 11-13: let area = pi * r * r;; ^^ This expression has type float but is here used with type int
6 DICHIARAZIONE DI FUNZIONI let <NOME-FUNZIONE> = function <PARAMETRO-FORMALE> -> <ESPRESSIONE>;; # let area_quadrato = function n -> n * n;; val area_quadrato : int -> int = <fun> area_quadrato è una funzione da interi a interi. Applicata a un intero n, riporta l area del quadrato con lato di lunghezza n ATTENZIONE: il valore di una funzione non è stampabile. OCaml informa soltanto che si tratta di una funzione (<fun>) ML ha un meccanismo di inferenza di tipi che gli consente di dedurre qual è il tipo di un espressione senza bisogno di dichiarazioni esplicite # let area_quadrato = function n -> n * n;; val area_quadrato : int -> int = <fun> ML ha dedotto il tipo della funzione: Se n viene moltiplicato per sé stesso mediante la moltiplicazione tra interi (*), deve essere n: int. Quindi il dominio di area_quadrato è int. Il valore della funzione, n*n, è di tipo int. Quindi il codominio di area_quadrato è int. 6
7 7 Dichiarazione di funzioni: sintassi alternativa La funzione area_quadrato si può definire anche così: # let area_quadrato n = n * n;; val area_quadrato : int -> int = <fun> let <NOME-FUNZIONE> <PARAMETRO-FORMALE> = <ESPRESSIONE> Definizione di una funzione che calcola il doppio di un intero: # let double x = 2 * x;; val double : int -> int = <fun> ML ha dedotto il tipo della funzione: Se x viene moltiplicato per 2 (con la moltiplicazione tra interi), deve essere x: int. Quindi il dominio di double è int. Il valore della funzione, x*2, è di tipo int. Quindi il codominio di double è int.
8 8 La principale modalità di calcolo è l applicazione di funzioni Applicazione di funzioni Quando una funzione è stata dichiarata, si può utilizzare il suo nome nelle espressioni, in particolare per applicarle a un argomento: # area_quadrato 5;; - : int = 25 # double 3;; - : int = 6 Esempio # let area r = pi *. r *. r;; val area : float -> float = <fun> # area 3.0;; - : float = # let square r = r *. r;; val square : float -> float = <fun> # area (square 3.0);; - : float = L espressione area (square 3.0) è corretta: square: float -> float square 3.0: float area: float -> float, quindi area si può applicare a square 3.0
9 ATTENZIONE: l applicazione di funzioni è associativa a sinistra In mancanza di parentesi area square 3.0 viene interpretato come (area square) 3.0, che non è un espressione corretta: square: area: float -> float float -> float, quindi area non si può applicare a square se anche area square fosse corretto, il suo tipo sarebbe float, che non è il tipo di una funzione, quindi non si può applicare a 3.0 # area square 3.0;; Characters 0-4: area square 3.0;; ^^^^ This function is applied to too many arguments 9
10 10 ML ha un meccanismo di inferenza di tipi che gli consente di dedurre qual è il tipo di un espressione senza bisogno di dichiarazioni esplicite Inferenza dei tipi Quando si immette un espressione o una dichiarazione: OCaml ne controlla la correttezza: un espressione è corretta se è possibile determinarne il tipo. Ne determina il tipo, mediante un processo di inferenza dei tipi. Se si tratta di un espressione, ne calcola il valore e lo stampa. Il valore viene calcolato nell ambiente di valutazione attuale. Se si tratta di una dichiarazione, estende l ambiente di valutazione creando un nuovo legame per la variabile dichiarata.
11 11 Il calcolo procede valutando espressioni. Non ci sono effetti collaterali AMBIENTE DI VALUTAZIONE Un ambiente è una collezione di legami variabile-valore: var n val n Ambiente di top level (iniziale): var n 1 val n var 1 val not function x mod function x function y Ambiente del modulo Pervasives
12 12 Estensione dell ambiente mediante dichiarazioni La valutazione di una dichiarazione aggiunge un nuovo legame all ambiente: # let two = 2;; val two : int = 2 # let three = two + 1;; val three : int = 3 two 2 ambiente del modulo P ervasives - Viene valutata l espressione two + 1 nell ambiente esistente, dove il valore di two è 2; - Viene creato un nuovo legame, di three con il valore di two + 1 three 3 two 2 ambiente del modulo P ervasives
13 L ambiente viene gestito come un PILA: i nuovi legami vengono aggiunti in alto e si cerca il valore delle variabili a partire dall alto. # let two = "due";; val two : string = "due" two "due" three 3 two 2 ambiente del modulo P ervasives In questo ambiente, il valore di two è "due": il nuovo legame nasconde il vecchio. 13
14 ML è un linguaggio a scopo statico: determina a tempo di compilazione il valore delle variabili in una dichiarazione. 14 # let six=6;; DICHIARAZIONE DI FUNZIONI six # let sixtimes n=six*n;; # let six=50;; # six;; - : int = 50 # sixtimes 3;; - : int = 18 sixtimes function n -> six * n six six 50 sixtimes function n -> six * n six Il valore di six nel corpo di sixtimes viene cercato NELL AMBIENTE DI DICHIARAZIONE di six, cioè nell ambiente in cui six è stata definita.
15 15 # let six="six";; # sixtimes 3;; - : int = 18 six "six" six 50 sixtimes function n -> six * n six OCaml è un LINGUAGGIO A SCOPO STATICO
16 16 CHIAMATA DI FUNZIONI # let six=6;; # let sixtimes = six * n;; # sixtimes (2+1);; sixtimes function n -> six * n six Quando viene chiamata la funzione sixtimes: - il suo argomento viene valutato nell ambiente; - viene creato un nuovo legame PROVVISORIO del parametro formale n con il valore dell argomento; - in questo nuovo ambiente viene valutato il corpo della funzione, six * n; - il legame provvisorio viene cancellato. sixtimes n n 3 sixtimes function n -> six * n six : int = 18 sixtimes function n -> six * n six
17 ML è un linguaggio fortemente tipato: ogni espressione in ML ha un tipo che può essere determinato a tempo di compilazione Espressioni e tipi semplici Un tipo è un insieme di valori Espressioni di tipo t: il cui valore è di tipo t int 0, - 23, 14,... Operazioni: +, -, *, /, mod, succ, pred float 0.01, 3.0, -4.0, 7E-5,... Operazioni: +., -., *., /., **, sqrt, sin,... bool true, false Operazioni booleane: not, &&, or # (true && not false) or false;; - : bool = true E è valutato solo se E && E E ha valore true E or E E ha valore false 17
18 18 string "pippo", "pluto", "12Ev",... Operazioni: (concatenazione) # "programmazione " ^ "funzionale";; - : string = "programmazione funzionale" # "ABCDEFG".[2];; - : char = C # string_of_int 45;; - : string = "45" char 'a', '9', ' ',... # Char.code A ;; - : int = 65 # Char.chr 65;; - : char = A unit ()
19 19 # 3*8 = 24;; - : bool = true # "pippo" = "pi" ^ "ppo";; - : bool = true # true = not true;; - : bool = false # true <> false;; - : bool = true Uguaglianza e disuguaglianza L uguaglianza non è definita sulle funzioni: # let double x = x*2;; val double : int -> int = <fun> # let treble x = x*3;; val treble : int -> int = <fun> # double = treble;; Exception: Invalid_argument "equal: functional value"
20 20 Operatori di confronto # 3*8 <= 30;; - : bool = true # 6.0 < 5.9;; - : bool = false # A >= B ;; - : bool = false # "abc" > "ABC";; - : bool = true # false < true;; - : bool = true
21 21 I tipi con uguaglianza L uguaglianza e gli operatori di confronto sono definiti su tutti i tipi di dati, tranne che sulle funzioni. # true <> false;; - : bool = true # 3*8 <= 30;; - : bool = true # false < true;; - : bool = true # "abc" > "ABC";; - : bool = true # let double x = x*2;; val double : int -> int = <fun> # let treble x = x*3;; val treble : int -> int = <fun> # double = treble;; Exception: Invalid_argument "equal: functional value"
22 22 Espressioni condizionali è un espressione condizionale se: E è di tipo bool F e G hanno lo stesso tipo if E then F else G ML è un linguaggio fortemente tipato: ogni espressione in ML ha un tipo che può essere determinato a tempo di compilazione Le espressioni hanno sempre un tipo e un valore: Il tipo di if E then F else G è il tipo di F e G Il suo valore è: il valore di F se E ha valore true il valore di G se E ha valore false È un espressione, non un costrutto di controllo La parte else non può mancare Nel valutare un espressione if E then F else G: se E è true, G non viene valutata se E è false, F non viene valutata
23 23 Operatori booleani e espressioni condizionali Un espressione della forma E && F E or F equivale a if E then F else false if E then true else F Come nella valutazione delle espressioni booleane, la valutazione delle espressioni condizionali è pigra : quando si valuta if E then F else G: viene valutata E; se il valore di E è true, allora viene valutata F e G non viene valutata; se il valore di E è false, allora viene valutata G e F non viene valutata.
24 24 Esempio: valutazione di un espressione condizionale # 4 + (if 1 < 0 then 3 * 8 else 5 / 2);; - : int = (if 1 < 0 then 3 * 8 else 5 / 2) ===> 4 + (if false then 3 * 8 else 5 / 2) ===> 4 + (5 / 2) ===> ===> 6 # let sign n = if n > 0 then 1 else if n = 0 then 0 else -1;; val sign : int -> int = <fun> # let sort (x,y) = if x<y then (x,y) else (y,x);; val sort : a * a -> a * a = <fun> # sort (5,2);; - : int * int = (2,5)
25 25 Coppie Coppie ordinate: (E,F) # (5,8);; - : int * int = (5, 8) # ("pippo",7);; - : string * int = ("pippo", 7) # (true,80);; - : bool * int = (true, 80) t 1 t 2 è il tipo delle coppie ordinate il cui primo elemento è di tipo t 1 ed il secondo di tipo t 2. t 1 t 2 è il prodotto cartesiano di t 1 e t 2 Attenzione: è un costruttore di tipo (un operazione su tipi): applicato a due tipi t 1 e t 2 costruisce il tipo delle coppie il cui primo elemento è di tipo t 1 ed il secondo di tipo t 2
26 26 Tuple Triple, quadruple o tuple di dimensione qualsiasi: # (true,5*4,"venti");; - : bool * int * string = (true, 20, "venti") # ((if 3<5 then "true" else "false"), 10.3, K, int_of_string "50");; - : string * float * char * int = ("true", 10.3, K, 50) Una tupla può essere elemento di una tupla: # (true,("pippo",98),4.0);; - : bool * (string * int) * float = (true, ("pippo", 98), 4) Attenzione: * non è associativo: ad esempio il tipo bool * (int * string) è diverso dal tipo (bool * int) * string Le funzioni sono oggetti di prima classe: possono essere componenti di una struttura dati, o costituire l argomento o il valore di altre funzioni. Una funzione può essere un elemento di una tupla: # (double,(true && not false, 6*5));; - : (int -> int) * (bool * int) = (<fun>, (true, 30))
27 27 Costruttori e Selettori di un tipo di dati Ogni tipo di dati è caratterizzato da un insieme di e un insieme di COSTRUTTORI (costanti + operazioni che costruiscono valori di quel tipo) SELETTORI (operazioni che selezionano componenti da un valore del tipo) Nel caso di tipi semplici (int, float, bool, string, char, unit), abbiamo soltanto costruttori: i costruttori di un tipo di dati semplici sono tutti i valori del tipo
28 28 Costruttori e Selettori del tipo coppia L insieme di parentesi e virgola (, ) è il costruttore per il tipo delle coppie Per selezionare i componenti: fst, snd (first, second) # let t = (true,("pippo",98));; val t : bool * (string * int) = true, ("pippo", 98) # fst t;; - : bool = true # snd t;; - : string * int = "pippo", 98 # snd (snd t);; - : int = 98 fst, snd sono funzioni polimorfe: # fst;; - : a * b -> a = <fun> # snd;; - : a * b -> b = <fun> OCaml utilizza espressioni della forma a, b, c per le variabili di tipo (α, β, γ).
29 29 Funzioni a più argomenti # let area_triangolo (base,altezza) = (base * altezza)/2;; val area_triangolo : int * int -> int = <fun> Qual è il tipo di area_triangolo? Per OCaml le funzioni hanno sempre un unico argomento; eventualmente una coppia o una tupla. let quorem (n,m) = (n/m, n mod m);; quorem : int * int -> int * int # quorem (17,5);; - : int * int = (3, 2)
30 30 ML ha un sistema di tipi polimorfo: una funzione può accettare argomenti di vari tipi. # let first (x,y) = x;; val first : a * b -> a = <fun> # let zero x = 0;; val zero : a -> int = <fun> POLIMORFISMO # let sort (x,y) = if x<y then (x,y) else (y,x);; val sort : a * a -> a * a = <fun> fst, zero, sort sono funzioni polimorfe: hanno più tipi.
31 Il processo di INFERENZA DEI TIPI ha lasciato alcuni tipi completamente non ristretti: a e b possono essere qualsiasi: let first (x,y) = x first(x,y) se x: α e y: β, dominio di first: α β = x codominio di first: α let sort (x,y) = if x<y then (x,y) else (y,x) sort(x,y) se x: α e y: β, dominio di sort: α β = if x < y... α = β (x,y): α α (y,x): α α... then (x,y)... codominio di sort: α α else (y,x) OK: il valore della funzione nel caso then e nel caso else è lo stesso 31
32 32 Schemi di tipo e istanze a * b -> a è uno schema di tipo: indica un insieme infinito di tipi, tutti quelli della forma T1 * T2 -> T1 Ogni tipo che si ottiene sostituendo a con un tipo e b con un tipo è un istanza di a * b -> a int * bool -> int int * int -> int (int * bool) * (int -> bool) -> (int * bool) ( a * b) * c -> ( a * b) a -> int è uno schema di tipo: indica un insieme infinito di tipi, tutti quelli della forma T -> int Istanze di a -> int: int * bool -> int a * b -> int ( a -> b) -> int
33 33 a * a -> a * a è uno schema di tipo: indica un insieme infinito di tipi, tutti quelli della forma T * T -> T * T Istanze di a * a -> a * a int * int -> int * int bool * bool -> bool * bool All interno di un espressione, il tipo di un oggetto polimorfo viene istanziato: Il tipo dell occorrenza di first nell espressione first (8,true) è int * bool -> int Il tipo dell occorrenza di first nell espressione first (double, pippo ) è (int -> int) * string -> (int -> int)
34 34 Occorrenze multiple di un oggetto polimorfo Un oggetto polimorfo può avere occorrenze con tipi diversi nella stessa espressione: (first (first,8)) (true,10) Notiamo che il valore di (first (first,8)) è (la seconda occorrenza di) first Questo valore viene applicato a (true,10): bool * int Quindi il tipo della seconda occorrenza di first è bool * int -> bool La prima occorrenza di first si applica a (first,8), che è dunque di tipo (bool * int -> bool) * int Quindi il tipo della prima occorrenza di first è (bool * int -> bool) * int -> (bool * int -> bool)
35 Le funzioni sono oggetti di prima classe: possono essere componenti di una struttura dati, o costituire l argomento o il valore di altre funzioni. I linguaggi funzionali consentono l uso di funzioni di ordine superiore, cioè funzioni che prendono funzioni come argomento o riportano funzioni come valore, in modo assolutamente generale. Funzioni di ordine superiore # let comp (f,g) = function x -> f(g x);; val comp : ( a -> b) * ( c -> a) -> c -> b = <fun> # let double n = n*2;; val double : int -> int = <fun> # let treble n = n*3;; val treble : int -> int = <fun> # let sixtimes = comp(double,treble);; val sixtimes : int -> int = <fun> # sixtimes 8;; - : int = 48 35
let quorem pair = ((fst pair)/(snd pair), (fst pair) mod (snd pair))
1 PATTERN Consideriamo la definizione della funzione quorem: (* quorem: int * int -> int * int *) (* quorem(n,m) = quoziente e resto della divisione di n per m *) let quorem (n,m) = (n/m, n mod m) Per
DettagliDefinizioni ricorsive
Definizioni ricorsive Caso base : (* fact: int -> int *) let rec fact n = if n=0 then 1 else n * fact (n-1) n! = 1 2... n 1 n = (n 1)! n = n (n 1)! 0! = 1 Il fattoriale è definito in termini di se stesso,
DettagliProgrammazione Caratteri, stringhe, tipo unit ed ennuple
Programmazione Caratteri, stringhe, tipo unit ed ennuple Samuel Rota Bulò DAIS Università Ca Foscari di Venezia. Outline Caratteri e stringhe Booleani Il tipo unit Ennuple I caratteri Il tipo char rappresenta
DettagliProgrammazione Funzionale
Introduzione alla programmazione in un Programmazione Funzionale linguaggio funzionale Objective Caml di alto livello: un programma è una funzione; di tipo dichiarativo: il programmatore specifica che
DettagliProgrammazione Funzionale
1 Introduzione alla programmazione in un Programmazione Funzionale linguaggio funzionale Objective Caml di alto livello: un programma è una funzione; di tipo dichiarativo: il programmatore specifica che
DettagliProgrammazione Funzionale
1/9 Programmazione Funzionale Esercizio sulle variabili locali Davide Mottin - Themis Palpanas March 12, 2014 OCaml Funzioni preparatorie Sommario 2/9 Funzioni preparatorie Costruire una funzione val even
DettagliLa principale modalità di calcolo è l applicazione di funzioni
1 La principale modalità di calcolo è l applicazione di funzioni Nei linguaggi funzionali puri non esistono strutture di controllo predefinite per la realizzazione di cicli quali for, while, repeat Un
DettagliDefinizione di nuovi tipi
Definizione di nuovi tipi Un tipo è un insieme di valori. Per definire un nuovo tipo occorre specificare: 1 un nome per il tipo 2 come costruire i valori del tipo, cioè quali sono i costruttori del tipo.
DettagliElementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I
Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave
DettagliTipi 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
DettagliDEFINIZIONE DI NUOVI TIPI Un tipo è un insieme di valori.
1 DEFINIZIONE DI NUOVI TIPI Un tipo è un insieme di valori. Per definire un nuovo tipo occorre specificare: 1. un nome per il tipo 2. come costruire i valori del tipo, cioè quali sono i costruttori del
DettagliCorso di Fondamenti di Informatica Il sistema dei tipi in C++
Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout
DettagliEspressioni aritmetiche
Espressioni aritmetiche Consideriamo espressioni costruite a partire da variabili e costanti intere mediante applicazione delle operazioni di somma, sottrazione, prodotto e divisione (intera). Ad esempio:
DettagliProgrammazione 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
DettagliIndice. Prefazione. 3 Oggetti e Java 53
Prefazione xv 1 Architettura dei calcolatori 1 1.1 Calcolatori e applicazioni 1 1.1.1 Alcuni esempi di applicazioni 3 1.1.2 Applicazioni e interfacce 4 1.2 Architettura dei calcolatori 7 1.2.1 Hardware
DettagliUnità 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
DettagliLezione 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,
DettagliIL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 5 Alberto Ceselli alberto.ceselli@unimi.it Università degli Studi di Milano 12 Marzo 2013 Le funzioni sono oggetti di prima classe in Scheme In Scheme le funzioni
DettagliVBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.
Excel VBA VBA Visual Basic for Application VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole. 2 Prima di iniziare. Che cos è una variabile?
DettagliLinguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin
Linguaggio C Tipi predefiniti e operatori Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 RICHIAMI char 8 bit Valori interi
DettagliIl potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO
LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di
DettagliTecniche per risolvere problemi: riduzione a sottoproblemi più semplici. Ricorsione
Tecniche per risolvere problemi: riduzione a sottoproblemi più semplici Ricorsione 1 Tecniche per risolvere problemi: riduzione a sottoproblemi più semplici Problema: dati tre numeri interi, calcolarne
DettagliTipi 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
DettagliEspressioni. Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica!
Espressioni Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica! Valutazione automatica di expr aritmetiche = obiettivo primario dei primi LP
DettagliSilvia Crafa
Introduzione ai Sistemi di Tipi Silvia Crafa silvia@dsi.unive.it Come nascono i tipi in informatica Cos è un tipo? Perché servono i tipi nei linguaggi di programmazione? Vediamo come nascono i tipi partendo
DettagliConcetti base programmazione. Antonio Gallo
Concetti base programmazione Antonio Gallo info@laboratoriolibero.com Programma Insieme di istruzioni: Strtturato Ad oggetti Strutturato Ha una struttura più lineare Basato sui concetti di sequenza, selezione,
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
DettagliIndice. Ordine di valutazione. Espressioni in C++ Le espressioni in C++ (CAP 4) Alberto Garfagnini e Marco Mazzocco A.A. 2014/ * 20 / 2
Le espressioni in C++ (CAP 4) Indice Le espressioni in C++ : precedenze e associatività degli operatori Alberto Garfagnini e Marco Mazzocco Università degli studi di Padova A.A. 2014/2015 gli operatori
DettagliProgrammazione con Java
Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:
Dettagli1 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
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliUtilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:
1 Tipi di dati 1 Tipi di dati Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: Tutto è un oggetto Tutto eredita implicitamente
Dettagli28/02/2014 Copyright V. Moriggia
Informatica per la Finanza 3 Le variabili in VBA Altri I/O 28/02/2014 Copyright 2005-2007 V. Moriggia 1 28/02/2014 3.2 Le variabili in VBA V. Moriggia 1 28/02/2014 3.3 Dichiarazione di variabili in VBA
DettagliBreve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN
Breve Manuale di Riferimento sulla Sintassi Linguaggi e versione aggiornata al 05/02/2004 Sommario Elementi di Base... 2 Dati, Tipi e Dichiarazioni... 2 Tipi di Dato di Base... 2 Tipi di Dato Strutturati...
DettagliProgrammazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Sintassi e Semantica: Convenzioni di Stile versione 1.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi
DettagliEsercizi Programmazione I
Esercizi Programmazione I 9 Novembre 201 Esercizio 1 Valutare e dare il tipo delle seguenti espressioni condizionali. 1 char a= a, b= b ; // a ha v a l o r e decimale 97 2 i n t i= 1, j= 2 ; 3 double x=
DettagliProgrammazione in Python. Moreno Marzolla
Programmazione in Python Moreno Marzolla http://www.moreno.marzolla.name/ Copyright 2011, Moreno Marzolla (http://www.moreno.marzolla.name/teaching/labinf2011/) This work is licensed under the Creative
DettagliBasi della programmazione in Java. Anteprima. Uso delle variabili. Il concetto di variabile Uso delle variabili. Input da tastiera I tipi Esercizi
Basi della programmazione in Java Nicola Drago nicola.drago@univr.it Dipartimento di Informatica Università di Verona Anteprima Il concetto di variabile Uso delle variabili Dichiarazione Assegnamento Visualizzazione
DettagliELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del
DettagliFunzioni, 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
DettagliCostanti e Variabili
Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli
DettagliArray. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 11. A. Miola Dicembre 2007
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 11 Array A. Miola Dicembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Array 1 Contenuti Il problema degli studenti da promuovere
DettagliInformatica Generale Andrea Corradini Ancora sui linguaggi di programmazione
Informatica Generale Andrea Corradini 18 - Ancora sui linguaggi di programmazione Sommario Principali componenti di un linguaggio di programmazione Variabili e costanti Strutture dati: array e record Strutture
DettagliProgrammazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++ Elementi di Base Parte 3 Istruzioni di Assegnazione G. Mecca M. Samela Università della Basilicata Elementi di Base >> Sommario Sommario Introduzione Istruzioni
DettagliCaratteristiche di un linguaggio ad alto livello
Caratteristiche di un linguaggio ad alto livello Un linguaggio ad alto livello deve offrire degli strumenti per: rappresentare le informazioni di interesse dell algoritmo definire le istruzioni che costituiscono
DettagliIL LINGUAGGIO C TIPI DI DATO
IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura fisica di ogni elaboratore è intrinsecamente capace di trattare vari domini di dati, detti tipi primitivi dominio dei
DettagliProgramma 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
DettagliEspressioni ed operatori in C
Espressioni ed operatori in C Espressioni Il C è un linguaggio basato su espressioni Una espressione è una notazione che denota un valore mediante un processo di valutazione Una espressione può essere
DettagliProgrammazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo
Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy
DettagliLe basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
DettagliIntroduzione alla programmazione in C++
Introduzione alla programmazione in C++ Fondamenti di Informatica Roberto BASILI Marzo, 2007 La Programmazione Programmare significa: Determinare la natura del problema (analisi) Definire una decomposizione
DettagliIl sistema dei tipi in ML. cenni
Il sistema dei tipi in ML cenni Inferenza tipi ML - val f = fn x => x+1; val f = fn : int -> int - f 2; val it = 3 : int - - fun f(x) = x+1; val f = fn : int -> int - f 2; val it = 3 : int - - val g =
DettagliTipi di dato strutturati: Array
Tipi di dato strutturati: Array I dati visti finora sono: numeri (interi o razionali), booleani le stringhe (sequenze di caratteri) ma i dati manipolati nelle applicazioni reali sono spesso complessi (o
Dettagli19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
19 - Eccezioni 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 Corso
DettagliElementi di C++ di base
Elementi di C++ di base Corso di Programmazione 3 - Ingegneria dell Informazione e dell Organizzazione 10 ottobre, 2001 Gino Perna Esempi di semplici programmi in C++ Il programma più semplice consiste
DettagliLinguaggio C: Espressioni
Linguaggio C: Espressioni Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ 2 Ringraziamenti prof. Mirko Viroli, Università
DettagliIntroduzione a Java. Riferimenti
Introduzione a Java Si ringraziano Massimiliano Curcio e Matteo Giacalone 1: Introduction 1 Riferimenti! Java tutorial: http://java.sun.com/docs/books/tutorial/! Il Java tutorial è parte di una più ampia
DettagliConfronti, equals. Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals. Laboratorio di Programmazione - Luca Tesei
Confronti, equals Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals 1 Operatori relazionali All interno delle parentesi tonde della condizione dell if è possibile, come abbiamo
DettagliPrima lezione. Le funzioni (subroutines)
Prima lezione Le funzioni (subroutines) Motivazioni Un problema può dirsi risolto quando tutti i sottoproblemi individuati dal processo di scomposizione possono essere risolti mediante azioni primitive
DettagliI numeri razionali. Specifica: la sintassi. Specifica: la semantica
Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi Che cos è un tipo di dato? Tutti i linguaggi di programmazione tipati forniscono tipi ed operatori predefiniti
DettagliDescrizione delle operazioni di calcolo. Espressioni costanti semplici
Descrizione delle operazioni di calcolo Come abbiamo detto l interprete è in grado di generare nuovi valori a partire da valori precedentemente acquisiti o generati. Il linguaggio di programmazione permette
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E04 Esercizi sui problemi di ordinamento C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Algoritmi di Ordinamento
DettagliUniversità degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso
Obiettivi Di seguito vengono riportate una serie di domande che possono essere poste durante la prova formale del corso. Le seguenti domande non sono da ritenersi esaustive ma esemplificative. 1. Architettura
DettagliInformatica 3. Informatica 3. LEZIONE 5: Tipi di dati. Lezione 5 - Modulo 1. Tipi predefiniti. Introduzione
Informatica 3 Informatica 3 LEZIONE 5: Tipi di dati Lezione 5 - Modulo 1 Modulo 1: Tipi e costruttori di tipo Modulo 2: Tipi definiti dall utente e tipi di dati astratti Modulo 3: Sistemi di tipi Tipi
DettagliFondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011
Fondamenti di Informatica 1 Prof. B.Buttarazzi.. 2010/2011 Sommario Conversione di tipo:casting Tipo enumerativo lgebra Booleana Esercizi Conversione di tipo:casting Il casting o conversione di tipo avviene
DettagliProgrammazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++ Elementi di Base Parte 3 Istruzioni di Assegnazione versione 2.0 Questolavoroè concessoin uso secondoi termini di unalicenzacreative Commons (vedi ultima pagina)
DettagliProgrammazione Funzionale I. (Francesco Galgani -
Programmazione Funzionale I (Francesco Galgani - www.galgani.it) Indice Capitolo 1. Introduzione 4 1.1. La programmazione funzionale 4 1.2. Tratti salienti della programmazione funzionale 5 1.3. Installazione
DettagliESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
DettagliFunzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)
Funzioni Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Strategie di programmazione Riuso di
DettagliAlgoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal
Algoritmi, Strutture Dati e Programmi : Programmazione in Pascal Prof. Alberto Postiglione AA 2007-2008 Università degli Studi di Salerno Il Linguaggio di Programmazione Pascal Esistono molti linguaggi
DettagliUn elaboratore è un manipolatore di simboli (segni) intrinsecamente capace di trattare vari. caratteri char caratteri ASCII unsigned char
IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura tt fisica i di ogni elaboratore è intrinsecamente capace di trattare vari domini i di dati, detti tipi i primitivi iti
DettagliLaboratorio di programmazione
Laboratorio di programmazione Lezione II Tatiana Zolo zolo@cs.unipr.it 1 IL PROGRAMMA C++ Istruzioni (espressioni terminate da ; ) istruzioni di dichiarazione (es. int x = 0;); istruzioni di assegnamento
DettagliIntroduzione a Matlab
INFORMATICA B Ingegneria Elettrica Introduzione a Matlab Introduzione a Matlab Matlab (MATrix LABoratory) è uno strumento per il calcolo scientifico ed ingegneristico Matlab facilita lo sviluppo di programmi
DettagliOCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO
CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 7 SE PROGRAMMER
DettagliProgrammazione web lato client con JavaScript. Marco Camurri 1
Programmazione web lato client con JavaScript Marco Camurri 1 JavaScript E' un LINGUAGGIO DI PROGRAMMAZIONE che consente di inserire codice in una pagina web Sintassi simile a Java (e al C), ma NON E'
DettagliStrategie di programmazione
Funzioni Funzioni in C Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Funzioni in C Strategie
Dettagli7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
DettagliLinguaggi di Programmazione avanzati Linguaggi funzionali
Linguaggi di Programmazione avanzati Linguaggi funzionali Simone Martini Dipartimento di Scienze dell Informazione Università di Bologna Italy A.a. 2005-2006 1 / 45 Outline Il paradigma funzionale puro
DettagliClassi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array
Classi e array Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array Si vuole definire una classe Polinomio per la rappresentazione di polinomi a
DettagliProgrammazione 2. Introduzione al corso
Programmazione 2 Introduzione al corso Informazioni generali Sito del corso http://matematica.unipv.it/gualandi/programmazione2/ Orario lezioni: Martedi 9h00/11h00 Aula C8 o Lab. Mate Giovedi 14h00/15h00
DettagliLaboratorio di Informatica Lezione 1
Laboratorio di Informatica Lezione 1 Cristian Consonni 16 settembre 2015 Cristian Consonni Laboratorio di Informatica, Lezione 1 1 / 50 Outline 1 Intro Informazioni generali 2 Java Cos è Java Altri linguaggi
DettagliStrutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05
Strutture dati Il che cosa e il come Il che cosa ed il come Struttura dati: descrive come sono organizzati i dati e come sono realizzate le operazioni su di essi (cioe come si accede ai dati) Specifica
DettagliCapitolo 2 Introduzione alla programmazione in C
Capitolo 2 Introduzione alla programmazione in C Introduzione Un semplice programma C: Stampa di una linea di testo Un altro semplice programma C: Sommare due interi Concetti sulla Memoria Aritmetica in
DettagliProgrammazione con il linguaggio LibreOffice Basic
Programmazione con il linguaggio LibreOffice Basic L ambiente di programmazione Il software LibreOffice possiede un ambiente di programmazione in linguaggio Basic, che consente di creare procedure software
DettagliTRADUZIONE STATE AND TRANSITION DIAGRAM UML E CORRETTEZZA DEI PROGRAMMI IN TLA+
TRADUZIONE DI STATE AND TRANSITION DIAGRAM UML E CORRETTEZZA DEI PROGRAMMI IN TLA+ a cura di: Eleonora Antonelli Simone Maletta Stefano Novara INDICE 1. Grammatica di TLA+ a cura di Eleonora Antonelli
DettagliLaboratorio di Python
, Input da tastiera, Iterazione incondizionata 7 marzo 2014 Sommario 1 2 3 Outline 1 2 3 Definizione di funzione import modulo Si importa il modulo specificato def nome_f(par 1,, par n ) : Si definiscono
DettagliCapitolo 9. Tipi enumerativi, tipi generici e interfacce. c 2005 Pearson Education Italia Capitolo 9-1 / 73
Capitolo 9 Tipi enumerativi, tipi generici e interfacce c 2005 Pearson Education Italia Capitolo 9-1 / 73 Sommario: Tipi enumerativi, tipi generici e interfacce 1 Definizione di tipi enumerativi La classe
DettagliLogica booleana, Costrutto IF
Logica booleana, Costrutto IF Informatica@SEFA 207/208 - Lezione 4 Massimo Lauria http://massimolauria.net/courses/infosefa207/ Mercoledì, 4 Ottobre 207 La logica booleana 2
DettagliSipser, Capitolo 0. Alfabeti, Stringhe, Linguaggi
Sipser, Capitolo 0 Alfabeti, Stringhe, Linguaggi Def. Un insieme è una collezione non ordinata di oggetti o elementi Gli insiemi sono scritti tra { } Gli elementi sono inseriti tra le parentesi Insiemi
DettagliInformatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1
Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)
DettagliLaboratorio 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
DettagliLezione 7: La Formalizzazione degli Algoritmi - Strutture di Controllo e Selettive La Programmazione Strutturata (3 p) Giovedì 21 Ottobre 2010
Università di Salerno Corso di FONDAMENTI DI INFORMATICA Corso di Laurea Ingegneria Corso B Docente : Ing. Anno Accademico 2010-2011 Lezione 7: La Formalizzazione degli Algoritmi - Strutture di Controllo
DettagliRicerca e ordinamento su array di oggetti. Corso di Programmazione 2 Esercitazione 5
Ricerca e ordinamento su array di oggetti Corso di Programmazione 2 Esercitazione 5 Sommario Ricercare in array di oggetti Interfaccia comparable Ordinare array di oggetti Problema Come ordinare, ricercare
DettagliVBA Principali Comandi
VBA Principali Comandi Sintassi Significato Esempio Dim As Dichiarazione Dim x As Integer di una variabile Dim , , ,.,
DettagliSpecifica: la sintassi. Specifica: la semantica. Specifica: la semantica
Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi Che cos è un tipo di dato? Tutti i linguaggi di programmazione tipati forniscono tipi ed operatori predefiniti
DettagliLaboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011. Prof. Raffaele Nicolussi
Laboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011 Prof. Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147-00161 Roma Università degli Studi La Sapienza Fondamenti di
DettagliLinguaggio C: le funzioni. Visibilità variabili e passaggio parametri
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
Dettagli14 - Metodi e Costruttori
14 - Metodi e Costruttori 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