Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011
|
|
- Geronimo Marrone
- 5 anni fa
- Visualizzazioni
Transcript
1 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011
2 Sommario Effetti collaterali Metodi ricorsivi Esercizi proposti 19/04/2011 2
3 import javax.swing.joptionpane; public class esempioarrayg{ public static void main(string[] args) { // TODO Auto-generated method stub int numero; do { String s = JOptionPane.showInputDialog("Immettere dimensione array "); numero=integer.parseint(s); while (numero<=0); int A[] = new int[numero]; //lettura array for (int i=0;i<numero;i++) { A[i] = Integer.parseInt(JOptionPane.showInputDialog((i +1)+" numero")); ; //scrittura array String array =""; for (int i=0;i<a.length;i++) { array += A[i] ; if (i+1!=a.length) { array +=" "; JOptionPane.showMessageDialog(null," l'array inserito è: ["+array+"]");
4 Esempi di definizione di metodi public static void leggiarray(int [] B) { /* legge uno alla volta gli elementi dell array B; utilizza pesantemente e positivamente gli effetti collaterali */ int i; // la variabile di iterazione /* ciclo di lettura degli elementi dell array */ for (i = 0; i < B.length; i++) { B[i] = Integer.parseInt(JOptionPane.showInputDialog((i +1)+" numero")); public static String stampaarray (int V[]) { String S =""; for (int i=0;i<v.length;i++) { S += V[i] ; if (i+1!=v.length) { S +=" "; return S;
5 Esempi di definizione di metodi public static void leggiarray(int [] B) { /* legge uno alla volta gli elementi dell array B; utilizza pesantemente e positivamente gli effetti collaterali */ int i; // la variabile di iterazione /* ciclo di lettura degli elementi dell array */ for (i = 0; i < B.length; i++) { B[i] = Integer.parseInt(JOptionPane.showInputDialog((i +1)+" numero")); public static String stampaarray (int V[]) { String S =""; for (int i=0;i<v.length;i++) { S += V[i] ; if (i+1!=v.length) { S +=" "; return S; tipo di ritorno propietà del metodo parametri del metodo nome del metodo
6 Esempi di definizione di metodi public static void leggiarray(int [] B) { /* legge uno alla volta gli elementi dell array B; utilizza pesantemente e positivamente gli effetti collaterali */ int i; // la variabile di iterazione /* ciclo di lettura degli elementi dell array */ for (i = 0; i < B.length; i++) { B[i] = Integer.parseInt(JOptionPane.showInputDialog((i +1)+" numero")); public static String stampaarray (int V[]) { String S =""; for (int i=0;i<v.length;i++) { S += V[i] ; if (i+1!=v.length) { S +=" "; return S; tipo di ritorno propietà del metodo parametri del metodo nome del metodo
7 Esempi di chiamata di metodi public class esempioleggiarray { public static void main(string args[]) throws NumberFormatException, IOException { int numero; do { String s = JOptionPane.showInputDialog("Immettere dimensione array "); numero=integer.parseint(s); while (numero<=0); int A[] = new int[numero]; //lettura array leggiarray(a); //stampa array JOptionPane.showMessageDialog(null," l'array inserito è: ["+stampaarray(a)+"]"); Chiamata del metodo
8 Esempi di chiamata di metodi public class esempioleggiarray { public static void main(string args[]) throws NumberFormatException, IOException { int numero; do { String s = JOptionPane.showInputDialog("Immettere dimensione array "); numero=integer.parseint(s); while (numero<=0); int A[] = new int[numero]; //lettura array leggiarray(a); //stampa array JOptionPane.showMessageDialog(null," l'array inserito è: ["+stampaarray(a)+"]"); Chiamata del metodo
9 Flusso di controllo main ( ) leggiarray (int [] B ) leggiarray(a); L esecuzione del main : si interrompe al momento della chiamata del metodo viene eseguito il passaggio dei parametri (B=A) viene eseguito il metodo invocato ; 19/04/2011 e si prosegue dalla prima istruzione seguente la chiamata. 9
10 Effetti collaterali Si dice che un metodo causa un effetto collaterale quando esso modifica una variabile al di fuori del proprio campo di visibilità (scope). In Java si può verificare un effetto collaterale SOLO se il parametro formale di un metodo è un oggetto (es. un array).
11 public class effetticollaterali1 { public static void main(string[] args) { // TODO Auto-generated method stub int[] a={4,5,6; //test (a); stampaarray (a); public static void test (int [] x) { x[0] =0; x[1] ++; public static void stampaarray (int V[]) { String S =""; for (int i=0;i<v.length;i++) { S += V[i] ; if (i+1!=v.length) { S +=" "; System.out.println(S); output:0 6 6 public class effetticollaterali2 { public static void main(string[] args) { // TODO Auto-generated method stub int[] a={4,5,6; test (a[0],a[1]); stampaarray (a); public static void test (int x, int y) { x =0; y ++; public static void stampaarray (int V[]) { String S =""; for (int i=0;i<v.length;i++) { S += V[i] ; if (i+1!=v.length) { S +=" "; System.out.println(S); Output: 4 5 6
12 public class effetticollaterali1 { public static void main(string[] args) { // TODO Auto-generated method stub int[] a={4,5,6; //test (a); stampaarray (a); public static void test (int [] x) { x[0] =0; x[1] ++; public static void stampaarray (int V[]) { String S =""; for (int i=0;i<v.length;i++) { S += V[i] ; if (i+1!=v.length) { S +=" "; System.out.println(S); output:0 6 6 public class effetticollaterali2 { public static void main(string[] args) { // TODO Auto-generated method stub int[] a={4,5,6; test (a[0],a[1]); stampaarray (a); public static void test (int x, int y) { x =0; y ++; public static void stampaarray (int V[]) { String S =""; for (int i=0;i<v.length;i++) { S += V[i] ; if (i+1!=v.length) { S +=" "; System.out.println(S); Output: In questo caso viene passato in input un array quindi è passato il riferimento agli elementi, che permette di modificare le variabili del vettore a esterno al metodo (questo è un effetto collaterale)
13 Effetti collaterali Un effetto collaterale non è necessariamente una situazione di errore o un problema, se gestito correttamente può essere una soluzione per risolvere particolari tipi di situazioni come ad esempio la lettura di un array.
14 Esercizio Scrivere un metodo statico che stampa una matrice per righe 19/04/
15 Esercizio Scrivere un metodo statico che stampa una matrice per colonne 19/04/
16 public class matrice { /** args */ public static void main(string[] args) { // TODO Auto-generated method stub int[][] A = { // crea matrice A con dimensione 2x3 { 1, 2, 3, // riga 0 di A { 4, 5, 6 // riga 1 di A ; stamparighematrice(a); // stampa la matrice per righe System.out.println(); stampacolonnematrice(a); // stampa la matrice per colonne public static void stamparighematrice(int[][] M) { for (int i=0; i<m.length; i++) { // scandisce righe for (int j=0; j<m[0].length; j++) // scandisce elementi riga i System.out.print(M[i][j]+" "); // stampa elemento riga System.out.println(); // fine riga Soluzioni Output prodotto public static void stampacolonnematrice(int[][] N) { for (int j=0; j<n[0].length; j++) { // scandisce colonne for (int i=0; i<n.length; i++) // scandisce elementi colonna j System.out.print(N[i][j]+" "); // stampa elemento colonna System.out.println(); // fine colonna
17 Esercizi proposti 1. Scrivere un metodo che data una matrice genera la trasposta. 19/04/
18 Domande teoriche proposte 1) Descrivere le modalità di passaggio dei parametri per VALORE 2) Spiegare perché in Java pur passando un array per valore si può ottenere un effetto collaterale.
19 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. 19/04/
20 Il calcolo del fattoriale La funzione fattoriale di n, per n=0 vale 1, per n>0 può essere definita con il prodotto dei fattori da 1 a n: n!= 1*2*3* (n-1)*n 0!=1 n è un numero intero non negativo 19/04/
21 Il calcolo del fattoriale La funzione fattoriale, può essere definita anche in modo ricorsivo: n! 1 n( n 1)! se se n n 0 0 dove n è un numero intero non negativo 19/04/
22 Il calcolo del fattoriale Cerchiamo di capire cosa significa la ricorsione 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 19/04/
23 Il calcolo del fattoriale Scriviamo un metodo per calcolare il fattoriale iterativo 19/04/
24 public static float fattoriale (int n) { float F=1; int i=1; do { F=F*i; i=i+1; while (i<=n); return F; 19/04/
25 19/04/
26 Il calcolo del fattoriale ricorsivo Se realizziamo il metodo partendo direttamente dalla sua definizione, è più naturale scrivere { public static float fattoriale (int n) float f; if (n == 0) f = 1; else f = n * fattoriale(n - 1); return f; 19/04/
27 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 può essere fonte di errori di difficile diagnosi 19/04/
28 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 cioè: sospende l esecuzione del metodo invocante (le variabili locali rimangono congelate) esegue il metodo invocato fino alla sua terminazione (con nuove variabili locali) riprende l esecuzione del metodo invocante dal punto in cui era stata sospesa (recuperando le variabili locali) 19/04/
29 La ricorsione Vediamo la sequenza usata per calcolare 3! si invoca f(3) f(3) invoca f(2) f(2) invoca f(1) f(1) invoca f(0) f(0) restituisce 1 f(1) restituisce 1 f(2) restituisce 2 f(3) restituisce 6 Si crea quindi una lista ( stack) di metodi in attesa, ciascuno con le sue variabili locali, che si allunga e che poi si accorcia fino ad estinguersi 19/04/
30 La ricorsione Anche se il meccanismo di funzionamento della ricorsione può sembrare complesso, in realtà esistono solo due regole ben definite che vanno utilizzate per scrivere metodi ricorsivi che funzionino 19/04/
31 Prima regola 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 19/04/
32 Seconda regola il metodo ricorsivo deve effettuare la chiamata ricorsiva dopo aver semplificato il problema (questa fase si chiama passo ricorsivo) nel nostro esempio si ha il passo ricorsivo all interno di una espressione f = n * fattoriale(n - 1); 19/04/
33 Seconda regola il metodo ricorsivo deve effettuare la chiamata ricorsiva dopo aver semplificato il problema (questa fase si chiama passo ricorsivo) nel nostro esempio si ha il passo ricorsivo all interno di una espressione f = n * fattoriale(n - 1); ad ogni invocazione il problema diventa sempre più semplice e si avvicina al caso base la soluzione del caso base non richiede ricorsione 19/04/
34 Ricorsione infinita Si noti che non tutti i metodi ricorsivi realizzano algoritmi corretti 1. se manca il caso base, il metodo ricorsivo continua ad invocare se stesso all infinito 2. se il problema non viene semplificato ad ogni invocazione ricorsiva, il metodo ricorsivo continua ad invocare se stesso all infinito In queste 2 ipotesi 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 19/04/
35 Esempio di Funzione 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) 19/04/
36 public static float fattoriale (int n) { float F=1; int i=1; do { F=F*i; i=i+1; while (i<=n); return F; 19/04/
37 { public static float fattoriale (int n) float f; if (n == 0) f = 1; else f = n * fattoriale(n - 1); return f; La funzione ricorsiva fattoriale non necessita di iterazioni, ma include internamente il calcolo del risultato, infatti restituisce 1 se il parametro ricevuto è minore o uguale di 1 (cioè vale 0 o 1), mentre in caso contrario il valore restituito è il prodotto di n per il fattoriale di n-1, pertanto fattoriale calcola il valore da restituire chiamando se stesso e "passandosi" come parametro il parametro appena ricevuto, diminuito di uno. 19/04/
38 Esercizio Scrivere un metodo statico ricorsivo che calcola la funzione di fibonacci 19/04/
39 Per esercizio avevamo già codificato 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; return y; 19/04/
40 19/04/
41 L uso della ricorsine semplifica la soluzione ma talvolta può essere molto costoso e inefficiente dal punto di vista computazionale. Infatti ogni chiamata ne produce altre due: alcune di queste chiamate sono uguali. fibo(5) fibo(4) fibo(3) fibo(3) fibo(2) fibo(2) fibo(1) fibo(2) fibo(1) fibo(1) fibo(0) fibo(1) fibo(0) fibo(1) fibo(0) Ogni chiamata esegue una somma eccetto quelle che corrispondono alle foglie dell albero binario delle chiamate: in totale si fanno 7 somme e 15 chiamate. Più efficiente è l implementazione che svolge la ricorsione, implementandola come un PROCEDIMENTO ITERATIVO. Con una sola chiamata vengono eseguite nel caso dell esempio le quattro somme 19/04/
42 .osservazioni alla semplicità del codice corrisponde una maggiore complessità dell algoritmo (che impareremo a calcolare quando studieremo la complessità). Per il momento basta osservare che ad ogni chiamata vengono generate 2 variabili quindi si occupa più memoria. 19/04/
43 Esercizio Scrivere un metodo che calcola la funzione di elevamento a potenza tra due interi in modo ricorsivo 19/04/
44 Esercizio Sommare tutti gli elementi della matrice M 19/04/
45 Esercizio Sommare tutti gli elementi della colonna k- esima della matrice M 19/04/
46 Esercizi proposti 1. Realizzare un metodo che data una matrice verifica se è simmetrica 19/04/
47 Esercizi proposti 1. Realizzare un metodo che data una matrice verifica se è unitaria 19/04/
48 Esercizi proposti 1. Realizzare un metodo che restituisce la posizione del minimo di un array compreso nell'intervallo di indici "inizio" e "fine" 19/04/
49 Esercizi proposti 1. Realizzare un metodo per la moltiplicazione di 2 matrici A e B. 19/04/
50 Esempio
51 Esercizi proposti 1. Realizzare un metodo che presa in input una matrice 10x10 la inizializza con i dati della tavola pitagorica 19/04/
52 Esercizi proposti 1. Realizzare un metodo che presi in input due array ordinati li fonde. 19/04/
53 Esercizi proposti 1. Realizzare un metodo che preso in input un intero N e una matrice NxN restituisce la matrice NxN con i numeri da 1 a N 2 disposti a spirale per la moltiplicazione di matrici 19/04/
54 Analisi del problema
55 Il problema del cambio di direzione
56 Il problema del cambio di direzione
57 Come aggiornare gli indici
58 Esercizio proposto 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
59 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!
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,
DettagliFondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011
Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Variabili di tipo Array Array bidimensionali Metodi statici Metodi statici della classe Math Esercizi 13/04/2011 Corso di Fondamenti
Dettaglin 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
DettagliProgrammazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013
Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario Metodi statici Parametri attuali e formali Passaggio dei parametri Effetti collaterali Metodi statici per Array Esercizi 16/01/2013
DettagliFondamenti 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
DettagliProgrammazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013
Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario Array Array monodimensionali Array bidimensionali Esercizi 16/01/2013 2 ARRAY Gli array sono oggetti utilizzati in Java per memorizzare
Dettaglin 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
DettagliCorso: 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
DettagliFondamenti 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
DettagliParte 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
DettagliFondamenti di Programmazione
A.A. 08/09 Fondamenti di Programmazione (canale E-O) Docente: Prof.ssa Tiziana Calamoneri calamo@di.uniroma1.it Esercitatore: Dott. Roberto Petroccia petroccia@di.uniroma1.it Pagina del corso: http://twiki.di.uniroma1.it/twiki/view/programmazione1/eo/webhome
DettagliLa Ricorsione. Carla Binucci e Walter Didimo
La Ricorsione Carla Binucci e Walter Didimo Definizione induttiva di funzioni Una funzione definita in modo induttivo è una funzione definita in termini di sé stessa ad esempio la funzione f(n) = n! (fattoriale
Dettaglipublic 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
DettagliCapitolo 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!
DettagliFondamenti di Informatica
Vettori e matrici #1 Le variabili definite come coppie sono dette variabili scalari Fondamenti di Informatica 5. Algoritmi e pseudocodifica Una coppia è una variabile
DettagliINFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti
INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti Ricorsione La ricorsione è un approccio per la risoluzione
DettagliFunzioni, 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
DettagliDo...While() Break Continue Concetto di Funzione e Procedura METODI in Java
Fondamenti di Informatica Do...While() Break Continue Concetto di Funzione e Procedura METODI in Java Prof.Angela Bonifati 1 Istruzione while int vet1[] = new int[20]; int vet2[] = new int[20]; for(int
DettagliFondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011
Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario API di Java Istruzione di scrittura Istruzione di lettura 21/03/2011 2 API di Java Java è un linguaggio orientato agli oggetti basato
Dettagli19 - 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
DettagliRicorsione. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico
Ricorsione Stefano Ferrari Università degli Studi di Milano stefanoferrari@unimiit Programmazione anno accademico 2016 2017 Funzioni ricorsive Chiamata è ciascun uso di una funzione nel main o in un altra
DettagliProgrammazione ricorsiva
Programmazione ricorsiva Fondamenti di Informatica Ricorsione q Che cos è la ricorsione? Un sottoprogramma P richiama se stesso (ricorsione diretta) Un sottoprogramma P richiama un altro sottoprogramma
DettagliFondamenti 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
DettagliLaboratorio di Programmazione Lezione 3. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 3 Cristian Del Fabbro Prossima lezione GIOVEDÌ 12 NOVEMBRE ORE 14:00 Array a.k.a. vettore Un array è una collezione ordinata di dati omogenei (cioé sono tutti dello
DettagliArray. Definizione e utilizzo di vettori
Array Definizione e utilizzo di vettori Array (1/2) Un array o vettore rappresenta un insieme di elementi dello stesso tipo. Sintassi per la creazione di un array: tipo_elementi[] nome; nome = new tipo_elementi[numero_elementi];
DettagliInformatica/ Ing. Meccanica e Ing. Edile/ Prof. Verdicchio/ 16/07/2013 / Foglio delle domande / VERSIONE 1
Informatica/ Ing. Meccanica e Ing. Edile/ Prof. Verdicchio/ 16/07/2013 / Foglio delle domande / VERSIONE 1 1) In un diagramma di flusso, la rappresentazione di un ciclo WHILE include sicuramente almeno:
DettagliRICORSIONE. 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
DettagliMETODI in Java. Prof.Angela Bonifati. Metodi e Sottoprogrammi
Fondamenti di Informatica METODI in Java Prof.Angela Bonifati 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile definire nuovi tipi di dati, tramite i metodi è possibile
DettagliComunicazioni di servizio. I metodi - III. Oggi. Dove siamo. Esempio. Parametri di tipo array. Stefano Mizzaro 1. Domani non c è lezione :-(
Comunicazioni di servizio I metodi - III Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@dimi.uniud.it Programmazione, lezione 11
DettagliEsercizi 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
DettagliInformatica (A-K) 5. Algoritmi e pseudocodifica
Vettori e matrici #1 Informatica (A-K) 5. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile & Ambientale A.A. 2011-2012 2 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
DettagliCorso 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
DettagliFondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011
Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario La classe String Lettura da input di dati numerici (tipo int) Stampa di dati numerici Uno sguardo al codice Esercizi 21/03/2011 2
Dettagliliceo B. Russell PROGRAMMAZIONE INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE BIENNIO: SECONDA DISCIPLINA: INFORMATICA
INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE PROGRAMMAZIONE BIENNIO: SECONDA DISCIPLINA: INFORMATICA PIANO DI LAVORO DEL DOCENTE / RELAZIONE FINALE Anno scolastico 2014/2015 DOCENTE Prof. PAOLO ARMANI CLASSE:
DettagliProgrammazione in Java (I modulo)
Programmazione in Java (I modulo) Lezione 14: ALGORITMI di ordinamento di array RICERCA sequenziale e binaria Array bidimensionali (matrici) Passaggio di argomenti al main Operazioni su array Un array
DettagliLe 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
Dettagli7 - 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
DettagliProgrammazione I - corso B a.a prof. Viviana Bono
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 12 Riepilogo e complementi sui tipi Ripasso del sistema di tipi
DettagliRicorsione. DD cap. 5 pp KP cap. 5 pp
Ricorsione DD cap. 5 pp.160-184 KP cap. 5 pp.199-208 Un esempio Problema: prendere in input un intero e calcolarne il fattoriale se n>1 n!=n(n-1)(n-2)(n-3) 1; se n=0 o 1 n!=1. ma (n-1)! la definizione
DettagliLaboratorio 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[]
DettagliIstruzioni Ripetitive
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 11 Istruzioni Ripetitive Carla Limongelli Novembre 2011 http://www.dia.uniroma3.it/~java/fondinf/ Istruzioni ripetitive 1 Contenuti
DettagliInformatica/ 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
DettagliCorso di Laurea Ingegneria Informatica. Dispensa E11. Esercizi su array e. Gennaio 2012
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E11 Esercizi su array e array di array C. Limongelli Gennaio 2012 1 Contenuti Fusione di due array ordinati, con eliminazione di
DettagliInformatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 05/02/2014/ Foglio delle domande / VERSIONE 1
Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 05/02/2014/ Foglio delle domande/ VERSIONE 1 1) Nell uso dei puntatori in C++ la scrittura -> vuol dire: a) riferimento b) dereferenziazione e
DettagliIstruzioni Ripetitive
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 11 Istruzioni Ripetitive Carla Limongelli Novembre 2009 http://www.dia.uniroma3.it/~java/fondinf/ Istruzioni ripetitive 1 Contenuti
DettagliLa Ricorsione. Prima Parte. Giselda De Vita
La Ricorsione Prima Parte Giselda De Vita Una favola Mia nonna mi raccontava la favola di un re cattivissimo che ogni notte uccideva una sua serva. Una notte una serva furba, prima di essere uccisa, chiese
DettagliLA RICORSIONE LA RICORSIONE LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO
LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini
DettagliFondamenti 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
DettagliCORSO DI PROGRAMMAZIONE
ISTITUTO TECNICO INDUSTRIALE G. M. ANGIOY SASSARI CORSO DI PROGRAMMAZIONE RICORSIONE E METODI RICORSIVI DISPENSA 07.03 07-03_Ricorsione_[ver_16] Questa dispensa è rilasciata sotto la licenza Creative Common
DettagliEsercitazioni del Corso di Fondamenti di Informatica ARRAY. Prof. Giuseppe Manco. A cura di Ing. Andrea Tagarelli
Esercitazioni del Corso di Fondamenti di Informatica ARRAY Prof. Giuseppe Manco A cura di Ing. Andrea Tagarelli ESERCIZIO 1 public static int[] elaboravettore (int[] v) che verifica che gli elementi di
DettagliConcetto di Funzione e Procedura METODI in Java
Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile
DettagliLaboratorio 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
DettagliSviluppo di progetti. metodologie di soluzione di un problema. iterazione o ricorsione nel pensare per OGGETTI
Sviluppo di progetti metodologie di soluzione di un problema iterazione o ricorsione nel pensare per OGGETTI Incrementare vs pensare a oggetti Ho bisogno di andare da A a B in modo più veloce Iterazioni
DettagliLaboratorio di Matematica e Informatica 1
Laboratorio di Matematica e Informatica 1 Matteo Mondini Antonio E. Porreca matteo.mondini@gmail.com porreca@disco.unimib.it Dipartimento di Informatica, Sistemistica e Comunicazione Università degli Studi
DettagliAlgebra 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
DettagliDefinizione 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
DettagliLA RICORSIONE. Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa
LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini
DettagliApprocci nella soluzione di un problema
Approcci nella soluzione di un problema Bottom-up dalla conoscenza del singolo componente alle soluzioni Bottom-up A partire dal considerare oggetti più semplici o dati empirici (dal particolare), con
DettagliIntroduzione a Java e all'ambiente di sviluppo
Introduzione a Java e all'ambiente di sviluppo Programmazione 2, a.a. 2006-2007 Nota: per esclusivo uso interno al corso, riferimenti bibliografici forniti a lezione Schema minimo di un applicazione public
DettagliLA RICORSIONE! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa
LA RICORSIONE! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini
DettagliINFORMATICA 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à
DettagliUniversità degli Studi di Ferrara
Università degli Studi di Ferrara Corso di Laurea in Matematica - A.A. 2018-2019 Programmazione Lezione 11 Funzioni Docente: Michele Ferrari - michele.ferrari@unife.it Nelle lezioni precedenti Operatore
DettagliEsercizi su array di array
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E10 C. Limongelli Gennaio 2010 1 Contenuti Fusione di due array ordinati, con eliminazione di duplicati Verifica array bidimensionale
DettagliProgrammazione 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! Intro metodi/sottoprogrammi. ! Definizione (intestazione e corpo) e uso. ! Parametri formali e attuali, associazione
I metodi - III Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 11 13 aprile 2015 Dove siamo! Mattoni,
DettagliLo sviluppo di un semplice programma e la dimostrazione della sua correttezza
Il principio di induzione Consideriamo inizialmente solo il principio di induzione per i numeri non-negativi, detti anche numeri naturali. Sia P una proprietà (espressa da una frase o una formula che contiene
DettagliClassi 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
DettagliSommario. Tipo stringa: string. Tipo stringa: stile C. Tipo stringa Tipo booleano
Tipo stringa Tipo booleano Sommario Ricorsione: Definizione Chiamata di funzione Ricorsione in coda Ricorsione non in coda Ricorsionei eccessiva Esempio di ricorsione: ricerca binaria Tipo stringa Il C++
DettagliLa 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
Dettagli6 - 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
DettagliCorso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA3 3A2 Algoritmi notevoli 1 Prerequisiti Programmazione elementare in Java Algoritmi notevoli su array 2 1 Introduzione In questa Unità vediamo rapidamente gli algoritmi
DettagliEsercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)
Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo) Selezione di prove di esame al calcolatore Esercizio 1 (esame del 13/01/2006) La classe Matrice definisce oggetti che rappresentano matrici
DettagliOperativamente, risolvere un problema con un approccio ricorsivo comporta
LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini
DettagliIntroduzione al linguaggio C Funzioni
Introduzione al linguaggio C Funzioni Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati
DettagliInformatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 02/04/2014/ Appello straordinario/ Foglio delle domande / VERSIONE 1
Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 02/04/2014/ Appello straordinario/ Foglio delle domande/ VERSIONE 1 1) Nell uso dei puntatori in C++ la scrittura -> vuol dire: a) riferimento
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide,
DettagliLA RICORSIONE LA RICORSIONE
LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini
DettagliCalcolare x n = x x x (n volte)
Calcolare x n = x x x (n volte) Abbiamo bisogno di: una variabile ris in cui ad ogni iterazione del ciclo si ha un risultato parziale, e che dopo l ultima iterazione contiene il risultato finale; una variabile
DettagliFondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011
Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Istruzione condizionale switch Istruzioni di salto break e continue Uso di variabili di tipo boolean Variabili di tipo array (monodimensionali)
DettagliUnità A1 Funzioni MODULO Java 2
Dare una breve descrizione dei termini introdotti: (A) CONOSCENZA TERMINOLOGICA Passaggio parametri per valore Passaggio parametri per indirizzo Parametri formali e attuali Regole di visibilità Ambiente
DettagliEsercitazione Fondamenti di Informatica 2
Esercitazione Fondamenti di Informatica 2 Matrici (seconda parte) 27 marzo 2006 a Prodotto righe-colonne Scrivere un metodo Matrice moltiplica(matrice mat) che, applicato ad una istanza dell oggetto Matrice,
DettagliFondamenti 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
DettagliNell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi:
Pag 24 3) Il problema della ricerca Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi: si incontrano in una grande varietà di situazioni reali; appaiono come sottoproblemi
DettagliLe 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
DettagliLezione XII Ricorsione
Lezione XII Ricorsione Scopo della lezione Definire e implementare metodi ricorsivi XII.2 Ricorsione Dal dizionario Garzanti (http://www.garzantilinguistica.it) Lemma Etimologia Definizione ricorsivo Deriv.
DettagliUna funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa
LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini
DettagliFUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice
Funzioni FUNZIONI Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvono parti specifiche di un problema Una funzione permette di attribuire un nome ad un insieme di istruzioni
DettagliSystem.out.print("\tATTENZIONE: hi inserito un valore non valido!\n");
Creare un applicazione console che dato l indice della borsa di Milano nel giorno precedente, calcola la variazione percentuale rispetto al valore dell indice del giorno corrente. import java.io.*; public
DettagliIndice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX
Indice Prefazione Gli Autori Ringraziamenti dell Editore La storia del C XVII XXIX XXXI XXXIII PARTE A Capitolo 1 Computer 1 1.1 Hardware e software 2 1.2 Processore 3 1.3 Memorie 5 1.4 Periferiche di
DettagliINFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 5 Ing. Gian Enrico Conti Dott. Michele Zanella
INFORMATICA A Titolo presentazione sottotitolo A.A. 2017-18 Milano, XX mese 20XX Laboratorio n 5 Ing. Gian Enrico Conti Dott. Michele Zanella Info Logistiche (cont d) Calendario laboratori Data Orario
DettagliJava Gli array. Array
Java Gli array 1 Gli array In generale un array è una sequenza di locazioni di memoria, che contengono entità dello stesso tipo, e a cui si può fare riferimento con un nome comune Le entità che compongono
DettagliAlgoritmi 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
DettagliEsercizio 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
Dettagli