Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Nous avons vu, dans les premiers chapitres, que les programmes suivaient ce "schéma" :
Code : Pascal1
2
3
4
5
6
7
8
9 | program exemple(output) { Ici, on donne un nom au programme }
var { Ici, création de variables }
begin
{ et ici, on écrit le programme en lui-même }
readln ;
end.
|
Vous le voyez, là-dedans, on n'a écrit le programme QUE entre
begin et
end.
Et quel est le problème ?
Ben, le problème c'est que la plupart des programmes 'sortent' du
begin -
end.
Imaginez que vous ayez un programme qui fait des milliers de lignes : si vous mettez tout là-dedans, ça va être le bordel ! Non, non, non, il faut vous organiser. Nous allons en fait découper nos programmes en petits bouts, qu'on appelera 'procédures' ou, comme on le verra plus bas, 'fonctions'.
A quoi sert une procédure ?
Une procédure exécute des actions et
modifie des variables. C'est un morceau de code qui sert à faire quelque chose de précis.
Voici un petit exemple de procédure.
Vous voulez, par exemple, tripler la variable 'nombre', de type
integer.
Vous devez alors appeler une procédure du nom 'triple', qui modifiera cette variable chaque fois que vous voulez l'appeler.
Le but d'une procédure est donc d'alléger votre code, en n'écrivant qu'une seule fois ce que le programme doit faire plusieurs fois.
Schéma d'une procédure
Vous savez donc maintenant ce qu'est une procédure.
C'est bien beau tout ça, mais vous ne savez pas comment elle se construit.
Je vous donne donc le schéma d'une procédure,
à retenir par coeur.
Code : Pascal1
2
3
4 | Procedure nom_de_la_procédure;
begin
{ ici toutes les instructions des procédures }
end;
|
On reconnaît vaguement le schéma du code principal ici, non ?
Je pense que ce schéma n'est pas trop dur à comprendre.
Notre première procédure
Rien de tel que la pratique pour voir concrètement à quoi cela ressemble !
Pour notre première procédure, nous ferons un petit code qui rajoute 5 à l'âge de l'utilisateur pour voir quel âge il aura dans 5 ans (qui a dit que c'était inutile

).
Eh bien je vais vous dire : il n'y a pas plus simple !
Code : Pascal1
2
3
4 | Procedure Age_dans_5_ans;
begin
age := age + 5;
end;
|
Variables locales
Je sens la joie sur vos lèvres tellement les procédures sont simples !
Je vais vous dire que vous avez raison mais, hé, hé, s'il n'y avait pas d'autres choses à vous apprendre, je n'aurais pas fait tout un chapitre là-dessus !
C'est pourquoi je ne vais pas tarder à vous expliquer ce que sont les "variables locales".
Dans la procédure précédente, on utilisait et modifiait une variable qu'on appelle 'globale', c'est-à-dire qu'elle est valable pour tout le programme. Imaginons maintenant que vous n'ayez besoin d'une variable que pour votre procédure, et rien que pour votre procédure : il serait alors utile qu'elle ne soit valable que pour cette procédure, comme ça vous pourrez utiliser le même nom pour une variable dans une autre procédure (car vous verrez, vous en aurez souvent besoin de plus d'une dans votre programme !), sans pour autant qu'elle ne contienne la même chose !
Comme je l'ai déjà dit, un schéma vaut mieux qu'un long discours :
Bon, je vais tout de suite vous montrer comment ça marche par l'exemple. Tenez : nous allons faire des statistiques en faisant la moyenne arithmétique de l'âge d'un couple.
Petit rappel : pour faire une moyenne, on additionne les modalités de tous les effectifs, et on divise par le nombre d'effectifs totaux ; en gros, et en français : on additionne tous les âges, et on divise par le nombre de personnes auxquelles on a demandé l'âge.
Bon, pour ça, nous allons avoir besoin d'une variable (
somme) qui sera la somme des âges, mais la somme des âges ne nous sert à rien dans le reste du programme. De plus, on pourrait avoir besoin de ce nom-là dans une autre procédure, qui calculerait la moyenne des âges dans un ménage, par exemple.
On aura aussi besoin des variables
globales suivantes :
age1,
age2,
moyenne_ages qui seront des
integer.
Code : Pascal1
2
3
4
5
6 | Procedure moyenne_age_couple;
var somme : integer;
begin
somme := age1 + age2;
moyenne_ages := somme / 2;
end;
|
L'appellation des variables locales se fait exactement de la même manière que pour les variables globales, il n'y a que l'endroit qui change.
Appeler une procédure
C'est pas le tout de savoir comment la faire. Il faut savoir l'incorporer dans notre code source convenablement, et faire ce qu'on appelle 'Appeler une procédure', c'est-à-dire ordonner au programme d'aller voir la procédure.
Commençons par voir où mettre cette fameuse procédure. Pour ça, nous reprendrons l'exemple de l'âge dans 5 ans.
Code : Pascal 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | program test(output);
var age:integer;
{ C'est donc ici que vous devez mettre votre procédure, entre le begin - end principal et l'appellation des variables }
Procedure Age_dans_5_ans;
begin
age := age + 5;
end;
begin
Write('Quel est votre age ?');
Readln(age);
Age_dans_5_ans; { C'est donc tout simplement comme ça que vous devrez appeler la procédure ; alors, compliqué ? ;) }
write('Dans 5 ans votre age sera de', age:3:0, ' ans');
readln ;
end.
|
Voilà, je ne pense pas que se soit trop difficile à comprendre

.
Procédures paramétrées
J'entends déjà vos cris de joies ironiques au vu de ce titre, mais ne vous inquiétez pas, c'est à peine plus dur que les variables locales.
Imaginez donc une procédure où vous auriez besoin d'une variable globale. Cependant, vous aimeriez que cette variable reste inchangée après le passage par votre procédure, qui elle, l'aura modifié. Prenons un exemple :
Code : Console | Insérez un nombre : 4_
Insérez un deuxième nombre : 3_ |
Ici intervient ensuite une procédure qui double le nombre 4, et qui rajoute tout ça au deuxième nombre (3).
Code : Console | Le double du nombre 4 ajoutée au nombre 3 donne 11 |
Ici donc, vous auriez besoin de la variable 'nombre' intacte. Même si vous l'avez doublée pour ensuite l'ajouter au nombre 3.
Bon, eh bien, pour mieux comprendre, voici le code :
Code : Pascal 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | program test(output);
var nombre1, nombre2, resultat : integer;
procedure math(math1, math2 : integer); { On insère le nom des variables utilisées dans la procédure et leur type }
begin
math1 := math1 * 2;
resultat := math1 + math2;
end;
begin
write('Inserez un nombre : ');
readln(nombre1);
write('Inserez un deuxieme nombre : ');
readln(nombre2);
math(nombre1, nombre2); { On appelle la procédure, et on rajoute après, entre parenthèses, les deux noms de variables correspondantes, ou une valeur. }
write('Le double du nombre ', nombre1:2:0,' ajoutee au nombre ', nombre2:2:0,' donne ', resultat:2:0);
readln;
end.
|
Maintenant, pour être sûr que vous ayez bien compris, je vous ai concocté quelques exemples, puis je vous donnerai des exemples d'exercices pour vous entraîner.
Les procédures, bien que non-indispensables, rendront votre code vraiment mieux structuré, et il est plus que conseillé de bien les maîtriser : c'est pourquoi je vous donne de nombreux exercices qui, en plus, vous feront aussi revoir tout ce que nous avons vu auparavant.
Fuseaux horaires
Pour notre premier exemple, on va faire un code qui fuse dans tous les sens (rooh, ça va, c'est de l'humour

). Bon, imaginez que vous soyez Canadien, et que vous aimeriez savoir quelle heure il est pour notre chère Lisa.
Au Québec, il y a 6 heures de décalage en moins qu'en Europe de l'ouest (France, Belgique, Suisse).
Pour ne pas compliquer l'affaire, on va donc fermer les yeux si le résultat donné est supérieur à 23h59.
Code : Console | Bonjour, cher ami Québecois ! Quelle heure est-il chez toi ? (L''heure) 8_
Et les minutes ? 37_
Pour Lisa, il est : 14h37 |
Voici le code principal, je vous montrerai ensuite les 2 procédures :
Code : Pascal1
2
3
4
5
6
7
8
9 | program horaire(output);
var heure, minute : integer;
Begin
DemandeHeure;
Decalage;
write('Pour Lisa, il est : ', heure:2:0,'h', minute:2:0);
readln;
End.
|
Essayez donc maintenant de trouver les deux procédures et de faire le code complet.
Secret (cliquez pour afficher)Code : Pascal 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | program horaire(output);
var heure, minute : integer;
Procedure DemandeHeure;
Begin
Write('Bonjour cher ami Québecois ! Quelle heure est-il chez toi ? (L''heure) ');
readln(heure);
Write('Et les minutes ? ');
readln(minute);
End;
Procedure Decalage;
Begin
heure := heure + 6;
End;
Begin
DemandeHeure;
Decalage;
write('Pour Lisa, il est : ', heure:2:0,'h', minute:2:0);
readln;
End.
|
Autres idées
Voici d'autres programmes que vous pouvez créer avec des procédures (euh, oui, je dois dire un peu piquées au tuto de M@teo

) :
Conversion Euros / Francs
Ici, vous devrez faire une procédure paramétrée qui prendra comme paramètre le montant en euros,, et le convertir en Francs.
Pour rappel, si vous êtes français, 1 euro = 6.55957 F.
Vous devrez simplement multiplier le nombre d'euros par 6.55957. N'oubliez pas de mettre assez de chiffres avant, et après la virgule !
Astuce : vous pouvez aussi faire un menu qui demande Conversion Euros / Francs ou Conversion Francs / Euros. En conséquence, le programme appelera une procédure ou une autre. Vous pouvez même mettre cette condition dans une procédure !
La Punition
Maintenant, c'est assez facile si vous maîtrisez les boucles. Le programme servira en fait à afficher autant de fois que vous le souhaitez une même phrase. Une première procédure demandera la phrase à afficher le nombre de fois qu'elle doit l'être, et une autre affichera la punition.
Voilà, maintenant, vous devriez bien maîtriser ça. Si vous avez réussi à faire les exercices, vous pouvez passer au chapitre suivant ; sinon, relisez le chapitre jusqu'à ce que vous arriviez à faire ces exercices. N'hésitez pas à vous entraîner tout seuls en faisant travailler votre imagination !