Oppure

Loading
Program Esempio4;
Uses Crt;
Var soldi,incremento,percentuale:longint;
    anni,i:word;

begin
    clrscr;
    write(‘Inserire l’’ammontare attuale del denaro: ‘);
    readln(soldi);
    write(‘Inserire l’’interesse mensile del denaro: ‘);
    readln(percentuale);
    write(‘Inserire il numero di anni: ‘);
    readln(anni);
    for i:=1 to anni do
      begin
      (*Serve un div (divisione intera) perchè il risultato
      è un numero intero*)
      incremento:=soldi*percentuale div 100;
      soldi:=soldi+incremento;
      end;
    write(‘Fra ‘,anni,’ anni possederai ‘,soldi,’ euro.’);
readln
end.


Questo programma è molto più alla vostra portata.
Iniziamo subito con il dire che, dopo la parola for, ci vuole l’assegnamento ad una variabile di un valore (in questo caso i:=1). Questa stessa variabile verrà incrementata automaticamente dal computer ad ogni step e, una volta uguale al numero (o alla variabile) dopo il to (in questo caso anni), il ciclo terminerà.
L’incremento è la percentuale detta dell’ammontare totale (incremento:soldi=percentuale:100) ed è stato calcolato mediante una semplice proporzione.
Da notare è anche il fatto che il valore di una variabile può essere incrementato anche usando la stessa variabile come riferimento. Infatti l’algebra non permetterebbe espressioni del tipo x=x+q, perché, risolvendo l’equazione, si otterrebbe 0=q e sarebbe (con q diverso da 0) una cosa assurda (se invece q fosse 0, verrebbe x=x, che è abbastanza ovvio). Il Pascal invece, come del resto tutti gli altri linguaggi, permette questa sintassi, molto comoda (anche se non la migliore, infatti, linguaggi di alto livello come il C++ e il Vb.Net, nonché il Java, hanno una sintassi ancora più breve, x+=q, che equivale a quanto scritto in precedenza).
Tornando a noi, il ciclo for...to...do ripete un blocco di istruzioni un numero determinato di volte, ragion per cui, sono assolutamente vietati valori reali decimali prima e dopo il to.
In pratica, scrivere:

For i:=5 to n do
  begin
  ...
  end;

equivale a scrivere:

i:=5;
repeat
...
i:=i+1;
until i=n+1;

oppure:

i:=5;
while i<=n do
  begin
  ...
  end;

Un ultima nota: il ciclo for...to...do assegna un valore ad una variabile e poi lo incrementa sempre di 1 ad ogni step. Esiste, però, anche il costrutto for...downto...do, che, invece di incrementare l’indice, lo decrementa.

E' da notare che i cicli infinti con il for sono molto rari da trovare: infatti solo in casi come:

for i:=1 to 12 do
  begin
  (*istruzioni varie*)
  i:=i-1;
  end;


Infatti ad ogni step, la i viene incrementata e decrementata, ossia non cambia mai e rimane sempre uguale a sè stessa. Un altro caso strano è questo:

for i:=2 to 11 do
  begin
  (*istruzioni varie*)
  i:=i+1;
  end;


Infatti, dato che il valore iniziale di i + pari, la stessa i viene incrementata due volte ad ogni step, da che risulta che ogni volta l'incremento sarà di 2 e perciò non potrà mai assumere valori dispari: nella conta di salterà l'11 e perciò i non sarà mai uguale al limite prefissato e si entrerà in un ciclo infitito.
A cura di: Il Totem