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

Dimensione: px
Iniziare la visualizzazioe della pagina:

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

Transcript

1 Ricorsione Due definizioni del fattoriale Prima definizione: n! = (n-1) n Per la seconda definizione notiamo che n = (n-1)! n (n-1)! quindi si può definire n! mediante i seguenti due punti: n! = 1 se n? 1 n! = n (n-1)! se n > 1 (definizione mediante equazioni di ricorrenza)

2 la prima definizione non è molto rigorosa (cosa vuol dire....?) La seconda invece è matematicamente ineccepibile. Anzi può essere usata come metodo meccanico per il calcolo del fattoriale. Per esempio: 4! = 4 3! (3 >1) = 4 3 2! (2 >1) = ! = = 24 Nota: in notazione più informatica si può scrivere: fact(n) = 1 se n? 1 fact(n) = n fact(n-1) se n > 1

3 Versione JAVA public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n)); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1);

4 Simulazione (sia dato 4 in input) public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ;

5 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; fact

6 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; fact

7 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; fact(2) fact(1) n: 3

8 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; fact(2) fact(1) n: 3

9

10 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; fact(3) fact(2) fact(1) n: 2 n: 3

11 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; (ritorna 1) fact(4) fact(3) fact(2) fact(1) n: 1 n: 2 n: 3

12 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; 1 (ritorna 2) fact(3) fact(2) fact(1) n: 2 n: 3

13 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; 2 (ritorna 6) fact(2) fact(1) n: 3

14 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; 6 (ritorna 24) fact(1)

15 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); 24 public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ;

16 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; il programma termina stampando 24.

17 Riassumendo in un metodo ricorsivo ci devono sempre essere queste due componemti: un caso semplice (per esempio il caso n<=1), che non richiede la chiamata ricorsiva del metodo stesso. un caso ricorsivo in cui il metodo viene richiamato, su paramtri che siano, in qualche modo, più semplici. Più semplici vuole soltanto dire che porteranno, prima o poi, al caso elementare.

18 Esempio: stampa di un numero in binario Idea del procedimento: prendiamo (rapp. binaria di 11) Fatti generali: 5 in bin l ultima cifra di n in binario è 0 se n è pari 1 se n è dispari. le cifre precedenti sono la rappresentazione in binario di n/2 (divisione intera)

19 tradotto in ragionamento ricorsivo questo diventa: Per stampare n in binario: se n<2 stampa n. altrimenti stampa n/2 (intero) in binario e poi stampa n%2 (cioè 0 se n è pari, 1 se n è dispari).

20 public class WriteBinary { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); Output: public static void printbinary(int n) {if (n<2) {System.out.print(n); return; printbinary(n/2) ; System.out.print(n%2); return; n: 5

21 public class WriteBinary Output: { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); public static void printbinary(int n) {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5

22 public class WriteBinary { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); Output: public static void printbinary(int n) {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5 nota: 5/2=2

23 public class WriteBinary Output: { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); public static void printbinary(int n) printbinary(2) n: 2 {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5

24 public class WriteBinary { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); Output: public static void printbinary(int n) printbinary(2) n: 2 {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5 nota:2/2 = 1

25 public class WriteBinary { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); Output: printbinary(3) n: 1 public static void printbinary(int n) printbinary(2) n: 2 {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5

26 public class WriteBinary { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); Output: 1 printbinary(3) n: 1 public static void printbinary(int n) printbinary(2) n: 2 {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5

27 public class WriteBinary Output: 1 { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); public static void printbinary(int n) printbinary(2) n: 2 {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5

28 public class WriteBinary Output: 10 { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); public static void printbinary(int n) printbinary(2) n: 2 {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5

29 public class WriteBinary Output: 10 { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); public static void printbinary(int n) {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5

30 public class WriteBinary Output: 101 { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); public static void printbinary(int n) {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5

31 public class WriteBinary { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); Output: 101 public static void printbinary(int n) {if (n<2) {System.out.print(n); return; printbinary(n/2) ; System.out.print(n%2); return; Il programma termina. l output è 101. n: 5

32 Una versione iterativa di printbinary. public static void printbinary(int n) {int[] x = new int[30]; int i; for (i=0;n>0;i++) {x[i] = n%2 ; n = n/2; i--; for (i=i; i>=0;i--) System.out.print(x[i]); return; notare come il metodo iterativo abbia una struttura più complessa.

33 I numeri di Fibonacci Fibonacci e i conigli: ogni coppia di conigi diventa feconda dopo un mese dalla nascita mesi 0 1? 0 coppie di conigli 1 coppia di conigli ? 1 coppia di conigli?????????? 2 coppie di conigli 3 coppie di conigli 4 coppie di conigli in generale: conigli(0) = 0 conigli(1) = 1 conigli(n) = conigli(n-1) + conigli(n-2) (n>1)

34 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); supponiamo 4 in input public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib 1

35 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib(1) fib 2

36 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib(2) fib(1) n: 3 fib 3

37 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib(3) fib(2) fib(1) n: 2 n: 3 fib 4

38 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib(4) fib(3) fib(2) fib(1) n: 1 n: 2 n: 3 fib 5

39 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 1 fib(3) fib(2) fib(1) n: 2 ricorda 1 n: 3 fib 6

40 public class FibRic {public static void (String [] args)

41 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 1 0 fib(3) fib(2) fib(1) n: 2 ricorda 1 n: 3 fib 8

42 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 1 fib(2) fib(1) n: 3 ricorda 1 fib 9

43 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib(3) fib(2) fib(1) n: 1 n: 3 ricorda 1 $3 fib 10

44 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 1 1 fib(2) fib(1) n: 3 ricorda 1 fib 11

45 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 2 fib(1) ricorda 2 fib 12

46 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib(2) fib(1) n: 2 ricorda 2 $3 fib 12

47 public class FibRic {public

48 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 1 fib(2) fib(1) n: 2 ricorda 1 ricorda 2 $3 fib 14

49 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib(3) fib(2) fib(1) n: 0 n: 2 ricorda 1 ricorda 2 $3 $3 fib 15

50 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 1 0 fib(2) fib(1) n: 2 ricorda 1 ricorda 2 $3 fib 16

51 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 2 1 fib(1) ricorda 2 fib 17

52 public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); Il programma JAVA per fib - versione ricorsiva 3 public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib 18

53 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; Il programma stampa 3 e termina. fib 19

54 Nota: i risultati parziali di alcune espressioni (tipicamente in questo caso i risultati di fib(n-1) scritti in verde) possono essere ricordati nel frame in cui vengono calcolati. Questo processo è invisibile all utente e viene gestito interamente dal compilatore. Però ora dimentichiamo pure tutto. Quello che importa è sapere che per scrivere un metodo si può assumere di averlo già disponibile, purchè lo si usi su dei dati, in qualche modo, più semplici. Più semplici vuole soltanto dire che porteranno, prima o poi, al caso elementare.

55 Possibili problemi (nascosti) della ricorsione - Il numero di frames per uno stesso metodo allocati contemporaneamente sullo stack può diventare molto grande e causare uno stack overflow. E difficile che accade se la ricorsione è usata in modo classico. - L allocazione di un frame costa comunque tempo: di questo bisogna a volte tenerne conto. - Può capitare (senza accorgersene) di ripetere (nello stesso programma) la chiamata di un metodo sugli stessi dati: l effetto puo essere impressionante! Se possibile evitare questo!

56 Esempio: Figura 5 Schema delle invocazioni del metodo ricorsivo fib su 6 notare le duplicazioni delle chiamate sullo stesso parametro.

57 Si può facilmente vedere che il numero di chiamate ricorsive per calcolare fib(n) è superiore a fib(n) stesso. 1? 5 Ora fib(n) si può approssmare con? n dove? =. 2 per esempio fib(30)? fib(40)? fib(50)? (crescita esponenziale!) - Il programma iterativo, invece, ripete un ciclo n volte per calcolare fib(n).

Capitolo 19. Ricorsione

Capitolo 19. Ricorsione Capitolo 19 La ricorsione Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a sé stessa Esempio: Funzione fattoriale su interi non negativi: f(n) = n!

Dettagli

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

RICORSIONE. Informatica B - A.A. 2013/2014 RICORSIONE Informatica B - A.A. 2013/2014 RICORSIONE Che cos è la ricorsione? Un sottoprogramma P richiama se stesso (ricorsione diretta) Un sottoprogramma P richiama un altro sottoprogramma Q che comporta

Dettagli

Ricorsione. Ricorsione. Ricorsione. Walter Cazzola. Dal dizionario Garzanti (www.garzantilinguistica.it).

Ricorsione. Ricorsione. Ricorsione. Walter Cazzola. Dal dizionario Garzanti (www.garzantilinguistica.it). Outline vs Iterazione. Walter Cazzola Dipartimento di Informatica e Comunicazione Università degli Studi di Milano Definizioni La ricorsione come strumento di programmazione implementazione di metodi ricorsivi

Dettagli

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

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario La ricorsione Metodi ricorsivi Esercizi proposti 16/01/2013 2 La ricorsione In Java ogni metodo può chiamare anche se stesso,

Dettagli

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

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

Dettagli

Fondamenti di Informatica T. Linguaggio C: Stack e Ricorsione

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

Dettagli

Definizione di metodi in Java

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

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

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

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[]

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

Architetture dei Calcolatori

Architetture dei Calcolatori Architetture dei Calcolatori Lezione 11 -- 10/12/2011 Procedure Emiliano Casalicchio emiliano.casalicchio@uniroma2.it Fattoriale: risparmiamo sull uso dei registri q Rispetto alla soluzione precedente

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

Esempi di Problemi Iterativi

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

Dettagli

Gestione della memoria in Java DRAFT 1.2

Gestione della memoria in Java DRAFT 1.2 Gestione della memoria in Java DRAFT 1.2 Programmazione II - a.a. 2001/02 April 4, 2002 AVVERTIMENTO Queste note vogliono solo costituire un supporto di aiuto per la comprensione dei fondamenti di Java.

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

Laboratorio di Programmazione 1 [Java]

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

Dettagli

Esempi di Problemi Iterativi

Esempi di Problemi Iterativi Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E07 C. Limongelli Dicembre 2011 1 Contenuti q Esercizi: Palindroma Anagramma Fibonacci 2 Palindroma q Scrivere un programma che

Dettagli

Il linguaggio C Il modello a run-time

Il linguaggio C Il modello a run-time 3 Il linguaggio C Il modello a run-time Puntatore al codice Return address Link dinamico Parametro Parametro 2... Variabile locale Variabile locale 2... B A A 3 FUNZIONI: IL MODELLO A RUN-TIME Ogni volta

Dettagli

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan venus.unive.it/borg borg@unive.it Ricevimento lunedì, prima o dopo lezione 1 Le funzioni in C Le funzioni vengono utilizzate per 3 motivi: Riusabilità

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

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

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

Dettagli

I numeri rossi sulla Mole Antonelliana a Natale. Algoritmi e Laboratorio a.a Lezioni. Le regole della riproduzione dei conigli.

I numeri rossi sulla Mole Antonelliana a Natale. Algoritmi e Laboratorio a.a Lezioni. Le regole della riproduzione dei conigli. I numeri rossi sulla Mole Antonelliana a Natale Università di Torino acoltà di Scienze MN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 29- Lezioni prof. Elio

Dettagli

Corso di Laurea Ingegneria Civile Elementi di Informatica. Esercizi. Carla Limongelli. Esercizi 1

Corso di Laurea Ingegneria Civile Elementi di Informatica. Esercizi. Carla Limongelli. Esercizi 1 Corso di Laurea Ingegneria Civile Elementi di Informatica Esercizi Carla Limongelli Esercizi 1 Quanti giorni in un mese? Scrivere un metodo che ricevuto in input un mese e un anno, restituisca il numero

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

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

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

Le Funzioni e la Ricorsione

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

Dettagli

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

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à

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 E03 Esempi di algoritmi e programmi A. Miola Novembre 2011 1 Contenuti q Progettazione di algoritmi q Problemi di ingresso - uscita

Dettagli

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

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

Dettagli

Metodi statici. Dichiarazione e chiamata di metodi statici

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

Dettagli

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

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

Dettagli

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 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

Dettagli

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 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

Dettagli

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010 Esercizio 1. Si deve modellare con una classe Java il contenuto di un portamonete, con delle opportune semplificazioni. Le monete da considerare sono di soli 4 tagli: 10, 20, 50 e 100 centesimi (cioè 1

Dettagli

Laboratorio di programmazione

Laboratorio di programmazione Laboratorio di programmazione 30 novembre 2007 Sequenze di Collatz Considerate la seguente regola: dato un numero intero positivo n, se n è pari lo si divide per 2, se è dispari lo si moltiplica per 3

Dettagli

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

La ricorsione. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino La ricorsione Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario! Definizione di ricorsione e strategie divide et impera! Semplici algoritmi ricorsivi! Merge

Dettagli

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

Lezione 8 programmazione in Java. Anteprima. La ricorsione. Nicola Drago Dipartimento di Informatica Università di Verona Lezione 8 programmazione in Java Nicola Drago nicola.drago@univr.it Dipartimento di Informatica Università di Verona Anteprima Programmazione ricorsiva Fattoriale Somma di n numeri Torre di Hanoi Array

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

Problemi, algoritmi e oggetti

Problemi, algoritmi e oggetti Fondamenti di informatica Oggetti e Java Luca Cabibbo Capitolo 5 Marzo 2007 1 Fondamenti di informatica: Oggetti e Jav Contenuti... Problemi e algoritmi comprensione del problema identificazione di un

Dettagli

Laboratorio di Programmazione 1 [Java]

Laboratorio di Programmazione 1 [Java] Laboratorio di Programmazione 1 [Java] Prova di esame - 7 Settembre 2010 Tempo massimo: 50 minuti Si implementino in Java le classi Tavolo e Ristorante. La classe Tavolo ha i seguenti attributi: numero

Dettagli

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch Esercitazione 5 Procedure e Funzioni Il comando condizionale: switch Comando: switch-case switch (espressione) { /* espressione deve essere case costante1: istruzione1 di tipo int o char */ [break]; case

Dettagli

Programmazione, 5 a lezione

Programmazione, 5 a lezione Programmazione, 5 a lezione Eugenio Omodeo Dipartimento di Matematica e Informatica, Università degli Studi di Trieste. Trieste, 12.10.2010 Esecuzione sequenziale I All avvio di un programma, il processo

Dettagli

Introduzione al C++ (continua)

Introduzione al C++ (continua) Introduzione al C++ (continua) I puntatori Un puntatore è una variabile che contiene un indirizzo di memoria pi_greco 3.141592 pi_greco_ptr indirizzo di 3.141592 & DEREFERENZIAZIONE RIFERIMENTO * se x

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

AA 2006-07 LA RICORSIONE

AA 2006-07 LA RICORSIONE PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Informazioni sul corso + Un introduzione informale agli algoritmi Domenico Fabio Savo 1 Domenico Fabio Savo Email: savo@dis.uniroma1.it Web: http://www.dis.uniroma1.it/~savo

Dettagli

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Puntatori e dintorni Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;

Dettagli

Laboratorio di Programmazione M-Z

Laboratorio di Programmazione M-Z 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ù

Dettagli

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

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

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi.. 2010/2011 Sommario Conversione di tipo:casting Tipo enumerativo lgebra Booleana Esercizi Conversione di tipo:casting Il casting o conversione di tipo avviene

Dettagli

Fondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso

Fondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso Fondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso AA 2015/2016 Tutor: Vincenzo Lomonaco vincenzo.lomonaco@unibo.it Programma Introduzione al calcolatore

Dettagli

Introduzione Programmazione Java

Introduzione Programmazione Java Introduzione Programmazione Java Paolo Tomeo paolo.tomeo@poliba.it Regole basilari Java è case sensitive quindi prestare attenzione alle maiuscole Il commento si inserisce con // all'inizio della linea

Dettagli

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 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

Dettagli

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 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

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E04 Esercizi sui problemi di ordinamento C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Algoritmi di Ordinamento

Dettagli

GESTIONE DEGLI ERRORI

GESTIONE DEGLI ERRORI GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori L approccio classico consiste nell inserire controlli (if else..) per cercare di intercettare a priori

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

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

Dettagli

Esempio 2: Subtyping

Esempio 2: Subtyping Esempio 2: Subtyping 22 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti mediante l aggiunta o la ridefinizione

Dettagli

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

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

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E04 Esempi di algoritmi e programmi C. Limongelli - A. Miola Settembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Esempi

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi Ricorsivi e Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 I conigli di Fibonacci Ricerca Binaria L isola dei conigli

Dettagli

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

Tecniche per risolvere problemi: riduzione a sottoproblemi più semplici. Ricorsione Tecniche per risolvere problemi: riduzione a sottoproblemi più semplici Ricorsione 1 Tecniche per risolvere problemi: riduzione a sottoproblemi più semplici Problema: dati tre numeri interi, calcolarne

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 1 Un introduzione informale agli algoritmi Definizione informale di algoritmo Insieme di istruzioni, definite passo per passo, in modo da poter essere eseguite meccanicamente

Dettagli

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo Esempi al calcolatore su: 1) 2) Subtyping e polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il

Dettagli

Le basi del linguaggio Java

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

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Eccezioni Categorie di eccezioni checked unchecked Gestione delle eccezioni Clausola throws Costrutto try - catch - finally Comando

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

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 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

Dettagli

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA. INFORMATICA B Ingegneria Elettrica. La ricorsione

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

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 27 novembre 2007 In C una stringa è rappresentata da una sequenza di caratteri terminante con il carattere nullo \0 il cui valore è

Dettagli

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

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

Dettagli

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

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 6 - Blocchi e cicli Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Istruzioni di controllo Iterative Condizionali Algoritmi e Diagrammi di flusso Esercizi 28/03/2011 2 Istruzioni iterative while do

Dettagli

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza

Dettagli

5 - Istruzioni condizionali

5 - Istruzioni condizionali 5 - Istruzioni condizionali 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

Dettagli

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

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

Dettagli

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1 Modulo 2 Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa esercitazione 1. Passaggio dei parametri per valore/riferimento 2. Trattamento degli errori: funzioni che restituiscono anche codici di errore

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

Esempio : i numeri di Fibonacci

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

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

Studio delle successioni con il software

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

Dettagli

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; } Java è un linguaggio di programmazione c indipendente dalla piattaforma, ovvero un linguaggio di programmazione che permette di compilare i programmi una volta sola e di installarli su computer che usano

Dettagli

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

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

Dettagli

La codifica dei numeri

La codifica dei numeri La codifica dei numeri La rappresentazione dei numeri con il sistema decimale può essere utilizzata come spunto per definire un metodo di codifica dei numeri all interno degli elaboratori: la sequenza

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

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)

Dettagli

Laboratorio di Programmazione Lezione 4. Cristian Del Fabbro

Laboratorio di Programmazione Lezione 4. Cristian Del Fabbro Laboratorio di Programmazione Lezione 4 Cristian Del Fabbro Prossima lezione Mercoledì 25 novembre ore 8:30-11:00 Classe Una classe descrive degli oggetti tramite: Proprietà/variabili/campi (dati/caratteristiche,

Dettagli

Dall analisi alla codifica (1)

Dall analisi alla codifica (1) Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 09 Dall analisi alla codifica (1) Aprile 2010 Dall'analisi alla codifica (1) 1 Contenuti... Problemi e algoritmi comprensione del problema

Dettagli

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

Parte 2. Ricorsione. [M.C.Escher Drawing hands, 1948] - AA. 2012/13 2.1 Parte 2 Ricorsione - AA. 2012/13 [M.C.Escher Drawing hands, 1948] 2.1 Funzioni ricorsive Una funzione si dice ricorsiva se richiama se stessa, direttamente o indirettamente La ricorsione si dice diretta

Dettagli

Programmazione 1 A.A. 2015/2016

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,

Dettagli

Esercizio 3. Oppure fare queste operazioni nel metodo main all interno della classe Persona.

Esercizio 3. Oppure fare queste operazioni nel metodo main all interno della classe Persona. Esercizio 3 Scrivere un programma con i seguenti requisiti. Utilizzare una classe Persona che dichiara le variabili nome, cognome, età. Si dichiari inoltre un metodo dettagli() che restituisce in una stringa

Dettagli

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di

Dettagli

Costo di esecuzione. Quanto costa? Spazio. Spazio e tempo. Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche

Costo di esecuzione. Quanto costa? Spazio. Spazio e tempo. Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche Quanto costa? Prof. Stefano Guerrini guerrini@di.uniroma1.it Programmazione II (can. P-Z) A.A. 2005-06 Cosa contribuisce

Dettagli

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM ERRATA CORRIGE dei programmi della prima stampa (Aprile 2004) aggiornato al 20/05/2017 Nota: il codice corretto è ottenibile da quella errato

Dettagli

Corso sul linguaggio Java

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

Dettagli

TIPI PRIMITIVI: LIMITI

TIPI PRIMITIVI: LIMITI TIPI PRIMITIVI: LIMITI I tipi primitivi sono i "mattoni elementari" del linguaggio In varie situazioni può però essere necessario trattare i tipi primitivi come oggetti quando una funzione pretende come

Dettagli

Il linguaggio Java: aggiunte in Java 1.5

Il linguaggio Java: aggiunte in Java 1.5 .. Il linguaggio Java: aggiunte in Java 1.5 Una breve presentazione GENERICI Java 1.5 introduce i generici: classi che hanno un parametro di tipo. Nelle versioni precedenti a Java 1.5 si può definire:

Dettagli

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

Programmazione a blocchi. Algobuild Prof. Sergio Roselli Programmazione a blocchi Algobuild Prof. Sergio Roselli Blocchi base Inizio programma I Fine programma F Input IN A Output Esecuzione OUT A A = 5 + 1 L interprete Algobuild Algobuildpermette di trascrivere

Dettagli

APPUNTI LEZIONI PROGRAMMAZIONE II A CURA DELLA PROF.SSA EMANUELA FACHINI. Ricorsione.

APPUNTI LEZIONI PROGRAMMAZIONE II A CURA DELLA PROF.SSA EMANUELA FACHINI. Ricorsione. Introduzione. APPUNTI LEZIONI PROGRAMMAZIONE II A CURA DELLA PROF.SSA EMANUELA FACHINI Ricorsione. In questi appunti cercheremo di esaminare piu da vicino la ricorsione, come tecnica di programmazione,

Dettagli

La ricorsione. cioè la tesi vale per n + 1. Se ne conclude che vale per ogni n.

La ricorsione. cioè la tesi vale per n + 1. Se ne conclude che vale per ogni n. La ricorsione 1. Induzione e definizioni ricorsive Una definizione che adoperasse il concetto stesso che intende definire sarebbe considerata circolare e dunque vuota, per le stesse ragioni per cui non

Dettagli

Linguaggio C Informatica Grafica

Linguaggio C Informatica Grafica Linguaggio C Informatica Grafica Corsi di Informatica Grafica Prof. Manuel Roveri Dipartimento di Elettronica e Informazione roveri@elet.polimi.it Linguaggio C Breve storia Struttura di un programma Variabili

Dettagli