Istruzioni IterativeIstruzioni Iterative
Nicola Fanizzi Laboratorio - Corso di Programmazione (B)C.d.L. in InformaticaDIB - Università degli Studi di Bari
22
Istruzione Istruzione forfor Si usa quando occorre eseguire un'istruzione
(o una serie di istruzioni) un determinato numero di volteesempio:somma := 0;somma := somma + 7;somma := somma + 7;somma := somma + 7;
usando un ciclo for:somma := 0;for i := 1 to 3 do
somma := somma + 7;
inizializzazione
33
Istruzione Istruzione forfor Sintassi completa Sintassi completa for <var.> := <val.iniziale> to <val.finale> do
<istruzione>;
1. inizializza la variabile <var.> a <val.iniziale>;2. confronta la variabile con <val.finale>;3. se <= allora
esegui istruzione incrementa <var.>torna al passo 2
altrimenti esci dal ciclo
44
Istruzione Istruzione forfor Diagramma di flusso Diagramma di flusso
variabile<=
val.finale
variabile<=
val.finale
inizializzazionevariabile
inizializzazionevariabile
istruzione/iistruzione/i
falso
vero
55
Esempio di ciclo Esempio di ciclo forforprogram somma (input, output);var i, somma, numero: integer;
begin writeln('SOMMA 5 NUMERI'); writeln; somma := 0;
for i := 1 to 5 do begin write('Inserire un intero: '); readln(numero); somma := somma + numero; end;
writeln('Somma: ', somma); readln;end.
66
Varianti di ciclo Varianti di ciclo forforfor i := 16 to 24 do ...for i := -20 to -16 do ...for i := -3 to 1 do ...
for i := 5 to 5 do ... l'istruzione nel ciclo viene eseguita solo 1 volta
for i := 5 to 4 do ... non esegue l'istruzione nel ciclo
cicli a decremento:for <var.> := <val.iniziale> downto <val.finale>
do <istruzione>;
esempio:for i := 5 downto 1 do <istruzione>;
77
EsempioEsempioCalcolo del fattorialeCalcolo del fattoriale il fattoriale di un numero n intero è definito:n! = 1 * 2 * … * (n-1) * n
program fattoriale (input, output);
var n, fat, aus: integer;
begin writeln('CALCOLO DI N!'); writeln; write('Inserire n: '); readln(n);
fat := 1; for aus := 2 to n do fat := fat*aus;
writeln(n,'! = ', fat); readln;end.
88
Istruzione Istruzione whilewhile Si usa quando occorre ripetere un'istruzione (o
una serie di istruzioni) mentre una condizione resta vera:while <espressione logica> do
<istruzione>;
Può essere considerata una generalizzazione del ciclo for ovvero questo ne è una abbreviazione
Una istruzione while può far ciclare per un numero di volte non determinato a priori
99
Esempio di ciclo Esempio di ciclo whilewhileprogram somma2 (input, output);
var i, somma, numero: integer;
begin writeln('SOMMA 5 NUMERI'); somma := 0;
writeln('PROVA WHILE'); writeln;
i := 1; while i <= 5 do
begin write('Inserire un intero: '); readln(numero); somma := somma + numero; i := i+1; end;
writeln('Somma: ', somma); readln;end.
1010
Confronto tra cicli Confronto tra cicli whilewhile e e forfori := 1;
while i <= 5 do
begin
write('intero: ');
readln(numero);
somma:=somma+numero;
i := i+1;
end;
for i := 1 to 5 do
begin
write('intero: ');
readln(numero);
somma:=somma+numero;
end;
1111
Istruzione Istruzione whilewhile Diagramma di flusso Diagramma di flusso
espressionelogica
espressionelogica istruzione/iistruzione/i
falso
vero
1212
EsempioEsempioripetizione con valore di sentinellaripetizione con valore di sentinellaprogram somma3 (input, output);
var somma, numero: integer;
begin writeln('SOMMA di NUMERI'); writeln('inserire 0 per terminare'); writeln;
somma := 0; numero := 1;
while numero<>0 do begin write('Inserire un intero: '); readln(numero); somma := somma + numero; end;
writeln('Somma: ',somma); readln;end.
1313
EsempioEsempioripetizione con condizione ripetizione con condizione complessacomplessa
program sommaMax (input, output);
var somma, numero, max, i: integer;
begin writeln('SOMMA E MAGGIORE'); writeln('Inserire zero per terminare'); numero := 1; somma := 0; max := 0;
i := 1; while (numero<>0) and (i<=10) do
begin write('Inserire intero positivo: '); readln(numero); if numero > max then max := numero; somma := somma + numero; i := i+1; end;
writeln('Somma: ', somma); writeln('Maggiore: ', max); readln;end.
1414
EsempioEsempiosomma e max con interi anche somma e max con interi anche negativinegativi
program sommaMax2 (input, output);var ancora: char; somma, numero, max, i:integer;
begin writeln('SOMMA E MAGGIORE'); writeln('Inserire zero per terminare'); ancora := 'S'; somma := 0; max := -MAXINT-1;
i := 1; while ((ancora='S') or (ancora='s')) and (i<=10)
begin write('Valore intero: '); readln(numero); if numero>max then max := numero; somma := somma+numero; i := i+1; write('Vuoi continuare (S/N) ? ' ); readln(ancora); end;
writeln('Somma: ', somma); writeln('Maggiore: ', max); readln;end.
1515
EsempioEsempiociclo potenzialmente infinitociclo potenzialmente infinito
program sommaN (input, output);
var n, i, somma: integer;
begin writeln('SOMMA DEI PRIMI N NUMERI INTERI'); writeln; write('Valore di n ? '); readln(n);
somma := 0; i := 0; while i<>n do
begin i := i+1; somma := somma+i; end;
writeln('Somma: ', somma); readln;end.
1616
Istruzione Istruzione repeat-untilrepeat-until Si usa quando, in un ciclo, un'istruzione (o una
serie di istruzioni) debba essere ripetuta almeno una volta:repeat
<istruzione>until <espressione logica>;
diversamente dalla while si esce dal ciclo quando la condizione risulta verificata
tra repeat e until può essere messo direttamente un blocco di istruzioni (senza begin..end)
1717
EsempioEsempiosomma e max con repeat-untilsomma e max con repeat-until
program sommaMax3 (input, output);
var somma, numero, max,i:integer;
begin writeln('SOMMA E MAGGIORE'); writeln('Inserire zero per terminare'); somma := 0; max := 0;
i := 1; repeat write('Valore intero'); readln(numero); if numero>max then max := numero; somma := somma+numero; i := i+1; until (numero=0) or (i>10);
writeln('Somma: ', somma); writeln('Maggiore: ', max); readln;end.
1818
Istruzione Istruzione repeat-untilrepeat-until Diagramma di flusso Diagramma di flusso
espressionelogica
espressionelogica
istruzione/iistruzione/i
falso
vero
1919
Cicli annidatiCicli annidati uno dei cicli mostrati può essere considerato
come una singola istruzione e perciò può essere posto all'interno di un altro ciclo:
i:=1;while i <= n do
beginfor j:=1 to m do
writeln('i: ', i, ' j: ', j);i:=i+1;end;
for i :=1 to n dofor j:=1 to m do
writeln('i: ', i, ' j: ', j);
2020
EsempioEsempiostampa quadrato di +stampa quadrato di +
program lineeColonne (input, output);
var n, m, i, j: integer;
begin write('Inserire il numero di linee: ') readln(n); write('Inserire il numero di colonne: ') readln(m);
for i := 1 to n do {inizio blocco ciclo esterno } begin writeln; for j := 1 to m do write('+'); end; { fine blocco ciclo esterno } readln;end.
2121
Tipo Tipo realreal possibilità di memorizzare numeri non interi
var x, y, z: real; rappresentazione interna a 6 byte
range valori positivi e negativi tra 10-38 e 1038
notazione esponenziale normalizzata:<mantissa>*10<caratteristica>
<mantissa> (39+1 bit)<caratteristica> (7+1 bit)
assegnamento:x:=145.34;y:=0.0008;z:=7E+20; {notazione scientifica}
notazione scientifica nEm: indica che n va moltiplicato per 10 elevato a m
2222
Operazioni sul tipo Operazioni sul tipo realreal writeln(x:5:2);
il valore reale sarà scritto in un campo numerico allineato a destra di 5 cifre con 2 cifre decimali
operatori: + - * / regole:
– un operando integer può essere usato in luogo di un real
– se almeno un operando è real il risultato è un valore real
round() e trunc() convertono da real a integer funzioni trigonometriche:
sin(), cos() e arctan() funzioni logaritmico/esponenziali:
sqr(), sqrt(), ln() e exp()
2323
EsempioEsempiometodo dicotomico per il calcolo metodo dicotomico per il calcolo degli zeridegli zeri
f(b)
a b
f(a)
2424
EsempioEsempiometodo dicotomico per il calcolo metodo dicotomico per il calcolo degli zeridegli zeriprogram ricercaZero
(input, output);
const err=0.001;
var a, b, m : real; fa, fb, fm : real;
begin
repeat write('Inserire a: '); readln(a); write('Inserire b: '); readln(b); fa := 2*a*a*a-4*a+1;
fb := 2*b*b*b-4*b+1;
until fa*fb <= 0;
repeat m:=(a+b)/2; fm:= 2*m*m*m-4*m+1;
if fa*fm<0 then begin
fb:=fm; b:=m; end else begin fa:=fm; a:=m; end; until abs(fm)<err;
write ('Zero di f in ', m:0:3);
readln;end.
Top Related