AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Variablen vergleichen

Ein Thema von ulrich72 · begonnen am 11. Nov 2018 · letzter Beitrag vom 11. Nov 2018
Antwort Antwort
ulrich72

Registriert seit: 27. Dez 2015
Ort: Rostock
14 Beiträge
 
Delphi 10.3 Rio
 
#1

Variablen vergleichen

  Alt 11. Nov 2018, 12:42
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
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#2

AW: Variablen vergleichen

  Alt 11. Nov 2018, 12:45
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.

Geändert von DieDolly (11. Nov 2018 um 12:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Variablen vergleichen

  Alt 11. Nov 2018, 12:57
und vielleicht anstatt StrToInt besser StrToIntDef oder TryStrToInt verwenden.
So kannst Exceptions bei Falscheingaben vermeiden.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
ulrich72

Registriert seit: 27. Dez 2015
Ort: Rostock
14 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Variablen vergleichen

  Alt 11. Nov 2018, 13:36
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Variablen vergleichen

  Alt 11. Nov 2018, 13:45
Randomize bitte nur einmal bei Programmstart aufrufen.

Deaktivieren die OK-Schaltfläche doch, wenn a kleiner b ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#6

AW: Variablen vergleichen

  Alt 11. Nov 2018, 13:55
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;

Geändert von Delphi.Narium (11. Nov 2018 um 14:38 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#7

AW: Variablen vergleichen

  Alt 11. Nov 2018, 13:57
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.
  Mit Zitat antworten Zitat
ulrich72

Registriert seit: 27. Dez 2015
Ort: Rostock
14 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Variablen vergleichen

  Alt 11. Nov 2018, 14:29
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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