Delphi-PRAXiS
Seite 3 von 4     123 4      

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 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


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 Uhr.
Seite 3 von 4     123 4      

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