Enoncé
Ecrire un algorithme qui calcule la somme des nombres entiers de 1 à N.
Plusieurs énoncés proches de celle-ci sont proposées et l’objectif est toujours le même : donner un premier exemple sur l’utilisation des boucles.
Dans cet article, nous allons voir cet exemple en se concentrant sur trois points essentiels :
Un point essentiel dans cette forme est le compteur. Si nous connaissons l'intervalle ou le nombre de répétitions, il nous faut un compteur pour se rappeler de combien de fois avons nous déjà exécuter le bloc de la boucle.
C'est comme lorsque je vous demande de compter le nombre de billes (par exemple) dans un sac. Vous allez être obligé de se rappeler du nombre de billes que vous avez déjà compter; si vous oubliez ce nombre, vous serez obligé de recommencer depuis le début.
Se rappeler en algorithmique est synonyme de "variable" : une zone mémoire où nous pouvons stocker une information. Ainsi, ce compteur doit être une variable déclarée de type entier (qui peut être incrémentée).
Ainsi, un premier exemple sera en Pascal :
Si la boucle contient une seule instruction alors le "Begin" et "End" ne deviennent plus nécessaires. Dans le cas contraire, vous devez informer le compilateur des instructions à répéter et il faut les séparer d'autres instructions qui viennent après la boucle, ainsi, le "Begin" et "End" deviennent obligatoires.
L'objectif de cet premier exemple est de vous montrer le mot "Bonjour" affiché dix (10) fois comme prévu. A chaque fois, le compteur "i" est incrémenté par un, ainsi, le programme se rappelle du nombre de répétition et est-ce qu'il aterminé l'exécution ou pas. IL N'EST PAS OBLIGATOIRE D'UTILISER LE COMPTEUR "i" A L'INTERIEUR DE LA BOUCLE, son rôle principal est de compter le nombre de fois seulement.
Néanmoins, nous pouvons voir que ses valeurs consécutives sont intéressantes pour le problème que nous tentons de résoudre :
En effet, notre objectif est de calculer la somme : 1 + 2 + 3 + ... + N.
Cela ressemble aux valeurs de i dans sa boucle. Mais, il faut se rappeler que "i" ne prend pas toutes ces valeurs à la fois; il ne peut prendre qu'une seule valeur à la fois. Ces valeurs sont prises par "i" à travers les différentes itérations dans la boucle. Ainsi, à chaque itération, nous devons ajouter la valeur à la somme et attendre la prochaine itération pour obtenir une autre valeur (la valeur suivante) et ainsi de suite jusqu'à la fin de la boucle. Ainsi, la solution de l'exercise sera tout simplement :
P. S. : Vous pouvez voir que l'affiche de la somme n'est exécuté qu'une seule fois. Sans un Begin et End le compilateur ne prend qu'une seule instruction comme bloc de la boucle.
Nous pouvons exécuter cette solution et voir qu'elle donne exactement les même valeur (15 pour 5 et 55 pour 10) :
Plusieurs énoncés proches de celle-ci sont proposées et l’objectif est toujours le même : donner un premier exemple sur l’utilisation des boucles.
Dans cet article, nous allons voir cet exemple en se concentrant sur trois points essentiels :
- L’utilité des boucles, qui est l’objectif principal de l’exercice.
- L’exercice cache deux problèmes en un; faisons la séparation.
- L’exercice nous “force” à choisir la solution informatique au lieu de la solution mathématique.
Un point essentiel dans cette forme est le compteur. Si nous connaissons l'intervalle ou le nombre de répétitions, il nous faut un compteur pour se rappeler de combien de fois avons nous déjà exécuter le bloc de la boucle.
C'est comme lorsque je vous demande de compter le nombre de billes (par exemple) dans un sac. Vous allez être obligé de se rappeler du nombre de billes que vous avez déjà compter; si vous oubliez ce nombre, vous serez obligé de recommencer depuis le début.
Se rappeler en algorithmique est synonyme de "variable" : une zone mémoire où nous pouvons stocker une information. Ainsi, ce compteur doit être une variable déclarée de type entier (qui peut être incrémentée).
Ainsi, un premier exemple sera en Pascal :
Si la boucle contient une seule instruction alors le "Begin" et "End" ne deviennent plus nécessaires. Dans le cas contraire, vous devez informer le compilateur des instructions à répéter et il faut les séparer d'autres instructions qui viennent après la boucle, ainsi, le "Begin" et "End" deviennent obligatoires.
L'objectif de cet premier exemple est de vous montrer le mot "Bonjour" affiché dix (10) fois comme prévu. A chaque fois, le compteur "i" est incrémenté par un, ainsi, le programme se rappelle du nombre de répétition et est-ce qu'il aterminé l'exécution ou pas. IL N'EST PAS OBLIGATOIRE D'UTILISER LE COMPTEUR "i" A L'INTERIEUR DE LA BOUCLE, son rôle principal est de compter le nombre de fois seulement.
Néanmoins, nous pouvons voir que ses valeurs consécutives sont intéressantes pour le problème que nous tentons de résoudre :
Program ExempleBoucle;
Var
i : Integer;
Begin
For i:= 1 to 10 Do
WriteLn('Valeur actuelle de i : ', i);
End.
Var
i : Integer;
Begin
For i:= 1 to 10 Do
WriteLn('Valeur actuelle de i : ', i);
End.
En effet, notre objectif est de calculer la somme : 1 + 2 + 3 + ... + N.
Cela ressemble aux valeurs de i dans sa boucle. Mais, il faut se rappeler que "i" ne prend pas toutes ces valeurs à la fois; il ne peut prendre qu'une seule valeur à la fois. Ces valeurs sont prises par "i" à travers les différentes itérations dans la boucle. Ainsi, à chaque itération, nous devons ajouter la valeur à la somme et attendre la prochaine itération pour obtenir une autre valeur (la valeur suivante) et ainsi de suite jusqu'à la fin de la boucle. Ainsi, la solution de l'exercise sera tout simplement :
Program ExempleBoucle; Var i, n, somme : Integer; Begin ReadLn(n); somme := 0; For i:= 1 to n Do somme := somme + i; WriteLn(somme); End.
P. S. : Vous pouvez voir que l'affiche de la somme n'est exécuté qu'une seule fois. Sans un Begin et End le compilateur ne prend qu'une seule instruction comme bloc de la boucle.
La chose à ne pas faire
Certains étudiants propose la solution suivante :Program ExempleBoucle; Var i, n, s : Integer; Begin ReadLn(n); s := ((1 + n) * n) div 2; WriteLn(s); End.
Nous pouvons exécuter cette solution et voir qu'elle donne exactement les même valeur (15 pour 5 et 55 pour 10) :
Néanmoins, pour un informaticien, cette solution est tout simplement fausse : c'est une solution d'un mathématicien. En effet, vous avez fait le calcul à la place de l'ordinateur. Si cela est facile pour l'exemple traité, cela ne sera pas toujours le cas; vous allez faire des calculs ou essayer de prouver des théorèmes pour simplifier les calculs au lieu de laisser la main à l'ordinateur avec sa puissance pour faire les calculs à votre place.
Si vous arriverez à séparer entre l'approche mathématique et l'approche algorithmique, cela sera un premier pas vers une meilleure compréhension de plusieurs problèmes en algorithmique et une meilleure utilisation de la puissance de votre ordinateur.
Si vous arriverez à séparer entre l'approche mathématique et l'approche algorithmique, cela sera un premier pas vers une meilleure compréhension de plusieurs problèmes en algorithmique et une meilleure utilisation de la puissance de votre ordinateur.