problème de comptage

problème de comptage - Delphi/Pascal - Programmation

Marsh Posté le 11-03-2007 à 11:39:00    

voici mon programme  
j'ai mis c:=0 lorsque j appuie sur le bouton ''BtnNj'' et j'ai mis c:=1 lorsque je vérifie ma réponse en appuyant sur le bouton ''BtnVr"".
je veu que le nombre de tentative ''c'' s'affiche dans un label,  
j'ai mis  
if M=x then
     begin
      LbRt.Caption:=IntToStr(c);
     end
mais il met met une valeur du genre 12405
 
voila le programme.

 
unit Unitdevin;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, jpeg, ExtCtrls;
 
type
  TForm1 = class(TForm)
    BtnNj: TButton;
    BtnLc: TButton;
    BtnQuitter: TButton;
    LbCm: TLabel;
    EditCm: TEdit;
    BtnVr: TButton;
    ListR: TListBox;
    Label1: TLabel;
    LbRt: TLabel;
    Image1: TImage;
    procedure BtnNjClick(Sender: TObject);
    procedure BtnLcClick(Sender: TObject);
    procedure BtnQuitterClick(Sender: TObject);
    procedure BtnVrClick(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;
 
var
  Form1: TForm1;
  var x:integer;
implementation
 
{$R *.DFM}
 
procedure TForm1.BtnNjClick(Sender: TObject);
var c:integer;
begin
     randomize;
     x:=random(100-0+1);
     ListR.Items.Clear();//éfface la listbox a chaque fois que l'on recré un chiffre
     LbRt.Caption:=('');
     c:=0;
end;
procedure TForm1.BtnLcClick(Sender: TObject);
begin
     ShowMessage('le nombre mystérieux est '+IntToStr(x));
end;
procedure TForm1.BtnQuitterClick(Sender: TObject);
begin
     if(messageDlg('voulez-vous vraiment quitter le jeu?',mtconfirmation,[mbYes,mbNo],0)=mrYes)then
     close;
end;
procedure TForm1.BtnVrClick(Sender: TObject);
var m,NbrLignes,i,c:integer;
var ligne:string;
var trouve:boolean;
begin
     M:=StrToInt(EditCm.Text);
     c:=c+1;
     begin;
     if (M<0)or(M>100)then
        begin
        ShowMessage('le chiffre mystérieux est compris entre 0 et 100');
        end;
     if M=x then
        begin
        LbRt.Caption:=IntToStr(c);
        end
     else
      if M>x then
         begin
         ligne:=''+EditCm.Text+''+ ' est trop grand';
         NbrLignes:=ListR.Items.Count;
         Trouve:=False;
         for i:=0 to(NbrLignes-1)do
          begin
          if(Ligne=ListR.Items[i])Then
          Trouve:=True
          end;
          if(trouve=False)then
          ListR.Items.Add(Ligne);
          end
      else
         begin
         ligne:=''+EditCm.Text+''+ ' est trop petit';
         ListR.Items.Add(ligne);
         end;
 
      EditCm.Text:='';//pour éffacer le edite
     end;
end;
end.

que dois faire pour résoudre ce problème??merci.

Reply

Marsh Posté le 11-03-2007 à 11:39:00   

Reply

Marsh Posté le 11-03-2007 à 12:24:40    

Salut
 
normal que t'ai des valeurs bizarre pour le programme tu n'initialise pas c
 
comme je te disait dans ton précédent post (je me suis planté d'ailleurs...), c doit être déclaré pour l'ensemble des procédures
 
t'a beau faire C:=0; dans procedure BtnNjClick, ce n'est valable QUE pour cette procédure, et comme elle n'est pas initialisée dans BtnVrClick, il te donne n'importe quoi  :sarcastic:  
 
tu l'a pourtant fait pour x
 
pour être utilisée dans toute l'appli :
 
 
 
unit Unitdevin;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, jpeg, ExtCtrls;
 
type
  TForm1 = class(TForm)
    BtnNj: TButton;
    BtnLc: TButton;
    BtnQuitter: TButton;
    LbCm: TLabel;
    EditCm: TEdit;
    BtnVr: TButton;
    ListR: TListBox;
    Label1: TLabel;
    LbRt: TLabel;
    Image1: TImage;
    procedure BtnNjClick(Sender: TObject);
    procedure BtnLcClick(Sender: TObject);
    procedure BtnQuitterClick(Sender: TObject);
    procedure BtnVrClick(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;
 
var
  Form1: TForm1;
  var x,c:integer;//------ICI------
 
 
implementation
 
{$R *.DFM}
 
procedure TForm1.BtnNjClick(Sender: TObject);
begin
     randomize;
     x:=random(100-0+1);
     ListR.Items.Clear();//éfface la listbox a chaque fois que l'on recré un chiffre
     LbRt.Caption:=('');
     c:=0;
end;
procedure TForm1.BtnLcClick(Sender: TObject);
begin
     ShowMessage('le nombre mystérieux est '+IntToStr(x));
end;
procedure TForm1.BtnQuitterClick(Sender: TObject);
begin
     if(messageDlg('voulez-vous vraiment quitter le jeu?',mtconfirmation,[mbYes,mbNo],0)=mrYes)then
     close;
end;
procedure TForm1.BtnVrClick(Sender: TObject);
var m,NbrLignes,i:integer;//pas de c
var ligne:string;
var trouve:boolean;
begin
     M:=StrToInt(EditCm.Text);
     c:=c+1;
     // pas besoin de begin /end pour faire juste un instruction
     if (M<0)or(M>100)then ShowMessage('le chiffre mystérieux est compris entre 0 et 100');
     if M=x then LbRt.Caption:=IntToStr(c)
     else
      if M>x then
         begin
         ligne:=''+EditCm.Text+''+ ' est trop grand';
         NbrLignes:=ListR.Items.Count;
         Trouve:=False;
         for i:=0 to(NbrLignes-1)do
          begin
          if(Ligne=ListR.Items[i])Then
          Trouve:=True
          end;
          if(trouve=False)then
          ListR.Items.Add(Ligne);
          end
      else
         begin
         ligne:=''+EditCm.Text+''+ ' est trop petit';
         ListR.Items.Add(ligne);
         end;
 
      EditCm.Text:='';//pour éffacer le edite
     
end;
end.


Message édité par Flagad'aware le 11-03-2007 à 12:31:59
Reply

Marsh Posté le 11-03-2007 à 13:11:35    

j'ai retiré c que j avais déclarer dans nouveau jeu et ca marche merci!


Message édité par tofgio le 11-03-2007 à 13:48:05
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed