Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2370 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Afficher un cosinus ou sinus

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Afficher un cosinus ou sinus

n°1262909
mouloud51
Posté le 09-12-2005 à 17:58:09  profilanswer
 

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  ;)

mood
Publicité
Posté le 09-12-2005 à 17:58:09  profilanswer
 

n°1262912
Profil sup​primé
Posté le 09-12-2005 à 18:00:56  answer
 

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
n°1262916
fra0
Posté le 09-12-2005 à 18:03:33  profilanswer
 

ben ça devrait pas

n°1262917
mouloud51
Posté le 09-12-2005 à 18:06:45  profilanswer
 

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** :(

n°1262920
mouloud51
Posté le 09-12-2005 à 18:10:08  profilanswer
 

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 ;)

n°1262922
Profil sup​primé
Posté le 09-12-2005 à 18:12:06  answer
 

fra0 a écrit :

ben ça devrait pas


 
Ah, pourquoi ?

n°1262929
fra0
Posté le 09-12-2005 à 18:19:32  profilanswer
 

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

n°1262936
Profil sup​primé
Posté le 09-12-2005 à 18:26:24  answer
 

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:

n°1262944
Emmanuel D​elahaye
C is a sharp tool
Posté le 09-12-2005 à 18:29:15  profilanswer
 

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/
n°1263001
fra0
Posté le 09-12-2005 à 19:08:20  profilanswer
 

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

mood
Publicité
Posté le 09-12-2005 à 19:08:20  profilanswer
 

n°1263006
Emmanuel D​elahaye
C is a sharp tool
Posté le 09-12-2005 à 19:12:00  profilanswer
 

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/
n°1263015
fra0
Posté le 09-12-2005 à 19:17:27  profilanswer
 

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

n°1263462
Sve@r
Posté le 10-12-2005 à 09:59:12  profilanswer
 

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.
n°1263480
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-12-2005 à 10:59:35  profilanswer
 

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/
n°1265316
mouloud51
Posté le 13-12-2005 à 11:13:22  profilanswer
 

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??

n°1265344
Sve@r
Posté le 13-12-2005 à 11:40:39  profilanswer
 

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.
n°1265356
mouloud51
Posté le 13-12-2005 à 11:56:49  profilanswer
 

J'ai bien inclu le math.h ;)

n°1265373
Elmoricq
Modérateur
Posté le 13-12-2005 à 12:06:34  profilanswer
 

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.

n°1265423
mouloud51
Posté le 13-12-2005 à 13:06:12  profilanswer
 

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 :(

n°1265431
Elmoricq
Modérateur
Posté le 13-12-2005 à 13:16:16  profilanswer
 

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
n°1265434
mouloud51
Posté le 13-12-2005 à 13:22:31  profilanswer
 

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

n°1265439
mouloud51
Posté le 13-12-2005 à 13:27:46  profilanswer
 

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

n°1265449
Elmoricq
Modérateur
Posté le 13-12-2005 à 13:39:07  profilanswer
 

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.

n°1265452
mouloud51
Posté le 13-12-2005 à 13:44:10  profilanswer
 

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

n°1265456
mouloud51
Posté le 13-12-2005 à 13:46:35  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Afficher un cosinus ou sinus

 

Sujets relatifs
Afficher plusieur fois les résultats d'une boucle[VBS] afficher l'animation de copie de fichier - [résolu]
Afficher le javadoc ds Eclipse avec ctrl + espaceAfficher les données d'un tableau avec while
Afficher une image en la peignant[VS 2003] Comment afficher les erreurs de codage en live (cf Eclipse)
Afficher un caractere d'aprés son code ASCIIafficher un caractére entrez par l'utilisateur
[VBA] afficher un graphique dans un "form"[JS] afficher/masquer : mon_tableau has no properties
Plus de sujets relatifs à : [C] Afficher un cosinus ou sinus


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR