La découpe de problèmes en sous problèmes
Les procédures et les fonctions
En informatique, une fonction est une entité qui encapsule une séquence d'instructions effectuant un traitement spécifique indépendant du reste du programme. Cette fonction peut être réutilisée dans le même programme, ou dans un autre. Il faut voir une fonction comme un outil, et la bibliothèque comme la boite à outils. Il est commun que les développeurs réutilisent pendant toutes leurs carrières les outils conçus par eux-mêmes ou d'autres développeurs.
Les fonctions permettent de diviser un problème en décomposant le programme à réaliser en portions de code plus faciles à utiliser et à entretenir. Les instructions dans la fonction sont encapsulées à l'intérieur de celle-ci, c’est-à-dire que la fonction devient une boite noire. Le programmeur peut faire appel à la fonction sans se préoccuper des détails internes à celle-ci. Il faut distinguer deux types de fonction : Une PROCÉDURE ne retourne aucune valeur, alors qu'une FONCTION renvoie une seule valeur. Par exemple, le pseudo code suivant renvoi la valeur maximum des deux variables.
FONCTION max(a: ENTIER, b: ENTIER) VARIABLE r: ENTIER SI a > b: r <- a SINON: r <- b FIN SI RETOURNER r FIN FONCTION
Maintenant que cette fonction existe, il est possible de l'utiliser, comme s'il s'agissait d'instruction standard, ce qui simplifie nos algorithmes :
DÉBUT VARIABLE a, b, c: ENTIER LIRE "Veuillez compléter la valeur de A:", a LIRE "Veuillez compléter la valeur de B:", b c <- max(a, b) ÉCRIRE "La valeur maximum vaut", c FIN
Le passage par copie ou par référence
Dans les langages de programmation, une copie des variables provenant de la fonction est reçue dans les paramètres au lieu de travailler sur les véritables variables de la fonction appelante. Ce choix est fait pour des raisons de sécurité pour l'intégrité des données. Pour concrétiser ce choix, il est possible d'utiliser le symbole ↓ pour les copies et d'utiliser le symbole lorsqu'on ne souhaite pas copier les valeurs ↕. Ce symbole est appelé une RÉFERENCE.
Dans l'exemple ci-dessous, la procédure suivante n'aurait pas été possible avec une copie des variables, puisque la modification n'aurait eu lieu que dans la fonction, et pas dans tout le programme.
PROCÉDURE swap(↕a: ENTIER, ↕b: ENTIER) VARIABLE c: ENTIER c <- a a <- b b <- c FIN PROCÉDURE
Pour bien comprendre ce comportement de copie, il faut avant tout comprendre pourquoi les données sont copiées. À chaque appel de fonction, une nouvelle zone mémoire est créée pour accueillir les variables temporaires de cette fonction. Les arguments sont alors copiés dans les paramètres. La fonction est ensuite exécutée, et la valeur de retour est copiée dans la fonction appelante. Toutes les variables utilisées à l'intérieur de la fonction sont détruites une fois la fonction terminée.
DÉBUT VARIABLE a, b, c: ENTIER FONCTION max(a: ENTIER, b: ENTIER) SI a > b: RETOURNER a RETOURNER b FIN FONCTION FIN LIRE "Veuillez compléter la valeur de A:", a LIRE "Veuillez compléter la valeur de B:", b c <- max(a, b) ÉCRIRE "La valeur maximum vaut", c FIN
Exercices
- Écrivez une fonction qui calcule la distance euclidienne entre deux points.
FONCTION DIST(x1: RÉEL, x2: RÉEL, y1: RÉEL, y2: RÉEL) RETOURNER √((x1-x2)²+(y1-y2)²) FIN FONCTION
- Écrivez une fonction qui détermine si une année est bissextile.
FONCTION BISSEXTILE(a: ENTIER) SI (a% 4 == 0 ET a % 100 != 0) OU (a % 400 == 0): RETOURNER VRAI FIN SI RETOURNER FAUX FIN FONCTION
- Écrivez une fonction qui reçoit une date sous la forme de 3 entiers (jour, mois, année), qui détermine si la date donnée est valide.
FONCTION CheckDate(jours: ENTIER, mois: ENTIER, annee: ENTIER) VARIABLE maxJour: ENTIER maxJour<-31 SI mois == 2: SI BISSEXTILE(annee): maxJour<-29 SINON maxJour<-28 SINON SI mois==4 OU mois==6 OU mois==9 OU mois==11 maxJour<-30 FIN SI SI mois>=1 ET mois<=12 ET jours>=1 ET jours<=maxJour: RETOURNER VRAI FIN SI RETOURNER FAUX FIN FONCTION
- Écrivez une fonction qui reçoit en paramètre une valeur n, qui calcule la somme des n premiers entiers.
FONCTION SOMME(n: ENTIER) VARIABLE cpt,sum: ENTIER cpt<-0 sum = 0 TANT QUE cpt < n: sum <- sum + cpt cpt <- cpt + 1 FIN TANT QUE RETOURNER sum FIN FONCTION
- Last Author
- kossolax
- Last Edited
- Nov 26 2020, 1:33 PM