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

Documenti analoghi
Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Linguaggio C: introduzione

AA LA RICORSIONE

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

PROGRAMMAZIONE STRUTTURATA

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Funzioni e procedure

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL

Esercitazione 4. Comandi iterativi for, while, do-while

Ricorsione. Corso di Fondamenti di Informatica

Ricorsione. Unità 5. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Corso di Fondamenti di Informatica e Laboratorio ato o T-AB

Programmazione Ricorsione

Introduzione al C. Introduzione. Linguaggio ad alto livello. Struttura di un programma C

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.

Introduzione al Linguaggio C ed all IDE DEV-C++

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Corso di Fondamenti di Informatica

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. La Ricorsione. Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 29 Maggio 2014

La ricorsione. Politecnico di Milano Sede di Cremona

Il generatore di numeri casuali

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Esercizi di programmazione in C

RICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3

Informatica A - Gestionali

Tecniche per risolvere problemi: riduzione a sottoproblemi più semplici. Ricorsione

Linguaggi e Grammatiche Liberi da Contesto

Esercitazione 7. Procedure e Funzioni

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

INFORMATICA 1 L. Mezzalira

Codice Gray. (versione Marzo 2007)

Uso di metodi statici. Walter Didimo

Problem solving avanzato

Un esempio di if annidati

Sommario. Note alla traduzione... xix

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

Specifiche tecniche e di formato Presentazione comunicazione unica per la nascita d impresa

Roadmap. Ricorsione: funzioni ricorsive. Definizione di fattoriale. Definizione dei numeri Fibonacci

COSTRUZIONE DI UN APPLICAZIONE

La gestione dei caratteri in C

Le sue caratteristiche:

Fondamenti VBA. Che cos è VBA

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo

Heap e code di priorità

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Fondamenti di Informatica 2

SOLUZIONE ESERCIZIO 1

PIANO DI LAVORO. a.s / 2016

Funzioni. Corso di Fondamenti di Informatica

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. Il linguaggio C II

Linguaggio C - Funzioni

Programmazione Orientata agli Oggetti

Corso di Esercitazioni di Programmazione

Università di Roma La Sapienza Facoltà di Ingegneria

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp KP Cap. 6 pp

Istruzioni iterative. Istruzioni iterative

FONDAMENTI DI INFORMATICA

Anno 3. Funzioni esponenziali e logaritmi: le 4 operazioni

Esempio : i numeri di Fibonacci

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Input/output in C e in C++

I puntatori e l allocazione dinamica di memoria

Programmazione Orientata agli Oggetti in Linguaggio Java

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi

Individuazione di sottoproblemi

VARIABILI LOCALI E GLOBALI (ESTERNE)

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

Array multidimensionali e stringhe

linguaggio di programmazione e programma

Fondamenti di Programmazione

Programma per la generazione di filastrocche

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2014

Algoritmi e basi del C

AE RZT QSO RKPT SQZC

QUANTITA DI MOTO Corso di Fisica per Farmacia, Facoltà di Farmacia, Università G. D Annunzio, Cosimo Del Gratta 2006

Università degli Studi di Ferrara

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Linguaggi di Programmazione

Espressioni ed Equazioni

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

Esercizio 1: archivio CD e DVD

RICERCA DI UN ELEMENTO

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

FONDAMENTI di INFORMATICA L. Mezzalira

Introduzione al linguaggio C. Le funzioni

float somma_float(float a, float b) int get_ascii(char c)

Ricorsione. Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona.

Ricorsione. (da lucidi di Marco Benedetti)

1. riconoscere la risolubilità di equazioni e disequazioni in casi particolari

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Corso di Fondamenti di Informatica Classi di istruzioni 2

Linguaggio C - Stringhe

Transcript:

I lucidi sono una rielaborazione e integrazione di quelli messi a disposizione dei docenti nel sito relativo al testo: Informatica: arte e mestiere 2/ed Stefano Ceri, Dino Mandrioli, Licia Sbattella Copyright 2004 - The McGraw-Hill Companies, srl Giacomo Piscitelli pag. 1/10

Programmazione ricorsiva In quasi tutti i linguaggi di programmazione moderni è ammessa la possibilità di definire funzioni/procedure ricorsive: durante l esecuzione di una funzione F è possibile chiamare la funzione F stessa. Ciò può avvenire:! direttamente: il corpo di F contiene una chiamata a F stessa.! indirettamente: F contiene una chiamata a G che a sua volta contiene una chiamata a F. Questo può sembrare strano: se pensiamo che una funzione è destinata a risolvere un sottoproblema P, una definizione ricorsiva sembra indicare che per risolvere P dobbiamo... saper risolvere P. In realtà, la programmazione ricorsiva si basa sull osservazione che per molti problemi la soluzione per un caso generico può essere ricavata sulla base della soluzione di un altro caso, generalmente più semplice, dello stesso problema. Giacomo Piscitelli pag. 2/10

Un esempio classico di algoritmo ricorsivo LA RICORSIONE IN C Individuare, in un gruppo di palline, l unica pallina di peso maggiore delle altre facendo uso di una bilancia a basculla (Per semplicità: il numero di palline sia una potenza di 3) Algoritmo Pesate: Se il gruppo di palline consiste in una sola pallina, allora essa è banalmente la pallina cercata, altrimenti procedi come segue:! Dividi il gruppo di palline in tre e confronta due dei tre sottogruppi.! Se i due gruppi risultano di peso uguale scarta entrambi, altrimenti scarta il gruppo non pesato e quello risultato di peso minore.! Applica l algoritmo Pesate al gruppo rimanente. Giacomo Piscitelli pag. 3/10

Principio di induzione ben fondata LA RICORSIONE IN C La programmazione di algoritmi di natura ricorsiva trova radici teoriche nel principio di induzione ben fondata, che può essere visto come una generalizzazione del principio di induzione sui naturali. Sia A(n) una proprietà vera sull insieme N dei numeri naturali e supponiamo che: 1. A(0) è vera 2. Per ogni k N, se è vera A(k) allora è vera A(k+1) Allora A(n) è vera per ogni n N. La soluzione di un problema viene individuata supponendo di saperlo risolvere su casi più semplici. Bisogna poi essere in grado di risolvere direttamente il problema sui casi più semplici di qualunque altro. Funzioni ricorsive sono convenienti per implementare funzioni matematiche definite in modo induttivo. Giacomo Piscitelli pag. 4/10

Esempio: Funzione fattoriale. definizione iterativa: fatt(n) = n (n - 1) (n - 2).. 2 1 " fatt(n) = 1; se n = 0 (caso base) definizione induttiva: " fatt(n) = n fatt(n-1); se n > 0 (caso induttivo) È essenziale il fatto che, applicando ripetutamente il caso induttivo, ci riconduciamo prima o poi al caso base. fatt(3)= 3 fatt(2) = 3 (2 fatt(1)) = 3 (2 (1 fatt(0))) = 3 (2 (1 1)) = 6 Giacomo Piscitelli pag. 5/10

Esempio: Funzione fattoriale. Il codice delle due diverse versioni definizione iterativa: int fatt(int n) int i,ris; ris=1; for (i=1;i<=n;i++) ris=ris*i; return ris; definizione ricorsiva: int fattric(int n) if (n == 0) return 1; else return n * fattric(n-1); Programma che usa una funzione ricorsiva. #include <stdio.h> int fattric (int); main() int x, f; scanf("%d", &x); f = fattric(x); printf("fattoriale di %d: %d\n", x, f); int fattric(int n) int ris; if (n == 0) ris = 1; else ris = n * fattric(n-1); return ris; Giacomo Piscitelli pag. 6/10

Programmazione ricorsiva Evoluzione della pila (supponendo x=3). LA RICORSIONE IN C Giacomo Piscitelli pag. 2/10

La standard library del C Sottoprogrammi di largo uso predefiniti: # Matematica # I/O # Grafica Librerie di sottoprogrammi:! Predefinite! Costruite dai programmatori applicativi Però l uso di librerie diminuisce la portabilità, a meno che anche le librerie (almeno le fondamentali) non siano standardizzate La grande forza del C: la libreria standard Giacomo Piscitelli pag. 3/10

/* Programma Concatenazione di stringhe */ #include <stdio.h> #include <string.h> #define LunghezzaArray 50 main() char PrimaStringa[LunghezzaArray], SecondaStringa[LunghezzaArray], StringaConc[2 * LunghezzaArray]; unsigned LunghezzaConc; scanf( %s, PrimaStringa); scanf( %s, SecondaStringa); if (strcmp(primastringa, SecondaStringa) <= 0) strcpy(stringaconc, PrimaStringa); strcat(stringaconc, SecondaStringa); else strcpy(stringaconc, SecondaStringa); strcat(stringaconc, PrimaStringa); LunghezzaConc = strlen(stringaconc); printf( La stringa ottenuta concatenando le due stringhe lette è %s. Essa è lunga %d caratteri\n, StringaConc, LunghezzaConc); Giacomo Piscitelli pag. 4/10

I file header Le funzioni della libreria sono disponibili in C come file di codice compilato. È compito del programmatore inserire nel programma i prototipi delle funzioni che verranno usate La libreria C comprende alcuni file, chiamati header file, che contengono i prototipi di un insieme di funzioni di libreria. #include <stdio.h> e altre #include <xxx.h> Il preprocessore copia il contenuto del file stdio.h nel programma, inserendo i prototipi delle funzioni che appartengono al gruppo di cui xxx.h è il file testata. Giacomo Piscitelli pag. 5/10