Vous êtes sur la page 1sur 12

Module : ASD3

Enseignant : Mahseur Mohammed


Série d’exercices N°1- Complexité
Calculer la complexité et l’ordre de grandeur des algorithmes suivants :

Algorithme 1 Maximum
1: Var A, B, C, Max : entiers ;
2: Début
3: Lire(A,B,C) ;
4: Si (A>B) alors
5: Si (A>C) alors
6: Max ← A ;
7: Sinon
8: Max ← C ;
9: Fin Si
10: Sinon
11: Si (B>C) alors
12: Max ← B ;
13: Sinon
14: Max ← C ;
15: Fin Si
16: Fin Si
17: Écrire(Max) ;
18: Fin.

Algorithme 2 Premier
1: Var N, i, cpt : entiers ;
2: Début
3: Lire(N) ;
4: Si (N=1) alors
5: Écrire(N,"n’est pas un nombre premier") ;
6: Sinon
7: i ← 2 ; cpt ← 0 ;
8: Tant que (i≤ N/2)et(cpt=0) faire
9: Si (N mod i=0) alors
10: cpt ← cpt+1 ;
11: Sinon
12: i ← i+1 ;
13: Fin Si
14: Fin Tant que
15: Si (cpt=0) alors
16: Écrire(N,"est un nombre premier") ;
17: Sinon
18: Écrire(N,"n’est pas un nombre premier") ;
19: Fin Si
20: Fin Si
21: Fin.

1
Algorithme 3 Somme
1: Var N, p, i, fact, puiss : entiers ; F : réel ;
2: Début
3: Lire(N,p) ;
4: F ← 1 ; puiss ← 1 ; fact ← 1 ;
5: Pour i= 1 à N faire
6: puiss ← puiss*p ;
7: fact ← fact*i ;
8: F ← F+puiss/fact ;
9: Fin Pour
10: Écrire(F) ;
11: Fin.

Algorithme 4 Argent
1: Var N, a, b, c, d :entiers
2: Début
3: Lire(N) ;
4: Pour a= 0 à N faire
5: Pour b= 0 à N div 10 faire
6: Pour c= 0 à N div 20 faire
7: Pour d= 0 à N div 50 faire
8: Si (N=a +10*b+20*c+50*d) alors
9: Écrire(a,b,c,d) ;
10: Fin Si
11: Fin Pour
12: Fin Pour
13: Fin Pour
14: Fin Pour
15: Fin.

Algorithme 5 Tri
1: Var i, j, sauv : entiers ;
2: T : Tableau [1..100] d’entier ;
3: Début
4: Lire(N) ;
5: Pour i= 1 à N-1 faire
6: Pour j= i+1 à N faire
7: Si (T[i]<T[j]) alors
8: sauv←T[i] ;
9: T[i]←T[j] ;
10: T[j]←sauv ;
11: Fin Si
12: Fin Pour
13: Fin Pour
14: Fin.

2
Procédure LectureMatrice(E/ : N :entier ; S/ : M : Tableau[1..1000 ;1..1000]d’en-
tier)
Var i, j : entier ;
Pour i= 1 à N faire
Pour j= 1 à N faire
Lire(M[i,j]) ;
Fin Pour
Fin Pour
Fin Procédure

Fonction Fréquence(N,V :entier ; M : Tableau[1..1000 ; 1..1000] d’entiers) :entier


Var i, j, Cpt :entier ;
Cpt←0 ;
Pour i= 1 à N faire
Pour j= 1 à N faire
Si (M[i,j]=V) alors
Cpt←Cpt+1 ;
Fin Si
Fin Pour
Fin Pour
Retourner Cpt ;
Fin Fonction

Algorithme 6 MatriceFréquence
1: Var M : Tableau[1..1000 ; 1..1000] d’entiers ; N, V :entier ;
2: Début
3: Lire(N) ; Lire(V) ; Cpt←0 ;
4: LectureMatrice(N,M) ;
5: Ecrire(Fréquence(N,V,M)) ;
6: Fin.

Algorithme 7 Reste
1: Var N, d, r :entiers ;
2: Début
3: Lire(N) ; r←N ;
4: Tant que (r>d) faire
5: r←r-d ;
6: Fin Tant que
7: Écrire(r) ;
8: Fin.

3
Fonction Factorielle(N :entier) :entier
Si (N=0) alors
retourner 1 ;
Sinon
retourner N*Factorielle(N-1) ;
Fin Si
Fin Fonction

Algorithme 8 LA Factorielle
1: Var N : entier
2: Début
3: Lire(N) ;
4: Écrire(Factorielle(N)) ;
5: Fin.

Fonction Fibonacci(N :entier) :entier


Si (N<2) alors
retourner N ;
Sinon
retourner Fibonacci(N-1)+Fibonacci(N-2) ;
Fin Si
Fin Fonction

Algorithme 9 Suite de Fibonacci


1: Var N : entier
2: Début
3: Lire(N) ;
4: Écrire(Fibonacci(N)) ;
5: Fin.

4
Module : ASD3
Enseignant : Mahseur Mohammed

Série d’exercices N°2- Révision sur les pointeurs

Exercice 1
Soit N un nombre entier strictement positif donné, écrire l’algorithme qui permet de :
1. Créer une liste linéaire chainée (L) contenant tous les nombres premiers inférieurs
à N et supérieurs à 1.
2. Afficher (L).
3. Calculer le nombre d’éléments de (L)
4. Vérifier l’existence d’un nombre entier donné D dans (L).
5. Supprimer le maillon de la position donnée R, (sachant que la position du premier
maillon est 1).
6. Insérer un nombre donné D dans une position donnée R
7. Éclater la liste (L) en deux listes : (L1) et (L2) telles que :
(L1) contient les nombres dont la position du poids faible =7.
(L2) contient les nombres restants.
8. Fusionner deux listes linéaires chainées d’entiers triées par ordre croissant (Z1) et
(Z2) dans une liste (Z) de telle sorte que cette nouvelle liste soit triée aussi par
ordre croissant.

Exercice 2
On considère un fichier de données, nommé ‘FE.dat’, contenant les informations sur
un ensemble d’étudiants. Chaque étudiant est caractérisé par les informations suivantes :
Matricule, Nom, Prénom et Note.
On supposera que le fichier ‘FE.dat’ existe déjà.
Écrire un algorithme permettant d’effectuer les traitements suivants :
1. Insérer tous les éléments du fichier dans une liste doublement chainée de tête (L).
2. Dans la liste (L), supprimer l’étudiant dont le matricule = M .
3. Trier la liste (L) avec un ordre décroissant de la Note.
4. Dans la liste (L), Insérer un étudiant donné E en préservant le tri décroissant des
notes.
5. Recopier le contenu de la liste dans le fichier ‘FE.dat’ en écrasant ses anciennes
données.
6. Afficher la liste (L).
7. Libérer la liste (L).

5
Exercice 3
La bibliothèque de la faculté classe les livres par spécialité (réseau, programmation,...).
Chaque spécialité est identifiée par son Code et son Libellé. Ces informations sont
stockées dans une liste chaînée dont chaque élément comporte aussi un champ NbrLivres
pour le nombre des livres disponibles par spécialité et un champ PLivre qui est un
pointeur sur sa liste des livres disponibles.
La liste des livres de chaque spécialité est aussi une liste chaînée dont la tête est le champ
PLivre de la cellule de spécialité. Chaque livre a pour identifiant son Numéro, il a un
Titre, un Nom d’auteur, un Nom d’éditeur, l’Année de publication et le Nombre de
pages.On suppose que tous les champs de la liste des spécialités sont remplis sauf le champ
NbrLivres. On suppose que tous les champs des livres sont remplis.
Écrire un algorithme contenant :
1. Procédure NBLIV : qui calcule et met à jour le champ NbLivres de chaque
spécialité.
2. Procédure CHOIXLIVRE : qui affiche les informations d’un livre donné carac-
térisé par son Code de spécialité et son Numéro, ou un message si ce livre n’est
pas disponible.
3. Procédure CHOIXANNÉE : qui affiche tous les titres publiés dans toutes les
spécialités dans une Année donnée.
4. Procédure SUPPRIMER : qui supprime un livre donné par son Code de spé-
cialité et son Numéro, avec mise à jour du champ NbLivres.
5. Procédure AFFICHER : qui affiche les livres d’une spécialité donnée par son
Code de spécialité.
6. Procédure INSÉRER : qui insère un nouveau livre donné dans une spécialité
donnée par son Code de spécialité avec mise a jour du champs NbLivres.

Exercice 4
Soit N un nombre entier strictement positif.
Écrire un algorithme permettant de :
1. Représenter N dans une liste circulaire chainée L telle que chaque maillon contient
une position de N (le premier maillon contient le poids faible).
2. Restaurer (reconstruire) le nombre N a partir de la liste.
Exemple : N=81945

6
Module : ASD3
Enseignant : Mahseur Mohammed

Série d’exercices N°3 - Récursivité

Exercice 1
Donnez une solution récursive pour chaque problème :
1. La factorielle d’un nombre entier positif.
(
ième F0 = F1 = 1
2. le n terme de la suite de Fibonacci.
Fn = Fn−1 + Fn−2 pour n ≥ 2
3. La conversion d’un nombre entier positif donné N écrit en decimal vers une base
donnée inférieure à 10 et soit b.
4. Le calcul de la somme des n premiers carrés. Par exemple, si n vaut 4, ce sous-
programme calculera 12 + 22 + 32 + 42 .
5. La recherche dichotomique d’une valeur V dans un vecteur trié donné T de taille
N.
6. Le calcul de nombre de postions (digits) d’un nombre entier positif donné N.
7. Le calcul de la fréquence d’apparition (occurrences) d’une valeur donnée V dans
un vecteur donné T de taille N.
8. Le calcul de la somme des valeurs d’un vecteur donné T de taille N.
9. Le calcul de la fréquence d’apparition (occurrences) d’une valeur donnée V dans
une LLC donnée L.
10. Le calcul de la somme des valeurs d’une LLC donnée L.
11. L’affichage d’une LLC donnée L.
12. La libération d’une LLC donnée L.
13. La création d’une LLC donnée L avec insertions à la fin.
14. Le calcul de la taille d’une LLC donnée L.
15. Le calcul du Maximum d’une LLC d’entiers donnée L.
16. Une fonction Booléenne qui vérifie l’existence d’une valeur donnée V dans une LLC
donnée L.
17. Une fonction qui permet de créer une LLC copie (Duplicata)d’une LLC donnée L.
18. Une fonction qui retourne le pointeur du dernier maillon d’une LLC.

7
Exercice 2
étant donnée une matrice carrée T[N][N], où N>1 et N est pair. On veut représenter
un triangle dans la moitié supérieure de cette matrice en mettant a jour certaines cases
de la matrice T.
1. Écrire une action paramétrée récursive afin de représenter un triangle dans la moitié
supérieure de la matrice T.
2. Écrire une action paramétrée récursive afin de représenter un triangle dans la moitié
inférieure de la matrice T.
3. En s’inspirant des deux questions précédentes, écrire une action paramétrés récur-
sive dans le but de représenter un losange (voir figure ci-dessous).

0 0 0 1 0 0 0
0 0 1 1 1 0 0
0 1 1 1 1 1 0
1 1 1 1 1 1 1
0 1 1 1 1 1 0
0 0 1 1 1 0 0
0 0 0 1 0 0 0

8
Module : ASD3
Enseignant : Mahseur Mohammed

Série d’exercices N°4 - Files et Piles

Exercice 1
Soient F et P une File et une Pile non vides, respectivement.
En utilisant seulement une seule variable et les opérations de la classe PILE et FILE.
Écrire un algorithme qui renverse l’ordre des éléments de F.

Exercice 2
Implémenter une File en utilisant deux Piles

Exercice 3
• Écrire une fonction StackCopy(P) recevant une pile P comme argument et ren-
voyant une copie P2 de P.
Attention, la pile P doit (bien sûr) être conservée !
• Écrire une fonction StackReverse(P) recevant une pile P comme argument et
renvoyant une copie inversée RP de P.
Attention, la pile P doit être conservée !

Exercice 4
Un problème fréquent d’un compilateur et des traitements de textes est de déterminer
si les parenthèses d’une chaîne de caractères sont balancées et proprement incluses l’une
dans l’une.
Par exemple, la chaîne ((( ) ) ( ) ) ( ) est bien balancée et proprement écrite.
Mais les chaînes )( )( ou ( ) ) ne le sont pas.
Écrire un algorithme qui retourne TRUE si une chaîne de caractères est proprement écrite
et bien balancée, et FALSE sinon.
Utiliser pour cela une Pile.

Exercice 5
Soit le labyrinthe suivant :

Écrire l’algorithme qui permet de trouver le plus court chemin entre (E) et (S).

9
Exercice 6 (Examen Avril 2021 Fac Centrale)
On considère deux polynômes Poly1 et Poly2 représentés dans deux Piles :P1 et P2
respectivement de la manière suivante :
Chaque élément de la Pile représente un terme du polynôme, c’est un enregistrement
composé de deux champs :
• COEF : C’est un nombre réel qui représente le coefficient,
• EXPO : C’est un nombre entier qui représente l’exposant,
Exemple 1
Le terme +5X 3 est représenté par :

Les termes d’un polynôme sont empilés par ordre croissant de l’exposant du bas jusqu’au
sommet.
Écrire une procédure qui permet de calculer : Poly3=Poly1+Poly2
Le résultat doit être représenté dans une troisième Pile P3, ainsi que les termes doivent
être triés par le même ordre que ceux de P1 et P2.
Exemple 2
Poly1= 5X 3 + 10X 2 + 4 ; Ploy2= 6X 4 + 2X 3 + 9X 2 + 11X ;
Poly3=Poly1+Poly2= 6X 4 + 7X 3 + 19X 2 + 11X + 4 .

10
Module : ASD3
Enseignant : Mahseur Mohammed

Série d’exercices N°5 - Arbres

Exercice 1
Soit R un arbre binaire de nombres entiers, écrire les fonctions et les procédures qui
permettent de :
1. Calculer la taille de R (nombre de nœuds de R)
2. Calculer le nombre de feuilles de R
3. Calculer le nombre de nœuds internes de R
4. Calculer de nombre de nœuds contenant une valeur paire
5. Calculer la profondeur de R
6. Trouver le maximum de R
7. Vérifier l’existence d’une valeur V dans R
8. Calculer le nombre d’occurrences d’une valeur V dans R
9. Dupliquer l’arbre R dans RP
10. Vérifier si les deux arbres R et RP sont identiques
11. Calculer la somme des nœuds de R
12. Vérifier si R est strictement binaire
13. Vérifier si R est un arbre binaire complet
14. Afficher R en Préordre
15. Afficher R en Inordre
16. Afficher R en Postordre
17. Afficher R en Largeur de gauche à droit
18. Afficher R en Largeur de droit à gauche
19. Libérer R

11
Exercice 2
Soit R un arbre de recherche binaire de nombres entiers, soit T un vecteur non ordonné
de N éléments entiers, écrire les fonctions et les procédures qui permettent de :
1. Insérer une valeur V dans R
2. Copier les tous les éléments de T dans un arbre de recherche binaire vide R
3. Copier tous les élément de R dans T de telle sorte que T soit ordonné avec un
ordre croissant
4. Trier le tableau T en utilisant un arbre de recherche binaire
5. Supprimer un élément de R
6. Trouver le maximum de R
7. Faire la recherche dichotomique d’une valeur V

Exercice 3 ( Examen Avril 2021 Fac Centrale)


Dans une entreprise, le service Marketing est organisé d’une manière hiérarchique
comme suit : Le chef service est l’agent le plus expérimenté, il gère deux agents, chaque
agent est un responsable de deux ou un ou zéro autres agents moins expérimentés que lui,
et ainsi de suite. Ce service est représenté par un arbre binaire (R) où chaque maillon
représente un agent contient comme information : son Nom (chaine [30]) et son Expérience
(nombre entier). Le nœud racine représente le chef service, (voir l’exemple).
1. Écrire une fonction booléenne qui retourne vrai si l’arbre (R) est vraiment ordonné
d’une manière hiérarchique, c’est-à-dire que chaque agent (nœud interne) est plus
expérimenté que ses fils.
2. Écrire une procédure qui affiche tous les agents de type feuilles dont l’expérience
est supérieure à 10.
Exemple :

Remarque :vous pouvez utiliser n’importe quelle structure de données intermédiaire

12

Vous aimerez peut-être aussi