LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

25
LS Tron Classe 4TC – as 2006/07 L’ORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282

Transcript of LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Page 1: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

LS Tron Classe 4TC – as 2006/07

L’ORGANIZZAZIONE DEI PROGRAMMI

UD. 8 p. 282

Page 2: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

In terza …

Dal problema all’algoritmo (UD2 p.53)Dall’algoritmo al programma (UD5 p.153)Programmazione strutturata (UD 7 p.214)

(utilizzo delle tre strutture fondamentali:SEQUENZIALEALTERNATIVACICLICA)

Page 3: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Ora …”PENSARE IN GRANDE” Lo sviluppo TOP-DOWN (UD 8 p. 282)

L’istruzione (il comando) può avere gradi di astrazione diversi può cioè essere più o meno “dettagliato” (es. “manda un razzo sulla luna” o milioni di micro-istruzioni)

TOP DOWN: raffinamenti successivi fino ad arrivare a sottoproblemi di minore complessità

Ogni sottoalgoritmo conserverà tutte le caratteristiche degli algoritmi

Il PGM che ne risulta coordinerà i vari “pezzi” (sottoprogrammi o subroutines) grazie ad una parte principale (Main Program)

Page 4: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Vantaggi del top-down

Maggior controllo del programmaManutenzione del SW facilitataRiutilizzo del SW

Page 5: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Implementazione del top-down in Pascal

ProcedureFunctionNB Procedure e Funzioni possono essere

scritte dal programmatore, ma ne esistono di già disponibili (built-in)

Page 6: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Le procedure

DichiarazionePROGRAM …VAR ….

PROCEDURE nomeproc;BEGIN

END;

Richiamo (nel Main)BEGIN nomeproc;END.

Page 7: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Risorse globali e locali

Globali (dichiarate all’inizio)Locali (dichiarate all’interno della

procedura, non visibili ad altre procedure né al Main)

NB. Si può quindi dichiarare una variabile con lo stesso nome in procedure diverse: la MC verrà infatti prima allocata dinamicamente e poi rilasciata (p. 294)

Page 8: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Esercizio

Battaglia navale (10*10 con tre navi da uno)

Main:Inizio

Inizializza_matrice_con_0; Visualizza;

Genera_tre_navi; Visualizza REPEAT gioca UNTIL affondate=3;

Fine

Page 9: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Procedure con parametri (p.294)

Le Procedure servono a costruire programmi ben organizzati …

… Ma servono anche a riutilizzare lo stesso SW in momenti diversi del programma …

….magari con DATI DIVERSI ……. passati come PARAMETRI…

Page 10: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Procedure con parametri - 1

Supponiamo di dover scrivere un programma che debba confrontare le aree di due triangoli (di cui siano note le rispettive basi e altezze)

Applicando un processo di astrazione, notiamo che il problema da risolvere è lo stesso: “calcolare l’area di un triangolo di cui siano noti base e altezza”

Page 11: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Procedure con parametri - 2

Si può allora pensare di costruire una “Black Box” alla quale “passare” base e altezza per ottenere l’area

Area:=(Base*Altezza)/2Base

Altezza

Area

Page 12: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Procedure con parametri - 3

Se agissi con variabili globali …:Procedure Calcola_Area;Begin Area:=(Base * Altezza) / 2End… avrei un problema al momento del richiamo,

perché dovrei fare il calcolo la prima volta con b1 e h1 (base e altezza del primo triangolo) e la seconda volta con b2 e h2 (base e altezza del secondo)

Page 13: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Procedure con parametri - 4

Rendo allora parametrica la procedura:Procedure

Calcola_Area(base,altezza,area:REAL);Begin Area:=(Base * Altezza) / 2End… elencando, tra parentesi, i nomi dei parametri e il

loro tipo (INTEGER, REAL …)Questi si chiamano PARAMETRI FORMALI

Page 14: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Procedure con parametri - 5

Al momento del richiamo (nel main), attribuisco i valori effettivi da “passare” alla procedura (PARAMETRI ATTUALI):

Begin

Calcola_Area(b1,h1,area1)

End.

Page 15: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Procedure con parametri - 6

La lista dei parametri formali (nell’intestazione della procedura) e quella dei parametri attuali (nella chiamata della procedura) devono rispettare una coerenza:

1. Di Numero (tanti formali quanti attuali)2. Di Tipo (se un parametro formale è real, il

corrispondente attuale dev’essere real)3. Di Ordine (il passaggio è posizionale: il

primo attuale manda il proprio valore nel primo formale e così via)

Page 16: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Procedure con parametri - 7

Resta però ancora un aspetto importante:In certi casi mi interessa che il valore

originale del parametro attuale che viene passato NON venga modificato, in altri sì.

In effetti esistono due tipi di passaggi:1. Per valore (non viene modificato)2. Per indirizzo (viene modificato)

Page 17: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Procedure con parametri – 8Passaggio per valore

Nel caso del passaggio per valore, viene creata una COPIA del parametro attuale, che NON viene modificato.

In effetti il parametro formale si comporta come se fosse una variabile locale

Page 18: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Procedure con parametri – 9Passaggio per indirizzo (per variabile)

Nel caso del passaggio per indirizzo (o per VARIABILE) i parametri attuali e formali fanno riferimento alla stessa cella di memoria, di cui in realtà viene passato l’indirizzo. Le modifiche effettuate quindi dalla procedura richiamata agiscono direttamente sul parametro attuale ch è stato passato alla procedura.

Questo metodo si utilizza quando il programmatore VUOLE che i cambiamenti di valore influenzino le variabili utilizzate nel programma principale (main)

Page 19: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

I due triangoli

Tornando al nostro problema, è quindi opportuno passare come parametri:

Base e altezza PER VALORE(non è opportuno che vengano modificati)

Area PER INDIRIZZO (mi serve che venga modificato il contenuto della variabile)

Page 20: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

SINTASSI

Procedure Calcola_Area(Base, Altezza:REAL; VAR Area:REAL);

Begin Area:=(Base * Altezza) / 2End;Base e altezza PER VALORE

(li elenco e scrivo il tipo)Area PER INDIRIZZO

(Faccio precedere alla variabile Area la parola VAR)

Page 21: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

RISULTATO FINALE- procedura

program parametri;var b1,h1,b2,h2:real; area1,area2:real;

procedure calcola_area(base,altezza:real; VAR area:REAL);

begin area:=(base*altezza)/2;end;

Page 22: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

RISULTATO FINALEMain – primo richiamo

begin

writeln('Inserisci la base del primo triangolo');

readln(b1);

writeln('inserisci l''altezza del primo triangolo');

readln(h1);

calcola_area( b1,h1,area1);

writeln('L''area del primo triangolo e'' ',area1:0:2);

Page 23: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

RISULTATO FINALEMain – secondo richiamo

writeln('Inserisci la base del secondo triangolo'); readln(b2); writeln('inserisci l''altezza del secondo triangolo'); readln(h2); calcola_area( b2,h2,area2); writeln('L''area del secondo triangolo e'' ',area2:0:2);

Page 24: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

RISULTATO FINALEMain – confronto tra le due aree

IF area1>area2 THEN Writeln('E'' maggiore l'' area del primo')

ELSE IF area1<area2 then Writeln('E'' maggiore l'' area

del secondo') else writeln('Le due aree sono

uguali'); readln;end.

Page 25: LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.

Esercizi

Definire una procedura che abbia come parametro un numero intero e che lo presenti in output con una sottolineatura di 5 asterischi

Definire una procedura che abbia come parametro un numero intero positivo e che scriva una stringa di asterischi pari al numero dato se il numero è <=10, “impossibile” in caso contrario