CENNI MINIMI DI PROGRAMMAZIONE FUNZIONALE IN PYTHON - V. 0.3

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "CENNI MINIMI DI PROGRAMMAZIONE FUNZIONALE IN PYTHON - V. 0.3"

Transcript

1 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, piuttosto che l esecuzione di comandi. Le espressioni in questi linguaggi sono costruite per mezzo di applicazioni di funzioni che combinano valori di base. Un linguaggio funzionale supporta ed incoraggia la programmazione in stile funzionale. Esempio tipico di linguaggio con un approccio essenzialmente funzionale è il Lisp. Noi proveremo con Python. Per esempio, consideriamo il problema di calcolare la somma degli interi tra 1 e 10. In un linguaggio imperativo (es. il C) si può fare per mezzo di un ciclo e di una variabile che memorizza i risultati intermedi: int tot = 0; for (int i=1; i<=10; ++i) tot += i; In un linguaggio funzionale lo stesso programma viene espresso senza senza variabili e assegnamenti. Per esempio in Python in stile funzionale si può fare così: reduce(lambda a,b : a+b, range(1,11)) Occhio che Python non è di per se funzionale! Potevamo fare la stessa cosa in stile C: tot = 0 for i in range(1,11) : tot += i In breve, il paradigma funzionale è basato sui seguenti caposaldi: (1) La variabile riassume il suo significato matematico (non è più una cella di memoria); (2) i dati sono espressioni simboliche manipolate per mezzo di funzioni (funzioni pure, senza effetti collaterali); (3) i programmi sono le funzioni; (4) strumento fondamentale per la definizione delle funzioni: ricorsione; (5) assegnamento = male! Date: A.D. MMIII. 1

2 2 MATTEO PRADELLA Python permette di valutare una espressione simbolica per mezzo di eval. Per esempio eval("1+2") restituisce Le Liste: accesso e costruzione Ora introduciamo qualche funzione a-la Lisp sulle liste, che useremo come principali strutture dati. Per prima cosa definiamo atomo: servirà spesso come test per la chiusura di una ricorsione su liste Atomo. Un atomo è una lista vuota, oppure una non-lista. def atom (l) : return l == [] or not type(l) is list 2.2. Funzioni di accesso. Approccio stile Lisp per accesso alle liste: first restituisce il primo elemento di una lista, mentre last restituisce il resto della lista (una lista anch essa). Notate analogia con ricorsione: first - caso base, last - passo ricorsivo. Nota: Python fornisce funzioni di accesso a liste molto potenti, e ne permette la modifica degli elementi - non è quello che vogliamo fare! def first(l) : return l[0] def rest(l) : return l[1:] Se ci serve, possiamo usare direttamente l operatore di slice (es. a[2:5]) Costruttore. Useremo come costruttori di liste + e [ ]. Una nota culturale: il Lisp usa come costruttore l operatore cons, che può essere definito in Python in questo modo: def cons(e,l) : return [e]+l Cons è fondamentale in Lisp, perché le liste del Lisp sono implementate per mezzo di coppie. Per esempio, la lista [1, 2, 3] in Lisp viene implementata come (1, (2, (3, nil))) (in Python), dove nil è un valore speciale che denota la lista vuota. Inoltre in Lisp gli stessi programmi sono liste, dunque si possono manipolare in modo analogo ai dati. 3. Esempi 3.1. Esempio 1: implementazione di reverse. Vogliamo definire una funzione reverse che, data una lista, ne restituisca la versione rovesciata. Per esempio: reverse([1,2,3]) restituisce [3,2,1]. def reverse(l) : return l return (reverse(rest(l)) + [first(l)])

3 CENNI MINIMI DI PROGRAMMAZIONE FUNZIONALE IN PYTHON - V Esempio 2: appiattiamo una lista. Appiattiamo la nostra lista di liste! Es. flatten([[1],[2,[3]],[4]]) restituisce [1,2,3,4]. def flatten(l) : if l == []: return l el return [l] return flatten(first(l)) + flatten(rest(l)) 3.3. Esempio 3: calcolo profondità. Profond: restituisce la profondità di una lista. Es. profond([[1],[2,[3]],[4]]) restituisce 3. def profond(l) : return 0 return max(profond(first(l))+1,profond(rest(l))) 3.4. Esempio 4: l append del Lisp. La funzione append in Lisp ha lo stesso ruolo dell operatore + su liste in Python: append([1,2],[3,4]) restituisce [1,2,3,4]. Proviamo ad implementarla usando cons, dunque in stile Lisp: def append_lisp(x,y) : if x == [] : return y return append_lisp(reverse(rest(reverse(x))),\ cons(first(reverse(x)),y)) 4. Da iterazione a ricorsione Un approccio funzionale puro non fa uso dell iterazione: i cicli vengono espressi per mezzo di opportune funzioni ricorsive. In pratica gli strumenti necessari per scrivere un programma che segua il paradigma funzionale sono: il costrutto if-then-else, i confronti, liste e atomi e relative funzioni di accesso/costruttori, la definizione di funzioni (ricorsive). Come possiamo ottenere un analogo funzionale di codice iterativo? Facciamo un esempio di ciclo doppio: def pcart(a,b) : r = [] for a in A : for b in B : r += [[a,b]] In pratica abbiamo definito un prodotto cartesiano tra liste, per esempio:

4 4 MATTEO PRADELLA >>> pcart([1,2,3],[ a, b ]) [[1, a ], [1, b ], [2, a ], [2, b ], [3, a ], [3, b ]] Come fare lo stesso doppio ciclo adottando un approccio funzionale puro? Be, per esempio in questo modo: def ciclo_b(a,b) : if B == [] : return [] return [[a,first(b)]] + ciclo_b(a,rest(b)) def pcartf(a,b) : if A == [] : return [] return ciclo_b(first(a),b) + pcartf(rest(a),b) In pratica la funzione ciclo b ha il ruolo del ciclo for sulla lista B, mentre il ciclo esterno viene eseguito direttamente da pcartf. 5. Viceversa: da ricorsione a iterazione Una funzione ricorsiva è detta impropria (o tail-recursive) se restituisce immediatamente il risultato della sua chiamata ricorsiva, cioè non la usa come argomento di un altra funzione. Per esempio, si può costruire una versione ricorsiva impropria della reverse vista prima. Possiamo sfruttare un nuovo parametro per memorizzare i risultati intermedi del calcolo (lo chiamiamo r): def rev_tr(l, r=[]): ev_tr(rest(l),[first(l)]+r) In questo modo possiamo applicare la funzione più esterna (in questo caso +) rirettamente a r. Nota come il risultato di rev_tr(rest(l),[first(l)]+r) sia passato direttamente a return. Inoltre attenzione: r = [] in questo caso non è un assegnamento, ma la definizione di un valore di default per il parametro r. Dunque la struttura tipica di una funzione ricorsiva impropria è: def f(l, r=e) : if F(l) : return f(g(l),h(r))

5 CENNI MINIMI DI PROGRAMMAZIONE FUNZIONALE IN PYTHON - V Una funzione ricorsiva impropria è facilmente (e automaticamente) traducibile in una funzione iterativa. In effetti, molti compilatori per il linguaggio Lisp traducono automaticamente le ricorsioni improprie in iterazioni (che sono in genere più efficienti). Prendiamo come esempio la funzione f di prima - può essere tradotta in una versione iterativa in questo modo: def f_it(l) : temp = l r = e while not(f(l)) : temp0 = temp r0 = r temp = G(temp0) r = H(r0) Per fare un esempio reale, prendiamo rev tr: in quel caso, e = [] F (l) = atom(l), G(l) = rest(l), H(r) = [first(l)] + r. Dunque otteniamo: def rev_it(l) : temp = l r = [] while not(atom(temp)) : temp0 = temp r0 = r temp = rest(temp0) r = [first(temp0)] + r0 Nota: chiaramente questo codice non è più funzionale!

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: Introduzione ai linguaggi funzionali Modulo 1: Introduzione ai linguaggi funzionali Modulo 2: LISP Informatica 3 Lezione 9 - Modulo 1 Introduzione ai linguaggi funzionali Linguaggi

Dettagli

Informatica teorica Lez. n 12 Introduzione al Lisp. Introduzione al Lisp. Prof. Giorgio Ausiello Università di Roma La Sapienza

Informatica teorica Lez. n 12 Introduzione al Lisp. Introduzione al Lisp. Prof. Giorgio Ausiello Università di Roma La Sapienza Introduzione al Lisp Argomenti della lezione Aspetti generali del Lisp S-espressioni Funzioni predefinite Definizione di funzioni e costrutti programmativi Lisp Ispirato da funzioni ricorsive e lambda

Dettagli

Esercizio: punti e segmenti

Esercizio: punti e segmenti Esercizio: punti e segmenti! Punti e segmenti nel piano, con data abstraction Esercizio: punti e segmenti! Punti e segmenti nel piano, con data abstraction! Lunghezza di un segmento l = (x 2 " x 1 ) 2

Dettagli

Problema: stampa degli interi compresi tra n e m

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

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 6 Alberto Ceselli alberto.ceselli@unimi.it Università degli Studi di Milano 12 Marzo 2013 Funzioni che restituiscono tuple di valori Le funzioni Python possono

Dettagli

Laboratorio di Python

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

Dettagli

Introduzione alla Programmazione Funzionale

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

Dettagli

Corso di Linguaggi di Programmazione

Corso 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

Dettagli

Laboratorio di Python

Laboratorio di Python Algoritmo, sulle liste Università di Bologna 3 e 5 aprile 2013 Sommario Correzione esercizi 1 Correzione esercizi 2 3 4 Correzione Correzione esercizi scrivere e documentare un programma con un menu dove:

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Laboratorio di Informatica Seconda lezione a Python Dottore Paolo Parisen Toldin - parisent@cs.unibo.it Dottoressa Sara Zuppiroli - sara.zuppiroli@unibo.it L'importanza di capire Perché non dobbiamo dichiarare

Dettagli

Logica per la Programmazione

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,

Dettagli

Programmare. Compilatori e interpreti. Editor :: vi. Hello1.c. #include <stdio.h> >> cc Hello1.c. main() { printf( \n Hello World!

Programmare. Compilatori e interpreti. Editor :: vi. Hello1.c. #include <stdio.h> >> cc Hello1.c. main() { printf( \n Hello World! Programmare Hello1.c #include printf( \n Hello World! \n ); >> cc Hello1.c >> a.out Hello World! >> Hello1.c = file sorgente per scriverlo occorre un editor cc = compilatore per altri linguaggi

Dettagli

LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica. Algoritmi ricorsivi

LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica. Algoritmi ricorsivi LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli Studi di Napoli Federico II wpage.unina.it/lapegna Partiamo da un

Dettagli

Laboratorio di Python

Laboratorio di Python Laboratorio di Python Matrici con Liste Lab09 5 Aprile 2017 Outline Correzione esercizi per oggi Matrici Teoria Esercizi Esercizi per casa Esercizio 1 per casa Scrivere una funzione che verifica se una

Dettagli

Operativamente, risolvere un problema con un approccio ricorsivo comporta

Operativamente, risolvere un problema con un approccio ricorsivo comporta LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini

Dettagli

Inserimento in una lista ordinata

Inserimento in una lista ordinata Inserimento in una lista ordinata Vogliamo inserire un nuovo elemento in una lista in cui gli elementi sono memorizzati in ordine crescente: Passo 1: creare un nuovo nodo della lista Passo 2: trovare il

Dettagli

PROGRAMMAZIONE I (A,B) - a.a Primo Appello 19 gennaio 2017

PROGRAMMAZIONE I (A,B) - a.a Primo Appello 19 gennaio 2017 Esercizio 1 PROGRAMMAZIONE I (A,B) - a.a. 2016-17 Primo Appello 19 gennaio 2017 Si scriva una funzione C che, dato un array a di dimensione dim e un numero naturale n tale che 1 n dim, restituisce il valore

Dettagli

Logica per la Programmazione

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,

Dettagli

Considerazioni su Tipi di Dati

Considerazioni su Tipi di Dati Considerazioni su Tipi di Dati April 19, 2017 Definire Tipi di Dato Molti linguaggi permettono di definire sinonimi per tipi di dato esistenti... Non introducono nuovi valori La definizione di un nuovo

Dettagli

Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa

Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini

Dettagli

LA RICORSIONE LA RICORSIONE LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO

LA RICORSIONE LA RICORSIONE LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini

Dettagli

Laboratorio di Python

Laboratorio di Python 25 marzo 2015 Sommario 1 2 Esercizi a casa Scrivere un unico programma, che attraverso un menù di selezione restituisca i risultati delle funzioni che seguono, senza uscire dal programma se non selezionando

Dettagli

Il principio di induzione. La Ricorsione. Il fattoriale: iterativo. Il fattoriale: ricorsivo. P (0) P (n) P (n + 1) per ogni n

Il principio di induzione. La Ricorsione. Il fattoriale: iterativo. Il fattoriale: ricorsivo. P (0) P (n) P (n + 1) per ogni n Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche La Ricorsione Prof. Stefano Guerrini guerrini@di.uniroma1.it Programmazione II (can. P-Z) A.A. 2005-06 Il principio di induzione

Dettagli

Università di Bologna

Università di Bologna Università di Bologna Corso di Laurea in Informatica Esercizi risolti sulla RICORSIONE STRUTTURALE Version 1 (tutti gli esami passati degli anni solari 2018 e 2019) 1. [logica2018-2019 risolto] Considerare

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 19 Ricorsione A. Miola Marzo 2010 http://www.dia.uniroma3.it/~java/fondinf/ Ricorsione 1 Contenuti Funzioni e domini definiti induttivamente

Dettagli

Tecniche di prova per induzione

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

Dettagli

Logica per la Programmazione

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

Dettagli

Corso di Fondamenti di Informatica. La ricorsione

Corso di Fondamenti di Informatica. La ricorsione Corso di Fondamenti di Informatica La ricorsione La ricorsione Si dice che un oggetto (una struttura dati, una funzione matematica, un concetto ) è ricorsivo se è possibile darne una definizione in termini

Dettagli

Programmazione Ricorsione in coda

Programmazione Ricorsione in coda Programmazione Ricorsione in coda Samuel Rota Bulò DAIS Università Ca Foscari di Venezia. Outline Ricorsione in coda Ricorsione in coda La ricorsione in coda (o tail-recursion) è un caso speciale di ricorsione

Dettagli

LA RICORSIONE! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa

LA RICORSIONE! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa LA RICORSIONE! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini

Dettagli

POLITECNICO DI MILANO ESAME DI INFORMATICA 3 Prof.ssa Sara Comai Anno Accademico 2003/2004 I Prova in itinere - Laurea On Line SOLUZIONI

POLITECNICO DI MILANO ESAME DI INFORMATICA 3 Prof.ssa Sara Comai Anno Accademico 2003/2004 I Prova in itinere - Laurea On Line SOLUZIONI POLITECNICO DI MILANO ESAME DI INFORMATICA 3 Prof.ssa Sara Comai Anno Accademico 2003/2004 I Prova in itinere - Laurea On Line SOLUZIONI ESERCIZIO 2 (SEMANTICA) 1) Passaggio dei parametri per valore 3

Dettagli

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

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

Dettagli

Laboratorio di Python

Laboratorio di Python Documentare il codice,, Comprendere cosa calcola una funzione Università di Bologna 20 e 22 marzo 2013 Sommario 1 2 3 4 o Scrivere un programma che sia in grado di calcolare le seguenti serie: la somma

Dettagli

Esempio: il fattoriale di un numero fact(n) = n! n!: Z! N n! vale 1 se n " 0 n! vale n*(n-1)! se n > 0. Codifica:

Esempio: il fattoriale di un numero fact(n) = n! n!: Z! N n! vale 1 se n  0 n! vale n*(n-1)! se n > 0. Codifica: ! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa!! La ricorsione consiste nella possibilità di definire una funzione in termini di se

Dettagli

Il primo programma C++

Il primo programma C++ Il primo programma C++ Un programma in qualsiasi linguaggio evoluto è una sequenza di istruzioni che la CPU dopo opportune conversioni esegue. La sintassi dei linguaggi di programmazione è molto piu rigida

Dettagli

Operativamente, risolvere un problema con un approccio ricorsivo comporta

Operativamente, risolvere un problema con un approccio ricorsivo comporta ! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa!! La ricorsione consiste nella possibilità di definire una funzione in termini di se

Dettagli

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false; Metodi iterativi con array monodimensionali 1. Scrivere un metodo che, dato un array di interi a, restituisce il valore minimo in a. public static int minimo (int[] a) { int min = a[0]; for (int i=1; i

Dettagli

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

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)

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 4 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 5 Marzo 2013 Scheme - L interprete

Dettagli

Laboratorio di Python

Laboratorio di Python Problem solving, Ricorsione, 14 marzo 2014 Sommario 1 2 3 4 Sintassi ed Esempi Esercizi Lunedì il numero di studenti che avevano consegnato gli esercizi era 13. Martedì il numero di esercizi ricevuti,

Dettagli

Laboratorio di Python (con Linux)

Laboratorio di Python (con Linux) 8 a lezione Università di Bologna 2, 4 maggio 2012 Sommario 1 2 3 Diversi Python 2.6 vs 2.7 v.s 3.x La versione di Python installata sulle macchine del laboratorio è la 2.6 (per l esattezza 2.6.6 ). Versioni

Dettagli

Assegnazione di una variabile

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

Dettagli

Laboratorio di Python

Laboratorio di Python Documentare il codice,, Comprendere cosa calcola una funzione 21 marzo 2014 Sommario 1 2 3 4 Lunedì il numero di studenti che avevano consegnato gli esercizi era 15. Martedì il numero di esercizi ricevuti

Dettagli

LA RICORSIONE. Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa

LA RICORSIONE. Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini

Dettagli

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

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

Dettagli

Appunti di informatica. Lezione 8 anno accademico Mario Verdicchio

Appunti di informatica. Lezione 8 anno accademico Mario Verdicchio Appunti di informatica Lezione 8 anno accademico 2016-2017 Mario Verdicchio Il ciclo FOR Molto spesso in un programma bisogna ripetere un operazione per un numero prefissato di volte Si tratta di un iterazione

Dettagli

Iterazione determinata e indeterminata

Iterazione determinata e indeterminata Iterazione determinata e indeterminata Le istruzioni iterative permettono di ripetere determinate azioni più volte: un numero di volte fissato = iterazione determinata, Esempio: fai un giro del parco di

Dettagli

Logica per la Programmazione

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

Dettagli

Elementi di Base. Introduzione a Python.

Elementi di Base. Introduzione a Python. Elementi di Base Introduzione a Python http://www.dia.uniroma3.it/~roselli/ roselli@dia.uniroma3.it Credits Materiale a cura del Prof. Franco Milicchio Panoramica Elementi di base della sintassi (struttura,

Dettagli

Tempo e spazio di calcolo (continua)

Tempo e spazio di calcolo (continua) Tempo e spazio di calcolo (continua) I numeri di Fibonacci come case study (applichiamo ad un esempio completo le tecniche illustrate nei lucidi precedenti) Abbiamo introdotto tecniche per la correttezza

Dettagli

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

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

Dettagli

Introduzione al MATLAB c Parte 2

Introduzione al MATLAB c Parte 2 Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 24 settembre 2007 Outline 1 M-file di tipo Script e Function Script Function 2 Elementi di programmazione

Dettagli

Il linguaggio di programmazione Python

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)

Dettagli

Programmare. Definire una sequenza di istruzioni che specificano come effettuare una elaborazione

Programmare. Definire una sequenza di istruzioni che specificano come effettuare una elaborazione Python Programmare Definire una sequenza di istruzioni che specificano come effettuare una elaborazione Le istruzioni devono essere date in un linguaggio comprensibile dal calcolatore. In generele questi

Dettagli

LA RICORSIONE LA RICORSIONE

LA RICORSIONE LA RICORSIONE LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini

Dettagli

Pensiero Algoritmico. Lezione 3 23 Novembre Ripasso. Anatomia di un programma. Anatomia di un programma. Ozalp Babaoglu Università di Bologna

Pensiero Algoritmico. Lezione 3 23 Novembre Ripasso. Anatomia di un programma. Anatomia di un programma. Ozalp Babaoglu Università di Bologna Pensiero Algoritmico Lezione 3 23 Novembre 2016 Ozalp Babaoglu Università di Bologna Ripasso Definizione del problema Astrarre i dettagli, costruire un modello Costruire l algoritmo che risolve il problema

Dettagli

Tempo e spazio di calcolo (continua)

Tempo e spazio di calcolo (continua) Tempo e spazio di calcolo (continua) I numeri di Fibonacci come case study (applichiamo ad un esempio completo le tecniche illustrate nei lucidi precedenti) Abbiamo introdotto tecniche per la correttezza

Dettagli

Calcolare il massimo di una lista

Calcolare il massimo di una lista Calcolare il massimo di una lista Lunedì abbiamo definito un algoritmo per calcolare il valore massimo fra gli elementi di una lista predefinita di interi. In particolare, abbiamo: deciso di rappresentare

Dettagli

Laboratorio di Python

Laboratorio di Python Laboratorio di Python Matrici con Liste Lab09 10 Aprile 2018 Outline Correzione esercizi per oggi Matrici Teoria Esercizi Esercizi per casa Outline Correzione esercizi per oggi Matrici Teoria Esercizi

Dettagli

La Ricorsione. Carla Binucci e Walter Didimo

La Ricorsione. Carla Binucci e Walter Didimo La Ricorsione Carla Binucci e Walter Didimo Definizione induttiva di funzioni Una funzione definita in modo induttivo è una funzione definita in termini di sé stessa ad esempio la funzione f(n) = n! (fattoriale

Dettagli

Sommario. Tipo stringa: string. Tipo stringa: stile C. Tipo stringa Tipo booleano

Sommario. Tipo stringa: string. Tipo stringa: stile C. Tipo stringa Tipo booleano Tipo stringa Tipo booleano Sommario Ricorsione: Definizione Chiamata di funzione Ricorsione in coda Ricorsione non in coda Ricorsionei eccessiva Esempio di ricorsione: ricerca binaria Tipo stringa Il C++

Dettagli

IL CONCETTO DI LISTA!

IL CONCETTO DI LISTA! Liste semplici Obiettivi: Discutere la realizzazione collegata (puntatori a strutture) di liste semplici Introdurre l ADT lista semplice e le operazioni tipiche su essa 1 IL CONCETTO DI LISTA Una lista

Dettagli

1) Somma dei primi n numeri naturali: 3) Ricerca di un elemento el in una sequenza di interi: FONDAMENTI DI INFORMATICA II Ricorsione 2

1) Somma dei primi n numeri naturali: 3) Ricerca di un elemento el in una sequenza di interi: FONDAMENTI DI INFORMATICA II Ricorsione 2 FUNZIONI RICORSIVE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento (chiamata) a se stessa. Esempio: Esempi di problemi ricorsivi: 1) Somma dei primi

Dettagli

Laboratorio. Due. 1) Switch 2) Costrutti Iterazione (For, While, do while)

Laboratorio. Due. 1) Switch 2) Costrutti Iterazione (For, While, do while) Laboratorio Due 1) Switch 2) Costrutti Iterazione (For, While, do while) GLI ARGOMENTI DI OGGI Istruzione switch I costrutti di iterazione (For, while, do while) Le funzioni (e ricorsione) Terza Esercitazione

Dettagli

INTRODUZIONE ALLA LOGICA DI HOARE. Corso di Logica per la Programmazione

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

Dettagli

Logica per la Programmazione

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.

Dettagli

Linguaggi di Programmazione avanzati Linguaggi funzionali

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

Dettagli

FUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi:

FUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi: FUNZIONI RICORSIVE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento (chiamata) a se stessa. Esempio: Esempi di problemi ricorsivi: 1) Somma dei primi

Dettagli

La principale modalità di calcolo è l applicazione di funzioni

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

Dettagli

contiene il valore e nel range [l, u]. Funziona correttamente solo se 0 l e u a.

contiene il valore e nel range [l, u]. Funziona correttamente solo se 0 l e u a. Linear search @pre @post bool LinearSearch(int [] a, int l, int u, int e) { for @ (int i := l;i u;i := i+1){ if (a[i] = e) return true; return false; LinearSearch ricerca il valore e all interno del range

Dettagli

n n 1 n = > Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita

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

Dettagli

Laboratorio di Python

Laboratorio di Python 19 marzo 2015 Sommario 1 2 3 4 Esercizi Scrivere e documentare le funzioni che risolvano i seguenti problemi: 1 Definire una funzione che presa una sequenza come parametro restituisca il valore della media

Dettagli

Fondamenti di Programmazione

Fondamenti di Programmazione Fondamenti di Programmazione Capitolo 9 Tuple Prof. Mauro Gaspari: gaspari@cs.unibo.it Le tuple Due strutture dati composte: Stringhe: non modificabili (immutabili) Liste: modificabili (mutabili) Le tuple

Dettagli

Olimpiadi di Informatica 2009 Giornate preparatorie

Olimpiadi di Informatica 2009 Giornate preparatorie Olimpiadi di Informatica 2009 Giornate preparatorie Dipartimento di Informatica Università di Torino Elio Giovannetti marzo 2009 Lino il giornalaio. 03/19/09 1 Caratterizzazione ricorsiva Siano val[0],

Dettagli

Esempio: rappresentare gli insiemi

Esempio: rappresentare gli insiemi Esempio: rappresentare gli insiemi Problema: rappresentare gli insiemi Vedremo che la scelta della rappresentazione per implementarli non è così ovvia come era stato per i numeri razionali In realtà ci

Dettagli

Espressioni e Comandi

Espressioni e Comandi Espressioni e Comandi March 24, 2017 Elementi di Base dei Programmi Ricordate? Macchina Astratta: Insieme di algoritmi e strutture dati che permettono di memorizzare ed eseguire programmi Abbiamo parlato

Dettagli

PROGRAMMAZIONE I (A,B) - a.a I Verifica Intermedia 3 Novembre 2017

PROGRAMMAZIONE I (A,B) - a.a I Verifica Intermedia 3 Novembre 2017 Esercizio 1 PROGRAMMAZIONE I (A,B) - a.a. 2017-18 I Verifica Intermedia 3 Novemre 2017 Dato il seguente linguaggio sull alfaeto Σ = {a, L = { a k m k%3 = m k 0 si verifichi se è regolare o meno e si dia

Dettagli

Strutture di Controllo Iterative: Istruzione FOR

Strutture di Controllo Iterative: Istruzione FOR Linguaggio C Strutture di Controllo Iterative: Istruzione FOR 1 Istruzioni iterative n Anche dette cicli n Prevedono l esecuzione ripetitiva di altre istruzioni (corpo del ciclo) n Ad ogni iterazione del

Dettagli

Ricorsione. Prof. Orazio Mirabella. La ricorsione. La ricorsione consiste nella possibilità di definire una funzione mediante se stessa.

Ricorsione. Prof. Orazio Mirabella. La ricorsione. La ricorsione consiste nella possibilità di definire una funzione mediante se stessa. Ricorsione Prof. Orazio Mirabella La ricorsione La ricorsione consiste nella possibilità di definire una funzione mediante se stessa. È basata sul principio di induzione matematica: se una proprietà P

Dettagli

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

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

Dettagli

Sviluppo di programmi

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

Dettagli

Laboratorio di Python (con Linux)

Laboratorio di Python (con Linux) Indeterminata,,,... Università di Bologna 14, 16 marzo 2012 Sommario 1 2 3 4 5 Modularità Quando si deve fare un programma complicato è meglio suddividerlo in più parti. Per ridurre la complessità (più

Dettagli

Cammini minimi fra tutte le coppie

Cammini minimi fra tutte le coppie Capitolo 12 Cammini minimi fra tutte le coppie Consideriamo il problema dei cammini minimi fra tutte le coppie in un grafo G = (V, E, w) orientato, pesato, dove possono essere presenti archi (ma non cicli)

Dettagli

Linguaggi basati sul concetto di funzione e di applicazione di una funzione ad argomenti

Linguaggi basati sul concetto di funzione e di applicazione di una funzione ad argomenti Linguaggi Funzionali Parte 1: Un Esempio di Linguaggio Funzionale (ELF) Programmazione Funzionale Il tipo di dato Lista Il Nucleo applicativo del Lisp (ELF) Parte 2: Linguaggi funzionali Programmazione

Dettagli

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09) ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09) DISPENSA N. 4 1. Ricerca Binaria Ricorsiva L algoritmo Ricerca Binaria risolve il problema della ricerca di una chiave in un vettore. È un esempio

Dettagli

Sviluppo di programmi

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

Dettagli

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

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

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

Dettagli

If Statement. Il costrutto condizionale if ha la seguente sintassi:

If Statement. Il costrutto condizionale if ha la seguente sintassi: Costrutti Control Flow Con control flow (o strutture di controllo) si intende l insieme dei costrutti che servono a gestire il flusso di esecuzione di un programma, cioè a specificare quando e come eseguire

Dettagli

Informatica Generale Andrea Corradini Algoritmi: ordinamento per inserimento e ricorsione

Informatica Generale Andrea Corradini Algoritmi: ordinamento per inserimento e ricorsione Informatica Generale Andrea Corradini 14 - Algoritmi: ordinamento per inserimento e ricorsione Sommario Un algoritmo iterativo: l'ordinamento per inserimento (insertion sort) La ricorsione: i numeri triangolari

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 1 Un introduzione informale agli algoritmi Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizione informale di algoritmo Insieme di istruzioni, definite

Dettagli

Sviluppo di programmi

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

Dettagli

Programmazione Funzionale

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

Dettagli

Strutture di controllo iterative

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

Dettagli

Linguaggi di Programmazione avanzati Linguaggi funzionali

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

Dettagli