Condition ternaire

cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 - 12 juil. 2009 à 21:01
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 - 13 juil. 2009 à 17:32
bonjour
quel qu'un aurait aimabilité de m' expliquer "condition ternaire" avec exemple
s'il vous plaît

12 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
12 juil. 2009 à 21:09
Salut,

Tu aurais pu trouver une explication et pleins d'exemple bien plus rapidement en cherchant sur google plutôt que de poser ta question sur un forum...

La condition ternaire marche comme suit :

valeurRetour = condition ? valeurSiVrai : valeurSiFaux;

Donc en gros :
String pair (nombre % 2 0) ? "pair" : "impair";
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
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);
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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 !
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
13 juil. 2009 à 10:15
merci beaucoup,vous êtes sympa
0

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

Posez votre question
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
13 juil. 2009 à 10:40
j'ai oublié quelques parenthes,est ce qu'il changera le resultat
correction est suivantes:
a=10; b=20
(a20)?b%3:b/4)):((a==10)?a/2:a%3);
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
13 juil. 2009 à 10:44
Non ca change rien
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
13 juil. 2009 à 10:54
merci beaucoup
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
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
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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);
}
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
13 juil. 2009 à 17:25
DARKSIDIOUS merci pour ta reponse
t'a trouvé où le <25 ?
a et b doit travailler entre 0 et 50
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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.
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
13 juil. 2009 à 17:32
ok ça marche
0
Rejoignez-nous