![]() |
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. |
Re: Bruchrechentrainer programmieren...Hilfe?!?!
Ich fürchte, ohne deinen Quelltext (oder zumindest Ausschnitte davon) wirds schwierig, dir zu sagen, wo die Fehler sind ;)
|
Re: Bruchrechentrainer programmieren...Hilfe?!?!
habs grade noch geändert...sry :wall:
|
Re: Bruchrechentrainer programmieren...Hilfe?!?!
Also das mit dem Plus sehe ich nicht sofort. Das mit dem Minus umso schneller:
Delphi-Quellcode:
Du setzt doch
if Sender = BtMinus then
begin PRZ.Caption := '-'; if Nenner1 <> Nenner2 then PRZ.Caption := '-'; NennerE := Nenner1*Nenner2; ZaehlerE := (Zaehler1*Nenner2)-(Zaehler2*Nenner1); end
Delphi-Quellcode:
ganz unabhängig davon ob die beiden Nenner gleich sind. Das kann so nicht wie gewünscht klappen...
NennerE := Nenner1*Nenner2;
|
Re: Bruchrechentrainer programmieren...Hilfe?!?!
Dein Sourcecode ist ziemlich schlampig formatiert und daher kommt auch dein Fehler:
Delphi-Quellcode:
Empfehlung:
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 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. |
Re: Bruchrechentrainer programmieren...Hilfe?!?!
cool,danke schonmal...jetzt is nur noch 1 fehler drinne :hello:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz