Ricorsione e Debug.

Slides:



Advertisements
Presentazioni simili
Nel sistema operativo MS-DOS il comando cd.. (change directory), serve a cambiare cartella. Il comando rd (remove directory), serve a rimuovere una cartella.
Advertisements

Esercizio Usate il ciclo repeat until (controllo post condizionale) per simulare il prodotto N x M con M somme di N. Esempio: 5 x 3 equivale a fare 5 +5.
Informatica 22/03/2012.
Lezione 8 Anno accademico Titolare corso: Prof. Costanza Torricelli
LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.
PROGRAMMARE IN PASCAL (le basi)
Le funzioni UD. 8 – Lorganizzazione dei programmi p. 309 LS Tron 4TC 06/07.
I File di testo in Pascal
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Dipartimento di Matematica
Type Checking (1° parte)
Algoritmi e Programmazione
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
numero rette n numero parti piano f(n) f(n -1)n -1 f(n -1) + nn numero parti piano f(n) numero rette n.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
Laboratorio di informatica: ASSEMBLER
Università degli Studi di Bergamo Facoltà di Lingue e Letterature Straniere Facoltà di Lettere e Filosofia A.A Informatica generale 1 Appunti.
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
Corso di Laurea in Biotecnologie Informatica (Programmazione)
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Indipendenza lineare,
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Primo esercizio Scrivere un programma che legge da input
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Il linguaggio Fortran 90: 2. Istruzioni di Controllo
Il linguaggio Fortran 90: 5. Formato di I/O e Files
Introduzione alla programmazione lll
APPUNTI SUL LINGUAGGIO C
Algoritmi su Tipi Semplici
Istruzioni Decisionali
Istruzioni Iterative Nicola Fanizzi
memoria gestita staticamente:
OPERAZIONI CON STRINGHE Le operazioni più interessanti da fare, per ora, con le stringhe sono: determinare la lunghezza della stringa, cioè quanti caratteri.
CAPITOLO 7.
FILE TESTO OUTPUT INPUT + DATI PROGRAMMA OUTPUT INPUT PROGRAMMA CARICAMENTO DATI FILE DATI.
CAPITOLO 6.
Le funzioni.
Espressioni condizionali
Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per lambiente e il territorio Ambienti di programmazione Stefano Cagnoni e Monica Mordonini.
07EIPCH AA 2008/09 Paolo Bernardi Code::Blocks minimal HowTo Paolo Bernardi.
Per costruire unapplicazione occorre compilare il file (o i file se più duno) che contengono il testo del programma (file sorgente) Il risultato sono uno.
ELEMENTI DI PROGRAMMAZIONE
TURBOPASCAL …. ripassiamo - prof. V. Riboldi -.
Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Si vuole che lesecutore coniughi non solo il presente indicativo ma anche limperfetto e il passato remoto Acquisisci tempo presente imperfetto passato.
Lo sviluppo del software e i linguaggi di programmazione
matematico greco del III° secolo a.c.,
BIOINFO3 - Lezione 331 SUBROUTINE IN PERL Una subroutine (funzione, metodo, procedura o sottoprogramma), e` una prozione di codice all`interno di un programma.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
TURBOPASCAL …. ripassiamo - prof. V. Riboldi -.
- prof. V. Riboldi - SOTTOPROGRAMMI IN TPASCAL METODO TOP DOWN.
RISOLUZIONE DI EQUAZIONI
PLSQL 1.1 LA REALIZZAZIONE DI APPLICAZIONI Quattro parti: Gestione dati Business rules Logica applicativa Interfaccia utente Molte possibili architetture.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Allievi Elettrici - AA Le funzioni ricorsive in C
PROVA INTERCORSO MOD.B a.a RICORSIONE ESERCIZI A1.1-A1.6.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Lez. 11 (13/14)Elementi di Programmazione1 Lezione 11 Esercizi.
Interpreti e compilatori
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
INTRODUZIONE A MATLAB LEZIONE 2 Sara Poltronieri.
Informatica e Informatica di Base
Procedure - Funzioni. Procedure e funzioni Parti di programma a cui è associato un nome e che può essere attivata mediante una chiamata. Le funzioni a.
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
Copyright © Istituto Italiano Edizioni Atlas
Ciclo for nei linguaggi di programmazione. Nei linguaggi di programmazione, il ciclo for è una struttura di controllo iterativa che determina l'esecuzione.
Samuele Marino. Cos’è il Repeat Until?  In Pascal, il Repeat Until è un ciclo che consiste nel ripetere (Repeat) una o più istruzioni fino a quando (Until)
Transcript della presentazione:

Ricorsione e Debug

Fattoriale function fatt (n: integer): integer; begin if n=0 then else fatt:= n* fatt (n-1); end; Begin readln(numero); writeln(’Il fattoriale e’’ ’, fatt(numero); Readln; End;

Fattoriale di n=4 Risultato: 24 function fatt (n: integer): integer; begin if n=0 then fatt:=1 else fatt:= n* fatt (n-1); end; numero n Fatt(4) Fatt(3) Fatt(2) Fatt(1) 4 4*fatt(3) 3*fatt(2) 2*fatt(1) 1*fatt(0)=1 2*1=2 3*2=6 4*6=24 Risultato: 24

Esercizio Scrivere una funzione che data una stringa, restituisca la stringa invertita. Se x= abraca L’output è acarba

Esercizio Scrivere una funzione che data una stringa, restituisca la stringa invertita. var n:integer; //Variabile globale P:string; function inverti(parola:string):string; var V:char; begin if length(parola)=1 then inverti:=parola else V:=parola[1]; delete(parola,1,1); inverti:=inverti(parola) + V; end; writeln('inserisci la parola'); readln(P); n:=length(p); writeln('La parola invertita e'' ', inverti(P)); readln; end.

La parola invertita e’ acarba inverti(‘a’) inverti:= ‘a’ inverti(‘ca’) v=‘c’ parola=‘a’ inverti:=‘a’ + ‘c’ = ‘ac’ inverti(‘ca’) v=‘c’ parola=‘a’ inverti:=inverti(‘a’)+ ‘c’ Program stringaInversa; var P:string; function inverti(parola:string):string; var V:char; begin if length(parola)=1 then inverti:=parola else V:=parola[1]; delete(parola,1,1); inverti:=inverti(parola) + V; end; writeln('inserisci la parola'); readln(P); writeln('La parola invertita e'' ', inverti(P) ); readln; end. inverti(‘aca’) v=‘a’ parola=‘ca’ inverti:= ‘ac’ + ‘a’=‘aca’ inverti(‘aca’) v=‘a’ parola=‘ca’ inverti:=inverti(‘ca’)+ ‘a’ inverti(‘raca’) v=‘r’ parola=‘aca’ inverti:=inverti(‘aca’)+ ‘r’ inverti(‘raca’) v=‘r’ parola=‘aca’ inverti:=‘aca’+ ‘r’=‘acar’ inverti(‘braca’) v=‘b’ parola=‘raca’ inverti:=inverti(‘raca’)+ ‘b’ inverti(‘braca’) v=‘b’ parola=‘raca’ inverti:=‘acar’ + ‘b’ = ‘acarb’ inverti(‘abraca’) v=‘a’ parola=‘braca’ inverti:=inverti(‘braca’)+ ’a’ inverti(‘abraca’) v=‘a’ parola=‘braca’ inverti:=‘acarb’ +’a’ = acarba stringaInversa P =‘abraca’ inverti(P) = acarba stringaInversa P =‘abraca’ inverti(P) La parola invertita e’ acarba

Che succede? var P:string; function inverti(parola:string;):string; var V:char; begin if length(parola) then inverti:=parola else V:=parola[1]; delete(parola,1,1); inverti:= v + inverti(parola); end; writeln('inserisci la parola'); readln(P); writeln('La parola invertita e'' ', inverti(P) ); readln; end.

Debug Il debugger integrato dà al programmatore il controllo sull’esecuzione del codice. Utile soprattutto quando ci sono errori logici non facili da individuare. Durante il debug, una barra di esecuzione evidenzia la successiva istruzione del codice da eseguire. Go TO CURSOR (F4): permette di interrompere momentaneamente il programma nel punto specificato dal cursore. BREAKPOINT: punto prefissato in una riga del codice sorgente che interrompe momentaneamente l’esecuzione. I breakpoint vanno prefissati e rimangono finchè non vengono rimossi, mentre il Go to Cursor dipende dalla posizione corrente del cursore. Il breakpoint (o il cursore) deve essere posizionato su righe contenenti un’istruzione eseguibile, quindi non su righe vuote, righe di commento, direttive del compilatore, dichiarazioni dei dati o altre parti non eseguibili dal programma.

Esecuzione passo per passo TRACE INTO (F7): consente di eseguire un’istruzione alla volta. In particolare esegue quella evidenziata dalla barra di esecuzione, sposta la barra sull’istruzione successiva e restituisce il controllo al programmatore. Se la riga su cui si trova la barra è una procedura o una funzione, Trace into salta a quella parte del programma continuandone l’esecuzione passo per passo. STEP OVER (F8): attiva l’esecuzione del programma una riga alla volta, ma a differenza di Trace Into tralascia le chiamate alle procedure e alle funzioni. In pratica esegue la procedura o la funzione in una singola istruzione (come se fosse una semplice istruzione), sposta la barra di esecuzione nell’istruzione successiva e restituisce il controllo al programmatore.

Controllare variabili e stack WATCH: è un riquadro che consente di controllare il contenuto di una o più variabili scelte dal programmatore. Può visualizzare solo il contenuto delle variabili dove esse sono visibili (regole di visibilità). LOCAL VARIABLES: è un riquadro che contiene tutte e sole le variabili locali della procedura o funzione in cui si trova la barra dell’esecuzione. CALL STACK: è un riquadro che permette di controllare il percorso effettuato dal programma fino al punto in esame. E’ un elenco in ordine discendente di tutte le precedenti chiamate alle procedure o alle funzioni.

Debug - Esempi Procedura (Procedura annidata) Funzione (ParametriEglobale) Funzione (EC) Vettori e Record (elenco) Procedura ricorsiva (TrovaPosizioneMinimo) Funzione ricorsiva (stringaInversa)

Cosa stampa? Cosa stampa? program EC; {$APPTYPE CONSOLE} uses SysUtils; var b, ris: integer; Function doppio(Var a: integer): integer; begin a:=2*a; doppio:=a; end; b:=3; ris:=2* doppio (b); writeln('Primo risultato: ', ris); writeln; ris:= doppio (b) + doppio (b); writeln ('Secondo risultato: ', ris); readln; end. Cosa stampa? Cosa stampa?

Primo risultato: ris:=2*doppio (B) 3 A B 3 Function doppio (Var a: integer): integer; begin a:=2*a; doppio:=a; end; A B 6 La funzione doppio(b) = 2 ris = 2 * 6 = 12 Quindi writeln('Primo risultato: ', ris); stampa Primo risultato: 12

Secondo risultato: ris:=doppio(B)+doppio(B) 3 Function doppio (Var a: integer): integer; begin a:=2*a; doppio:=a; end; A B 3 A B 6 La funzione doppio(B) = 6 Ris = 6 + doppio(B) B 6 A B 6 A B 12 La funzione doppio(B) = 12 Risultato = 6 + 12 = 18