### 9.4.22 La boucle : for pour fpour

for et pour se sert d’une variable d’incrémentation par exemple j (doit être déclarée comme variable locale).
Première syntaxe
On précise entre des parenthèses et en les séparant par un point virgule, la valeur de départ, la condition d’arrêt et la façon dont on incrémente la variable d’incrémentation, puis on met un bloc d’instructions :
for permet de faire plusieurs fois un bloc d’instructions selon la valeur de la variable d’incrémentation.
for (j:=j1;j<=j2;j:=j+3) {<instructions> }
Par exemple :
S:=0;for (j:=3;j<20;j:=j+3) {S:=S+j;}
Deuxième syntaxe
On commence par for, puis, on précise avec les mots from, to et step, la valeur de départ, la condition d’arrêt et la faç on dont on incrémente cette variable d’incrémentation, puis on met les instructions à effectuer entre do et end_for :
for j from j1 to j2 step p do <instructions> end_for;
Ou on utilise sa traduction. On commence par pour, puis, on précise avec les mots de, jusque et pas, la valeur de départ, la condition d’arrêt et la façon dont on incrémente cette variable d’incrémentation, puis on met les instructions à effectuer entre faire et fpour :
pour j de j1 jusque j2 pas p faire <instructions> fpour; Par exemple :
S:=0;for j from 3 to 20 step 3 do S:=S+j; end_for;
S:=0;pour j de 3 jusque 20 pas 3 faire S:=S+j; fpour;
Troisième syntaxe
On peut à l’aide d’un ensemble, d’une liste ou d’une plage de valeurs A donner les différentes valeurs que doit prendre la variable d’incrémentation j en mettant :
for j in A do ....end_for;.
ou sa traduction :
pour j in A faire <instructions> fpour; Par exemple lorsque j s’incrémente de 1:
S:=0;for j in 1..5 do S:=S+j; end_for;
ou sa traduction
S:=0;pour j in 1..5 faire S:=S+j; fpour;
lorsque j décrit un ensemble de valeurs :
A:=[3,6,9,15,30,45];S:=0;for j in A do S:=S+j; end_for;
ou sa traduction
A:=[3,6,9,15,30,45];S:=0;pour j in A faire S:=S+j; fpour;
ou
A:=%3,6,9,15,30,45%;S:=0;for j in A do S:=S+j; end_for;
ou sa traduction
A:=%3,6,9,15,30,45%;S:=0;pour j in A faire S:=S+j; fpour;
Attention
Ne pas choisir i comme variable d’incrémentation car i représente un nombre complexe !!!
On tape :

    somfor(n):={
    local j,s:=0;
    for (j:=1;j<=n;j++){
       s:=s+1/j;
    }
    return s;
    }

    sompour(n):={
    local j,s:=0;
    pour j de 1 jusque n faire
       s:=s+1/j;
    fpour
    retourne s;
    }

puis:

somfor(5)

ou

sompour(5)

On obtient :

137/60