Boucle tant que qui se fini a chaque fois.
Résolu
yann_214
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
yann_214 Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
yann_214 Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
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 !
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 !
A voir également:
- Boucle tant que qui se fini a chaque fois.
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Je suis une chose que les garçons utilisent 2 fois par jour et les filles une fois dans leur vie - Forum Loisirs / Divertissements
- Je commence la nuit je finis le matin on me trouve deux fois dans l’année. qui suis-je reponse ✓ - Forum Loisirs / Divertissements
- Pc qui s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Faire une offre sur un lot vinted en tant que vendeur - Guide
2 réponses
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 :
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
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