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

  FORUM HardWare.fr
  Programmation
  C++

  C++ (cosinus, sinus)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C++ (cosinus, sinus)

n°1612428
Jacknife_v​2
Lens forever :-D
Posté le 17-09-2007 à 21:27:06  profilanswer
 

Voila je dois créer un programme qui affiche un menu (cosinus, sinus, tangente, cotangente) et qui selon le choix, je dois une valeur d'un angle et celui çi me renvoit la valeur.
 
Donc tout ce passe bien pour les angles simples on va dire genre si je fais cos 60° = 0.5
 
Par contre si je fais cos  90° je trouve une valeur completement :pt1cable:  
 
voici mon code, si quelqu'un pourrait m'aider ça serait sympa, Merci.
 
#include <cstdlib>
#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <iostream>
 
using namespace std;
#define M_PI  3.14159265358979323846
int main(int argc, char *argv[])
{
    cout <<"\t\tCALCULS TRIGONOMETRIQUES";
     
    int a;
    float b;
     
    cout <<"\n\n1.Cosinus";
    cout <<"\n2.Sinus";
    cout <<"\n3.Tangente";
    cout <<"\n4.Cotangente";
     
    cout <<"\n\nEntrer votre choix (1 a 4 puis valider)";
    cin >> a;
     
    switch(a)
    {
       case 1:
            if (a > 4)
                cout << a <<" est un choix incorrect";
            else
                cout <<"Donner un angle entre 0 et 360 degres (puis valider) ";
                cin >> b;
                 
            if ( b > 360)
               cout << b <<" degres est une valeur incorrecte (entre 0 et 360) ";
            else
                cout << cos(b * M_PI / 180);
                 
       break;
       
       case 2:
            if (a > 4)
                cout << a <<" est un choix incorrect";
            else
                cout <<"Donner un angle entre 0 et 360 degres (puis valider) ";
                cin >> b;
                 
            if ( b > 360)
               cout << b <<" degres est une valeur incorrecte (entre 0 et 360) ";
            else
                cout << sin(b * M_PI / 180);
       break;
       
       case 3:
            if (a > 4)
                cout << a <<" est un choix incorrect";
            else
                cout <<"Donner un angle entre 0 et 360 degres (puis valider) ";
                cin >> b;
                 
            if ( b > 360)
               cout << b <<" degres est une valeur incorrecte (entre 0 et 360) ";
            else
                cout << tan(b * M_PI / 180);
       break;
       
       case 4:
            if (a > 4)
                cout << a <<" est un choix incorrect";
            else
                cout <<"Donner un angle entre 0 et 360 degres (puis valider) ";
                cin >> b;
                 
            if ( b > 360)
               cout << b <<" degres est une valeur incorrecte (entre 0 et 360) ";
            else
                cout << 1/tan(b * M_PI / 180);
       default:
                cout <<"\n\nChoix invalide";
       break;
    }      
           
    getch();
    system("\n\nPAUSE" );
    return EXIT_SUCCESS;
}

mood
Publicité
Posté le 17-09-2007 à 21:27:06  profilanswer
 

n°1612470
Ace17
Posté le 18-09-2007 à 00:11:50  profilanswer
 

- Deja tu peux virer tes if(a > 4), ton programme passe toujours dans la branche else.
- Ensuite, edite ton message et entoure ton code de balises "code", ca sera plus lisible pour tout le monde :hello:
- Et pour finir, quelle est la valeur soi disant aberrante que tu obtiens quand tu entres 90 degres ?

n°1612525
bjone
Insert booze to continue
Posté le 18-09-2007 à 10:45:33  profilanswer
 

bah si tu fais cstdlib, vaudrait mieux cstdio, cmath....
 
réorganise l'entrée et le test de l'entrée en :
 
do {
  cout<<....
  cin>>a;
} while( a pas bon );
 
do {
  cout<<...
  cin>>b;
} while( b pas bon );
 
float result;
switch( a )
{
   ...:
   result  =  
}
 
cout << result ...
 
il est généralement judicieux de découpler entrée/vérification, traitement, sortie.

n°1612570
olivthill
Posté le 18-09-2007 à 13:11:16  profilanswer
 

Citation :

float b;

Il vaut mieux utiliser double que float.

Citation :

cout << cos(b * M_PI / 180);

Il faut écrire 180.0 ou caster 180, sinon la division s'effectue avec un entier pour le résultat intermédiaire.

n°1612749
Jacknife_v​2
Lens forever :-D
Posté le 18-09-2007 à 19:57:45  profilanswer
 

Merci, grâce a vos conseil ça marche :)

n°1612965
ptitchep
Posté le 19-09-2007 à 13:15:22  profilanswer
 

Tu vérifies si ton angle est supérieur à 360, mais pas s'il est inférieur à 0?
En fait il vaudrait mieux faire l'inverse et faire un modulo 360 non?
361° <=> 1°
 

Code :
  1. cin>>b;
  2. if ( b < 0)
  3.          cout << b <<" degres est une valeur incorrecte ( >=0) ";
  4. else
  5. {
  6.         b=b%360;
  7.         ...
  8. ...


---------------
deluser --remove-home ptitchep
n°1613122
vietcoder
Posté le 19-09-2007 à 17:20:18  profilanswer
 

laisse tomber tous les if, et passe par un modulo, bcp plus joli à mon gout.
 
En plus je vois pas pourquoi tu ne peux pas me donner cos de l'angle 4345345 ! :) cette valeur existe ! :p

n°1659922
gofio79
A l'aide...
Posté le 18-12-2007 à 14:09:58  profilanswer
 

Moi je voudrai savoir comment faire pour calculer dans un programme en C++ une tangente hyperbolique d'un nombre complexe et aprè vérifier si l'angle est bon par rapport au sinus et cosinus.

n°1660192
Joel F
Real men use unique_ptr
Posté le 18-12-2007 à 19:06:20  profilanswer
 

boost::math contient ce genre de fonction.

n°1664535
jesus_chri​st
votre nouveau dieu
Posté le 01-01-2008 à 23:03:19  profilanswer
 

olivthill a écrit :

Il faut écrire 180.0 ou caster 180, sinon la division s'effectue avec un entier pour le résultat intermédiaire.


 
Non
b * M_PI / 180
pas besoin de cast puisque M_PI est un double.


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

  C++ (cosinus, sinus)

 

Sujets relatifs
[C#] [Résolu] Comment communiquer avec une dll c++[C] Des accolades "just pour le fun" ?
cosinus des données d'un tableautracé un sinus
[C] Afficher un cosinus ou sinus[algo] approximation du sinus : on va jusqu'a quel ordre ?
Calcul du SINUS à partir du développement limité sous VB?Sinus, cosinus et autres fonctionstrigo
Plus de sujets relatifs à : C++ (cosinus, sinus)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)