![]() |
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:
so meinte mein chef solle ich das machen
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; |
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:
und kümmern uns nicht weiter darum, wie diese Funktion das schafft, es ist ihre Aufgabe und basta.
// Wieviele Runden möchten wir denn spielen?
LRundenAnzahl := FrageAnzahlRunden; 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:
) zu liefern.
Result
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:
|
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. |
AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
Zitat:
UPDATE
Delphi-Quellcode:
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? ;)
if operator=0 then zahl1+zahl2
Evtl. eine neue Variable
Delphi-Quellcode:
und dann die Berechnung dieser zuweisen:
Loesung : real;
Delphi-Quellcode:
Und im ganzen Satz:if operator=0 then Loesung := zahl1+zahl2
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; |
AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
ok danke propier ich gleich mal aus :-D
|
AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
Delphi-Quellcode:
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?
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. |
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:
oder zur weiteren Übung kannst du dir auch noch die Fallunterscheidung mit "Case" aneignen:
function MyOperatorAsString(op:Integer):String;
begin if op=0 then Result:='+' else //usw... end;
Delphi-Quellcode:
Im Hauptprogramm stünde dann bei der Ausgabe:
function MyOperatorAsString(op:Integer):String;
begin case op of 0: Result := '+'; 1: Result := '-'; //usw... end; end;
Delphi-Quellcode:
Writeln (FloatToStr(Zahl1) ,MyOperatorAsString(op) , FloatToStr(Zahl2));
|
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. |
AW: Berechnen und ausgeben wie viele Antworten richtig waren fürs Konsolenprogramm.
Danke das ist echt nett von euch mal sehn obs funktioniert.
|
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 01:38 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