1
Cours 3
Décomposition et paramétrage des
algorithmes
Algorithme trop long, trop complexe décomposition en plusieurs
algorithmes, chacun résolvant une partie du problème posé.
(Ces algorithmes « s’appellent » entre eux)
1 - Introduction
Jusqu’ici, nous avons vu 2 types d’instructions :
• celles qui traitent directement l’information :
l’affectation (
=
)
la lecture/écriture vers écran/clavier (
lire
,
écrire
)
• celles qui commandent le déroulement du programme :
structures de contrôle (
si…alors…fsi
)
boucles(
tant que
,
répéter
,
pour
…)
Nous verrons dans ce chapitre un troisième type d’instruction :
l’appel depuis un algorithme (l’appelant) d’un autre algorithme (l’appelé)
1 – Appel simple
Exemple : un algorithme
Appelant
réalise deux séries de calculs, et fait toujours
précéder et suivre ces calculs par deux lignes de 60 étoiles.
Pour cela, il fait appel à un algorithme
étoile
qui affiche ces deux lignes d ’étoiles.
2 - Décomposition
Algorithme étoile()
// affiche 2 lignes de 60 étoiles
aux i,j: entier;
début
pour i de 1 à 2 faire
pour j de 1 à 60 faire
écrire(’*’);
fait;
écrire("\n");
fait
fin étoile
Algorithme Appelant()
//…
début
étoile();
//calculs
étoile();
//calculs
étoile();
fin Appelant
Remarque : peu importe comment a été conçu et écrit l’algorithme étoile:
Pour l’utiliser, il suffit de connaître ses spécifications (son en-tête).
distinguer paramètre formel et paramètre effectif
Un paramètre formel est une variable formelle - sans valeur -
déclarée dans l'en-tête d'un algorithme.
Un paramètre effectif est une variable ou une valeur qui est copiée dans le
paramètre formel correspondant au moment de l'appel.
On modifie donc
étoile
en conséquence:
On ajoute à
étoile
un paramètre : un identificateur +son type
2 – Passage de paramètre(s)
Rappel: un paramètre est une variable reçue en entrée par un algorithme.
Même exemple que précédemment mais:
on souhaite préciser à
étoile
la largeur de la ligne à afficher.
Dans
Appelant
, lors de l’appel de
étoile
, on précise dorénavant la valeur
que l’on souhaite attribuer au paramètre
nb
.
Sinon
étoile
ne peut pas fonctionner.
Lors de l'exécution de l'appel, cette valeur est copiée dans
nb.
On souhaite maintenant pouvoir préciser dans
étoile
(qui devient
lignes
):
• le symbole à utiliser
• le nombre de lignes
• le nombre de symboles par ligne
Remarques :
1. un appel contient autant de paramètres effectifs qu’il y a de paramètres
formels dans l'algorithme appelé;
2. la correspondance paramètre formel/paramètre effectif est établie en fonction
de leur ordre dans l’appel et dans l’en-tête ;
3. chaque paramètre effectif doit être du même type que le paramètre formel lui
correspondant.
4. les paramètres formels et effectifs associés n'ont pas forcément le même nom.
3 – Pourquoi décomposer des algorithmes?
A - Algorithme plus lisible, résolution facilitée
Algorithme tri_sélection(tab: tab100Entiers)
// Trie 100 entiers et affiche le résultat
aux i, posmin : entier;
début
pour i de 1 à 99 faire
posmin = cherchePosMin(tab, i, 100);
échange(tab, i, posmin);
fait
affiche(tab);
fin tri_sélection
Fonction cherchePosMin(tab:tab100Entiers, deb, fin:
entier) retourne entier
{deb<=fin, deb>=1, fin<=100}
//Cherche le minima d'une portion du tableau
aux i, posmin: entier;
début posmin = deb;
pour i de deb+1 à fin faire
si tab[i] < tab[posmin] alors
posmin = i;
fsi;
fait
retourne posmin;
fin chercheMin
Algorithme échange(R tab:tab100Entiers, i,j :entier)
//Echange deux cases d'un tableau
aux t: entier;
début t = tab[i];
tab[i] = tab[j];
tab[j] = t;
fin échange
Algorithme affiche(tab:tab100Entiers)
//Affiche le tableau
aux i: entier;
début pour i de 1 à 100 faire
écrire(tab[i]);
fait
fin affiche