UNIVERSITE THOMAS SANKARA BURKINA - FASO
Filières : MPCI/L1S2 Année Académique :2024-2025
TD d’Algorithmique et programmation en C
Exercice 9
Soit un tableau à une dimension contenant N nombres entiers (N ≤ 100). Ecrire un programme
en C qui :
1. demande d’entrer la taille du tableau (utiliser la fonction calloc pour l’allocation dyna-
mique) et saisir les éléments du tableau (utiliser un pointeur) ;
2. détermine le minimum, le maximum et la moyenne des éléments d’un tableau T.
Soit une matrice carrée A(N, N) d’entiers ( N ≤ 25 ). Ecrire un programme en C qui :
a. demande d’entrer la taille du tableau et saisir les éléments du tableau ;
b. calcule et affiche la trace de la matrice A. (La trace est la somme des éléments de la diago-
nale principale).
[Voir la correction]
Exercice 10
Ecrire un programme qui lit deux caractères et un entier n. Puis calcule et affiche la nième chaîne
de Fibonacci basée sur ces deux caractères. La nième chaîne de Fibonacci Sn est obtenue en conca-
ténant Sn−1 avec Sn−2 , en mettant Sn−1 devant Sn−2 .
Exemple :
S0 = b
S1 = a
S2 = ab
S3 = aba
S4 = abaab
S5 = abaababa
S6 = abaababaabaab
[Voir la correction]
Exercice 11
Ecrire un programme qui lit une chaîne de caractères et vérifie si elle est palindrome ou non. On
rappelle qu’une chaîne de caractères est dite palindrome, si elle se lit de la même manière dans les
deux sens. Exemple : non, touot et 1234321 sont toutes des chaînes de caractères palindromes.
[Voir la correction]
H. BAMOGO 1 TD d’Algorithmique et programmation en C
Exercice 17
Un nombre complexe Z est entièrement défini par sa partie réelle a et imaginaire b(Z = a + bi).
1. Donner la déclaration d’ un nombre complexe.
2. Ecrire les fonctions : ReelZ, ImagZ et Module donnant les attributs d’un nombre complexe
respectivement : la partie réelle, la partie imaginaire et le module.
3. Ecrire les actions paramétrées : SommeZ, DiffZ et ProdZ nécessaires à l’arithmétique sur
les complexes, respectivement pour 1’ addition, la soustraction et la multiplication.
4. Ecrire une procédure ConjZ qui calcule le conjugué dun nombre complexe.
5. Ecrire une fonction EgaleZ qui teste l’égalité de deux nombres complexes.
6. Ecrire une procédure EcrireZ qui permet d’ afficher un nombre complexe.
7. Soit TC un tableau de N nombres complexes (N <= 100). En utilisant les actions paramé-
trées précédentes, écrire une procédure qui :
- Affiche l’ élément de TC ayant le plus grand module. Puis vérifie l’ existence de son
conjugué dans TC.
- Calcule la somme Zs et le produit Zp des éléments non nuls du tableau TC.
- Calcule et affiche la différence entre Zs et Zp si elle est imaginaire pur.
[Voir la correction]
H. BAMOGO 2 TD d’Algorithmique et programmation en C
Proposition de correction
H. BAMOGO 3 TD d’Algorithmique et programmation en C
Exercice 9
Soit un tableau à une dimension contenant N nombres entiers (N<=100). Écrivons un programme
en C qui :
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main() {
5 int *T;
6 int N, i, min, max, somme = 0;
7 float moyenne;
8
9 // 1°) demande d’entrer la taille du tableau
10 printf("Entrer la taille du tableau (N 100) : ");
11 scanf("%d", &N);
12 if (N <= 0 || N > 100) {
13 printf("L taille est invalide.\n");
14 return 1;
15 }
16 T = (int*)calloc(N, sizeof(int));
17 printf("Entrez les %d éléments du tableau :\n", N);
18 for (i = 0; i < N; i++) {
19 scanf("%d", T + i);
20 }
21
22 // 2°) Détermine le minimum, le maximum et la moyenne des éléments d’un tableau T
23 min = T[0];
24 max = T[0];
25 for (i = 1; i < N; i++) {
26 if (*(T + i) < min) min = *(T + i);
27 if (*(T + i) > max) max = *(T + i);
28 }
29 for (i = 0; i < N; i++)
30 somme += *(T + i);
31 moyenne = (float)somme / N;
32
33 printf("Le minimum est: %d\n", min);
34 printf("Le maximum est: %d\n", max);
35 printf("La moyenne est: %f\n", moyenne);
36
37 free(T);
38 return 0;
39 }
[Aller à l’énoncé]
Exercice 10
Le programme ci-dessous utilise l’allocation dynamique de mémoire pour construire la n-ième
chaîne de Fibonacci à partir de deux caractères donnés. On a utilisé les fonctions :
- malloc qui permet d’allouer dynamiquement de la mémoire pendant l’exécution du programme.
H. BAMOGO 4 TD d’Algorithmique et programmation en C
- strcpy qui permet de faire une copie.
- strcat qui permet de faire une concaténation.
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 // Fonction principale
6 int main() {
7 char c0, c1;
8 int n;
9
10 printf("Entrez le premier caractère : ");
11 scanf("%c", &c0);
12 printf("Entrez le deuxième caractère : ");
13 scanf("%c", &c1);
14 printf("Entrez n : ");
15 scanf("%d", &n);
16
17 char *S[n+1];
18 S[0] = malloc(2 * sizeof(char));
19 S[1] = malloc(2 * sizeof(char));
20 S[0][0] = c0;
21 S[0][1] = '\0';
22 S[1][0] = c1;
23 S[1][1] = '\0';
24
25 for (int i = 2; i <= n; i++) {
26 int taille1 = strlen(S[i-1]);
27 int taille2 = strlen(S[i-2]);
28 S[i] = (char*)malloc((taille1 + taille2) * sizeof(char));
29 strcpy(S[i], S[i-1]);
30 strcat(S[i], S[i-2]);
31 }
32 printf("S%d = %s\n", n, S[n]);
33
34 for (int i = 0; i <= n; i++) {
35 free(S[i]);
36 }
37
38 return 0;
39 }
N.B : Pour améliorer la lisibilité du programme, il est fortement recommandé d’utiliser une in-
dentation cohérente et structurée, en décalant systématiquement le code à l’intérieur des blocs
conditionnels, des boucles et des fonctions
[Aller à l’énoncé]
Exercice 11
Le programme ci-dessous lit une chaîne de caractères et vérifie si elle est un palindrome. On a
declaré un tabeau de 100 caractères.
H. BAMOGO 5 TD d’Algorithmique et programmation en C
1 #include <stdio.h>
2 #include <string.h>
3
4 int main() {
5 char chaine[100];
6 int palindrome = 1, i, taille;
7
8 printf("Entrez une chaîne de caractères : ");
9 scanf("%s", chaine);
10
11 taille = strlen(chaine);
12
13 for (i = 0; i < taille / 2; i++) {
14 if (chaine[i] != chaine[taille - 1 - i]) {
15 palindrome = 0;
16 break;
17 }
18 }
19
20 if (palindrome) {
21 printf("La chaîne : %s est un palindrome.\n", chaine);
22 } else {
23 printf("La chaîne : %s n'est pas un palindrome.\n", chaine);
24 }
25
26 return 0;
27 }
On peut utiliser aussi les fonctions comme gets, strcpy, strrev, strcmp pour mettre en place ce
programme.
1 #include <stdio.h>
2 #include <string.h>
3
4 int main() {
5 char A[100], B[100];
6 int palindrome ;
7
8 printf("Entrez une chaîne de caractères : ");
9 gets(A);
10 strcpy(B, A);
11 strrev(B);
12 palindrome = strcmp(A, B);
13
14 if (palindrome == 0) {
15 printf("La chaîne : %s est un palindrome.\n", A);
16 } else {
17 printf("La chaîne : %s n'est pas un palindrome.\n", A);
18 }
19 return 0;
20 }
[Aller à l’énoncé]
H. BAMOGO 6 TD d’Algorithmique et programmation en C
Exercice 17
1. La déclaration d’un nombre complexe en langage C peut se faire en utilisant une structure,
qui permet de regrouper la partie réelle et la partie imaginaire sous un même type.
1 typedef struct {
2 float re;
3 float im;
4 } Complexe;
2. Ecrivons les fonctions : ReelZ, ImagZ et Module donnant les attributs d’un nombre com-
plexe respectivement : la partie réelle, la partie imaginaire et le module.
1 float ReelZ(Complexe z) {
2 return [Link];
3 }
4
5 float ImagZ(Complexe z) {
6 return [Link];
7 }
8
9 float Module(Complexe z) {
10 return sqrt([Link] * [Link] + [Link] * [Link]);
11 }
3. Ecrivons les actions paramétrées : SommeZ, DiffZ et ProdZ nécessaires à l’arithmétique sur
les complexes, respectivement pour l’addition, la soustraction et la multiplication.
1 Complexe SommeZ(Complexe z1, Complexe z2) {
2 Complexe res;
3 [Link] = [Link] + [Link];
4 [Link] = [Link] + [Link];
5 return res;
6 }
7
8 Complexe DiffZ(Complexe z1, Complexe z2) {
9 Complexe res;
10 [Link] = [Link] - [Link];
11 [Link] = [Link] - [Link];
12 return res;
13 }
14
15 Complexe ProdZ(Complexe z1, Complexe z2) {
16 Complexe res;
17 [Link] = [Link] * [Link] - [Link] * [Link];
18 [Link] = [Link] * [Link] + [Link] * [Link];
19 return res;
20 }
4. Ecrivons une procédure ConjZ qui calcule le conjugué dun nombre complexe.
H. BAMOGO 7 TD d’Algorithmique et programmation en C
1 Complexe ConjZ(Complexe z) {
2 [Link] = -[Link];
3 return z;
4 }
5. Ecrivons une fonction EgaleZ qui teste l’égalité de deux nombres complexes.
1 int EgaleZ(Complexe z1, Complexe z2) {
2 return ([Link] == [Link]) && ([Link] == [Link]);
3 }
6. Ecrivons une procédure EcrireZ qui permet d’afficher un nombre complexe.
1 void EcrireZ(Complexe z) {
2 if ([Link] >= 0)
3 printf("%f + %f i \n", [Link], [Link]);
4 else
5 printf("%f - %f i \n", [Link], -[Link]);
6 }
7. Soit TC un tableau de N nombres complexes (N<=100).
1 int main() {
2 int N, indexe;
3 float maxModule;
4 printf("Entrez le nombre de nombres complexes (N <= 100) : ");
5 scanf("%d", &N);
6 Complexe TC[N];
7 for (int i = 0; i < N; i++) {
8 printf("Complexe %d :\n", i + 1);
9 printf("Entrer la partie réelle : ");
10 scanf("%f", &TC[i].re);
11 printf("Entrer la partie imaginaire : ");
12 scanf("%f", &TC[i].im);
13 }
14 indexe = 0;
15 maxModule = Module(TC[0]);
16 for (int i = 1; i < N; i++) {
17 float mod = Module(TC[i]);
18 if (mod > maxModule) {
19 maxModule = mod;
20 indexe = i;
21 }
22 }
23 EcrireZ(TC[indexe]);
24 Complexe conj = ConjZ(TC[indexe]);
25 int existe = 0;
26 for (int i = 0; i < N; i++) {
27 if (EgaleZ(TC[i], conj)) {
28 existe = 1;
29 break;
30 }
31 }
H. BAMOGO 8 TD d’Algorithmique et programmation en C
32 if (existe)
33 printf("Son conjugué existe dans le tableau.\n");
34 else
35 printf("Son conjugué n'existe pas dans le tableau.\n");
36
37
38 Complexe Zs = {0, 0};
39 Complexe Zp = {1, 0};
40
41 for (int i = 0; i < N; i++) {
42 if (TC[i].re != 0 || TC[i].im != 0) {
43 Zs = SommeZ(Zs, TC[i]);
44 Zp = ProdZ(Zp, TC[i]);
45 }
46 }
47 EcrireZ(Zs);
48 EcrireZ(Zp);
49
50 Complexe diff = DiffZ(Zs, Zp);
51 if ([Link] == 0 && [Link] != 0) {
52 printf("La différence Zs - Zp est un imaginaire pur : ");
53 EcrireZ(diff);
54 } else {
55 printf("La différence Zs - Zp n'est pas un imaginaire pur.");
56 }
57 return 0;
58 }
[Aller à l’énoncé]
H. BAMOGO 9 TD d’Algorithmique et programmation en C