Trouver rapport le plus proche d'un rapport souhaité [Résolu]

Signaler
Messages postés
72
Date d'inscription
mercredi 21 septembre 2005
Statut
Membre
Dernière intervention
13 janvier 2006
-
Messages postés
72
Date d'inscription
mercredi 21 septembre 2005
Statut
Membre
Dernière intervention
13 janvier 2006
-
bonjour,
j'ai un problème à soumettre : on entre dans un numericUpDown une valeur que j'ai appelé rapp1.ensuite j'ai un rapport appelé rapp2 obtenu à partir de Z2/Z1 (Z1 et Z2 sont deux numericUpDown).Z1 et Z2 sont obligatoirement ts les deux des entiers.rapp1 et rapp2 sont des réels.
je souhaiterais obtenir de nouvelles valeurs de Z1 et Z2 pour que rapp2 soit le plus proche possible de rapp1
c un peu compliqué à comprendre mais jspr que qulqu'un peut m'aider.
merci d'avance

8 réponses

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
63
Pour moi, je ne vois que la force brute :

Tu prends tes min et max de Z1 et Z2, deux boucles for imbriquées, et tu gardes le rapport le plus proche de ce que tu veux.

Amicalement, SharpMao
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
63
Hello,

Si j'ai bien compris ce que tu veux, tu donnes un nombre, par exemple 12.45 et ça te retourne 249 et 20 car 249/20 = 12.45.
Voici une solution, ce n'est peut-être pas la plus élégante, mais elle fonctionne :


decimal rapp1 = numericUpDown1.Value;


decimal Z1= rapp1;


decimal Z2=1;






//Pour trouver une puissance de 10 Z2 tel que Z1/Z2 = rapp1


while (Decimal.Truncate(Z1)!=Z1)


{


Z1 *=10;


Z2 *=10;


}






decimal a = Z1;


decimal b = Z2;






//Pour trouver a, le plus grand diviseur commun.


while(b!=0)


{


decimal c=a%b;


a = b;


b = c;


}




Z1 /=a;


Z2 /=a;






//Et voilà!!!
MessageBox.Show("Z1 " + Z1 + "\nZ2 " + Z2);

Amicalement, SharpMao
Messages postés
72
Date d'inscription
mercredi 21 septembre 2005
Statut
Membre
Dernière intervention
13 janvier 2006

et ca marche pour tout rapp1??
par ex si rapp1 = 9,19,esk'il est possible de trouver des entiers Z1 et Z2 ayant ce diviseur commun?
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
63
Ca marche aussi, le résultat est 919 et 100 !!

Amicalement, SharpMao
Messages postés
72
Date d'inscription
mercredi 21 septembre 2005
Statut
Membre
Dernière intervention
13 janvier 2006

le problème c ke Z1 et Z2 doivent etre au maximum proche des valeurs saisies la première fois.dc en fait rapp2 n'ai pas forcément égal à rapp1.
par ex, si je tape rapp1=9,19 et Z1=26 et Z2=234
on obtient rapp2=Z2/Z1=9
or je voudrais que rapp2 se rapproche au maximum de rapp1 sans forcément etre égal et que les nouveaux Z1 et Z2 soient proches des anciens.
ds ce cas, par exemple les nouveaux Z1 et Z2 sont Z1=27 et Z2=248 d'où rapp2=9,185

je sais que c un peu compliqué à comprendre mais je bute vraiment sur la facon de faire.
merci à toi SharpMao
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
63
Proche avec quelle marge ??

Amicalement, SharpMao
Messages postés
72
Date d'inscription
mercredi 21 septembre 2005
Statut
Membre
Dernière intervention
13 janvier 2006

avec une marge de + ou - 5%
mais jimagine que ce nè pas toujours possible!!
Messages postés
72
Date d'inscription
mercredi 21 septembre 2005
Statut
Membre
Dernière intervention
13 janvier 2006

ouais je v faire com ca,merci à toi pour tous tes conseils