om1908
Messages postés4Date d'inscriptionmercredi 2 février 2011StatutMembreDernière intervention11 mars 2011
-
16 févr. 2011 à 11:47
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 2013
-
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();
pop70
Messages postés181Date d'inscriptionmardi 6 avril 2010StatutMembreDernière intervention 7 janvier 201210 16 févr. 2011 à 14:02
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°.
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
}
om1908
Messages postés4Date d'inscriptionmercredi 2 février 2011StatutMembreDernière intervention11 mars 2011 16 févr. 2011 à 20:49
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
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 10 mars 2011 à 17:37
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 11 mars 2011 à 21:46
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 ;)