Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > Autres langages > [Pascal] Cours pour débutants sur le Pascal > Aller plus loin > Procédures > Lecture du tutoriel

Procédures

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)
Avatar
Auteur : SAurOn
Note : 17 / 20 (3 votes)
Visualisations : 4 271

Plus d'informations Plus d'informations
Dans ce chapitre, nous verrons les procédures et les fonctions.

Et ça sert à quoi ?


Ça sert à rendre le code moins lourd, plus lisible. En fait, nous allons apprendre à structurer nos programmes en petits bouts.
Tous les gros programmes en Pascal sont en fait des assemblages de petits bouts de code.

Mais, nous avons tout le chapitre pour aller en profondeur : donc, attaquons-le sans plus tarder !
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire

Les procédures

Nous avons vu, dans les premiers chapitres, que les programmes suivaient ce "schéma" :
Code : Pascal
1
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 : Pascal
1
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 :lol: ).
Eh bien je vais vous dire : il n'y a pas plus simple !

Code : Pascal
1
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 :

Schéma des variables

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 : Pascal
1
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 :D .

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.

Exemples et exercices

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 :p ). 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 : Pascal
1
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 :euh: ) :

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.

Q.C.M.

Comment appeler une procédure non paramétrée ?
Quelle est la différence entre une variable locale et une variable globale ?

Statistiques de réponses au QCM


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 !
Chapitre précédent Sommaire
Retour en haut Retour en haut


Créé : le 01/12/2005 à 20:05:56
Modifié : le 22/08/2008 à 15:49:16
Avancement : 100%
Licence : Copie non autorisée

7 commentaires

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 173 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0736s (0.0624s)