Aller au contenu principal

Module 03 · Leçon 2

Les procédures

180 minanalyse · pascal
Affichage du code

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

AspectFonctionProcédure
Retourne une valeur ?Oui (1 seule)Non
Utilisée dans une expression ?Oui (y := F(x);)Non, appelée seule (P(x);)
Effet principalCalculAction (affichage, modification)
Modifier ses paramètresNon (par valeur)Oui (par variable)

2. Syntaxe

DEF PROC Saluer(nom : chaîne)
Début
  Ecrire("Bonjour ", nom, " !")
Fin Saluer

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 ?

BesoinSous-programme
Calculer 1 valeur sans effet visibleFonction
Afficher / écrire dans un fichierProcédure
Modifier plusieurs variables externesProcédure (avec paramètres VAR — leçon suivante)
Renvoyer une réponse oui/non à un testFonction (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

Exercice 1facile
Encadrer un message

É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;
Exercice 2moyen
Afficher un tableau (type bac courant)

É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.
Exercice 3difficile
Décomposition modulaire (hors bac, bonus)

Écrire un programme qui :

  1. Saisit un tableau de notes (procédure Saisir).
  2. Calcule la moyenne (fonction Moyenne).
  3. 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 — Saluer ne retourne rien.
  • Oublier le ; après le BEGIN..END de la procédure.
  • Confondre PROCEDURE (sans type de retour) et FUNCTION (avec).

8. Quiz

Quiz (5 questions)

1

Une procédure peut :

2

L'appel correct d'une procédure `Afficher(T, n)` est :

3

Pour 'l'élève est admis ou non', on choisit :

4

Pour 'imprimer le bulletin sur l'écran', on choisit :

5

Dans la décomposition modulaire, un programme se découpe en :

Bravo d'être arrivé jusqu'ici. Marquez la leçon terminée pour ancrer le progrès.