61
Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsione e Debugging) Prof. Christian Esposito Corso di Laurea in Ingegneria Meccanica e Gestionale (Classe I) A.A. 2017/18 Introduzione alla programmazione in MATLAB: Parte 3

Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

FondamentidiInformaticaIntroduz ionea l la programmazione in MATLAB: Parte 3 (La R icors ione eDebugging)

Prof. Chr i st ian Espos i to

Corso d i Laurea in Ingegner ia Meccanica e Gest iona le (C lasse I )

A .A . 2017/18

IntroduzioneallaprogrammazioneinMATLAB:Parte3

Page 2: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

◦ Laricorsione - Principibase◦ CasoStudio1:Fattoriale◦ CasoStudio2:Fibonacci

◦ DebuggingdeiProgrammiMATLAB

IntroduzioneallaprogrammazioneinMATLAB:Parte3

IntroduzioneallaprogrammazioneinMATLAB:Parte3

OUTLINE

02/61

Page 3: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Ilconcettodiricorsione ininformaticasiriconduceaquellodiinduzionematematica.

Sia P un predicato sull’insieme N dei numerinaturali e sia vero il predicato P(0); se per ogni Kintero, dal predicato P(k) discende la verità diP(k+1) allora P(n) è vero per qualsiasi n.

Principibase(1)

IntroduzioneallaprogrammazioneinMATLAB:Parte3 03/61

Page 4: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Principibase(2)

IntroduzioneallaprogrammazioneinMATLAB:Parte3

La dimostrazione induttiva avviene in due passi:o Passo base : dimostrare P(0)=vero;o Passo induttivo: dimostrare che per ogni

k>0, si ha cheP(k) P(k+1)

Così come nel principio di induzione la verità diP(k+1) discende dalla verità dello stesso predicatoP(k), il calcolo di un funzione ricorsiva avvienemediante il calcolo della stessa funzione in unpasso successivo.

04/61

Page 5: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(1)◦ Ilfattorialediunintero(positivo)n,indicatoconn!,èilprodottodituttigliinteripositiviminoriougualidin (sinotiche0!=1)

IntroduzioneallaprogrammazioneinMATLAB:Parte3 05/61

Page 6: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(1)◦ Ilfattorialediunintero(positivo)n,indicatoconn!,èilprodottodituttigliinteripositiviminoriougualidin(sinotiche0!=1)

𝑛! = %𝑖'

()*

IntroduzioneallaprogrammazioneinMATLAB:Parte3 06/61

Page 7: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(1)◦ Ilfattorialediunintero(positivo)n,indicatoconn!,èilprodottodituttigliinteripositiviminoriougualidin (sinotiche0!=1)

𝑛! = %𝑖'

()*

= 1 ∗ 2 ∗ 3 ∗ …∗ 𝑛 − 1 ∗ 𝑛

IntroduzioneallaprogrammazioneinMATLAB:Parte3 07/61

Page 8: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(1)◦ Ilfattorialediunintero(positivo)n,indicatoconn!,èilprodottodituttigliinteripositiviminoriougualidin (sinotiche0!=1)

𝑛! = %𝑖'

()*

= 1 ∗ 2 ∗ 3 ∗ …∗ 𝑛 − 1 ∗ 𝑛

%𝑖'12

()*

IntroduzioneallaprogrammazioneinMATLAB:Parte3 08/61

Page 9: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(1)◦ Ilfattorialediunintero(positivo)n,indicatoconn!,èilprodottodituttigliinteripositiviminoriougualidin (sinotiche0!=1)

𝑛! = %𝑖'

()*

= 1 ∗ 2 ∗ 3 ∗ …∗ 𝑛 − 1 ∗ 𝑛

%𝑖'12

()*

𝑛 − 1 !

IntroduzioneallaprogrammazioneinMATLAB:Parte3 09/61

Page 10: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(1)◦ Ilfattorialediunintero(positivo)n,indicatoconn!,èilprodottodituttigliinteripositiviminoriougualidin (sinotiche0!=1)

◦Definizionericorsiva(parziale):

𝑛! = 𝑛 − 1 ! ∗ 𝑛

IntroduzioneallaprogrammazioneinMATLAB:Parte3 10/61

Page 11: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(2)◦Definizionericorsiva:

𝑛! = 3 1, 𝑠𝑒𝑛 = 0 𝑛 − 1 ! ∗ 𝑛, 𝑠𝑒𝑛 > 0

IntroduzioneallaprogrammazioneinMATLAB:Parte3 11/61

Page 12: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(2)◦Definizionericorsiva:

𝑛! = 3 1, 𝑠𝑒𝑛 = 0 𝑛 − 1 ! ∗ 𝑛, 𝑠𝑒𝑛 > 0

Casobase

IntroduzioneallaprogrammazioneinMATLAB:Parte3 12/61

Page 13: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(2)◦Definizionericorsiva:

𝑛! = 3 1, 𝑠𝑒𝑛 = 0 𝑛 − 1 ! ∗ 𝑛, 𝑠𝑒𝑛 > 0

Casobase

Ilcasobaseènecessarioaffinchélaricorsione terminiinvecediavereuna

«ricorsione infinita»

IntroduzioneallaprogrammazioneinMATLAB:Parte3 13/61

Page 14: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(2)◦Definizionericorsiva:

𝑛! = 3 1, 𝑠𝑒𝑛 = 0 𝑛 − 1 ! ∗ 𝑛, 𝑠𝑒𝑛 > 0

Casobase

Ilcasobaseènecessarioaffinchélaricorsione terminiinvecediavereuna

«ricorsione infinita»

Nelnostroesempio,sen èugualea0,alloralafunzionerestituirà1(datoche0!=1)

IntroduzioneallaprogrammazioneinMATLAB:Parte3 14/61

Page 15: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(2)◦Definizionericorsiva:

𝑛! = 3 1, 𝑠𝑒𝑛 = 0 𝑛 − 1 ! ∗ 𝑛, 𝑠𝑒𝑛 > 0

Versionepiùsemplicedelladefinizione

IntroduzioneallaprogrammazioneinMATLAB:Parte3 15/61

Page 16: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(3)◦ CodiceMATLAB

𝑛! = 3 1, 𝑠𝑒𝑛 = 0 𝑛 − 1 ! ∗ 𝑛, 𝑠𝑒𝑛 > 0

function [n_fact] = fattoriale_ricorsivo(n)if n == 0

n_fact = 1;else

n_fact = fattoriale_ricorsivo(n - 1) * n; end

end

IntroduzioneallaprogrammazioneinMATLAB:Parte3 16/61

Page 17: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(3)◦ CodiceMATLAB

𝑛! = 3 1, 𝑠𝑒𝑛 = 0 𝑛 − 1 ! ∗ 𝑛, 𝑠𝑒𝑛 > 0

function [n_fact] = fattoriale_ricorsivo(n)if n == 0

n_fact = 1;else

n_fact = fattoriale_ricorsivo(n - 1) * n; end

end

Invocazionericorsiva

IntroduzioneallaprogrammazioneinMATLAB:Parte3 17/61

Page 18: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(4)◦ Dietrolequinte...

fattoriale_ricorsivo(4)

IntroduzioneallaprogrammazioneinMATLAB:Parte3 18/61

Page 19: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(4)◦ Dietrolequinte...

fattoriale_ricorsivo(4)

IntroduzioneallaprogrammazioneinMATLAB:Parte3 19/61

Page 20: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(4)◦ Dietrolequinte...

fattoriale_ricorsivo(4)

4 * fattoriale_ricorsivo(3)

IntroduzioneallaprogrammazioneinMATLAB:Parte3 20/61

Page 21: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(4)◦ Dietrolequinte...

fattoriale_ricorsivo(4)

4 * fattoriale_ricorsivo(3)

3 * fattoriale_ricorsivo(2)

IntroduzioneallaprogrammazioneinMATLAB:Parte3 21/61

Page 22: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(4)◦ Dietrolequinte...

fattoriale_ricorsivo(4)

4 * fattoriale_ricorsivo(3)

3 * fattoriale_ricorsivo(2)

2 * fattoriale_ricorsivo(1)

1 * fattoriale_ricorsivo(0)

IntroduzioneallaprogrammazioneinMATLAB:Parte3 22/61

Page 23: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(4)◦ Dietrolequinte...

fattoriale_ricorsivo(4)

4 * fattoriale_ricorsivo(3)

3 * fattoriale_ricorsivo(2)

2 * fattoriale_ricorsivo(1)

1 * fattoriale_ricorsivo(0)

1 (Casobaseà 0!=1)

IntroduzioneallaprogrammazioneinMATLAB:Parte3 23/61

Page 24: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(4)◦ Dietrolequinte...

fattoriale_ricorsivo(4)

4 * fattoriale_ricorsivo(3)

3 * fattoriale_ricorsivo(2)

2 * fattoriale_ricorsivo(1)

1 * fattoriale_ricorsivo(0)

1(Casobaseà 0!=1)

Output

1

IntroduzioneallaprogrammazioneinMATLAB:Parte3 24/61

Page 25: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(4)◦ Dietrolequinte...

fattoriale_ricorsivo(4)

4 * fattoriale_ricorsivo(3)

3 * fattoriale_ricorsivo(2)

2 * fattoriale_ricorsivo(1)

1 * 1

Output

1

IntroduzioneallaprogrammazioneinMATLAB:Parte3 25/61

Page 26: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(4)◦ Dietrolequinte...

fattoriale_ricorsivo(4)

4 * fattoriale_ricorsivo(3)

3 * fattoriale_ricorsivo(2)

2 * 1

Output

2

IntroduzioneallaprogrammazioneinMATLAB:Parte3 26/61

Page 27: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(4)◦ Dietrolequinte...

fattoriale_ricorsivo(4)

4 *

Output

246

IntroduzioneallaprogrammazioneinMATLAB:Parte3 27/61

Page 28: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fattoriale(4)◦ Dietrolequinte...

>> f = fattoriale_ricorsivo(4)

f =24

IntroduzioneallaprogrammazioneinMATLAB:Parte3 28/61

Page 29: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fibonacci(1)◦ Nella successione di Fibonacci, ogni valore Fib(n)(n >= 0) è espresso come la somma dei dueprecedenti valori◦ Si noti che Fib(0) = 0 e Fib(1) = 1

◦Definizionericorsiva:

𝐹𝑖𝑏 𝑛 = ;0 𝑠𝑒𝑛 = 01 𝑠𝑒𝑛 = 1

𝐹𝑖𝑏 𝑛 − 1 + 𝐹𝑖𝑏(𝑛 − 2) 𝑠𝑒𝑛 ≥ 2

0, 1, 1, 2, 3, 5, 8, 13, 21, …

IntroduzioneallaprogrammazioneinMATLAB:Parte3 29/61

Page 30: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fibonacci(2)◦Definizionericorsiva:

𝐹𝑖𝑏 𝑛 = ;0 𝑠𝑒𝑛 = 01 𝑠𝑒𝑛 = 1

𝐹𝑖𝑏 𝑛 − 1 + 𝐹𝑖𝑏(𝑛 − 2) 𝑠𝑒𝑛 ≥ 2

IntroduzioneallaprogrammazioneinMATLAB:Parte3 30/61

Page 31: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fibonacci(2)◦Definizionericorsiva:

Casibase

𝐹𝑖𝑏 𝑛 = ;0 𝑠𝑒𝑛 = 01 𝑠𝑒𝑛 = 1

𝐹𝑖𝑏 𝑛 − 1 + 𝐹𝑖𝑏(𝑛 − 2) 𝑠𝑒𝑛 ≥ 2

IntroduzioneallaprogrammazioneinMATLAB:Parte3 31/61

Page 32: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fibonacci(2)◦Definizionericorsiva:

Versionepiùsemplicedelladefinizione

𝐹𝑖𝑏 𝑛 = ;0 𝑠𝑒𝑛 = 01 𝑠𝑒𝑛 = 1

𝐹𝑖𝑏 𝑛 − 1 + 𝐹𝑖𝑏(𝑛 − 2) 𝑠𝑒𝑛 ≥ 2

IntroduzioneallaprogrammazioneinMATLAB:Parte3 32/61

Page 33: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fibonacci(3)◦ CodiceMATLAB

function [valore] = fibonacci_ricorsivo(n)if n == 0

valore = 0;elseif n == 1;

valore = 1;else

valore = fibonacci_ricorsivo(n - 1) + fibonacci_ricorsivo(n - 2);end

end

𝐹𝑖𝑏 𝑛 = ;0 𝑠𝑒𝑛 = 01 𝑠𝑒𝑛 = 1

𝐹𝑖𝑏 𝑛 − 1 + 𝐹𝑖𝑏(𝑛 − 2) 𝑠𝑒𝑛 ≥ 2

IntroduzioneallaprogrammazioneinMATLAB:Parte3 33/61

Page 34: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fibonacci(3)◦ CodiceMATLAB

function [valore] = fibonacci_ricorsivo(n)if n == 0

valore = 0;elseif n == 1;

valore = 1;else

valore = fibonacci_ricorsivo(n - 1) + fibonacci_ricorsivo(n - 2);end

end

𝐹𝑖𝑏 𝑛 = ;0 𝑠𝑒𝑛 = 01 𝑠𝑒𝑛 = 1

𝐹𝑖𝑏 𝑛 − 1 + 𝐹𝑖𝑏(𝑛 − 2) 𝑠𝑒𝑛 ≥ 2

Invocazioniricorsive

IntroduzioneallaprogrammazioneinMATLAB:Parte3 34/61

Page 35: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

CasoStudio:Fibonacci(3)◦ CodiceMATLAB

◦ Esempid’uso

function [valore] = fibonacci_ricorsivo(n)if n == 0

valore = 0;elseif n == 1;

valore = 1;else

valore = fibonacci_ricorsivo(n - 1) + fibonacci_ricorsivo(n - 2);end

end

>> fibonacci_ricorsivo(0)ans =

0>> fibonacci_ricorsivo(4)ans =

3>> fibonacci_ricorsivo(8)ans =

21

IntroduzioneallaprogrammazioneinMATLAB:Parte3 35/61

Page 36: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Quandousarelaricorsione◦ La ricorsione deve essere evitata quando esiste unasoluzione iterativa ovvia, e in situazioni in cui leprestazioni del sistema sono un elemento critico.

◦ Algoritmi che per loro natura sono ricorsivi piuttostoche iterativi dovrebbero essere formulati conprocedure ricorsive. Ad esempio, considerare chealcune strutture dati sono inerentemente ricorsive:◦ Struttureadalbero◦ Sequenze◦ …..

IntroduzioneallaprogrammazioneinMATLAB:Parte3 36/61

Page 37: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(1)◦ Il debugging (o semplicemente debug), ininformatica, indica l'attività che consistenell'individuazione da parte del programmatoredella porzione di software affetta da errore (bug).

◦ L’editor che mette a disposizione MATLAB per lascrittura degli M-file contiene anche unDebugger, che ha lo scopo di supportare ilprogrammatore durante il debugging.

◦ Va detto che i programmi MATLAB sonogeneralmente brevi, e non richiedono undebugger a meno non siano di grandi dimensioni.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 37/61

Page 38: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(2)◦ Una prima tecnicadi debugging è lamodalità cella, dausare con gli script.

◦ Consiste nel raggruppare uninsieme di comandi in una cella, ilcui inizio è stabilito dal doppiopercentuale.

◦ Una volta definite le celle possono essere valutatesingolarmente, passare da una cella ad un’altra evalutare l’intero programma.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 38/61

Page 39: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(3)◦ Consideriamo il seguente esempio:

◦ Se digitiamo e salviamo questo file, possiamonotare che esso è stato suddiviso in tre porzioni.

%%clear, clc;x = linspace(0, 10, 300);%% Funzione Quadraticay1 = 2.*x.^2 + 1.*x + 3;%% Funzione Cubicay2 = 4.*x.^3-2.*x.^2 + 3;

IntroduzioneallaprogrammazioneinMATLAB:Parte3 39/61

Page 40: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(3)◦ Consideriamo il seguente esempio:

◦ Se digitiamo e salviamo questo file, possiamonotare che esso è stato suddiviso in tre porzioni.

%%clear, clc;x = linspace(0, 10, 300);%% Funzione Quadraticay1 = 2.*x.^2 + 1.*x + 3;%% Funzione Cubicay2 = 4.*x.^3-2.*x.^2 + 3;

IntroduzioneallaprogrammazioneinMATLAB:Parte3 40/61

Page 41: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(4)◦ È possibile eseguire lo script nella sua interezza,oppure sezione per sezione, o solo unadeterminata sezione:

Esegue tutto loscript.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 41/61

Page 42: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(4)◦ È possibile eseguire lo script nella sua interezza,oppure sezione per sezione, o solo unadeterminata sezione:

Esegue solo la cella sele-zionata, o corrente.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 42/61

Page 43: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(4)◦ È possibile eseguire lo script nella sua interezza,oppure sezione per sezione, o solo unadeterminata sezione:

Sposta la selezione allaprossima cella.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 43/61

Page 44: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(4)◦ È possibile eseguire lo script nella sua interezza,oppure sezione per sezione, o solo unadeterminata sezione:

Esegue la cella attual-mente sezionata, e siposizione alla successiva.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 44/61

Page 45: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(4)◦ È possibile eseguire lo script nella sua interezza,oppure sezione per sezione, o solo unadeterminata sezione:

Esegue tutto lo script emisura il suo tempo diesecuzione.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 45/61

Page 46: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(5)◦ La modalità Debug è un altro meccanismo persupportare il debugging e consiste nel collocareall’interno dell’M-file i cosiddetti breakpoints:◦ Un punto all’interno del programma in corrispondenzadel quale l’esecuzione si interrompe temporaneamentein modo che il programmatore possa esaminare i valoricorrenti delle variabili.

◦ L’editor di MATLAB mette a disposizione unapposito menù per la gestione dei breakpointsall’interno di un programma (loro creazione e/ocancellazione).

IntroduzioneallaprogrammazioneinMATLAB:Parte3 46/61

Page 47: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(6)

Cancella tutti i breakpoints nel pro-gramma.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 47/61

Page 48: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(6)

Inserisce o rimuove un breakpointalla riga corrente (ovvero dove ècollocato il cursore).

IntroduzioneallaprogrammazioneinMATLAB:Parte3 48/61

Page 49: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(6)

Abilita, o disabilita, il breakpointcollocato alla riga corrente.Quando un breakpoint è dis-abilitato, non è consideratoquando il programma è eseguito.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 49/61

Page 50: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(6)

La considerazione di un breakpointpuò essere condizionata allaverifica di una determinatacondizione, dati i valori correntidelle variabili. La condizione èvalutata prima dell’esecuzionedella riga del breakpoint.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 50/61

Page 51: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(6)

Strategie di gestione di eventualierrori di programmazione quandol’M-file viene eseguito.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 51/61

Page 52: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(7)

Quando un breakpoint è collocatoin una riga, l’editor lo segnala conun pallino rosso.

◦ Se scegliamo di eseguire lo script vediamo cheal punto del breakpoint si ha un’interruzione.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 52/61

Page 53: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(7)

◦Appare un menù così che il programmatorepuò scegliere cosa fare.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 53/61

Page 54: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(7)

◦Appare un menù così che il programmatorepuò scegliere cosa fare.

Continuare l’esecuzione fino alprossimo breakpoint o la fine delprogramma.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 54/61

Page 55: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(7)

◦Appare un menù così che il programmatorepuò scegliere cosa fare.

Eseguire solo la prossima riga.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 55/61

Page 56: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(7)

◦Appare un menù così che il programmatorepuò scegliere cosa fare.

Eseguire la prossima riga, edentrare nel codice dell’eventualefunzione chiamata, oppureeseguire la funzione fino ad uscireda essa.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 56/61

Page 57: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(7)

IntroduzioneallaprogrammazioneinMATLAB:Parte3 57/61

Page 58: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(7)

IntroduzioneallaprogrammazioneinMATLAB:Parte3 58/61

Page 59: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(8)

◦Appare un menù così che il programmatorepuò scegliere cosa fare.

Eseguire fino alla riga che contieneil cursore.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 59/61

Page 60: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Debugging(9)

◦Appare un menù così che il programmatorepuò scegliere cosa fare.

Interrompere il debugging.

IntroduzioneallaprogrammazioneinMATLAB:Parte3 60/61

Page 61: Introduzione alla programmazione in MATLAB: Parte 3 (La ...cesposito/materiale/lezioni...Fondamenti di Informatica Introduzione alla programmazione in MATLAB: Parte 3 (La Ricorsionee

Riferimenti• Capitolo4• Paragrafi8[DebuggingdeiprogrammidiMatlab].

61/61IntroduzioneallaprogrammazioneinMATLAB:Parte3