8 - LA STRUTTURA ITERATIVA ( = di “iterazione”, cioè “ripetizione”) FOR … DO …

 

 

La struttura

 

FOR i:= n1 TO n2 DO istruzione

 

oppure:

 

FOR i:= n1 TO n2 DO

                         BEGIN

    istruzione 1;

    istruzione 2;

    istruzione 3;

    …

                         END;

 

ordina al computer di:

 

q       assegnare il valore n1 alla variabile i (NOTA);

q       eseguire l'istruzione che segue il DO  (oppure, il blocco di istruzioni compreso

                                                                     fra il BEGIN che segue il DO e l' END successivo);

q       incrementare di una unità il valore di i;

q       eseguire nuovamente l'istruzione (o il blocco);

q       incrementare di un'altra unità i;

q       eseguire nuovamente l'istruzione (o il blocco);

q       ...

 

Quando, a forza di incrementi di un'unità, la variabile i assume il valore n2,

viene eseguita per l'ultima volta l'istruzione (o il blocco), poi si esce dal ciclo.

 

NOTA: ho usato la lettera i per fissare le idee.

Al posto di i si può mettere un qualunque identificatore di variabile intera.

La variabile del ciclo FOR viene detta “variabile di controllo”, e dev’essere sempre di tipo intero.

 

ESEMPI di programmi con l’uso della FOR … DO …

 

program somma_dei_numeri_naturali_da_1_fino_a_n;     uses crt;    

var k, n, somma: longint;

(*  in questo programma la variabile k funge da "CONTATORE"

     e la variabile somma da "ACCUMULATORE"  *)

begin

clrscr;

writeln (’Dammi un numero intero positivo n;’);

writeln (’ti scriverò la somma dei numeri interi da 1 fino ad n.’);

readln (n);

somma:= 0;

for k:= 1 to n do somma:=somma+k;

write (La somma che ti avevo promesso vale , somma);

readln;

end.

 

program massimo;     uses crt;

var a, n, k, max: longint;

(*  questo programma riceve in input dei numeri e stabilisce quale è stato il più grande fra i numeri introdotti.

     La variabile max svolge il ruolo di "MASSIMO PROVVISORIO";

     il suo valore finale corrisponderà al massimo cercato  *)

begin

clrscr; writeln (’Quanti numeri vuoi introdurre?’); readln (n);

writeln (’Dammi pure questi  ’, n, ’  numeri: ti dirò qual è il massimo’);

max:=0;

for k:= 1 to n do

begin

readln (a);

if a>max then max:=a;

end;

writeln (Massimo = , max);

readln;

end.

 


 

ESERCIZI

 

Esercizio 4)

 

Scrivi un programma che, letto da tastiera un numero intero positivo n,

fornisca in output, su tre colonne:

 

a)      i numeri interi da 1 fino a n;

b)      i rispettivi quadrati;

c)      le rispettive radici quadrate (in notazione non esponenziale).

 

Supponendo, per fissare le idee, n = 4, l'output desiderato è:

 

NUMERO

1

2

3

4

QUADRATO

1

4

9

16

RADICE QUADRATA

1.00000

1.41421

1.73205

2.00000

 

 

 

Esercizio 5)

 

Letto in input un intero positivo n, si vuole in output il valore della somma

1+1/2+1/3+1/4+ ... +1/n.

 

 

 

Esercizio 6)

 

Letti in ingresso un numero qualunque a ed un numero intero positivo n,

si vuole in output l' n-esima potenza di a, ossia il numero .

 

E' indispensabile, in questo programma,

una variabile accumulatore,

il cui valore FINALE sarà la potenza desiderata.

 

 

 

Esercizio 7)

 

Letti in ingresso n numeri (n è fornito in input dall’utente)

in parte positivi e in parte negativi,

che rappresentano gli esiti (in euro) di altrettante partite di poker,

 

·         si conta quanti sono quelli negativi e se ne fa la media aritmetica;

·         si conta quanti sono quelli positivi e se ne fa la media aritmetica.

 

L’output dovrà essere:

 

Hai perso … volte, perdendo in media … euro ogni volta;

e hai vinto … volte, vincendo in media … euro ogni volta.

In totale, hai (perso oppure vinto) … euro.

 

Non è evidentemente necessario utilizzare tante variabili diverse

per ciascuno dei numeri in ingresso;

basterà

 

·      una sola variabile per la lettura;

 

·      una variabile accumulatore per la somma dei negativi

 e una variabile accumulatore per la somma dei positivi;

 

·      una variabile contatore per i negativi e una variabile contatore per i positivi;

 

·      oltre, naturalmente, alla variabile di controllo della struttura FOR ... DO ...

 

Esercizio 8)

 

Scrivi un programma che mandi in output tutti gli interi da 0 a 30,

ciascuno colorato del colore di cui l’intero considerato rappresenta il codice

(vedi paragrafo 5f, “Testo colorato in output”).