I/O e strutture di controllo - Intranet...
Transcript of I/O e strutture di controllo - Intranet...
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
•! 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
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
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
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
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);
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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