Sujet TP5
Sujet TP5
Sujet TP5
TP 5 – fonctions
1. Ration calorique. La ration calorique exprime le nombre de calories dont a besoin un individu pendant 24 heures.
Les lignes qui suivent indiquent une façon simplifiée de la calculer. La ration calorique est la somme du
métabolisme de base et du métabolisme d'activités.
Par ailleurs, une femme, à taille, masse et âge égaux, a un métabolisme de base inférieur de 10% à celui d'un
homme. Mais une femme enceinte ou qui allaite a besoin d'absorber un supplément d'environ 600 calories.
- Le métabolisme d'activités dépend de l'activité physique du sujet au cours des 24 heures d'une journée
type. On distinguera : le sommeil ou repos couché qui requiert 0 calorie ; l'activité sédentaire (position
assise) qui requiert 50 calories par heure ; l'exercice léger (la marche par ex.) qui requiert 100 calories par
heure ; le sport qui requiert 200 calories par heure.
L'archive disponible sur la plateforme contient un fichier ex1.c dans le quel vous trouverez un squelette permettant de
valider les premières fonctions. –correction disponible–
Vous coderez les fonctions suivantes dont voici les prototypes et leurs commentaires au format Doxygen.
/** Calcule la surface corporelle
@param t : taille en m
@param m : masse en kg
@return la surface corporelle */
float surfaceCorporelle (float m, float t) ;
Vous aurez besoin de la fonction powf. Consultez le manuel en ligne en tapant man powf dans la console.
Vous aurez également besoin de compiler en précisant au compilateur que vous utilisez la librairie mathématique
standard de cette manière :
gcc prog.c -o prog.bin -lm
Travail demandé :
1) A partir squelette de l’archive, compléter les codes des trois fonctions afin de valider les tests unitaires suivants :
#include<stdio.h>
int main (void) {
int a=7, b=4,c=5 ;
trier3Entiers (&a, &b, &c) ;
afficher3entiers(a, b, c) ;
}
2.1. Écrire la fonction void afficher3entiers(int va, int vb, int vc) qui affiche à l'écran les
valeurs des 3 nombres va, vb, vc. Testez votre fonction.
2.2. Écrire la fonction void trier3Entiers(int *pa, int *pb, int *pc) qui trie 3 nombres
stockés dans trois variables dont les adresses pa, pb et pc sont passées en paramètre. A la fin de la fonction, la
variable pointée par pa contiendra le plus petit et la variable pointée par pc contiendra le plus grand. Tester vos
2 fonctions avec le main( ) fourni.
2.3. Écrire la fonction demander3Entiers( ) qui demande 3 entiers à l'utilisateur et qui retourne ces 3
nombres dans trois variables dont les adresses sont passées en paramètre. A vous de trouver le prototype
adéquat.
2.4. Écrire la fonction main( ) permettant de tester la fonction demander3Entiers( ). –correction disponible–
4. Recherche par dichotomie. Implémentez de manière récursive l'algorithme de recherche par dichotomie du
zéro de la fonction
x → x3 + 3.x2 – 598.x – 1200
sur l'intervalle [0, 100] , à une précision de 10-9.
On programmera f(x) de cette manière : f(x) = -1200.0 +x*(-598.0 +x*(3+ x))
– Pourquoi est-ce plus efficace ?
Rappel : soit f une fonction continue sur un intervalle [a,b] et s'annulant exactement une fois sur cet intervalle. Pour
trouver ce zéro, l'algorithme de recherche par dichotomie consiste à :
– découper l'intervalle courant [g,d] en deux intervalles égaux [g,m] et [m,d] (avec m milieu de g et de d) ;
– à retenir celui de ces deux intervalles sur lequel f s'annule (i.e. les valeurs de f aux extrémités de cet intervalle
sont de signes opposés) ;
– jusqu'à obtention de la précision voulue par l'écart d – g des extrémités de l'intervalle courant.
–correction disponible–
5. Méthode de Newton Raphson. C'est une autre méthode de recherche du zéro d'une fonction. La méthode est la
suivante : Soit un point A, proche du zéro à trouver. On calcul pour cela un point C, intersection de la tangente en A
avec l'axe des abscisses. Puis on réitère le processus en C.
Une méthode approchée, appelée méthode des sécantes, consiste à utiliser un point B, proche de A et de
déterminer C comme étant l'intersection de (AB) avec l'axe des abscisses.
a−b
c=b+ f (b)⋅
f (b)− f ( a) f(x)
B
A
C
c a b x
Remarque : vous pouvez également rediriger la sortie d'un programme vers l'entrée de gnuplot :
ou faire lire un fichier texte à gnuplot. Ce fichier devra contenir des commandes gnuplot.
$ gnuplot -p < fichier.txt