Suggerimenti [1d5] SE la prima lettera della matrice (in alto a sinistra, matrice[0,0]) è diversa dalla prima lettera della parola (parola[0]) ALLORA siamo.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

INFORMATICA Altre Istruzioni di I/O
Macchine di Turing e ricorsività generale
Il problem-solving Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino.
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Informatica Recupero debito quarto anno Terzo incontro.
Array multidimensionali
Procedure e funzioni A. Ferrari.
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
Procedure e funzioni ricorsive
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Fondamenti di Informatica CDL in Ingegneria Gestionale (B)- A.A CDL in Ingegneria Gestionale (B)- A.A Programmazione Ricorsiva.
Lez. 31 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
Lez. 41 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
RICONOSCIMENTO DI SEQUENZE DI EVENTI
FUNZIONI DI BIBLIOTECA
1 HTML - I Frame Laboratorio di Applicazioni Informatiche II mod. A.
Eccezioni Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
Esercizi su alberi binari
Corso di Fondamenti di programmazione a.a.2009/2010
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di Programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli Corso.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB.
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Introduzione agli Automi Cellulari
Esercizi su pile Scrivere una funzione che restituisca una nuova pila che contiene i valori di una pila in ingresso in ordine inverso. La pila originale.
Esercizi su alberi binari
Quel che è certo.
FUNZIONI: IL MODELLO APPLICATIVO 1) Valutazione, nellenvironment corrente, del simbolo che denota il nome della funzione; 2) Valutazione, nellenvironment.
DEFINIZIONE DI NUOVE FUNZIONI & STRATEGIE DI COMPOSIZIONE La capacità di definire nuove funzioni permette: di definire nuove operazioni di introdurre variabili.
LAPPROCCIO FUNZIONALE Obiettivo: esprimere la soluzione di un problema sotto forma di funzione. Quali funzioni primitive? Quali meccanismi di combinazione?
ESERCIZIO: la Torre di Hanoi
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Algoritmi di String Matching
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
Un approccio soft per i primi tre anni della primaria
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Script 1 Marco D. Santambrogio – Ver. aggiornata al 2 Dicembre 2013.
Esercizi su File e Liste
BIOINFO3 - Lezione PARSING RISULTATI DI BLAST Nella lezione di ieri abbiamo visto come automatizzare lesecuzione di BLAST. Oggi proviamo.
BIOINFO3 - Lezione 331 SUBROUTINE IN PERL Una subroutine (funzione, metodo, procedura o sottoprogramma), e` una prozione di codice all`interno di un programma.
Ricorsione Strumento potente per definizioni matematiche
Milano, 17 Dicembre 2013 Informatica B Informatica B Matlab Laboratorio del 14/01/2014 Responsabili di laboratorio: Gianluca Durelli:
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Cicli ed asserzioni Corso di Informatica 2 a.a. 2003/04 Lezione 1.
1 Record, tabelle, relazioni F. Bombi 1 novembre 2001.
La ricorsione.
Arduino: introduzione alla programmazione
Misure ed Errori.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Allievi Elettrici - AA Le funzioni ricorsive in C
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 27 Marzo 2015.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Marzo 2014.
IL QUESITO DELLA SUSI n° 861
Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Clipping Antonio Cisternino Parte di queste slides sono a cura del Dott. Cignoni.
Codici prefissi Un codice prefisso è un codice in cui nessuna parola codice è prefisso (parte iniziale) di un’altra Ogni codice a lunghezza fissa è ovviamente.
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
Forma normale delle equazioni di 2° grado Definizione. Un'equazione di secondo grado è in forma normale se si presenta nella forma Dove sono numeri.
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
DIPENDENZA STATISTICA TRA DUE CARATTERI Per una stessa collettività può essere interessante studiare più caratteri presenti contemporaneamente in ogni.
Sistemi di equazioni lineari. Sistemi di primo grado di due equazioni a due incognite Risolvere un sistema significa trovare la coppia di valori x e y.
Impariamo ad usare Excel. Utilizzare l’interfaccia Avviare Excel e iniziare ad esplorare l'interfaccia per acquisire familiarità con esso… Non c'è modo.
Logica Lezione 8, DISTRIBUIRE COMPITO 1.
10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Logica Lezione 11, Annuncio Non si terrà la lezione di Lunedì 16 Marzo.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Albero ricoprente di costo minimo Lezione n°12.
Transcript della presentazione:

Suggerimenti [1d5] SE la prima lettera della matrice (in alto a sinistra, matrice[0,0]) è diversa dalla prima lettera della parola (parola[0]) ALLORA siamo già sicuri di non poter individuare la parola nella matrice

Suggerimenti [2d5] SE (parola[0]==matrice[0,0]) ALLORA il problema si riduce a verificare se il resto della parola è individuabile a partire da matrice[0,1] (ricerca verso destra), OPPURE da matrice[1,0] (ricerca verso il basso)

Suggerimenti [3d5] SE la parola è lunga un solo carattere ALLORA il problema diventa molto semplice

Suggerimenti [4d5] OVVIAMENTE, Nell'esplorare la matrice dobbiamo porre la massima cautela nel non superare le colonne d'Ercole, dato che la matrice possiede un numero finito di righe e di colonne

Suggerimenti [5d5] Dicotomia: Iterazione Vs. Ricorsione Un approccio iterativo potrebbe Esplorare la matrice muovendo due indici [r,c] Tenere traccia delle porzioni di parola individuate Marcare le posizioni che non possono costituire soluzione, o che pur potendo non la costituiscono Fare backtrack quando necessario Sì ma.. la ricorsione si offre di gestire per noi, e gratis, il meccanismo di nesting/backtracking!

L'Algoritmo [1d5] Si tratta di una funzione ricorsiva, il cui prototipo minimo può essere qualcosa di simile al seguente string f (int r, int c, string p, string o) L'idea è che la funzione restituisca una stringa che descrive il cammino che dalla posizione [r,c] individua la parola p, considerando che si è già svolto un certo cammino o per arrivare in posizione [r,c]

L'Algoritmo [2d5] string f (int r, int c, string p, string o) r: indice della riga in cui iniziare la ricerca c: indice della colonna in cui iniziare la ricerca p: parola da ricercare o: cammino parziale percorso fino a quel momento per giungere in posizione [r,c]

L'Algoritmo [3d5] La prima chiamata f(0, 0, parola, “”) Una chiamata ricorsiva “destra” f(r, c+1, parola+1, [?]) Una chiamata ricorsiva “basso” f(r+1, c, parola+1, [?]).. E questo misterioso quarto parametro?

L'Algoritmo [4d5] Il quarto parametro è il cammino (dentro la matrice) che via via costruiamo, e che alla fine costituirà l'output del problema L'idea è che ad ogni chiamata della funzione f le venga passato il cammino attuale inteso come testimonianza del come si è giunti al punto [r,c]

L'Algoritmo [5d5] La funzione valuterà se da quel punto una soluzione è impossibile (e in caso restituirà il valore ASSENTE), altrimenti arricchirà il cammino passato della mossa del caso, e restituirà il tutto come risultato della funzione Il susseguirsi delle chiamate ricorsive nell'inevitabilmente giusto ordine costruirà il cammino (se il cammino esiste, altrimenti sarà restituito ASSENTE)

I dettagli [1d4] In pieno spirito OII non eseguiamo alcun controllo di validità sui dati di ingresso semplicemente, assumiamo siano corretti ;-)

I dettagli [2d4] Si noti che dal file di input leggiamo stringhe di testo (riga per riga), che però poi disponiamo in una matrice quadrata di caratteri

I dettagli [3d4] Abbiamo scelto di utilizzare la “A” come carattere di output, oltre a “D” (destra) e “B” (basso) “A” sta per “assente”, e ricevere dalla funzione f una “A” come esito indica che quella sottoricerca è fallita

I dettagli [4d4] Estendiamo la libreria di input/output string leggiStringa(void) { string x; in >> x; return x; } void scriviStringa(string x) { out << x; }