[C] Afficher un cosinus ou sinus

Afficher un cosinus ou sinus [C] - C - Programmation

Marsh Posté le 09-12-2005 à 17:58:09    

Bonjour,
 
Voila j'ai inclu dans mon fichier l'include <math.h> et j'aimerais savoir comment afficher le resultat d'un cosinus car avec un putnbr il me met un resultat incoherent  :??: du genre : -14587934879214  Faut -il modifier son putnbr ou y a t-il une fonction systeme qui permette de le faire?
 
Merci d'avance  ;)

Reply

Marsh Posté le 09-12-2005 à 17:58:09   

Reply

Marsh Posté le 09-12-2005 à 18:00:56    

C'est quoi putnbr ? :heink:
 


$ cat cos.c
#include <stdio.h>
#include <math.h>
int main(void)
{
        printf("%f\n", cos(1.0));
        return 0;
}
 
$ ./a.out
0.540302


 
youpi, chez moi ça marche...


Message édité par Profil supprimé le 09-12-2005 à 18:01:25
Reply

Marsh Posté le 09-12-2005 à 18:03:33    

ben ça devrait pas

Reply

Marsh Posté le 09-12-2005 à 18:06:45    

Putnbr est un efonction qui revoi la valeur d'un int
 
Ok pour ta formule mais si je fais putnbr(valeur d'une variable * cos(90))
 
90 etant le nombre de degres
 
Il m'affiche de la mer** :(

Reply

Marsh Posté le 09-12-2005 à 18:10:08    

Non c'est bon j'ai trouve ;)
 
Pour ceux qui aurait le meme probleme :
 
Il ne faut pas faire putnbr(variable * cos(x))
Mais declarer une autre variable (ex i)
i = variable * cos(x)
putnbr(i) et la ca bug plus ;)
 
Merci de vos reponses ;)

Reply

Marsh Posté le 09-12-2005 à 18:12:06    

fra0 a écrit :

ben ça devrait pas


 
Ah, pourquoi ?

Reply

Marsh Posté le 09-12-2005 à 18:19:32    

parceque le spécificateur de format  que tu utilise et la fonction cos renvoient des types différents il me semble.

Reply

Marsh Posté le 09-12-2005 à 18:26:24    

fra0 a écrit :

parceque le spécificateur de format  que tu utilise et la fonction cos renvoient des types différents il me semble.


 
cos renvoie un double et %f spécifie un format de type double, donc c'est bon. :gratgrat:

Reply

Marsh Posté le 09-12-2005 à 18:29:15    

fra0 a écrit :

parceque le spécificateur de format  que tu utilise et la fonction cos renvoient des types différents il me semble.


Ah ? Je vois du double partout. C'est grave ?
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 09-12-2005 à 19:08:20    

ah ok j'ai toujours cru
%lf -> double
%f -> float
 

Reply

Marsh Posté le 09-12-2005 à 19:08:20   

Reply

Marsh Posté le 09-12-2005 à 19:12:00    

fra0 a écrit :

ah ok j'ai toujours cru
%lf -> double
%f -> float


Pour scanf(), peut être. Je n'utilise pas scanf().
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 09-12-2005 à 19:17:27    

mais c'est bien sûr !
(moi non plus)

Reply

Marsh Posté le 10-12-2005 à 09:59:12    

fra0 a écrit :

ah ok j'ai toujours cru
%lf -> double
%f -> float


 
C'est exact. Mais si tu affiches un double avec "%f" il est automatiquement casté.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 10-12-2005 à 10:59:35    

Sve@r a écrit :

C'est exact. Mais si tu affiches un double avec "%f" il est automatiquement casté.


Afficher avec "%lf" provoque un comportement indéfini en C90. Il est supporté en C99 et fait pareil que "%f".


Message édité par Emmanuel Delahaye le 10-12-2005 à 11:05:21

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 13-12-2005 à 11:13:22    

Bon je relance le topic car en fait c'est idem avec ma methode putnbr et printf :
 
M'afficher la rotation d'un point A(Xa, Ya) d'angle r c'est bien ca non :
 
printf("%lf  %lf ", ((Xa * cos(r)) - (Ya * sin(r))), ((Xa * sin(r)) + (Ya * cos(r))))
Et ce type de calcul avec printf ou putnbr me renvoi un nombre bizarre....
 
Erreur de formule mathematique ou d'affichage de de cosinus/sinus??

Reply

Marsh Posté le 13-12-2005 à 11:40:39    

mouloud51 a écrit :

Bon je relance le topic car en fait c'est idem avec ma methode putnbr et printf :
 
M'afficher la rotation d'un point A(Xa, Ya) d'angle r c'est bien ca non :
 
printf("%lf  %lf ", ((Xa * cos(r)) - (Ya * sin(r))), ((Xa * sin(r)) + (Ya * cos(r))))
Et ce type de calcul avec printf ou putnbr me renvoi un nombre bizarre....
 
Erreur de formule mathematique ou d'affichage de de cosinus/sinus??


 
Je connais pas la formule donc je peux pas te dire. Mais on a souvent des pb vicieux quand on oublie d'inclure "math.h" parce qu'à ce moment là, le compilo voyant arriver des fonctions inconnues les déclare d'office de type "int" mais il ne dit rien donc on détecte pas l'erreur avant d'avoir le nez dessus !!!


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 13-12-2005 à 11:56:49    

J'ai bien inclu le math.h ;)

Reply

Marsh Posté le 13-12-2005 à 12:06:34    

Déjà, tu peux oublier putnbr(), qui n'est pas standard. Plus encore, une recherche sous Google ne me retourne rien, et je n'ai pas compris ta définition.
 
Ensuite, si ça compile et, plus important, si ça link, c'est que c'est ok de ce côté (l'erreur de débutant avec math.h, c'est d'oublier l'option -lm pour inclure la bibliothèque durant l'édition de lien).
 
Reste une erreur soit de formule, soit de valeurs des variables utilisées.
Pour la formule, encore là ça va, mais tu n'es pas obligé de mettre autant de parenthèses. C'est pas du LISP ;)
En aérant on améliore la lisibilité, et donc on trace plus facilement les erreurs :

printf("%lf  %lf\n", Xa*cos(r) - Ya*sin(r), Xa*sin(r) + Ya*cos(r));


 
Ensuite je ne saurais pas te dire si cette formule est correcte ou non, mais si elle te semble bien, essaie de nous envoyer les définitions et initialisations des variables Xa, Ya et r, qu'on voit un peu à quoi ça ressemble.

Reply

Marsh Posté le 13-12-2005 à 13:06:12    

Salut Elmoricq j'ai bien compiler avec -lm
 
Et pour les valeur :
 
Xa = 1;
Ya = 1;
 
Et pour une rotation de 274 je dois obtenir :
 
Xa' = 1.067
Ya' = -0.9278
 
Pour ma part avec cette formule j'obtient :
 
Xa' = -0.146756
Ya' = -1.406578 :(

Reply

Marsh Posté le 13-12-2005 à 13:16:16    

Ca marcherait mieux si tu lui donnais l'angle en radians :o
 
 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
#define PI 3.14159
 
int main(void)
{
    double X = 1.0, Y = 1.0;
    double angle = 274 * PI / 180;
 
    printf("%f, %f\n",  
            X*cos(angle) - Y*sin(angle),  
            X*sin(angle) + Y*cos(angle));
     
    return EXIT_SUCCESS;
}


 
 

$ gcc -Wall -ansi -pedantic -lm -O2 test.c
$ a.out
1.067317, -0.927812


Message édité par Elmoricq le 13-12-2005 à 13:20:26
Reply

Marsh Posté le 13-12-2005 à 13:22:31    

raaaaaaaaaaaaaaaah oui c'est vrai c'est en radian merci beaucoup Elmoricq ;) :)

Reply

Marsh Posté le 13-12-2005 à 13:27:46    

Arf et ca marche toi? car moi ca me change un peu mais ca me donne :
 
Xa' = 0.103159
Ya' = -1.410446

Reply

Marsh Posté le 13-12-2005 à 13:39:07    

mouloud51 a écrit :

Arf et ca marche toi? car moi ca me change un peu mais ca me donne


 
Je t'ai posté un mini-source d'exemple, avec l'output qui va avec.

Reply

Marsh Posté le 13-12-2005 à 13:44:10    

Oui j'ai bien transformer mon angle et defini PI pourtant.... Ca peut venir de ma ligne de compilaqtion? Moi je compile seulement avec ma lib et avec -lm

Reply

Marsh Posté le 13-12-2005 à 13:46:35    

Ok c'est bon j'ai trouve le delire : c'est que j'avais declarer l'angle en int alors que je dois renvoyer un double ;)
 
Merci encore a toi Elmoricq

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed