Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.

  Alt 14. Mär 2013, 08:44
@stina

Hier mal mein Vorschlag, der auch sehr leicht um die noch gewünschten Features erweitert werden kann.
(Es geht nicht darum zu zeigen, was ich Tolles kann, sondern um die Erkenntnis, warum ein Programm durch Strukturierung leichter zu warten und erweitern ist).

BTW: Es fehlt noch ein wichtiger Link für das Verständnis hier

Delphi-Quellcode:
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (14. Mär 2013 um 08:48 Uhr)
  Mit Zitat antworten Zitat