Trouver rapport le plus proche d'un rapport souhaité

Résolu
cococo84 Messages postés 72 Date d'inscription mercredi 21 septembre 2005 Statut Membre Dernière intervention 13 janvier 2006 - 17 nov. 2005 à 11:03
cococo84 Messages postés 72 Date d'inscription mercredi 21 septembre 2005 Statut Membre Dernière intervention 13 janvier 2006 - 18 nov. 2005 à 16:16
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

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
18 nov. 2005 à 15:50
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
3
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
17 nov. 2005 à 12:36
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
0
cococo84 Messages postés 72 Date d'inscription mercredi 21 septembre 2005 Statut Membre Dernière intervention 13 janvier 2006
17 nov. 2005 à 14:02
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?
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
17 nov. 2005 à 15:05
Ca marche aussi, le résultat est 919 et 100 !!

Amicalement, SharpMao
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cococo84 Messages postés 72 Date d'inscription mercredi 21 septembre 2005 Statut Membre Dernière intervention 13 janvier 2006
18 nov. 2005 à 09:03
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
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
18 nov. 2005 à 11:56
Proche avec quelle marge ??

Amicalement, SharpMao
0
cococo84 Messages postés 72 Date d'inscription mercredi 21 septembre 2005 Statut Membre Dernière intervention 13 janvier 2006
18 nov. 2005 à 15:17
avec une marge de + ou - 5%
mais jimagine que ce nè pas toujours possible!!
0
cococo84 Messages postés 72 Date d'inscription mercredi 21 septembre 2005 Statut Membre Dernière intervention 13 janvier 2006
18 nov. 2005 à 16:16
ouais je v faire com ca,merci à toi pour tous tes conseils
0
Rejoignez-nous