Università di Bologna
|
|
- Achille Bono
- 5 anni fa
- Visualizzazioni
Transcript
1 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. [logica risolto] Considerare la seguente sintassi delle liste di X: L ::= [] X :: L dove :: è associativo a destra. Scrivere la funzione ricorsiva f che su una lista L di numeri che restituisca la lista LL di liste non vuote di numeri tale che: (a) Se LL = L 1 ::... :: L n :: [] allora L = n è la funzione che concatena due liste. In altre parole, LL è fatta da frammenti di L nell ordine in cui occorono in L. (b) ogni L i è una lista monotona, non crescente o non decrescente, di numeri (c) L 1 è monotona non decrescente (d) le liste L i sono di lunghezza massimale, ovvero L i e L i+1 non possono essere concatenate per ottenere un unica lista monotona. Esempi: f(1 :: 3 :: 7 :: 6 :: 6 :: 4 :: 8 :: 10 :: []) = (1 :: 3 :: 7 :: []) :: (6 :: 6 :: 4 :: []) :: (8 :: 10 :: []) :: [] f(7 :: 4 :: 2 :: 9 :: []) = (7 :: []) :: (4 :: 2 :: []) :: (9 :: []) :: [] È possibile utilizzare funzioni ausiliarie su liste, da definirsi usando la ricorsione strutturale, funzioni ausiliarie su numeri (da non definirsi) e/o passare parametri ausiliari alle funzioni. Primo problema: Specifica: data L restituire la lista di liste LL come specificato nell esercizio. Funzione che lo risolve: f(l) f([]) = [] f(n::l) = if L [] and N <= first(l) then add to first list(n,f(l)) else (N::[])::g(L) 1
2 Nota: nel caso N :: L la chiamata ricorsiva strutturale f(l) risolve il problema su L. Mi resta da capire cosa farne di N. Se N può fare parte della prima sequenza monotona di L, lo aggiungo ad essa. Altrimenti N deve formare una sequenza singoletto da solo e deve essere seguito dalla lista di sequennze che inizia con una monotona non crescente. Risolvo tale problema con la funzione g. La f e la g sono definite per ricorsione mutua: ognuna richiama l altra solo su sottotermini immediati dell input, rispettando i dettami della ricorsione strutturale. Un altra soluzione possibile è che la f() e la g() siano la stessa funzione che prende in input un parametro aggiuntivo (un booleano) per determinare quale dei due problemi risolvono (prima sequenza non decrescente vs non crescente). Secondo problema: Specifica: data L restituire la lista di liste LL come specificato nell esercizio ma con la differenza che la lista L 1 deve essere monotona non crescente. Funzione che lo risolve: g(l) g([]) = [] g(n::l) = if L [] and N >= first(l) then add to first list(n,g(l)) else (N::[])::f(L) Terzo problema: Specifica: dato un numero N e una lista di liste di numeri LL, aggiungere N in testa alla prima lista di LL. Se LL non contiene liste, il comportamento non è specificato (= fate un poco come volete). Esempio: add to first list(3,(1::4::0::[])::(5::[])::[]) = (3::1::4::0::[])::(5::[])::[] Funzione che lo risolve: add to first list(n,ll) add to first list(n,[]) = [] add to first list(n,l::ll) = (N::L)::LL Quarto problema: Specifica: data una lista non vuota di numeri, restituirne il
3 primo elemento. Se la lista è vuota il comportamento non è specificato. Funzione che lo risolve: first(l) first([]) = first(n::l) = N 2. [logica ] Definizione: N P è positiva sse N è negativa e P è positiva; P N è negativa sse P è positiva e N è negativa; P è negativa sse P è positiva; N è positiva sse P è negativa; la variabile proposizionale A è positiva. Scrivere una funzione f ricorsiva su F tale che f(f, tt) = tt sse F è positiva. Problema generalizzato: scrivere una funzione f ricorsiva su F tale che f(f, b) = tt sse (F è positiva e b = tt oppure F è negativa e b = ff). f(f 1 F 2, b) = f(f 2,b) && f(f 1,not b) f( F, b) = f(f,not b) f(a,b) = (b=tt) 3. [logica180917] Considerare la seguente sintassi per le liste di numeri naturali: L ::= ɛ N; L dove il ; è associativo a destra e N è il tipo dei numeri naturali. Scrivere, per induzione strutturale sulla lista di numeri L, una funzione ricorsiva f(l) che calcola il numero di sottosequenze monotone crescenti massimali di L. È possibile utilizzare funzioni ausiliarie definite anch esse per ricorsione strutturale. Esempio: f(3; 5; 2; 1; 4; 12; 6; 6; ɛ) = 5 in quanto le sottosequenze monotone crescenti massimali dell input sono (3; 5; ɛ); (2; ɛ); (1; 4; 12; ɛ); (6; ɛ); (6; ɛ); ɛ. Problema 1: f(l) deve calcolare il numero di sottosequenze monotone crescenti massimali di L. f(ɛ) = 0 f(n;l) = if smaller(n,l) then f(l) else 1 + f(l) Problema 2: smaller(n, L) = true sse L è non vuota e N è più piccolo della testa di L. smaller(n,ɛ) = false smaller(n,m;l) = N<M
4 4. [logica180706] Scrivere una funzione che, data in input una lista L di liste di numeri, restituisca la lista O di tutti e soli i numeri che occorrono in tutte le liste in L. Problema 1: data una lista LL di liste di numeri restituire la lista O di tutti e soli i numeri che occorrono in tutte le liste in LL. f([]) = [] f(l::ll) = filter(l,ll) Problema 2: scrivere una funzione f ilter(l, LL) per ricorsione strutturale su L che restituisca la lista degli elementi di L che occorrono anche in tutte le liste in LL. f([],ll) = [] f(n::l,ll) = if meml(n,ll) then N::filter(L,LL) else filter(l,ll) Problema 3: scrivere una funzione meml(n, LL) per ricorsione strutturale su LL che restituisca true sse N è un elemento di tutte le liste in LL. meml(n,[]) = false meml(n,l::ll) = mem(n,l) && meml(n,ll) Problema 4: scrivere una funzione mem(n, L) per ricorsione strutturale su L che restituisca true sse N è un elemento della lista L. mem(n,[]) = false mem(n,m::l) = (N = M) mem(n,l) 5. [logica180621] Sia A un qualunque tipo di dato e : A A B l implementazione di una relazione di equivalenza su A. Considerare la seguente sintassi per le liste di numeri naturali: L ::= ɛ B; L dove il ; è associativo a destra e B è un tipo qualunque. Scrivere, per induzione strutturale su L, lista di elementi di A pensata come un insieme di elementi di A, una funzione f(l) che ritorni la lista delle classi di equivalenza di A a meno di. Ovvero, f(l) deve ritornare la lista L 1 ;... ; L n ; ɛ dove (a) i, L i ɛ (b) i, j, x L i, y L j, x y = tt (i = j)
5 Come visto a lezione potete implementare, sempre per ricorsione strutturale, funzioni ausiliarie e potete passare parametri ulteriori alle vostre funzioni se necessario. (a) Problema 1: f(l) deve restituire la lista delle classi di equivalenza di elementi di L modulo la relazione approx. f([]) = ɛ f(n,l) = add to class(n,f(l)) (b) Problema 2: add to class(n,ll) deve aggiungere N alla lista di elementi, contenuta in L, che è un sottoinsieme di una classe di equivalenza, o creare una nuova lista/classe se la sua non è ancora presente in LL. add to class(n,[]) = N;ɛ add to class(n,l;ll = if mem(n,l) then (N;L);LL else L;add to class(n,ll) (c) Problema 3: mem(n,l) deve ritornare true quando N fa parte della classe di equivalenza di cui L è un sottoinsieme. mem(n,[]) = false mem(n,m;l) = e(n,m) 6. [logica180528] Considerare la seguente grammita per alberi binari: B ::= ɛ B B. Scrivere, facendo ricorso alla sola ricorsione strutturale, la funzione s(b 1, B 2 ) che ritorna true sse B 2 è un sottoalbero di B 1. È possibile fare ricorso a funzioni ausiliarie e usare parametri ulteriori. Esempi: s(((ɛ ɛ) ɛ) ɛ, ɛ ɛ) = true s(((ɛ ɛ) ɛ) ɛ, ɛ (ɛ ɛ)) = false (a) Problema 1: s(b 1, B 2 ) deve restituire true sse B 2 è un sottoalbero di B 1. Procediamo per ricorsione strutturale su B 1. s(ɛ, B 2 ) = equal(ɛ, B 2 ) s(b 1 1 B2 1, B 2) = equal(b 1 1 B2 1, B 2) or s(b 1 1, B 2) or s(b 2 1, B 2) (b) Problema 2: equal(b 1, B 2 ) deve restituire true sse B 1 e B 2 sono alberi identici.
6 equal(ɛ, B 2 ) = is epsilon(b 2 ) equal(b1 1 B2 1, B 2) = equal(b1 1 B2 1, B 2) or s(b1 1, first(b 2)) or s(b1 2, second(b 2)) is epsilon(ɛ) = true is epsilon(b 1 B 2 ) = false first(ɛ) = first(b 1 B 2 ) = B 1 second(ɛ) = second(b 1 B 2 ) = B 2 Nota: il codice precedente è verboso. La totalità dei linguaggi di programmazione che supportano pattern-matching vi permettono di scriverlo in forma condensata come segue, matchando entrambi i parametri contemporaneamente: 7. [logica fila2] Considerare la seguente sintassi per le liste di numeri naturali: L ::= [] N :: L dove il :: è associativo a destra. Scrivere, per induzione strutturale su L, una funzione g(l 1, L 2 ) che ritorni il booleano tt se la lista L 1 non contiene L 2 come sottolista. Esempi: g(0 :: 1 :: 2 :: 3 :: [], 1 :: 2 :: []) = tt g(0 :: 1 :: 2 :: 3 :: [], 0 :: 2 :: []) = ff. L unica funzione della quale potete assumere l esistenza è = utilizzabile per confrontare due numeri. Potete implementare funzioni ausiliarie, sempre per ricorsione strutturale. equal(ɛ, ɛ) = true equal(b1 1 B2 1, B1 2 B2 2 ) = equa equal(ɛ, B2 1 B2 2 ) = false equal(b1 1 B2 1, ɛ) = false (a) Problema 1: g(l 1, L 2 ) ritorna tt sse L 1 non contiene L 2 come sottolista. g([], L 2 ) = not equal([], L 2 ) g(n :: L 1, L 2 ) = not equal(n :: L 1, L 2 )&&g(l 1, L 2 ) (b) Problema 2: equal(l 1, L 2 ) ritorna tt sse le due liste sono identiche. equal([], []) = tt equal(n 1 :: L 1, N 2 :: L 2 ) = (N 1 = N 2 )&&equal(l 1, L 2 ) equal([], N :: L) = ff equal(n :: L, []) = ff
7 Come nell esercizio precedente il codice dell equal può essere riscritto per evitare di fare matching contemporaneamente su entrambi i parametri, usando tre funzioni ausiliarie is empty, head, tail. 8. [logica180112] Considerare la seguente sintassi per le liste di numeri naturali: L ::= ɛ N; L dove il ; è associativo a destra. Scrivere, per induzione strutturale su L, una funzione f(l) che ritorni il booleano tt se la lista L è palindroma e ff altrimenti. Non potete assumere l esistenza di nessuna operazione sulle liste (compresa, per esempio, l uguaglianza). Come visto a lezione potete implementare, sempre per ricorsione strutturale, funzioni ausiliarie. (a) Problema 1: f(l) ritorna tt sse L è palindroma. f(l) = equal(l, reverse(l, ɛ)) (b) Problema 2: reverse(l 1, L 2 ) ritorna la lista L 1 scritta da destra a sinistra concatenata alla lista L 2. Esempio: reverse(1; 2; 3; ɛ, 4; 5; ɛ) = 3; 2; 1; 4; 5; 6; ɛ reverse(ɛ, L) = L reverse(n; L 1, L 2 ) = reverse(l 1, N; L 2 ) (c) Problema 3: equal(l 1, L 2 ) ritorna tt sse le due liste sono identiche. Vedi soluzione [logica fila2].
Università degli Studi di Bologna
Università degli Studi di Bologna Corso di Laurea in Informatica Esercitazione scritta di LOGICA PER L INFORMATICA Esempio per l anno accademico 2018-2019 1 (1 punto). Dare la sintassi per le formule della
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
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,
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:
Corso di Programmazione
II Accertamento del 15 Marzo 2002 / A Risolvi i seguenti esercizi, riporta le soluzioni in modo chiaro negli appositi riquadri e giustifica sinteticamente le risposte utilizzando i fogli protocollo. Cosa
Sintassi. Linguaggi. 4: Sintassi. Claudio Sacerdoti Coen. Universitá di Bologna 24/02/2011. Claudio Sacerdoti Coen
Linguaggi 4: Universitá di Bologna 24/02/2011 Outline 1 Wikipedia: La sintassi è la branca della linguistica che studia i diversi modi in cui le parole si uniscono tra loro per formare
come segue: data una collezione C di elementi e una un elemento che verifica la proprietà P
Problemi di Ricerca Carla Binucci e Walter Didimo Il problema della Ricerca In generale, il Problema della Ricerca è definito come segue: data una collezione C di elementi e una proprietà P, determinare
Linguaggi. Claudio Sacerdoti Coen 29,?/10/ : La struttura dei numeri naturali. Universitá di Bologna
Linguaggi 5: La struttura dei numeri naturali Universitá di Bologna 29,?/10/2014 Outline La struttura dei numeri naturali 1 La struttura dei numeri naturali I numeri naturali La
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E14 F. Gasparetti, C. Limongelli Maggio 2012 1 Verifica presenza di elementi comuni V1 - Date due liste di stringhe scrivere
Linguaggi. Claudio Sacerdoti Coen 04/03/ : La struttura dei numeri naturali. Universitá di Bologna
Linguaggi 8: Universitá di Bologna 04/03/2011 Outline 1 I numeri naturali Wikipedia: L espressione numeri naturali spesso viene usata sia per la sequenza di numeri interi positivi
Laboratorio di Python
Laboratorio di Python Alberi binari Lab15 12 Maggio 2017 Outline Correzione esercizi per oggi Alberi binari Teoria Esercizi Esercizi per casa Saluti Esercizio 1 per casa Scrivere una funzione palindroma(s)
Prova di Algoritmi e s.d. (1o anno) 7 Febbraio TESTO e RISPOSTE
Prova di Algoritmi e s.d. (1o anno) 7 Febbraio 2003 TESTO e RISPOSTE Esercizio 1 (punti 5 in prima approssimazione) Consideriamo alberi binari con insieme dei nodi NODI = N (l'insieme dei naturali). Riportiamo
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
Laboratorio 09. Programmazione - CdS Matematica. Ivano Lauriola 16 gennaio 2018
Laboratorio 09 Programmazione - CdS Matematica Ivano Lauriola 16 gennaio 2018 Binary Search Tree Alberi binari di ricerca Gli alberi binari di ricerca (binary search trees, BST), detti anche alberi ordinati,
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,
Programmazione Funzionale
1/11 Programmazione Funzionale Esercizi in preparazione dell esame Davide Mottin - Themis Palpanas May 28, 2014 Svolgimento d esame Inferire il tipo di un espressione Esercizi sul lambda-calcolo Esercizi
Corso di Programmazione
II Accertamento del 27 Marzo 2001 / A Risolvi i seguenti esercizi, riporta le soluzioni in modo chiaro negli appositi riquadri e giustifica sinteticamente le risposte utilizzando i fogli protocollo. Cosa
Alcuni Soluzioni. Fornire la specifica di un algoritmo risolutivo utilizzando lo pseudocodice visto a lezione.
Alcuni Soluzioni ESERCIZIO 1 Data una sequenza di interi di dimensione dim, determinare se esistono esattamente cont occorrenze del valore val, utilizzando per questo una variabile booleana check. Stato
Note per la Lezione 6 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 6 Ugo Vaccaro Ancora sulla tecnica Programmazione Dinamica Nella lezione scorsa abbiamo appreso che la tecnica Divide-et-Impera,
Problemi, istanze, soluzioni
lgoritmi e Strutture di Dati II 2 Problemi, istanze, soluzioni Un problema specifica una relazione matematica tra dati di ingresso e dati di uscita. Una istanza di un problema è formata dai dati di un
Istruzioni Condizionali
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 6 Istruzioni Condizionali Carla Limongelli Settembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Istruzioni condizionali
Algoritmi e Strutture Dati
Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]
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
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,
Algoritmi e Strutture Dati
Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno Il concetto di dato Il concetto
Algoritmi e Strutture Dati
Strutture Elementari Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 29 ottobre 2008 Strutture Dati Astratte Il concetto di dato Il concetto
PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE
PROGRAMMAZIONE II canale A-D 2007-2008 14 luglio 2008 TRACCIA DI SOLUZIONE 1. Si vogliono realizzare mediante puntatori delle liste circolari, cioè delle liste tali che l ultimo elemento della lista punta
In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.
In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni
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
Laboratorio di Python
Istruzione di condizione, Input da tastiera, Università di Bologna 6 e 8 marzo 2013 Sommario 1 Tipi di errore e Debugging 2 3 4 Outline Tipi di errore e Debugging 1 Tipi di errore e Debugging 2 3 4 Esercizio
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
Esercitazione. Ricorsione. May 31, Esercizi presi dal libro di Rosen
Esercitazione Ricorsione May 31, 2016 Esercizi presi dal libro di Rosen Problema 2 a) sezione 5.3 Data la seguente funzione definita ricorsivamente come: f(n+1) = 2f(n) f(0) = 3 Determinare il valore di
Stringhe. Walter Didimo
Stringhe Walter Didimo La classe String L uso di stringhe (sequenze di caratteri alfanumerici) nei programmi è molto frequente Per tale motivo, l API di Java offre una classe con molti metodi utili per
Laboratorio di Python
Iterazione determinata, 12 marzo 2015 Sommario 1 2 3 Sintassi ed Esempi 4 Input da tastiera Sintassi = raw_input('stringa descrittiva') #versione 2.* = input('stringa descrittiva') #versione
Logica per la Programmazione
Logica per la Programmazione Lezione 12 Sistema di Dimostrazioni per le Triple di Hoare Comando Vuoto, Assegnamento, Sequenza, Condizionale A. Corradini e F.Levi Dip.to Informatica Logica per la Programmazione
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
Esercizio 1. Liste di interi
Esercizio 1. Liste di interi Si legga una sequenza di numeri interi da tastiera, dopo ogni inserimento chiedere all'utente se vuole continuare, quindi: Creare due liste L1 e L2 con inserimento ordinato;
Logica per la Programmazione
Logica per la Programmazione Lezione 15 Sistema di Dimostrazioni per le Triple di Hoare Comando Vuoto, Assegnamento, Sequenza, Condizionale A. Corradini e F. Bonchi Dip.to Informatica Logica per la Programmazione
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
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
d. Cancellazione del valore 5 e. Inserimento del valore 1
Esercizio1 Si consideri un albero binario non vuoto in cui a ciascun nodo v è associato un numero reale v.val. Scrivere un algoritmo che, dato in input l'albero T e un numero reale x, restituisce true
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,
Laboratorio 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
Esercizi in Laboratorio
Esercizi in Laboratorio Informatica@SEFA 2017/2018 - Laboratorio 3 Massimo Lauria http://massimolauria.net/courses/infosefa2017/ Lunedì, 16 Ottobre 2017 1 Formattazione delle
Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione
Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico
Esercizi su alberi binari
Esercizi su alberi binari Esercizi svolti: Determinazione nodi contenti verifica completezza verifica quasi completezza lunghezza del cammino interno determinazione ultima foglia in un quasi completo verifica
Ricorsione. DD cap. 5 pp KP cap. 5 pp
Ricorsione DD cap. 5 pp.160-184 KP cap. 5 pp.199-208 Un esempio Problema: prendere in input un intero e calcolarne il fattoriale se n>1 n!=n(n-1)(n-2)(n-3) 1; se n=0 o 1 n!=1. ma (n-1)! la definizione
Problemi decidibili, semidecidibili, indecidibili
Problemi decidibili, semidecidibili, indecidibili (Paragrafo 3.5 delle dispense) Il problema di determinare se una formula A della logica proposizionale sia valida o no può essere risolto mediante un procedimento
INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti
INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti Ricorsione La ricorsione è un approccio per la risoluzione
Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio
Appunti di informatica Lezione 10 anno accademico 2016-2017 Mario Verdicchio Esercizio Scrivere un programma che, data una sequenza di 10 interi (scelta dall utente), la ordini in ordine crescente Soluzione
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
METODI MATEMATICI PER L INFORMATICA
METODI MATEMATICI PER L INFORMATICA Tutorato Lezione 7 19/05/2016 Corso per matricole congrue a 1 Docente: Margherita Napoli Tutor: Amedeo Leo Ricorsione Esercizio 2 pagina 357 Trovare f(1), f(2), f(3),
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
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.
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
Fondamenti di Programmazione
Fondamenti di Programmazione Capitolo 4 Condizionale e ricorsione Prof. Mauro Gaspari: gaspari@cs.unibo.it Alcuni operatori utili L'operatore modulo opera su numeri interi e in generale su espressioni
Lezione di Laboratorio di Prgrammazione: /05/2019 a.a. 2018/2019 R.Prevete
Lezione di Laboratorio di Prgrammazione: 19 13/05/2019 a.a. 2018/2019 R.Prevete Ricorsione La struttura di una funzione ricorsiva per un problema P di dimensione n (n è la dimensione dei dati input, ad
Handle di Funzioni Università degli Studi di Milano
Handle di Funzioni Versioni recenti di Matlab definiscono in modo pieno il tipo funzione, permetto di assegnare a variabili valori di tipo funzione definire funzioni che ricevono parametri di tipo funzione
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
Laboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati 1 Note di carratere generale Docente: Camillo Fiorentini 9 ottobre 2007 L obiettivo è quello di scrivere delle semplici funzioni per risolvere problemi di tipo
Note per la Lezione 4 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 4 Ugo Vaccaro Ripasso di nozioni su Alberi Ricordiamo che gli alberi rappresentano una generalizzazione delle liste, nel senso che
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
Soluzioni della settima esercitazione di Algoritmi 1
Soluzioni della settima esercitazione di Algoritmi 1 Beniamino Accattoli 19 dicembre 2007 1 Grafi Un grafo è non orientato se descrivendo un arco come una coppia di vertici (i,j) l ordine è ininfluente
TIPO DI DATO ASTRATTO
TIPO DI DATO ASTRATTO Tipo di dato astratto Esempio: Vogliamo rappresentare un sistema di prenotazione di esami universitari. Dati immagazzinati: prenotazioni esami Operazioni supportate: prenota(esame,
Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 8 14/11/2013
Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 8 14/11/2013 Original work Copyright Sara Migliorini, University of Verona Modifications Copyright Damiano Macedonio, University
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
Informatica AA 2005/06. Programmazione M.A. Alberti. Operatori in Java 1. Operatori in Java. Espressioni aritmetiche. Espressioni booleane
Operatori in Java Operatori in Java Corso di laurea in Informatica Operatori aritmetici Operatori di uguaglianza e relazionali Operatori logici in espressioni booleane La precedenza degli operatori L associatività
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
Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc
Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 2 Oggetti e puntatori Un oggetto è un area di memoria
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
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
Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 18. Iterazione. Maggio Iterazione
Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 18 Maggio 2010 1 Contenuti Si vogliono formalizzare diverse tecniche per la risoluzione di problemi di: Accumulazione Conteggio Verifica
Costruzione dell insieme dei Follow
Costruzione dell insieme dei Follow E! T E - T E E! + T E - T E " T! F T T! *F T " F! (E) i Per evitare che alcuni insiemi siano vuoti si aggiunge per default il simbolo speciale $ che demarca la fine
e e n-1 Esercizio 1.2 (Punti 8; punti 10 se risolto facendo uso della ricorsione)
Informatica 1 Seconda prova 31 Gennaio 2006 Esercizio 1 (Punti Una lista bidirezionale è una lista in cui ogni elemento è collegato, mediante puntatori, all elemento seguente e a quello precedente; alla
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
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
Esercizio A1 Specificare per la funzione o l espressione il tipo più generale, oppure il valore, oppure NT per non è tipizzabile.
Esercizio A1 Specificare per la funzione o l espressione il tipo più generale, oppure il valore, oppure NT per non è tipizzabile. print_int ;; List.map print_string ;; List.iter print_int ;; (fun x ->
Pile Le pile: specifiche e realizzazioni attraverso rappresentazioni sequenziali e collegate. Pile e procedure ricorsive
Pile Le pile: specifiche e realizzazioni attraverso rappresentazioni sequenziali e collegate. Pile e procedure ricorsive Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di
Programmazione Ricorsione
Programmazione Ricorsione Samuel Rota Bulò DAIS Università Ca Foscari di Venezia. Outline Ricorsione Cos è la ricorsione? In matematica... n! = { n (n 1)! se n > 0 1 altrimenti N = {0} {i + 1 : i N} Principio
Esercizi proposti. pari(x) :- 0 is X mod 2.
Esercizi proposti 1. Implementare il proprio albero genealogico, definendo (mediante fatti) la relazione genitore (fino ai bisnonni, con tutti gli zii e i cugini). Definire poi i predicati a due argomenti:
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E16 Esercizi Strutture Collegate e Oggetti C. Limongelli Maggio 2012 1 Contenuti q Verifiche universali ed esistenziali su strutture
Laboratorio di Informatica I
Struttura della lezione Lezione 3: Istruzioni ed operatori booleani. Vittorio Scarano Corso di Laurea in Informatica Università di Salerno Soluzioni agli esercizi Istruzioni (statement) semplici e di controllo
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:
Fondamenti di Programmazione - Prof.ssa Gargano Anno Acc Esercitazioni 2009
Fondamenti di Programmazione - Prof.ssa Gargano Anno Acc. 2008-09 Esercitazioni 2009 1. Mostrare per induzione che per ogni intero positivo n 0, la seguente affermazione S(n) é vera: S(n): n i=0 2i = 2
FONDAMENTI DI INFORMATICA
Università degli Studi di Cagliari Corsi di Laurea in Ingegneria Chimica e Ingegneria Meccanica FONDAMENTI DI INFORMATICA http://people.unica.it/gianlucamarcialis A.A. 2018/2019 Docente: Gian Luca Marcialis
Strutture dati Alberi binari
Strutture dati - 2 - Alberi binari Definizione L albero è un insieme di elementi (nodi), sui quali è definita una relazione di discendenza con due proprietà: esiste un solo nodo radice senza predecessori
Tutorato di Fondamenti di Informatica TUTOR: DAVIDE GHIANI, GIULIA ORRU
Tutorato di Fondamenti di Informatica PROFESSORE: GIAN LUCA MARCIALIS TUTOR: DAVIDE GHIANI, GIULIA ORRU Organizzazione Informazioni di contatto: informatica.marcialis@gmail.com Davide Ghiani Giulia Orrù
Programmazione dinamica
5 Programmazione dinamica 5.1 Stringhe Palindrome Una stringa si dice palindroma se è uguale alla sua trasposta, ossia se è la stessa letta da sinistra a destra, o da destra a sinistra (es: anna, osso,
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
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
Esercizi prolog. Si consiglia di utilizzare inoltre i libri consigliati e gli esercizi contenuti nel zip file fornito dal docente
Esercizi prolog Si consiglia di utilizzare inoltre i libri consigliati e gli esercizi contenuti nel zip file fornito dal docente Esercizio Prolog 1 Definire il predicato Prolog: no_common_elements(-list1,
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Appello del 24 Gennaio 2007 Esercizio 1 (ASD) 1. Sia T (n) = T (n/6) + T (n/3) + Θ(n). Considerare ciascuna delle seguenti affermazioni
Iterazione. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E06. C. Limongelli Dicembre 2011
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E06 C. Limongelli Dicembre 2011 1 Contenuti q Si vogliono formalizzare diverse tecniche per la risoluzione di problemi di: Accumulazione
Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione
Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Ricorsione DD Cap. 5, pp. 160-184 KP Cap. 5, pp. 199-208 Un esempio Problema: prendere in input un intero e calcolarne il fattoriale
Alberi Binari di Ricerca
Alberi Binari di Ricerca Algoritmi su gli alberi binari: visite Dato un puntatore alla radice di un albero vogliamo scandire in modo sistematico tutti i nodi di tale albero In una lista abbiamo una unica
Iterazione. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E07. C. Limongelli Novembre 2007
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E07 Iterazione C. Limongelli Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Iterazione 1 Contenuti Si vogliono formalizzare