Vous êtes sur la page 1sur 5

Université Moulay Ismaïl 2021-2022

ENSAM – Meknès 2ème Année

TD/TP N° 4 – Types structurés (C++)

Exercice 1
Ecrire un programme C, qui permet de :
- déclarer un tableau (à une dimension) de taille ( à lire);
- lire les éléments du tableau ;
- lire un entier positif
- rechercher la position de la première occurrence de dans . Sinon, afficher le message "Elément
inexistant".
Exercice 2 (Factorisation de Horner)
Soit P un polynôme de degré n et à coefficients réels (ici flottants) : ( ) .
Horner propose une factorisation pour calculer l’image d’un point x par P, en utilisant juste des additions et des
multiplications successives et évitant ainsi, les puissances (qui ont un coût de calcul). Cette factorisation est réalisée
comme suit :
( ) ( )
(( ) )
(( ( ) ) ) )
Ecrire une fonction Horner qui reçoit flottant x, un tableau A contenant les coefficients du polynôme, et le degré
n et retourne la valeur P(x) en utilisant la factorisation de Horner.

Exercice 3 (Tri à bulles)


Pour trier les éléments d’un tableau, il existe plusieurs algorithmes de tri (Tri par sélection, par insertion, par fusion,
tri rapide, etc.). On étudiera ici, le tri à bulles ou tri par propagation. C’est un algorithme de tri qui consiste à faire
remonter progressivement les plus grands éléments d'un tableau, comme les bulles d'air remontent à la surface d'un
liquide.
Principe : On considère un tableau de nombres (int, float, double, etc.) T, de taille n. L'algorithme parcourt le
tableau, et dès que deux éléments consécutifs ne sont pas ordonnés, il les permute. Après un premier passage, on voit
que le plus grand élément se situe bien en fin de tableau. On peut donc recommencer un 2ème passage, en s'arrêtant à
l'avant-dernier élément, et ainsi de suite. Au ième passage, on fait remonter le ième plus grand élément du tableau à sa
position définitive.
1er passage 2ème passage 3ème passage 4ème passage
Exemple :

Ecrire une fonction triBulles qui reçoit un tableau d’entiers T et sa taille n et le trie par ordre croissant.
Modifier la fonction pour que le tri soit décroissant. Ecrire un programme de test.

Page 1
A. Ahmadi ENSAM-Meknès
Exercice 4 (Fusion de 2 tableaux triés)

Ecrire une fonction fusionTabTries qui reçoit deux tableaux d’entiers T et Q et leurs tailles respectives n et m,
contenant chacun des entiers triés dans l’ordre croissant, et les fusionne dans un troisième tableau R (reçu comme
argument) de taille n+m, de sorte que R soit aussi trié par ordre croissant. La fonction fusionTabTries ne doit
faire appel à aucun algorithme de tri.
Exemple :

T={3, 6, 11, 24, 65}, Q={1, 8, 10, 20, 65, 80 ,95 } ⇒ R={1, 3, 6, 8, 10, 11, 20, 24, 65, 65, 80,95}.
Exercice 5
1- Ecrire les fonctions suivantes :
- int **alloc_int_mtx(int l,int c)permettant de réserver de l’espace mémoire pour une
matrice de l lignes et de c colonnes (Elle doit retourner l’adresse du bloc réservé).
- void lecture_int_mtx(int **mat,int l, int c) qui permet de lire les éléments
d’une matrice mat de dimensions (l,c).
- int nbOccurrences(int **mat,int l, int c,int x0) qui reçoit l’adresse de
début d’une matrice mat, ses dimensions et un entier x0, et retourne le nombre d’occurrences de x0
dans mat.
- void liberer_int_mtx(int **mat,int l) qui permet de libérer l’espace mémoire
alloué à la matrice mat dont le nombre de lignes est l.
2- Ecrire un programme de test.
Exercice 6
Ecrire une fonction récursive somTabRec qui reçoit un tableau de flottants T et sa taille n, et retourne la somme de
ses éléments. Ecrire un programme de test faisant appel à cette fonction.
Exercice 7
Ecrire une fonction récursive moyTabRec qui reçoit un tableau d’entiers T et sa taille n, et retourne sa moyenne.
Ecrire un programme de test de la fonction précédente.
Exercice 8 (Tri par fusion)
Principe :
1. Diviser le tableau de taille n en deux tableaux de tailles presque identiques (dans le cas où n est impair
les tailles ne seront pas identiques).
2. Trier récursivement les deux sous-tableaux.
3. Fusionner les deux sous-tableaux triés dans un seul tableau trié.
Exemple :

Page 2
A. Ahmadi ENSAM-Meknès
1- Ecrire une fonction ( ,- ) qui reçoit un tableau d’entiers , sa
taille et deux indices et tel que ses éléments allant de l’indice jusqu’à l’indice
( ) et ceux allant de ,( ) - jusqu’à sont déjà triés, et fusionne les
éléments de ces 2 blocs, de manière à ce que les éléments de T allant de jusqu’à , soit triés.
(Voir l’exercice 4 de la série TD N°3, pour la fusion).
2- Ecrire une fonction récursive qui reçoit un tableau d’entiers , sa taille et deux indices
et , et trie les éléments de T entre et , en triant d’abord les éléments de T de jusqu’à
( ) et les éléments de ,( ) - jusqu’à , et en fusionnant ensuite, à l’aide
de la fonction précédente, ses 2 blocs triés.
3- Ecrire un programme qui lit un tableau tab de dimension p et le trie en appelant la fonction triFusion
(appel : ( ) ).

Exercice 9
Considérons les 3 instructions suivantes :
,- * +

Quelles valeurs ou adresses fournissent ces expressions:


*P+2
*(P+2)
&P+1
&A[4]-3
A+3
&A[7]-P
P+(*P-10)
*(P+*(P+8)-A[7])
N.B : Les adresses doivent être données (lorsque cela est possible) en fonction des adresses des cases du tableau A.

Exercice 10
Ecrire une fonction qui reçoit 3 entiers n,m et p, réserve de l’espace mémoire nécessaire au stockage un tableau de
caractères de dimension 3, et retourne l’adresse du bloc réservé. Ecrire une fonction de libération d’un tel espace
mémoire et un programme de test.
Exercice 11 (Triangle de Pascal)
1- Ecrire une fonction PascalStat qui reçoit une matrice carrée P et son ordre et remplit la matrice
triangulaire inférieure de P par les valeurs du triangle de Pascal. Par exemple, pour , la matrice
triangulaire inférieure de P est :

Indication : On déclarera une matrice carrée d’ordre ( ), mais on utilisera juste la matrice triangulaire
inférieure. La première colonne et la diagonale contient des 1, et , -, - , -, - , -, -
ère
pour les valeurs des autres positions (autres que la 1 colonne et la diagonale).
2- Ecrire une fonction AffichPascStat qui reçoit une matrice carrée P et son ordre et affiche les valeurs
de la matrice triangulaire inférieure de P.
3- Avec la fonction la fonction précédente, la matrice triangulaire supérieure occupe un espace mémoire non
utilisé. Pour optimiser ce dernier, écrire les fonctions suivantes :
Page 3
A. Ahmadi ENSAM-Meknès
- int **PascalAlloc (int n) qui réserve juste l’espace mémoire nécessaire au du stockage
du triangle de Pascal (matrice triangulaire inférieure) ;
- void PascalLibere(int **P,int n) qui libère l’espace mémoire réservé au triangle de
Pascal.
- void PascalDyn (int **P, int n) qui remplit P par les valeurs du triangle de Pascal ;
- void AffichPascDyn (int **P, int n) qui affiche les valeurs du triangle de Pascal
dont l’adresse de début est P et dont le nombre de ligne est n.

4- Ecrire un programme testant toutes les fonctions précédentes.

Exercice 12

1- Définir une structure complexe permettant de stocker la partie réelle Re et la partie imaginaire d’un nombre
complexe (Re et Im sont de type int) ;
2- Ecrire les fonctions suivantes :
- lectComplexe : permettant de recevoir un nombre complexe et remplir sa partie réelle et sa
partie imaginaire.
- afficheComplexe : permettant de recevoir un nombre complexe et afficher sa partie réelle et sa
partie imaginaire.
- Conjugue : permettant de recevoir un nombre complexe et de retourner son conjugé.
- main() : programme principal testant les fonctions précédentes.

Exercice 13
Ecrire un programme qui permet de :
- Déclarer une structure Etudiant contenant les champs numero (int), nom(chaine de caractères) et moyenne
(float) ;
- Déclarer et remplir un tableau Liste de taille n (à lire) et de type Etudiant.
- Trier le tableau Liste par ordre décroissant de la moyenne.
Exercice 14
Reprendre l’exercice 12, mais en utilisant un tableau dynamique et les fonctions suivante :
- allocTabEtud : fonction d’allocation d’un tableau de structures Etudiant de taille n ;
- lectTabEtud : fonction de lecture du tableau de structures Etudiant de taille n ;
- affichTabEtud : fonction d’affichage du tableau de structures Etudiant de taille n ;
- triTabEtud : fonction de tri, par ordre décroissant de la moyenne, du tableau de structures Etudiant de
taille n ;
- main() : fonction principale pour le test.
Exercice 15
Ecrire une fonction itérative longChaine qui reçoit une chaine de caractères ch et retourne sa longueur (sans
utiliser la fonction prédéfinie strlen). Ecrire un programme de test.
Attention, la chaine peut contenir des séparateurs (espaces, tabulations, …) sauf le caractère '\n' qui sert à la
validation, i.e. la fin de la lecture de la chaine. Même remarque pour les exercices qui suivent.
Exercice 16
Ecrire une fonction nbOccCar qui reçoit une chaine de caractères ch et un caractère car et retourne le nombre
d’occurrences de car dans ch. Ecrire un programme de test.
Exemple : ch="avatar !!", c1='a'. Le nombre d’occurrences de c1 dans ch est 3.

Page 4
A. Ahmadi ENSAM-Meknès
Exercice 17
Ecrire une fonction récursive longChRec recevant une chaine de caractères et retourne sa longueur. Ecrire un
programme de test.

Exercice 18
Ecrire une fonction majCh qui reçoit une chaine de caractères ch et convertit ses lettres minuscules en majuscules.
Les caractères qui ne sont pas des lettres minuscules doivent rester tels quels.
Exemple :
ch="Salut tout le monde. Comment allez-vous ??" ⇒ ="SALUT TOUT LE MONDE. COMMENT ALLEZ-VOUS ??"

Exercice 19
Ecrire une fonction palindrome qui reçoit une chaine de caractères ch et teste si elle est palindrome ou non
(retourne un booléen). Une chaine est dite palindrome si elle peut se lire dans les deux sens, en gardant la même
signification (i.e. symétrique).
Exemples : "ana", "aabbaa", "ELLE", "radar", "eluparcettecrapule".

Exercice 20
Ecrire une fonction assemblerCh qui reçoit deux chaines ch1 et ch2 et les concatène (sans utiliser strcat). Le
résultat sera stocké dans ch1.

Page 5
A. Ahmadi ENSAM-Meknès

Vous aimerez peut-être aussi