Calculatrice C# probleme Math.tan [Résolu]

om1908 4 Messages postés mercredi 2 février 2011Date d'inscription 11 mars 2011 Dernière intervention - 16 févr. 2011 à 11:47 - Dernière réponse : cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention
- 11 mars 2011 à 21:46
Bonjour a tous , Je dois faire une calculette avec quelques fonctions comme sin , cos tan ,1/x

J'ai tout réalisé mais j'ai quelques prob pour tan

Donc je voudrai quand je tombe sur 90° ou 270° qu'il me fasse un test et m'affiche fonction incorecte mais je voudrais egalement que si on ajoute un tour au cercle trigo donc 90 ° ==> 450 ° ect ... il m'affiche également fonction incorect .

Pour ajouté un tour je devrais utilisé un modulo(%) mais comme j'utilise une varible double => 450.00 je dois divisé le nombre en sa partie entiere et sa partie décimal et faire le modulo sur la partie entiere mais la je bloque completement

Pouvez vous m'aider ?

Je publie le code que j'ai déja écrit :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace tp8ex1
{

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}

double nb1;
char operateur;
double nb2;


private void Form1_Load(object sender, EventArgs e)
{

}

private void button9_Click(object sender, EventArgs e)
{


textBox1.Text = (textBox1.Text + "1");




}

private void button6_Click(object sender, EventArgs e)
{
textBox1.Text = (textBox1.Text + "2");
}

private void button12_Click(object sender, EventArgs e)
{
textBox1.Text = (textBox1.Text + "3");
}

private void button10_Click(object sender, EventArgs e)
{
textBox1.Text = (textBox1.Text + "4");
}

private void button5_Click(object sender, EventArgs e)
{
textBox1.Text = (textBox1.Text + "5");
}

private void button3_Click(object sender, EventArgs e)
{
textBox1.Text = (textBox1.Text + "6");

}

private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = (textBox1.Text + "7");
}

private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = (textBox1.Text + "8");
}

private void button4_Click(object sender, EventArgs e)
{
textBox1.Text = (textBox1.Text + "9");
}

private void button7_Click(object sender, EventArgs e)
{
textBox1.Text = (textBox1.Text + "0");
}

private void button16_Click(object sender, EventArgs e)
{//bouton +
nb1 = Convert.ToDouble(textBox1.Text);
textBox1.Text = "";
operateur = '+';
}

private void button23_Click(object sender, EventArgs e)
{// bouton nb2 Convert.ToDouble(textBox1.Text) ;
switch(operateur)
{
case '+' : textBox1.Text = Convert.ToString(nb1 + nb2);
break;
case '-': textBox1.Text = Convert.ToString(nb1 - nb2);
break;
case '*': textBox1.Text = Convert.ToString(nb1 * nb2);
break;
case '/': textBox1.Text = Convert.ToString(nb1 / nb2);
break;


}
}

private void button13_Click(object sender, EventArgs e)
{//bouton -
nb1 = Convert.ToDouble(textBox1.Text);
textBox1.Text = " ";
operateur = '-';
}

private void button15_Click(object sender, EventArgs e)
{//bouton *
nb1 = Convert.ToDouble(textBox1.Text);
textBox1.Text = " ";
operateur = '*';
}

private void button11_Click(object sender, EventArgs e)
{// bouton /
nb1 = Convert.ToDouble(textBox1.Text);

textBox1.Text = " ";
operateur = '/';
}

private void button21_Click(object sender, EventArgs e)
{// bouton ==>
if (textBox1.Text.Length > 0)
{
textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
}
}

private void button22_Click(object sender, EventArgs e)
{// Bouton C
textBox1.Text = "";
}

private void button20_Click(object sender, EventArgs e)
{
//Bouton 1/X
nb1 = Convert.ToDouble(textBox1.Text);

textBox1.Text = Convert.ToString(1 / nb1);
}

private void button14_Click(object sender, EventArgs e)
{
//bouton ,
textBox1.Text = (textBox1.Text + ",");
}

private void button8_Click(object sender, EventArgs e)
{
//bouton -
textBox1.Text = (textBox1.Text + "-");
}

private void button17_Click(object sender, EventArgs e)
{
//bouton sin

nb1 = Convert.ToDouble(textBox1.Text);
nb1 = Math.Sin(Math.PI * nb1 / 180);
if (Math.Abs(nb1) < 0.000000000000001)
{
nb1 = 0;

}
textBox1.Text = Convert.ToString(Math.Sin(Math.PI * nb1 / 180));



}

private void button18_Click(object sender, EventArgs e)
{

//bouton cos
nb1 = Convert.ToDouble(textBox1.Text);
nb1 = Math.Cos(Math.PI * nb1 / 180);
if (Math.Abs(nb1) < 0.0000000000000001)
{
nb1 = 0;
}
textBox1.Text = Convert.ToString(nb1);

}

private void button19_Click(object sender, EventArgs e)
{
//bouton Tan


nb1 = Convert.ToDouble(textBox1.Text);
textBox1.Text = Convert.ToString(Math.Tan(Math.PI * nb1 / 180));
if (Math.Abs(nb1) < 0.000000000000001)
{
nb1 = 0;
}
if (nb1 == 90)
{
textBox1.Text = "incorecte";
}





}
}
}
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
pop70 181 Messages postés mardi 6 avril 2010Date d'inscription 7 janvier 2012 Dernière intervention - 16 févr. 2011 à 14:02
3
Merci
Par transtypage ça ne marche pas ?
D'ailleurs, je ne vois pas en quoi la virgule gène : tan (90.4°) existe.

Le but est de savoir si c'est un nombre multiple de 90°.
Pour cela il faut savoir si le nombre divisé par 90° est égal à la partie entière du nombre divisée par 90°.

En gros:

if ( (int)(nb1 / 90) == (angle / 90))
{
textBox1.Text = "Fonction incorrecte"; 
}


sinon, pour être sûr à 100% de ne pas avoir laissé passer une exception, on utilise les bloc try et catch

exemple
try
{
  nb1 = Math.Tan (nb1)  // On test
}
catch (Exeption exeption) // Ca ne bug pas si c'est pas possible
{
   textBox1.Text = "Fonction incorrecte"; // On affiche que c'est pas possible
}



C#rdialement,
Pop70

Merci pop70 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de pop70
om1908 4 Messages postés mercredi 2 février 2011Date d'inscription 11 mars 2011 Dernière intervention - 16 févr. 2011 à 20:49
0
Merci
Merci Pop70 Pour ta réponse , Je ne peux tester le code maintenant demain matin je le testerai

Mais par contre quand tu dis "D'ailleurs, je ne vois pas en quoi la virgule gène : tan (90.4°) existe."

enfait C'est parce que comme je veux faire un test sur 90° mais que j'ai déclarer nb1 comme un double donc 90.0 si je veux faire un test je dois séparé le 90 et le .0 ? C'est ce que mon prof ma dit mais j'ai très bien compris ce point la.

Merci en tt cas de ton aide , Je poste demain des que j'ai testé le code


Bien a toi
om1908
Commenter la réponse de om1908
om1908 4 Messages postés mercredi 2 février 2011Date d'inscription 11 mars 2011 Dernière intervention - 16 févr. 2011 à 20:54
0
Merci
Euh pas tres bien compris ce point la désolé
Commenter la réponse de om1908
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 10 mars 2011 à 17:37
0
Merci
Salut, je ne sais pas si tu es encore intéressé par une solution, mais la voilà quand même, alors fais pas la tête ><

Déjà, il faut faire ton test au tout début de ton évènement, sinon ton appel à la fonction tangente va lever une exception.

Maintenant, à quoi doit ressembler ce test. Première chose, rapporter ta valeur à l'ensemble [0;360], il te faut donc récupérer le reste de la division euclidienne de ta valeur par 360
double vnorm = (nb1 % 360.0d);

ensuite il te faut simplement vérifier que cette valeur est différente de 90 et 180 :
if ((vnorm 90.0d) || (vnorm 270.0d))
textBox1.Text = "t'as écris une ânerie";
else {
// je fais mon calcul de tangente
}


On dit souvent qu'il est déconseillé de faire des comparaison brut de pomme avec des double/float. En effet de telles variables passées à travers différentes opérations peuvent traîner des pouillèmes (ex. : 90.00000000000001). Mais si t'as pas exactement cette valeur la fonction tan ne va pas broncher, donc pourquoi s'en faire ? ^^

PS : la méthode des try-catch est la plus sûre, mais je suis vraiment pas fan de l'usage intensif de ces blocks. ça blinde le code, pour sûr, mais ça pourrit les perf.
Commenter la réponse de cs_jopop
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 10 mars 2011 à 17:39
0
Merci
edit : * différente de 90 et 270, mais vous m'aurez compris ;)
Commenter la réponse de cs_jopop
om1908 4 Messages postés mercredi 2 février 2011Date d'inscription 11 mars 2011 Dernière intervention - 11 mars 2011 à 16:40
0
Merci
Merci beaucoup Pour vos réponses , J'ai tester la solution de pop70 et sa fonctionne :) Je testerai la tienne aussi :) En tt cas merci beaucoup
Commenter la réponse de om1908
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 11 mars 2011 à 21:46
0
Merci
Si la réponse de pop te convient, t'embête pas avec la mienne ;)
Par contre note sa réponse comme "acceptée", pour que les gars avec le même problème qui passeraient par là sachent qu'ils y trouveront leur réponse ;)
Commenter la réponse de cs_jopop

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.