TD N° 03
ALGORITHMIQUE
1. L’opérateur Affectation
Quelles seront les valeurs des variables A et B après Quelles seront les valeurs des variables A, B et C après
exécution des instructions suivantes ? exécution des instructions suivantes?
Variables A, B : entier Variables A, B, C : entier
Début Début
A←1 A←5
B←A+3 B←3
A←3 C←A+B
Fin A←2
A=3 C←B–A
B=4 Fin
A=2
B =3
C=1
Quelles seront les valeurs des variables A et B après Quelles seront les valeurs des variables A, B et C après
exécution des instructions suivantes ? exécution des instructions suivantes ?
Variable A, B : entier Variable A, B, C : entier
Début Début
A←5 A←3
B←A+4 B ← 10
A←A+1 C←A+B
B←A–4 B←A+B
Fin A←C
A=6 Fin
B=2 A = B = C = 13
Quelles seront les valeurs des variables A et B après on dispose de trois variables A, B et C. Ecrivez un
exécution des instructions suivantes ? algorithme transférant à B la valeur de A, à C la valeur
Variable A, B : Entier de B et à A la valeur de C (toujours quels que soient les
début contenus préalables de ces variables).
A←5
B←2
A←B
B←A
Fin
les deux dernières instructions permettent-elles
d’échanger les deux valeurs de B et A ? Si l’on inverse
les deux dernières instructions, cela change-t-il
quelque chose ?
A=B=2
Les deux dernières instructions permettent d’échanger
les valeurs de B et A.
Après inversion d’instructions :
A=B=5
Dans les deux cas, les deux dernières instructions ne
permettent pas d'échanger les valeurs de A et B, et
l'inversion des instructions ne change pas
fondamentalement la situation. Pour échanger
correctement les valeurs de deux variables, il est
nécessaire d'utiliser une variable temporaire, comme
suit :
temp ← A
A←B
B ← temp
Que produit l’algorithme suivant ? Que produit l’algorithme suivant ?
Variable Variable
A, B, C : Caractère A, B : Caractère
Début début
A ← "423" A ← « 423 »
B ← "12" B ← "12"
C←A+B C←A&B
Fin Fin
Erreur C ← ‘’42312’’ C est la concaténation des valeurs de A et
B
2. La compréhension
2.1 Quelle figure géométrique dessine-t-on en exécutant la suite d’instructions ci-dessous ?
(a) avance de 3 pas,
(b) tourne à gauche d’un angle de 90°
(c) avance de 4 pas
(d) rejoindre le point de départ.
Combien de pas a-t-on fait au total pour rejoindre le point de départ ?
2.2 On cherche à faire dessiner une figure polygonale sur la
plage à quelqu’un qui a les yeux bandés. Pour cela, on ne
dispose que de 2 commandes orales : avancer de n pas en
avant (n est un nombre entier de pas) et tourner à gauche
d’un angle θ (rotation sur place de θ).
3. L’analyse
La technique de multiplication dite «à la russe» consiste à diviser par 2 le multiplicateur (et ensuite les
quotients obtenus), jusqu’à un quotient nul, à noter les restes, et à multiplier parallèlement le multiplicande par
2. On additionne alors les multiples obtenus du multiplicande correspondant aux restes non nuls.
Exemple : 68 × 123 (= 8364)
multiplicande multiplicateur Reste Somme partielle
Mx2 m div 2 m modulo 2
123 68 0 (0 x 123) + 0
246 34 0 (0 x 246) + 0
492 17 1 (1 x 492) + 0
984 8 0 (0 x 984) + 492
1968 4 0 (0 x 1968) + 492
3936 2 0 (0 x 3936) + 492
7872 1 1 (1 x 7872) + 492
8364
Effectuer les multiplications suivantes selon la technique « à la russe ».
64 × 96
45 × 239
4. Programme simple
4.1. Ecrire un algo en langage d’analyse qui demande un nombre à l’utilisateur, puis qui calcule
et affiche le carré de ce nombre.
Variables :
n : réel //* nombre
c : réel //* carré
Début :
Écrire "Entrez un nombre :"
Lire n
c←n*n
Écrire "Le carré de", n, "est", c
Fin
4.2. Ecrire un programme qui lit le prix HT d’un article, le nombre d’articles et le taux de TVA, et qui
fournit le prix total TTC correspondant. Faire en sorte que les libellés apparaissent clairement.
Variables :
prixHT : réel
nombreArticles : entier
tauxTVA : réel
prixTTC : réel
Début :
Écrire "Entrez le prix HT de l'article :"
Lire prixHT
Écrire "Entrez le nombre d'articles :"
Lire nombreArticles
Écrire "Entrez le taux de TVA (en pourcentage) :"
Lire tauxTVA
prixTTC ← prixHT * nombreArticles * (1 + tauxTVA / 100)
Écrire "Le prix total TTC est : ", prixTTC, " unités monétaires"
Fin
5. L’instruction de test
5.1 Ecrire l’algo en langage d’analyse qui permet d’afficher la valeur absolue d’un nombre X saisi au
clavier.
Variables :
X : réel
Début :
Écrire "Entrez un nombre : "
Lire X
Si X < 0 Alors
X ← -X
Sinon X ← +X
Fin Si
Écrire "La valeur absolue de X est : ", X
Fin
5.2 On considère la fonction « porte » f dont le graphe est donné ci-contre. Ecrire l’instruction qui permet
de calculer y = f (x)
Si x < 0 Alors
y←0
Sinon Si x > 1 Alors
y←0
Sinon
y←1
Fin Si
5.3 Ecrire un algorithme qui demande l’âge d’un enfant à l’utilisateur. Ensuite, il l’informe de sa
catégorie sportive :
"Poussin" de 6 à 7 ans
"Pupille" de 8 à 9 ans
"Minime" de 10 à 11 ans
"Cadet" après 12 ans
Variables :
âge : entier
Début :
Écrire "Entrez l'âge de l'enfant : "
Lire âge
Si âge >= 6 et âge <= 7 Alors
Écrire "Catégorie : Poussin"
Sinon Si âge >= 8 et âge <= 9 Alors
Écrire "Catégorie : Pupille"
Sinon Si âge >= 10 et âge <= 11 Alors
Écrire "Catégorie : Minime"
Sinon Si âge >= 12 Alors
Écrire "Catégorie : Cadet"
Sinon
Écrire "Aucune catégorie"
Fin Si
Fin
Peut-on concevoir plusieurs algorithmes équivalents menant à ce résultat ?
Oui, on peut organiser les conditions de manière différente (par exemple, en utilisant une structure "selon" ou
"case") tout en obtenant le même résultat.
5.4 Ecrire l’algorithme de résolution d’une équation de second degré dans R et puis dans C
Pour R : Réel
Variables :
a, b, c : réels
Δ : réel
x1, x2 : réels
Début :
Écrire "Entrez les coefficients a, b, c : "
Lire a, b, c
Si a = 0 Alors
Écrire "Ceci n'est pas une équation du second degré."
Sinon
Δ ← b^2 - 4*a*c
Si Δ > 0 Alors
x1 ← (-b + √Δ) / (2*a)
x2 ← (-b - √Δ) / (2*a)
Écrire "Les solutions sont x1 = ", x1, " et x2 = ", x2
Sinon Si Δ = 0 Alors
x1 ← -b / (2*a)
Écrire "La solution est x1 = x2 = ", x1
Sinon
Écrire "Il n'y a pas de solution réelle."
Fin Si
Fin Si
Fin
Pour C : Complexe
Variables :
a, b, c : réels
Δ : réel
x1, x2 : complexes
Début :
Écrire "Entrez les coefficients a, b, c : "
Lire a, b, c
Si a = 0 Alors
Écrire "Ceci n'est pas une équation du second degré."
Sinon
Δ ← b^2 - 4*a*c
Si Δ >= 0 Alors
x1 ← (-b + √Δ) / (2*a)
x2 ← (-b - √Δ) / (2*a)
Écrire "Les solutions sont x1 = ", x1, " et x2 = ", x2
Sinon
x1 ← (-b + i*√(-Δ)) / (2*a)
x2 ← (-b - i*√(-Δ)) / (2*a)
Écrire "Les solutions complexes sont x1 = ", x1, " et x2 = ", x2
Fin Si
Fin Si
Fin
5.5 A l’aide d’alternatives simples imbriquées, écrire un algorithme qui détermine si un guichet est ’ouvert’
ou ’fermé’ selon les jours de la semaine (’lundi’, ’mardi’, . . ,’dimanche’) et l’heure de la journée (entre 0h et
24h). Le guichet est ouvert tous les jours de 8h à 13h et de 14h à 17h sauf le samedi après-midi et toute la
journée du dimanche.
Variables :
jour : chaîne
heure : entier
Début :
Écrire "Entrez le jour de la semaine : "
Lire jour
Écrire "Entrez l'heure actuelle (0-24) : "
Lire heure
Si jour = "dimanche" Alors
Écrire "Le guichet est fermé."
Sinon Si jour = "samedi" Alors
Si heure >= 8 et heure < 13 Alors
Écrire "Le guichet est ouvert."
Sinon
Écrire "Le guichet est fermé."
Fin Si
Sinon
Si (heure >= 8 et heure < 13) ou (heure >= 14 et heure < 17) Alors
Écrire "Le guichet est ouvert."
Sinon
Écrire "Le guichet est fermé."
Fin Si
Fin Si
Fin
6. Les boucles
6.1 À chaque saisie d’un nombre, afficher la moyenne de tous les nombres qui ont déjà été saisis. Le
programme s’arrêtera après 10 nombres.
Cas 1 : utilisation de trois variables pour résoudre ce problème
Variables :
s : réel ← 0
n : réel
c : entier ← 0 //* Compteur
Début :
Tantque c < 10 Faire
Écrire ("Entrez un nombre : ", n)
Lire n
s←s+n
c←c+1
Écrire ("Moyenne des nombres saisis : ", s / c)
Fin Tantque
Fin
Cas 2 : utilisation de la structure de tableau
Variables :
n : tableau de 10 réels
s : réel ← 0
c : entier ← 0 //* Compteur
Début :
Pour i ← 1 à 10 Faire
Écrire ("Entrez un nombre : ", n)
Lire n[i]
s ← s + n[i]
c←c+1
Écrire ("Moyenne des nombres saisis : ", s / c)
Fin Pour
Fin
6.2 On désire déterminer automatiquement quel véhicule doit être loué par une personne pour le moindre coût
pour un kilométrage donné. Le litre d’essence coûte 3370 Ar, le gasoil 2600 Ar. On considère deux types de
véhicules :
• La voiture essence est louée par 50 000 Ar/jour plus 250 Ar par km parcouru. Elle consomme 8 litres au
100km.
• La voiture diesel est louée 60 000 Ar par jour plus 200 Ar par km. Elle consomme 7 litres au 100km.
Variables :
km : réel
coûtEssence, coûtDiesel : réel
Début :
Écrire "Entrez le nombre de kilomètres à parcourir : "
Lire km
coûtEssence ← 50000 + 250 * km + (8 * km / 100) * 3370
coûtDiesel ← 60000 + 200 * km + (7 * km / 100) * 2600
Si coûtEssence < coûtDiesel Alors
Écrire "Il est moins cher de louer la voiture à essence."
Sinon
Écrire "Il est moins cher de louer la voiture diesel."
Fin Si
Fin
6.3 Calcul de la somme et du produit des N premiers termes du nombre entier. On utilise les trois types de
boucle (POUR, REPETER et TANTQUE)
Utilisation de la boucle POUR
Variables :
N, somme, produit, i : entier
Début :
Écrire "Entrez un nombre entier N : "
Lire N
somme ← 0
produit ← 1
Pour i ← 1 à N Faire
somme ← somme + i
produit ← produit * i
Fin Pour
Écrire "Somme : ", somme
Écrire "Produit : ", produit
Fin
Utilisation de la boucle TANTQUE
Variables :
N, s, p, i : entier
Début :
Écrire ("Entrez un nombre entier : ", N)
Lire N
s←0
p←1
i←1
Tantque i <= N Faire
s←s+i
p←p*i
i←i+1
Fin Tantque
Écrire ("Somme : ", s)
Écrire ("Produit : ", p)
Fin
Utilisation de la boucle REPETER
Variables :
N, somme, produit, i : entier
Début :
Écrire "Entrez un nombre entier N : "
Lire N
somme ← 0
produit ← 1
i←1
Répéter
somme ← somme + i
produit ← produit * i
i←i+1
Jusqu'à ce que i > N
Écrire "Somme : ", somme
Écrire "Produit : ", produit
Fin
6.4 Écrire un algorithme qui permet de saisir N variables et d’afficher la valeur la plus grande (maximale).
(Comme pour l’exercice 2, vous pouvez faire les 2 cas). Même question pour la valeur minimale.
Cas 1 : Utilisation de trois variables
Variables :
N, valeur, max, min, i : entier
Début :
Écrire "Entrez le nombre de valeurs N : "
Lire N
Écrire "Entrez la première valeur : "
Lire valeur
max ← valeur
min ← valeur
Pour i ← 2 à N Faire
Écrire "Entrez une valeur : "
Lire valeur
Si valeur > max Alors
max ← valeur
Fin Si
Si valeur < min Alors
min ← valeur
Fin Si
Fin Pour
Écrire "Valeur maximale : ", max
Écrire "Valeur minimale : ", min
Fin
Cas 2 : Utilisation d’un tableau
Variables :
N, max, min, i : entier
valeurs : tableau de N entiers
Début :
Écrire "Entrez le nombre de valeurs N : "
Lire N
Pour i ← 1 à N Faire
Écrire "Entrez une valeur : "
Lire valeurs[i]
Fin Pour
max ← valeurs[1]
min ← valeurs[1]
Pour i ← 2 à N Faire
Si valeurs[i] > max Alors
max ← valeurs[i]
Fin Si
Si valeurs[i] < min Alors
min ← valeurs[i]
Fin Si
Fin Pour
Écrire "Valeur maximale : ", max
Écrire "Valeur minimale : ", min
Fin
6.5 On cherche à écrire un algorithme qui affiche la table de multiplication d’un nombre n saisi par l’utilisateur.
Variables :
n, i : entier
Début :
Écrire ("Entrez un nombre entier : ",n)
Lire n
Pour i ← 1 à 10 Faire
Écrire n, " * ", i, " = ", n * i
Fin Pour
Fin
6.5 Calcul du développement limité
Variables :
x, eps, terme, somme : réel
k : entier
Début :
Écrire "Entrez la valeur de x : "
Lire x
Écrire "Entrez la valeur de eps : "
Lire eps
somme ← 0
k←0
Répéter
terme ← x^k / factorielle(k)
somme ← somme + terme
k←k+1
Jusqu'à ce que Abs(terme) < eps
Écrire "Le résultat du développement limité est : ", somme
Fin
Fonction factorielle(n : entier) : entier
Si n = 0 Alors
Retourner 1
Sinon
Retourner n * factorielle(n-1)
Fin Si
Fin Fonction