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’appe)
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
2
3 – Pourquoi décomposer des algorithmes?
A - Algorithme plus lisible, résolution facilitée
B - Réutilisation
dans un même programme (ex:
étoile
)
entre différents programmes (ex: tri)
C - Modification d'une sous-partie: seul le respect de l'interface importe
(Principe objet. Ex: recherche de position du minima du tri, voiture)
A PARTIR DE MAINTENANT,
ON MODIFIE LA SYNTAXE
D'ÉCRITURE DES ALGORITHMES
!
Chaque paramètre d'un algorithme sera maintenant décrit par son nom
de variable, son type et son mode de transmission (R ou V).
Algorithme truc(Ra: entier)
3 – Les différents modes de transmission
des paramètres
Ce mode de transmission indique si le paramètre effectif est :
1. une Valeur fournie par l’algorithme appelant à l'algorithme appelé
2. une Référence accessible et donc modifiable par les deux algorithmes
concernés: l'appelé et l'appelant
1 – Le passage par valeur (noté V)
• Comportement utilisé depuis le début de l'année
• Seules les valeurs des paramètres effectifs sont transmises,
le paramètre formel (appelé) est une copie du paramètre effectif (appelant)
• Avantage: garantie que les paramètres effectifs sont intacts après l'appel
(ex:
moyenne
)
• Inconvénient: impossible de récupérer un résultat! (ex:
moyenne
)
LES PARAMÈTRES PASSÉS PAR VALEUR SONT DES ENTRÉES.
2 – Le passage par référence (noté R)
Dans ce mode, le paramètre effectif et le paramètre formel
(dont les noms peuvent différer)
désignent une seule et même variable
modifiable par les deux algorithmes : l'appelé et l'appelant.
Exemple: moyenne d'entiers avec V ou R
Autre exemple: permutation d'entiers
On veut créer un algorithme qui permute deux valeurs.
LES PARAMÈTRES PASSÉS PAR RÉFÉRENCE SONT :
SOIT DES SORTIES (Ex: moyenne)
SOIT DES ENTRÉES/SORTIES (Ex: permutation).
3
Des fonctions, pour quoi faire?
• syntaxe rapprochée des fonctions mathématiques
• intégration des appels dans des expressions
Ex: moyenne : fonction ou procédure?
REMARQUE 1
Pourquoi ne pas utiliser que des fonctions?
Ex: algo « moyenne et somme »: multi-affectation? utilisation des structures?
REMARQUE 2
Le choix des E/S dans un algorithme a des conséquences
importantes sur l'utilisation de cet algorithme.
Ex: moyenne de deux entiers et affichage
affichage ou saisie interdisent un usage interne de la fonction
REMARQUE 3
L'introduction du mot-clé
retourne
implique éventuellement
l'existence de plusieurs points de sortie dans une fonction
ou une procédure.
REMARQUE 4
Il ne faut pas oublier qu'un appel de fonction ou procédure peut
masquer un algorithme complexe et coûteux.
Ex: factorielle au carré
1 – Quelle représentation utiliser?
Nous choisissons de créer un type
Polynôme
: c'est une structure contenant un
tableau des coefficients et un degré.
(Le degré du polynôme représenté est donc limité par la taille du tableau.)
Ex: Quelle représentation pour f(x) = 9.5 - 8.1 x + 3.2 x
2
+ 4.1 x
4
?
5 – Application: gestion de
polynômes
2 – Opérations à implanter
Les opérations que nous voulons effectuer sur ces polynômes sont :
• la saisie d’un polynôme
• l’affichage d’un polynôme
• le calcul de la valeur d’un polynôme f en x : f (x)
• le calcul de la dérivée d’un polynôme
• le calcul du produit de deux polynômes f et g
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !