Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Variablen vergleichen (https://www.delphipraxis.net/198531-variablen-vergleichen.html)

ulrich72 11. Nov 2018 11:42

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:
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;
Die Kommentare habe ich für mich eingefügt. Sicher gibt es da eine ganz simple Lösung.
Helft mir mal bitte auf die Sprünge!

vG
Ulrich

DieDolly 11. Nov 2018 11:45

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.

Helmi 11. Nov 2018 11:57

AW: Variablen vergleichen
 
und vielleicht anstatt
Delphi-Quellcode:
StrToInt
besser
Delphi-Quellcode:
StrToIntDef
oder
Delphi-Quellcode:
TryStrToInt
verwenden.
So kannst Exceptions bei Falscheingaben vermeiden.

ulrich72 11. Nov 2018 12:36

AW: Variablen vergleichen
 
Der Vergleich und die Antwort sind ja einfach,
Code:
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;
aber es sollen nur, der Altersstufe entsprechend, lösbare Aufgaben angezeigt werden.
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

Luckie 11. Nov 2018 12:45

AW: Variablen vergleichen
 
Randomize bitte nur einmal bei Programmstart aufrufen.

Deaktivieren die OK-Schaltfläche doch, wenn a kleiner b ist.

Delphi.Narium 11. Nov 2018 12:55

AW: Variablen vergleichen
 
Sinngemäß sowas?
Delphi-Quellcode:
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;
oder sowas?
Delphi-Quellcode:
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;
oder eher sowas?
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;

DieDolly 11. Nov 2018 12:57

AW: Variablen vergleichen
 
Zitat:

aber es sollen nur, der Altersstufe entsprechend, lösbare Aufgaben angezeigt werden.
Wie wäre es mit einem Klassensystem, wo du die minimale und maximale Zahl hinterlegen kannst sowie Boolean's, ob Minusbereiche zugelassen werden oder nicht.

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.

ulrich72 11. Nov 2018 13:29

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 10:22 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