TP_Langage_C _all

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

Tronc Commun

Sections : A, C et D

Langage C

Travaux Pratiques

Pr. Nabila ZRIRA & Pr. Fatima HANANI


Département Informatique

Année Universitaire : 2024-2025


Travaux pratiques Tronc Commun
Langage C Année : 2024 - 2025

TP 1 : Notions de base

Le calcul des racines d'une équation du second degré du type ax2+bx+c=0 se fait en calculant
d'abord son discriminant Δ = b2-4ac :
1- Ecrire un programme permettant de calculer Δ et d'afficher sa valeur à l'écran pour des
valeurs fixées de a, b et c.
2- Compléter le programme précédent de manière à pouvoir rentrer les valeurs de a, b et c au
clavier.
−b + 
3- Calculer et afficher les solutions de l'équation dans le cas où Δ>0 : x1 = et
2a
−b − 
x2 = .
2a
−b
4- Traiter le cas Δ = 0 (une racine double x = )
2a
−b −
5- Considérer Δ < 0 (deux racines complexes conjuguées : ( x1 = +i et
2a 2a
−b −
x2 = −i ), pour les racines complexes on affichera les parties réelles et imaginaires
2a 2a
comme suit :
x1= 3.5 + i4.2 et x2= 2 – i6.77

On considère la suite de Fibonacci (un), n ∈ N définie par :

u0 = 0 et u1 = 1
un = un-1 + un-2 pour n >= 2
1- En utilisant une boucle, écrivez un programme qui calcule itérativement le nème terme de la
suite de Fibonacci. La valeur de n doit être demandée à l’utilisateur. À chaque itération, le
programme doit afficher un. Voici un exemple d’affichage :
Entrez la valeur de n : 6
u0=0
u1=1
u2=1
u3=2
u4=3
u5=5
u6=8

Page 2 sur 10
Travaux pratiques Tronc Commun
Langage C Année : 2024 - 2025

2- On peut montrer que la suite (un), n ∈ N vérifie un ~ ϕn où ϕ est le nombre d’or. Ainsi,
u
lim n → + n =  . Faites une copie de votre programme et modifiez-la pour tester cette
u n −1
propriété (utilisez le type double). A chaque itération, le programme doit afficher un
u
et le rapport n .
u n −1
1+ 5
Remarque :  = 1, 6180339887498948482045868343656
2
3- Faites une copie de votre programme et modifiez-la pour déterminer quel est le rang n
à partir duquel ϕ est estimé avec une précision de 10-10. A chaque itération, le
u
programme doit afficher un, n et l’erreur commise comme suit :
u n −1

u0=0
u1=1
u2=1
u2/u1=1.000000000000000
erreur : -0.618033988740000
u3=2
u3/u2=2.000000000000000
erreur : 0.381966011260000
u4=3
u4/u3=1.500000000000000
erreur : -0.118033988740000
u5=5
u5/u4=1.666666666666667
erreur : 0.048632677926667
u6=8
u6/u5=1.600000000000000
erreur : -0.018033988740000

Remarque : la fonction fabs(), contenue dans la bibliothèque mathématique math.h,


permet d’obtenir la valeur absolue d’un réel.

On veut programmer un jeu simple, dont les règles sont les suivantes :
• D’abord, le programme choisit un nombre entier entre 1 et 100 au hasard ;
• Puis, il demande à l’utilisateur de deviner cette valeur.
• Si l’utilisateur a bien deviné, le jeu s’arrête.

Page 3 sur 10
Travaux pratiques Tronc Commun
Langage C Année : 2024 - 2025

• Sinon, le programme indique à l’utilisateur si la valeur proposée est trop grande ou trop
petite. Puis, l’utilisateur doit proposer une nouvelle valeur, et on recommence ainsi
jusqu’à ce que la valeur du programme soit trouvée.
Le nombre de tentatives n’est pas limité : le jeu s’arrête quand l’utilisateur a deviné la valeur
choisie par le programme. Le score de l’utilisateur correspond au nombre de tentatives. Bien
sûr, le but du jeu est de trouver la valeur en un minimum de tentatives.

Aide : Pour générer un nombre aléatoire, on utilisera la fonction rand(). Cette fonction
génère un nombre au hasard. Mais nous, on veut que ce nombre soit compris entre 1 et 100. On
utilisera la formule suivante :
srand(time(NULL));
x = (rand() % (MAX - MIN + 1)) + MIN;

srand permet d'initialiser le générateur de nombres aléatoires, on l'appelle une seule fois au
début du programme. N'oublier pas d'inclure les bibliothèques stdlib.h, stdio.h et
time.h.

1- Écrire un programme qui implémente ce jeu.


2- À votre avis, quelle stratégie le joueur doit-il adopter pour obtenir le meilleur score (i.e.,
le plus petit score) ?
3- Modifier le programme afin que l’utilisateur puisse, s’il le souhaite, recommencer une
partie. En quittant le programme, le meilleur score doit s’afficher.

1
On considère l’intégrale 𝐼 = ∫0 x ∗ sin(𝑥) 𝑑𝑥

1- Calculer la valeur exacte « I_Exacte » de I.


2- La méthode des rectangles centrés composés consiste à calculer la somme des aires des
rectangles sous la fonction « f ». Si « h » est la largeur des rectangles, a et b les bornes
d’intégrale et « n » le nombre de rectangles, on peut en déduire la valeur approchée de
l'intégrale en utilisant la formule suivante :

𝑛

𝐼(𝑓)𝑅 = ℎ ∑ 𝑓 (𝑎 − + 𝑘 ∗ ℎ)
2
𝑘=1

Ecrire un algorithme qui évalue numériquement l’intégrale I avec la méthode des


rectangles centrés composés. Le nombre n des rectangles est donné par l’utilisateur.

Page 4 sur 10
Travaux pratiques Tronc Commun
Langage C Année : 2024 - 2025

3- La méthode des trapèzes ressemble fortement à la méthode des rectangles, mais au lieu
de sommer les aires des rectangles, on somme les surfaces des trapèzes.

Ecrire un algorithme qui évalue numériquement l’intégrale I par la méthode des trapèzes
en utilisant la formule suivante :
𝑛−1

𝐼(𝑓) 𝑇 = [𝑓(𝑎) + 𝑓(𝑏) + 2 ∑ 𝑓(𝑎 + 𝑘 ∗ ℎ)]
2
𝑘=1
4- La méthode de Simpson est également une technique de calcul numérique d’une
intégrale. Cette méthode utilise l'approximation d'ordre 2 de f par un polynôme
quadratique.
Ecrire un algorithme qui évalue numériquement l’intégrale I par la méthode de Simpson
en utilisant la formule suivante :

𝑛−1 𝑛−1
ℎ 𝑥𝑘 + 𝑥𝑘+1
𝐼(𝑓)𝑆 = [𝑓(𝑎) + 𝑓(𝑏) + 2 ∑ 𝑓(𝑥𝑘 ) + 4 ∑ 𝑓( )]
6 2
𝑘=1 𝑘=0

Avec : 𝑥𝑘 = 𝑎 + 𝑘 ∗ ℎ
5- Modifier le nombre n des sous intervalles pour toutes les méthodes. Quel est son
influence ?
6- Afficher l’erreur relative de chaque méthode.
L’erreur relative est définie par :
𝐼𝐸𝑥𝑎𝑐𝑡𝑒 − 𝐼𝐸𝑠𝑡𝑖𝑚é𝑒
𝐸𝑟𝑟𝑒𝑢𝑟 = | |
𝐼𝐸𝑥𝑎𝑐𝑡𝑒
7- Comparer les résultats du calcul exact et ceux des trois méthodes. Quelle est la plus
précise ?

Page 5 sur 10
Travaux pratiques Tronc Commun
Langage C Année : 2024 - 2025

TP 2 : Les tableaux

On souhaite simuler des lancements de dés et analyser les statistiques des résultats obtenus.

Partie 1 : Cas d'un seul dé.


1- Comment obtenir un entier compris entre 1 et 6 pour simuler les 6 faces du dé.
2- Proposer les lignes de code qui permettent de créer un tableau de N entiers (N sera fixé
en constante, à 1000 par exemple, moins en phase de test !), et de le remplir de chiffres
aléatoirement pris entre 1 et 6.
3- A l'aide d'une variable intermédiaire, compter le nombre de "1" présents dans le tableau
et afficher ce résultat. Recommencer pour compter le nombre de "2".
4- Effectuer ce comptage pour les 6 valeurs possibles en utilisant une seule boucle. Penser
à un autre tableau de taille 6.
5- Tester votre programme et afficher les probabilités d'apparition des différentes valeurs.
6- Peut-on dire que les tirages sont aléatoires ?

Partie 2 : Cas de deux dés indiscernables.


Dans le cas de deux dés indiscernables, nous pouvons soit considérer que nous effectuons deux
tirages (on jette un dé deux fois et on fait la somme des valeurs obtenues), soit on fait un seul
tirage d'un nombre compris entre 2 et 12.
7- Modifier votre programme pour traiter ces deux façons de faire.
8- Afficher et comparer les probabilités d'apparition des différentes valeurs de ces deux
méthodes.
9- Quelle méthode donne les tirages les plus équiprobables ?

Ecrire un code en langage C qui affiche le nombre d’apparition de chaque élément d’un tableau
T de taille N. Voici un exemple :

T: 5 9 5 7 7 9 6 -4 9 9
Le code doit afficher le résultat suivant :
5 apparaît 2 fois
9 apparaît 4 fois
7 apparaît 2 fois
6 apparaît 1 fois
-4 apparaît 1 fois

Page 6 sur 10
Travaux pratiques Tronc Commun
Langage C Année : 2024 - 2025

Ecrire un code en langage C qui supprime les nombres pairs d’un tableau T de n entiers.

Ecrire un code en langage C qui permet d’insérer un élément dans un tableau T de n entiers trié.

Page 7 sur 10
Travaux pratiques Tronc Commun
Langage C Année : 2024 - 2025

TP 3 : Chaînes de caractères et fonctions

Ecrire un programme qui lit un verbe régulier en "er" au clavier et qui en affiche la conjugaison
au présent de l'indicatif de ce verbe. Contrôlez d'abord, s'il s'agit bien d'un verbe en "er" avant
de conjuguer.
Exemple :
Verbe : fêter
je fête
tu fêtes
il fête
nous fêtons
vous fêtez
ils fêtent

Le but de cet exercice est de réaliser le jeu du pendu. C'est un jeu de lettres dans lequel il faut
deviner un mot caché lettre par lettre en moins de N essais.

Partie 1
1- Ecrire un programme qui demande à l'utilisateur un mot de longueur maximum 30 et qui
transforme les caractères de ce mot en majuscule (pour éviter les accents). Ce sera le mot
caché.
Afin de présenter le mot caché à un autre utilisateur de manière masquée, créez un deuxième
mot de même longueur que le mot caché formé par des '*'. C'est le mot qui sera affiché au
joueur. Le joueur devra, en N essais, trouver le mot caché en donnant à chaque fois une lettre.
2- Ecrire un programme qui vérifie si la lettre donnée se trouve dans le mot caché.
Il y a deux possibilités :
• Si la lettre se trouve dans le mot on dévoile le mot avec les lettres qu'on a déjà
trouvées. S'il n'y a plus de caractères inconnus on a gagné.
• Si la lettre ne se trouve pas dans le mot on indique que la lettre ne s'y trouve pas.
Dans tous les cas on diminue le nombre d'essais restants et on redemande une autre lettre. Quand
le nombre d'essais devient nul le jeu est terminé et on a perdu.
3- Terminer le programme avec ces consignes.

Page 8 sur 10
Travaux pratiques Tronc Commun
Langage C Année : 2024 - 2025

Partie 2
Mettez les différents blocs de la patrie 1 sous formes de fonctions :

• saisie_mot() qui retourne le mot caché en majuscule


• cache_mot() qui retourne un mot de même taille que le mot caché rempli par des '*'
• verifie_lettre_dans_mot() qui vérifie si la lettre passée en argument se
trouve dans le mot caché, remplace '*' par celle-ci si oui et retourne le nombre de
caractères manquants.
4- Reprenez le programme avec ces fonctions.

Nous considérons un programme qui permute aléatoirement les lettres intérieures de chaque
mot d’une phrase. Pour cela on demandera à l’utilisateur de nous donner une phrase d’une
douzaine de mots, puis nous rangerons les mots de la phrase dans un tableau de chaînes de
caractères.
1- Ecrire un programme qui permet de détecter les mots qui existent dans une phrase et tester
cette partie du programme avec la phrase exemple : "Nous sommes les etudiants du
tronc commun ENSMR".
Pour chaque mot dont la longueur dépasse 3 caractères, on permute 3 fois, de manière aléatoire
les lettres intérieures (On ne touche pas aux extrémités). Nous aurons donc besoin, à chaque
fois, de générer 2 nombres aléatoires différents compris entre 1 et la longueur du mot moins 2
pour effectuer la permutation des caractères intérieurs du mot.
2- Ecrire et tester cette partie du programme avec un seul mot. On affichera le mot avant et
après modification. Généraliser et compléter le programme pour afficher la phrase avec les
mots modifiés. Pour la phrase exemple, vous devrez obtenir quelque chose comme :
"Nous smmeos les etuniadts du tnorc cmoumn EMSNR"

Page 9 sur 10
Travaux pratiques Tronc Commun
Langage C Année : 2024 - 2025

TP 4 : Structures et pointeurs

Le but de ce TP est de créer une base de données simple, permettant de décrire une promotion
d’étudiants. Pour cela, nous allons utiliser des structures, des fonctions et des pointeurs.

Représentation d’un étudiant


1. Définissez un type structure etudiant permettant de représenter un étudiant par son
nom, son prénom, sa date de naissance, son code et son sexe. Il faut définir une constante
TAILLE_MAX_NOM pour déterminer le nombre de caractères maximal qu’un nom ou
prénom peut contenir.
2. Ecrire une fonction saisir_etudiant() permettant à l’utilisateur de saisir un
étudiant.
3. Ecrire une fonction afficher_etudiant() qui affiche un étudiant passé en
paramètre.

Représentation d’une promotion


Une promotion correspond à un ensemble d’étudiants.

4. Définir un tableau promo permettant de représenter un groupe d’étudiants. La taille


maximale de la promotion devra être fixée grâce à une constante TAILLE_MAX_PROMO.
La taille effective de la promotion (i.e. combien d’éléments du tableau sont utilisés pour
représenter la promotion) devra être prise en considération.
5. Ecrire une fonction saisir_promotion() permettant de saisir les étudiants d’une
promotion. Après avoir entré les données concernant un étudiant, l’utilisateur devra avoir
la possibilité d’arrêter la saisie.
6. Ecrire une fonction afficher_promotion() qui affiche toute la promotion passée en
paramètre.
7. Ecrire une fonction trier_promotion() qui trie les étudiants par ordre croissant de
leur code.
8. Réaliser un menu qui va utiliser les fonctions précédentes comme suit :
-----------------------------------
Veuillez choisir une option :
-----------------------------------
1- Saisir des étudiants
2- Afficher les étudiants
3- Trier les étudiants par code
0- Quitter
Votre choix est :

Page 10 sur 10

Vous aimerez peut-être aussi