Syllabus Tps
Syllabus Tps
Syllabus Tps
i=0
f(a + i h).
Ecrivez un programme qui permette dapproximer, par la mthode des rectangles, lintgrale
de cos(x). Les valeurs de N, a, b et x seront lues au clavier.
9
10
Chapitre 3
Structures de Donnes
Ce chapitre se concentre sur la notion de structures de donnes et les algorithmes qui tournent
autour. Jusqu prsent, les objets manipuls dans nos programmes taient simples, e.g., int,
char, ou encore double. Nous allons aborder maintenant des objets plus complexes. Tout
dabord, les exercices porteront sur une des structures de donnes les plus courantes, les tableaux
(Sec. 3.1). Ensuite, nous aborderons une variante des tableaux, savoir les chanes de caractres
(Sec. 3.2). Nous nous exercerons ensuite manipuler des structures de donnes qui permettent
davoir, sous un mme nom, plusieurs variables de types dirents (Sec. 3.3). Nous nirons ce
chapitre avec les chiers (Sec. 3.4).
3.1 Tableaux
3.1.1 Tableaux Unidimensionnels
Exercice 1 Ecrivez un programme qui remplit un tableau de N entiers (N tant dni via
une instruction #define) et calcule, ensuite, la somme des lments du tableau.
Exercice 2 Ecrivez un programme qui lit au clavier 10 nombres entiers et les place dans un
tableau avant den rechercher le maximum et le minimum. Attention, vous ne pouvez utiliser
quune seule boucle pour la recherche du maximum et du minimum.
Exercice 3 Ecrivez un programme qui calcule le produit scalaire de deux vecteurs dentiers
U et V (de mmes dimensions). Les valeurs contenues dans U et V seront introduites au clavier
par lutilisateur.
Pour rappel, dans un repre orthonorm, le produit scalaire de deux vecteurs se calcule
comme suit : Soient u = (x, y) et v = (x
, y
+ y y
Exercice 4 Calculez, pour une valeur X donne (de type float), la valeur numrique dun
polynme de degr n :
P(X) = A
n
X
n
+ a
n1
X
n1
+ . . . + A
1
X
1
+ A
0
X
0
Les valeurs des coecients A
n
, A
n1
, . . . , A
1
, A
0
seront entres au clavier et mmorises dans
un tableau A de type float et de dimension n + 1.
11
Pour viter les opration dexponentiation, vous veillerez utiliser le schma dHorner :
A
n
..
X + A
n1
. .
. . .
..
X + A
0
Exercice 5 Un tableau A de dimension N + 1 contient N valeurs entires tries par ordre
croissant, la N + 1ime valeur tant indnie. Ecrivez un programme permettant dinsrer une
valeur val donne au clavier dans le tableau A de manire obtenir un tableau de N +1 valeurs
tries.
Exercice 6 Le crible dEratosthne permet de dterminer les nombres premiers infrieurs une
certaine valeur N. On place dans un tableau unidimensionnel tab les nombres entiers compris
entre 1 et N. Lalgorithme consiste, pour chaque lment tab[i] du tableau, rechercher parmi
tous les suivants (dindices i + 1 N), ceux qui sont des multiples et les liminer (en les
remplaant, par exemple, par 0). Lorsque lensemble du tableau a subi ce traitement, seuls les
nombres premiers du tableau nont pas t limins.
Ecrivez un programme permettant de trouver, grce au crible dEratosthne, les nombres
premiers infrieurs 500.
Exercice 7 Ecrivez un programme qui lit au clavier les points de N lves dune classe pour
un devoir et les mmorise dans un tableau N lments. Les notes saisies sont comprises entre
0 et 60.
Une fois les notes obtenues, il est demand de rechercher et dacher :
la note maximale
la note minimale
la moyenne des notes
Exercice 8 Cet exercice complte lexercice prcdent. Une fois le code de lExercice 7 crit, il
est demand de le modier comme suit : partir des points des lves, crer un tableau (appelons
le notes) de dimension 7 qui est compos de la faon suivante :
notes[6] contient le nombre de notes 60.
notes[5] contient le nombre de notes comprises entre 50 et 59.
notes[4] contient le nombre de notes comprises entre 40 et 49.
. . .
notes[0] contient le nombre de notes comprises entre 0 et 9.
Votre programme va devoir acher lcran un graphique de barreaux (i.e., un histogramme)
reprsentant le tableau notes. Utilisez les symboles ####### pour la reprsentation des
barreaux et achez le domaine des notes en dessous du graphique.
Un exemple de ce que votre programme devra acher :
La note maximale est 58
La note minimale est 13
La moyenne des notes est 37.250000
12
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
Pour cet exercice, il est plus quimpratif de commencer par rchir au problme en iden-
tiant les divers sous-problmes. Prenez le temps de bien rchir avant de commencer coder.
3.1.2 Tableaux Multidimensionnels
Exercice 1 Ecrivez un programme qui remplit un tableau de 12 lignes et 12 colonnes laide
des caractres 1, 2 et 3 tel que :
1
1 2
1 2 3
1 2 3 1
1 2 3 1 2
1 2 3 1 2 3
1 2 3 1 2 3 1
1 2 3 1 2 3 1 2
1 2 3 1 2 3 1 2 3
1 2 3 1 2 3 1 2 3 1
1 2 3 1 2 3 1 2 3 1 2
1 2 3 1 2 3 1 2 3 1 2 3
Exercice 2 Ecrivez un programme qui met zro les lments de la diagonale dune matrice
carre A donne (i.e., remplie par lutilisateur au clavier).
Exercice 3 Ecrivez un programme qui construit et ache une matrice carre unitaire U de
dimension N.
Pour rappel, une matrice unitaire est une matrice telle que :
u
ih
=
_
1, si i = j
0, si i = j
Exercice 4 Ecrivez un programme qui eectue la transposition t
A
dune matrice A de dimen-
sions N M en une matrice B de dimension M N. La matrice A sera remplie au clavier par
lutilisateur.
Pour rappel, la transpose dune matrice se calcule comme suit : Si B = t
A
alors (i, j)
1, . . . , m1, . . . , n, b
i,j
= a
j,i
. Exemple, si A =
_
1 2 3
4 5 6
_
, alors t
a
=
_
_
1 4
2 5
3 6
_
_
.
13
Exercice 5 Ecrivez un programme qui eectue laddition de deux matrices A et B de mme
dimension N M. Les deux matrices A et B seront construites au clavier par lutilisateur et le
rsultat de laddition sera plac dans une matrice C avant dtre ach lcran.
Pour rappel, laddition matricielle est dnie comme suit : Si A et B sont deux matrices de
dimension NM, alors la matrice C est obtenue via i 1, . . . , N, j 1, . . . , M, c
i,j
= a
i,j
+b
i,j
.
Exercice 6 Ecrivez un programme qui recherche dans une matrice A donne (i.e., introduite
au clavier par lutilisateur) les lments qui sont la fois maximum sur leur ligne et minimum
sur leur colonne. Ces lments sont appels des points-cols. Votre programme doit acher les
positions et les valeurs de tous les points-cols de votre matrice A.
Par exemple, pour la matrice
_
_
1 2 3
4 5 6
7 8 9
_
_
le rsultat sera le suivant :
point-col: (0,2): 3
3.2 Chanes de Caractres
Exercice 1 Ecrivez un programme dterminant le nombre de lettres e (minuscules) prsentes
dans un texte de moins dune ligne (suppose ne pas dpasser 132 caractres) fourni au clavier.
Exercice 2 Ecrivez un programme qui lit au clavier un mot (dau plus 30 caractres) et qui
lache lenvers.
Exercice 3 Ecrivez un programme qui lit au clavier un mot (dau plus 50 caractres) et qui
dtermine si le mot entr est un palindrome ou non. Commencez, avant de coder, par dlimiter
les dirents sous-problmes et, ensuite, proposez un invariant.
Pour rappel, un palindrome est un texte dont lordre des mots reste le met quon le lise de
gauche droite ou de droite gauche. Par exemple : kayak, hecavalavache ou encore Narine
alla en Iran.
Exercice 4 Ecrivez un programme qui lit des mots au clavier et les ache aprs les avoir
converti en louchebem (i.e., langage des bouchers).
Cette conversion consiste :
reporter la premire lettre du mot en n de mot, suivie des lettres e et m.
remplacer la premire lettre du mot par la lettre l.
Par exemple, vision devient lisionvem, vache devient lachevem ou encore bonne de-
vient lonnebem.
Pour simplier, les mots entrs par lutilisateur font cinq caractres.
Exercice 5 Ecrivez un programme permettant de saisir une phrase au clavier (maximum 300
caractres) et qui ache, ensuite, le nombre de mots contenu dans la phrase.
Exercice 6 Ecrivez un programme permettant de saisir, au clavier, une chane de caractres
(maximum 100 caractres) et une sous-chane (maximum 5 caractres) et qui indique, ensuite,
combien de fois la sous-chane est prsente dans la chane de caractres principale.
14
3.3 Structures
Exercice 1 A laide dune structure, crivez la dclaration de type pour reprsenter une dure
avec trois champs entiers reprsentant (respectivement) les heures, les minutes et les secondes.
Exercice 2 A laide dune structure, crivez la dclaration de type pour reprsenter une per-
sonne. Une personne sera reprsente par son nom et son prnom (maximum 20 caractres dans
les deux cas), son ge et son sexe (M ou F).
Exercice 3 Maintenant, on veut aussi considrer les enfants dune personne. Chaque personne
dispose de maximum 20 enfants. Modiez le type propos dans lexercice prcdent an dy
ajouter le nombre denfants eectif et les enfants dune personne. Les enfants dune personne
seront reprsents par un tableau de personnes.
251,0-1 62
Exercice 4 Un grossiste en composants lectroniques vend quatre types de produits :
des cartes mres (code 1)
des processeurs (code 2)
des barrettes mmoire (code 3)
des cartes graphiques (code 4)
Chaque produite possde une rfrence (qui est un nombre entier), un prix en euros et des
quantits disponibles.
Il est demand de
1. dnir type pour reprsenter un produit
2. dcrire un programme qui permet un utilisateur de saisir une commande dun produit.
Lutilisateur saisit les quantits commandes et les donnes du produit. Lordinateur ache
toutes les donnes de la commande, y compris le prix.
Exercice 5 Ecrivez un programme qui lit au clavier des informations dans un tableau de
structures de type point dni comme suit :
typedef struct{
int num;
float x;
float y;
}point;
Le nombre dlments du tableau sera x par une instruction #define.
Ensuite, le programme ache lcran lensemble des informations prcdentes.
Exercice 6 Dans un premier temps, dnissez un type permettant de reprsenter une fraction
mathmatique. Ecrivez ensuite un programme qui place n (e.g., n = 50) dans un tableau et
ache ensuite les fractions lcran.
Dans un second temps, compltez votre programme pour quil ache lcran toutes les
fractions simplies.
Exercice 7 On souhaite construire une structure de donnes, appele EtatCivil, permettant
denregistrer le nom dune personne, sa date de naissance, la ville o elle rside et le code postal
de la ville. Dnissez un type pour cette structure ainsi quun tableau qui permet de saisir ces
dix ensembles dinformations et qui les ache ensuite lcran.
15
Exercice 8 On souhaite enregistrer les notes de mathmatiques et de physique pour une classe
de 35 lves et calculer, pour chacun deux, la moyenne de ses notes. Proposer une structure
de donnes pertinentes et crivez un programme permettant deectuer la saisie des notes puis
lachage des rsultats.
3.4 Fichiers
Exercice 1 Ecrivez un programme permettant dacher, lcran, le contenu dun chier en
numrotant les lignes. Ces lignes ne devront jamais dpasser plus de 80 caractres.
Exercice 2 Ecrivez un programme qui permet de crer squentiellement un chier rpertoire
comportant pour chaque personne
nom (20 caractres maximum)
prnom (15 caractres maximum)
ge (entier)
numro de tlphone (11 caractres maximum)
Les informations relatives aux direntes personnes seront lues au clavier.
Exercice 3 Ecrivez un programme permettant, partir du chier cr par lexercice prcdent,
de retrouver les informations correspondant une personne de nom donn (linformation sur le
nom est donne au clavier).
Exercice 4 Ecrivez un programme permettant de saisir 20 mots de 20 caractres maximum
et de les enregistrer ligne par ligne dans un chier appel mots.txt. Ecrivez ensuite un autre
programme qui permet de relire le chier et qui en ache le contenu lcran.
Exercice 5 On propose dajouter au programme crit lExercice 8 (Sec. ??) une squence
dinstructions permettant dcrire les 35 enregistrements contenant les noms, les notes et moyennes
de chaque lve dans un chier appel scol.txt.
Une fois ces modications eectues, crivez un nouveau programme permettant, partir de
ce chier scol.txt dacher les rsultats scolaires de la classe.
16
Chapitre 4
Modularit du Code
Jusqu prsent, les programmes raliss ont t constitus dun seul et unique bloc de code.
Hors, il est possible de dcouper le code en diverses fonctions, fonctions pouvant tre appeles
nimporte quand dans le programme. Une programme C devient alors une succession de fonctions,
la fonction int main() tant la fonction principale.
Lavantage de cette dcoupe en fonctions, cest quelle sapplique parfaitement la dcoupe
en sous-problmes. Chaque sous-problme est reprsent, maintenant, par une fonction. Et pour
peu que le sous-problme soit un minimum gnrique, il pourra tre rutilis maintes fois durant
la vie du programme.
Dans ce chapitre, nous allons nous exercer dnir, documenter, et utiliser des fonctions.
Tout dabord, nous allons commencer par lire et comprendre du code qui implique plusieurs
fonctions (Sec. ??). Nous allons ensuite crire des fonctions et les utiliser dans du code (Sec. ??).
La Sec. ?? va nous montrer comment eectuer un passage de paramtres par adresse et, donc,
comment une fonction peut renvoyer plus dun rsultat.
4.1 Lecture de Code
Exercice 1 Soit le code suivant
#include <stdio.h>
int fct(int r){
return 2*r;
}//fin fct()
int main(){
int n, p=5;
n = fct(p);
printf("p = %d, n = %d\n", p, n);
return 0;
}//fin main()
Quel est le rsultat, lcran, de ce programme ?
17
Exercice 2 Soit le code suivant :
#include <stdio.h>
int n=10, q=2;
int fct(int p){
int q;
q = 2 * p + n;
printf("B: dans fct, n = %d, p = %d, q = %d\n", n, p, q);
return q;
}//fin fct()
void f(){
int p = q * n;
printf("C: dans f, n = %d, p = %d, q= %d\n", n, p, q);
}//fin f()
int main(){
int n=0, p=5;
n = fct(p);
printf("A: dans main, n = %d, p = %d, q = %d", n, p, q);
f();
return 0;
}//fin main()
Quel est le rsultat, lcran, de ce programme ?
4.2 Ecriture de Fonctions
Pour chacune des fonctions implmenter dans cette section, il est sous-entendu que chaque
fonction doit tre correctement implmente.
Exercice 1 Ecrivez une fonction C qui calcule la moyenne de trois nombres passs en para-
mtre. Ecrivez ensuite le programme principal qui saisit trois nombres au clavier et ache leur
moyenne.
Exercice 2 Ecrivez une fonction C qui ache laire dun triangle dont la base et la hauteur
sont passes en paramtre. Ecrivez ensuite le programme principal qui saisit la base et la hauteur
dun triangle au clavier et ache laire du triangle.
Exercice 3 Ecrivez une fonction qui reoit en arguments deux nombres ottants et un caractre
et qui fournit un rsultat correspondant une des quatre oprations appliques ses deux
premiers arguments en fonction de la valeur du dernier, savoir : addition pour le caractre
+, soustraction pour le caractre -, multiplication pour le caractre * et division pour le
caractre /. Attention, tout autre caractre que lun des quatre cits sera interprt comme
une addition. De plus, on ne tiendra pas compte des risques de division par zro.
Ecrivez ensuite un petit programme C utilisant cette fonction.
18
Exercice 4 Ecrivez un programme permettant de calculer la valeur du nombre e, base des
logarithmes npriens, en considrant que
e =
+
k=0
1
k!
.
Adoptez une approche par dcoupe en sous-problmes, chaque sous-problme tant rgl par
une fonction particulire.
Exercice 5 Ecrivez un programme permettant de calculer la valeur de e
x
laide du dvelop-
pement en srie suivant :
e
x
=
+
k=0
x
k
k!
.
Adoptez une approche par dcoupe en sous-problmes.
Pour le calcul de x
k
, utilisez la fonction double pow(double base, double exposant) qui
se trouve dans math.h.
Exercice 6 Soit la fonction mathmatique f dnie par
f(x) =
(2x
2
+ 3)(x
2
1)
3x
2
+ 1
1. Ecrivez une fonction C qui retourne la valeur de f(x) pour un point x pass en paramtre.
2. Une approximation de la drive f
(x)
f(x + h) f(x)
h
.
Ecrivez la fonction C qui calcule une approximation de la drive f
de f en un point x
entr au clavier. On passera la valeur de h et de x en paramtre de la fonction.
3. La drive seconde de f est la drive de la drive. Ecrivez une fonction C qui calcule une
approximation de la drive seconde f
(x)
f(x + h) + f(x h) 2f(x)
hx
2
.
On passera la valeur de h et de x en paramtre de la fonction.
4. Ecrivez une fonction C qui dtermine le signe de la drive seconde de f en fonction de x.
On pourra faire un programme principal qui lit x au clavier et ache le rsultat.
5. Ecrivez une fonction C qui donne le choix lutilisateur dacher la valeur de la fonction
f, de sa drive premire ou de sa drive seconde en point x lu au clavier.
Exercice 7 Commencez par dnir une structure de donnes permettant de grer un tudiant.
Un tudiant est reprsent par son nom, son prnom, son matricule, 10 notes dexamen, sa
moyenne, et son classement.
Ecrivez ensuite une fonction qui remplit un tableau de 30 tudiants. Les informations concer-
nant un tudiant sont donnes, au clavier, par lutilisateur. Attention, la moyenne et le classement
ne sont pas des donnes lire au clavier.
19
Ecrivez ensuite une fonction qui prend en argument un tableau dtudiants et qui calcule la
moyenne de chaque tudiant ainsi que la moyenne de la promo.
Sur base de cette fonction, crivez une fonction qui calcule le classement de chaque tudiant.
Ecrivez une fonction qui rordonne les tudiants en fonction de leur classement (du premier
au dernier).
An de pouvoir garder une trace des tudiants et de leurs rsultats, crivez une fonction qui
sauve le contenu du tableau dtudiants dans un chier. Le nom du chier est pass en argument
de la fonction de sauvegarde.
Enn, crivez la fonction main() permettant de manipuler les direntes fonctions crites.
Dans cette fonction main(), vous veillerez bien dclarer le tableau dtudiants.
4.3 Passage de Paramtres
Exercice 1 Soit le code suivant :
#include <stdio.h>
char fonc1(char a, char b){
a = P;
b = Q;
if(a<b)
return a;
else
return b;
}//fin fonc1()
char fonc2(char *c1, char *c2){
*c1 = P;
*c2 = Q;
if(*c1==*c2)
return *c1;
else
return *c2;
}//fin fonc2()
int main(){
char a = X;
char b = Y;
char i, j;
i = fonc1(a, b);
printf("a = %c, b = %c\n", a, b);
j = fonc2(&a, &b);
printf("a = %c, b = %c\n", a, b);
return 0;
}//fin main()
Rpondez ces questions :
20
1. Quelle est la valeur aecte i ?
2. Quelle est la valeur aecte j ?
3. Quache ce programme ?
Exercice 3 Soit la fonction C suivante :
void modifie(int a, int *res){
if(a>0)
*res = a+1;
else
if(a<0)
*res = a-1;
else
*res = a;
}//fin modifie()
Pour chacun des programmes ci-dessous :
1. si le programme est correct, dire ce quil ache
2. si il ne lest pas, dire pourquoi.
int main(){
int a=3;
int res;
modifie(a, res);
return 0;
}//fin main()
int main(){
int a=3;
int res, *p;
p = &res;
modifie(a, p);
return 0;
}//fin main()
int main(){
int a=3;
modifie(a, a);
return 0;
}//fin main()
int main(){
int a=3;
int res;
modifie(a, &res);
return 0;
}//fin main()
int main(){
int a=3;
int res, *p;
p = &res;
modifie(a, &p);
return 0;
}//fin main()
int main(){
int a=3;
modifie(a, &a);
return 0;
}//fin main()
Exercice 4 Soit la fonction main() suivante appelant une fonction calcul() qui ralise deux
oprations : la somme et la dirence de deux entiers.
#include <stdio.h>
int main(){
int a=12, b=45;
int somme, difference;
calcul(a, b, &somme, &difference);
printf("a+b=%d, a-b=%d\n", somme, difference);
21
return 0;
}//fin main()
Donnez le prototype de la fonction calcul() et, ensuite, crivez le code de cette fonction.
22