Exercice 1: 

Ecrire un programme qui échange la valeur de deux variables. Exemple, si a = 2 et b = 5, le programme donnera a = 5 et b = 2.

Correction exercice 1 :

Début
a=2
b=5
t  <--  a
a  <-- b
b  <-- t
Fin

ou bien

Début
a=2
b=5
a  <--  a+b
b  <-- a-b
a  <-- a-b
Fin

Exercice 2

Ecrire un programme qui demande un nombre à l’utilisateur, puis qui calcule et affiche le carré de ce nombre.

Correction exercice 2 :

Variables nb, carr en Entier
Début
Ecrire ”Entrez un nombre :”
Lire nb
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 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.

Correction exercice 3 :

Variables nb, pht, ttva, pttc en Numérique
Début
Ecrire ”Entrez le prix hors taxes :”
Lire pht
Ecrire ”Entrez le nombre d’articles :”
Lire nb
Ecrire ”Entrez le taux de TVA :”
Lire ttva
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 4 :

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 doit pas calculer le produit des deux nombres.

Correction exercice 4 :

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 5 :

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 ?

Correction exercice 5 :

Variable age en Entier
Début
Ecrire ”Entrez l’âge de l’enfant : ”
Lire age
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.

Exercice 6 :


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.

Correction exercice 6 :

Variable N en Entier
Debut
N <--  0
Ecrire ”Entrez un nombre entre 10 et 20”
Lire N
TantQue N < 10 ou N > 20
Si N < 10 Alors
Ecrire ”Plus grand !”
SinonSi N > 20 Alors
Ecrire ”Plus petit !”
FinSi
FinTantQue
Fin

Exercice 7 :

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.

Correction exercice 7 :

Variables N, i, Som en Entier
Debut
Ecrire ”Entrez un nombre : ”
Lire N
Som <--  0
Pour i  <-- 1 à N
Som <--  Som + i
i Suivant
Ecrire ”La somme est : ”, Som
Fin

Exercice 8 :

Ecrire un algorithme qui demande un nombre de départ, et qui calcule sa factorielle.

NB : la factorielle de 8, notée 8 !, vaut 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 Variables N, i, F en Entier

Correction exercice 8 :

Debut
Ecrire ”Entrez un nombre : ”
Lire N
F <--  1
Pour i <--  2 à N
F <--  F * i
i Suivant
Ecrire ”La factorielle est : ”, F
Fin

Exercice 9 :

Que produit l’algorithme suivant ?

Tableau Nb(5) en Entier
Variable i en Entier
Début
Pour i <--  0 à 5
Nb(i) <--  i * i
i suivant
Pour i <--  0 à 5
Ecrire Nb(i)
i suivant
Fin

Peut-on simplifier cet algorithme avec le même résultat ?

Correction exercice 9 :

Cet algorithme remplit un tableau avec six valeurs : 0, 1, 4, 9, 16, 25.

Il les écrit ensuite à l’écran. Simplification :

Tableau Nb(5) en Numérique
Variable i en Numérique
Début
Pour i  <-- 0 à 5
Nb(i)  <-- i * i
Ecrire Nb(i)
i Suivant
Fin


Exercice 10 :

écrivez un algorithme permettant, à l’utilisateur de saisir les notes d’une classe. Le programme, une fois la saisie terminée, renvoie le nombre de ces notes supérieures à la moyenne de la classe.

Correction exercice 10 :

Variables Nb, i, Som, Moy, Nbsup en Numérique
Tableau T() en Numérique
Debut
Ecrire “Entrez le nombre de notes à saisir : “
Lire Nb
Pour i <--  1 à Nb
Ecrire “Entrez le nombre numero”, i
Lire T(i)
i Suivant
Som   0
Pour i  <-- 1à Nb
Som <--  Som + T(i)
i Suivant
Moy <--  Som / Nb
NbSup <--  0
Pour i  <-- 1 à Nb
Si T(i) > Moy Alors
NbSup  <-- NbSup + 1
FinSi
i Suivant
Ecrire NbSup, “ élèves dépassent la moyenne de la classe”
Fin

 

Exercice 11 :

Ecrire un algorithme qui demande à l’utilisateur un nombre compris entre 1 et 3 jusqu’à ce que la réponse convienne.

Correction exercice 11 :

Variable N en Entier

Debut

N ← 0

Ecrire "Entrez un nombre entre 1 et 3"

TantQue N < 1 ou N > 3

Lire N

Si N < 1 ou N > 3 Alors

Ecrire "Saisie erronée. Recommencez”

FinSi

FinTantQue

Fin

Exercice 12 :

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.

Correction exercice 12 :

Variable N en Entier

Debut

N ← 0

Ecrire "Entrez un nombre entre 10 et 20"

TantQue N < 10 ou N > 20

Lire N

Si N < 10 Alors Ecrire "Plus grand !" SinonSi N > 20 Alors Ecrire "Plus petit !"

FinSi

FinTantQue

Fin

Exercice 13 :

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.

On peut imaginer deux variantes, strictement équivalentes :

Correction exercice 13 :

Solution 1

Variables N, i en Entier

Debut

Ecrire "Entrez un nombre : "

Lire N

Stop ← N+10

Ecrire "Les 10 nombres suivants sont : "

TantQue N < Stop N ← N+1

Ecrire N

FinTantQue

Fin

Solution 2

Variables N, i en Entier

Debut

Ecrire "Entrez un nombre : "

Lire N i ← 0

Ecrire "Les 10 nombres suivants sont : "

TantQue i < 10 i ← i + 1 Ecrire N + i

FinTantQue

Fin

Exercice 14 :

Réécrire l'algorithme précédent, en utilisant cette fois l'instruction Pour

Là encore, deux variantes, correspondant trait pour trait à celles du corrigé précédent :

Correction exercice 14 :

Solution 1:

Variables N, i en Entier

Debut

Ecrire "Entrez un nombre : "

Lire N

Ecrire "Les 10 nombres suivants sont : "

Pour i ← N + 1 à N + 10

Ecrire i i Suivant

Fin

Solution 2:

Variables N, i en Entier

Debut

Ecrire "Entrez un nombre : "

Lire N

Ecrire "Les 10 nombres suivants sont : "

Pour i ← 1 à 10

Ecrire N + i i Suivant

Fin

Exercice 15 :

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 :

7 x 1 = 7

7 x 2 = 14

7 x 3 = 21

7 x 10 = 70

Correction exercice 15 :

Variables N, i en Entier

Debut

Ecrire "Entrez un nombre : "

Lire N

Ecrire "La table de multiplication de ce nombre est : "

Pour i ← 1 à 10

Ecrire N, " x ", i, " = ", n*i i Suivant

Fin

Exercice 16 :

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.

Correction exercice 16 :

Variables N, i, Som en Entier

Debut

Ecrire "Entrez un nombre : "

Lire N Som ← 0

Pour i ← 1 à N Som ← Som + i i Suivant

Ecrire "La somme est : ", Som

Fin

Exercice 17

Ecrire un algorithme qui demande un nombre de départ, et qui calcule sa factorielle. NB : la factorielle de 8, notée 8 !, vaut

1 x 2 x 3 x 4 x 5 x 6 x 7 x 8

Correction exercice 17 :

Variables N, i, F en Entier

Debut

Ecrire "Entrez un nombre : "

Lire N F ← 1

Pour i ← 2 à N F ← F * i

i Suivant

Ecrire "La factorielle est : ", F

Fin

Exercice 18 :

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

 

Correction exercice 18 :

Variables N, i, PG en Entier

Debut

PG ← 0

Pour i ← 1 à 20

Ecrire "Entrez un nombre : "

Lire N

Si i = 1 ou N > PG Alors

PG ← N

FinSi

i Suivant

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 : "

Lire N

Si i = 1 ou N > PG Alors

PG ← N

IPG ← i

FinSi

i Suivant

Ecrire "Le nombre le plus grand était : ", PG Ecrire "Il a été saisi en position numéro ", IPG

Fin

Exercice 19 :

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.

Correction exercice 19 :

Variables N, i, PG, IPG en Entier

Debut

N ← 1

i ← 0

PG ← 0

TantQue N <> 0

Ecrire "Entrez un nombre : "

Lire N

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 20 :

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.

 

Correction exercice 20 :

Variables E, somdue, M, Reste, Nb10E, Nb5E En Entier

Debut

E ← 1

somdue ← 0

TantQue E <> 0

Ecrire "Entrez le montant : "

Lire E

somdue ← somdue + E

FinTantQue

Ecrire "Vous devez :", somdue, " euros"

Ecrire "Montant versé :"

Lire M

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 21 :

É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.

Spontanément, on est tenté d'écrire l'algorithme suivant :

Correction exercice 21 :

 

Solution 1: 

Variables N, P, i, Numé, Déno1, Déno2 en Entier

Debut

Ecrire "Entrez le nombre de chevaux partants : "

Lire N

Ecrire "Entrez le nombre de chevaux joués : "

Lire P Numé ← 1

Pour i ← 2 à N Numé ← Numé * i i Suivant

Déno1 ← 1

Pour i ← 2 à N-P Déno1 ← Déno1 * i i Suivant

Déno2 ← 1

Pour i ← 2 à P Déno2 ← Déno2 * i i Suivant

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 :

 

Solution 2:

Variables N, P, i, A, B en Numérique

Debut

Ecrire "Entrez le nombre de chevaux partants : "

Lire N

Ecrire "Entrez le nombre de chevaux joués : "

Lire P A ← 1

B ← 1

Pour i ← 1 à P

A ← A * (i + N - P)

B ← B * i i Suivant

Ecrire "Dans l’ordre, une chance sur ", A

Ecrire "Dans le désordre, une chance sur ", A / B

Fin