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.