ALGORITHME

Voir le sujet précédent Voir le sujet suivant Aller en bas

ALGORITHME

Message  Admin le Mer 30 Mar - 7:44

Exercices & Corrigés d’Algorithmique
Enonce des Exercices
énonces 1
Exercice 1.1
Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?
Variables A, B en Entier
Début
A←1
B←A+3
A←3
Fin
Exercice 1.2
Quelles seront les valeurs des variables A, B et C après exécution des instructions suivantes ?
Variables A, B, C en Entier
Début
A←5
B←3
C←A+B
A←2
C←B–A
Fin
Exercice 1.3
Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?
Variables A, B en Entier
Début
A←5
B←A+4
A←A+1
B←A–4
Fin
Exercice 1.4
Quelles seront les valeurs des variables A, B et C après exécution des instructions suivantes ?
Variables A, B, C en Entier
Début
A←3
B ← 10
C←A+B
B←A+B
A←C
Fin
Exercice 1.5
Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?

Variables A, B en Entier
Début
A←5
B←2
A←B
B←A
Fin
Moralité : 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 ?
Exercice 1.6
Plus difficile, mais c’est un classique absolu, qu’il faut absolument maîtriser : écrire un algorithme
permettant d’échanger les valeurs de deux variables A et B, et ce quel que soit leur contenu préalable.
Exercice 1.7
Une variante du précédent : on dispose de trois variables A, B et C. Ecrivez un algorithme transférant à B la
valeur de A, à C la valeur de B et à A la valeur de C (toujours quels que soient les contenus préalables de
ces variables).
Exercice 1.8
Que produit l’algorithme suivant ?
Variables A, B, C en Caractères
Début
A ← "423"
B ← "12"
C←A+B
Fin
Exercice 1.9
Que produit l’algorithme suivant ?
Variables A, B, C en Caractères
Début
A ← "423"
B ← "12"
C←A&B
Fin
<<<<:::::… ………………:::::>>>>
Exercice 1.1
Après
La valeur des variables est :
A←1
A=1
B=?
B←A+3 A=1
B=4
A←3
A = 3
B = 4
Exercice 1.2
Après
La valeur des variables est :
A←5
A=5
B=?
C=?
B←3
A=5
B=3
C=?
C←A+B A=5
B=3
C=8

A←2
A=2
B=3
C=8
C←B–AA = 2
B = 3
C = 1
Exercice 1.3
Après
La valeur des variables est :
A←5
A=5
B=?
B←A+4 A=5
B=9
A←A+1 A=6
B=9
B←A–4A = 6
B = 2
Exercice 1.4
Après
La valeur des variables est :
A←3
A=3
B=?
C=?
B ← 10
A=3
B = 10
C=?
C←A+B A=3
B = 10
C = 13
B←A+B A=3
B = 13
C = 13
A←C
A = 13
B = 13
C = 13
Exercice 1.5
Après
La valeur des variables est :
A←5
A=5
B=?
B←2
A=5
B=2
A←B
A=2
B=2
B←A
A = 2
B = 2
Les deux dernières instructions ne permettent donc pas d’échanger les deux valeurs de B et A, puisque l’une
des deux valeurs (celle de A) est ici écrasée.
Si l’on inverse les deux dernières instructions, cela ne changera rien du tout, hormis le fait que cette fois
c’est la valeur de B qui sera écrasée.
Exercice 1.6
Début

C←A
A←B
B←C
Fin
On est obligé de passer par une variable dite temporaire (la variable C).
Exercice 1.7
Début

D←C
C←B
B←A
A←D
Fin
En fait, quel que soit le nombre de variables, une seule variable temporaire suffit…
Exercice 1.8
Il ne peut produire qu’une erreur d’exécution, puisqu’on ne peut pas additionner des caractères.
Exercice 1.9
…En revanche, on peut les concaténer. A la fin de l’algorithme, C vaudra donc "42312".
Enonce des Exercices
énonces 2
Exercice 2.1
Quel résultat produit le programme suivant ?

Variables val, double numériques
Début
Val ← 231
Double ← Val * 2
Ecrire Val
Ecrire Double
Fin
Exercice 2.2
Ecrire un programme qui demande un nombre à l’utilisateur, puis qui calcule et affiche le carré de ce
nombre.
Exercice 2.3
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 des libellés apparaissent clairement.
Exercice 2.4
Ecrire un algorithme utilisant des variables de type chaîne de caractères, et affichant quatre variantes
possibles de la célèbre « belle marquise, vos beaux yeux me font mourir d’amour ». On ne se soucie pas de
la ponctuation, ni des majuscules.
<<<<:::::… ………………:::::>>>>
Exercice 2.1
On verra apparaître à l’écran 231, puis 462 (qui vaut 231 * 2)
Exercice 2.2
Variables nb, carr en Entier
Début
Ecrire "Entrez un nombre :"
Lirenb
carr ← nb * nb
Ecrire "Son carré est : ", carr
Fin
En fait, on pourrait tout aussi bien économiser la variable carr en remplaçant les deux avant-dernières lignes
par :
Ecrire "Son carré est : ", nb*nb
C'est une question de style ; dans un cas, on privilégie la lisibilité de l'algorithme, dans l'autre, on privilégie
l'économie d'une variable.
Exercice 2.3
Variables nb, pht, ttva, pttc en Numérique
Début
Ecrire "Entrez le prix hors taxes :"
Lirepht
Ecrire "Entrez le nombre d’articles :"
Lirenb
Ecrire "Entrez le taux de TVA :"
Lirettva
pttc ← nb * pht * (1 + ttva)
Ecrire "Le prix toutes taxes est : ", pttc
Fin
Là aussi, on pourrait squeezer une variable et une ligne en écrivant directement. :
Ecrire "Le prix toutes taxes est : ", nb * pht * (1 + ttva)
C'est plus rapide, plus léger en mémoire, mais un peu plus difficile à relire (et à écrire !)

Exercice 2.4
Variables t1, t2, t3, t4 en Caractère
Début
t1 ← "belle Marquise"
t2 ← "vos beaux yeux"
t3 ← "me font mourir"
t4 ← "d’amour"
Ecrire t1 & " " & t2 & " " & t3 & " " & t4
Ecrire t3 & " " & t2 & " " & t4 & " " & t1
Ecrire t2 & " " & t3 & " " & t1 & " " & t4
Ecrire t4 & " " & t1 & " " & t2 & " " & t3
Fin
Enonce des Exercices
énonces 3
Exercice 3.1
Ecrire un algorithme qui demande un nombre à l’utilisateur, et l’informe ensuite si ce nombre est positif ou
négatif (on laisse de côté le cas où le nombre vaut zéro).
Exercice 3.2
Ecrire un algorithme qui demande deux nombres à l’utilisateur et l’informe ensuite si leur produit est négatif
ou positif (on laisse de côté le cas où le produit est nul). Attention toutefois : on ne doitp a s calculer le
produit des deux nombres.
Exercice 3.3
Ecrire un algorithme qui demande trois noms à l’utilisateur et l’informe ensuite s’ils sont rangés ou non
dans l’ordre alphabétique.
Exercice 3.4
Ecrire un algorithme qui demande un nombre à l’utilisateur, et l’informe ensuite si ce nombre est positif ou
négatif (on inclut cette fois le traitement du cas où le nombre vaut zéro).
Exercice 3.5
Ecrire un algorithme qui demande deux nombres à l’utilisateur et l’informe ensuite si le produit est négatif
ou positif (on inclut cette fois le traitement du cas où le produit peut être nul). Attention toutefois, on ne doit
pas calculer le produit !
Exercice 3.6
Ecrire un algorithme qui demande l’âge d’un enfant à l’utilisateur. Ensuite, il l’informe de sa catégorie :

"Poussin" de 6 à 7 ans

"Pupille" de 8 à 9 ans

"Minime" de 10 à 11 ans

"Cadet" après 12 ans
Peut-on concevoir plusieurs algorithmes équivalents menant à ce résultat ?
<<<<:::::… ………………:::::>>>>
Exercice 3.1
Variablen en Entier
Début
Ecrire "Entrez un nombre : "
Liren
Sin > 0 Alors
Ecrire "Ce nombre est positif”
Sinon

Ecrire "Ce nombre est négatif"
Finsi
Fin
Exercice 3.2
Variables m, n en Entier
Début
Ecrire "Entrez deux nombres : "
Lire m, n
Si (m > 0 ET n > 0) OU (m < 0 ET n < 0) Alors
Ecrire "Leur produit est positif"
Sinon
Ecrire "Leur produit est négatif"
Finsi
Fin
Exercice 3.3
Variables a, b, c en Caractère
Début
Ecrire "Entrez successivement trois noms : "
Lire a, b, c
Si a < b ET b < c Alors
Ecrire "Ces noms sont classés alphabétiquement"
Sinon
Ecrire "Ces noms ne sont pas classés"
Finsi
Fin
Exercice 3.4
Variablen en Entier
Début
Ecrire "Entrez un nombre : "
Liren
Sin < 0 Alors
Ecrire "Ce nombre est négatif"
SinonSin = 0 Alors
Ecrire "Ce nombre est nul"
Sinon
Ecrire "Ce nombre est positif"
Finsi
Fin
Exercice 3.5
Variables m, n en Entier
Début
Ecrire "Entrez deux nombres : "
Lire m, n
Si m = 0 OU n = 0 Alors
Ecrire "Le produit est nul"
SinonSi (m < 0 ET n < 0) OU (m > 0 ET n > 0) Alors
Ecrire "Le produit est positif"

Sinon
Ecrire "Le produit est négatif"
Finsi
Fin
Si on souhaite simplifier l’écriture de la condition lourde du SinonSi, on peut toujours passer par des
variables booléennes intermédiaires. Une astuce de sioux consiste également à employer un Xor (c'est l'un
des rares cas dans lesquels il est pertinent)
Exercice 3.6
Variableage en Entier
Début
Ecrire "Entrez l’âge de l’enfant : "
Lireage
Si age >= 12 Alors
Ecrire "Catégorie Cadet"
SinonSi age >= 10 Alors
Ecrire "Catégorie Minime"
SinonSi age >= 8 Alors
Ecrire "Catégorie Pupille"
SinonSi age >= 6 Alors
Ecrire "Catégorie Poussin"
Finsi
Fin
On peut évidemment écrire cet algorithme de différentes façons, ne serait-ce qu’en commençant par la
catégorie la plus jeune.
Enonce des Exercices
énonces 4
Exercice 5.1
Ecrire un algorithme qui demande à l’utilisateur un nombre compris entre 1 et 3 jusqu’à ce que la réponse
convienne.
Exercice 5.2
Ecrire un algorithme qui demande un nombre compris entre 10 et 20, jusqu’à ce que la réponse convienne.
En cas de réponse supérieure à 20, on fera apparaître un message : « Plus petit ! », et inversement, « Plus
grand ! » si le nombre est inférieur à 10.
Exercice 5.3
Ecrire un algorithme qui demande un nombre de départ, et qui ensuite affiche les dix nombres suivants. Par
exemple, si l'utilisateur entre le nombre 17, le programme affichera les nombres de 18 à 27.
Exercice 5.4
Ecrire un algorithme qui demande un nombre de départ, et qui ensuite écrit la table de multiplication de ce
nombre, présentée comme suit (cas où l'utilisateur entre le nombre 7) :
Table de 7 :
7x1=7
7 x 2 = 14
7 x 3 = 21

7 x 10 = 70
Exercice 5.5
Ecrire un algorithme qui demande un nombre de départ, et qui calcule la somme des entiers jusqu’à ce
nombre. Par exemple, si l’on entre 5, le programme doit calculer :
1 + 2 + 3 + 4 + 5 = 15
NB : on souhaite afficher uniquement le résultat, pas la décomposition du calcul.
Exercice 5.6
Ecrire un algorithme qui demande un nombre de départ, et qui calcule sa factorielle.
NB : la factorielle de 8, notée 8 !, vaut

1x2x3x4x5x6x7x8
Exercice 5.7
Ecrire un algorithme qui demande successivement 20 nombres à l’utilisateur, et qui lui dise ensuite quel
était le plus grand parmi ces 20 nombres :
Entrez le nombre numéro 1 : 12
Entrez le nombre numéro 2 : 14
etc.
Entrez le nombre numéro 20 : 6
Le plus grand de ces nombres est : 14
Modifiez ensuite l’algorithme pour que le programme affiche de surcroît en quelle position avait été saisie
ce nombre :
C’était le nombre numéro 2
Exercice 5.8
Réécrire l’algorithme précédent, mais cette fois-ci on ne connaît pas d’avance combien l’utilisateur souhaite
saisir de nombres. La saisie des nombres s’arrête lorsque l’utilisateur entre un zéro.
Exercice 5.9
Lire la suite des prix (en euros entiers et terminée par zéro) des achats d’un client. Calculer la somme qu’il
doit, lire la somme qu’il paye, et simuler la remise de la monnaie en affichant les textes "10 Euros", "5
Euros" et "1 Euro" autant de fois qu’il y a de coupures de chaque sorte à rendre.
Exercice 5.10
Écrire un algorithme qui permette de connaître ses chances de gagner au tiercé, quarté, quinté et autres
impôts volontaires.
On demande à l’utilisateur le nombre de chevaux partants, et le nombre de chevaux joués. Les deux
messages affichés devront être :
Dans l’ordre : une chance sur X de gagner
Dans le désordre : une chance sur Y de gagner
X et Y nous sont donnés par la formule suivante, si n est le nombre de chevaux partants et p le nombre de
chevaux joués (on rappelle que le signe ! signifie "factorielle", comme dans l'exercice 5.6 ci-dessus) :
X = n ! / (n - p) !
Y = n ! / (p ! * (n – p) !)
NB : cet algorithme peut être écrit d’une manière simple, mais relativement peu performante. Ses
performances peuvent être singulièrement augmentées par une petite astuce. Vous commencerez par écrire
la manière la plus simple, puis vous identifierez le problème, et écrirez une deuxième version permettant de
le résoudre.
<<<<:::::… ………………:::::>>>>
Exercice 5.1
VariableN en Entier
Debut
N←0
Ecrire "Entrez un nombre entre 1 et 3"
TantQue N < 1 ou N > 3
LireN
Si N < 1 ou N > 3 Alors
Ecrire "Saisie erronée. Recommencez”
FinSi
FinTantQue
Fin
Exercice 5.2

VariableN en Entier
Debut
N←0
Ecrire "Entrez un nombre entre 10 et 20"
TantQue N < 10 ou N > 20
LireN
Si N < 10 Alors
Ecrire "Plus grand !"
SinonSi N > 20 Alors
Ecrire "Plus petit !"
FinSi
FinTantQue
Fin
Exercice 5.3
Variables N, i en Entier
Debut
Ecrire "Entrez un nombre : "
LireN
Ecrire "Les 10 nombres suivants sont : "
Pour i ← N + 1 à N + 10
Ecrirei
iSuivant
Fin
Exercice 5.4
Variables N, i en Entier
Debut
Ecrire "Entrez un nombre : "
LireN
Ecrire "La table de multiplication de ce nombre est : "
Pour i ← 1 à 10
Ecrire N, " x ", i, " = ", n*i
iSuivant
Fin
Exercice 5.5
Variables N, i, Som en Entier
Debut
Ecrire "Entrez un nombre : "
LireN
Som ← 0
Pouri ← 1 à N
Som ← Som + i
iSuivant
Ecrire "La somme est : ", Som
Fin
Exercice 5.6
Variables N, i, F en Entier
Debut
Ecrire "Entrez un nombre : "
LireN
F←1
Pouri ← 2 à N
F←F*i
iSuivant
Ecrire "La factorielle est : ", F
Fin

Exercice 5.7
Variables N, i, PG en Entier
Debut
PG ← 0
Pour i ← 1 à 20
Ecrire "Entrez un nombre : "
LireN
Si i = 1 ou N > PG Alors
PG ← N
FinSi
iSuivant
Ecrire "Le nombre le plus grand était : ", PG
Fin
En ligne 3, on peut mettre n’importe quoi dans PG, il suffit que cette variable soit affectée pour que le
premier passage en ligne 7 ne provoque pas d'erreur.
Pour la version améliorée, cela donne :
Variables N, i, PG, IPG en Entier
Debut
PG ← 0
Pour i ← 1 à 20
Ecrire "Entrez un nombre : "
LireN
Si i = 1 ou N > PG Alors
PG ← N
IPG ← i
FinSi
iSuivant
Ecrire "Le nombre le plus grand était : ", PG
Ecrire "Il a été saisi en position numéro ", IPG
Fin
Exercice 5.8
Variables N, i, PG, IPG en Entier
Debut
N←1
i←0
PG ← 0
TantQue N <> 0
Ecrire "Entrez un nombre : "
LireN
i←i+1
Si i = 1 ou N > PG Alors
PG ← N
IPG ← i
FinSi
FinTantQue
Ecrire "Le nombre le plus grand était : ", PG
Ecrire "Il a été saisi en position numéro ", IPG
Fin
Exercice 5.9
Variables E, somdue, M, Reste, Nb10E, Nb5E En Entier
Debut
E←1
somdue ← 0
TantQue E <> 0
Ecrire "Entrez le montant : "

LireE
somdue ← somdue + E
FinTantQue
Ecrire "Vous devez :", somdue, " euros"
Ecrire "Montant versé :"
LireM
Reste ← M - somdue
Nb10E ← 0
TantQue Reste >= 10
Nb10E ← Nb10E + 1
Reste ← Reste – 10
FinTantQue
Nb5E ← 0
Si Reste >= 5
Nb5E ← 1
Reste ← Reste – 5
FinSi
Ecrire "Rendu de la monnaie :"
Ecrire "Billets de 10 E : ", Nb10E
Ecrire "Billets de 5 E : ", Nb5E
Ecrire "Pièces de 1 E : ", reste
Fin
Exercice 5.10
Spontanément, on est tenté d'écrire l'algorithme suivant :
Variables N, P, i, Numé, Déno1, Déno2 en Entier
DebutE c r i r e "Entrez le nombre de chevaux partants : "
LireN
Ecrire "Entrez le nombre de chevaux joués : "
LireP
Numé ← 1
Pouri ← 2 à N
Numé ← Numé * i
iSuivant
Déno1 ← 1
Pour i ← 2 à N-P
Déno1 ← Déno1 * i
iSuivant
Déno2 ← 1
Pouri ← 2 à P
Déno2 ← Déno2 * i
iSuivant
Ecrire "Dans l’ordre, une chance sur ", Numé / Déno1
Ecrire "Dans le désordre, une sur ", Numé / (Déno1 * Déno2)
Fin
Cette version, formellement juste, comporte tout de même deux faiblesses.
La première, et la plus grave, concerne la manière dont elle calcule le résultat final. Celui-ci est le quotient
d'un nombre par un autre ; or, ces nombres auront rapidement tendance à être très grands. En calculant,
comme on le fait ici, d'abord le numérateur, puis ensuite le dénominateur, on prend le risque de demander à
la machine de stocker des nombres trop grands pour qu'elle soit capable de les coder (cf. le préambule).
C'est d'autant plus bête que rien ne nous oblige à procéder ainsi : on n'est pas obligé de passer par la division
de deux très grands nombres pour obtenir le résultat voulu.
La deuxième remarque est qu'on a programmé ici trois boucles successives. Or, en y regardant bien, on peut
voir qu'après simplification de la formule, ces trois boucles comportent le même nombre de tours ! (si vous
ne me croyez pas, écrivez un exemple de calcul et biffez les nombres identiques au numérateur et au
dénominateur). Ce triple calcul (ces trois boucles) peut donc être ramené(es) à un(e) seul(e). Et voilà le
travail, qui est non seulement bien plus court, mais aussi plus performant :
Variables N, P, i, O, F en Entier
Debut
Ecrire "Entrez le nombre de chevaux partants : "
LireN
Ecrire "Entrez le nombre de chevaux joués : "
Lire P
A←1
B←1
Pouri ← 1 à P
A ← A * (i + N - P)
B←B*i
iSuivant
Ecrire "Dans l’ordre, une chance sur ", A
Ecrire "Dans le désordre, une chance sur ", A / B
Fin
avatar
Admin
Admin

Messages : 219
Points : 48103
Date d'inscription : 14/03/2011

Voir le profil de l'utilisateur http://odbatox.arabstar.biz

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum