C plusplus:Structures de contrôle boucles
Un article de WikiTuto.
Sommaire |
Définition
Une boucle permet de répéter plusieurs fois un bloc d'instructions.
Boucle while (tant que)
Structure
while (expression) instruction
Tant que l'expression est vraie, on effectue l'instruction, qui peut être simple (terminée par ;), bloc (entre {}) ou vide (; seul). Il ne faut donc surtout pas de ; derrière la ), puisque dans ce cas seule l'instruction vide est répétée plusieurs fois, l 'instruction suivante ne sera faite qu'une seule fois. L'expression est au moins évaluée une fois (évaluer signifie « calculer la valeur »). Tant que l'expression est vraie, on effectue l'instruction, dès qu'elle est fausse, on passe à l'instruction suivante (si elle est fausse dès le début, l'instruction n'est jamais effectuée).
Exemple
#include <iostream.h>
int main(void)
{
float nombre,racine=0;
cout<<"entrez un nombre réel entre 0 et 10";
cin>>nombre;
while (racine*racine<nombre) racine+=0.01;
cout<<"la racine de"<<nombre<<"vaut"<<racine<<"à 1\% près\n";
}
L'expression est le plus souvent formée de tests utilisant les opérateurs < (inférieur), > (supérieur), <= (inférieur ou égal), >= (supérieur ou égal), = = (égal, attention un seul signe = signifie affectation !), != (différent), qui peuvent être combinés par les opérateurs booléens && (et), || (ou) et ! (non). Exemples d'expressions valides :
(a<100) (a>0 && a<=10) ((a>0 && b>0) || c==0)
A la rigueur, l'expression peut être numérique, auquel cas on considère qu'elle est fausse si elle vaut 0, et qu'elle est vraie dans tous les autres cas.
Exercices
Exercice (while_puiss) : faire un programme qui affiche toutes les puissances de 2, jusqu'à une valeur maximale donnée par l'utilisateur. On calculera la puissance par multiplications successives par 2.
Exercice (while_err) : que fait ce programme ?
#include <iostream.h>
#include <math.h>
#define debut 100
#define pas 0.01
int main(void)
{
float nombre=debut;
int compte=0,tous_les;
cout<<("afficher les résultats intermédiaires tous les ? (333 par exemple) ?");
cin<<tous_les;
while (fabs(nombre-(debut+(compte*pas)))<pas)
{
nombre+=pas;
if (!(++compte%tous_les))
cout<<"valeur obtenue"<<nombre<<", au lieu de"
<<(float)(debut+(compte*pas))
<<"en"<<compte<<"calculs\n";
}
cout<<"erreur de 100\% en"<<compte<<"calculs\n";
}
Boucle do while (faire tant que)
Ctructure
do instruction while (expression); (attention au ; final)
Comme pour while, l'instruction est répétée tant que l'expression est vraie. Mais quoi qu'il arrive, l'instruction est au moins faite une fois, avant la première évaluation de l'expression.
Exemple
#include <iostream.h>
int main(void)
{
int a;
do
{
cout<<"entrez le nombre 482";
cin>>a;
}
while (a!=482);
cout<<"c'est gentil de m'avoir obéi\n";
}
Exercice (do_while)
écrivez un programme de jeu demandant de deviner un nombre entre 0 et 10 choisi par l'ordinateur. On ne donnera pas d'indications avant la découverte de la solution, où l'on indiquera le nombre d'essais. La solution sera choisie par l'ordinateur par la fonction rand() qui rend un entier aléatoire.
Boucle for (pour)
structure
for (expr_initiale; expr_condition; expr_incrémentation) instruction
Cette boucle est surtout utilisée lorsque l'on connaît à l'avance le nombre d'itération à effectuer. L'expr_initiale est effectuée une fois, en premier. Puis on teste la condition. On effectue l'instruction puis l'incrémentation tant que la condition est vraie. L'instruction et l'incrémentation peuvent ne jamais être effectuées. La boucle est équivalente à :
expr_initiale;
while (expr_condition)
{
instruction
expr_incrémentation;
}
On peut remarquer qu'en C/C++ on compte en commençant par 0. Pour dire 10 fois bonjour, on écrira :
for(i=0;i<10;i++)cout<<"bonjour\n";
En fait, pendant qu'il dit la première fois bonjour, i vaut 0 (car il n'a pas encore fini la première fois). Puis, quand il a effectivement dit bonjour, i passe à 1 et il dit pour la seconde fois bonjour. Et ceci tant que i est strictement inférieur à 10 (donc jusqu'à 9 compris). Dès que i passe à 10, la boucle est arrêtée, et on passe à la suite.
Une ou plusieurs des trois expressions peuvent être omises, l'instruction peut être vide. for(;;); est donc une boucle infinie.
Exemple
{ char c; for(c='Z';c>='A';c--)cout<<c; }
Exercice (for)
faire un programme qui calcule la moyenne de N notes. N et les notes seront saisies par cin. Le calcul de la moyenne s'effectue en initialisant une variable à 0, y ajoutant progressivement les notes saisies puis division par N).
Voir aussi
- Les instructions et leur séquencement
- Structures de contrôle : les boucles
- Structures de contrôle : les branchements conditionnels
- Branchements inconditionnels (goto)
Auteur :Patrick TRAU.
Copyright : utilisation de ces documents libre pour tout usage personnel. Utilisation autorisée pour tout usage public non commercial, à condition de citer son auteur (Patrick TRAU, IPST, Université Louis Pasteur Strasbourg, email : Patrick.Trau (à) ipst-ulp.u-strasbg.fr ) et de me signaler tout usage intensif. Utilisation commerciale interdite sans accord écrit de ma part.



