Académique Documents
Professionnel Documents
Culture Documents
Algorithmique : Volume 1
• Introduction
• Instructions de base
• Logique propositionnelle
Algorithmique 1 : Introduction 2
Thèmes abordés en «Algo»
Algorithmique 1 : Introduction 3
L'algorithmique, vous la pratiquez tous les
jours et depuis longtemps...
Cafetière Expresso
instructions
Algorithmique 1 : Introduction 4
De l'importance de l'algorithme
Informations Résultats
éparses mis en forme
Machine
Données Obtention
structurées de résultats
Traitement
Algorithmique 1 : Instructions de 8
base
Un premier algorithme
Algorithme ElèveAuCarré
{Cet algorithme calcule le carré du nombre que lui fournit l'utilisateur}
• Préparation du traitement
- données nécessaires à la résolution du problème
• Traitement
- résolution pas à pas, après décomposition en sous-
problèmes si nécessaire
• Edition des résultats
- impression à l’écran, dans un fichier, etc.
• Fonction :
Instruction permettant de réserver de l’espace mémoire
pour stocker des données (dépend du type de ces
données : entiers, réels, caractères, etc.)
• Exemples :
variables val, unNombre : entiers
nom, prénom : chaînes de caractères
• Fonction :
Instruction permettant de placer en mémoire les
informations fournies par l'utilisateur.
• Exemples:
saisir(unNombre)
saisir(nom, prénom)
saisir(val)
Algorithmique 1 : Instructions de base 12
Afficher une donnée, un résultat
afficher(<liste de noms de variables, de
constantes ou d ’expressions>)
• Fonction :
Instruction permettant de visualiser les informations
placées en mémoire.
• Exemples:
afficher(unNombre, "est différent de 0")
afficher("La somme de", unNombre, "et" , val , "est",
unNombre + val)
• Fonction :
Instruction permettant de réserver de l’espace mémoire
pour stocker des données dont la valeur est fixée pour tout
l’algorithme
• Exemples :
constantes (MAX : entier) ← 100
(DOUBLEMAX : entier) ← MAX × 2
Algorithmique 1 : Instructions de base 14
Saisies et affichages : exemples
Algorithme ParExemple
{Saisit un prix HT et affiche le prix TTC correspondant}
constantes (TVA : réel) ← 20.6
(Titre : chaîne) ← "Résultat"
variables prixHT, prixTTC : réels {déclarations}
Affichage :
Algorithmique 1 : Instructions de base 15
Affecter une valeur à une variable
<identificateur> ← <expression> ou
<constante> ou <identificateur>
• Fonction :
Instruction permettant d’attribuer à la variable identifiée
par l'élément placé à gauche du symbole ← la valeur
de l'élément placé à droite de ce symbole.
• Exemple:
nom ← "Venus"
val ← 50
val ← val × 2
Algorithmique 1 : Instructions de base 16
Affectation : exemples
constante (SEUIL : réel) ← 13.25
variables valA, valB : réels
compteur : entier
mot , tom : chaînes
valA ← 0.56
valB ← valA tableau de simulation :
valA ← valA × (10.5 + SEUIL) valA valB comp- mot tom
compteur ← 1 teur
compteur ← compteur + 10
mot ← " Bonjour "
tom ← "Au revoir ! "
afficher(mot)
afficher(" valA = ", valA)
afficher(" valB = ", valB)
afficher(" compteur =", compteur )
afficher(tom)
Affichage :
Affichage :
Algorithmique 1 : Instructions de base 19
Ce qu’il fallait faire …
Algorithme SimpleOuDouble
{Cet algorithme saisit une valeur entière et affiche son double si cette
donnée est inférieure à un seuil donné.)
constante (SEUIL : entier) ← 10
variable val : entier
début
afficher("Donnez-moi un entier : ") { saisie de la valeur entière}
saisir(val)
si val < SEUIL { comparaison avec le seuil}
alors afficher ("Voici son double :" , val × 2)
sinon afficher ("Voici la valeur inchangée :" , val)
fsi
fin
si <expression logique>
alors instructions
[sinon instructions]
fsi
si note ≥ 12
alors afficher( "Reçu avec mention" )
sinon si note ≥ 10
alors afficher( "Passable" )
sinon afficher( "Insuffisant" )
fsi
fsi
selon <identificateur>
(liste de) valeur(s) : instructions
(liste de) valeur(s) : instructions
…
[autres : instructions]
• Données : 3 3 -1 10
• Tableau de simulation :
• Affichage :
• Fonction:
répéter une suite d’instructions un certain nombre de fois
traitement
type entier ou
réel,
le même pour valeur dont varie la variable de boucle
ces 4 entre deux passages dans la boucle,
informations à 1 par défaut (peut être négatif)
• Données : 3 -3 10 -1
• Tableau de simulation :
STOP = −1
• Affichage :
• Fonction:
- répéter une suite d’instructions tant qu’une condition est
remplie
remarque : si la condition est fausse dès le départ, le
traitement n’est jamais exécuté
Algorithmique 1 : Instructions de base 34
Sémantique de la boucle tant que
amorçage: initialisation
de la variable de condition
condition d'exécution
du traitement
saisir(val)
tant que val ≠ STOP faire
totalValeurs ← totalValeurs + val
afficher("Donnez une autre valeur, " , STOP, " pour finir. " )
saisir(val)
ftq traitement
afficher("La somme des valeurs saisies est " , totalValeurs)
à exécuter
relance: si la condition
ré-affectation est vérifiée
affichage de la variable
résultats de condition
...équivaut à :
cpt ← 0
tant que cpt < nbVal faire
afficher("Donnez une valeur :")
saisir(valeur)
totalValeurs ← totalValeurs + valeur {cumul}
cpt ← cpt + 1 {compte le nombre de valeurs traitées}
ftq
Algorithmique 1 : Instructions de base 36
Comparaison boucles pour et tant que
(suite)
• Données : -2 0 4
• Tableau de simulation :
• Affichage :
répéter
(ré)affectation de la (des) variable(s) de
condition
traitement {suite d’instructions}
tant que <expression logique (vraie)>
• Fonction:
- exécuter une suite d’instructions au moins une fois et
la répéter tant qu’une condition est remplie
Remarque: le traitement dans l’exemple précédent se
limite à la ré-affectation de la variable de condition
Algorithmique 1 : Instructions de base 41
Comparaison boucles
répéter et tant que
répéter
afficher("Donnez une valeur positive paire :")
saisir(valeur)
tant que (valeur < 0 ou (valeur % 2) ≠ 0)
...équivaut à :
afficher("Donnez une valeur positive paire :")
saisir(valeur)
tant que (valeur < 0 ou (valeur % 2) ≠ 0) faire
afficher("Donnez une valeur positive paire:")
saisir(valeur)
ftq
Algorithmique 1 : Instructions de base 42
Comparaison boucles
répéter et tant que (suite)
• boucle tant que
- condition vérifiée avant chaque exécution du traitement
- le traitement peut donc ne pas être exécuté
- de plus : la condition porte surtout sur la saisie de nouvelles
variables (relance)
• boucle répéter tant que
- condition vérifiée après chaque exécution du traitement
- le traitement est exécuté au moins une fois
- de plus : la condition porte surtout sur le résultat du
traitement
Remarque : la boucle répéter est typique pour les saisies avec vérification.
Algorithmique 1 : Instructions de base 43
Choisir pour... tant que… répéter…
ou
Nombre
Boucle répéter
i
d’itérations
connu ?
oui
Boucle pour
Exemples:
si val > 0 alors afficher(« fini! »)
pour i ← 1 à MAX faire afficher(i × val)
saisir(val)
afficher le carré des
valeurs saisies tant tant que val ≠ 0 faire
qu’on ne saisit pas 0 afficher(val × val)
saisir(val)
ftq
saisir(val)
saisir des données
et s'arrêter dès que somme ← val
leur somme tant que somme ≤ 500 faire
dépasse 500 saisir(val)
somme ← somme + val
ftq
Algorithmique 1 : Instructions de base 47
De l'énoncé à la boucle (suite)
Algorithme Somme
{Cet algorithme fait la somme d’une suite de nombres tant que cette somme
ne dépasse un seuil donné)
constante (SEUIL : entier) ← 1000
variables val, somme : entiers
début
somme ← 0
répéter
afficher( "Entrez un nombre")
saisir(val)
somme ← somme + val
tant que somme ≤ SEUIL
afficher( "La somme atteinte est" , somme - val)
fin
Attention :
La valeur d’arrêt n’est jamais traitée (et donc, jamais comptabilisée)
Algorithmique 1 : Instructions de base 52
Simulation de la boucle
test 1 : 3 5 -1 test 3 : 3 5 -6 4 0 –1
test 2 : 3 5 -6 4 0 8 test 4 : -1
Algorithmique 1 : Logique 57
En quoi la logique est-elle utile au
programmeur ?
Algorithmique 1 : Logique 58
Retour sur les conditions d'itération
Proposition :
expression qui peut prendre la valeur VRAI ou FAUX
Exemples de propositions:
2 et 2 font 4
1 et 1 font 10
il pleut
x>y
Algorithmique 1 : Logique 59
Eléments de logique propositionnelle
• Formule :
- expression logique composée de variables
propositionnelles et de connecteurs logiques
• Variable propositionnelle :
- une proposition considérée comme indécomposable
• Connecteurs logiques:
- négation non, ¬ - conjonction et, ∧
- implication ⇒ - disjonction ou, ∨
• Exemple : p et q variables propositionnelles
((¬ p ∨ q) ∧ ¬ q) ∨ (p ∨ ¬ q)
Algorithmique 1 : Logique 60
Représentations d'une formule
∨
(p ∧ q) ∨ ((¬p ∧ r) ∨ ¬p ) ∧ ∨
p q ∧ ¬
Par un arbre syntaxique :
¬ r
p p
En utilisant la notation préfixée (polonaise) :
∨∧pq∨∧¬pr¬p
Algorithmique 1 : Logique 61
Tables de vérité
Représentation des valeurs de vérité
associées à une expression logique
V F V V V V V V V V V
F V V F F V F V V F F
F V F F V V F V V
F F F F F F F F V
p et q : variables propositionnelles
Algorithmique 1 : Logique 62
Equivalences classiques
• Commutativité
- p∧q équivalent à q∧p
- p∨q équivalent à q∨p
• Associativité
- p ∧ (q ∧ r) équivalent à (p ∧ q) ∧ r
- p ∨ (q ∨ r) équivalent à (p ∨ q) ∨ r
• Distributivité
- p ∧ (q ∨ r) équivalent à (p ∧ q) ∨ (p ∧ r)
- p ∨ (q ∧ r) équivalent à (p ∨ q) ∧ (p ∨ r)
Algorithmique 1 : Logique 63
Equivalences classiques (suite)
• Lois de Morgan
¬ (p ∧ q) équivalent à (¬ p) ∨ (¬ q)
¬ (p ∨ q) équivalent à (¬ p) ∧ (¬ q)
p q p ∧q ¬(p ∧q) ¬p ¬q ¬p ∨ ¬q
Algorithmique 1 : Logique 64
Formules :
quelques classes et relations
• Les tautologies :
- vraies pour toute assignation de valeurs de vérité aux
variables. p ¬p p∨¬p
- exemple : p ∨ ¬ p
Algorithmique 1 : Logique 65
Formules :
quelques classes et relations (suite)
• Les formules équivalentes:
- même valeur de vérité pour toute assignation de la même
valeur de vérité aux variables.
- exemples : p ⇒ q est équivalent à ¬ p ∨ q
p ⇒ q est équivalent à ¬ q ⇒ ¬ p
p q p⇒q ¬p q ¬p∨q
Algorithmique 1 : Logique 66
Du bon usage de la logique
Vérification de l'équivalence de deux formules
Algorithmique 1 : Logique 67
Applications à l'algorithmique
• Interpréter (et bien comprendre!) l’arrêt des itérations
à la sortie d’une boucle.
tant que <cond> faire
À la sortie : non(<cond>) est vrai
donc si cond = p et q
à la sortie : non (p et q)
c’est a dire non p ou non q
Algorithmique 1 : Logique 69
Le Type BOOLEEN
Algorithmique 1 : Logique 70
Le Type BOOLEEN : exemple
Algorithme Logique
constantes (MAX : entier) ← 5
(STOP : entier) ← -1
variables nbVal, val : entiers
ok : booléen
début
nbVal ← 0
saisir (val)
ok ← val ≠ STOP et nbVal < MAX {initialisation de la variable
tant que ok faire de boucle booléenne }
nbVal ← nbVal + 1
saisir(val)
ok ← val ≠ STOP et nbVal < MAX {relance}
ftq
si val = STOP alors ...
Algorithmique 1 : Logique 71
Booléens : encore des exemples
Algorithmique 1 : Logique 72
fin Volume 1
Algorithmique 1 73
Université Paris XI
iUT ORSAY I.U.T. d'Orsay
Département Informatique
Année scolaire 2003-2004
Algorithmique : Volume 2
• Tableaux
• Sous-algorithmes
• Modularité
Algorithmique 2 : Tableaux 1
Ensemble de données du même type
Exemple de problème :
Saisir une suite de nombres, puis afficher cette suite après avoir
divisé tous les nombres par la valeur maximale de la suite.
tableau à une
dimension
tableau à deux
dimensions
Algorithmique 2 : Tableaux 3
Exemples d'applications
Algorithmique 2 : Tableaux 4
Traitements opérant sur des tableaux
On veut pouvoir :
- créer des tableaux
- ranger des valeurs dans un tableau
- récupérer, consulter des valeurs rangées dans un
tableau
- rechercher si une valeur est dans un tableau
- mettre à jour des valeurs dans un tableau
- modifier la façon dont les valeurs sont rangées dans un
tableau (par exemple : les trier de différentes manières)
- effectuer des opérations entre tableaux : comparaison
de tableaux, multiplication,...
- ...
Algorithmique 2 : Tableaux 5
nom du
Définition du type
indice
tableau du tableau
1 2 3 4 5 6
tab contenu
12 5 -78 2 -21 8
du tableau
1 2 3 4 5 6 7 8
unTab
p i s c i n e s
Remarques :
• Indices : en général, démarrage à 1, mais en C++, démarrage à 0
• Nombre d’octets occupés : dépend du type des valeurs enregistrées
Algorithmique 2 : Tableaux 6
Déclaration d'un tableau
Exemple : déclaration d'un tableau pouvant contenir jusqu'à 35 entiers
Autre exemple : déclaration d'un tableau qui contiendra les fréquences des
températures comprises entre –40°C et 50°C
Algorithmique 2 : Tableaux 8
Utilisation d’un tableau :
par les indices
• Accès en lecture :
- afficher(tabl[4]) {le contenu du tableau à l’indice
4 est affiché à l’ écran}
• Accès en écriture :
- tabl[3] ←18 {la valeur 18 est placée dans le
tableau à l’indice 3}
- saisir(tabl[5]) {la valeur entrée par l’utilisateur est
enregistrée dans le tableau à l’indice 5}
- attention!
tabl Å18 nom[2] Å 3
Algorithmique 2 : Tableaux 9
Tableaux à deux dimensions
1 2 3 4 5 6 7
1 10 3 25 14 2 1 8
2 9 20 7 12 2 4 7
tableau à 2 lignes et 7 colonnes
• Déclaration
points : tableau[1,2 ; 1,7] d’entiers
Algorithmique 2 : Tableaux 10
Tableaux à deux dimensions (suite)
1 2 3 4 5 6 7
1 10 3 25 14 2 1 8
2 9 20 7 12 2 4 7
• Accès en lecture :
- afficher(points[1,7]) {la valeur contenue en ligne 1 colonne 7 est
affichée à l’écran}
• Accès en écriture :
- points[2,4] ← 36
- saisir(points[2,4]) {la valeur fournie est enregistrée en ligne 2,
colonne 4}
Algorithmique 2 : Tableaux 11
Saisir les valeurs d'un tableau 1D
Algorithme SaisieTableau
{remplit un tableau avec nbVal valeurs entières }
constantes (TailleMAX : entier) ← 100
variables nbVal, ind : entier
nombres : tableau [1, TailleMAX] d'entiers
début
afficher ("Combien de valeurs sont à saisir?")
saisir (nbVal)
si nbVal > TailleMAX
alors {refuser la saisie : la capacité du tableau est dépassée}
afficher ("trop de valeurs à saisir")
sinon pour ind ← 1 à nbVal faire
afficher ("Donner une valeur")
{valeur à ranger dans la indème case du tableau}
saisir (nombres[ind])
fpour
fsi
Algorithmique 2 : Tableaux 12
fin
Saisie avec « Drapeau »
Algorithme SaisieTableauAvecDrapeau
{remplit un tableau tant qu'il y a des caractères à ranger, dernier caractère : '\'}
constantes (TailleMAX : entier) ← 100
(DRAPEAU : caractère) ← '\'
variables nbLettres : entier {nombre de caractères rangés dans lettres}
lettres : tableau [1, TailleMAX] de caractères
unCar : caractère
début
nbLettres ← 0
Algorithmique 2 : Tableaux 13
(Saisie avec Drapeau, suite)
{rangement du caractère saisi s’il est bon et saisie des caractères suivants}
tant que unCar ≠ DRAPEAU et nbLettres < TailleMAX faire
nbLettres ← nbLettres + 1
lettres[nbLettres ] ← unCar {caractère rangé dans la nbLettresème
case du tableau}
afficher (" Tapez un autre caractère, ou ", DRAPEAU, "pour arrêter la saisie."
saisir (unCar ) {saisie du caractère suivant}
ftq
le caractère ne sera rangé dans le tableau que
{test de sortie de boucle} s'il est ≠ '\‘ et si TailleMAX non atteinte
si unCar = DRAPEAU
alors afficher ("Valeurs saisies intégralement.")
sinon afficher ("Trop de caractères à saisir, plus de place ! ")
fsi
fin
Algorithmique 2 : Tableaux 15
Attention !
• Le drapeau ne doit PAS être rangé dans le tableau
• Ne pas confondre
- taille maximale : TailleMAX (une constante)
- taille effective : nbLettres (une variable)
Algorithmique 2 : Tableaux 16
Affichage d’un tableau
Algorithme SaisitEtAffiche
{saisit et affiche un tableau de caractères}
constantes {voir transparents précédents}
variables {voir transparents précédents}
début
{saisie du tableau : voir transparents précédents}
{affichage}
afficher ("Voici les", nbLettres, "caractères saisis dans le tableau :")
pour cpt Å 1 à nbLettres faire
afficher (lettres[cpt])
fpour
fin ATTENTION
exécuter la boucle
seulement nbLettres fois!
Algorithmique 2 : Tableaux 17
Saisir les valeurs d'un tableau 2D
Algorithme SaisieTableau2D
{remplit un tableau à 2 dimensions }
constantes (TailleMAX : entier) ← 100
variables nbLignes, nbColonnes, indL, indC : entiers
nombres : tableau [1, TailleMAX ; 1, TailleMAX] d'entiers
début
afficher ("Combien de lignes?") ; saisir (nbLignes)
afficher ("Combien de colonnes?") ; saisir (nbColonnes)
si nbLignes > TailleMAX ou nbColonnes > TailleMAX
alors afficher ("trop de valeurs à saisir")
sinon pour indL ← 1 à nbLignes faire
pour indC ← 1 à nbColonnes faire
afficher ("Ligne" , inL, "colonne", indC, " : ")
saisir (nombres[indL indC])
fpour
fpour
fsi
Algorithmique 2 : Tableaux 18
fin
Simulation
Algorithmique 2 : Tableaux 19
Sous-algorithmes
Algorithmique 2 : Sous-algorithmes 20
Identifier le rôle d'un bloc d'instructions
Algorithme Puissances
variables uneVal, puissance : réels
cpt, nbPuissances : entiers
début
afficher ("Donnez un nombre réel quelconque : ")
saisir (uneVal)
afficher ("Combien de puissances successives souhaitez-vous ? ")
saisir (nbPuissances)
{calcul des nbPuissances puissances successives de uneVal }
puissance Å 1
pour cpt Å 1 à nbPuissances faire
puissance Å puissance × uneVal
afficher ("La", cpt, "ième puissance de", uneVal, "est", puissance )
fpour
fin
Algorithmique 2 : Sous-algorithmes 21
En simplifiant l'écriture...
Algorithme Puissances
variables uneVal : réel
nbPuissances : entier
début
afficher ("Donnez un nombre réel quelconque : ")
saisir (uneVal)
afficher ("Combien de puissances successives souhaitez-vous ?
saisir (nbPuissances)
calculPuissances(uneVal, nbPuisssances)
fin
sous-algorithme
détaillé ailleurs,
opérant le traitement
Algorithmique 2 : Sous-algorithmes 22
Nouveau schéma d'un algorithme
Algorithme
Données Résultats
initialisation Communication
traitement
du traitement des résultats
se ré-écrit en :
Algorithme
Données Sous- Sous-
algorithme1 algorithme3
Résultats
Sous- Sous-
algorithme2 algorithme4
Algorithmique 2 : Sous-algorithmes 23
Sous-algorithmes
Algorithmique 2 : Sous-algorithmes 24
Comment les informations circulent...
Algorithme sous-
sous-
algorithme1 algorithme4
informations retournées
informations transmises
par les sous-algorithmes
par l'algorithme principal
à l'algorithme principal
aux sous-algorithmes
sous- sous-
algorithme2 algorithme3
Algorithmique 2 : Sous-algorithmes 25
Exemple
Algorithme Puissances
variables uneVal : réel
nbPuissances : entier Algorithme
début
afficher (" … ") Puissances
saisir (uneVal)
afficher (" … ")
uneVal
saisir (nbPuissances) nbPuissances
calculPuissances(uneVal, nbPuisssances) uneVal
fin nbPuissances
calculPuissances
Algorithme Puissances
variables uneVal : réel
nbPuissances : entier
début
saisirDonnées(uneVal, nbPuisssances) saisirDonnées
calculPuissances(uneVal, nbPuisssances)
fin
Algorithmique 2 : Sous-algorithmes 26
Communications d’informations
Algorithme sous-algorithme
Algorithmique 2 : Sous-algorithmes 27
Paramètres et Arguments
Algorithme Puissances
variables uneVal : réels arguments de l’appel
nbPuissances : entier de la procédure
début
…
calculPuissances(uneVal, nbPuisssances)
…
fin
Algorithmique 2 : Sous-algorithmes 30
Procédure : formalisation syntaxique
nom de la procédure liste des
paramètres spécification
de la procédure
Procédure calculPuissance(val, nb)
{calcule et affiches les nb puissances de val}
paramètres (D) nb : entier
(D) val : réel déclaration
variables cpt : entier des paramètres
(attributs, nom, type)
puisssance : réel
début
variables locales
puissance Å 1
à la procédure
pour cpt Å 1à nb faire
puissance Å puissance × val corps de la
afficher ("La", cpt, "ième puissance de", val, "est", procédure
puissance )
fpour
fin
Algorithmique 2 : Sous-algorithmes 31
Fonctions
Algorithme surfaceRect
variables aire, long, larg : réels
début
afficher ("Donnez la longueur et la largeur de votre rectangle : ")
saisir (long, larg)
aire Å surface(long,larg)
afficher ("Voici sa surface : ", aire) sous-algorithme
fin détaillé ailleurs,
opérant le traitement,
et retournant une
Algorithmique 2 : Sous-algorithmes 32
Fonction : formalisation syntaxique
nom de liste des type de la
la fonction paramètres valeur retournée
spécification
début
variable
début
Algorithmique 2 : Sous-algorithmes 39
Un autre exemple
Algorithme UnTest
{Cet algorithme mesure votre capacité à suivre des appels de
sous-algorithmes}
variables a,b,c : entiers
début
aÅ1
bÅ2
afficher ("Entrée : (a, b) = (", a , b , ")" )
test1(a,b,c)
afficher ("Sortie : (a, b, c) = (", a , b , c, ")" )
fin
Algorithmique 2 : Sous-algorithmes 40
Un autre exemple (suite)
Algorithmique 2 : Sous-algorithmes 41
Simulation
Algorithmique 2 : Sous-algorithmes 42
Sous-algorithmes
Algorithmique 2 : Sous-algorithmes 43
Problème :
A partir
- du jour de la semaine (chiffre entre 1(=lundi) et 7(=dimanche)),
- et de la date présentée sous le modèle AAAAMMJJ,
afficher la date du jour "en clair"
Exemple :
à partir des données : 2 20031014
affichage :
"Nous sommes le mardi 14 octobre 2003"
2 hypothèses de travail :
- l'utilisateur ne saisit que des chiffres
- l'utilisateur peut se tromper sur la cohérence des données
Algorithmique 2 : Sous-algorithmes 44
Algorithme principal
Algorithme AffichageDate
{faire un affichage lisible d'une date}
variables
début
{saisie des données}
saisieJourSemaine(
saisieDate(
{extraction des 4 chiffres de gauche dans la date}
calculAnnée(
{extraction des 5ème et 6ème chiffres de la date, et
conversion dans le mois correspondant}
calculMois(
{extraction des 2 chiffres de droite dans la date}
calculJour(
{présentation de la date}
afficherDate(
fin Algorithmique 2 : Sous-algorithmes 45
Analyse de la circulation d'informations
Algorithme AffichageDate
saisieDate
saisieJourSemaine
afficherDate
calculAnnée
calculMois calculJour
Algorithmique 2 : Sous-algorithmes 46
Détail des procédures (1)
Procédure saisieJourSemaine(nom)
{saisit le numéro du jour et retourne le nom du jour dans nom }
paramètre (R) nom : chaîne
variable locale
à la procédure
variable numJ : entier
début
répéter
afficher ("Donnez le numéro du jour dans la semaine (nombre
compris entre 1 et 7) :")
saisir (numJ )
tant que numJ < 1 ou numJ > 7
nom ← nomJourSemaine(numJ)
fin sous-algorithme qui
retourne le nom du (num_J)ème
jour de la semaine
Algorithmique 2 : Sous-algorithmes 47
Détail des procédures (2)
Procédure saisieDate(laDate)
{saisit la date sous forme d'une chaîne, en vérifie la cohérence, puis
retourne dans laDate la chaîne convertie en entier}
paramètre (R) laDate : entier
sous-algorithme
variable unJour : chaîne qui vérifie la cohérence
début de la date
répéter
afficher ("Donnez la date (sous la forme AAAAMMJJ) :")
saisir (unJour)
tant que non dateValide(unJour)
laDate ← convertir(unJour)
fin sous-algorithme
qui transforme la chaîne
unJour en un entier
Algorithmique 2 : Sous-algorithmes 48
Détail des procédures (3)
Procédure calculAnnée(laDate, année)
{isole l'année année dans la date laDate (4 chiffres de gauche)}
paramètres (D) laDate, (R) année :entier
début
année ← laDate div 10 000
fin
Algorithmique 2 : Sous-algorithmes 50
Détail des fonctions (1)
Fonction nomJourSemaine(numJ) retourne (chaîne)
{retourne le nom du (numJ) ème jour de la semaine}
paramètres (D) numJ : entier
variable leJour : chaîne
début
selon numJ :
1: leJour ← "Lundi"
2: leJour ← "Mardi"
3: leJour ← "Mercredi"
4: leJour ← "Jeudi"
5: leJour ← "Vendredi"
6: leJour ← "Samedi"
7: leJour ← "Dimanche"
retourne (leJour )
fin
Remarque : même genre de fonction pour nomMois(numM)
Algorithmique 2 : Sous-algorithmes 51
Hiérarchie des appels
de sous-algorithmes
Algorithme AffichageDate
Algorithmique 2 : Sous-algorithmes 52
Remarque : procédure ou fonction?
Algorithmique 2 : Sous-algorithmes 53
Remarque : procédure ou fonction? (suite)
Algorithmique 2 : Sous-algorithmes 54
Remarque : procédure ou fonction? (suite)
Algorithmique 2 : Sous-algorithmes 55
Bilan :
Intérêt de la programmation modulaire
• Permettre une analyse descendante d'un problème :
- identifier les différents traitements contribuant au travail demandé
- organiser l'enchaînement des étapes
Algorithmique 2 : Sous-algorithmes 56
Sous-algorithmes
{vérification de la saisie}
début
{remplissage du tableau tab1}
saisieTableau(tab1, nbV, ok)
{vérification de la saisie} …
{remplissage du tableau tab2}
pour ind ← 1 à nbV faire
tab2 [ind] ← - tab1 [ind]
fpour
{suite du traitement}
…
fin
Algorithmique 2 : Tableaux (suite) 64
Comparaison de deux tableaux
Algorithme CompareTableaux
{Vérifie l'identité de deux tableaux}
constante (MAX : entier) Å 100
variables nbV1, nbV2, ind : entiers
égaux, mêmeNbVal, ok : booléens
tab1, tab2 : tableau [1, MAX] de réels
début
fsi
{Affichage résultats}
10 3 25 14 2 1 8
9 20 7 12 2 4 7
Simulation :
Simulation :
Algorithmique 2 : Modularité 73
Problème : écrire l'algorithme du jeu de Saute Mouton
Sur une ligne de NB cases, on place, à la suite et en partant de la gauche, des pions
noirs puis des pions rouges séparés par une case vide unique. On pose autant de
pions noirs que de pions rouges. La configuration de pions n'occupe pas
nécessairement toute la ligne.
But du jeu :
Déplacer tous les pions rouges vers la gauche (respectivement tous les pions noirs
vers la droite), la case vide occupant à la fin du jeu la case du milieu de la
configuration comme au départ.
Exemple :
configuration initiale : configuration finale gagnante :
N N N N R R R R R R R R N N N N
1 2 3 4 5 6 7 8 9 10
Algorithmique 2 : Modularité 74
Règles du jeu:
- les pions noirs ne peuvent se déplacer que vers la droite
les pions rouges ne peuvent se déplacer que vers la gauche
- un pion noir peut être déplacé à droite dans la case vide :
- si la case vide est juste à droite de ce pion
- s'il lui suffit de sauter par dessus un seul pion rouge, c'est-à-dire si entre la case
vide et lui il n'y a qu'un seul pion rouge.
- un pion rouge peut être déplacé à gauche dans la case vide :
- si la case vide est juste à gauche de ce pion
- s'il lui suffit de sauter par dessus un seul pion noir, c'est-à-dire si entre la case
vide et lui il n'y a qu'un seul pion noir.
N R N R R
N R R N R N
Algorithmique 2 : Modularité 75
Fonctionnement :
• A vous de jouer en donnant simplement la position du pion que vous jouez.
• La machine déplace le pion choisi si c'est possible.
• Le jeu s’arrête si vous avez gagné ou si vous avez atteint une situation de blocage.
Dans ce cas vous avez perdu!
Algorithmique 2 : Modularité 77
• Contraintes du jeu
Puis : bien comprendre les contraintes du jeu en explicitant les
règles de façon plus formelle; inventorier les situations possibles.
si pion-rouge
alors si case-gauche est vide
alors déplacement-gauche
sinon si case-gauche-noire et case-suivante est vide
alors déplacement-saut-gauche
sinon si pion-noir
alors si case-à-droite est vide
alors déplacement-droite
sinon si case-droite-rouge et case-suivante est vide
alors déplacement-saut-droite
Algorithmique 2 : Modularité 79
Î concevoir la hiérarchie des appels de sous-algorithmes
Algo principal
bloqué? gagné?
permisRouge? permisNoir?
Algorithmique 2 : Modularité 80
• Écriture de l'algorithme principal
(Une possibilité parmi d’autres)
Algorithme SauteMouton
{jeu de saute mouton}
constante (NbMAX : entier) Å 10 {nombre maximum de pions d'une couleur}
type Plateau = tableau [1, 2 x NbMAX + 1] de caractères
variables plateauJeu : Plateau
nbPions : entier {nombre de pions d'une couleur}
indVide : entier {indice de la case vide}
suite : booléen {vrai si partie non terminée}
début
répéter initPlateau(plateauJeu,nbPions)
affichePlateau(plateauJeu,nbPions)
suite Å non finJeu?(plateauJeu,nbPions,indVide)
tant que suite faire
jouerUnCoup(plateauJeu,nbPions,indVide)
affichePlateau(plateauJeu,nbPions)
suite Å non finJeu?(plateauJeu,nbPions,indVide)
ftq
tant que rejouer?
fin Algorithmique 2 : Modularité 81
• Spécification des sous-algorithmes
exemple:
Procédure initPlateau(tab,nb)
{demande le nombre nb de pions rouges à utiliser et vérifie que ce nombre est
acceptable. Si oui, remplit le plateau tab de nb pions rouges et nb pions noirs,
sinon demande un nouveau nombre.}
paramètres (R) tab : plateau
(R) nb : entier
Algorithmique 2 : Modularité 84
fin Volume 2
Algorithmique : Volume 2 85