Doute sur la boucle du Tant que

Résolu
littlebonbon Messages postés 9 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 15 mai 2008 - 15 mai 2008 à 16:47
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 - 16 mai 2008 à 16:53
bonjour,
J'aimerais un petit coup de main par raport a la notion du tant que.
Je réalise un programme du jeu 421; dans mon programme je souhaite que le jeu continue tant que la personne n'a pas atteint le 421 , mais je ne sais pas comment le traduire...
J'ai essayé en écrivant :

while (TR[1]<>4) and(TR[2]<>2) and (TR[3]<>1)do
    begin
      for I := 1 to 3 do
          begin
            writeln('voulez-vous relancer le des',I,'?taper 1 pour garder ou 2 pour relancer');
            readln(choix);
            if choix= 1 then
              begin
              TR[I]:= TD[I];
              end;



            if choix=2 then
              begin
              TR[I]:= random(6)+1;
              end;
          end;



    writeln('votre nouveau jeu est');
      for I := 1 to 3 do
        begin
      writeln(TR[I]);
        end;
end;


Il prend en compte ma demande mais dès que j'obtient un des 3 chiffres , il s'arrête.. Comment faire pour que le jeu ne s'arrete que une fois le 421 obtenu?
Merci de m'éclairer

*littlebonbon*

5 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
15 mai 2008 à 17:26
repeat
...
until [TR[1], TR[2], TR[3]] = [1,2,4];


repeter jusqu'a ce que l'ensemble [TR] contient les même element que l'ensemble [1,2,4]

[1,2,4] = [1,2,4]

[1,2,4] = [1,4,2]

[1,2,4] = [2,1,4]

[1,2,4] = [2,4,1]

[1,2,4] = [4,1,2]

[1,2,4] = [4,2,1]

ce qui evite de faire des conditions trop complexe.

<hr size="2" width="100%" />
3
littlebonbon Messages postés 9 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 15 mai 2008
15 mai 2008 à 20:17
Merci f0xi ;)
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
15 mai 2008 à 20:44
Attention aussi à la logique de la... logique booléenne !

while (TR[1]<>4) and (TR[2]<>2) and (TR[3]<>1)do

Si TR (4, 0, 0) alors (TR[1] 4) = False et donc tu sors de ta boucle ! D'où l'effet que tu observes !
Il faudrait donc mettre

while (TR[1] <> 4) or (TR[2] <> 2) or (TR[3] <> 1) do

ou bien (ce qui est équivalent) :

while not ((TR[1] = 4) and (TR[2] = 2) and (TR[3] = 1)) do

Petite piqure de rappel donc :
not (A and B) = not A or not B
not (A or B) = not A and not B

La solution de f0xi est à préconiser si tu veux tester les cas sans tenir compte de l'ordre d'apparition des chiffres, ce qui est la cas au 421, mais je te cite ceci car tu risques fort bien d'en avoir besoin tôt ou tard...

A+
0
littlebonbon Messages postés 9 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 15 mai 2008
15 mai 2008 à 21:04
florenth > ce que tu dis n'est pas faux mais je n'ai pas montré tout ce que j'ai déjà écris.. j'ai démarré mon programme avec randomise codé de facon a ce que je ne tombe jamais sur 0.
Ce pendant ta réfléxion m'a fait penser au cas ou le joueur dit autre chose que 1 ou 2 qu'il faut que je réalise ^^.

Une petite question , quand je fais l'exe, tout ce passe bien sauf que quand je demande à garder la valeur, des fois elle n'est pas gardée...et d'autre fois elle est conservée.. comment l'expliquer?
merci beaucoup pour vos réponses.
0

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

Posez votre question
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
16 mai 2008 à 16:53
Mon exemple avec (4,0,0) reste tout à fait valable avec n'importe quoi d'autre que des zéros puisque dans ton code original, c'est le 4 qui fait tout foirer.

Pour ton autre problème, aucune idée.
0
Rejoignez-nous