Problema: come dividere due numeri
interi se si è capaci di
fare solo somme
e sottrazioni ?
L’informatica è una disciplina
che vive
nello spazio che intercorre
tra i problemi e le risorse
tecnologiche
L’informatico:
inizialmente analizza il
problema per precisare
CHE COSA
deve essere fatto
successivamente
decide
COME
l’esecutore deve
operare
divisore
147 : 38
quoziente
dividendo
147 – 38 = 109
1
109 – 38 = 71
71 – 38 = 33
33 < 38 … il calcolo è terminato
147 : 38 = 3 con il resto di 33
2
3
dividendo
acquisisci dividendo
acquisisci divisore
109
147
33
71
divisore
quoziente  0
38
quoziente
dividendo  dividendo-divisore
quoziente  quoziente +1
0
1
3
2
dividendo >= divisore
dividendo < divisore
scrivi quoziente
scrivi dividendo
schermo
3
33
acquisisci dividendo
acquisisci divisore
PROGRAM dividi;
Utilizzando
i diagrammi
VAR
dividendo,divisore,
sintattici
quoziente:
INTEGER;
BEGIN
quoziente  0
READLN(dividendo);
READLN(divisore);
quoziente := 0;
dividendo  dividendo-divisore
quoziente  quoziente +1
dividendo >= divisore
dividendo < divisore
scrivi quoziente
scrivi dividendo
REPEAT
dividendo
:= dividendo –
L’esecutore
predispone tredivisore;
quoziente := quoziente + 1
locazioni
di memoria
UNTIL
dividendo
< divisore;
in cui registrerà dei
WRITELN(quoziente,dividendo)
numeri interi
END.
La struttura iterativa
falso
Si ripete l’istruzione eseguita
fino a che la condizione indicata si verifica
Vero
Analogo effetto si potrebbe ottenere
utilizzando una forma linguistica differente
falso
Vero
In questo caso
• la ripetizione avviene solo se la condizione si verifica
• l’istruzione potrebbe non essere eseguita
dividendo
acquisisci dividendo
acquisisci divisore
109
147
33
71
divisore
quoziente  0
38
dividendo < divisore
dividendo >= divisore
dividendo  dividendo-divisore
quoziente  quoziente +1
quoziente
0
1
3
2
schermo
scrivi quoziente
scrivi dividendo
3
33
dividendo < divisore
dividendo >= divisore
dividendo  dividendo-divisore
quoziente  quoziente +1
WHILE
espressione
DO
WHILE dividendo >= divisore DO
BEGIN
dividendo := dividendo – divisore;
quoziente := quoziente + 1
END;
istruzione
Dividendo, dopo
:=
:=
l’operazione, conterrà
il uguale
valore della
simbolo
di
differenza
dinamico tra
assegnazione
dividendo
e divisore
acquisisci dividendo
acquisisci divisore
PROGRAM dividi;
VAR dividendo,divisore,
quoziente: INTEGER;
BEGIN
quoziente  0
dividendo < divisore
dividendo >= divisore
dividendo  dividendo-divisore
quoziente  quoziente +1
scrivi quoziente
scrivi dividendo
READLN(dividendo);
READLN(divisore);
quoziente := 0;
WHILE dividendo >= divisore DO
BEGIN
dividendo := dividendo –
divisore;
quoziente := quoziente + 1
END;
WRITELN(quoziente,dividendo)
END.
Scarica

Divisione lucidi