Programmazione Funzionale
|
|
- Placido Magnani
- 6 anni fa
- Visualizzazioni
Transcript
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 cosa calcola la funzione, piuttosto che come. Materiale didattico M. Cialdea Mayer, C. Limongelli. Introduzione alla Programmazione Funzionale. Esculapio. The Objective Caml system. Documentation and User s Guide. Introduzione alla logica proposizionale. Dispense (per lo sviluppo di un applicazione). Software necessario: Compilatore di OCaml Eventualmente XEmacs: un editor configurabile (se si utilizza Windows) 1
2 Objective Caml Linguaggio della famiglia ML sviluppato e distribuito dall INRIA (Francia) dal 1984 Disponibile sul sito nelle versioni per Linux, Windows, MacOS. Supporta diversi stili di programmazione: funzionale, imperativo, a oggetti. Istallazione di OCaml e programmazione in ambiente Emacs: Appendice C del libro, o su lambda/ocaml/emacs/leggimi In alternativa all uso di XEmacs: Camelia, un ambiente di sviluppo per OCaml (Mac e Windows). Entro 3 giorni: OCaml funzionante 2
3 Paradigmi di programmazione Esistono diverse tipologie di linguaggi di programmazione Sotto ogni linguaggio c è un modello di calcolo, che determina le operazioni eseguibili una classe di linguaggi uno stile di programmazione ( paradigma di programmazione) Modelli astratti e modelli rappresentati dall hardware 3
4 Esempio PROBLEMA: Dati due numeri naturali m e n maggiori di 0, trovare il massimo comun divisore (gcd) di m e n Si basa sulle seguenti proprietà: gcd(n, m) = ALGORITMO DI EUCLIDE n se n = m gcd(n m, m) se n > m gcd(n, m n) se n < m 4
5 Linguaggi imperativi Il modello di calcolo è basato sull hardware (architettura di Von Neumann) INPUT MEMORIA OUTPUT Elementi di base nei linguaggi imperativi: variabili (imitano celle di memoria) assegnazione (costrutto primitivo) Programmare = pianificare il flusso di informazioni Il modello di calcolo determina uno stile di programmazione ALGORITMO 1 Per calcolare gcd(n, m): Finché m n esegui le seguenti operazioni: se n > m, allora n n m, altrimenti m m n Riporta il valore di n Nel linguaggio C: int gcd (int n, int m) { while (n!= m) if (n>m) n=n-m; else m=m-n; return n; } 5
6 Linguaggi imperativi (II) La programmazione imperativa è basata su COMANDI, che operano sulla MEMORIA (stato del programma). Per capire il programma (e provarne la correttezza) occorre tenere traccia delle modifiche dello stato. Correttezza di un programma Un programma per risolvere il problema P è corretto se produce, per ogni suo input X un output Y tale che tra X e Y vale la relazione specificata da P 6
7 Esempio: calcolo del fattoriale di un numero n! = n 1 n ALGORITMO F1 Per calcolare fact(n): Inizializzare f = 1 Finché n > 1, esegui le seguenti operazioni: f f n n n 1 Riporta f n=4 f=1 n>1: f = 1*4 = 4 n = 4-1 = 3 n>1: f = 4*3 = 12 n = 3-1 = 2 n>1: f = 12*2 = 24 n = 2-1 = 1 n=1: return 24 Esecuzione per n=4 int fact (int n) { int f; f=1; while (n > 1) { f=f*n; n=n-1; } return f; } 7
8 LINGUAGGI DICHIARATIVI Un programma è più vicino alla descrizione di che cosa si deve calcolare, piuttosto che a come calcolare. Linguaggi di programmazione logica Linguaggi di programmazione funzionale 8
9 PROGRAMMAZIONE FUNZIONALE Un programma è un operazione che associa un input con un output UN PROGRAMMA È UNA FUNZIONE Strutture di controllo: applicazione di una funzione a un argomento composizione di funzioni: argomento f g valore I costrutti di base sono ESPRESSIONI, non comandi Le espressioni sono costruite a partire da espressioni semplici (COSTANTI), mediante APPLICAZIONE di operazioni Si calcola riducendo un espressione a un altra più semplice, fino a ottenere un VALORE (un espressione non ulteriormente semplificabile) (6 + 3) (8 2) 9 (8 2) VALUTAZIONE Le espressioni hanno un valore Non ci sono effetti collaterali (6 + 3) (8 2) viene valutato, ma il valore non è messo da nessuna parte 9
10 Esempio: calcolo del gcd gcd(n, m) = n se n = m gcd(n m, m) se n > m gcd(n, m n) se n < m ALGORITMO 2 Per calcolare gcd(n, m): Se n = m, allora riporta n, altrimenti se n > m, allora riporta gcd(n m, m), altrimenti riporta gcd(n, m n) In OCaml: let rec gcd(m,n) = if n=m then n else if n>m then gcd(n-m,m) else gcd(n,m-n) 10
11 Esempio: calcolo del fattoriale n! = n 1 n = (n 1)! n Per calcolare fact(n): Se n = 0 allora riporta 1 altrimenti riporta n f act(n 1) In Ocaml: let rec fact n = if n=0 then 1 else n * fact(n-1) ALGORITMO F2 La ricorsione è il costrutto di controllo fondamentale 11
12 Linguaggi funzionali La principale modalità di calcolo è l applicazione di funzioni Il calcolo procede valutando espressioni. Non ci sono effetti collaterali. Un programma è una collezione di dichiarazioni (di variabili, funzioni, tipi,...). Le funzioni sono oggetti di prima classe: possono essere componenti di una struttura dati, o costituire l argomento o il valore di altre funzioni. let sort (order,lst) =... let comp (f,g) =... 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. Nei linguaggi funzionali puri non esistono strutture di controllo predefinite per la realizzazione di cicli quali for, while, repeat, ma il principale meccanismo di controllo è la ricorsione. ML è un linguaggio interattivo ML è un linguaggio a scopo statico: determina a tempo di compilazione il valore delle variabili in una dichiarazione. ML è un linguaggio fortemente tipato: ogni espressione in ML ha un tipo che può essere determinato a tempo di compilazione 12
13 ML ha un meccanismo di inferenza di tipi che gli consente di dedurre qual è il tipo di un espressione senza bisogno di dichiarazioni esplicite. ML ha un sistema di tipi polimorfo: una funzione può accettare argomenti di vari tipi. let first (x,y) = x let Id (x) = x Tipi di dati polimorfi: in molti linguaggi: stack di interi, stack di reali,... in ML: stack of α ML ha un meccanismo per la gestione di errori ML ha un potente sistema di moduli 13
14 Perché un FPL? Perché Ocaml? EFFICIENZA: varia da migliore del C a un ordine di grandezza peggiore. PRODUTTIVITÀ: da un ordine di grandezza maggiore a un fattore 4 (il codice è più corto, più veloce da scrivere, più facile da mantenere). Esempi di applicazioni in ambito non accademico: in Ericsson (Erlang) in HP (verifica di protocolli di arbitraggio) nel dipartimento della difesa di Sydney applicazioni a data bases gestione dei voli tra gli areoporti di Parigi di Orly e Roissy... 14
15 FUNZIONI F DOMINIO CODOMINIO F associa a ogni elemento del DOMINIO un elemento del CODOMINIO Il TIPO di F è: DOMINIO CODOMINIO 15
16 COS È UN TIPO? Un tipo è un insieme di oggetti (VALORI). Se A è un tipo e x A, diciamo che x è di tipo A x : A Ad esempio: 3 : IN (2, 5) : IN IN (1, 2, 3) : IN IN IN, o anche: (1, 2, 3) : IN 3 Il tipo A B è l insieme di tutte le funzioni che hanno A come dominio e B come codominio. 16
17 ESEMPIO 1 F FORME COLORI F : FORME COLORI F si applica a un elemento di FORME (ARGOMENTO DELLA FUNZIONE) e RIPORTA un elemento di COLORI come VALORE 17
18 ESEMPIO 2 Se square è la funzione che associa a ogni numero naturale n n 2 Nella notazione del λ-calcolo: square : IN IN square(0) = 0 square(1) = 1 square(2) = 4 square(3) = 9 square(4) = 16 square(5) = square = λn.n 2 square è quella funzione che, applicata a n, riporta n 2 Nella notazione di OCaml (o quasi): square = function n -> n 2 18
19 Una funzione F è una relazione particolare: Dal punto di vista ESTENSIONALE un insieme di coppie {(x 1, y 1 ),..., (x i, y i ),...} (l estensione di F) tale che ogni x i appartiene al dominio della funzione ogni y i appartiene al codominio della funzione Per ogni x del dominio: se (x, y) e (x, y ) appartengono all estensione di F, allora y = y F(x) = y: la coppia (x, y) appartiene all estensione di F Estensione di square: {(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25),...} 19
20 FUNZIONI A PIÙ ARGOMENTI Sia times la funzione che associa (n, m) n m per ogni n, m IN. times = λ(n, m).n m oppure: times = function (n,m) -> n*m Qual è il tipo di times? Il suo codominio è IN Il suo dominio è l insieme {(n, m) n, m IN} Prodotto cartesiano di IN per se stesso: IN IN times : IN IN IN Quando si applica times a (n, m), diciamo che n è il primo argomento, m è il secondo argomento. In realtà times ha un unico argomento: una coppia di numeri 20
21 Se A = {0, 1, 2} e B = {rosso, verde}, Quindi: e PRODOTTO CARTESIANO A B = {(0, rosso), (0, verde), (1, rosso), (1, verde), (2, rosso), (2, verde)} IN IN = {(0, 0), (0, 1), (0, 2), (0, 3),... (1, 0), (1, 1), (1, 2), (1, 3),... (2, 0), (2, 1), (2, 2), (2, 3),......} 21
22 Estensione di una funzione a due argomenti L ESTENSIONE di times è un insieme di TRIPLE: { (0, 0, 0), (0, 1, 1), (0, 2, 2),... (1, 0, 1), (1, 1, 2), (1, 2, 3), (1, 3, 4),... (2, 0, 2), (2, 1, 3), (2, 2, 4), (2, 3, 5),......} Funzioni a n argomenti Se una funzione si applica a n argomenti, appartenenti, rispettivamente agli insiemi A 1,...,A n e riporta un valore nell insieme B, il suo tipo è A 1 A 2... A n B Il suo dominio è un insieme di tuple di n elementi: {..., (a 1, a 2,..., a n ),...} La sua estensione è un insieme di tuple, ciascuna delle quali ha n + 1 elementi: {..., (a 1, a 2,..., a n, b),...} 22
23 Sia quorem la funzione che riporta FUNZIONI CHE RIPORTANO COPPIE COME VALORI applicata a due numeri naturali n e m il quoziente intero e il resto della divisione di n per m quorem = λ(n, m).(n/m, n mod m) quorem = function (n,m) -> (n/m,n mod m) quorem(3, 2) = (1, 1) quorem(3, 3) = (1, 0) quorem(7, 2) = (3, 1) quorem(15, 6) = (2, 3) quorem : IN IN IN IN L estensione di quorem è un insieme di triple: {... (3, 2, (1, 1)),... (3, 3, (1, 0)), (7, 2, (3, 1)),... (15, 6, (2, 3)),,, } ATTENZIONE: qual è il valore di quorem(1, 0)? quorem non è definita per l argomento (1, 0) 23
24 FUNZIONI TOTALI: sono definite per ogni elemento del dominio Per ogni x nel dominio esiste una (ed unica) coppia (x, y) nell estensione di F FUNZIONI PARZIALI: possono essere indefinite per alcuni elementi del dominio Possono esistere elementi x del dominio per i quali non esiste alcuna coppia (x, y) nell estensione di F Una funzione parziale è ovviamente totale se si restringe opportunamente il suo dominio. è totale quorem : IN (IN {0}) IN IN 24
25 FUNZIONI POLIMORFE Consideriamo la funzione first, tale che first(x, y) = x first = λ(x, y).x first = function (x,y) -> x x e y potrebbero essere di qualunque tipo. f irst(0, 1) = 0 f irst(quadrato, rosso) = quadrato first(0, rosso) = 0 first(π, 0) = π first(π, 1.5) = π... first è di tipo IN IN IN FORME COLORI FORME IN COLORI IN IR IN IR IR IR IR... first ha molti tipi, tutti quelli della forma: TIPO 1 TIPO 2 TIPO 1 first è una funzione polimorfa. Possiamo identificare il suo tipo più generale utilizzando variabili di tipo first : α β α Ogni tipo di first è un istanza del suo tipo più generale. 25
26 APPLICAZIONE di funzioni x è l argomento della funzione y è il valore dell applicazione F(x) F(x) = y Se F : A B x : A (cioè x A) allora F(x) : B (cioè F(x) B) 26
27 IL CALCOLO COME RIDUZIONE Calcolare significa ridurre un espressione a un VALORE Un valore è un espressione non ulteriormente riducibile Un passo di riduzione: (λx.n)m N[M/x] Consideriamo una funzione: f = function x E x è il parametro formale della funzione E è il corpo della funzione Quando si applica la funzione a un argomento: f(m) (o semplicemente f M) M è il parametro attuale della funzione l espressione f(m) si semplifica (si avvicina a un valore) in E[M/x] che è l espressione che si ottiene da E sostituendo tutte le occorrenze del parametro formale x con il parametro attuale M Ad esempio: (function n sum(3, n)) 5 sum(3, 5) 27
28 Calcolo del valore di un espressione mediante una sequenza di riduzioni: esempi square 5 (function n n 2 ) valore di square 5 f irst(15, 20) (f unction(n, m) n)(15, 20) 15 valore di first(15, 20) quorem(square(5), f irst(15, 20)) quorem((function n n 2 )5, (function(n, m) n)(15, 20))... quorem(25, 15) (f unction(n, m) (n/m, n mod m))(25, 15) (25/15, 25 mod 15) (1, 10) valore di quorem(square(5), f irst(15, 20)) 28
29 COMPOSIZIONE DI FUNZIONI DOMINIO DI F CODOMINIO DI F C DOMINIO DI G COMPOSTA CON F A DOMINIO DI G B CODOMINIO DI G CODOMINIO DI G COMPOSTA CON F Composizione di G con F: G F Se G : A B e F : C A allora G F : C B e, se x : C (G F)(x) = G(F(x)) Quindi (G F)(x) : B 29
30 Sia sommauno = λn.n + 1 di tipo IN IN Esempio square sommauno : IN IN e per ogni n IN: (square sommauno) n = square(sommauno n) = square(n + 1) = (n + 1) 2 30
31 Cos è la composizione di funzioni? È un operazione che prende in ingresso una coppia di funzioni, di tipo, rispettivamente A B e C A, e riporta una funzione di tipo C B La composizione è una funzione Il suo dominio è (A B) (C A) Il suo codominio è C B Quindi è una funzione polimorfa. Il suo tipo più generale è: per ogni tipo A, B e C (α β) (γ α) (γ β) Funzioni che hanno funzioni come argomenti e/o riportano funzioni come valori si dicono FUNZIONI DI ORDINE SUPERIORE 31
32 FUNZIONI DI ORDINE SUPERIORE: ESEMPI Applicazione di funzioni: apply = λ(f, x).f x Tipo di apply: apply(square, 5) square nel corpo della funzione, f è applicato a x, quindi deve essere: Sotto queste ipotesi, fx : β f : α β x : α l argomento della funzione è la coppia (f, x), che è di tipo quindi il tipo della funzione è (α β) α (α β) α β 32
33 Il funzionale costante K Una funzione costante è una funzione che riporta lo stesso valore per tutti i suoi argomenti λx.0 Funzione costante x: λy.x Se x : β, allora λy.x : α β K è una funzione che, applicata a un argomento x, riporta la funzione costante x K = λx.λy.x K0 (λx.λy.x)0 (K0)1 = K0 1 (λx.λy.x)0 1 λy.0 (λy.0)1 0 Tipo di K: dominio: β, codominio: α β K : β (α β) 33
34 plus = λn.λm.n + m Funzioni in forma currificata Funzione che, applicata a n, riporta una funzione che, applicata a m, riporta il valore n + m (plus 3) 5 = plus 3 5 (λn.λm.n + m)3 5 (λm.3 + m) plus, applicata a n IN, riporta una funzione di tipo IN IN plus : IN (IN IN) Che relazione c è tra sum = λ(n, m).n + m e plus? sum : IN IN IN plus : IN (IN IN) e per ogni n, m IN: sum(n, m) = plus n m plus è la forma currificata di sum 34
35 Ogni funzione su tuple si può riscrivere in forma currificata: mult = λ(n, m).n m mult : IN IN IN times = λn.λm.n m times : IN (IN IN) e per ogni n, m IN mult(n, m) = times n m. 35
36 Applicazione parziale di funzioni Le funzioni in forma currificata consumano un argomento alla volta. plus e times possono essere applicate anche solo parzialmente: plus 10 : IN IN è la funzione che somma 10 al suo argomento times 5 : IN IN è la funzione che moltiplica per 5 il suo argomento Qual è il valore delle seguenti espressioni? apply(times 2, 10) (plus 5) (times 3) 5 36
37 Forma currificata di una funzione su tuple In generale, se: f : t 1... t n t f c : t 1 (t 2... (t n t)...) f c è la forma currificata di f se per ogni a 1,..., a n f(a 1,..., a n ) = (((f c a 1 )a 2 )...a n ) Le parentesi possono essere omesse: sia nel tipo di f c (si associa a destra); sia nell applicazione di f c (si associa a sinistra). plus : IN IN IN times : IN IN IN 37
38 Composizione di funzioni (forma currificata) Come possiamo scrivere un espressione λ che denoti l operazione di composizione di funzioni? f g è quella funzione che, applicata a un argomento x (del tipo appropriato), riporta il valore f(g x): f g = λx.f(g x) La composizione è quell operazione che, applicata a una coppia di funzioni (f, g) (di tipi appropriati) riporta la funzione λx.f(g x) = λ(f, g).λx.f(g x) Possiamo anche considerare la composizione in versione currificata: tale che, per ogni funzione f e g: comp : (α β) (γ α) (γ β) comp f g = f g comp = λf.λg.λx.f(g x) 38
39 Esercizi 1. Sia sommadue = λn.n + 2 di tipo IN IN. Qual è il tipo di sommadue square? Calcolare il valore dell espressione (sommadue square)3 2. Si consideri la funzione F = square (plus 5). Qual è il suo tipo? Dare una descrizione di F (la funzione F, applicata a... riporta...). Calcolare il valore dell espressione square (plus 5) 2 3. Si consideri la funzione max, che applicata a una coppia di naturali (n, m), riporta il maggiore tra i due (come caso particolare, max(n, n) = n). Qual è il tipo di max? Qual è il tipo di square max? Che cosa calcola? 4. Si consideri la relazione < sui naturali, di tipo 5. IN IN Bool dove Bool = {T rue, F alse} è l insieme dei valori booleani. Sia greaterthan = λn.λm.m > n. Scrivere il tipo di greaterthan. Che relazione c è tra < e greaterthan? Determinare il tipo dell espressione greaterthan 0. Come si può descrivere la funzione denotata da tale espressione? È possibile applicare l operazione di composizione di funzioni alla coppia di funzioni (max, greaterthan)? 39
40 6. È possibile applicare l operazione di composizione di funzioni alla coppia di funzioni (greaterthan, max)? 7. Qual è il tipo di (greaterthan 100) max? Dare una descrizione di tale funzione ((greaterthan 100) max, applicata a... riporta...). 8. Un predicato è una funzione particolare. Come si può caratterizzare? 40
Programmazione 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
Programmazione Funzionale
Programmazione Funzionale Linguaggi funzionali http://cialdea.dia.uniroma3.it/teaching/pf/ di alto livello: un programma è una funzione. di tipo dichiarativo: il programmatore specifica che cosa calcola
ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA. Objective Caml version 3.06
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
La 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
Linguaggi di Programmazione
Linguaggi di Programmazione!paradigmi linguistici, costrutti!semantica!implementazione, strutture a tempo di esecuzione 1 Linguaggi di programmazione e astrazione! i linguaggi di programmazione ad alto
Introduzione alla Programmazione Funzionale
Introduzione alla Programmazione Funzionale April 27, 2017 Paradigmi di Programmazione Programmi sviluppabili usando diversi paradigmi Imperativo: computazione come modifica di stato Funzionale: computazione
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
Indice. 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
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
Pseudo codice. Pseudo codice, Paolo Bison, FI07, p.1 / Pseudo codice, Paolo Bison, FI07, p.3
Pseudo codice Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2007/08 Università di Padova linguaggio testuale mix di linguaggio naturale ed elementi linguistici con sintassi ben definita e semantica
Definizioni 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,
Introduzione alla programmazione strutturata
FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Prof. ELIO TOPPANO Facoltà di Ingegneria Università degli Studi di Udine Introduzione alla programmazione strutturata 2001 Pier Luca Montessoro, Elio
Tecniche 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
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
Linguaggi di programmazione. Paradigmi di programmazione
Linguaggi di programmazione Paradigmi di programmazione Linguaggi: un po di storia Albori: Macchine a programma memorizzato, Programmi come dati Linguaggio Macchina Assemblatore FORTRAN (calcolo scientifico)
Scrivere il software. Scrivere il software. Interprete. Compilatore e linker. Fondamenti di Informatica
FODAMETI DI IFORMATICA Prof. PIER LUCA MOTESSORO Prof. ELIO TOPPAO Facoltà di Ingegneria Università degli Studi di Udine Introduzione alla programmazione strutturata 2001 Pier Luca Montessoro, Elio Toppano
Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A
Matematica 13/11/2007 Teoria Compito A Domanda 1 Descrivere, eventualmente utilizzando uno schema, gli elementi funzionali di una CPU. Domanda 2 Java è un linguaggio compilato o interpretato? Motivare
Problemi e algoritmi. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 (da U. de' Liguoro - Alg. & Spe. 03/04)
Problemi e algoritmi Il che cosa e il come Il che cosa ed il come Problema: descrive che cosa si deve calcolare Specifica (di un algoritmo): descrive che cosa calcola un algoritmo Algoritmo: descrive come
Problemi e algoritmi. Il che cosa ed il come. Il che cosa ed il come. Il che cosa e il come
Problemi e algoritmi Il che cosa e il come Problema: descrive che cosa si deve calcolare Specifica (di un algoritmo): descrive che cosa calcola un algoritmo Algoritmo: descrive come effettuare un calcolo
Logica per la Programmazione
Logica per la Programmazione Lezione 12 Linguaggio di Programmazione Imperativo: Sintassi e Semantica Concetto di Tripla di Hoare Soddisfatta pag. 1 Introduzione Dall inizio del corso ad ora abbiamo introdotto,
Introduzione alla Programmazione Funzionale con Objective Caml
Introduzione alla Programmazione Funzionale con Objective Caml Dispense del corso di Programmazione funzionale Marta Cialdea Mayer Anno accademico 2017/2018 Indice 1 Il nucleo di un linguaggio funzionale
Problema: stampa degli interi compresi tra n e m
Costrutti imperativi Problema: stampa degli interi compresi tra n e m http://caml.inria.fr/pub/docs/manual-ocaml/libref/pervasives.html Output functions on standard output val print_string: string -> unit
Logica per la Programmazione
Logica per la Programmazione Lezione 11 Linguaggio di Programmazione Imperativo: Sintassi e Semantica Concetto di Tripla di Hoare Soddisfatta pag. 1 Introduzione Dall inizio del corso ad ora abbiamo introdotto,
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
Università 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
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 04 Introduzione ai Tipi astratti di dato A. Miola Febbraio 2007 http://www.dia.uniroma3.it/~java/fondinf2/ Introduzione ADT 1
Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software
Introduzione alla programmazione Algoritmi e diagrammi di flusso F. Corno, A. Lioy, M. Rebaudengo Sviluppo del software problema idea (soluzione) algoritmo (soluzione formale) programma (traduzione dell
Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX
Indice Prefazione Gli Autori Ringraziamenti dell Editore La storia del C XVII XXIX XXXI XXXIII PARTE A Capitolo 1 Computer 1 1.1 Hardware e software 2 1.2 Processore 3 1.3 Memorie 5 1.4 Periferiche di
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
Informatica 3. LEZIONE 9: Introduzione ai linguaggi funzionali. Modulo 1: Introduzione ai linguaggi funzionali Modulo 2: LISP
Informatica 3 LEZIONE 9: Introduzione ai linguaggi funzionali Modulo 1: Introduzione ai linguaggi funzionali Modulo 2: LISP Informatica 3 Lezione 9 - Modulo 1 Introduzione ai linguaggi funzionali Linguaggi
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
ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)
1 LEZIONE 9 ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE) Laboratorio di Informatica per l Educazione A. A. 2014/2015 IN SINTESI (ELABORAZIONE) Con i COMPUTER, le macchine diventano
Sommario. I Uso degli oggetti 39
Questo è l'indice del libro, in cui sono evidenziati i paragrafi corrispondenti agli argomenti trattati nel corso e che costituiranno il programma d'esame. Alcuni argomenti sono stati trattati nelle lezioni
Pseudo codice. Paolo Bison. Fondamenti di Informatica 1 A.A. 2003/04 Università di Padova. Pseudo codice, Paolo Bison, A.A , p.
Pseudo codice Paolo Bison Fondamenti di Informatica 1 A.A. 2003/04 Università di Padova Pseudo codice, Paolo Bison, A.A. 2003-04, 2003-09-30 p.1/38 Pseudo codice linguaggio testuale mix di linguaggio naturale
CENNI MINIMI DI PROGRAMMAZIONE FUNZIONALE IN PYTHON - V. 0.3
CENNI MINIMI DI PROGRAMMAZIONE FUNZIONALE IN PYTHON - V. 0.3 MATTEO PRADELLA 1. Introduzione e concetti base La programmazione funzionale è uno stile di programmzione che enfatizza la valutazione di espressioni,
Università degli Studi di Ferrara
Università degli Studi di Ferrara Corso di Laurea in Matematica - A.A. 2018 2019 Programmazione Lezione 19 Controllo di Flusso in MATLAB Docente: Michele Ferrari - michele.ferrari@unife.it Nelle lezioni
INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione
INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione
Linguaggi 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 / 95 Il paradigma funzionale puro Un lambda-calcolo
Il concetto di calcolatore e di algoritmo
Il concetto di calcolatore e di algoritmo Elementi di Informatica e Programmazione Percorso di Preparazione agli Studi di Ingegneria Università degli Studi di Brescia Docente: Massimiliano Giacomin Informatica
Programmazione 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
INTRODUZIONE ALLA LOGICA DI HOARE. Corso di Logica per la Programmazione
INTRODUZIONE ALLA LOGICA DI HOARE Corso di Logica per la Programmazione INTRODUZIONE Dall inizio del corso ad ora abbiamo introdotto, un po alla volta, un linguaggio logico sempre più ricco: connettivi
Scaletta. Cenni di computabilità. Cosa fa un programma? Definizioni (1/2) Definizioni (2/2) Problemi e domande. Stefano Mizzaro 1
Scaletta Cenni di computabilità Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 23 27 novembre 2013
! Problemi, domande, risposte. ! Algoritmi che calcolano funzioni. ! Funzioni computabili e non. ! Problema = insieme di domande omogenee. !
Scaletta Cenni di computabilità Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 24 26 maggio 2015!
Algoritmi, 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
Logica per la Programmazione
Logica per la Programmazione Lezione 12 Linguaggio di Programmazione Imperativo: Sintassi e Semantica Tripla di Hoare soddisfatta A. Corradini e F.Levi Dip.to Informatica Logica per la Programmazione a.a.
Linguaggi di programmazione e astrazione
Linguaggi di programmazione e astrazione i linguaggi di programmazione ad alto livello moderni sono il più potente strumento di astrazione messo a disposizione dei programmatori che possono, con un solo
int main(){ int numero; /* numero di cui voglio calcolare il fattoriale */ int fatt; /* memorizzo il fattoriale di numero */ int somma=0;
Problema: CALCOLARE LA SOMMA DEI FATTORIALI DEI PRIMI 100 NUMERI NATURALI 0!+1!+2! + 99! #include int fattoriale(int); Calcolo fattoriale int main(){ int numero; /* numero di cui voglio calcolare
Sviluppo di programmi
Sviluppo di programmi Per la costruzione di un programma conviene: 1. condurre un analisi del problema da risolvere 2. elaborare un algoritmo della soluzione rappresentato in un linguaggio adatto alla
Istruzioni Condizionali
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 10 Istruzioni Condizionali Carla Limongelli Novembre 2011 http://www.dia.uniroma3.it/~java/fondinf/ Istruzioni condizionali 1 Contenuti
Matematica e Statistica per Scienze Ambientali
per Scienze Ambientali Insiemi e Combinatoria - Appunti 1 1 Dipartimento di Matematica Sapienza, Università di Roma Roma, 23 - Ottobre 2012 Il concetto di insieme Non tratterò la teoria assiomatica degli
Problemi, algoritmi, calcolatore
Problemi, algoritmi, calcolatore Informatica e Programmazione Ingegneria Meccanica e dei Materiali Università degli Studi di Brescia Prof. Massimiliano Giacomin Problemi, algoritmi, calcolatori Introduzione
Il linguaggio di programmazione Python
Università Roma Tre Dipartimento di Matematica e Fisica Percorso Abilitante Speciale Classe A048 Matematica Applicata Corso di Informatica Il linguaggio di programmazione Python Marco Liverani (liverani@mat.uniroma3.it)
Valutazione Lazy. Prefazione alla lezione
Valutazione Lazy Aniello Murano Università degli Studi di Napoli Federico II 1 Prefazione alla lezione Nella lezione precedente abbiamo introdotto i linguaggi (funzionali) con tipi di ordine superiore.
Espressioni 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:
Fondamenti dell informatica
Fondamenti dell informatica Funzioni ricorsive e linguaggi funzionali Rosario Culmone rosario.culmone@unicam.it 16/4/2008 UNICAM - p. 1/21 Funzioni ricorsive Metodo di definizione di algoritmi introdotto
Fondamenti di Informatica
Vettori e matrici #1 Le variabili definite come coppie sono dette variabili scalari Fondamenti di Informatica 5. Algoritmi e pseudocodifica Una coppia è una variabile
Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione
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
Pattern matching e tipi di dato strutturati
Capitolo 3 Pattern matching e tipi di dato strutturati Per il momento abbiamo considerato un linguaggio funzionale (denominato SimpleCaml ) i cui unici tipi di dato sono interi, float, booleani e funzioni.
Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio
Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Il problema di fondo Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio Algoritmi
Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale
Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Il problema di fondo Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale Algoritmi e Programmazione Stefano
n n 1 n = > Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita
Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita n! = 1 n( n 1)! se se n n = > 0 0 dove n è un numero intero non negativo Il calcolo del fattoriale
Uso delle liste per rappresentare tipi astratti di dati
Uso delle liste per rappresentare tipi astratti di dati Il tipo astratto di dati dizionario Il tipo astratto dizionario è una collezione di elementi, ciascuno dei quali è costituito da una coppia (chiave,
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)
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:
Le funzioni in C++ Fondamenti di Informatica. R. Basili. a.a
Le funzioni in C++ Fondamenti di Informatica R. Basili a.a. 2006-2007 Sintesi Motivazioni Uso delle funzioni Un esempio Dichiarazione e Definizione Uso dei parametri Passaggio per valore Passaggio per
ITI M. FARADAY. Programmazione a. s
ITI M. FARADAY Programmazione a. s. 2018-2019 Disciplina: INFORMATICA Indirizzo: INFORMATICA E TELECOMUNICAZIONI Classi: Terza A Terza B Ore settimanali previste: 6 (3 ora Teoria - 3 ore Laboratorio) Docenti:
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
Di cosa parliamo oggi?
Di cosa parliamo oggi? Oggi parliamo di Analisi di Algoritmi Analisi di Algoritmi = valutazione delle risorse usate da algoritmi per risolvere un dato problema Risorse = Tempo impiegato dall algoritmo
Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output
Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output F = { (s, s ) } per ogni s esiste una e una sola coppia (s, s ). Esempio: un algoritmo che calcola il quadrato di
Informatica (A-K) 5. Algoritmi e pseudocodifica
Vettori e matrici #1 Informatica (A-K) 5. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile & Ambientale A.A. 2011-2012 2 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
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
Semantica operazionale e denotazionale
Semantica operazionale e denotazionale Abbiamo definito la semantica di tre linguaggi di programmazione in termini operazionali, cioé in termini di sequenze di computazione Abbiamo assegnato un algoritmo
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
Fondamenti di Informatica 6. Algoritmi e pseudocodifica
Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
L ELABORATORE ELETTRONICO
L ELABORATORE ELETTRONICO Il calcolatore elettronico è uno strumento in grado di eseguire insiemi di azioni ( mosse ) elementari le azioni vengono eseguite su dati in ingresso (input) per produrre uno
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
Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica
Programmazione Dipartimento di Matematica Ing. Cristiano Gregnanin Corso di laurea in Matematica 29 febbraio 2016 1 / 33 INTRODUZIONE AGLI ALGORITMI Prima di riuscire a scrivere un programma, bisogna conoscere
Esercizi di programmazione ricorsiva. Appunti per gli studenti di Programmazione I e Laboratorio (corsi A-B)
Esercizi di programmazione ricorsiva Appunti per gli studenti di Programmazione I e Laboratorio (corsi A-B) Corso di Laurea in Informatica Università di Pisa A.A. 2008/09 1. Dare il tipo delle funzione
L ELABORATORE ELETTRONICO
L ELABORATORE ELETTRONICO Il calcolatore elettronico è uno strumento in grado di eseguire insiemi di azioni ( mosse ) elementari le azioni vengono eseguite su oggetti (dati) per produrre altri oggetti
INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA 1 Struttura di un programma Java Un programma Java consiste in un insieme di definizioni di classi. In genere
Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 02/07/2015/ Foglio delle domande /VERSIONE 1 Matricola Cognome Nome
Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 02/07/2015/ Foglio delle domande /VERSIONE 1 Matricola Cognome Nome 1) Il termine informatica viene dalla fusione delle seguenti parole a) informazione
Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch
Esercitazione 5 Procedure e Funzioni Il comando condizionale: switch Comando: switch-case switch (espressione) { /* espressione deve essere case costante1: istruzione1 di tipo int o char */ [break]; case
ELEMENTI DI INFORMATICA L. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Esempi di Testi di esame Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del corso
Introduzione agli Algoritmi 4. Problemi. Dal Problema alla Soluzione
Sommario Problemi e soluzioni Definizione informale di algoritmo e esempi Proprietà degli algoritmi Input/Output, Variabili Algoritmi senza input o output 1 2 Problema Definizione (dal De Mauro Paravia):
Introduzione al Corso
Introduzione al Nicu Sebe Informatica Nicu Sebe 1 / 12 Informazioni Scopo Contatti Nicu Sebe (niculae.sebe@unitn.it) Per informazioni/ricevimento, email http://www.disi.unitn.it/ sebe/info Materiale per
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
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 Algoritmi e Programmazione Stefano Cagnoni Il problema
osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1
Esempio: Leggere due interi positivi e calcolarne il massimo comun divisore. MCD(12, 8) = 4 MCD(12, 6) = 6 MCD(12, 7) = 1 Sfruttando direttamente la definizione di MCD osservazione: 1 MCD(m,n) min(m,n)
Tela (Teaching Language)
Tela (Teaching Language) Paradigma imperativo Dichiarazioni di variabili, costanti, moduli Programma strutturato in moduli innestati Scope statico Passaggio dei parametri per valore Corpo del modulo =
Esempi di programmi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E01. A. Miola Settembre 2007
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E01 Esempi di programmi A. Miola Settembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Esempi di programmi - 1 1 Contenuti
Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica
Array in Fortran 90 Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2006/2007 Fortran 90: array DIS - Dipartimento di informatica e sistemistica 1 / 25 Cosa vedremo
Ad ogni problema computazionale possiamo associare una misura della sua complessità.
Problema computazionale: Descrizione dell input, Compito da svolgere. Esempio: SOMMA: INPUT: 2 numeri x e y, COMPITO: stampare x+y. Ad ogni problema computazionale possiamo associare una misura della sua
Caratteristiche di un calcolatore elettronico
Prof. Emanuele Papotto Caratteristiche di un calcolatore elettronico È una macchina, costituita da circuiti elettronici digitali e da componenti elettromeccaniche, ottiche e magnetiche. È velocissimo,