Probleme mit Prozeduren aus Prozeduren aufrufen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Siegfried
Beiträge: 3
Registriert: So 28. Dez 2014, 20:01

Probleme mit Prozeduren aus Prozeduren aufrufen

Beitrag von Siegfried »

Hallo,
Ich bin neu im Forum. Männlich, 57 Jahre alt und habe außer mit Borland Pascal, gefühlt seit Jahrhunderten, nichts mit Programieren am Hut gehabt. Und das auch nur just for fun. Jetzt versuche ich mir Pascal/Lazarus beizubringen. Dazu arbeite ich den Wiki http://wikis.zum.de/zum/Lazarus-Buch durch. Jetzt hänge ich seit Tagen an dem Projekt "Rechentrainer" im Kapitel "Spielen mit dem Zufall" fest. Wenn das zu sehr Basics sind um hier darauf einzugehen, dann sagt es mir.
Problem: Ich versuche mehrere Prozeduren innerhalb der Prozedur "TForm1.Button2Click" der Reihenfolge nach abzuarbeiten. Dabei sollten zunächst zufällige Aufgaben generiert werden, danach eine Aufgabe gebaut und diese dann ausgegeben werden. Danach soll die Eingabe von "Edit1.Text" geholt und mit dem Ergebnis verglichen werden. Danach folgt die Ausgabe "Falsch/Richtig". Nur ist es bei meinem Program leider so, daß immer das Ergebnis der nächsten Frage mit der aktuellen Antwort verglichen wird. Ich finde den Wurm nicht. Wenn mir da jemand helfen könnte, muss kein Lösungsweg sein. Mich auf meinen Denkfehler zu stoßen, reicht vielleicht schon. Ich füge mal den Programmcode ein.

Code: Alles auswählen

 { public declarations }
    procedure Zufallszahlen_generieren;
    procedure Aufgabe_stellen;
    procedure Antwort_holen;
    procedure Ergebnis_rechnen;
    procedure Antwort_geben;
  end;
 
var
  Form1: TForm1;
  Wert1:integer;
  Wert2:integer;
  Aufgabe:string;
  Antwort:integer;
  Rechenzeichen:string;
  Zufallsvorzeichenzahl:integer;
  Ergebnis:integer;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
 end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
   Zufallszahlen_generieren;
   Aufgabe_stellen;
   Ergebnis_rechnen;
   Antwort_holen;
   Antwort_geben;
end;
 
procedure TForm1.Zufallszahlen_generieren;
begin
   Wert1:=Random(100);
   Wert2:=Random(100);
end;
 
procedure TForm1.Aufgabe_stellen;
begin
  Zufallsvorzeichenzahl:=Random(2);
  Case Zufallsvorzeichenzahl of
       0:Rechenzeichen:='+';
       1:Rechenzeichen:='-';
  end;
  Aufgabe:=IntToStr(Wert1)+Rechenzeichen+IntToStr(Wert2);
  Label2.Caption:=Aufgabe;
end;
 
procedure TForm1.Antwort_holen;
Begin
  Antwort:=StrToInt(Edit1.Text);
end;
 
procedure TForm1.Ergebnis_rechnen;
Begin
  Case Zufallsvorzeichenzahl of
       0:Ergebnis:=Wert1+Wert2;
       1:Ergebnis:=Wert2-Wert2;
  end;
end;
 
procedure TForm1.Antwort_geben;
begin
  if Antwort<>Ergebnis
  then label3.Caption:='Falsch!'
  else label3.Caption:='Richtig!';
end;
end.
Zuletzt geändert von Lori am Mi 31. Dez 2014, 16:25, insgesamt 1-mal geändert.
Grund: Highlighter

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: Probleme mit Prozeduren aus Prozeduren aufrufen

Beitrag von theo »

Der Wurm ist, dass du zwei Ereignisse brauchst.

Einmal einen Button der heisst z.B. "Neue Aufgabe" und einen Button namens z.B. "OK" wenn der User fertig ist mit der Eingabe.
Statt einen Zweiten Button könnte man auch darauf reagieren, dass der User die Eingabetaste im TEdit drückt.

Event 1:
Zufallszahlen_generieren;
Aufgabe_stellen;
Ergebnis_rechnen;

Event 2:
Antwort_holen;
Antwort_geben;

Siegfried
Beiträge: 3
Registriert: So 28. Dez 2014, 20:01

Re: Probleme mit Prozeduren aus Prozeduren aufrufen

Beitrag von Siegfried »

Ich danke dir ganz sakrisch. Ich werde das sofort umzusetzen versuchen.
Gruß, Siegfried

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Probleme mit Prozeduren aus Prozeduren aufrufen

Beitrag von Komoluna »

Erstmal willkommen im Forum.
Siegfried hat geschrieben:Wenn das zu sehr Basics sind um hier darauf einzugehen, dann sagt es mir.
Dazu sind Foren da, um weiterzuhelfen, wo man mit Wikis und Tutorials nicht weiterkommt. Dabei ist es völlig egal, ob es Einsteigerfragen sind, oder ob man versucht vieldimensionale Geometrie zu implementieren.
"Zu Basic" sind Sachen, die mein in 2 Minuten bei Google finden kann...

Wenn du das nächste mal Code postest, verwende doch bitte Highlighter(oben über dem Textfeld). Dann ist der Code um einiges übersichtlicher:

Code: Alles auswählen

{ public declarations }
procedure Zufallszahlen_generieren;
procedure Aufgabe_stellen;
procedure Antwort_holen;
procedure Ergebnis_rechnen;
procedure Antwort_geben;
end;
 
var
Form1: TForm1;
Wert1:integer;
Wert2:integer;
Aufgabe:string;
Antwort:integer;
Rechenzeichen:string;
Zufallsvorzeichenzahl:integer;
Ergebnis:integer;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
end;
[...]
MFG und auf gute Zusammenarbeit

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Siegfried
Beiträge: 3
Registriert: So 28. Dez 2014, 20:01

Re: Probleme mit Prozeduren aus Prozeduren aufrufen

Beitrag von Siegfried »

Danke für den Hinweis.
Es funzt. War noch ein kleiner Fehler in einer Rechenvorschrift. Wert2-Wert2 ergibt immer 0 und somit Müll.
Jetzt kann ich das Programm ausbauen.
Gruß, Siegfried

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Probleme mit Prozeduren aus Prozeduren aufrufen

Beitrag von Mathias »

Wenn du das nächste mal Code postest, verwende doch bitte Highlighter(oben über dem Textfeld). Dann ist der Code um einiges übersichtlicher:
Wen du im Lazarus Editor noch kurz Ctrl-D drückst, wird der Code sogar automatisch strukturiert, so das nicht alles Links-bündig ist. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten