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: successivamente decide COME l’esecutore deve operare inizialmente analizza il problema per precisare CHE COSA deve essere fatto
33 < 38 … il calcolo è terminato 147 : 38 divisore quoziente dividendo 147 – 38 = 109 1 109 – 38 = 71 2 71 – 38 = 33 3 33 < 38 … il calcolo è terminato 147 : 38 = 3 con il resto di 33
3 33 147 109 71 33 38 1 3 2 acquisisci dividendo acquisisci divisore quoziente 0 quoziente 1 dividendo dividendo-divisore quoziente quoziente +1 3 2 dividendo >= divisore schermo dividendo < divisore 3 33 scrivi quoziente scrivi dividendo
Utilizzando i diagrammi PROGRAM dividi; acquisisci dividendo acquisisci divisore Utilizzando i diagrammi sintattici VAR dividendo,divisore, quoziente: INTEGER; BEGIN quoziente 0 READLN(dividendo); READLN(divisore); quoziente := 0; REPEAT dividendo := dividendo – divisore; quoziente := quoziente + 1 UNTIL dividendo < divisore; L’esecutore predispone tre locazioni di memoria in cui registrerà dei numeri interi dividendo dividendo-divisore quoziente quoziente +1 dividendo >= divisore dividendo < divisore WRITELN(quoziente,dividendo) END. scrivi quoziente scrivi dividendo
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
3 33 147 109 71 33 38 1 3 2 acquisisci dividendo acquisisci divisore quoziente 0 dividendo < divisore quoziente dividendo >= divisore 1 dividendo dividendo-divisore quoziente quoziente +1 3 2 schermo 3 33 scrivi quoziente scrivi dividendo
:= := dividendo dividendo-divisore quoziente quoziente +1 WHILE espressione DO istruzione WHILE dividendo >= divisore DO BEGIN dividendo := dividendo – divisore; quoziente := quoziente + 1 END; Dividendo, dopo l’operazione, conterrà il valore della differenza tra dividendo e divisore := simbolo di assegnazione := uguale dinamico
dividendo dividendo-divisore quoziente quoziente +1 PROGRAM dividi; acquisisci dividendo acquisisci divisore VAR dividendo,divisore, quoziente: INTEGER; BEGIN READLN(dividendo); quoziente 0 READLN(divisore); dividendo < divisore quoziente := 0; dividendo >= divisore WHILE dividendo >= divisore DO BEGIN dividendo := dividendo – divisore; quoziente := quoziente + 1 END; dividendo dividendo-divisore quoziente quoziente +1 WRITELN(quoziente,dividendo) scrivi quoziente scrivi dividendo END.