Aller au contenu principal

Module 03 · Leçon 1

Les fonctions

180 minanalyse · pascal
Affichage du code

Ce que vous saurez faire

  • Définir une fonction qui retourne une valeur
  • Appeler une fonction depuis un programme principal
  • Distinguer paramètres formels et paramètres effectifs

Avant de commencer

Vous calculez le PGCD à 3 endroits différents dans un programme. Allez-vous réécrire le code 3 fois ? Et si l'algorithme change, modifier 3 endroits ? Les sous-programmes résolvent ce problème.


1. Pourquoi des sous-programmes ?

Un sous-programme est un bloc de code réutilisable, identifié par un nom. On le définit une fois, on l'appelle autant qu'on veut.

Deux familles :

  • Fonction : retourne une valeur (comme une fonction maths).
  • Procédure : produit un effet (affichage, modification de variables) mais ne retourne pas de valeur. Voir leçon suivante.

2. Syntaxe d'une fonction

DEF FN Carre(x : entier) : entier
Début
  Carre ← x * x
Fin Carre

Anatomie

  • Carre : nom de la fonction. Sert aussi à lui assigner son résultat (Carre ← x * x ou Carre := x * x).
  • x : entier : paramètre formel — le nom utilisé à l'intérieur.
  • : entier (après le )): type de retour.

Appel

y := Carre(5);     { y = 25 }
Writeln(Carre(3) + Carre(4));  { 9 + 16 = 25 }

5, 3, 4 sont les paramètres effectifs : les valeurs passées au moment de l'appel.


3. Plusieurs paramètres

DEF FN Somme(a, b : entier) : entier
Début
  Somme ← a + b
Fin Somme

L'ordre compte : Somme(3, 7)Somme(7, 3) si on regarde uniquement les paramètres formels (ici peu importe car somme est commutative).


4. Exemple complet

PROGRAM TestCarre;
VAR
  n, r : integer;

FUNCTION Carre(x : integer) : integer;
BEGIN
  Carre := x * x;
END;

BEGIN
  Write('Entrez un entier : ');
  Readln(n);
  r := Carre(n);
  Writeln(n, ' au carré = ', r);
END.

5. Variables locales

Une fonction peut avoir ses propres variables, invisibles depuis le programme principal :

FUNCTION Factorielle(n : integer) : integer;
VAR
  i, f : integer;        { variables locales }
BEGIN
  f := 1;
  FOR i := 1 TO n DO
    f := f * i;
  Factorielle := f;
END;

i et f n'existent que pendant l'exécution de la fonction. À la fin, elles disparaissent.


6. Exercices

Exercice 1facile
Maximum

Écrire une fonction Max(a, b : entier) : entier qui retourne le plus grand des deux. La tester dans un programme.

Voir le corrigé
PROGRAM TestMax;
VAR
  x, y : integer;

FUNCTION Max(a, b : integer) : integer;
BEGIN
  IF a > b THEN
    Max := a
  ELSE
    Max := b;
END;

BEGIN
  Readln(x, y);
  Writeln('Max = ', Max(x, y));
END.
Exercice 2moyen
Test de primalité (type bac courant)

Écrire une fonction EstPremier(n : entier) : booléen qui retourne Vrai si n est premier, Faux sinon. Tester pour n saisi par l'utilisateur.

Voir le corrigé
PROGRAM Premier;
VAR
  n : integer;

FUNCTION EstPremier(n : integer) : boolean;
VAR
  i : integer;
  ok : boolean;
BEGIN
  IF n < 2 THEN
    ok := false
  ELSE
  BEGIN
    ok := true;
    i := 2;
    WHILE (i * i <= n) AND ok DO
    BEGIN
      IF n MOD i = 0 THEN
        ok := false;
      i := i + 1;
    END;
  END;
  EstPremier := ok;
END;

BEGIN
  Readln(n);
  IF EstPremier(n) THEN
    Writeln(n, ' est premier')
  ELSE
    Writeln(n, ' n''est pas premier');
END.
Exercice 3difficile
Puissance (hors bac, bonus)

Écrire Puissance(base, exposant : entier) : entier qui retourne base^exposant. Cas particulier : Puissance(2, 0) = 1.

Voir le corrigé
FUNCTION Puissance(base, exp : integer) : integer;
VAR
  i, p : integer;
BEGIN
  p := 1;
  FOR i := 1 TO exp DO
    p := p * base;
  Puissance := p;
END;

Si exp = 0, la boucle ne tourne pas et p reste à 1. Correct.


7. Erreurs fréquentes au bac

  • Oublier d'assigner le résultat (Carre := x * x;) — la fonction retourne une valeur indéfinie.
  • Confondre le nom de la fonction et un paramètre : Carre := x; écrase le résultat avec une mauvaise valeur.
  • Appeler la fonction sans utiliser son retour (Carre(5); au lieu de y := Carre(5);).
  • Définir une fonction après son utilisation dans le programme principal.

8. Quiz

Quiz (5 questions)

1

Comment retourne-t-on une valeur dans une fonction Pascal ?

2

Dans `FUNCTION F(a, b : integer) : integer;`, `a` et `b` sont :

3

Que retourne `Carre(3) + Carre(4)` avec `Carre(x)=x*x` ?

4

Les variables locales d'une fonction :

5

Quel type peut retourner une fonction Pascal ?

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