Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013
|
|
|
- Mattia Biagi
- 8 anni fa
- Visualizzazioni
Transcript
1 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013
2 Sommario La ricorsione Metodi ricorsivi Esercizi proposti 16/01/2013 2
3 La ricorsione In Java ogni metodo può chiamare anche se stesso, secondo una tecnica detta ricorsione. Ovviamente tali metodi devono sempre contenere un istruzione di controllo che ha il compito di interrompere la successione delle chiamate, se si verificano certe condizioni. 3
4 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
5 Confronto fra definizione iterativa e ricorsiva Funzione non ricorsiva n!= 1*2*3*...*(n-1)*n fatt(n)= 1*2*3*...*(n-1)*n; Funzione ricorsiva 0!=1 n!= n*(n-1)!; fatt(n)=n*fatt(n-1) 5
6 Il calcolo del fattoriale Vediamo di chiarirne il significato 0! = 1 1! = 1(1-1)! = 1 0! = 1 1 = 1 2! = 2(2-1)! = 2 1! = 2 1 = 2 3! = 3(3-1)! = 3 2! = = 6 4! = 4(4-1)! = 4 3! = = 24 5! = 5(5-1)! = 5 4! = = 120 Quindi, per ogni n intero positivo, il fattoriale di n è il prodotto dei primi n numeri interi positivi
7 Il calcolo del fattoriale Per implementare la funzione per il calcolo del fattoriale con un metodo statico iterativo siamo costretti a fare un analisi della definizione per scrivere l algoritmo 7
8 Il calcolo del fattoriale Per implementare la funzione per il calcolo del fattoriale con un metodo statico iterativo siamo costretti a fare un analisi della definizione per scrivere l algoritmo: public static float fattoriale (int n) { float F=1; int i=1; do { F=F*i; i=i+1; } while (i<=n); return F; 8
9 Il calcolo del fattoriale Implementando direttamente la definizione ricorsiva, è naturale scrivere: { public static float fattoriale (int n) } float f; if (n == 0) f = 1; else f = n * fattoriale(n - 1); return f;
10 Il calcolo del fattoriale Implementando direttamente la definizione ricorsiva, è naturale scrivere: { public static float fattoriale (int n) float f; if (n == 0) f = 1; else f = n * fattoriale(n - 1); return f; } Questa soluzione si basa sulla invocazione di un metodo mentre si esegue il metodo stesso! Questa possibilità è permessa in tutti i linguaggi di programmazione che ammettono la ricorsione
11 Il calcolo del fattoriale La funzione ricorsiva fattoriale non necessita di iterazioni, ma include internamente il calcolo del risultato, infatti restituisce 1 se il parametro ricevuto uguale a 0 mentre in caso contrario il valore restituito è il prodotto di n per il fattoriale (n-1), pertanto fattoriale calcola il valore da restituire chiamando se stessa e "passandosi" come parametro il parametro appena ricevuto, diminuito di uno. { public static float fattoriale (int n) float f; if (n == 0) f = 1; else f = n * fattoriale(n - 1); return f; } Questa soluzione si basa sul fatto invocare un metodo mentre si esegue il metodo stesso! Questa possibilità è lecito in tutti i linguaggi di programmazione che ammettono la ricorsione
12 La ricorsione Per capire come utilizzare correttamente la ricorsione, vediamo innanzitutto come funziona. Quando un metodo ricorsivo invoca se stesso, la macchina virtuale Java esegue le stesse azioni che vengono eseguite quando viene invocato un metodo qualsiasi sospende l esecuzione del metodo invocante (le variabili locali rimangono congelate) esegue il metodo invocato fino alla sua terminazione (con nuove variabili locali e passando i parametri per valore) riprende l esecuzione del metodo invocante dal punto in cui era stata sospesa (recuperando le variabili locali)
13 La ricorsione Vediamo la sequenza delle istruzioni per calcolare 3! si invoca f(3) f(3) lascia in sospeso il calcolo 3* f(2) e invoca f(2) f(2) lascia in sospeso il calcolo 2* f(1) invoca f(1) f(1) lascia in sospeso il calcolo 1* f(0) e invoca f(0) f(0) restituisce 1 a f(1) f(1) calcola1*1 e restituisce 1 a f(2) f(2) calcola 2*1 e restituisce 2 a f(3) f(3) calcola 3*2 e restituisce 6 al chiamante Si crea quindi una pila ( stack) di metodi in attesa, ciascuno con le sue variabili locali, che si allunga e che poi si accorcia fino ad esaurirsi
14 La ricorsione Invocare un metodo mentre si esegue lo stesso metodo è un paradigma di programmazione che si chiama ricorsione e un metodo che ne faccia uso si chiama metodo ricorsivo La ricorsione è uno strumento molto potente per realizzare alcuni algoritmi (ma è anche fonte di errori di difficile diagnosi) Esistono infatti due regole ben definite (passo base e passo ricorsivo) che vanno utilizzate per scrivere metodi ricorsivi che funzionino
15 Prima regola La ricorsione: passo base il metodo ricorsivo deve fornire la soluzione del problema in almeno un caso particolare, senza ricorrere ad una chiamata ricorsiva tale caso si chiama caso base della ricorsione nel nostro esempio, il caso base era if (n == 0) return 1; a volte ci sono più casi base, non è necessario che il caso base sia unico
16 Seconda regola La ricorsione: passo ricorsivo il metodo ricorsivo deve effettuare la chiamata ricorsiva dopo aver semplificato il problema nel nostro esempio, per il calcolo del fattoriale di n si invoca la funzione ricorsivamente per conoscere il fattoriale di n-1, cioè per risolvere un problema più semplice f = n * fattoriale(n - 1); il concetto di problema più semplice varia di volta in volta: in generale, bisogna avvicinarsi ad un caso base
17 Ricorsione infinita Si noti quindi che non tutti i metodi ricorsivi realizzano algoritmi! se manca il caso base, il metodo ricorsivo continua ad invocare se stesso all infinito se il problema non viene semplificato ad ogni invocazione ricorsiva, il metodo ricorsivo continua ad invocare se stesso all infinito Dato che la lista dei metodi in attesa si allunga indefinitamente, l ambiente runtime esaurisce la memoria disponibile per tenere traccia di questa lista, e il programma termina con un errore
18 Le regole appena viste Ricorsione infinita implicano che ad ogni invocazione il problema diventi più semplice avvicinandosi sempre più al caso base che non richiede ricorsione ovvero che per quanto complesso possa essere il problema la soluzione sia calcolata in un numero finito di passi
19 Esercizio
20 Vediamo la codifica di tale funzione in modo iterativo /* algoritmo iterativo */ public static long iterfibonacci(int n){ if(n<=1) return n; long x=0; long y=1; long tmp; for(int i=2; i<=n; i++){ tmp = x; x = y; y = tmp+x; // dopo l'i-esima iterazione: x=f(i-1), y=f(i) } return y; }} Vediamo come si semplifica la soluzione ricorsiva
21 public static float fibo (int n) { } float fib; if (n == 0) { fib = 0; } else if (n == 1) { fib = 1; } else { fib = fibo(n-1)+ fibo(n-2); } return fib;
22 public static float fib (int n) { { if (n < 2) { return n; } else { return fib(n-1)+fib(n-2); } } }
23 .osservazioni La semplicità del codice ha un costo che studieremo quando parleremo di complessità per il momento basta osservare che ad ogni chiamata vengono genereate 2 variabili quindi si occupa più memoria.
24 Esercizi Scrivere un metodo statico ricorsivo per il calcolo della funzione esponenziale definita come segue: 16/01/
25 Esercizi Scrivere un metodo statico ricorsivo per il calcolo della funzione esponenziale definita come segue: 16/01/
26 Esercizi Scrivere un metodo statico che, dati un array di interi a ed un intero n, restituisce il numero delle occorrenze di n in a 16/01/
27 Esercizi Scrivere un metodo statico che, dati un array di interi a ed un intero n, restituisce la posizione della prima occorrenza di n in a, e -1 se n non compare in a. 16/01/
28 Esercizi Scrivere un metodo statico che, dati un array di interi a ed un intero n, restituisce true se n compare in a, false altrimenti. 16/01/
29 Esercizi Scrivere un metodo statico che, dati un array bidimensionale di interi a ed un intero n, restituisce true se n compare in a, false altrimenti. 16/01/
30 Esercizi Scrivere un metodo statico che dato un array di interi restituisca true se tutti i suoi elementi sono identici, e false altrimenti. 16/01/
31 Esercizi Scrivere un metodo che, dati un array bidimensionale di interi a e due interi k ed n, restituisce true se in ogni riga a[i] di a esistono almeno k elementi maggiori di n, altrimenti il metodo restituisce false. 16/01/
32 Cosa abbiamo imparato? Come funziona la ricorsione: il processo secondo il quale un metodo può anche richiamare se stesso; Che cos è un metodo ricorsivo: ossia un metodo che fa uso della ricorsione; Che cos è la ricorsione infinita. 16/01/
33 Questionario 1)Quali dei seguenti programmi è errato per calcolare il fattoriale di un numero in Java? class Fattoriale { static float fatt(int x) { int i; float f=1; do{ f=f*i; i= i+1; } while(i<=x); return f; }; class Fattoriale { static int fatt(int x) { int i; int f=1; for(i=1; i<=x; i=i+1) { f=f*i; } return f; }; 16/01/
34 public class Fattoriale { public static void main(string[] args) { int n, i; long fatt; if (args.length > 0) { n = Integer.parseInt(args[0]);} else { n = MyUtility.readInt("Inserisci N: ");} fatt = 1; for (i = 1; i <= n; i++) { fatt *= i;} System.out.println(n+"! = "+fatt);} }; class Fattoriale { static float fatt(float x) { int i; int f=1; for(i=1; i<=x; i=i+1) { f=f*i;} return f; }; 16/01/
35 2)A cosa serve la ricorsione? Ad invocare un metodo di un altra classe; Ad eseguire un metodo uno dopo l altro; Ad invocare un metodo dopo che il metodo stesso è stato eseguito; Ad invocare un metodo mentre si esegue lo stesso metodo. 3)Quali delle seguenti non è un azione che esegue la JVM quando viene invocato un metodo ricorsivo? Sospendere l esecuzione del metodo invocante; Eseguire il metodo invocato fino alla sua terminazione recuperando le variabili locali; Riprendere l esecuzione del metodo chiamante dal punto in cui era stato sospeso; Eseguire il metodo invocato fino alla sua terminazione. 4) Nei programmi scritti nella domanda 1 è presente almeno un passo ricorsivo? Si in tutti i 4 programmi; No in nessuno dei 4 programmi; Solo nel secondo programma; Solo nel terzo programma. 5) Nei programmi scritti nella domanda 1 è presente almeno un caso base? Si in tutti i 4 programmi; No in nessuno dei 4 programmi; Solo nel secondo programma; Solo nel terzo programma. 16/01/
36 6)Quali sono le regole che bisogna seguire per scrivere un metodo ricorsivo? Il metodo deve fornire la soluzione del problema in almeno un caso particolare, e deve effettuare la chiamata ricorsiva dopo aver semplificato il problema; Il metodo deve fornire la soluzione del problema in almeno un caso particolare, ricorrendo ad una chiamata ricorsiva e deve effettuare di nuovo la chiamata dopo aver semplificato il problema; Il metodo deve fornire la soluzione del problema in più di un caso particolare, e deve effettuare la chiamata ricorsiva dopo aver semplificato il problema; Il metodo deve semplificare il problema e deve poi effettuare la chiamata ricorsiva. 7)Quale delle seguenti affermazioni sulla ricorsione è esatta? Ad ogni invocazione del metodo il problema diventa sempre più complesso; Anche la soluzione del caso base richiede l uso della ricorsione; Bisogna effettuare la chiamata ricorsiva dopo aver semplificato il problema; Il passo ricorsivo non può essere messo all interno di un espressione. 8)In quale caso non si ha ricorsione infinita? Se il problema viene semplificato ad ogni invocazione ricorsiva; Se manca il caso base; Se il problema non viene semplificato ad ogni invocazione ricorsiva; Se il problema viene semplificato solo alla prima invocazione ricorsiva. 16/01/
37 9)Quale delle seguenti è un esempio di funzione ricorsiva? n!=1*2*3* *(n-1)*n; fatt(n)=n*fatt(n-1); fatt(n)= 1*2*3*...*(n-1)*n; 3!=6. 10)Quali dei seguenti programmi non è corretto per calcolare la sequenza di Fibonacci in maniera ricorsiva? class Fibonacci { public static long fibo(long n) { if(n<=1) return n; else return fibo(n-1)+ fibo(n-2); } }; class Fibonacci { public static long fibo(long n) { if(n<=1) return n; else return fibo(n-1)+ fibo(n-2);} public static void main(string args[]) { long n = Integer.parseInt(args[0]); System.out.println("fib(" + n + ")=" + fibo(n));} }; 16/01/
38 class Fibonacci { public static long fibo(long n) { long fibn_1 = 0, fibn_2 = 1, fibn=1; if(n<=1) return n; else { for(int i=2; i<=n; i++) { fibn=fibn_1+fibn_2; fibn_1=fibn_2; fibn_2=fibn; } return fibn; } } }; class Fibonacci { public static long fibo(int n) { if(n<=1) return n; else return fibo(n-1)+ fibo(n-2);} }. 11)Nei programmi della domanda 10 è presente almeno un caso base? Si in tutti i 4 programmi; No in nessuno dei 4 programmi; Si nel secondo e nel terzo programma; Si nel primo e nell ultimo; Si in tutti tranne nel terzo; Si in tutti ad eccezione del primo. 16/01/
39 12)Nel terzo programma della domanda 10 qual è il caso base? return n; return fibn; if(n<=1) return n; for(int i=2; i<=n; i++) { fibn=fibn_1+fibn_2; fibn_1=fibn_2; fibn_2=fibn; } return fibn. 13) Nei programmi della domanda 10 è presente un passo ricorsivo? Si in tutti i 4 programmi; No in nessuno dei 4 programmi; Si nel secondo e nel terzo programma; Si nel primo e nell ultimo; Si in tutti tranne nel terzo; Si in tutti ad eccezione del primo. 14) Qual è il passo ricorsivo presente nel secondo programma della domanda 10? return fibo(n-1)+ fibo(n-2); fibo(n-1)+ fibo(n-2); long n = Integer.parseInt(args[0]); System.out.println("fib(" + n + ")=" + fibo(n));; if(n<=1) return n; else return fibo(n-1)+ fibo(n-2);. 16/01/
40 15) Quali delle seguenti opzioni è corretta per dichiarare un metodo media() che dispone di un tipo restituito double e due parametri interi x e y? double media(x, y) { ; double media( int x, int y) { ; double Media( int x, int y) { ; public double Media(x, y) { ; 16) Per lo studio di quali funzioni può essere utilizzato il metodo della ricorsione? Per il calcolo del fattoriale; Per il calcolo del fattoriale e per la sequenza di Fibonacci; Per il calcolo delle funzioni goniometriche; Per il calcolo del fattoriale, per la sequenza di Fibonacci e per le funzioni goniometriche. 16/01/
41 Esercizio Scrivere una programma Java che realizza il gioco indovina che numero ho pensato, descritto come segue: inizialmente, il programma genera un numero casuale intero compreso tra 1 e 100 e lo sceglie, e poi chiede all utente di indovinare il numero scelto dopo ciascun tentativo di risposta dell utente, l applicazione deve segnalare se la risposta data è giusta, oppure il numero è maggiore oppure il numero è minore rispetto al numero scelto il programma deve continuare a chiedere numeri all utente fino a che questi non abbia dato la risposta corretta, oppure abbia scelto di rinunciare ad indovinare (digitando il numero 0) se l utente indovina il numero scelto, il programma deve congratularsi con l utente, visualizzando anche il numero di tentativi fatti dall utente 16/01/
42 Ad esempio, se il numero scelto dal programma fosse 21, l interazione tra applicazione e utente potrebbe essere la seguente Ho pensato un numero intero compreso tra 1 e 100. Indovina che numero ho pensato: è troppo alto. Indovina che numero ho pensato: è troppo alto. Indovina che numero ho pensato: è troppo basso. Indovina che numero ho pensato: è troppo alto. Indovina che numero ho pensato: 21 Bravo! Hai indovinato facendo 5 tentativi! 16/01/
Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012
Fondamenti di Informatica - 1 Prof. B.Buttarazzi A.A. 2011/2012 Sommario Operatore? Tipo di dato: struct La ricorsione Funzioni ricorsive Esercizi proposti 26/04/2012 2 Operatore? L'operatore? può essere
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
La ricorsione. Ver Claudio Fornaro - Corso di programmazione in C
La ricorsione Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C 2 Divide et impera Metodo di approccio ai problemi che consiste nel dividere il problema dato in problemi più semplici I risultati
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
Corso: Fondamenti di Informatica (Gruppo 2) a.a Corsi di laurea: Ing. Settore Informazione
Corso: Fondamenti di Informatica (Gruppo 2) a.a. 2017-18 Corsi di laurea: Ing. Settore Informazione Questionario a Risposte Multiple per auto-valutazione del Lab05 Domanda n. 1 Argomento: Iterazioni, array
Definizione di metodi in Java
Definizione di metodi in Java Un metodo in Java definisce un operazione ad alto livello (sottoprogramma) che consente di manipolare dati e oggetti. Durante la computazione effettuata da un programma, un
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni
Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore
Metodi statici. Dichiarazione e chiamata di metodi statici
Metodi statici Dichiarazione e chiamata di metodi statici Cos è un metodo Un metodo è un blocco di istruzioni che fornisce una funzionalità e viene identificato con un nome Può avere dei parametri ed un
Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);
Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di
Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche
Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono
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
Roadmap. Ricorsione: funzioni ricorsive. Definizione di fattoriale. Definizione dei numeri Fibonacci
Modulo di Roadmap 0. Primi passi con Java 1. Buone abitudini 2. Tipi di dati primitivi 3. Uso di classi 4. Leggere e scrivere 5. Definire metodi 7. Array e Collection 8. Progetto di classi 9. Ereditarietà
Funzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso
Costrutti iterativi. Utilizzo dei costrutti iterativi
Costrutti iterativi Utilizzo dei costrutti iterativi Costrutti iterativi (1/3) I costrutti iterativi permettono di eseguire ripetutamente del codice Il linguaggio Java mette a disposizione tre costrutti
ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }
ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA. INFORMATICA B Ingegneria Elettrica. La ricorsione
INFORMATICA B Ingegneria Elettrica La ricorsione Ricorsione Che cos è la ricorsione? Un sottoprogramma P richiama se stesso (ricorsione diretta) Un sottoprogramma P richiama un altro sottoprogramma Q che
Laboratorio di Informatica
Laboratorio di Informatica Seconda lezione a Python Dottore Paolo Parisen Toldin - [email protected] Dottoressa Sara Zuppiroli - [email protected] L'importanza di capire Perché non dobbiamo dichiarare
Corso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni
Programmazione 1 A.A. 2015/2016
Cognome e Nome Matricola Programmazione 1 A.A. 2015/2016 Appello del 16 Dicembre 2015 Compito n 1 Prima parte Esercizio 1 (10 punti) Cosa stampa il seguente frammento di codice Java? int[] A = {3, 8, 91,
Fondamenti di Informatica 6. Algoritmi e pseudocodifica
Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
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
Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A
Matematica 13/11/2007 Teoria Compito A Domanda 1 Descrivere, eventualmente utilizzando uno schema, gli elementi funzionali di una CPU. Domanda 2 Java è un linguaggio compilato o interpretato? Motivare
Studio delle successioni con il software
Studio delle successioni con il software Abbiamo visto due possibili definizioni per alcune successioni: diretta e per ricorrenza (o ricorsiva). Ricordiamo che la successione delle somme dei primi n numeri
LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve
LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione
Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli
Rappresentazione degli algoritmi
Rappresentazione degli algoritmi Universitá di Ferrara Ultima Modifica: 21 ottobre 2014 1 1 Diagramma di flusso Utilizzare il diagramma di flusso per rappresentare gli algoritmi che risolvono i seguenti
INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan
INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan venus.unive.it/borg [email protected] Ricevimento lunedì, prima o dopo lezione 1 Le funzioni in C Le funzioni vengono utilizzate per 3 motivi: Riusabilità
Un tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente:
Pag 29 4) La ricorsione 4.1 Funzioni matematiche ricorsive Partiamo da un concetto ben noto, quello delle funzioni matematiche ricorsive. Una funzione matematica è detta ricorsiva quando la sua definizione
Fondamenti di Informatica T. Linguaggio C: Stack e Ricorsione
Linguaggio C: Stack e Ricorsione FUNZIONI: IL MODELLO A RUN-TIME Ogni volta che viene invocata una funzione: si crea di una nuova attivazione (istanza) del servitore viene allocata la memoria per i parametri
Esempio : i numeri di Fibonacci
Esempio : i numeri di Fibonacci La successione di Fibonacci F 1, F 2,... F n,... è definita come: F 1 =1 F 2 =1 F n =F n 1 F n 2,n 2 Leonardo Fibonacci (Pisa, 1170 Pisa, 1250) http://it.wikipedia.org/wiki/leonardo_fibonacci
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E03 Esempi di algoritmi e programmi A. Miola Settembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Esempi di algoritmi e
Laboratorio di Programmazione 1 [Java]
Laboratorio di Programmazione 1 [Java] Prova di esame - 26 Gennaio 2011 Tempo massimo: 50 minuti Si implementino in Java le classi Tavolo e Pizzeria. La classe Tavolo ha i seguenti attributi: nome (una
3 Costrutti while, for e switch
Questa dispensa propone esercizi sulla scrittura di algoritmi, in linguaggio C, utili alla comprensione dei costrutti while, for e switch. I costrutti per costruire cicli in C sono il while, la variante
Algoritmi di Ricerca. Esempi di programmi Java
Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare
Programmazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
Definizione di classi. Walter Didimo
Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti
Ricorsione. Emilio Di Giacomo e Walter Didimo
Ricorsione Emilio Di Giacomo e Walter Didimo Ricorsione La ricorsione è una tecnica di progettazione del software che si basa sull uso di metodi/funzioni ricorsivi/e Un metodo/funzione ricorsivo/a è un
Algoritmi di Ricerca. Esempi di programmi Java
Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare
PROGRAMMAZIONE STRUTTURATA
PROGRAMMAZIONE STRUTTURATA Programmazione strutturata 2 La programmazione strutturata nasce come proposta per regolamentare e standardizzare le metodologie di programmazione (Dijkstra, 1965) Obiettivo:
Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo
Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy
Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013
Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013 Damiano Macedonio Giochi d Azzardo Note Iniziali Per generare un numero casuale basta includere la libreria stdlib.h e utilizzare
IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input
Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1
Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1 1) Il bus in un computer trasporta a) solo dati b) solo istruzioni c) sia dati sia istruzioni 2) In una sequenza
Introduzione al C. Esercitazione 6. Raffaele Nicolussi. Corso di Fondamenti di Informatica Ingegneria Clinica
Corso di Fondamenti di Informatica Ingegneria Clinica Esercitazione 6 Raffaele Nicolussi Esercizio 1 Si scriva una funzione in linguaggio C che riceve in ingresso un numero intero A letto da tastiera,
Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array
Classi e array Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array Si vuole definire una classe Polinomio per la rappresentazione di polinomi a
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
Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
Le Funzioni e la Ricorsione
Aula V Dip. di Matematica G. Castelnuovo Univ. di Roma La Sapienza Le Funzioni e la Ricorsione Igor Melatti Slides disponibili (assieme ad altro materiale) in: http://www.dsi.uniroma1.it/ melatti/programmazione1.2007.2008.html
Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]
Fondamenti di Informatica T-1 Modulo 2
Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa esercitazione 1. Array e funzioni 2. Array e funzioni ricorsive 3. Array e confronto di array 2 Esercizio 1 Creare un programma che legga da
Compito di Programmazione, 22 marzo 2007 INFORMATICI E MULTIMEDIALI
Compito di Programmazione, 22 marzo 2007 INFORMATICI E MULTIMEDIALI Esercizio 1 Si consideri la seguente classe che specifica liste di interi: public class List { private int head; private List tail; public
Le basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.
Ricorsione Funzioni ricorsive Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente. Un esempio di funzione ricorsiva
Lezione 6 programmazione in Java
Lezione 6 programmazione in Java Nicola Drago [email protected] Dipartimento di Informatica Università di Verona Anteprima Le costanti I vettori Cos è un vettore Come si usa I vari tipi di vettori Esempi
Le strutture di controllo in C++
Le strutture di controllo in C++ Docente: Ing. Edoardo Fusella Dipartimento di Ingegneria Elettrica e Tecnologie dell Informazione Via Claudio 21, 4 piano laboratorio SECLAB Università degli Studi di Napoli
Programmazione Java Struttura di una classe, Costruttore, Riferimento this
Programmazione Java Struttura di una classe, Costruttore, Riferimento this [email protected] http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento
UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi
UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA Matlab: esempi ed esercizi Sommario e obiettivi Sommario Esempi di implementazioni Matlab di semplici algoritmi Analisi di codici Matlab Obiettivi
STRUTTURE DI CONTROLLO DEL C++
STRUTTURE DI CONTROLLO DEL C++ Le istruzioni if e else Le istruzioni condizionali ci consentono di far eseguire in modo selettivo una singola riga di codice o una serie di righe di codice (che viene detto
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
Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Esercizi sui metodi. Carla Limongelli. Maggio Esercizi 1
Corso di Laurea Ingegneria Civile Fondamenti di Informatica Esercizi sui metodi Carla Limongelli Maggio 2010 Esercizi 1 Passaggio di parametri di tipo primitivo Indicare che cosa viene visualizzato sullo
Esempi di Problemi Iterativi
Corso di Laurea Ingegneria Civile Elementi di Informatica Esempi di Problemi Iterativi C. Limongelli Esempi di Problemi Iterativi 1 Contenuti Esercizi: Palindroma Anagramma Fibonacci Esempi di Problemi
Programmazione in Java (I modulo)
Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto
21 - Alberi e Ricorsione
21 - Alberi e Ricorsione Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
Laboratorio di Programmazione M-Z
Diretta Laboratorio di Programmazione M-Z Docente: Dott.ssa Alessandra Lumini [email protected] Università di Bologna, Sede di Cesena Divide et impera Dividere un problema in sottoproblemi più
9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea
