TD - TP 1 Programmation C
TD - TP 1 Programmation C
TD - TP 1 Programmation C
Exercice 7 :
Ecrivez un programme qui calcule les solutions réelles d'une équation du second degré
ax2+bx+c = 0 en discutant la formule:
Utilisez une variable d'aide D pour la valeur du discriminant b2-4ac et décidez à l'aide de D, si
l'équation a une, deux ou aucune solution réelle. Utilisez des variables du type int pour A, B
et C.
Considérez aussi les cas où l'utilisateur entre des valeurs nulles pour A; pour A et B; pour A,
B et C. Affichez les résultats et les messages nécessaires sur l'écran.
La structure répétitive
Exercice 8 :
Ecrivez un programme qui lit N nombres entiers au clavier et qui affiche leur somme, leur
produit et leur moyenne. Choisissez un type approprié pour les valeurs à afficher. Le nombre
N est à entrer au clavier. Résolvez ce problème,
a) en utilisant while,
b) en utilisant do - while,
c) en utilisant for.
d) Laquelle des trois variantes est la plus naturelle pour ce problème?
Exercice 9
Complétez la 'meilleure' des trois versions de l'exercice 8 :
Répétez l'introduction du nombre N jusqu'à ce que N ait une valeur entre 1 et 15.
Quelle structure répétitive utilisez-vous? Pourquoi?
Exercice 10
Calculez par des soustractions successives le quotient entier et le reste de la division entière
de deux entiers entrés au clavier.
Exercice 11
Calculez la factorielle N! = 1*2*3...(N-1)*N d'un entier naturel N en respectant que 0!=1.
a) Utilisez while,
b) Utilisez for.
Exercice 12
Affichez un triangle isocèle formé d'étoiles de N lignes (N est fourni au clavier):
2ème Année Filière AP 2/10 2022/2023
ENSA de Fès Programmation C
Nombre de lignes : 8
*
***
*****
*******
*********
***********
*************
***************
Exercice 13
Affiche la table des produits pour N variant de 1 à 10 :
X*Y I 0 1 2 3 4 5 6 7 8 9 10
--------------------------------------------------
0 I 0 0 0 0 0 0 0 0 0 0 0
1 I 0 1 2 3 4 5 6 7 8 9 10
2 I 0 2 4 6 8 10 12 14 16 18 20
3 I 0 3 6 9 12 15 18 21 24 27 30
4 I 0 4 8 12 16 20 24 28 32 36 40
5 I 0 5 10 15 20 25 30 35 40 45 50
6 I 0 6 12 18 24 30 36 42 48 54 60
7 I 0 7 14 21 28 35 42 49 56 63 70
8 I 0 8 16 24 32 40 48 56 64 72 80
9 I 0 9 18 27 36 45 54 63 72 81 90
10 I 0 10 20 30 40 50 60 70 80 90 100
Les fonctions
Exercice 14
Ecrire deux fonctions qui calculent la valeur XN pour une valeur réelle X (type double) et une
valeur entière positive N (type int) :
a) EXP1 retourne la valeur XN comme résultat.
b) EXP2 affecte la valeur XN à X.
Ecrire un programme qui teste les deux fonctions à l'aide de valeurs lues au clavier
Exercice 15
Ecrire une fonction MIN et une fonction MAX qui déterminent le minimum et le maximum
de deux nombres réels.
Ecrire un programme se servant des fonctions MIN et MAX pour déterminer le minimum et le
maximum de quatre nombres réels entrés au clavier.
Exercice 16
Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entière N (positive ou
négative) du type long comme paramètre et qui fournit le nombre de chiffres de N comme
résultat.
Ecrire un petit programme qui teste la fonction NCHIFFRES:
Exemple:
Introduire un nombre entier : 6457392
Le nombre 6457392 a 7 chiffres.
Exercice 17
En mathématiques, on définit la fonction factorielle de la manière suivante:
0! = 1
n! = n*(n-1)*(n-2)* ... * 1 (pour n>0)
Ecrire une fonction FACT du type double qui reçoit la valeur N (type int) comme paramètre
et qui fournit la factorielle de N comme résultat. Ecrire un petit programme qui teste la
fonction FACT.
Exercice 18
Ecrire un programme qui construit et affiche le triangle de Pascal en calculant les coefficients
binomiaux:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
...
On n'utilisera pas de tableau, c.-à-d. il faudra calculer les coefficients d'après la formule ci-
dessous, tout en définissant et utilisant les fonctions adéquates.
2ème Année Filière AP 4/10 2022/2023
ENSA de Fès Programmation C
Exercice 24
Un tableau A de dimension N+1 contient N valeurs entières triées par ordre croissant; la
(N+1)ième valeur est indéfinie. Insérer une valeur VAL donnée au clavier dans le tableau A de
manière à obtenir un tableau de N+1 valeurs triées.
Exercice 25
Problème: Rechercher dans un tableau d'entiers A une valeur VAL entrée au clavier. Afficher
la position de VAL si elle se trouve dans le tableau, sinon afficher un message correspondant.
La valeur POS qui est utilisée pour mémoriser la position de la valeur dans le tableau, aura la
valeur -1 aussi longtemps que VAL n'a pas été trouvée.
Implémenter deux versions:
a) La recherche séquentielle
Comparer successivement les valeurs du tableau avec la valeur donnée.
b) La recherche dichotomique ('recherche binaire', 'binary search')
Condition: Le tableau A doit être trié
Comparer le nombre recherché à la valeur au milieu du tableau,
- s'il y a égalité ou si le tableau est épuisé, arrêter le traitement avec un message
correspondant.
- si la valeur recherchée précède la valeur actuelle du tableau, continuer la recherche dans le
demi-tableau à gauche de la position actuelle.
- si la valeur recherchée suit la valeur actuelle du tableau, continuer la recherche dans le demi-
tableau à droite de la position actuelle.
Ecrire le programme pour le cas où le tableau A est trié par ordre croissant.
Question: Quel est l'avantage de la recherche dichotomique? Expliquer brièvement.
Exercice 26
Problème: On dispose de deux tableaux A et B (de dimensions respectives N et M), triés par
ordre croissant. Fusionner les éléments de A et B dans un troisième tableau FUS trié par ordre
croissant.
Méthode: Utiliser trois indices IA, IB et IFUS. Comparer A[IA] et B[IB]; remplacer
FUS[IFUS] par le plus petit des deux éléments; avancer dans le tableau FUS et dans le tableau
qui a contribué son élément. Lorsque l'un des deux tableaux A ou B est épuisé, il suffit de
recopier les éléments restants de l'autre tableau dans le tableau FUS
Exercice 27
Problème: Classer les éléments d'un tableau A par ordre décroissant.
Méthode: Parcourir le tableau de gauche à droite à l'aide de l'indice I. Pour chaque élément
A[I] du tableau, déterminer la position PMAX du (premier) maximum à droite de A[I] et
échanger A[I] et A[PMAX].
Exemple:
Exercice 28
Ecrire un programme qui lit les points de N élèves d'une classe dans un devoir et les
mémorise dans un tableau POINTS de dimension N.
* Rechercher et afficher:
- la note maximale,
- la note minimale,
- la moyenne des notes.
* A partir des POINTS des élèves, établir un tableau NOTES de dimension 7 qui est composé
de la façon suivante:
2ème Année Filière AP 7/10 2022/2023
ENSA de Fès Programmation C
Exemple:
La note maximale est 58
La note minimale est 13
La moyenne des notes est 37.250000
6 > #######
5 > ####### #######
4 > ####### ####### #######
3 > ####### ####### ####### #######
2 > ####### ####### ####### ####### #######
1 > ####### ####### ####### ####### #######
+-------+-------+-------+-------+-------+-------+-------+
I 0 - 9 I 10-19 I 20-29 I 30-39 I 40-49 I 50-59 I 60 I
Exercice 30
Ecrire un programme qui transfère un tableau M à deux dimensions L et C (dimensions
maximales: 10 lignes et 10 colonnes) dans un tableau V à une dimension L*C.
Exemple:
/ \
|abcd| / \
| e f g h | ==> | a b c d e f g h i j k l |
|ijkl| \ /
\ /
Exercice 31
Ecrire un programme qui met à zéro les éléments de la diagonale principale d'une matrice
carrée A donnée.
Exercice 32
Ecrire un programme qui effectue la transposition tA d'une matrice A de dimensions N et M
en une matrice de dimensions M et N.
a) La matrice transposée sera mémorisée dans une deuxième matrice B qui sera ensuite
affichée.
b) La matrice A sera transposée par permutation des éléments.
Rappel:
/ \ / \
tA = t | a b c d | = | a e i |
|efgh| |bfj|
|ijkl| |cgk|
\ / |dhl|
\ /
Exercice 33
En multipliant une matrice A de dimensions N et M avec une matrice B de dimensions M et P
on obtient une matrice C de dimensions N et P:
A(N,M) * B(M,P) = C(N,P)
La multiplication de deux matrices se fait en multipliant les composantes des deux matrices
lignes par colonnes:
2ème Année Filière AP 9/10 2022/2023
ENSA de Fès Programmation C
Rappel:
/ \ / \ / \
|abc| |pq| | a*p + b*r + c*t a*q + b*s + c*u |
| e f g | * | r s | = | e*p + f*r + g*t e*q + f*s + g*u |
|hij| |tu| | h*p + i*r + j*t h*q + i*s + j*u |
|klm| \ / | k*p + l*r + m*t k*q + l*s + m*u |
\ / \ /
Ecrire un programme qui effectue la multiplication de deux matrices A et B. Le résultat de la
multiplication sera mémorisé dans une troisième matrice C qui sera ensuite affichée.
Exercice 34
Rechercher dans une matrice donnée A les éléments qui sont à la fois un maximum sur leur
ligne et un minimum sur leur colonne. Ces éléments sont appelés des points-cols. Afficher les
positions et les valeurs de tous les points-cols trouvés.
Exemples: Les éléments soulignés sont des points-cols:
/ \ / \ / \ / \
|18340| |4589| |35677| |123|
| | |3893| |42289| |456|
|67270| |3493| |63297| |789|
\ / \ / \ / \ /
Méthode: Etablir deux matrices d'aide MAX et MIN de même dimensions que A, telles que: