Sujet de Travaux Dirigés n°3 – UEO12-- Correction
Pour réaliser ce TD/TP, vous devez maîtriser les notions suivantes :
fonctions et procédures
boucles
structures conditionnelles
Question n°1 :
Enoncé :
Ecrire les deux fonctions permettant de calculer sin(x) et cos(x).
Correction :
Ici, manifestement, il s'agit de s'inspirer de l'écriture utilisée pour calculer
exponentielle et l'appliquer aux fonctions sin(x) et cos(x). C'est dans ce but que
les formules pour ces fonctions sont données au bas du sujet :
Fonction sinus :
sin
x
=
i= 0
∞
1
i
2×i+1
!×x2in+1xx3
3!x5
5!x7
7!. .. . .. . . x23
23!
D'après cette formule, l'on obtient une bonne approximation de sinus x en
réalisant la somme pour i allant de 0 à 11 ( (23-1)/2) de -1 puissance i divisé
par factorielle de 2i plus 1.
Or, si l'on compare cette formule avec celle utilisée pour exponentiel, l'on se
rend compte que les termes utilisés pour sin x sont compris dans la suite de
termes utilisés pour le calcul de l'approximation de la fonction exponentielle.
ex=
i=0
xi
i! 1+x+ x2
2!x3
3!x4
4!.. . .. . ..x22
22!
Il nous reste à établir quels termes nous allons sélectionner dans cette suite.
On remarque que la suite que nous cherchons à calculer ne contient que les
termes impairs de la suite utilisée pour exponentielle. On peut donc réutiliser
cette boucle en l'adaptant pour que la somme se réalise correctement et
uniquement sur les terme de i impair.
Il faut également modifier le calcul de cette somme pour prendre en compte la
multiplication par -1 à la puissance i.
De plus, la première itération de la boucle d'exponentiel nous amène un 1 qui
n'est pas présent pour sinus. Il faut donc également penser à initialiser la
variable de retour à 0 et non à 1.
On peut donc considérer la proposition suivante :
double sinus (float x)
{
int i ;
double termcour , sin ;
termcour = -1.0; sin = 0.0;
for (i = 1; i<= 23; i++)
{ termcour = termcour * x/ i ;
//Si i est impair
if(i%2==1)
{
sin = sin + termcour ;
//Pour avoir l'alternance des -
termcour = termcour * -1;
}
}
return (sin);
}
Passons maintenant à la fonction cosinus
Fonction cosinus :
Le principe reste le même : nous avons la formule de départ de cosinus
cos
x
=
i=0
1
i
2×i
!×x2×i1x2
2!x4
4!x6
6!. .. . .. . . x22
22!
et nous allons adapter l'une des deux fonctions que nous avons déjà pour
réaliser ce calcul. On remarque qu'ici ce sont les termes pairs que l'on
conserve. De plus, nous avons également dans la somme correspondant à
cosinus le -1 puissance i de sinus. Les modification à réaliser sont donc
mineures.
Nous pouvons donc, si nous modifions la fonction sinus proposée
précédemment, en initialisant la variable de retour à 1 au lieu de 0 et en
modifiant la condition pour ne conserver que les termes pairs, faire la
proposition suivante :
double cosinus (float x)
{
int i ;
double termcour , cos ;
termcour = -1.0;
cos = 1.0 ;
for (i = 1; i<= 22; i++)
{ termcour = termcour * x/ i ;
//Si i est pair
if(i%2==0)
{
//Pour avoir l'alternance des -
termcour = termcour * -1;
cos = cos + termcour ;
}
}
return (cos);
}
Question n°2 :
Enoncé :
Ecrire ensuite la fonction permettant de calculer tg(x)
Correction :
Si l'on fait appel à nos souvenirs en mathématiques, l'on se rappelle de la
formule suivante : tg(x)= sin(x) / cos(x).
Donc on peut proposer la solution suivante :
double tangente (float x)
{return (sinus(x)/cosinus(x));}
Question n°3 :
Enoncé :
Faire ensuite le main() en sortant la liste des valeurs de tg(x) pour
x=0.0, x=0.1, x=0.2 … x=6.2.
sous la forme :
angle tg
0.1 0.001745
0.2 0.003490
Correction :
Au cours de cet exercice nous allons mettre en application la fonction tangente
précédemment définie. Pour pouvoir utiliser cette fonction, il faut que les
fonctions sinus, cosinus et tangente soient définies au dessus du main (ou dans
une librairie incluse)
Nous avons un calcul à effectuer et à afficher de façon périodique : de 0 à 6.2
avec un pas de 0.1. Il faut donc utiliser une structure itérative, de type for ou
while pour réaliser les 62 itérations demandées.
Donc à chaque itération, nous devons effectuer
le calcul de tangente de x
l'affichage de x et de tangente de x.
On arrive donc à la proposition de code suivante :
int main (void)
{
int i; double x=0.0;
printf(« Calcul de tangente de x pour x allant de 0.0 à 6.2 \n »);
printf(« \n\n Angle Tangente\n»);
for(i=0; i<62; i++)
{
x+=0.1;
printf(« %0.1f %0.6f \n »,x,tangente(x));
}
}
avec, bien sur, les fonctions sinus, cosinus et tangente écrite au dessus du
main.
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !