Le Monde Merveilleux de l'AlgorithmiqueMD
Bienvenue dans le Monde Merveilleux de l'AlgorithmiqueMD.
Ce cours se veut une introduction à l'algorithmique et à la
programmatique, deux termes que nous définirons plus loin.
Vous êtes au bon endroit si vous n'avez pas, ou à
peu près pas, programmé, mais avez envie d'apprendre cette science
(ou cet art, tout dépendant du point de vue).
Vous êtes au mauvais endroit si vous avez déjà
un bagage en programmation ou en langage C++, ou encore si votre objectif
est d'approfondir votre savoir en la matière plutôt que d'y être
introduit.
Note: |
une partie de ce document provient des efforts de Vincent Echelard,
professeur lui aussi au département d'informatique du Collège
Lionel-Groulx. Si vous le voyez, remerciez-le et offrez-lui un café |
La programmatique et la résolution de problèmes
- On dit de la programmatique qu'elle
représente l'art de la bonne
programmation.
En effet, si l'algorithmique est une science exacte, au même
titre que les mathématiques ou la physique, la programmatique comporte
de son côté une part d'investissement humain et d'esthétique,
tout en étant une composante à part entière (et essentielle)
de la programmation.
Les principaux éléments de la programmatique, et donc les étapes
fondamentales requises pour la rédaction d'un programme, sont:
- Une analyse structurée du
problème;
- Un mode
d'expression permettant d'exprimer les résultats de cette
analyse qui soit indépendant du langage de programmation utilisé
par la suite;
- Une traduction du
résultat exprimé dans un langage compréhensible par la
machine.
Prenons, dans ce qui suit, les
éléments dans l'ordre.
La raison d'être d'un algorithme
À la base de toute la programmatique se trouve
l'algorithmique, la science propre à la conception et à
l'analyses des algorithmes.
- un algorithme se voudra, dans sa forme la
plus générale, une méthode formelle pour résoudre
un problème. Une définition plus précise suivra, mais
gardez celle-ci en tête; elle sera souvent suffisante pour combler nos
besoins.
C'est pourquoi le problème lui-même fait partie intégrante
de notre définition. Pas de problème, pas de plaisir pour nous.
Pour parvenir à produire un véritable algorithme, il faut d'abord
procéder à une analyse du problème, mais pas n'importe
quelle analyse: une analyse structurée.
Exemple: supposons que nous recherchons un algorithme qui nous
permettra de nous faire cuire un oeuf.
Si notre analyse ressemble par exemple à ce qui suit:
Problème:
se faire cuire un oeuf
Algorithme: «euh...
bien, on fait cuire l'oeuf!»
|
nous ne serons pas vraiment plus avancés qu'avant même de se
poser la question «comment résoudre le problème?».
Analyse structurée
Analyser un problème de façon structurée
peut être abordé de plusieurs manières. Dans ce cours, nous
chercherons surtout à décomposer un problème en plus
petits problèmes, dans le but de le simplifier.
Définition, décomposition et solution d'un
problème
Lorsque l'on veut appliquer une solution informatique pour résoudre
un problème, il faut éviter de se précipiter devant un
écran d'ordinateur.
Programmer sans réfléchir a priori ne cause que des problèmes.
On risque, en programmant sans analyse au préalable, d'aboutir à
une solution incomplète (dans la mesure où on arrive effectivement
à une solution).
En effet, le processus qui permet de résoudre un problème
en informatique comporte habituellement deux (2)
phases principales:
- La phase de résolution du
problème, qui permet d'élaborer une solution
théorique au problème;
- La phase
de mise en oeuvre, qui permet d'implanter la solution
théorique sur ordinateur.
Chacune de ces phases comporte un certain nombre d'opérations qu'on
peut regrouper en étapes.
La phase de résolution du problème peut
être scindée en trois (3)
étapes :
- La compréhension du
problème;
- L'analyse des
données et des éléments du problème pour
explorer différentes méthodes de solution
possibles;
- Le choix d'une
méthode de solution, puis la conception et le
développement d'une séquence ordonnée
d'opérations (algorithme) menant à la solution du
problème.
La phase de mise en oeuvre peut être scindée
en deux (2) étapes :
- La traduction de la séquence
ordonnée des opérations dans un langage de programmation
(codification de l'algorithme);
- La mise
au point du ou des programmes résultants, par le biais de tests et
des essais sur des jeux de données fictives (jeux
d'essais).
Le schéma suivant
dénote les relations entre ces diverses étapes:
Il est à relever que le processus de développement est cyclique.
Un schéma plus complet (le temps m'a manqué cette fois-ci) en
ferait état.
Énoncé du problème et données
Nous l'avons souligné auparavant: il n'y a
pas de plaisir sans problème. C'est pourquoi il nous faut
d'abord et avant tout deux choses:
- un problème,
c'est-à-dire une description d'une situation servant de point
de démarrage à la réflexion, et une description de
l'objectif visé, généralement une transformation
à appliquer à la situation
initiale;
- des données, les
éléments objectifs et factuels sur lesquels repose
l'instance précise du problème sur lequel nous
travaillons.
Dans le cas d'un meuble à
assembler, le problème serait de passer de l'état
désassemblé d'un meuble à celui assemblé, et
les données seraient les objets à composer pour constituer
le meuble lui-même. Les instructions... sont du ressort de
l'algorithme
La phase de résolution du problème
Une fois l'étape de la compréhension du problème résolue
(ce qui n'est pas toujours simple), il faut passer à l'étape
suivante qui consiste à examiner différentes approches générales
permettant de résoudre le problème.
Une des méthodes les plus employées en informatique (et qui
sera, comme mentionné précédemment) est l'approche par
sous-objectifs.
Cette méthode consiste à fractionner un problème difficile
en plusieurs petits problèmes plus simples. On dit d'elle qu'elle est
une «méthode descendante» (top down method), du
fait qu'elle part du problème général pour en faire une
décomposition.
Le terme algorithme est utilisé en l'honneur d'un mathématicien
persan, Mohammed ibn Musa al-Khuwarizmi (825
A.D.), dont le 2ème livre nous a donné
le mot algèbre (Al-jabr). |
Étant donné un problème spécifique, un algorithme
est la séquence complète et ordonnée de toutes les opérations
(actions) à faire pour en obtenir la solution. Cette séquence
d'opérations est dictée par le problème à résoudre
et par la méthode de résolution choisie.
Exemples d'algorithmes:
- Les indications données à
quelqu'un pour trouver son chemin;
- La liste
des instructions d'assemblage (mode d'assemblage) d'un avion
à coller ou d'un bureau à
assembler;
- Les instructions d'une recette
de pêches flambées au Grand Marnier.
En informatique, ce terme se réfère à une méthode
de résolution de problèmes, comme nous l'avons mentionné
précédemment. Nous faisons usage d'un ordinateur pour implanter
nos algorithmes dans le but d'automatiser le processus de résolution
de problèmes. L'idée est donc, fondamentalement, de se simplifier
la vie pour longtemps en se la compliquant une fois.
Un algorithme se compose d'une série finie
d'étapes, chacune nécessitant une ou plusieurs
opérations. Chaque opération doit:
- Être précise et bien
définie (sans
ambiguïté);
- Produire les
mêmes résultats avec le même jeu de
données;
- Se terminer
après un nombre fini
d'opérations.
- Une
opération est une action pouvant être effectuée par
un ordinateur.
Par exemple, l'ordinateur
peut:
- Lire un
nombre;
- Comparer 2 nombres;
- Additionner, soustraire 2 nombres;
- Répéter une série
d'opérations;
- Afficher un
nombre;
- etc.
Les étapes d'un algorithme
Un algorithme comprend généralement trois (3)
étapes:
- La préparation du traitement qui consiste
à définir ou identifier les données
nécessaires à la résolution du
problème;
- Le traitement qui consiste
à décomposer le problème en opérations et
structures de
contrôle;
- L'édition ou
l'affichage des résultats qui consiste à identifier et
afficher les résultats que l'ordinateur devra nous faire
connaître.
Exemple: le calcul du volume d'une sphère.
- Identifier le rayon;
- Formule pour le calcul du volume de
la sphère : 4/3 * PI * r3;
- Affichage de la valeur du volume
|
Représentation de l'algorithme
Un algorithme peut être présenté sous deux
(2) formes:
- Le pseudo-code ou français
structuré, qui est la représentation textuelle de
l'algorithme, se présente sous la forme d'instructions
brèves utilisant un vocabulaire limité mais
précis;
- Le morphogramme ou
ordinogramme, qui est la représentation graphique de
l'algorithme, se présente sous la forme d'un ensemble de
symboles conventionnels reliés par des
flèches.
Définition des actions de base (opérations, instructions)
Il existe trois grandes catégories
d'opérations :
- La lecture qui permet l'entrée des données (LIRE...);
- L'écriture qui permet la sortie des résultats (ECRIRE...);
- L'affectation qui permet d'assigner à une variable le résultat
d'une expression arithmétique (Variable
<-- Expression
arithmétique).
Définition des structures de contrôle (structures de base)
En programmation structurée, pour construire des
algorithmes, on se sert des trois structures de base suivantes:
- La séquence, qui est une succession ordonnée d'opérations;
- L'alternative, qui est une structure dans laquelle, suivant l'évaluation
d'une condition, l'une ou l'autre de deux opérations est exécutée;
et
- La répétitive, qui est une structure permettant de
répéter une opération (ou un groupe d'opérations)
un certain nombre de fois, en fonction d'une condition.
La séquence
La structure de contrôle qu'on nomme la
séquence se réclame de ce qui suit: une suite
d'opérations consécutives et ordonnées.
Puisqu'on parle d'algorithmique, la séquence aura un
début, une fin, et aura un objectif précis.
Formes de la séquence
L'exemple suivant décrit la structure de contrôle «séquence»
à la fois sous la forme de morphogramme et de pseudo-code.
Exemple de problème à résoudre:
se faire une tasse de thé.
Pseudo-code
|
Morphogramme
|
Faire bouillir de l'eau
Prendre une tasse
Y déposer un sachet de thé
Y verser de l'eau bouillante
Presser le sachet et le retirer
Ajouter un peu d'eau froide
|
|
Remarques
Au sujet de la séquence, remarquez les choses
suivantes:
- À partir du moment où une
séquence est énoncée, chaque opération qu'elle
contient est obligatoire. C'est donc dire qu'on ne peut pas sauter
d'étapes dans l'exécution des opérations
(d'où le terme séquence, en fait: une suite finie
d'opérations);
- Dans le cas
d'une séquence, chaque ligne du pseudo-code correspond à un
rectangle dans le morphogramme (une opérations simple: un
rectangle);
- Une séquence se lit toujours
de haut en bas (ou de gauche à droite: l'idée est de
refléter la séquence de lecture normale des individus... du moins,
des nord-américain(e)s);
- Dans le
morphogramme, les rectangles sont reliés les uns aux autres par une ligne
qui marque leur enchaînement obligatoire. Puisque la lecture d'une
séquence se fait de haut en bas, cette ligne arrive toujours au centre
supérieur (point d'entrée) d'un rectangle et le quitte
toujours par son centre inférieur (point de sortie). De plus, prise
globalement, la séquence n'a qu'un point
d'entrée et un point de
sortie;
- Chaque opération d'une
séquence est soit élémentaire, soit
décomposable.
Types d'opérations
- Une opération
élémentaire est celle qu'on ne juge pas utile de
décomposer;
- une opération est
décomposable[1] si on peut
la découper en un ensemble d'opérations plus
détaillées.
Par exemple, pour faire bouillir de l'eau, on peut:
Mettre de l'eau dans
la bouilloire;
Brancher la bouilloire;
attendre que l'eau bouille.
|
Exercices sur les séquences
Une personne utilise sa voiture pour se rendre au travail. Écrire
le pseudo-code et le morphogramme représentant l'algorithme qui permet
à cette personne de calculer et d'afficher son coût de déplacement.
Pour cela votre algorithme devra préalablement lire les
trois (3) renseignements suivants
:
- La distance à
parcourir;
- La performance de la voiture en
km/litre;
- Le prix de l'essence au
litre.
Exercice 2
Les ouvriers d'une entreprise ont reçu une augmentation de salaire
de 4%. Cette augmentation est
rétroactive de 6 mois.
Écrire le pseudo-code et le morphogramme
représentant l'algorithme qui lit:
et affiche:
- Le montant rétroactif auquel l'ouvrier a
droit;
- Le nouveau salaire
annuel;
- Le nouveau salaire
mensuel.
Écrire le pseudo-code et le morphogramme de l'algorithme permettant
d'échanger le contenu de deux variables,
X et Y.
Vous devrez donc:
- Lire les valeurs de X et
Y;
- Échanger le contenu de ces deux variables;
- Afficher la valeur finale de X et
de Y.
Exercice 4
Écrire le pseudo-code et le morphogramme de l'algorithme permettant
de calculer et d'afficher et d'afficher le salaire net d'un employé.
Pour cela, il vous faudra lire les informations
suivantes:
- Le nombre d'heures
travaillées;
- Le taux
horaire.
Il vous faudra tenir compte que l'employé
devra payer:
- 15% d'impôt fédéral;
- 20% d'impôt provincial.
Exercice 5
Un chef d'entreprise veut connaître combien lui coûte la fabrication
d'un exemplaire de son produit. Écrire le pseudo-code et le morphogramme
représentant l'algorithme qui permet à d'exécuter ce
calcul et d'afficher le résultat.
Pour cela votre algorithme devra préalablement lire les
trois (3) renseignements suivants
:
- Le coût des matériaux
nécessaire à la fabrication d'un
exemplaire;
- Le salaire horaire du
machiniste;
- Le nombre d'exemplaire produit par le
machiniste en une heure.
Exercice 6
Écrire le pseudo-code et le morphogramme de l'algorithme permettant
d'échanger le contenu de trois variables:
X, Y et
Z.
Vous devrez donc:
- Lire les valeurs de X,
Y et Z;
- Échanger le contenu de ces trois
variables;
- Afficher la valeur finale de X,
de Y et de
Z.
Écrire le pseudo-code et le morphogramme de l'algorithme permettant
de calculer et d'afficher le salaire net d'un employé ainsi que le
détail des déductions.
Pour cela, il vous faudra lire les informations
suivantes:
- Le nombre d'heures
travaillées;
- Le taux
horaire.
Il vous faudra tenir compte que l'employé
devra payer:
- 15% d'impôt fédéral;
- 20% d'impôt provincial;
- 2,5% d'assurance emploi;
- 2% de régime des rentes.
L'alternative
La structure de contrôle qu'on nomme
l'alternative se réclame de ce qui suit:
- un prédicat qu'on
doit évaluer, duquel on peut dire qu'il est vrai ou
qu'il est faux, sans ambiguïté ni
contradiction;
- un choix, dépendant
de l'évaluation du prédicat, entre une
séquence d'opérations à accomplir s'il
s'avère vrai, et une séquence d'opérations
à faire s'il s'avère faux.
Un exemple de prédicat serait «Jean
est plus grand que Roger». En effet, cet énoncé
est soit vrai, soit faux, au moment où il est formulé,
et pour un Jean et un Roger bien précis.
Un exemple de choix de séquences étant donné
la valeur d'un prédicat serait «s'il
pleut dehors, alors rester à la maison et lire un livre, sinon aller
au parc».
En effet, le prédicat
«il pleut dehors»
est évalué, et dans le cas où il est vrai (s'il pleut
effectivement dehors) la séquence
«rester(maison);
lire(livre)» sera suivie. Dans le cas où le
prédicat s'avère faux (si le temps est ensoleillé),
la séquence «aller au
parc» sera plutôt celle suivie dans le
déroulement du programme.
- Les mots clé d'une alternative sont
si,
alors et
sinon.
La forme générale de l'alternative prête
aux énoncés suivant le modèle «si
(condition) alors (opérations) sinon (opérations)».
Formes de l'alternative
L'alternative peut se présenter sous deux
formes:
- dans la première forme, une ou plusieurs
opérations sont effectuées si la condition est vraie, et une ou
plusieurs opérations sont effectuées si la condition est
fausse;
- dans la seconde forme, aucune
opération n'est prévue si la condition est
fausse[2].
Première forme de l'alternative
Exemple de problème à résoudre en
première forme d'alternative: la pause
café.
Pseudo-code
|
Morphogramme
|
s'il y a du café frais, alors
|
|
On remarquera (avec justesse) que ceci représente une pause café
bien incomplète. Par exemple, s'il n'y a pas de café frais lors
de l'évaluation de la condition, on fera du café, mais on ne
le boira pas.
Nous reviendrons à une solution plus satisfaisante
(dans tous les sens du mot) sous peu, qui impliquera de composer et
d'imbriquer dans notre algorithme à la fois la séquence et
l'alternative.
Seconde forme de l'alternative
Exemple de problème à résoudre en seconde
forme d'alternative: le noctambule.
Variante sur la seconde forme d'alternative
La seconde forme d'alternative peut aussi se prêter à une séquence
d'opérations seulement dans le cas d'une évaluation du prédicat
comme faux, avec un résultat équivalent; par contre, on tend
dans ce cas à perdre un peu en élégance.
Par exemple:
Pseudo-code
|
Morphogramme
|
si le plancher est propre, alors
|
|
La même expression aurait pu s'écrire «si
le plancher est sale, alors passer le balai» et éviter
la suite «si le plancher est propre,
alors (rien) sinon ...».
Le résultat aurait été le même,
toutefois, en terme d'exactitude et de réalisation de
l'objectif fixé. Au sens algorithmique, les deux variantes
présentées sont équivalentes; mais au sens de la
programmatique, nous privilégierons la première des
deux.
Remarques
- Comme pour les autres structures de base, le
morphogramme de l'alternative comporte un point d'entrée (en
haut) et un point de sortie (en bas), qui sont
alignés;
- Le losange
représente la condition évaluer. Dans ce cours, nous convenons de
situer la branche du oui (vrai) à droite et la branche du
non (faux) à gauche. Il est toujours possible de déroger
à cette convention en inscrivant un signe approprié sur
l'une des sorties latérales du losange. Ce signe peut être
o ou n, pour oui ou non, ou encore v ou f, pour vrai
ou faux;
- Le pseudo-code d'une alternative
comporte la particularité suivante: les opérations sont
présentées décalées sur la droite (comme pour la
répétitive, que nous aborderons sous peu). Cette forme de
décalage se nomme indentation, et nous reviendrons sous peu sur sa
signification et son
utilité.
Imbrication des structures de contrôle: étude de la pause
café
Bien entendu, nombreux seront les algorithmes qui combineront
plus d'une structure de contrôle dans la poursuite méthodique
d'un objectif. Le cas de la pause café se prête bien à
un petit exercice d'analyse à ce sujet.
Nous avons:
Pseudo-code
|
Morphogramme
|
s'il y a du café frais, alors
|
|
Pour s'assurer de jouir des fruits de nos efforts, cet algorithme n'est pas
tout à fait suffisant: en effet, dans le cas où nous devons
faire nous-mêmes le café, l'algorithme n'indique pas que nous
en boirons.
Ainsi, mieux vaut enrichir la séquence rencontrée dans le cas
où le prédicat «il y a
du café frais» s'avère faux, surtout si
nous sommes de fervents amateurs du breuvage en question.
Par exemple:
Pseudo-code
|
Morphogramme
|
s'il y a du café frais, alors
|
|
Mais on se retrouve à insérer une forme de redondance dans
notre algorithme: en effet, peu importe le chemin emprunté, on finit
dans chaque cas par «prendre un café»,
et ce en dernier lieu dans chaque cas.
On pourra tirer avantage de cette réalisation pour
simplifier notre algorithme:
Pseudo-code
|
Morphogramme
|
s'il n'y a pas de café frais, alors
|
|
La beauté de tout ceci, c'est que la
séquence et l'alternative se joignent l'une à
l'autre et se combinent tout naturellement. Nous tirerons d'ailleurs
continuellement avantage de cette propriété.
Exercices sur l'alternative
Écrire le pseudo-code et le morphogramme de
l'algorithme permettant de:
- Lire un
nombre;
- Calculer la valeur absolue de ce
nombre;
- Afficher cette valeur
absolue.
Exercice 9
Écrire le pseudo-code et le morphogramme de
l'algorithme permettant de:
- Lire deux
nombres;
- Calculer la somme de ces deux
nombres;
- Calculer la valeur absolue de cette
somme;
- Afficher cette valeur
absolue.
Exercice 10
Écrire le pseudo-code et le morphogramme de
l'algorithme permettant de:
- Lire les valeurs de X,
B et C;
- Calculer la valeur absolue de l'expression
BX+C;
- Afficher cette valeur
absolue.
Exercice 11
Vous devez calculer et afficher la note finale d'un étudiant, ainsi
que la mention succès ou échec. Cet étudiant
a passé trois (3) examens
et la note de passage est soixante (60).
La note finale est calculée comme étant la moyenne des examens.
Créez le pseudo-code et le morphogramme de
l'algorithme permettant de résoudre ce problème.
Vous devez calculer et afficher la note finale d'un étudiant,
ainsi que la mention succès ou échec. Cet étudiant
a passé trois (3) examens
ayant les pondérations suivantes:
- 20% pour le premier;
- 35% pour le deuxième;
- 45% pour le troisième.
La note de passage est soixante (60%).
La note finale est calculée comme étant la moyenne des examens
en tenant compte de la pondération de chaque examen. Créez le
pseudo-code et le morphogramme de l'algorithme permettant de résoudre
ce problème.
Exercice 13
Vous devez calculer et afficher la note finale d'un étudiant, ainsi
que la mention succès ou échec. Cet étudiant
a passé trois (3) examens
et la note de passage est soixante (60).
La note finale est calculée comme étant la moyenne des examens.
Si l'étudiant obtient une note finale se situant entre 55%
et 60%, il a droit à
un examen de reprise, et obtiendra la note de
60% dans la mesure où il réussit ce dernier.
Créez le pseudo-code et le morphogramme de
l'algorithme permettant de résoudre ce problème.
Exercice 14
Écrire le pseudo-code et le morphogramme de l'algorithme
permettant de lire deux (2) nombres
et d'afficher le plus grand des deux. Il ne peut y avoir d'égalité
entre les nombres.
Exercice 15
Écrire le pseudo-code et le morphogramme de l'algorithme
permettant de lire deux (2) nombres
et d'afficher le plus petit des deux. Présumez que ces nombres ne sont
pas égaux entre eux.
Exercice 16
Écrire le pseudo-code et le morphogramme de l'algorithme
permettant de lire trois (3)
nombres et d'afficher le plus grand des trois. Présumez que ces nombres
ne sont pas égaux entre eux.
Exercice 17
Écrire le pseudo-code et le morphogramme de l'algorithme
permettant de lire trois (3)
nombres et d'afficher le plus petit des trois. Présumez que ces nombres
ne sont pas égaux entre eux.
Exercice 18
Écrire le pseudo-code et le morphogramme de
l'algorithme permettant de lire le rayon d'un cercle, ainsi que le choix
de l'utilisateur et imprime:
- soit la circonférence du
cercle;
- soit la surface du
cercle.
Le choix de l'utilisateur peut
être:
- 1 pour la circonférence;
- 2 pour la surface.
Tout autre choix doit générer un
message d'erreur.
Exercice 19
Écrire le pseudo-code et le morphogramme de
l'algorithme permettant de lire la largeur et la longueur d'un rectangle,
ainsi que le choix de l'utilisateur et affiche:
- Soit le périmètre du
rectangle;
- Soit la surface du
rectangle.
Le choix de l'utilisateur peut
être:
- 1 pour le périmètre;
- 2 pour la surface.
Tout autre choix doit générer un
message d'erreur.
Exercice 20
On donne à un vendeur le choix suivant:
- un salaire fixe de 300 $ par
semaine;
- un salaire fixe de 140 $ par
semaine plus 10% de commission
sur les ventes;
- 15% de commission sur les
ventes.
Écrire le pseudo-code et le morphogramme de
l'algorithme permettant de lire:
- Le numéro du
vendeur;
- Le montant des ventes du
vendeur;
et d'afficher:
- Le salaire qui lui reviendrait selon les choix
1, 2,
3;
- Le meilleur choix pour
lui.
La répétitive
La structure de contrôle qu'on nomme la
répétitive se réclame de ce qui suit:
- un prédicat qu'on
doit évaluer, duquel on peut dire qu'il est vrai ou
qu'il est faux, sans ambiguïté ni
contradiction;
- un choix, dépendant
de l'évaluation du prédicat, entre une
séquence d'opérations à accomplir s'il
s'avère vrai, et la terminaison de la
répétitive;
- un retour au
point de l'évaluation du prédicat tant que celui-ci demeure
vrai.
Le principe de revenir au point
d'évaluation du prédicat jusqu'à ce que
celui-ci devienne faux évoque l'image d'une boucle; on dira
d'ailleurs souvent des répétitives qu'elles sont,
simplement, des boucles.
- Le terme clé d'une
répétitive est tant
que.
La forme générale de la répétitive se prête
aux énoncés suivant le modèle «tant
que (condition) faire (opérations)».
Exemple: surveillance de la crème en cours
de cuisson.
Pseudo-code
|
Morphogramme
|
tant que la crème ne bout pas
|
|
Le morphogramme d'une répétitive est intéressant car
il permet de bien saisir son aspect dynamique. La figure précédente
permet de bien représenter le mouvement qui anime cette structure.
Le point d'entrée est en haut. Tant que la condition à
évaluer représentée par le losange reste vraie, il y
a exécution de l'opération représentée par le
rectangle. La ligne qui remonte à gauche indique qu'il faut retourner
évaluer la condition.
Le terme boucle qu'on emploie dans le cas de répétitives
désigne surtout ce mouvement quasi circulaire.
Quand que la condition devient fausse, on quitte la répétitive
en passant par la voie à droite du losange pour atteindre le point
de sortie en bas (voir l'exemple de la pile d'examens à corriger, plus
bas).
Dans notre exemple, le prédicat à satisfaire est «la
crème ne bout pas». Tant que ce prédicat
est vrai, l'algorithme indique que la séquence d'opérations
à exécuter comprend une seule opération, soit «brasser
la crème».
Bien entendu, s'il y a des séquence d'opérations simples comme
«brasser la crème», il y en a aussi de plus longues et
de plus complexes.
Prenons par exemple le cas d'un pauvre professeur face à une pile
d'examens à corriger, où chaque examen comporte quatre questions.
Il est possible, si l'on sait combien d'examens se trouvent dans la pile,
de rédiger un algorithme permettant la correction de chacun d'entre
eux avec une séquence. Toutefois, cette séquence pourrait
devenir arbitrairement longue en fonction du nombre d'examens dans la pile.
Toutefois, avec une répétitive, nous pouvons
arriver à un algorithme relativement simple et élégant pour
résoudre ce problème:
Pseudo-code
|
Morphogramme
|
Tant qu'il reste au moins une copie
inscrire le total sur la 1ière page
|
|
Question piège: |
si on voulait écrire l'algorithme précédent à
l'aide d'une séquence seulement, en sachant qu'il y a cinquante
(50) examens dans la pile,
combien notre séquence comporterait-elle d'étapes? |
Remarques
- Le morphogramme indique clairement que cette
structure ne possède qu'un seul point d'entrée (en
haut) et un seul point de sortie (en bas). Il faut toujours prendre soin, lors
de la conception d'un morphogramme de répétitive,
d'aligner ces deux points;
- Les
opérations d'une répétitive ne seront pas
exécutées si la condition est fausse au
départ;
- Au niveau de l'algorithmique
et de certains langages de programmation, il existe des variantes de la
répétitive qui seront étudiées plus
tard;
- Le pseudo-code d'une
répétitive comporte la particularité suivante: les
opérations à répéter sont présentées
décalées sur la droite. Ce décalage porte le nom
d'indentation.
- Ici,
l'indentation permet de distinguer les opérations faisant
partie de la répétitive de celles qui suivent. L'indentation
est une composante essentielle des principes fondamentaux de la
programmatique.
On peut considérer les traits
verticaux ajoutés au pseudo-code comme les marques des niveaux
d'indentation.
Exercices sur la répétitive
Exercice 21
Écrire le pseudo-code et le morphogramme d'un algorithme
de compte à rebours qui aura pour objet d'écrire successivement
les valeurs entières de 10
à 0 inclusivement.
Écrire le pseudo-code et le morphogramme d'un algorithme
qui aura pour objet d'écrire successivement les nombres pairs de
2 à 50
inclusivement.
Exercice 23
Écrire le pseudo-code et le morphogramme d'un algorithme
de compte à rebours qui aura pour objet d'écrire successivement
les valeurs entières de 20
à 10 inclusivement.
Exercice 24
Écrire le pseudo-code et le morphogramme d'un algorithme
qui aura pour objet d'écrire successivement les nombres impairs de
3 à 49
inclusivement.
Exercice 25
Écrire le pseudo-code et le morphogramme d'un algorithme
qui aura pour objet d'établir la somme des nombres impairs de
1 à 99
inclusivement et d'écrire cette somme.
Exercice 26
Écrire le pseudo-code et le morphogramme d'un algorithme
qui aura pour objet d'établir la somme des nombres impairs de
77 à 7
inclusivement et d'écrire cette somme.
Exercice 27
Écrire le pseudo-code et le morphogramme d'un algorithme
qui aura pour objet d'établir la somme des nombres pairs de
64 à 32
inclusivement et d'écrire cette somme.
Exercice 28
Écrire le pseudo-code et le morphogramme d'un algorithme
qui aura pour objet d'établir la somme des nombres pairs de
2 à 32
inclusivement et des nombres impairs de
33 à 65.
Votre algorithme devra faire afficher cette somme.
Vous devez calculer la moyenne des examens d'un groupe de dix-huit (18)
étudiants. Chaque étudiant a passé trois (3)
examens.
Vous désirez obtenir la moyenne de chacun des
étudiants aux examens, ainsi qu'un commentaire qui variera selon la
moyenne obtenue (voir tableau ci-dessous). Créez le pseudo-code et le
morphogramme de l'algorithme permettant de résoudre ce
problème.
Condition
|
Commentaire
|
0 <= Moyenne < 60 ( 0 à
59)
|
Échec
|
60 <= Moyenne < 70 (60 à
69)
|
Bien
|
70 <= Moyenne < 85 (70 à
84)
|
Très Bien
|
85 <= Moyenne <= 100 (85 à
100)
|
Formidable
|
Exercice 30
Vous devez calculer la moyenne des examens d'un groupe
d'étudiants. Le nombre d'étudiants dans le groupe peut varier
selon la demande de l'utilisateur.
Chaque étudiant a passé trois (3)
examens dont la pondération est la suivante:
- 25% pour le premier;
- 35% pour le deuxième;
- 40% pour le troisième.
Vous désirez obtenir la moyenne aux examens de chacun des étudiants,
ainsi qu'un commentaire qui variera selon la moyenne obtenue (voir tableau
de la question précédente). Créez le pseudo-code
et le morphogramme de l'algorithme permettant de résoudre ce problème.
La méthode du développement graduel
La méthode du développement graduel (ou
développement progressif) permet de percevoir un problème
complexe comme une problème plus simple mais composé de sous
problèmes. L'idée derrière ce concept est de parvenir
à résoudre le problème malgré son apparence abrupte.
Changer de lunettes
Résoudre un problème par voie de développement graduel
ne signifie pas concrètement de changer le problème rencontré
pour un autre, du moins pas en changeant sa nature. On a plutôt en
tête de changer le regard que l'on pose sur le problème.
Cela peut se faire de plusieurs manières. Les plus
fréquemment rencontrées sont:
- formuler différemment un problème donné en posant
la question autrement. Certaines questions paraissent très complexes
(ou même, à la limite, insolubles) à moins que l'on
les aborde sous un autre angle;
- schématiser le problème, le traduire, utiliser
un langage différent pour l'exprimer. On peut ainsi concevoir la
résolution d'un problème sous forme de pseudo-code ou de morphogramme,
sans le changer en tant que tel, mais voir graphiquement le flot de notre
méthode de résolution de problème peut définitivement
être un pas dans la bonne direction;
- subdiviser le problème en modules, soit des sous problèmes
du problème initial qui peuvent se résoudre en eux-mêmes.
En fait, puisqu'on peut subdiviser un problème en modules, et qu'un
module est aussi un problème à résoudre, on peut subdiviser
un module en modules plus simples, et ainsi de suite, dans la mesure où
il y a une fin à cette subdivision.
La méthode du développement graduel s'inspire
de chacune de ces méthodes, en les intégrant dans un tout cohérent:
- poser la bonne question est nécessaire: ai-je toutes les données
pour répondre au problème qui m'est présenté?
Comprends-je l'énoncé du problème? Sa formulation est-elle
ambiguë? Parfois, la question porte en elle sa réponse...;
- la subdivision en modules du problème permet de prendre celui-ci
«de haut», pour en voir d'abord l'essentiel et se préoccuper
seulement par la suite des détails;
- la traduction du problème en un langage se prêtant à
un formalisme accru, comme les morphogrammes ou le pseudo-code, aide à
formuler le raisonnement qui mène à une solution claire et
pouvant être reproduite.
Exercices de développement graduel
Pour résoudre les exercices
31 à 35, inspirez-vous
de cet exemple de la technique du développement
graduel.
Exercice 31
Écrire le pseudo-code et le morphogramme d'un algorithme qui aura
pour objet de produire à l'écran un rectangle de 10
lignes sur 8 colonnes
identique à celui présenté ci-dessous:
********
********
********
********
********
********
********
********
********
********
|
Exercice 32
Écrire, en utilisant la technique du développement graduel,
le pseudo-code et le morphogramme d'un algorithme qui aura pour objet de produire
à l'écran un triangle identique à celui présenté
ci-dessous:
*
**
***
****
*****
******
*******
********
*********
|
Exercice 33
Écrire, en utilisant la technique du développement graduel,
le pseudo-code et le morphogramme d'un algorithme qui aura pour objet de produire
à l'écran un triangle identique à celui présenté
ci-dessous:
**********
*********
********
*******
******
*****
****
***
**
*
|
Exercice 34
Écrire, en utilisant la technique du développement graduel,
le pseudo-code et le morphogramme d'un algorithme qui aura pour objet de produire
à l'écran un triangle identique à celui présenté
ci-dessous:
<****>
<<****>>
<<<****>>>
<<<<****>>>>
<<<<<****>>>>>
<<<<<<****>>>>>>
<<<<<<<****>>>>>>>
<<<<<<<<****>>>>>>>>
<<<<<<<<<****>>>>>>>>>
<<<<<<<<<<****>>>>>>>>>>
|
Exercice 35
Écrire, en utilisant la technique du développement graduel,
le pseudo-code et le morphogramme d'un algorithme qui aura pour objet de produire
à l'écran un triangle identique à celui présenté
ci-dessous:
*
---
*****
-------
*********
-----------
*************
---------------
*****************
-------------------
|
[1] Nous reviendrons sur la
notion de décomposition lors de l'étude du
développement graduel.
[2] ... ou vraie, c'est
selon; les deux formes sont, en fait, équivalentes entre elles.
[3] Incrémenter est
un anglicisme pour «
augmenter de
1». L'opération est tellement commune en informatique
qu'on en est venu à utiliser un terme spécifique pour la dénoter.