Approcci nella soluzione di un problema

Slides:



Advertisements
Presentazioni simili
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Advertisements

Procedure e funzioni A. Ferrari.
Procedure e funzioni ricorsive
Corso di Informatica (Programmazione)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
Progetto di algoritmi: metodologia "Divide et Impera"
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente)
Selezione (=scelta) con “if-else”
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
AN FI Metodologie1 Metodologie di progetto Metodologie top-down e bottom-up.
Ricerca sequenziale in un array di interi
Array (ordinamento) CORDA – Informatica A. Ferrari.
Definizione di algoritmo: Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile.
13 ottobre Decisioni F. Bombi 13 ottobre 2002.
Temp. Esercizio DataSet Generare 100 numeri interi casuali tra 1 e Visualizzare la loro media e il valore massimo. A questo scopo realizzare la.
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
30/10/01Array 1  Un array e’ una struttura dati che contiene piu’ valori del medesimo tipo.  La lunghezza di un array e’ stabilita quando l’array viene.
6/11/01Ordinamento 1 Un esempio di algoritmi: ordinamento.
VETTORI: DEFINIZIONI Se ad una grandezza fisica G si associa una direzione ed un verso si parla di vettori: ✔ Le grandezze fisiche possono essere di due.
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Maurizio Cozzetto, Francesco Sarasini
Testing.
10. Programmazione Ricorsiva Ing. Simona Colucci
Algoritmi e Strutture Dati
Scoperta guidata di tipici algoritmi: selection sort, bubble sort ….
TIPI PRIMITIVI TIPI STRUTTURATI
Programmazione strutturata
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Algoritmi e Strutture Dati
Informazioni globali nelle pagine HTML
Lezione 9 – A.A. 2016/2017 Prof. Giovanni Acampora
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Java World Cicli e Array.
INFORMATICA DI BASE I FONDAMENTI.
Corso Java Cicli e Array.
iterazione o ricorsione nel pensare per OGGETTI
Process synchronization
Strutture di Controllo
Process synchronization
Scrivere programmi corretti
Fondamenti di Informatica
Iterazione Vs Ricorsione
Ricorsione 16/01/2019 package.
Alberi n-ary Lezioni di C.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
APPUNTI SUL LINGUAGGIO C
comprensione e modifica di codice
Corso di Informatica 2 a.a. 2003/04 Lezione 2
APPUNTI SUL LINGUAGGIO C Esercizi sugli array e strutture
comprensione e modifica di codice
Algoritmi e Strutture Dati
Strategie di progetto Si possono utilizzare le strategie tipiche dello sviluppo di un processo di ingegnerizzazione (es. ingegneria del software). Strategie.
APPUNTI SUL LINGUAGGIO C
MergeSort Usa la tecnica del divide et impera:
Ese 2 (del 31 Marzo 2004).
concetti ed applicazioni
Array Un array è un contenitore “contiene” al massimo un numero predefinito di oggetti dello stesso tipo. Ogni oggetto dell'array è detto “elemento” Ad.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Process synchronization
Dalla programmazione tradizionale al paradigma OO
Process synchronization
Ricerca 01/08/2019 package.
La programmazione strutturata
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Script su vettori Realizza uno script che chiede in input una dimensione d e crea un vettore di d numeri interi casuali. Poi calcola la somma dei due numeri.
Corso di Fondamenti di Informatica
Transcript della presentazione:

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 processo di astrazione (cioè trascurando i dati non essenziali), si giunge a conclusioni di carattere generale con formulazione di proprietà generali. Un esempio di tecnica bottom-up in ambito informatico: dal particolare (semplici istruzioni), con processo di integrazione, si realizzano moduli più complessi fino alla soluzione del problema (algoritmo oppure programma)

Top-down Una metodologia di trattamento dei problemi per scomposizione  sviluppo degli algoritmi per raffinamenti successivi. Dal problema complesso … … scomponendo in sottoproblemi più semplici … si risolve un problema elementare spesso di soluzione già nota

Top-down o Bottom-up ? Sviluppo SW realizzazioni HW

Top-down o Bottom-up ? Dalla chiara idea delle funzionalità della scheda … si progetta e realizza la scheda Dalla conoscenza del funzionamento dei singoli componenti

La ricorsione giocando con la Torre di Hanoi Scomporre un problema, via via, in problemi più semplici ….. fino ad una mossa elementare spostare un disco

Torre di Hanoi Gioco in JavaScript

Ci chiediamo: è sempre possibile effettuare uno spostamento, qualunque sia il numero dei dischi ? La risposta è sì altro

La soluzione (ricorsiva) Per spostare N dischi dalla torre di sinistra alla torre di destra basta: supporre di saper spostare gli N-1 dischi superiori dalla torre iniziale alla torre di transito; spostare il disco rimasto sulla torre iniziale in quella di destinazione; spostare gli N-1 dischi dalla torre di transito alla torre di destinazione. ossia il problema di grado N si può scomporre in due problemi di grado N-1, più una mossa elementare i problemi di grado N-1 possono essere affrontati nello stesso modo riducendo via via il grado del problema. Si giungerà a dover spostare dischi singoli (mossa elementare)

Metodi iterativi e ricorsivi public static boolean palindromoIterativo (int a[]) { for (int i = 0; i < a.length/2; i++) if (a[i] != a[a.length-1-i]) return false; return true; } public static boolean palindromoRicorsivo (int a[], int inf, int sup) { if (inf >= sup) return true; if (a[inf] != a[sup]) return false; return palindromoRicorsivo(a,inf+1,sup-1); } public static void main(String[] args) { System.out.println(" Quanti elementi conterra' l'array? "); int v[] = new int[input.nextInt()]; leggiArray(v); // metodo static per leggere gli elementi dell’array if (palindromoIterativo(v)) System.out.println(" Verifica iterativa : l'array e' palindromo! "); else System.out.println(" Verifica iterativa : l'array NON e' palindromo... "); if (palindromoRicorsivo(v, 0, v.length-1)) System.out.println(" Verifica ricorsiva : l'array e' palindromo! "); else System.out.println(" Verifica ricorsiva : l'array NON e' palindromo... "); } } Online

Somma ricorsiva Scrivere una funzione ricorsiva che calcoli la somma degli elementi di un array a[1..n] di n≥1 interi. Soluzione: Algoritmo ricorsivo (Caso Base) Se l’array è vuoto (n pari a 0) allora la somma dei suoi elementi è zero (Passo generico) Se l’array [a1,...,an] non è vuoto allora la somma dei suoi elementi è data da an più la somma degli elementi di [a1,...,an−1] public int somma (int a[], int n){ if (n<0) return 0; else return a[n] + somma(a, n-1); } Testare per a = {2, 4, 7, 5} con chiamata nomeOgg.somma (a, a.length-1) In Java: indice da 0 ad n-1 con n == -1 si intende termine

Somma iterativa/ricorsiva Sommare elementi di un array Metodo iterativo Metodo ricorsivo public int somma (int a[]){ int somma = 0; for(int i = 0; i<a.length; i++) somma = somma + a[i]; return somma; } public int somma (int a[], int n){ if (n<0) return 0; else return a[n] + somma(a, n-1); Chiamata nomeOgg.somma (a) nomeOgg.somma (a, a.length-1)

Somma: polimorfismo e ricorsione

Algoritmi iterativi e ricorsivi Frattale dal latino fractus (rotto o frammentato)

Triangolo di Sierpiński Listing in Java

La curva di Koch: uno dei primi frattali prima iterazione o ricorsione seconda iterazione o ricorsione figura iniziale terza iterazione o ricorsione quarta iterazione o ricorsione

La curva di Koch o fiocco di neve La funzione riceve le coordinate che identificano la linea "iniziale" ed il numero delle ricorsioni da eseguire (i). All'inizio dell'esecuzione si verifica la condizione di terminazione, vale a dire, se la funzione deve richiamare se stessa. Se la condizione di terminazione non è stata raggiunta, si divide la linea nelle quattro sezioni necessarie. Si procede con chiamata della funzione in modo ricorsivo per ciascuna delle sezioni: ogni volta riducendo il numero delle ricorsioni. Listing in Java

La curva di Koch o fiocco di neve Partendo da un triangolo equilatero: ad ogni passo, su ogni lato , si costruiscono triangoli equilateri con lato 1/3 del precedente Per approfondire: “Frattale” wikipedia Interessanti video e dispense

Immagini di frattali nella home del sito dell’Istituto Tab 0 Tab 1 Tab 2 Tab 3 Tab 4 Tab 5 Tab 6 fondo_11 fondo_12 fondo_13 fondo_14 fondo_15 fondo_16 fondo_17

Listing (applicazioni Java): disegnando su bottoni oppure pannelli inseriti in JTabbedPane