Laboratorio di Programmazione M-Z

Documenti analoghi
Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

La ricorsione. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

La ricorsione. Ver Claudio Fornaro - Corso di programmazione in C

Laboratorio di Python

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

RICORSIONE. Informatica B - A.A. 2013/2014

Corso di Fondamenti di Informatica. La ricorsione

Capitolo 19. Ricorsione

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

L organizzazione dei programmi

LA RICORSIONE IN C. CdL Ingegneria Informatica n.o. Anno Accademico 2006/07 Fondamenti di Informatica I corso A Giacomo Piscitelli pag.

Esercitazione 5. Corso di Fondamenti di Informatica. Laurea in Ingegneria Informatica

FUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi:

La principale modalità di calcolo è l applicazione di funzioni

Laboratorio di Informatica

Un tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente:

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

Fondamenti di Informatica T. Linguaggio C: Stack e Ricorsione

Parte 2. Ricorsione. [M.C.Escher Drawing hands, 1948] - AA. 2012/13 2.1

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Le Funzioni e la Ricorsione

PROGRAMMAZIONE STRUTTURATA

Tecniche Algoritmiche: divide et impera

ALGORITMI E STRUTTURE DATI

Il linguaggio C. Funzioni

Analisi algoritmi ricorsivi e relazioni di ricorrenza

Lezione 8 programmazione in Java. Anteprima. La ricorsione. Nicola Drago Dipartimento di Informatica Università di Verona

Corso di Perfezionamento

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Algoritmi e Strutture Dati

Algoritmi e strutture di dati 2

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

Programmazione di base

Lezione 8 Struct e qsort

Programmazione dinamica

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Le funzioni in JavaScript. Modularizzazione

RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Note per la Lezione 6 Ugo Vaccaro

Esercizi di Algoritmi e Strutture Dati

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

A lezione sono stati presentati i seguenti passi per risolvere un problema:

Programmazione I - Laboratorio

03.x1. esercizi Sui cicli. 03-X1_Esercizi_[02] Versione del: giovedì 14 novembre Andrea Zoccheddu CORSO INFORMATICA ITI ANGIOY SASSARI

5 - Istruzioni condizionali

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

Stringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche

Albero di Riscorsione

Programmazione di base

Inserimento in una lista ordinata

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice

Dall analisi alla codifica (1)

INFORMATICA. Strutture iterative

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Funzioni e Ricorsione

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Programmazione a moduli in C

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Come usare la ricorsione

Ricorsione. La ricorsione consiste nella possibilità di definire una funzione in termini di se stessa

Fondamenti di Informatica T-1 Modulo 2

Esercizi sugli Algoritmi numerici

1 PANORAMICA SUL LINGUAGGIO C

Esercitazione 11. Liste semplici

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

Divide et impera su alberi

Laboratorio di Python

Elementi di C++ di base

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 13/09/2013/ Foglio delle domande/versione 1

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

PROGETTAZIONE TOP-DOWN E BOTTOM-UP

Laboratorio di Calcolo Numerico

Corso di Programmazione Problem Solving. Tipi di Problemi. Problemi Complessi Soluzione. Dott. Pasquale Lops. Primitivi. Complessi

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Matrici. Matrici.h Definizione dei tipi. Un po di esercizi sulle matrici Semplici. Media difficoltà. Difficili

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

5. DIVIDE AND CONQUER I

Laboratorio di Matematica e Informatica 1

Programmazione I - Laboratorio

Laboratorio di programmazione

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Linguaggio C: Espressioni

Fondamenti di Informatica T-1 Modulo 2

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

L ELABORATORE ELETTRONICO!

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Fondamenti di Informatica T-1 Modulo 2

Definizione di metodi in Java

Strutturare il codice: sottoprogrammi

Laboratorio di programmazione

Ricorsione. quindi si può definire n! mediante i seguenti due punti:

Transcript:

Diretta Laboratorio di Programmazione M-Z Docente: Dott.ssa Alessandra Lumini alessandra.lumini@unibo.it Università di Bologna, Sede di Cesena

Divide et impera Dividere un problema in sottoproblemi più semplici da risolvere. La soluzione del problema principale viene ricavata combinando le soluzioni dei sottoproblemi risolti. Approccio top down. Molto studiata (informatica teorica, teoria della calcolabilità) ed utilizzata (algoritmi di ordinamento, parsing, calcolo numerico). Schematicamente: 1. Divide: il problema viene suddiviso in parti più piccole. 2. Impera: i sottoproblemi vengono risolti. 3. Combina: i risultati vengono ricombinati. Diretta

Definizione Una funzione è detta ricorsiva se chiama se stessa. Una funzione ricorsiva risolve direttamente solo i casi particolari di un problema, detti casi base. Quando una funzione ricorsiva chiama se stessa, sospende l esecuzione ed esegue la nuova chiamata. L esecuzione della funzione chiamante riprende una volta che la funzione chiamata è terminata. La sequenza di più chiamate ricorsive termina quando la più interna (annidata) incontra uno dei casi base. Schematicamente: Diretta 1. Se la funzione incontra un caso base: restituisce un risultato 2. Altrimenti: viene richiamata su dati semplificati (passo ricorsivo)

Diretta Divisione Divisione a/b eseguita per sottrazioni successive: 0, se a = 0 div(a, b) = 1, se b = 0 1 + div(a b, b) altrimenti (1) Diretta int idiv ( int num, int den ){ if(num == 0) // Caso base 1 ( impera ) return 0; if(den == 0) // Caso base 2 ( impera ) return -1; return 1+iDiv (num -den, den ); // passo ricorsivo ( divide ) Cosa succede se a non è divisibile per b?

Diretta Serie n i=1 i sum(n) = { 1, se n = 1 n + sum(n 1) altrimenti (2) Diretta n i=1 i 2 sum2(n) = { 1, se n = 1 n 2 + sum2(n 1) altrimenti (3) n i=1 a (i/a) { a (1/a), se n = 1 serie(a, n) = a (n/a) + serie(a, n 1) altrimenti (4)

Ricorsion Mutua Si parla di ricorsione indiretta quando nella definizione di un metodo compare la chiamata ad un altro metodo il quale direttamente o indirettamente chiama il metodo iniziale. Scrivere la funzione ricorsiva che stampa k 0 seguiti da k 1. Diretta void print1 ( int k); void print0 ( int k) { if (k >0) { printf ("0"); print1 (k); void print1 ( int k) { if (k >1) { print0 (k -1) ; printf ("1"); Posso farlo anche con una funzione ricorsiva diretta? Modificare la funzione in maniera tale che la sequenza di 0 e 1 sia separata dal -.

Sequenza caratteri di input Diretta Prendere in input una sequenza di caratteri fino a un terminatore (CR=10) e stamparla in verticale void verticalstring () { char c; c = getchar (); if (c!= 10) { printf ("%c\n", c); verticalstring (); Invertire la stringa re anche la cardinalità della sequenza

Diretta 1. Scrivere una funzione ricorsiva che restituisca la somma di tutti gli interi in un range n 1, n 2. 2. Si scrivano 2 programmi, uno iterativo e uno ricorsivo, che invertano le cifre di un numero intero n. 3. Scrivere una funzione che calcola sin(x) utilizzando lo sviluppo di Taylor fino al termine n-esimo. sin(x) n ( 1) k x 2k+1 (2k + 1)! k=0

4. I coefficienti binomiali. ( n k) forniscono il numero delle combinazioni semplici di n elementi di classe k. Il matematico Pascal scoprì disponendoli su un triangolo ogni numero al suo interno è pari alla somma dei due posti ( sopra di esso. n ( k) = n 1 ) ( k 1 + n 1 ) k per 0 < k < n ) = 1 per k = 0, k = n ( n k Diretta 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 Scrivere la funzione ricorsiva binomiale e richiamarla per stampare il tringolo di Pascal (Tartaglia)