cs_domxaline
Messages postés327Date d'inscriptionjeudi 21 août 2008StatutMembreDernière intervention10 mai 20122 13 juil. 2009 à 08:57
merci beacoup
mais en voyant ce prg, qui est très compliqué pour moI!!
veuillez m'expliquez en details s'il vous plaît
a=10; b=20
(a20)?b%3:b/4)):a==10)?a/2:a%3);
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 13 juil. 2009 à 09:50
Ouch, voilà exactement ce qu'il ne faut pas faire avec un opérateur binaire : c'est illisible !!
Ce qu'il faut faire pour comprendre un truc comme cà, c'est de décomposer l'expression :
tu pars avec :
(a20)?b%3:b/4)):a==10)?a/2:a%3);
Ce qui donne :
if (a < b) {
((b<20)?b*2: ((b>20)?b%3:b/4))
} else {
a==10)?a/2:a%3)
}
Ce qui donne :
if (a < b) {
if (b < 20) {
b*2
} else {
((b>20)?b%3:b/4))
}
} else {
if (a==10) {
a/2
} else {
a%3
}
}
Ce qui donne :
if (a < b) {
if (b < 20) {
b*2
} else {
if (b > 20) {
b%3
} else {
b/4
}
}
} else {
if (a==10) {
a/2
} else {
a%3
}
}
Donc au final :
int a = 10;
int b = 20;
int resultat = 0;
if (a < b) {
if (b < 20) {
resultat = b * 2;
} else {
if (b > 20) {
resultat = b % 3;
} else {
resultat = b / 4;
}
}
} else {
if (a==10) {
resultat = a / 2;
} else {
resultat = a % 3;
}
}
C'est quand même bien plus compréhensible qu'un tas d'expressions ternaires posées l'une à côté de l'autre !
cs_domxaline
Messages postés327Date d'inscriptionjeudi 21 août 2008StatutMembreDernière intervention10 mai 20122 13 juil. 2009 à 15:59
Bonjour,
j'ai un doute sur ce prg
but de ce prg est pris au hasard un nb entier entre 0 et 50 avec la condition que l'un doit forcement être double de l'autre
public class moi
{
public static void main (String [] args)
{
int a, b;
do
{
a = (int)(Math.random() * 51);
b = (int)(Math.random() * 51);
} while( !(a 2*b) && !(b 2*a) ); System.out.println("valeur de a " + a + " et valeur de b " + b);
}
}
la ligne suivante while( !(a 2*b) && !(b 2*a) );
est un peu compliqué pour moi;il n'y a pas d'autre façon ecrire cette ligne
après que je compris cette ligne indique
en tant que,
contraire a==2 fois b et contraire b==2 fois a
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 13 juil. 2009 à 16:42
Ben là le code me semble assez simple, si ce n'est que tu peux remplacer le not en inversant l'opérateur d'égalité :
Avant :
while( !(a 2*b) && !(b 2*a) );
Après :
while( (a != 2*b) && (b != 2*a) );
Mais pour ce genre de chose, il vaut mieux faire (à mon avis) 1 seul random : pour a et ensuite, selon si a est inférieur à 25, calculer la valeur de b (en utilisant l'opérateur ternaire ;)) :
public static void main (String [] args)
{
int a = (int)(Math.random() * 51);
int b = (a < 25) ? (a * 2) : (a / 2);
}
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 13 juil. 2009 à 17:29
Ben à la vue de ton random...
Vu qu'il faut que soit a b * 2 soit b a * 2, alors il suffit que si a est inférieur à la moitié de la plage de valeur, b est égal à son double, et inversement.