![]() |
Variablen vergleichen
Hallo,
ich bin mal wieder an einer einfachen Frage gescheitert. Ein kleines Programm soll meinen jüngsten Enkel in Mathematik motivieren. "Computer ist viel besser als Buch" (O-Ton). Die Addition ist kein Hindernis, aber bei der Subtraktion komme ich nicht weiter. Da in der ersten Klasse negative Zahlen nicht bekannt sind muss der Fall Minuend < Subtrahend irgendwie ausgeschlossen werden. Bisjetzt bin ich soweit:
Delphi-Quellcode:
Die Kommentare habe ich für mich eingefügt. Sicher gibt es da eine ganz simple Lösung.
procedure TForm1.btnSubtraktionClick(Sender: TObject);
begin randomize; // Initialisierung von Random edtMinuend.Caption := IntToStr(Random(10)); edtSubtrahend.Caption := IntToStr(Random(10)); edtDifferenz.Caption := ''; lblHinweis.color := clNone; end; procedure TForm1.btnPruefClick(Sender: TObject); var a, b, c: Integer; begin a := StrToInt(edtMinuend.Text); b := StrToInt(edtSubtrahend.Text); // hier sollte gprüft werden a< b ist // und dann die procedure TForm1.btnSubtraktionClick(Sender: TObject) // erneut ausgeführt wird, bis a >= b ist (repeat until?) c := a - b; if edtDifferenz.Caption = IntToStr(c) then begin lblHinweis.Visible := True; lblHinweis.Color := clLime; end else begin lblHinweis.Visible := True; lblHinweis.Color := clRed; end; end; Helft mir mal bitte auf die Sprünge! vG Ulrich |
AW: Variablen vergleichen
Warum nicht direkt a mit b (a < b) vergleichen und eine entsprechende Nachricht auf die GUI bringen.
Ein Label mit entsprechendem, für Kinder verständlichem Text und Edit-Fehler mit roten Rand. |
AW: Variablen vergleichen
und vielleicht anstatt
Delphi-Quellcode:
besser
StrToInt
Delphi-Quellcode:
oder
StrToIntDef
Delphi-Quellcode:
verwenden.
TryStrToInt
So kannst Exceptions bei Falscheingaben vermeiden. |
AW: Variablen vergleichen
Der Vergleich und die Antwort sind ja einfach,
Code:
aber es sollen nur, der Altersstufe entsprechend, lösbare Aufgaben angezeigt werden.
procedure TForm1.btnSubtraktionClick(Sender: TObject);
var a, b : Integer; begin randomize; // Initialisierung von Random edtMinuend.Caption := IntToStr(Random(10)); edtSubtrahend.Caption := IntToStr(Random(10)); edtDifferenz.Caption := ''; lblHinweis.color := clNone; a := StrToInt(edtMinuend.Text); b := StrToInt(edtSubtrahend.Text); if a < b then showmessage ('Das kannst du noch nicht, klicke bitte noch einmal'); end; Der Test hat gezeigt, dass der Junge nach dem Wegklicken der Message dann trotzdem auf den Prüf-/Lösungsbutton klickt (schließlich muss man ja sehen was da passiert). Deshalb konkretisiere ich meine Frage noch. Wie kann ich nach der Erzeugung der Zufallszahlen und dem Vergleich das erneute Durchlaufen der Prozedur erzwingen, bis eine solche Aufgabe angezeigt wird? Wie ihr seht habe ich die Abfrage schon aus der zweiten Prozedur herausgenommen. vG Ulrich |
AW: Variablen vergleichen
Randomize bitte nur einmal bei Programmstart aufrufen.
Deaktivieren die OK-Schaltfläche doch, wenn a kleiner b ist. |
AW: Variablen vergleichen
Sinngemäß sowas?
Delphi-Quellcode:
oder sowas?
procedure TForm1.btnSubtraktionClick(Sender: TObject);
var a : Integer; b : Integer; begin (* randomize; *) // Initialisierung von Random nach FormCreate verschieben. Repeat a := Random(10); b := Random(10); until a >= b; // kann (theoretisch) eine Endlosschleife geben, wenn a immer zufällig kleiner b bleiben sollte. edtMinuend.Caption := IntToStr(a); edtSubtrahend.Caption := IntToStr(b); edtDifferenz.Caption := ''; lblHinweis.color := clNone; end;
Delphi-Quellcode:
oder eher sowas?
procedure TForm1.btnSubtraktionClick(Sender: TObject);
var a : Integer; b : Integer; c : Integer; begin (* randomize; *) // Initialisierung von Random nach FormCreate verschieben. a := Random(10); b := Random(10); if b > a then begin // dann werden a und b getauscht. c := a; a := b; b := c; end; edtMinuend.Caption := IntToStr(a); edtSubtrahend.Caption := IntToStr(b); edtDifferenz.Caption := ''; lblHinweis.color := clNone; end;
Delphi-Quellcode:
procedure TForm1.btnSubtraktionClick(Sender: TObject);
var a : Integer; b : Integer; begin (* randomize; *) // Initialisierung von Random nach FormCreate verschieben. a := Random(10); b := Random(10 - a); // Zufallszahl aus dem Restbereich der zulässigen Zahlen. edtMinuend.Caption := IntToStr(a); edtSubtrahend.Caption := IntToStr(b); edtDifferenz.Caption := ''; lblHinweis.color := clNone; end; |
AW: Variablen vergleichen
Zitat:
Das könnte man dann so bauen, dass man am Anfang des Programms sein Niveau oder die Schulklasse auswählt. Dementsprechend werden die Werte dann geladen. |
AW: Variablen vergleichen
Hallo @Delphi.Narium,
die erste und die dritte Variante sind genau das, wonach ich gesucht habe. Die entsprechen auch meinem Niveau. Da ich schon ein paar Jährchen über die 70 bin und jetzt versuche mit meinen größeren Enkeln einigermaßen mitzuhalten, entstehen also ganz kleine Anwendungen für den jüngsten. Ich bin ein absoluter Anfänger, habe zwar schon vor einigen Jahren einwenig mit VBA für Excel hantiert, aber nur für den Hausgebrauch. @DieDolly, bitte verstehe mich nicht falsch, aber das was du vorschlägst können wir vielleicht in einem Jahr mal probieren. Ich habe mir allerdings deinen allerersten Rat zu einem anderen Thema zu Herzen genommen und versucht Einrückungen, Bezeichnungen und die Groß-/Kleinschreibung immer anzuwenden. Klappt zwar noch nicht immer, aber immer öfter. Euch allen ein großes Dankeschön für eure schnelle Hilfe. vG Ulrich |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 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 by Thomas Breitkreuz