AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von stina · begonnen am 13. Mär 2013 · letzter Beitrag vom 15. Mär 2013
Antwort Antwort
Seite 1 von 2  1 2      
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#1

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

  Alt 14. Mär 2013, 08:30
@Jumpy

Einem Anfänger globale Variablen schmackhaft zu machen - weil man schnell eine Antwort geben will - und diesem Anfänger dann in ein paar Tagen/Wochen/Monaten/Beiträgen genau diese globale Variablen um die Ohren zu hauen "Nein, mach das nicht!", "Wie kann man nur!", "Das ist schlechter Stil!" (Beispiele gibt es im Forum zuhauf) ist ein wenig unfair, zumal ich mein Grundgerüst eben genau unter diesem Aspekt "Vermeidung globaler Variablen" gegeben habe.
Autsch, das hat jetzt wegetan.
War aber zugegebenermaßen auch berechtigt.

Die globale Variable bezog sich noch auf den Vorschlag in #2, bezogen auf dein Gerüst, wäre es eine weiter variable in der Prozedur Spiel. Hätte das vllt. anders beantwortet, wenn der tatsächliche Stand der Dinge bekannt gewesen wäre bzw. ich den TE besser eingeschätzt hätte. Da du ihr das detailiert aufgedröselte Grundgerüst an die Hand gegeben hast hast du das von Anfang an besser eingeschätzt. "Blutige Anfängerin" wäre da sicher ein Hinweis gewesen, wenn ich auch bei der Sprache nicht auf "nur" 14 getippt hätte, wenn ich mal davon ausgehe, was sonst häufig für Posts aus der jungen Generation kommen.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

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

  Alt 14. Mär 2013, 08:37
Autsch, das hat jetzt wegetan.
War aber zugegebenermaßen auch berechtigt.
So feste wollte ich gar nicht ... zumal du auch nicht der Einzige gewesen bist
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)
  Mit Zitat antworten Zitat
Benutzerbild von stina
stina

Registriert seit: 6. Mär 2013
23 Beiträge
 
Delphi 2010 Professional
 
#3

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

  Alt 14. Mär 2013, 08:43
erstmal ja der quelltext funktioniert aber das hat mein chef mir eben auch gesagt
dann danke aber diese aussprache liegt an meiner erziehung da meine eltern auf ein gutes benehmen achten und auch darauf wert legen.
Ann-Christin
Rechtschreibfehler hier gratis!!!!
Kommt und greift zu!
LG stina
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 14. Mär 2013, 08:46
Man sieht ja, was es gebracht hat. Nach meiner Erfahrung bringt es einfach nix, einem Anfänger gleich ein ausgefuchstes Codegerüst zu liefern, das er aber nicht versteht oder das ihm zu kompliziert erscheint. Nichtsdestotrotz ist ein Hinweis natürlich angebracht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

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

  Alt 14. Mär 2013, 08:51
Man sieht ja, was es gebracht hat. Nach meiner Erfahrung bringt es einfach nix, einem Anfänger gleich ein ausgefuchstes Codegerüst zu liefern, das er aber nicht versteht oder das ihm zu kompliziert erscheint. Nichtsdestotrotz ist ein Hinweis natürlich angebracht.
Der Idealismus sollte als Letzter dran glauben
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)
  Mit Zitat antworten Zitat
Benutzerbild von stina
stina

Registriert seit: 6. Mär 2013
23 Beiträge
 
Delphi 2010 Professional
 
#7

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

  Alt 14. Mär 2013, 10:53
Delphi-Quellcode:
 program Project1;
{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  name: string;
  Zahl1, Zahl2, Eingabe, AktuelleRunde, Ergebnis: real;
  RichtigeAntw: integer = 0;
  AnzRunden, op: integer;

begin

  Writeln('Bitte geben sie ihren Namen ein');
  Readln(Name);
  Writeln('Hallo ' + Name + ' wie viele Runden willst du spielen?');
  Readln(AnzRunden);
  Writeln('Also spielen wir ' + FloatToStr(AnzRunden) + ' Runden zusammen');
  Readln;
  AktuelleRunde := 0;
  repeat // wiederhole solange.....
    AktuelleRunde := AktuelleRunde + 1;
    randomize;
    Zahl1 := Random(20) + 1;
    Zahl2 := Random(10) + 1;
    op := Random(3);
    if op = 0 then
      Ergebnis:=Zahl1+Zahl2
    else if op = 1 then
      Ergebnis:=Zahl1-Zahl2
    else if op = 2 then
     Ergebnis:= Zahl1*Zahl2;
     Writeln (FloatToStr(Zahl1) ,IntToStr(op) , FloatToStr(Zahl2));
      Readln(Eingabe);
    if Eingabe = Zahl1 + op + Zahl2 then
      Writeln('Das ist richtig')
    else
      Writeln('Das war falsch');
      Readln;
    if Eingabe = Ergebnis then
      inc(RichtigeAntw);
  until AnzRunden = AktuelleRunde; // ...bis Aktuellle Runde=Anzahl Runde
      Writeln('Du hast ' + IntToStr(RichtigeAntw) + ' Aufgaben von ' + IntToStr
      (AnzRunden) + ' richtig gelöst');
      Readln;
  try
    { TODO -oEntwickler -cKonsole Main : Hier Code einfügen }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.
dies ist mein momentaner quelltext. jetzt steh ich aber wirklich vor dem problem das er die zahle non 0-2 anzeigt und nicht +,-,* wie kann ich das ändern?
Ann-Christin
Rechtschreibfehler hier gratis!!!!
Kommt und greift zu!
LG stina
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#8

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

  Alt 14. Mär 2013, 11:11
Zu Übungszwecken solltest du wenigstens das einmal in eine Funktion auslagern wie Sir Rufo das ja für alles Vorgeschlagen hat:

Delphi-Quellcode:
function MyOperatorAsString(op:Integer):String;
begin
  if op=0 then
   Result:='+'
  else
  //usw...
end;
oder zur weiteren Übung kannst du dir auch noch die Fallunterscheidung mit "Case" aneignen:

Delphi-Quellcode:
function MyOperatorAsString(op:Integer):String;
begin
  case op of
  0: Result := '+';
  1: Result := '-';
  //usw...
  end;
end;
Im Hauptprogramm stünde dann bei der Ausgabe:
Writeln (FloatToStr(Zahl1) ,MyOperatorAsString(op) , FloatToStr(Zahl2));
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#9

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

  Alt 14. Mär 2013, 11:32
Hier mal ein wenig überarbeitet:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  name: string;
  Zahl1, Zahl2, Eingabe, Ergebnis: real;
  RichtigeAntw: Integer = 0;
  AnzRunden, AktuelleRunde, op: Integer;

begin
  Randomize;
  Writeln('Bitte geben sie ihren Namen ein');
  Readln(Name);
  Writeln('Hallo ' + Name + ' wie viele Runden willst du spielen?');
  Readln(AnzRunden);
  Writeln('Also spielen wir ' + IntToStr(AnzRunden) + ' Runden zusammen');
// Readln;
  AktuelleRunde := 0;
  repeat // wiederhole solange.....
    Inc(AktuelleRunde);
    Zahl1 := Random(20) + 1;
    Zahl2 := Random(10) + 1;

    op := Random(3);
    case op of
      0: begin;
           Ergebnis := Zahl1 + Zahl2;
           Writeln(FloatToStr(Zahl1), '+', FloatToStr(Zahl2));
         end;
      1: begin;
           Ergebnis := Zahl1 - Zahl2;
           Writeln(FloatToStr(Zahl1), '-', FloatToStr(Zahl2));
         end;
      else begin;
           Ergebnis := Zahl1 * Zahl2;
           Writeln(FloatToStr(Zahl1), '*', FloatToStr(Zahl2));
         end;
    end;

    Readln(Eingabe);

    if Eingabe = Ergebnis then begin;
      Writeln('Das ist richtig');
      inc(RichtigeAntw);
    end else begin;
      Writeln('Das war falsch');
    end;

   // Readln;

  until AnzRunden = AktuelleRunde; // ...bis Aktuellle Runde=Anzahl Runde
      Writeln('Du hast ' + IntToStr(RichtigeAntw) + ' Aufgaben von ' + IntToStr
      (AnzRunden) + ' richtig gelöst');
      Readln;
  try
    { TODO -oEntwickler -cKonsole Main : Hier Code einfügen }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von stina
stina

Registriert seit: 6. Mär 2013
23 Beiträge
 
Delphi 2010 Professional
 
#10

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

  Alt 14. Mär 2013, 08:56
ok ja der quelltxt sieht echt kompliziert aus .
ich soll jetzt erstmal mit einbauen das die rechenart die genutzt wird auch zufällig ist
ungefähr so:
Delphi-Quellcode:
  operator:=Random(3);
    if operator=0 then zahl1+zahl2
    else if operator=1 then zahl1-zahl2
     else if operator=2 then zahl1*zahl2;

    Writeln(FloatToStr(Zahl1) + operator + FloatToStr(Zahl2));
    Readln(Eingabe);
    if Eingabe = zahl1+operator+zahl2
    then Writeln('Das ist richtig')
    else Writeln('Das war falsch');
    Readln;
so meinte mein chef solle ich das machen
Ann-Christin
Rechtschreibfehler hier gratis!!!!
Kommt und greift zu!
LG stina
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz