Schemi per diapo Sistemi in tempo reale

Transcript

Schemi per diapo Sistemi in tempo reale
Stampa di alcuni numeri interi
Università degli studi di Parma
Dipartimento di Ingegneria dell’Informazione
Informatica – a.a. 2012/13

Inizio
Informatica
Facoltà di Medicina Veterinaria
a.a. 2012/13
Stampa ‘0’

prof. Stefano Cagnoni
Stampa ‘1’
Esercizi sui Diagrammi di Flusso
Stampa ‘2’

Fine
Informatica 2012/2013
Stampa dei primi N numeri interi

Inizio
c=0
c < 10


No
Si

Stampa c

c=c+1
Fine
Informatica 2012/2013
(1)
L’algoritmo
rappresentato tramite
questo DF stampa a
video i numeri 0, 1 e 2
Ogni esecuzione
dell’algoritmo produce
sempre lo stesso
risultato
non è un algoritmo
“interessante”...
-2-
Stampa dei primi N numeri interi
L’algoritmo rappresentato
tramite questo DF stampa a
video i numeri da 0 a 9 inclusi
Ogni esecuzione dell’algoritmo
produce lo stesso risultato
La variabile “c” permette di
contare quante volte viene
eseguito il ciclo
Il blocco condizione (rombo)
permette di realizzare un ciclo
Il ciclo si interrompe nel
momento in cui la condizione
risulta falsa

Inizio
c=0
c < 10
2. Il valore con cui c viene
confrontato all’interno della
condizione (in questo caso 10)
No
Si
3. Il segno di confronto impiegato
all’interno della condizione (in
questo caso < )
c=c+1
4. La quantità di cui la variabile c
viene incrementata ad ogni
iterazione del ciclo
Fine
Informatica 2012/2013
Il numero di volte che
l’istruzione “Stampa c” viene
eseguita dipende da:
1. Il valore iniziale della variabile c
Stampa c
-3-
(2)
-4-
Pag. 1
1
Stampa dei primi N numeri interi

Inizio
(3)
Stampa dei primi N numeri interi
In questo caso l’algoritmo
stampa a video i numeri da 1 a
9 inclusi
c=1

c < 10
In questo caso l’algoritmo
stampa a video i numeri da 1 a
10 inclusi

Inizio
c=1
No
Si
La differenza rispetto alla
versione precedente è
l’inizializzazione della
variabile c al valore 1 anziché
al valore 0
La differenza rispetto alla
versione precedente è l’uso
del “<=“ anziché del semplice
“<“ all’interno della
condizione

c <= 10
No
Si
Stampa c
Stampa c
c=c+1
c=c+1
In questo esempio, come nei
precedenti, se l’algoritmo
viene eseguito più volte,
l’output è sempre lo stesso

Fine
Informatica 2012/2013
Fine
Informatica 2012/2013
-5-
Stampa dei primi N numeri interi
Inizio


Leggi N
c=1

c <= N
No
Si

Stampa c
c=c+1
Fine
Informatica 2012/2013
(4)
-6-
Stampa dei primi N numeri interi:
Esempio di esecuzione passo passo
(5)
In questo caso l’algoritmo stampa a
video i numeri da 1 a N inclusi
Prima di iniziare la stampa dei
numeri, infatti, si chiede all’utente
di inserire il valore dell’ultimo
numero da stampare
Questo valore viene memorizzato
nella variabile N e utilizzato
all’interno della condizione per
decidere quando terminare il ciclo
In questo caso l’output
dell’algoritmo dipende dalla
particolare esecuzione: esecuzioni
diverse possono produrre output
diversi a seconda del dato di input
inserito dall’utente
Inizio
(1)
Passo 1

Output a Schermo
Leggi N
c=1
Contenuto della Memoria (Variabili)
N
c <= N
No
c
Si

Stampa c
c=c+1

Fine
Informatica 2012/2013
-7-
Vediamo ora come analizzare ed
eseguire passo passo un algoritmo
rappresentato da un diagramma di
flusso
Il tutto comincia dal blocco
chamato “Inizio”
-8-
Pag. 2
2
Stampa dei primi N numeri interi:
Esempio di esecuzione passo passo
Inizio
Stampa dei primi N numeri interi:
Esempio di esecuzione passo passo
(2)
Passo 2

Inizio
Passo 3

Output a Schermo
Output a Schermo
Leggi N
Leggi N
c=1
c=1
Contenuto della Memoria (Variabili)
N
c <= N
No
Stampa c

c=c+1

Fine
Informatica 2012/2013
c <= N
c=c+1
Fine
- 10 -
Stampa dei primi N numeri interi:
Esempio di esecuzione passo passo
(4)
Passo 4

1
La variabile “contatore” c viene
inizializzata al valore 1

Informatica 2012/2013
Stampa dei primi N numeri interi:
Esempio di esecuzione passo passo
3
c
Stampa c
-9-
Inizio
No
Si
Si chiede all’utente di inserire un
numero intero
Tale numero viene memorizzato
nella variabile N
Supponiamo venga inserito il
numero 3

Contenuto della Memoria (Variabili)
N
3
c
Si
Inizio
Output a Schermo
Leggi N
c=1
No
Si

Stampa c

c=c+1
Fine
Informatica 2012/2013
3
c
1
1
c=1
Contenuto della Memoria (Variabili)
N
(5)
Passo 5

Output a Schermo
Leggi N
c <= N
(3)
c <= N
Contenuto della Memoria (Variabili)
No
Si
Per scegliere il percorso da
seguire, è necessario valutare la
condizione “c <= N”
In questo caso la condizione
“1<=3” risulta vera e si prosegue
per il ramo etichettato con “Si”

Stampa c
N
3
c
1
Si stampa a schermo il contenuto
attuale della variabile c
c=c+1
Fine
Informatica 2012/2013
- 11 -
- 12 -
Pag. 3
3
Stampa dei primi N numeri interi:
Esempio di esecuzione passo passo
Inizio
Stampa dei primi N numeri interi:
Esempio di esecuzione passo passo
(6)
Passo 6

Inizio
Passo 7

Output a Schermo
Leggi N
No
1 2
c <= N
Stampa c

c=c+1
No
Informatica 2012/2013
Stampa c

c=c+1
Fine
Informatica 2012/2013
- 13 -
Stampa dei primi N numeri interi:
Esempio di esecuzione passo passo
Inizio
- 14 -
Stampa dei primi N numeri interi:
Esempio di esecuzione passo passo
(8)
Passo 8

2
Per scegliere il percorso da
seguire, è necessario valutare la
condizione “c <= N”
In questo caso la condizione
“2<=3” risulta vera e si prosegue
per il ramo etichettato con “Si”

Fine
3
c
Si
Il valore corrente di c viene
incrementato di una unità
Il contenuto della variabile c
passa così da 1 a 2

Contenuto della Memoria (Variabili)
N
3
c
Si
1
c=1
Contenuto della Memoria (Variabili)
N
c <= N
Output a Schermo
Leggi N
1
c=1
Inizio
c <= N
Output a Schermo
Leggi N
12
c=1
No
Si

Stampa c
3
c
2
12
c=1
Contenuto della Memoria (Variabili)
N
c <= N
Contenuto della Memoria (Variabili)
No
Si
Si stampa a schermo il contenuto
attuale della variabile c

Stampa c

c=c+1
c=c+1
Fine
Informatica 2012/2013
(9)
Passo 9

Output a Schermo
Leggi N
(7)
N
3
c
2 3
Il valore corrente di c viene
incrementato di una unità
Il contenuto della variabile c
passa così da 2 a 3
Fine
Informatica 2012/2013
- 15 -
- 16 -
Pag. 4
4
Stampa dei primi N numeri interi:
Esempio di esecuzione passo passo
Inizio
Stampa dei primi N numeri interi:
Esempio di esecuzione passo passo
(10)
Passo 10

Inizio
Passo 11

Output a Schermo
Leggi N
No
3
Stampa c

c=c+1
Fine
Informatica 2012/2013
c <= N
c=c+1
Fine
- 18 -
Stampa dei primi N numeri interi:
Esempio di esecuzione passo passo
(12)
Passo 12

3
Si stampa a schermo il contenuto
attuale della variabile c

Informatica 2012/2013
Stampa dei primi N numeri interi:
Esempio di esecuzione passo passo
3
c
Stampa c
- 17 -
Inizio
No
Si
Per scegliere il percorso da
seguire, è necessario valutare la
condizione “c <= N”
In questo caso la condizione
“3<=3” risulta vera e si prosegue
per il ramo etichettato con “Si”

Contenuto della Memoria (Variabili)
N
3
c
Si
123
c=1
Contenuto della Memoria (Variabili)
N
c <= N
Output a Schermo
Leggi N
12
c=1
Inizio
c <= N
Output a Schermo
Leggi N
123
c=1
No
Si

Stampa c

c=c+1
3
c
3 4
c <= N
Contenuto della Memoria (Variabili)
No
Si
Il valore corrente di c viene
incrementato di una unità
Il contenuto della variabile c
passa così da 3 a 4

Stampa c

c=c+1
Fine
Informatica 2012/2013
12
c=1
Contenuto della Memoria (Variabili)
N
(13)
Passo 13

Output a Schermo
Leggi N
(11)
Fine
Informatica 2012/2013
- 19 -
N
3
c
4
Per scegliere il percorso da
seguire, è necessario valutare la
condizione “c <= N”
In questo caso la condizione
“4<=3” risulta falsa e si prosegue
per il ramo etichettato con “No”
- 20 -
Pag. 5
5
Stampa dei primi N numeri interi:
Esempio di esecuzione passo passo
Inizio
Somma dei primi N numeri interi (1)
(14)
Passo 14

Inizio

Output a Schermo
Leggi N
c=1
c=1
Contenuto della Memoria (Variabili)
N
c <= N
Leggi N
123
No

Stampa c

c=c+1
Fine
Informatica 2012/2013
4
c <= N
Stampa c
c=c+1
Fine
Informatica 2012/2013
Somma dei primi N numeri interi (2)

c = 1, s = 0
- 22 -
Calcolo di n! (n fattoriale)
Le modifiche apportate sono quindi le
seguenti:
Inizio
1. Utilizziamo una variabile chiamata s
per tenere conto della somma
parziale dei numeri finora
considerati e la inizializziamo al
valore 0 (elemento invariante per la
somma)
Leggi N
No
Si
Giunti al blocco “Fine”
l’esecuzione dell’algoritmo
termina
L’output conferma che l’algoritmo
risolve correttamente il problema
“Stampa i primi N numeri interi”
- 21 -
Inizio
1. La stampa del risultato andrà
spostata subito prima della fine,
fuori dal ciclo
2. All’interno del ciclo, possiamo
utilizzare il valore corrente della
variabile c per aggiornare una
“somma parziale” dei primi N
numeri
3. Sarà quindi necessario utilizzare
una variabile in più per tenere
traccia di questa “somma
parziale”
3
c
Si
(1)

Leggi N

c = 1, s = 0

c <= N
2. Ad ogni iterazione del ciclo,
sommiamo al valore corrente di s il
valore del numero considerato (c),
aggiornando così la somma parziale
dei numeri
No
Si
s=s+c
c <= N
c=c+1

s=s+c

Stampa s
c=c+1
Fine
Informatica 2012/2013
No
Si
3. Una volta terminato il ciclo, e quindi
terminato il calcolo della somma,
stampiamo a video il risultato
(contenuto in s)
Stampa s
Si può calcolare la somma dei primi
N numeri interi, apponendo qualche
semplice modifica al diagramma di
flusso utilizzato per la stampa dei
primi N numeri interi:
Calcolare n! significa moltiplicare tra
loro tutti i numeri compresi tra q e n
inclusi
Per risolvere il problema è possibile,
ancora una volta, utilizzare la stessa
struttura ciclica vista finora.
Ancora una volta le modifiche da
apportare al DF sono minime...
Anziché calcolare una somma di
numeri dovremo calcolarne il
prodotto
Se vogliamo, possiamo chiamare la
variabile dove salviamo il risultato
con un altro nome, ad esempio r,
per risultato
Fine
Informatica 2012/2013
- 23 -
- 24 -
Pag. 6
6
Calcolo di n! (n fattoriale)
Inizio
(2)

Leggi N
c = 2, r = 1
c <= N

No
Si
Esercizi
Visto che l’elemento invariante
per il prodotto è 1, è
necessario inizializzare a 1 il
valore di r

Visto che moltiplicare 1*1 è
inutile, possiamo far
inizializzare il valore di c a 2
anziché 1, risparmiando così
un’iterazione del ciclo...


r=r*c
Stampa r

c=c+1
Fine
Informatica 2012/2013
All’interno del ciclo
aggiorniamo il valore corrente
di r moltiplicandolo per il
valore corrente di c
Per il secondo supporre che il numero inserito
dall’utente sia 4 e verificare che il risultato proposto sia
24
- 26 -
Contare a ritroso

Inizio
Leggi N

No
Si
Stampa N

N=N-1
Fine
Informatica 2012/2013
Per il primo supporre che l’utente inserisca il numero 5 e
verificare che l’output prodotto sia 15
Informatica 2012/2013
- 25 -
Contare a ritroso
N>0
Provare a fare un’esecuzione passo-passo, come visto
precedentemente, per i due DF della somma dei primi N
numeri e del calcolo di N!
Anziché mettere un valore
iniziale fisso per N, chiediamo
all’utente il numero da cui
iniziare il conto alla roverscio

Inizio
4321
Leggi N
Visto che contiamo
all’indietro, verifichiamo se il
valore corrente di N è
maggiore di 0 per decidere
quando fermarci
All’interno del ciclo
aggiorniamo il valore corrente
di N decrementandolo di 1 ad
ogni iterazione

N>0
No

Stampa N

N=N-1
Fine
Informatica 2012/2013
In generale l’output prodotto
sarà:
N N-1 N-2 ... 3 2 1
Si
- 27 -
Supponendo che l’utente
inserisca il numero 4, l’output
prodotto sarà:
In questo modo il ciclo viene
eseguito N volte
Mettendo il <= all’interno della
condizione il ciclo verrà
eseguito N+1 volte e verrà
stampato anche lo 0
- 28 -
Pag. 7
7
Calcolo del prodotto di due numeri interi
positivi per mezzo di somme successive (1)
Inizio

Leggi A e B
r=0
A>0

No
Si
Calcolo del prodotto di due numeri interi
positivi per mezzo di somme successive (2)
Supponiamo che tra le istruzioni
elementari conosciute dal nostro
elaboratore/esecutore non ci sia il
prodotto di due numeri interi positivi
Inizio

Leggi A e B
È possibile calcolare un prodotto
come somme successive: dati i due
numeri A e B si può scegliere di
sommare A con se stesso per B volte,
oppure, sommare B con se stesso per
A volte.

r=0
A>0

No
Si
r=r+B
r=r+B
Stampa r

A=A- 1
Stampa r
Per far ciò è possibile riadattare il DF
visto prima per il conteggio a ritroso
A=A- 1

Fine
Informatica 2012/2013
Fine
Informatica 2012/2013
- 29 -
Calcolo del prodotto di due numeri interi
positivi per mezzo di somme successive (3)
Inizio

Leggi A e B
È del tutto corretta anche la
soluzione speculare: facciamo
sommare A con se stesso per B
volte (è sufficiente scambiare il
ruolo di A e B)



B>0

Si
r=r+A
Stampa r
B=B-1
Fine
Informatica 2012/2013
- 30 -
Calcolo del prodotto di due numeri interi
relativi
r=0
No
La struttura ciclica che prima era
controllata dalla variabile N è ora
controllata dalla variabile A
In questo modo le istruzioni poste
all’interno del ciclo verranno
eseguite A volte (nella condizione
si usa in questo caso il segno “>”)
La variabile r utilizzata per
calcolare il risultato finale per
passi intermedi viene inizializzata
a 0 (elemento invariante per la
somma) e ad ogni iterazione del
ciclo gli viene sommato il valore
di B
In questo caso si somma B con se
stesso per A volte...
Volendo rendere l’algoritmo il più
efficiente possibile, si potrebbero
controllare i valori iniziali di A e B
e fare in modo di scegliere
sempre il minore dei due come
variabile che controlla il ciclo per
eseguire il minor numero possibile
di somme

I DF appena visti funzionano correttamente solo per numeri A e B
entrambi interi positivi
Per far funzionare le cose per qualsiasi coppia A-B di numeri interi
relativi è necessario modificare i DF appena visti
Prima di vedere la versione finale introduciamo due DF che
utilizzeremo come “sottoprogrammi” nella versione finale
Ricordare che il blocco
Sottoprog.
ha proprio la funzione di richiamare un “sottoprogramma”, cioè
interrompere momentaneamente l’esecuzione del DF corrente per
eseguire l’algoritmo associato al sottoprogramma chiamato
Informatica 2012/2013
- 31 -
- 32 -
Pag. 8
8
Sottoprogramma per il
Prodotto di due numeri interi positivi
Inizio

Sottoprogramma per il calcolo del valore
assoluto di un numero intero relativo
Chiamiamo MUL il DF visto prima
per il calcolo del prodotto di due
numeri interi positivi
Leggi A e B

r=0
A>0
Leggi N
Supponiamo quindi che una
scrittura del tipo

N<0
c = MUL(a,b)
No
Si
Stampa r
A=A- 1
Fine
Informatica 2012/2013
Leggi A e B

C = ABS(A)
D = ABS(B)
R = MUL(C,D)

a = ABS(b)
Stampa N
Fine
Informatica 2012/2013
- 33 -

- 34 -
Calcolo del prodotto di due numeri interi
relativi (DF finale)
(2)
All’inizio vengono chiesti all’utente i due valori
AeB
Inizio
Nelle variabili C e D si salvano, rispettivamente,
i valori assoluti di A e B richiamando il
Leggi A e B
sottoprogramma ABS per calcolarli
C = ABS(A)
Visto che C e D sono entrambi numeri interi
positivi, è quindi possibile richiamare il
D = ABS(B)
sottoprogramma MUL per calcolarne il
prodotto


R = MUL(C,D)

No
No
(A<0 AND B>0) OR (A>0 AND B<0)
(A<0 AND B>0) OR (A>0 AND B<0)
Stampa R
Si
Il risultato fornito da MUL
per R sarà sempre un
numero positivo, è quindi
necessario cambiargli
segno se A e B hanno
segno discorde
Se A e B hanno segno
concorde, il valore di R
viene lasiato immutato
Si stampa poi il valore
finale di R come risultato
della moltiplicazione
Stampa N
Si
R=-R
R=-R
Fine
Informatica 2012/2013
Supponiamo quindi che una
scrittura del tipo
permetta di richiamare questo
algoritmo prendendo come valore
iniziale di N il dato b passato
come argomento della chiamata e
fornendo il valore finale di N
come risultato da assegnare alla
variabile a
N=-N
Calcolo del prodotto di due numeri interi
relativi (DF finale)
(1)
Inizio
No
Chiamiamo ABS il DF qui a fianco
che calcola il valore assoluto di un
numero intero relativo N
Si
permetta di richiamare tale
algoritmo prendendo come valori
iniziali di A e B i due dati a e b
passati come argomenti della
chiamata e fornendo il valore
finale di r come risultato da
assegnare alla variabile c
r=r+B

Inizio
Fine
Informatica 2012/2013
- 35 -
- 36 -
Pag. 9
9
….

Fine per oggi…
Informatica 2012/2013
Pag. 10
10