Module 03 · Leçon 2
Les procédures
Ce que vous saurez faire
- Définir une procédure (sous-programme sans retour)
- Choisir entre fonction et procédure selon le besoin
- Modifier des variables externes via les paramètres
Avant de commencer
Vous voulez afficher un message de bienvenue ou modifier plusieurs variables à la fois. Une fonction (qui retourne UNE valeur) n'est plus adaptée. Il faut une procédure.
1. Procédure vs Fonction
| Aspect | Fonction | Procédure |
|---|---|---|
| Retourne une valeur ? | Oui (1 seule) | Non |
| Utilisée dans une expression ? | Oui (y := F(x);) | Non, appelée seule (P(x);) |
| Effet principal | Calcul | Action (affichage, modification) |
| Modifier ses paramètres | Non (par valeur) | Oui (par variable) |
2. Syntaxe
DEF PROC Saluer(nom : chaîne)
Début
Ecrire("Bonjour ", nom, " !")
Fin Saluer
DEF PROC Saluer(nom : chaîne)
Début
Ecrire("Bonjour ", nom, " !")
Fin Saluer
PROCEDURE Saluer(nom : string);
BEGIN
Writeln('Bonjour ', nom, ' !');
END;
Appel
Saluer('Amine'); { affiche : Bonjour Amine ! }
Saluer('Sara'); { affiche : Bonjour Sara ! }
Pas de := côté appelant : une procédure ne retourne rien.
3. Procédure sans paramètre
PROCEDURE Ligne;
BEGIN
Writeln('────────────────────────');
END;
BEGIN
Ligne;
Writeln('Bilan');
Ligne;
END.
4. Quand utiliser quoi ?
| Besoin | Sous-programme |
|---|---|
| Calculer 1 valeur sans effet visible | Fonction |
| Afficher / écrire dans un fichier | Procédure |
| Modifier plusieurs variables externes | Procédure (avec paramètres VAR — leçon suivante) |
Renvoyer une réponse oui/non à un test | Fonction (booléenne) |
5. Exemple complet : afficher une matrice
PROGRAM AfficheMatrice;
CONST
N = 3;
VAR
M : ARRAY[1..N, 1..N] OF integer;
i, j : integer;
PROCEDURE Afficher(M : ARRAY[1..N, 1..N] OF integer);
VAR
i, j : integer;
BEGIN
FOR i := 1 TO N DO
BEGIN
FOR j := 1 TO N DO
Write(M[i, j]:4);
Writeln;
END;
END;
BEGIN
{ Saisie }
FOR i := 1 TO N DO
FOR j := 1 TO N DO
Readln(M[i, j]);
{ Affichage }
Afficher(M);
END.
6. Exercices
Écrire une procédure Encadrer(s : chaîne) qui affiche le texte entouré
de deux lignes d'étoiles.
Voir le corrigé
PROCEDURE Encadrer(s : string);
VAR
i : integer;
BEGIN
FOR i := 1 TO Length(s) + 4 DO
Write('*');
Writeln;
Writeln('* ', s, ' *');
FOR i := 1 TO Length(s) + 4 DO
Write('*');
Writeln;
END;
Écrire une procédure AfficherTab(T : Tableau, n : entier) qui affiche
les n premiers éléments séparés par des espaces. Tester avec un
tableau saisi.
Voir le corrigé
PROGRAM TestAffiche;
CONST
MAX = 100;
TYPE
Tab = ARRAY[1..MAX] OF integer;
VAR
T : Tab;
i, n : integer;
PROCEDURE AfficherTab(T : Tab; n : integer);
VAR
i : integer;
BEGIN
FOR i := 1 TO n DO
Write(T[i]:4);
Writeln;
END;
BEGIN
Write('Taille : ');
Readln(n);
FOR i := 1 TO n DO
Readln(T[i]);
AfficherTab(T, n);
END.
Écrire un programme qui :
- Saisit un tableau de notes (procédure
Saisir). - Calcule la moyenne (fonction
Moyenne). - Affiche les notes au-dessus de la moyenne (procédure
AfficherSup).
Chaque traitement doit être dans son propre sous-programme.
Voir le corrigé
PROGRAM Bilan;
CONST
MAX = 100;
TYPE
Tab = ARRAY[1..MAX] OF real;
VAR
T : Tab;
n : integer;
PROCEDURE Saisir(VAR T : Tab; VAR n : integer);
VAR
i : integer;
BEGIN
Write('Combien de notes ? ');
Readln(n);
FOR i := 1 TO n DO
BEGIN
Write('Note ', i, ' : ');
Readln(T[i]);
END;
END;
FUNCTION Moyenne(T : Tab; n : integer) : real;
VAR
i : integer;
s : real;
BEGIN
s := 0;
FOR i := 1 TO n DO
s := s + T[i];
Moyenne := s / n;
END;
PROCEDURE AfficherSup(T : Tab; n : integer; seuil : real);
VAR
i : integer;
BEGIN
Writeln('Notes au-dessus de ', seuil:4:2, ' :');
FOR i := 1 TO n DO
IF T[i] > seuil THEN
Writeln(' T[', i, '] = ', T[i]:4:2);
END;
BEGIN
Saisir(T, n);
AfficherSup(T, n, Moyenne(T, n));
END.
Saisir est une procédure (modifie T et n), Moyenne est une
fonction (retourne 1 valeur), AfficherSup est une procédure (affiche).
7. Erreurs fréquentes au bac
- Utiliser un appel de procédure dans une expression :
y := Saluer('A');est incorrect —Saluerne retourne rien. - Oublier le
;après leBEGIN..ENDde la procédure. - Confondre
PROCEDURE(sans type de retour) etFUNCTION(avec).
8. Quiz
Quiz (5 questions)
Une procédure peut :
L'appel correct d'une procédure `Afficher(T, n)` est :
Pour 'l'élève est admis ou non', on choisit :
Pour 'imprimer le bulletin sur l'écran', on choisit :
Dans la décomposition modulaire, un programme se découpe en :