Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm. (https://www.delphipraxis.net/173737-berechnen-und-ausgeben-wie-viele-antworten-richtig-waren-fuers-konsolenprogramm.html)

stina 13. Mär 2013 13:33

Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
Hallo ich habe ein Problem:
Ich bin dabei ein Rechenspiel zu programmieren bei dem man entscheiden kann wie viele runden man spielt. Jetzt soll ich aber auch ausgeben lassen wie viele antworten insgesamt richtig waren weiß aber nich wie das Funktioniert. Wenn das einer weiß und es mir sagen kann wär cool programmiere erst seit dem 4.3 mit delphi.
Danke im forraus
Mfg
Stina :)

DeddyH 13. Mär 2013 13:42

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
Du brauchst nur eine globale Integer-Variable dazu. Bei einer richtigen Antwort erhöhst Du sie, bei einer falschen natürlich nicht. Zum Schluss gibst Du dann einfach den aktuellen Wert dieser Variablen aus.

stina 13. Mär 2013 13:46

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

Zitat von DeddyH (Beitrag 1207240)
Du brauchst nur eine globale Integer-Variable dazu. Bei einer richtigen Antwort erhöhst Du sie, bei einer falschen natürlich nicht. Zum Schluss gibst Du dann einfach den aktuellen Wert dieser Variablen aus.

Erstmal danke aber wie macht man das? ich bin wirklich eine blutige anfängerin.

DeddyH 13. Mär 2013 14:02

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
Delphi-Quellcode:
program Quiz;

uses
  ... (*benötigte Units *);

var
  RichtigeAntworten: integer = 0; (* dies ist die globale Variable *)

...

if RichtigBeantwortet then
  inc(RichtigeAntworten);
  (* oder anders ausgedrückt: RichtigeAntworten := RichtigeAntworten + 1 *)

...

writeln('Richtige Antworten:' + RichtigeAntworten);

Sir Rufo 13. Mär 2013 14:22

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
Also erstmal macht man sich Gedanken darüber, was man denn eigentlich machen muss.
  • Abfrage der Runden-Anzahl (liefert die Anzahl zurück)
  • Erstellen einer Aufgabe (Liefert die Aufgabe und die richtige Lösung zurück)
  • Ausgabe und Abfrage der Lösung (Liefert zurück, ob die Antwort richtig war)
  • Ausgabe des Ergebnisses
  • Die einzelnen Teile für das Spiel sinnvoll zusammensetzen :)
In Delphi übersetzt kommt dann sowas dabei heraus:
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  SysUtils;

function FrageAnzahlRunden : Integer;
begin
  // ToDo
  Result := 1; // Achtung, liefert aktuell immer nur 1 zurück
end;

procedure AufgabeErstellen( out Frage, Loesung : string );
begin
  // ToDo
  Frage := '';
  Loesung := '';
end;

function AufgabeAbfragen( const Frage, Loesung : string ) : Boolean;
begin
  Result := False; // Achtung, liefert aktuell immer nur False (nicht gelöst) zurück
  // ToDo
end;

procedure ZeigeErgebnis( RichtigBeantwortet, AnzahlFragen : Integer );
begin
  WriteLn( 'Du hast ', RichtigBeantwortet, ' Fragen von ', AnzahlFragen, ' richtig beantwortet!' );
end;

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;

  for LRunde := 1 to LRundenAnzahl do
    begin

      AufgabeErstellen( LFrage, LLoesung );

      if AufgabeAbfragen( LFrage, LLoesung )
      then
        Inc( LRichtigZaehler );

    end;

  ZeigeErgebnis( LRichtigZaehler, LRundenAnzahl );
end;

begin
  try

    Spiel;

  except
    on E : Exception do
      Writeln( E.ClassName, ': ', E.Message );
  end;

end.
Durch diese Strukturierung kann man den Code für das eigentliche Spiel fast in Prosa hinschreiben

stina 14. Mär 2013 07:23

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
Danke :-D für eure Hilfe es hat funktioniert. Wisst ihr auch wie man die gebrauchte zeit berechnen und ausgeben lassen kann????? Oder eine bestenliste erstellt??????

DeddyH 14. Mär 2013 07:41

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

Zitat von stina (Beitrag 1207321)
Wisst ihr auch wie man die gebrauchte zeit berechnen und ausgeben lassen kann????? Oder eine bestenliste erstellt??????

Ja :mrgreen:

Sir Rufo 14. Mär 2013 07:42

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

Zitat von stina (Beitrag 1207321)
Danke :-D für eure Hilfe es hat funktioniert. Wisst ihr auch wie man die gebrauchte zeit berechnen und ausgeben lassen kann????? Oder eine bestenliste erstellt??????

Bitte, uns (vor allem andere Anfänger) würde aber nun aber auch dein Code interessieren.

Berechnen der Zeit:

Delphi hat Zugriff auf die aktuelle Uhrzeit mit der Funktion Delphi-Referenz durchsuchenNow
Wenn du nur eine normale Uhr hast, wie würdest du die Dauer ermitteln? So geht das auch hier ;)

Bestenliste:

Da gibt es unterschiedliche Lösungen, die je nach Kenntnisstand auch zu lösen sind. Hier werden mehrere Fertigkeiten benötigt: Liste aus Datei lesen, Sortieren, Liste in Datei schreiben

Aber bitte, pro Thread eine Frage, somit solltest du für die Zeitberechnung und Bestenliste jeweils eine neue Frage stellen :)

Jumpy 14. Mär 2013 07:43

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
Du könntest eine globale TDateTime-variable anlegen. Bei Programmstart/Quizrtart das "now" darin speichern und am Ende wieder mit dem Ergebnis der now-Funktion vergleichen.

Für eine Bestenliste müssen die Ergebnisse ja irgendwo gespeichert werden, am einfachsten mal in einer Textdatei oder einer Ini-Datei. Dazu müsstest du dich mal informieren (Forensuche) wie man sowas macht.

Edit: Roter Kasten?

Sir Rufo 14. Mär 2013 07:47

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
@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.

stina 14. Mär 2013 07:55

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
Danke das ihr immer so schnell Antwortet. Ich werde mir das mit dem now mal ansehn.
Und das man immer nur eine frage stzellt wusste ich nich sorry :).
Is mein vorletzter Praktikumstag deshalb soll das spiel/quiz besonders gut werden.
Und wie genau macht man das eigentlich den quelltext so reinkopieren?
einfach makieren und kopieren ja anscheinent nicht......
Ps ich bin erst 14 jahre alt also nicht wundern :-D

Sir Rufo 14. Mär 2013 08:01

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

Zitat von stina (Beitrag 1207329)
Danke das ihr immer so schnell Antwortet. Ich werde mir das mit dem now mal ansehn.
Und das man immer nur eine frage stzellt wusste icjh nich sorry :).
Is mein vorletzter Praktikumstag deshalb soll das spiel/quiz besonders gut werden.
Und wie genau macht man das eigentlich den quelltext so reinkopieren?
einfach makieren und kopieren ja anscheinen nicht......
Ps ich bin erst 14 jahre alt also nicht wundern :-D

Du bist ja noch neu hier, darum hast du (ungeachtet des Alters) noch "Welpenschutz" :mrgreen:

Das Einfügen von Quelltext geht so:

Den Quelltext in die Zwischenablage, dann hier so einfügen
Code:
[DELPHI]
procedure Foo;
begin
  // sth
end;
[/DELPHI]
und das Ergebnis ist das
Delphi-Quellcode:
procedure Foo;
begin
  // sth
end;

stina 14. Mär 2013 08:20

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
Delphi-Quellcode:
 program Project1;
{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  name: string;
  Zahl1, Zahl2, Eingabe, AktuelleRunde: real;
  RichtigeAntw: integer = 0;
  AnzRunden: 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;
    Writeln(FloatToStr(Zahl1) + '+' + FloatToStr(Zahl2));
    Readln(Eingabe);
    if Eingabe = Zahl1 + Zahl2 then
      Writeln('Das ist richtig')
    else
      Writeln('Das war falsch');
    Readln;
    if Eingabe = Zahl1 + Zahl2 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.
das is jetzt dann der quelltext des spiels. nich schön aber naja..... und danke für den "Welpenschutz" :-D

DeddyH 14. Mär 2013 08:29

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
Und das funktioniert? Da Du mit Fließkommazahlen (Real) rechnest, sollten eigentlich Rundungsungenauigkeiten auftreten, die einem den ganzen Spaß verderben, da Vergleiche nicht das Ergebnis liefern, das man erwartet.

Jumpy 14. Mär 2013 08:30

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

Zitat von Sir Rufo (Beitrag 1207327)
@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.:cry:
War aber zugegebenermaßen auch berechtigt.:oops:

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.

Sir Rufo 14. Mär 2013 08:37

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

Zitat von Jumpy (Beitrag 1207337)
Autsch, das hat jetzt wegetan.:cry:
War aber zugegebenermaßen auch berechtigt.:oops:

So feste wollte ich gar nicht ... zumal du auch nicht der Einzige gewesen bist ;)

stina 14. Mär 2013 08:43

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
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.

Sir Rufo 14. Mär 2013 08:44

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
@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 :mrgreen:

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.

DeddyH 14. Mär 2013 08:46

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
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.

Sir Rufo 14. Mär 2013 08:51

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

Zitat von DeddyH (Beitrag 1207342)
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 :mrgreen:

stina 14. Mär 2013 08:56

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
ok ja der quelltxt sieht echt kompliziert aus :shock:.
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

Sir Rufo 14. Mär 2013 09:11

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
Von dem Code solltest du dich nicht abschrecken lassen Der tut nix, der will nur spielen ;)

Nehmen wir mal als Beispiel
Delphi-Quellcode:
function FrageAnzahlRunden : Integer;
:

Diese Funktion soll einfach nur die gewünschte Anzahl der Runden zurückliefen.
Im Spiel selber ruft man diese Funktion einfach auf
Delphi-Quellcode:
// Wieviele Runden möchten wir denn spielen?
LRundenAnzahl := FrageAnzahlRunden;
und kümmern uns nicht weiter darum, wie diese Funktion das schafft, es ist ihre Aufgabe und basta.

Wenn wir diese Funktion schreiben, dann kümmern wir uns nicht darum, was das Spiel macht, sondern nur um die Aufgabe, die Anzahl der Runden zu ermitteln und diesen Wunsch als Rückgabe (
Delphi-Quellcode:
Result
) zu liefern.

Wenn man einen Lichtschalter benötigst, dann fragt man sich auch nicht wie der hergestellt wird, sondern erwartet einfach dass der seine Arbeit erledigt.
Wenn ein Lichtschalter hergestellt wird, dann fragt sich dort auch niemand, ob der links oder rechts von der Tür angebracht wird, sondern nur, dass der zuverlässig seinen Dienst verrichtet.

Es gibt bei der Programmierung allerdings einen ganz wichtigen Grundsatz:
Zitat:

Ein fertiges und funktionierendes Programm (egal wie geschrieben) ist immer besser als ein super strukturierter Programmaufbau der vor lauter Strukturierung nicht fertig wird

stina 14. Mär 2013 09:14

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
Achso ok und könnt ihr mir sagen was ich bei dem anderen falsch mache wenn ich das programm starten will kommt immer:
[DCC Fehler] Project1.dpr(30): E2014 Anweisung erforderlich, aber Ausdruck vom Typ 'Extended' gefunden.
Wie kann ich das ändern hab in der hilfe geguckt war aber total unverständlich.

Sir Rufo 14. Mär 2013 09:17

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

Zitat von stina (Beitrag 1207351)
Achso ok und könnt ihr mir sagen was ich bei dem anderen falsch mache wenn ich das programm starten will kommt immer:
[DCC Fehler] Project1.dpr(30): E2014 Anweisung erforderlich, aber Ausdruck vom Typ 'Extended' gefunden.
Wie kann ich das ändern hab in der hilfe geguckt war aber total unverständlich.

Zeig mal den Quelltext der diesen Fehler produziert (der Fehler sollte sich in Zeile 30 befinden).

UPDATE

Delphi-Quellcode:
 if operator=0 then zahl1+zahl2
Das ist der Fehler. Du Addierst zwei Zahlen, aber wohin soll das Ergebnis gespeichert werden. Wenn du es dir nicht merkst, warum berechnest du es dann? ;)

Evtl. eine neue Variable
Delphi-Quellcode:
Loesung : real;
und dann die Berechnung dieser zuweisen:
Delphi-Quellcode:
 

if operator=0 then Loesung := zahl1+zahl2
Und im ganzen Satz:
Delphi-Quellcode:
 operator:=Random(3);

    Loesung := 0;

    if operator=0 then Loesung := zahl1+zahl2
      else if operator=1 then Loesung := zahl1-zahl2
        else if operator=2 then Loesung := zahl1*zahl2;

    Writeln( zahl1, operator, zahl2 ); // Für die Umwandlung des Operators (0,1,2) in ('+','-','*') musst du dir noch etwas einfallen lassen

    Readln(Eingabe);
    if Eingabe = Loesung
    then Writeln('Das ist richtig')
    else Writeln('Das war falsch');
    Readln;

stina 14. Mär 2013 10:07

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
ok danke propier ich gleich mal aus :-D

stina 14. Mär 2013 10:53

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
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?

Jumpy 14. Mär 2013 11:11

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
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:
Delphi-Quellcode:
Writeln (FloatToStr(Zahl1) ,MyOperatorAsString(op) , FloatToStr(Zahl2));

lbccaleb 14. Mär 2013 11:32

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
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.

stina 14. Mär 2013 11:41

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
Danke das ist echt nett von euch mal sehn obs funktioniert.

stina 14. Mär 2013 11:44

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
@ Martin
Danke das hat funktioniert :)
Diese seite hilft einem wirklich gut wenn man probleme mit delphi hat oder besser die leute hier helfen einem echt gut

stina 15. Mär 2013 08:53

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
Ok ich habe da noch eine frage:
wie erstellt man eine bestenliste?
ich weiß das es was mit Tstringlist zu tun hat.

Sir Rufo 15. Mär 2013 08:57

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

Zitat von stina (Beitrag 1207484)
Ok ich habe da noch eine frage:
wie erstellt man eine bestenliste?
ich weiß das es was mit Tstringlist zu tun hat.

Machst du bitte dafür einen neues Thema auf?
Du kannst dort gerne auch auf diesen Thread verweisen, um nicht wieder alles dort zu wiederholen

stina 15. Mär 2013 08:58

AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
 
ok mach ich danke für den hinweis:-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:40 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