Académique Documents
Professionnel Documents
Culture Documents
Algorithmes de tri
Durée : 04h
5. Tri rapide :
La méthode du tri rapide est une méthode récursive de tri qui consiste à positionner défi-
nitivement un élément du tableau, choisi comme pivot, de manière que tous les éléments
1
de sa gauche lui soient inférieurs et tous les éléments de sa droite lui soient supérieurs.
Nous choisissons que le pivot soit le premier élément du tableau.
2 Programmation
Consigne : Vous devez choisir et trairer quatres exercices. Les exercices supplémen-
taires seront considérés comme des exercices donnant des notes de bonification.
Exercice 1.
Ecrire un programme demandant à l’utilisateur de donner un entier positif n correspondant à
la taille de deux tableaux A et B.
Après avoir créer ces deux tableaux, le programme utilise alors une fonction initTab afin
d’initialiser successivement ces deux tableaux :
Le programme utilise ensuite une autre fonction produitScalaire pour calculer le produit
scalaire des tableaux :
Si A = [2, 3, 4] et B = [4, −3, 6], leur produit scalaire est l’entier 2 ∗ 4 + 3 ∗ (−3) + 4 ∗ 6.
Exercice 2.
Ecrire une fonction polynome qui permet de calculer l’image en t du polynôme
Vous ne devez utiliser que votre propre fonction puissance pour calculer les puissances X m :
Exercice 3.
Ecrire un programme qui permet à l’utilisateur de saisir deux matrices carrées quelconques A
et B. Le programme demande pour cela le nombre de lignes et celui des colonnes de la matrice
A, puis permet à l’utilisateur de saisir cette matrice. Il fait de même pour la matrice B. Le
programme calcule alors le produit A ∗ B et/ou B ∗ A, quand cela est possible.
2
Exercice 4. (La recherche des éléments identiques)
Ecrire une fonction en langage C qui demande à l’utilisateur de donner un nombre entier n
désignant la taille d’un tableau d’entiers. La fonction effectue alors les actions suivantes :
1. Remplir le tableau en demandant à l’utilisateur de donner ces éléments. Par exemple si
n = 3 et que l’utilisateur donne les éléments successifs 1, 2 et 3, le remplissage se fera
suivant le format d’affichage :
Donner maintenant les éléments du tableau :
tab[0] = 1,
tab[1] = 2,
tab[2] = 3.
2. La fonction demande ensuite à l’utilisateur de lui donner une valeur x qu’il recherchera
dans le tableau.
3. La fonction affiche enfin le nombre d’occurrences de x dans le tableau ainsi que les posi-
tions de ces éléments. Par exemple, si l’utilisateur rentre le tableau
A = [1, 2, 3, 5, 7] B = [1, 3, 4, 6, 7, 9]
La fonction calcule le tableau
C = [1, 2, 3, 4, 5, 6, 7, 9]
La signature du programme est la suivante
int myunion(int A[], int tailleA, int B[], int tailleB, int C[])
3
tab[0] = 1,
tab[1] = 2,
tab[2] = 3.
2. Le programme demande ensuite à l’utilisateur de lui donner une valeur x qu’il recherchera
dans le tableau.
3. Le programme affiche enfin le nombre d’occurrences de x dans le tableau ainsi que les
positions de ces éléments. Par exemple, si l’utilisateur rentre le tableau
Exercice 7.
Ecrire un programme qui permet à l’utilisateur de saisir deux matrices carrées quelconques A
et B. Le programme demande pour cela le nombre de lignes et celui des colonnes de la matrice
A, puis permet à l’utilisateur de saisir cette matrice. Il fait de même pour la matrice B. Le
programme calcule alors le produit A ∗ B et/ou B ∗ A, quand cela est possible.
Exercice 8.
Ecrire un programme qui demande à l’utilisateur de donner le nombre de lignes et de colonnes
d’un tableau réels. Ce programme demande alors à l’utilisateur de remplir le tableau en affichant
des messages de la forme :
i et j devant être remplacés dans ces messages par les valeurs correspondantes.
Le programme affiche finalement le tableau en affichant également la moyenne des éléments de
chaque ligne, de chaque colonne et la moyenne globale.
Pour un tableau de 3 lignes et de 3 colonnes :
1 3 5
2 7 6
3 2 4
4
Exercice 9.
La suite des nombres de Catalan (Cn )n≥1 est telle que
C1 = 1
Cn =
4n − 6
Cn = × Cn−1 , ∀n ≥ 1.
n
1. Ecrire une fonction qui demande à l’utilisateur de donner un entier naturel n ≥ 1 et qui
calcule puis affiche la valeur de Cn .
2. Ecrire une autre fonction qui calcule pour un entier naturel n ≥ 1, la valeur de
(2n − 2)!
Un = .
(n − 1)! n!
3. En déduire une fonction qui montre pour tout n ≥ 1 que Cn = Un . Pour cela, la fonction
demande n, calcule Cn et Un , puis vérifie si Cn == Un . Le programme affiche bien entendu,
chacune des valeurs calculées de Cn et de Un sous le format :
n Un Cn Cn == U n
1 1 1 true
.. .. .. ..
. . . .
4. Donner enfin une fonction qui permet de montrer pour tout n ≥ 1 que
4n−1
Cn ≤ .
n
Vous prendrez soin d’effectuer un affichage similaire à celui de la question précédente.
Exercice 10. La banque Azôwatò accorde un prêt à un client, si l’intérêt annuelle généré par
son compte épargne bloqué dépasse 100000. Le taux d’intérêt annuelle de cette banque est de
3.5%.
On vous demande d’écrire un programme en langage C++permettant de lire le montant initial
d’un compte d’épargne bloqué, puis de déterminer le nombre d’années au bout duquel le client
pourra bénéficier d’un prêt.
Par exemple, si le montant initial du compte est de 1000000, on a comme intérêts générés :
Année 1 : intérêt = 1000000 ∗ 0.035 = 35000.0
Année 2 : intérêt = 1035000 ∗ 0.035 = 36225.0
··· ···
Pour ce client, on arrête donc les itérations quand intérêt > 100000.
Exercice 11.
Ecrire un programme qui demande à l’utilisateur de rentrer un nombre réel x, sous le format
"S.V.P., Donner un nombre réel x : "
Le programme demande ensuite à l’utilisateur de donner un nombre entier naturel “n >= 0”.
Il demande alors à l’utilisateur de rentrer des nombres réels y jusqu’à ce que “y == x”. Le
programme ne fait au plus que n tests de vérification. Il affiche à chaque vérification erroné un
message de la forme :
5
— Si x < y : "La valeur de y est trop grande !"
— Si x > y : "La valeur de y est trop petite !"