guill.net - La page des réseaux
 

 Algorithmique : deuxième partie
On a déjà moyen avec ce qu'on vient de voir, de faire des petits programmes. Il manque pourtant quelque chose de très utile : les boucles...
On appelle boucle une structure où un ensemble d'instructions est exécuté plusieurs fois.
Il y a trois types de boucle, la boucle Pour, la boucle Tant Que, et la boucle Repeter - Jusqu'à.
Commençons pas la plus simple...

La boucle Pour

C'est la structure que l'on utilise lorsqu'on veut répéter plusieurs instructions un nombre connu de fois.
Reprenons l'exemple des voitures... Plutôt que de demander à l'utilisateur de donner un nombre, il serait préférable de lui écrire directement à l'écran toutes les informations sur toutes ses voitures!

On peut le faire avec une boucle Pour : on connait le nombre de voitures, c'est 10...

Dans les variables
compteur : entier

Dans le programme :
Pour compteur de 1 à 10 Répeter
    Ecrire ( " Marque ", Voiture[compteur].Marque )
    Ecrire ( "Modèle"...)
    Si ContôleTechnique Alors
        ...
    FinSi
Fin Pour

Dans ce programme, on rentre dans la boucle, compteur = 1. On écrit donc les informations relatives à la voiture numéro 1. Ensuite, on répète les instructions et compteur = 2. On va donc afficher les informations concernant la voiture numéro 2 et ainsi de suite, 10 fois!

La boucle Tant Que

Le principe est le même, il s'agit de répéter plusieurs instructions mais un nombre inconnu de fois.
Supposons que l'on fasse un programme pour faire des additions, mais on veut pouvoir faire plusieurs additions à la suite. Cela donne :


 

Tant que l'utilisateur écrira "y", il pourra refaire une autre addition. On ne sais pas combien d'addition il fera : on utilise une boucle Tant Que.

Notons quand-même qu'on n'est pas obligé de rentrer dans la boucle : si l'utilisateur répond autre chose que "y" la première fois, on n'exécute pas ce qu'il y a dans la boucle...
 

La boucle Répéter - Jusqu'à

C'est le même principe que la boucle Tant Que, c'est à dire qu'on ne sais pas combien de fois on va répéter ce qu'il y a dedans. Pourtant la différence réside dans le fait qu'on exécute au moins une fois.
Cela donne :


 
 

Ici, on est obligé de faire au moins une addition...

Et on sort de la boucle si EncoreUneAddition est différent de "y".
 
 
 
 
 

La structure Selon

La structure Selon est assez simple à comprendre. Elle permet de faire quelque chose en fonction de la valeur d'une variable.
Imaginons une variable Note comprise entre 0 et 20.
En fonction de la note, on peut écrire un commentaire différent.
Cela donne
Selon Note
    0..6 : Ecrire ( "C'est nul!" )
    7..9 : Ecrire ( "Bof" )
    10 : Ecrire ( "C'est la moyenne" )
    11..15 : Ecrire ( "Bien" )
    16..20 : Ecrire ( "Excellent" )
Default : Ecrire ( "La note n'est pas entre 0 et 20" )
Fin Selon

NB : Default est utilisé si aucune valeur ne correspond à la variable...
Il est maintenant temps de passer à une autre partie : les fonctions et les procédures...

Fonctions et Procédures

Dans l'exemple du langage structuré, on avait définit des actions avant le programme principal.


 

C'est le but des fonctions et des procédures.
 

La différence entre une fonction et une procédure est la suivante : une fonction renvoie une valeur alors qu'une procédure est un bout de programme.
 
 
 
 
 
 
 

Explication par l'exemple :
Les variables définies dans la fonction ou la procédure sont appelées variables locales.
Elles n'existent que lorsque l'on entre dans la fonction ou procédure et sont détruites losqu'on en sort. On peut évidemment utiliser les variables globales dans les fonctions et procédures...

NB : Les variables globales sont celles qui sont déclarées au début du programme.

Il faut que je vous explique qu'on peut aussi mettre des paramètres à des fonctions ou des procédures...

Exemple : on veut écrire une fonction qui fait la somme de n'importe quel nombre a et b.
On peut définir une fonction comme suit :
fonction Somme (variables a, b : entiers)
    debut
    renvoyer ( a + b )
    fin
fin fonction
Ainsi, dans le programme, la valeur de Somme (5,7) sera 12,la valeur de Somme (Nombre1,Nombre2) sera Nombre1 + Nombre2... et on peut utiliser la fonction Somme autant de fois que l'on veut.
 

Exemple général sur tout ce qu'on a vu

On va faire un programme pour un professeur qui veut classer ses éleves. Dans le type élève, il y aura le nom de l'élève et sa note.
Le professeur rentrera les élèves et leur note les uns après les autres, et le programme écrira à l'écran la liste des élèves et leur note, mais de la meilleure note à la plus mauvaise.
On sait simplement que le nombre d'élève est inférieur à 100.



Commencez par lire le programme pricipal, et seulement après les fonctions et les procédures.
Allons-y...

Au début, il n'y a pas d'élèves, TotalElèves = 0.

Ensuite, jusqu'à ce qu'il n'y ait plus d'élève, on remplit une ligne du vecteur et on augmente de 1 le total des élèves.
A la fin de la boucle, le vecteur est rempli avec les élèves et leur note, et on sait qu'il y a TotalEleves élèves et donc lignes remplies.

Ensuite, on répète autant de fois qu'il y a d'élève : TrouverElèveSuivant, qui doit être une fonction qui revoit la ligne de l'élève suivant à afficher à l'écran, et on écrit à l'écran le nom et la note de l'élève. Et voilà... pour le programme principal.
Maintenant, on va voir ce qu'il y a dans la procédure MettreElèveDansVecteur

Dans le champ DéjàAffiché d'Elève, on écrit Faux. C'est normal, on n'a encore rien affiché. Cette variable servira plus tard...

Dans le programe principal, on augmente TotalElèves de 1 ( on dit incrémenter ) à chaque passage dans la boucle Jusqu'à. Par conséquent, chaque fois qu'on appelle la procédure, on remplit la ligne qui suit celle qui a été remplie avant.
 

Ensuite, on demande si il y a encore un élève après celui-là et on met la réponse dans EncoreUnEleve?.

Il ne reste plus que la fonction, c'est sans doute le plus difficile...


Le but de la fonction est de renvoyer l'élève ayant la note la plus haute et n'ayant pas encore été affiché.
On regarde donc à chaque fois tous les élèves. Si l'élève a déjà été affiché, on ne s'en occupe pas et on passe au suivant. Si il n'a pas été affiché, on regarde si sa note est supérieure à la plus grande note qu'on a trouvé jusque là. Si ce n'est pas le cas, on passe à l'élève suivant, sinon, on dit qu'il a la note la plus haute qu'on ait trouvée jusque là et on retient son numéro de ligne.

A la sortie de la boucle, on se retrouve avec le numéro de ligne de celui qui à la note la plus haute : il ne reste plus qu'à marquer qu'il a déjà été affiché et à renvoyer son numéro de ligne!
 

Lisez bien ce programme... Si vous comprenez tout, alors je n'ai presque plus rien à dire!
Sinon, essayez de prendre un papier et un crayon et de marquer chaque variable et la valeur qu'elle a. Mettez-vous à la place de l'ordinateur et exécutez le programme à la main. Comme ça, vous verrez comment ça marche!
Je vous propose quand même de faire ensemble un autre programme...
D'accord?  Toujours là? Vous avez toujours envie de programmer?
Alors passez à la suite!


Suite

Table des matières