Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica...

24
Istruzioni Iterative Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari

Transcript of Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica...

Page 1: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

Istruzioni IterativeIstruzioni Iterative

Nicola Fanizzi Laboratorio - Corso di Programmazione (B)C.d.L. in InformaticaDIB - Università degli Studi di Bari

Page 2: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - 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

Page 3: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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

Page 4: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

44

Istruzione Istruzione forfor Diagramma di flusso Diagramma di flusso

variabile<=

val.finale

variabile<=

val.finale

inizializzazionevariabile

inizializzazionevariabile

istruzione/iistruzione/i

falso

vero

Page 5: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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.

Page 6: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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>;

Page 7: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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.

Page 8: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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

Page 9: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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.

Page 10: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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;

Page 11: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

1111

Istruzione Istruzione whilewhile Diagramma di flusso Diagramma di flusso

espressionelogica

espressionelogica istruzione/iistruzione/i

falso

vero

Page 12: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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.

Page 13: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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.

Page 14: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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.

Page 15: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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.

Page 16: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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)

Page 17: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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.

Page 18: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

1818

Istruzione Istruzione repeat-untilrepeat-until Diagramma di flusso Diagramma di flusso

espressionelogica

espressionelogica

istruzione/iistruzione/i

falso

vero

Page 19: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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);

Page 20: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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.

Page 21: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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

Page 22: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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()

Page 23: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

2323

EsempioEsempiometodo dicotomico per il calcolo metodo dicotomico per il calcolo degli zeridegli zeri

f(b)

a b

f(a)

Page 24: Istruzioni Iterative Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.

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.