program RechenQuiz;
{$APPTYPE CONSOLE}
{$R *.res}
uses
SysUtils;
function FrageAnzahlRunden : Integer;
var
LAntwort :
string;
begin
repeat
Write( '
Wieviele Runden möchtest du spielen? ' );
Readln( LAntwort );
until TryStrToInt( LAntwort, Result );
WriteLn;
end;
procedure ErstelleAdditionsAufgabe(
out Frage, Loesung :
string );
var
LZahl1, LZahl2 : Integer;
begin
LZahl1 := Random( 100 );
LZahl2 := Random( 100 );
Frage := Format( '
Wieviel ist %d + %d ?', [LZahl1, LZahl2] );
Loesung := Format( '
%d', [LZahl1 + LZahl2] );
end;
procedure ErstelleSubtraktionsAufgabe(
out Frage, Loesung :
string );
var
LZahl1, LZahl2 : Integer;
begin
LZahl1 := Random( 100 );
LZahl2 := Random( LZahl1 );
Frage := Format( '
Wieviel ist %d - %d ?', [LZahl1, LZahl2] );
Loesung := Format( '
%d', [LZahl1 - LZahl2] );
end;
procedure ErstelleMultiplikationsAufgabe(
out Frage, Loesung :
string );
var
LZahl1, LZahl2 : Integer;
begin
LZahl1 := Random( 10 );
LZahl2 := Random( 10 );
Frage := Format( '
Wieviel ist %d x %d ?', [LZahl1, LZahl2] );
Loesung := Format( '
%d', [LZahl1 * LZahl2] );
end;
procedure ErstelleAufgabe(
out Frage, Loesung :
string );
begin
case Random( 3 )
of
0 :
ErstelleAdditionsAufgabe( Frage, Loesung );
1 :
ErstelleSubtraktionsAufgabe( Frage, Loesung );
2 :
ErstelleMultiplikationsAufgabe( Frage, Loesung );
end;
end;
function LoeseAufgabe(
const Frage, Loesung :
string ) : Boolean;
var
LAntwort :
string;
begin
Write( Frage, '
' );
Readln( LAntwort );
Result := LAntwort = Loesung;
if Result
then
WriteLn( '
Sehr gut, weiter so ...' )
else
WriteLn( '
Die richtige Lösung wäre ', Loesung, '
gewesen' );
WriteLn;
end;
procedure ZeigeErgebnis( RichtigBeantwortet, AnzahlFragen : Integer );
begin
WriteLn( '
Du hast ', RichtigBeantwortet, '
Fragen von ', AnzahlFragen, '
richtig beantwortet!' );
WriteLn;
end;
procedure Burt_Dieser_Mensch_Will_Nicht_Spielen;
begin
WriteLn( '
Schade, dass du nicht spielen möchtest!' );
WriteLn;
end;
function NochmalSpielen : Boolean;
var
LAntwort :
string;
begin
Write( '
Willst du nochmal spielen (J/N)? ' );
Readln( LAntwort );
WriteLn;
Result := ( LAntwort = '
J' )
or ( LAntwort = '
j' );
end;
procedure Verabschieden;
begin
WriteLn( '
Bis zum nächsten Mal :o)' );
end;
// Putting the pieces together :o)
procedure Spiel;
var
LRundenAnzahl : Integer;
// Anzahl der Runden
LRunde : Integer;
// aktuelle Runde
LFrage :
string;
// aktuelle Frage
LLoesung :
string;
// Lösung zur aktuellen Frage
LRichtigZaehler : Integer;
// Zähler der richtigen Antworten
begin
LRichtigZaehler := 0;
LRundenAnzahl := FrageAnzahlRunden;
if LRundenAnzahl > 0
then
begin
for LRunde := 1
to LRundenAnzahl
do
begin
ErstelleAufgabe( LFrage, LLoesung );
if LoeseAufgabe( LFrage, LLoesung )
then
Inc( LRichtigZaehler );
end;
ZeigeErgebnis( LRichtigZaehler, LRundenAnzahl );
end
else
Burt_Dieser_Mensch_Will_Nicht_Spielen;
end;
begin
try
Randomize;
repeat
Spiel;
until not NochmalSpielen;
Verabschieden;
except
on E :
Exception do
WriteLn( E.ClassName, '
: ', E.
Message );
end;
Readln;
end.