I/O e strutture di controllo - Intranet...

21
Dipartimento di Elettronica ed Informazione Politecnico di Milano I/O e strutture di controllo Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2009/2010 La presente dispensa e’ da utilizzarsi ai soli fini didattici previa autorizzazione dell’autore. E’ severamente vietata la riproduzione anche parziale e la vendita. 24/09/2009 Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 2 Struttura standard • Un programma solitamente ha: – Sezione di input iniziale • Ricevo i dati da un utente – Algoritmo • Opero sui dati utilizzando anche le variabili di stato – Sezione di output finale • Trasmetto le informazioni ottenute all’utente • Questa è la struttura più semplice: – Sono anche chiamati programmi “batch” • In un programma interattivo: – Spesso i dati sono richiesti all’utente anche durante l’esecuzione dell’algoritmo – Risultati parziali possono anche essere trasmessi durante l’esecuzione

Transcript of I/O e strutture di controllo - Intranet...

Page 1: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Dipartimento di Elettronica ed Informazione Politecnico di Milano

I/O e strutture di controllo

Dipartimento di Elettronica ed Informazione Politecnico di Milano

Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani

A.A. 2009/2010

La presente dispensa e’ da utilizzarsi ai soli fini didattici previa autorizzazione dell’autore. E’ severamente vietata la

riproduzione anche parziale e la vendita.

24/09/2009

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 2

Struttura standard

•! Un programma solitamente ha: –!Sezione di input iniziale

•! Ricevo i dati da un utente –!Algoritmo

•!Opero sui dati utilizzando anche le variabili di stato –!Sezione di output finale

•! Trasmetto le informazioni ottenute all’utente

•! Questa è la struttura più semplice: –!Sono anche chiamati programmi “batch”

•! In un programma interattivo: –!Spesso i dati sono richiesti all’utente anche

durante l’esecuzione dell’algoritmo –!Risultati parziali possono anche essere trasmessi

durante l’esecuzione

Page 2: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

•! Nelle prossime slide sono approfonditi due argomenti: –!Come scrivere istruzioni MATLAB per:

•! chiedere dati in input all’utente •!mostrare dati in output all’utente

–!Come organizzare le istruzioni in MATLAB per eseguire algoritmi che: •! operino sui dati di input •! producano output

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 3

Dipartimento di Elettronica ed Informazione Politecnico di Milano

Input e output

Dipartimento di Elettronica ed Informazione Politecnico di Milano

Page 3: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 5

Input e output

•! L’input e l’output del programma possono essere ottenute: –!Dall’utente finale attraverso tastiera e monitor –!Da file

•! Al momento analizziamo solo il primo caso: –! In MATLAB mette a disposizione tre funzioni

•!input (solitamente usato per l’input) •!printf e disp (solitamente usate per l’output)

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 6

input: sintassi

Variabile input(messaggio, [‘s’]);

•! messaggio –! indica un messaggio da visualizzare all’utente per aiutarlo nel

capire quale informazione è richiesta:

•! variabili –! è il nome di una variabile in cui sarà inserito il valore inserito

dall’utente

•! ‘s’ –! È un parametro opzionale. Se inserito vuol dire che il valore

inserito dall’utente è considerato una stringa e non un numero

Page 4: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Esempio

•! parola = input('Inserire la parola da analizzare ', 's')

–!Alla variable parola è assegnata la stringa inserita dall’utente

•! raggio = input(’inserire il valore del raggio ’)

–!Alla variable raggio è assegnato il numero inserito dall’utnte

•! raggio = input(’inserire il valore del raggio ’, ‘s’)

–!Attenzione che in questo caso raggio non conterrà un numero ma una stringa (c’è il parametro ‘s’)

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 7

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 8

printf: sintassi

printf(stringa di controllo, lista di variabili)

stringa di controllo (racchiusa tra ‘ ‘), contiene: –! caratteri alfanumerici da stampare a video –! segnaposto: caratteri di conversione e/o di formato

(preceduti dal simbolo %): utilizzati per interpretare i valori degli elementi da stampare. Es. d, f, c, …

–! caratteri di controllo della stampa: caratteri ASCII a cui non corrisponde alcun simbolo stampabile, hanno effetti di formato di stampa, come linea nuova (\n), tabulazione (\t), ecc

•! lista di variabili è una lista di variabili separate da virgola: –! in egual numero ai segnaposto inseriti nella stringa di

controllo –! nello stesso ordine in cui compaiono i segnaposto –! di tipo compatibile con il tipo di segnaposto individuato

Page 5: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 9

printf: semantica

•! È la chiamata alla funzione, che fa partire l’attivazione del sottoprogramma associato

•! Stampa i caratteri alfanumerici tra apici e al posto dei segnaposto stampa il valore dell’identificatore corrispondente nella lista da stampare

•! I segnaposto posizionano il cursore nella posizione opportuna

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 10

disp: sintassi

Disp()

•! stringa di controllo (racchiusa tra “ “), contiene: –! caratteri di conversione e/o di formato (preceduti dal simbolo

%): utilizzati per interpretare i valori degli elementi letti da tastiera, che devono essere memorizzati nelle variabili. Es. d, f, c, …

•! lista di variabili è la la lista di variabili a cui associare il valore letto –! è sempre meglio richiedere l’inserimento di una variabile per

volta –! le variabili devono essere indicate tramite il loro indirizzo:

&nome_var (passaggio per indirizzo) –! la lista è ordinata rispetto ai caratteri di conversione

Page 6: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 11

Esempio

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 12

scanf e messaggio di input

•! Una scanf dovrebbe essere sempre accompagnata da una printf che visualizza un messaggio in cui è indicata la natura del dato richiesto

•! Invece di scanf(“%d”, &r);

•! È più oppurtuno utilizzare printf(“Inserire il valore del raggio”);

scanf(“%d”, &r);

Page 7: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Nota sull’output

•! Riguardo l’output, in MATLAB, per qualunque istruzione che non termina con un ‘;’ è visualizzato l’effetto

•! Esempi: –!Se l’istruzione è a=0 appare a=0 –!Se l’istruzione è a=0; non appare nulla –!Se l’istruzione è a=3+5 appare a=8 –!Se l’istruzione è a=3+5; non appare nulla

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 13

Dipartimento di Elettronica ed Informazione Politecnico di Milano

Strutture di controllo

Dipartimento di Elettronica ed Informazione Politecnico di Milano

Page 8: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani

Strutture di controllo

•! Sequenza: le operazioni sono eseguite una in seguito all’altra

•! Selezione: blocchi di operazioni sono eseguite in alternativa

•! Iterazione: blocchi di operazioni sono eseguite diverse volte

15

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani

Sequenza

•! Le frecce tra blocchi indicano una sequenza di operazioni

•! Una operazione non inizia finché quella precedente non termina

•! Non possono esserci due operazioni svolte contemporaneamente

Inizio

Leggi(X)

Scrivi (W)

Leggi(Y)

W = X * Y

Fine

16

Page 9: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani

Selezione 1/2

•! Si basa sulla valutazione di una condizione espressa all’interno del simbolo romboidale

•! Due blocchi di operazioni sono svolti in alternativa

Inizio

Leggi(X)

Scrivi (W)

W = X * Y

Fine

X <> 0 AND Y <> 0

Leggi(X)

W = 0

no si

17

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani

Selezione 2/2

•! Il blocco sul ramo “si” deve essere sempre presente

•! Il blocco sul ramo “no” è opzionale

Inizio

Leggi(X)

Scrivi (W)

W = X * Y

Fine

X <> 0 AND Y <> 0

Leggi(X)

no si

W = 0

18

X <> 0 AND Y <> 0

Page 10: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani

Iterazione

•! Esprime la possibilità di ripetere un blocco di istruzioni un numero finito di volte

•! Elementi: –! condizione di permanenza: funzione della variabile di controllo –! corpo del ciclo: contiene la modifica della variabile di controllo

•! La ripetizione è controllata dalla valutazione della condizione di permanenza del ciclo –! Se la condizione è vera viene ripetuto il ciclo –! Se la condizione è falsa si procede con la prima operazione

successiva al ciclo •! La condizione di permanenza può essere verificata

–! all’inizio dell’iterazione (pre-condizione) –! alla fine dell’iterazione (post-condizione)

19

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani

Inizio

Leggi(X)

Scrivi (W)

Leggi(Y)

SP:=0

Fine

SP:=SP+X

Y:=Y-1

Y>0

no si

W:=SP

Acquisizione dei dati in ingresso e attribuzione dei loro valori a X e Y

Inizializzazione delle variabili ausiliarie

Corpo del ciclo

Valutazione della condizione di uscita dal ciclo

Emissione del risultato

Schema a Blocchi con ciclo a condizione finale (l’algoritmo è corretto se Y>0)

Esempio: post-condizione

20

Page 11: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani

Esempio: pre-condizione

Inizio

Leggi(X)

Scrivi (W)

Leggi(Y)

SP:=0

Fine

SP:=SP+X

Y:=Y-1

Y>0

no

si

W:=SP

SP:=SP+X

Y:=Y-1

Y>0 no

si

È a condizione iniziale ed l’algoritmo è corretto per Y >=0

21

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani

Pre- e post-condizioni nei cicli 1/3

•! Nell’esempio la verifica della condizione è stata spostata dalla fine all’inizio del ciclo

•! Nell’esempio abbiamo migliorato l’algoritmo ma in realtà i due algoritmi NON sono funzionalmente equivalenti:

–! Il primo è corretto per y > 0 –! Il secondo è corretto per y >= 0

•! Se voglio due algoritmi equivalenti non basta quindi semplicemente spostare la condizione ma vanno verificati i casi limite

22

Page 12: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani

Pre- e post-condizioni nei cicli 2/3

•! Se volessi una versione con pre-condizione funzionalmente equivalente (valida per y>0) a quella con post-condizione

SP:=SP+X

Y:=Y-1

Y>0

si Y:=Y-1

Y>0 no

si

SP:=SP+X no

W:=SP W:=SP

Post-condizione Pre-condizione

SP:=SP+X

Y:=Y-1

Sposto la condizione

all’inizio del ciclo e replico le

istruzioni del ciclo prima che il ciclo

inizi

23

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani

Pre- e post-condizioni nei cicli 3/3

•! Se volessi una versione con post-condizione funzionalmente equivalente (valida per y>=0) a quella con pre-condizione

SP:=SP+X

Y:=Y-1

Y>0

si

Y:=Y-1

Y>0 no

si

SP:=SP+X

no

W:=SP W:=SP

Y=0

no

si

Post-condizione Pre-condizione

Sposto la condizione alla fine del ciclo e inserisco una

selezione all’inizio del ciclo per

evitare la prima iterazione

24

Page 13: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani

Flusso di esecuzione

•! Il flusso di controllo: –!definisce tutti i cammini possibili di esecuzione –! si basa su ipotesi relative ai valori assumibili dalle

variabili

•! Il flusso di esecuzione: –!definisce un particolare cammino di esecuzione –! si basa su valori precisi date alle variabili ottenute

anche dai dati in ingresso dall’utente

•! Il tracing è il meccanismo che permette di controllare il funzionamento di un algoritmo analizzando il valore delle variabili durante l’esecuzione

25

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani

Tracing

•! In una griglia vanno messe tutte le variabili definite nell’algoritmo •! In ogni riga va indicato il valore della variabile per ogni operazione

eseguita

leggi (x)

leggi (y)

sp:=0

while (y>0)

sp:=sp+x

y:=y-1

do

w:=sp

scrivi(w)

X Y SP W

5 # # #

5 2 # #

5 2 0 #

5 2 5 #

5 1 5 #

5 1 10 #

5 0 10 #

5 0 10 10

Contenuto della variabile non definito

Ipotesi di valore inserito dall’utente

26

Page 14: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani

Algoritmo 2/2

•! Un algoritmo non deve dipendere solo da valori predefiniti dei dati ma anche da dati inseriti dall’utente

•! Quindi un algoritmo deve avere una formulazione generale

•! In un algoritmo devono essere previsti particolari passi di acquisizione delle informazioni

27

Dipartimento di Elettronica ed Informazione Politecnico di Milano

Strutture di controllo in MATLAB

Dipartimento di Elettronica ed Informazione Politecnico di Milano

Page 15: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Sequenza

•! Istruzioni su righe successive sono da considerarsi in sequenza

•! Istruzioni sulla stessa riga e divise da ‘,’ o ‘;’ sono da considerarsi in sequenza

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 29

Selezione

if condizione

ramoif

else

ramo else

end

•! Il costrutto if-else è utilizzato per definire la selezione –! Il ramo if è obbligatorio e viene attivato quando la

condizione specificata è vera –! Il ramo else è opzionale e viene attivata quando la

condizione specificata nell’if è false –!La parola chiava end chiude la struttura (in alcuni

casi è opzionale)

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 30

Page 16: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Sequenza: esempi (1)

•! Questi due esempi sono equivalenti

if raggio < 0

disp (‘errore’)

end

if ~(raggio >=0)

disp (‘errore’)

end

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 31

Sequenza: esempi (2)

if raggio > 0

area = pi * raggio * raggio;

else

disp (‘errore’)

end

•! Attenzione a non mettere mai il ‘;’ alla fine della riga con l’if e l’else

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 32

Page 17: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Iterazione

•! Per l’iterazione sono a disposizione due costrutti –!while: per i cicli precondizionati per i quali non è

noto a priori il numero di iterazioni –! for: per i cicli precondizionati per i quali è noto a

priori il numero di iterazioni

•! Se si vuole un ciclo post-condizionato bisogna cercare di ristrutturare il codice per avere la versione equivalente che utilizza il ciclo pre-condizionato

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 33

Costrutto while

•! Sintassi while condizione

Istruzioni da iterare

end

•! Esempio count = 10;

while count >0

disp(count)

count = count - 1;

end

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 34

Page 18: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

While: esempi (1)

•! Esempio 1: stampa da 10 a 0 (inclusi) count = 10;

while count >=0

disp(count)

count = count - 1;

end

•! Esempio 2: stampa da 10 a 0 (escluso) count = 10;

while count >0

disp(count)

count = count - 1;

end

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 35

While: esempi (2)

•! Esempio 3: stampa da 10 a 0 (inclusi) count = 0;

while count <=10

disp(10-count)

count = count + 1;

end

•! Esempio 4: stampa da 10 a 0 (escluso) count = 0;

while count < 10

disp(count)

count = count + 1;

end

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 36

Page 19: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Corso di Informatica A - GES [E-OZ] - prof. Plebani 37

Costrutto for

•! Utilizzato ogni volta che è noto a priori il numero di cicli da eseguire –!Nel while la condizione di uscita era dettata da una

condizione generica –!Nel ciclo for la condizione di uscita predica su un

contatore

•! Il contatore è una variabile intera che memorizza il numero di volte che il ciclo è stato eseguito

•! Anche il ciclo for è un costrutto ciclico

Corso di Informatica A - GES [E-OZ] - prof. Plebani 38

Elementi del ciclo for

•! Gli elementi del ciclo for sono identici agli elementi di un costrutto ciclico ma sono applicati a una variabile contatore –! Inizializzazione: il contatore viene inizializzato –! Modifica: il contatore viene incrementato (decrementato) –! Test: il contatore viene confrontato con il limite superiore

(inferiore)

•! Il costrutto for racchiude tutti e tre gli elementi for variabile_contatore = m:s:n

Istruzioni da iterare

end

Page 20: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Alcune note sul for

•! Il valore di s può essere negativo •! Se s viene omesso il suo valore è

implicitamente posto a 1 •! Se s è positivo il ciclo sarà eseguito fino a

quando la condizione contatore<=n è verificata

•! Se s è negativo il ciclo sarà eseguito fino a quando la condizione contatore>=n è verificata

•! Se contatore è uguale a n il ciclo viene eseguito una sola volta

Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani 39

Corso di Informatica A - GES [E-OZ] - prof. Plebani 40

Esempio di ciclo for

for i=0 : 1 : 10

disp(i)

end

•! Il contatore è la variabile i

•! Ad ogni ciclo i viene incrementato di 1

•! Il blocco di istruzioni viene eseguito finché la condizione di test permane vera i<=10

inizializzazione incremento test

Blocco di istruzioni da eseguire ciclicamente

Page 21: I/O e strutture di controllo - Intranet DEIBhome.deib.polimi.it/plebani/download/infoICA0910/L5+L6-IOeControl... · La ripetizione è controllata dalla valutazione della condizione

Corso di Informatica A - GES [E-OZ] - prof. Plebani 41

Ordine di esecuzione

Contatore <= n

vera

Contatore = m

blocco

m=m+s

falsa

istruzione

for contatore=m:s:n

/* blocco di istruzioni */

end

/* istruzione */

Corso di Informatica A - GES [E-OZ] - prof. Plebani 42

Equivalenza for - while

i = 0;

while i <= 10

disp(i)

i=i+1;

end

for i=0:1:10

disp(i)

end

i = 0;

while i > -10

disp(i)

i=i-1;

end

for i=0:-1:-9

disp(i)

end