TD - TP 1 Programmation C

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 10

ENSA de Fès Programmation C

Travaux Dirigés/Pratiques n°1

Les entrées sorties


Exercice 1 :
Ecrire un programme qui affiche le quotient et le reste de la division entière de deux nombres
entiers entrés au clavier ainsi que le quotient rationnel de ces nombres.
Exercice 2 :
Ecrire un programme qui calcule la somme de quatre nombres du type int entrés au clavier,
a) en se servant de 5 variables (mémorisation des valeurs entrées)
b) en se servant de 2 variables (perte des valeurs entrées)
Exercice 3 :
Ecrire un programme qui calcule et affiche la distance DIST (type double) entre deux points
A et B du plan dont les coordonnées (XA, YA) et (XB, YB) sont entrées au clavier comme
entiers.

Les structures de contrôle


Exercice 4 :
Ecrivez un programme qui lit trois valeurs entières (A, B et C) au clavier. Triez les valeurs A,
B et C par échanges successifs de manière à obtenir :
val(A) val(B) val(C)
Affichez les trois valeurs.
Exercice 5 :
Ecrivez un programme qui lit deux valeurs entières (A et B) au clavier et qui affiche le signe
du produit de A et B sans faire la multiplication.
Exercice 6 :
Ecrivez un programme qui lit deux valeurs entières (A et B) au clavier et qui affiche le signe
de la somme de A et B sans faire l'addition. Utilisez la fonction fabs de la bibliothèque
<math>.

2ème Année Filière AP 1/10 2022/2023


ENSA de Fès 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.

2ème Année Filière AP 3/10 2022/2023


ENSA de Fès Programmation C

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

Les tableaux à une dimension


Exercice 19
Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale:
50 composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
Calculer et afficher ensuite la somme et la moyenne des éléments du tableau.
Exercice 20
Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale:
50 composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
Effacer ensuite toutes les occurrences de la valeur 0 dans le tableau T et tasser les éléments
restants. Afficher le tableau résultant.
Exercice 21
Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale:
50 composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
Ranger ensuite les éléments du tableau T dans l'ordre inverse sans utiliser de tableau d'aide.
Afficher le tableau résultant.
Idée: Echanger les éléments du tableau à l'aide de deux indices qui parcourent le tableau en
commençant respectivement au début et à la fin du tableau et qui se rencontrent en son milieu.
Exercice 22
Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale:
50 composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
Copiez ensuite toutes les composantes strictement positives dans un deuxième tableau TPOS
et toutes les valeurs strictement négatives dans un troisième tableau TNEG. Afficher les
tableaux TPOS et TNEG.
Exercice 23
Calculer pour une valeur X donnée du type float la valeur numérique d'un polynôme de degré
n:
P(X) = AnXn + An-1Xn-1 + ... + A1X + A0
Les valeurs des coefficients An, ... , A0 seront entrées au clavier et mémorisées dans un
tableau A de type float et de dimension n+1.

2ème Année Filière AP 5/10 2022/2023


ENSA de Fès Programmation C

a) Utilisez la fonction pow() pour le calcul.


b) Utilisez le schéma de Horner qui évite les opérations d'exponentiation:

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.

2ème Année Filière AP 6/10 2022/2023


ENSA de Fès Programmation C

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

NOTES[6] contient le nombre de notes 60


NOTES[5] contient le nombre de notes de 50 à 59
NOTES[4] contient le nombre de notes de 40 à 49
...
NOTES[0] contient le nombre de notes de 0 à 9
Etablir un graphique de barreaux représentant le tableau NOTES. Utilisez les symboles
####### pour la représentation des barreaux et affichez le domaine des notes en dessous du
graphique.
Idée: Déterminer la valeur maximale MAXN dans le tableau NOTES et afficher autant de
lignes sur l'écran. (Dans l'exemple ci-dessous, MAXN = 6).

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

Les tableaux à deux dimensions


Exercice 29
Ecrire un programme qui lit les dimensions L et C d'un tableau T à deux dimensions du type
int (dimensions maximales: 50 lignes et 50 colonnes). Remplir le tableau par des valeurs
entrées au clavier et afficher le tableau ainsi que la somme de chaque ligne et de chaque
colonne en n'utilisant qu'une variable d'aide pour la somme.

2ème Année Filière AP 8/10 2022/2023


ENSA de Fès Programmation C

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:

/ 1 si A[i,j] est un maximum


MAX[i,j] = | sur la ligne i
\ 0 sinon

/ 1 si A[i,j] est un minimum


MIN[i,j] = | sur la colonne j
\ 0 sinon

2ème Année Filière AP 10/10 2022/2023

Vous aimerez peut-être aussi