Boucle tant que qui se fini a chaque fois.

Résolu/Fermé
yann_214 Messages postés 11 Date d'inscription samedi 1 décembre 2012 Statut Membre Dernière intervention 12 décembre 2012 - 5 déc. 2012 à 19:55
yann_214 Messages postés 11 Date d'inscription samedi 1 décembre 2012 Statut Membre Dernière intervention 12 décembre 2012 - 6 déc. 2012 à 17:17
Bonjour,
Je suis sur un TP de programmation avec l'énoncé suivant :
Un jeu nécessitant deux joueurs tire une carte au hasard puis tire un joueur au hasard pour lui demander si la carte qui sortira après ( au hasard) sera plus ou moins grande.
Ayant répondu , si c'est juste alors on passe a l'autre et ainsi de suite jusqu'a ce qu'un perde.

Mon problème est que j'ai fait une boucle tant que avec un booléen, qui apparement est toujours a l'état de condition de sortie ...

Voici la bete :


program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils,
Unit2 in 'Unit2.pas';
var
NumCarte1 : integer;
AttCarte1 : integer;
NumCarte2 : integer;
AttCarte2 : integer;
Rep : integer;
perdu : boolean;

begin
randomize;
perdu:=false;
while perdu<>true do
begin
TirageCarte();
NumCarte1 :=TirageCarte.num;
AttCarte1 :=TirageCarte.attribu;
writeln('C'est au Joueur ',TirageJoueur,' de jouer.');
write('La carte tirée est le : ');
AffichageCarte1(NumCarte1,AttCarte1);
write('La prochaine carte sera-t-elle plus(1) ou moins(2) grande que ');
AffichageCarte1(NumCarte1,AttCarte1);
readln(Rep);
TirageCarte();
NumCarte2 :=TirageCarte.num;
AttCarte2 :=TirageCarte.attribu;
write('La carte tirée est le : ');
AffichageCarte1(NumCarte2,AttCarte2);
if Rep=1 then
begin
if NumCarte1<NumCarte2 then
writeln('gagne')
else
writeln('perdu');
perdu:=true;
end
else
begin
if Rep=2 then
begin
if NumCarte1>NumCarte2 then
writeln('gagne')
else
writeln('perdu');
perdu:=true;
end;
end;

end;
readln;
end.


et voici l'unit2 :

unit Unit2;

interface
type
Carte=record
attribu : 1 .. 4;
num : 1 .. 13 ;
end;
function TirageCarte() : Carte;
function TirageJoueur() : integer;
procedure AffichageCarte1(NumCarte1,AttCarte1 : integer);

implementation
function TirageCarte() : Carte;
begin
TirageCarte.attribu:=random(4)+1;
TirageCarte.num:=random(13)+1;
end;
function TirageJoueur() : integer;
begin
TirageJoueur:=random(2)+1;
end;
procedure AffichageCarte1(NumCarte1,AttCarte1 : integer);
begin
case NumCarte1 of
1 .. 10 : write(NumCarte1);
11 : write('valet');
12 : write('dame');
13 : write('roi');
end;
write(' de ' );
case AttCarte1 of
1 : writeln(' Coeur');
2 : writeln(' Pique');
3 : writeln(' Treffle');
4 : writeln(' Carreaux');
end;

end;
procedure AffichageCarte2(NumCarte2,AttCarte2 : integer);
begin
case NumCarte2 of
1 .. 10 : write(NumCarte2);
11 : write('valet');
12 : write('dame');
13 : write('roi');
end;
write(' de ' );
case AttCarte2 of
1 : writeln(' Coeur');
2 : writeln(' Pique');
3 : writeln(' Treffle');
4 : writeln(' Carreaux');
end;

end;
end.

Merci aux courageux(ses) qui oseront m'aider !


2 réponses

[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
Modifié par [Dal] le 6/12/2012 à 12:25
Salut yann_214,

Dans un bloc if else, si ce qui doit être exécuté dépasse une ligne, tu dois mettre les lignes en question entre des begin et end

Tes else après les comparaisons de NumCarte1 et NumCarte2 devraient se présenter comme cela :

else    
  begin    
     writeln('perdu');    
     perdu := true;    
  end;


Autrement, le compilateur comprend que le else ne comporte qu'une seule ligne et que "perdu:=true;" est en dehors du if (c'est pourquoi il est toujours exécuté dans ton code ci-dessus).


Dal
0
yann_214 Messages postés 11 Date d'inscription samedi 1 décembre 2012 Statut Membre Dernière intervention 12 décembre 2012
6 déc. 2012 à 17:17
D'accord, merci de ta réponse !
Ca m'aide bpc !
0