C++ (cosinus, sinus)

C++ (cosinus, sinus) - C++ - Programmation

Marsh Posté le 17-09-2007 à 21:27:06    

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

Reply

Marsh Posté le 17-09-2007 à 21:27:06   

Reply

Marsh Posté le 18-09-2007 à 00:11:50    

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

Reply

Marsh Posté le 18-09-2007 à 10:45:33    

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.

Reply

Marsh Posté le 18-09-2007 à 13:11:16    

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.

Reply

Marsh Posté le 18-09-2007 à 19:57:45    

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

Reply

Marsh Posté le 19-09-2007 à 13:15:22    

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
Reply

Marsh Posté le 19-09-2007 à 17:20:18    

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

Reply

Marsh Posté le 18-12-2007 à 14:09:58    

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.

Reply

Marsh Posté le 18-12-2007 à 19:06:20    

boost::math contient ce genre de fonction.

Reply

Marsh Posté le 01-01-2008 à 23:03:19    

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.

Reply

Sujets relatifs:

Leave a Replay

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