Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism Bruchrechentrainer programmieren...Hilfe?!?! (https://www.delphipraxis.net/70392-bruchrechentrainer-programmieren-hilfe.html)

Ypsilon 29. Mai 2006 17:57


Bruchrechentrainer programmieren...Hilfe?!?!
 
Hallo!

Also, erstmal zur Erklärung...ich bin Schülerin an einem Gymnasium und habe nun im 2ten HJ Informatik.
Wir sollen als Hausaufgabe ein Programm zur Übung von Bruchrechenarten schreiben,was ja ansich kein Problem darstellen sollte. ABER jetzt wo mein Programm soweit fertig ist tritt ein komisches Phänomen in Aktion :

1.Bei Betätigung des BtLeicht und darauf hin der Betätigung des BtPlus erscheint die Aufgabe wie gewünscht...Jedoch rechnet der Computer anstatt Bruch1 + Bruch2 Bruch1 - Bruch2 ....Wo habe ich mich hier verprogrammiert ?

2.Bei Betätigung des BtLeicht und darauf hin der Betätigung des BtMinus erscheint die Aufgabe wie gewünscht...Jedoch erkennt der PC nicht, dass die Nenner der Brüche gleich sind und subtrahiert diese als ob die Nenner verschieden wären...




BtMal,BtDurch auf Leicht sowie alle Bt's auf Mittel & Schwer scheinen einwandfrei zu funktionieren...

Kann mir vielleicht einer von euch Assen weiterhelfen??? Ich verzweifele nun schon seit ca. 10 Stunden an diesem kleinen Fehler !!!! :wall:


THX im Vorraus!
MFG Ypsilon

Code:
unit mB;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    PUeberschrift: TPanel;
    GroupBox1: TGroupBox;
    BtPlus: TButton;
    BtMinus: TButton;
    BtMal: TButton;
    BtDurch: TButton;
    GroupBox2: TGroupBox;
    BtLeicht: TButton;
    BtMittel: TButton;
    BtSchwer: TButton;
    PZahlA: TPanel;
    PRZ: TPanel;
    PZahlB: TPanel;
    PGleich: TPanel;
    PErgebnis: TPanel;
    LZaehler1: TLabel;
    LNenner1: TLabel;
    LZaehler2: TLabel;
    LNenner2: TLabel;
    LZaehlerE: TLabel;
    LNennerE: TLabel;
    GroupBox3: TGroupBox;
    EdZaehlerE: TEdit;
    LBruchstrich: TLabel;
    EdNennerE: TEdit;
    GroupBox4: TGroupBox;
    BtErgebnis: TButton;
    ImVerloren: TImage;
    ImGewonnen: TImage;
    LRichtig: TLabel;
    LFalsch: TLabel;
    LVersuche: TLabel;
    EdRichtig: TEdit;
    EdFalsch: TEdit;
    EdVersuche: TEdit;
    ImStern1: TImage;
    ImStern2: TImage;
    ImStern3: TImage;
    ImStern4: TImage;
    BtLoesung: TButton;
    PGewonnen: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure RechenzeichenClick(Sender: TObject);
    procedure BtLeichtClick(Sender: TObject);
    procedure BtErgebnisClick(Sender: TObject);
    procedure BtMittelClick(Sender: TObject);
    procedure BtSchwerClick(Sender: TObject);
    procedure EdNennerEChange(Sender: TObject);
    procedure EdZaehlerEChange(Sender: TObject);
    procedure BtLoesungClick(Sender: TObject);
    procedure EdRichtigChange(Sender: TObject);
    procedure EdRichtigClick(Sender: TObject);
    procedure EdFalschClick(Sender: TObject);
    procedure EdVersucheClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Zaehler1,Zaehler2,ZaehlerE,Nenner1,Nenner2,NennerE,NennerEE,ZaehlerEE,Versuch,Richtig,Falsch : integer;


implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
ImGewonnen.visible := false;
ImVerloren.visible := false;
end;

procedure TForm1.BtLeichtClick(Sender: TObject);
begin
 Zaehler1 := random (11)+1;
 Zaehler2 := random (11)+1;
 Nenner1 := random (11)+1;
 Nenner2 := Nenner1 ;
 LNennerE.Visible := false;
 LZaehlerE.Visible := false;
  repeat Zaehler2 := random(11) until
   Zaehler2 < Zaehler1;
 LZaehler2.Caption := IntToStr (Zaehler2);
 LZaehler1.Caption := IntToStr (Zaehler1);
 LNenner1.Caption := IntToStr (Nenner1);
 LNenner2.Caption := IntToStr (Nenner1);
end;


procedure TForm1.RechenzeichenClick(Sender: TObject);
begin
 if Sender = BtPlus then
 begin
  PRZ.Caption := '+';
  if Nenner1 <> Nenner2 then
   begin
    NennerE := Nenner1*Nenner2;
    ZaehlerE := (Zaehler1*Nenner2)+(Zaehler2*Nenner1);
   end
  else if Nenner1 = Nenner2 then
   begin
    NennerE := Nenner1;
    ZaehlerE := Zaehler1+Zaehler2;
   end;
 end;
 if Sender = BtMinus then
  begin
   PRZ.Caption := '-';
   if Nenner1 <> Nenner2 then
    PRZ.Caption := '-';
    NennerE := Nenner1*Nenner2;
    ZaehlerE := (Zaehler1*Nenner2)-(Zaehler2*Nenner1);
  end
 else if Nenner1 = Nenner2 then
  begin
   NennerE := Nenner1;
   ZaehlerE := Zaehler1-Zaehler2;
  end;
 if Sender = BtMal then
  begin
   PRZ.Caption := 'x';
   NennerE := Nenner1*Nenner2;
   ZaehlerE := Zaehler1*Zaehler2;
  end;
 if Sender = BtDurch then
  begin
   PRZ.Caption := ':';
   NennerE := Nenner1*Zaehler2;
   ZaehlerE := Nenner2*Zaehler1;
  end;
 LZaehlerE.Caption := IntToStr (ZaehlerE);
 LNennerE.Caption := IntToStr (NennerE);



end;



procedure TForm1.BtErgebnisClick(Sender: TObject);
begin
  Versuch := StrToInt (EdVersuche.Text);
  NennerEE := StrToInt (EdNennerE.Text);
  ZaehlerEE := StrToInt (EdZaehlerE.Text);
  EdVersuche.Text := IntToStr (Versuch +1) ;
   if ZaehlerEE = ZaehlerE then
    begin
     Richtig := StrToInt (EdRichtig.Text);
     MessageDlg ('Richtig!',mtInformation,[mbOK],0);
     LNennerE.Visible := true;
     LZaehlerE.Visible := true;
     ImGewonnen.Visible := true;
     EdRichtig.Text := IntToStr (Richtig+1)
    end
   else if ZaehlerEE <> ZaehlerE then
    begin
     Falsch := StrToInt (EdFalsch.Text);
     MessageDlg ('Falsch! Versuchen Sie es erneut!',mtWarning,[mbRetry],0);
     ImVerloren.Visible := true;
     EdFalsch.Text := IntToStr (Falsch+1);
   end

end;

procedure TForm1.BtMittelClick(Sender: TObject);
begin
 Zaehler1 := random (21)+1;
 Zaehler2 := random (21)+1;
 Nenner1 := random (21)+1;
 Nenner2 := random (21)+1;
 LNennerE.Visible := false;
 LZaehlerE.Visible := false;
 repeat Zaehler2 := random(21) until
  Zaehler2 < Zaehler1;

 LZaehler2.Caption := IntToStr (Zaehler2);
 LZaehler1.Caption := IntToStr (Zaehler1);
 LNenner1.Caption := IntToStr (Nenner1);
 LNenner2.Caption := IntToStr (Nenner2);
end;

procedure TForm1.BtSchwerClick(Sender: TObject);
begin
 Zaehler1 := random (101)+1;
 Zaehler2 := random (101)+1;
 Nenner1 := random (101)+1;
 Nenner2 := random (101)+1;
 LNennerE.Visible := false;
 LZaehlerE.Visible := false;
 repeat Nenner2 := random(101)+1 until
  Nenner2 <> Nenner1;
 repeat Zaehler2 := random(101) until
  Zaehler2 < Zaehler1;

 LZaehler2.Caption := IntToStr (Zaehler2);
 LZaehler1.Caption := IntToStr (Zaehler1);
 LNenner1.Caption := IntToStr (Nenner1);
 LNenner2.Caption := IntToStr (Nenner2);
 LNennerE.Caption := IntToStr (NennerE);
 LZaehlerE.Caption := IntToStr (ZaehlerE);
end;

procedure TForm1.EdNennerEChange(Sender: TObject);
begin
  ImGewonnen.Visible := false;
  ImVerloren.Visible := false;
end;

procedure TForm1.EdZaehlerEChange(Sender: TObject);
begin
  ImGewonnen.Visible := false;
  ImVerloren.Visible := false;

end;

procedure TForm1.BtLoesungClick(Sender: TObject);
begin
  LNennerE.Visible := True;
  LZaehlerE.Visible := True;
  Falsch := StrToInt (EdFalsch.Text);
  EdFalsch.Text := IntToStr (Falsch+1);
  Versuch := StrToInt (EdVersuche.Text);
  EdVersuche.Text := IntToStr (Versuch +1) ;
end;

procedure TForm1.EdRichtigChange(Sender: TObject);
begin
  if EdRichtig.Text = '10' then
   begin
    ImStern1.Visible := True;
    ImStern2.Visible := False;
    ImStern3.Visible := False;
    ImStern4.Visible := False;
   end
  else if EdRichtig.Text = '20' then
   begin
    ImStern1.Visible := True;
    ImStern2.Visible := True;
    ImStern3.Visible := False;
    ImStern4.Visible := False;
   end
  else if EdRichtig.Text = '30' then
   begin
    ImStern1.Visible := True;
    ImStern2.Visible := True;
    ImStern3.Visible := True;
    ImStern4.Visible := False;
   end
  else if EdRichtig.Text = '40' then
   begin
    ImStern1.Visible := True;
    ImStern2.Visible := True;
    ImStern3.Visible := True;
    ImStern4.Visible := True;
   end
  else if EdRichtig.Text = '50' then
   begin
    ImStern1.Visible := False;
    ImStern2.Visible := False;
    ImStern3.Visible := False;
    ImStern4.Visible := False;
    PGewonnen.Visible := True;
   end
end;

procedure TForm1.EdRichtigClick(Sender: TObject);
begin
 MessageDlg ('Cheaten?! Na, na, na...so aber nicht!!!Der Vesuch gibt leider 5 Punkte Abzug!',mtWarning,[mbOK],0);
 Richtig := StrToInt (EdRichtig.Text);
 EdRichtig.Text := IntToStr (Richtig-5);

end;

procedure TForm1.EdFalschClick(Sender: TObject);
begin
 MessageDlg ('Cheaten?! Na, na, na...so aber nicht!!!Der Vesuch gibt leider 5 Punkte obendrauf!',mtWarning,[mbOK],0);
 Falsch := StrToInt (EdFalsch.Text);
 EdFalsch.Text := IntToStr (Falsch+5);
end;

procedure TForm1.EdVersucheClick(Sender: TObject);
begin
 MessageDlg ('Cheaten?! Na, na, na...so aber nicht!!!Der Vesuch gibt leider 5 Punkte obendrauf!',mtWarning,[mbOK],0);
 Versuch := StrToInt (EdVersuche.Text);
 EdVersuche.Text := IntToStr (Versuch+5);
end;

end.

Ultimator 29. Mai 2006 17:59

Re: Bruchrechentrainer programmieren...Hilfe?!?!
 
Ich fürchte, ohne deinen Quelltext (oder zumindest Ausschnitte davon) wirds schwierig, dir zu sagen, wo die Fehler sind ;)

Ypsilon 29. Mai 2006 18:00

Re: Bruchrechentrainer programmieren...Hilfe?!?!
 
habs grade noch geändert...sry :wall:

sir-archimedes 29. Mai 2006 18:06

Re: Bruchrechentrainer programmieren...Hilfe?!?!
 
Also das mit dem Plus sehe ich nicht sofort. Das mit dem Minus umso schneller:

Delphi-Quellcode:
if Sender = BtMinus then
  begin
   PRZ.Caption := '-';
   if Nenner1 <> Nenner2 then
    PRZ.Caption := '-';
    NennerE := Nenner1*Nenner2;
    ZaehlerE := (Zaehler1*Nenner2)-(Zaehler2*Nenner1);
  end
Du setzt doch
Delphi-Quellcode:
NennerE := Nenner1*Nenner2;
ganz unabhängig davon ob die beiden Nenner gleich sind. Das kann so nicht wie gewünscht klappen...

shmia 29. Mai 2006 18:07

Re: Bruchrechentrainer programmieren...Hilfe?!?!
 
Dein Sourcecode ist ziemlich schlampig formatiert und daher kommt auch dein Fehler:
Delphi-Quellcode:
if Sender = BtMinus then
  begin
    PRZ.Caption := '-';
    if Nenner1 <> Nenner2 then  
    begin  // hat gefehlt
      PRZ.Caption := '-';
      NennerE := Nenner1*Nenner2;
      ZaehlerE := (Zaehler1*Nenner2)-(Zaehler2*Nenner1);
    end
    else if Nenner1 = Nenner2 then
  end; // hat gefehlt
Empfehlung:
nach begin immer um 3 Leerzeichen einrücken. Borland rückt um 2 Leerzeichen ein.
Das ist Geschmackssache; wichtig ist, dass man es immer gleich macht.

Ypsilon 29. Mai 2006 18:25

Re: Bruchrechentrainer programmieren...Hilfe?!?!
 
cool,danke schonmal...jetzt is nur noch 1 fehler drinne :hello:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz