Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi If Abfrage (https://www.delphipraxis.net/139968-if-abfrage.html)

Schnittcher 9. Sep 2009 11:16


If Abfrage
 
Hallo,

ich habe noch eine Frage zu der If Abfrage.

Delphi-Quellcode:
procedure TZahlen.get_Punkte(const Punkte: Integer);
begin
  FPunkte := Punkte;
end;

function TZahlen.vergleichen: string;
begin
  if FSpielerZahl1 = FComputerZahl1 then
  begin
    FPunkte := FPunkte + 1;
    Result := 'Sie haben gewonnen!'
  end;
  if FSpielerZahl2 = FComputerZahl2 then
  begin
    FPunkte := FPunkte + 1;
    Result := 'Sie haben gewonnen!'
  end;
  if FSpielerZahl3 = FComputerZahl3 then
  begin
    FPunkte := FPunkte + 1;
    Result := 'Sie haben gewonnen!'
  end;

end;
So sieht es jetzt aus und ich möchte eine Ausageb haben wenn keine der Abfragen stimmt.
Dann soll die Meldung "Sie haben verloren!" kommen.

Gruß,
Schnittcher

Forlan 9. Sep 2009 11:17

Re: If Abfrage
 
Stichwort: else

...

Evtl. solltest du dir mal die Delphi Tutorials anschauen. Denn eine "if" "then" "else" Abfrage ist nun wirklich Basiswissen ;)

XXcD 9. Sep 2009 11:19

Re: If Abfrage
 
Versuchs ungefähr so:
Delphi-Quellcode:
procedure TZahlen.get_Punkte(const Punkte: Integer);
begin
  FPunkte := Punkte;
end;

function TZahlen.vergleichen: string;
begin
 if (FSpielerZahl1 = FComputerZahl1) or (FSpielerZahl2 = FComputerZahl2) or (FSpielerZahl3 = FComputerZahl3) then
 begin
  if FSpielerZahl1 = FComputerZahl1 then
  begin
    FPunkte := FPunkte + 1;
    Result := 'Sie haben gewonnen!'
  end;
  if FSpielerZahl2 = FComputerZahl2 then
  begin
    FPunkte := FPunkte + 1;
    Result := 'Sie haben gewonnen!'
  end;
  if FSpielerZahl3 = FComputerZahl3 then
  begin
    FPunkte := FPunkte + 1;
    Result := 'Sie haben gewonnen!'
  end;
 end
 else
 begin
 Result := 'Sie haben verloren!'
 end;
end;

Schnittcher 9. Sep 2009 11:19

Re: If Abfrage
 
Hallo,

das ist klar, aber geht das denn jetzt?
Weil ich 3 verschiedene Abfragen habe.

Gruß,
Schnittcher

Forlan 9. Sep 2009 11:20

Re: If Abfrage
 
Zitat:

Zitat von Schnittcher
Hallo,

das ist klar, aber geht das denn jetzt?
Weil ich 3 verschiedene Abfragen habe.

Gruß,
Schnittcher

So wie es XXcD gemacht hat. Einfach das ganze mit einem Begin End block "umklammern" ;)

Satty67 9. Sep 2009 11:20

Re: If Abfrage
 
oder so (ungetestet):
Delphi-Quellcode:
if (FSpielerZahl1 = FComputerZahl1)
or (FSpielerZahl2 = FComputerZahl2)
or (FSpielerZahl3 = FComputerZahl3) then
begin
  FPunkte := FPunkte + 1;
  Result := 'Sie haben gewonnen!'
end
else
begin
  Result := 'Sie haben verloren!'
end;
€: OK, sehe gerade das es mehrmals Punkte gibt, nicht nur einmal...

Sharky 9. Sep 2009 11:21

Re: If Abfrage
 
Hai,

warum nicht einfach die "ausnahme" als Vorgabewert?

Delphi-Quellcode:
function TZahlen.vergleichen: string;
begin
  Result := 'Sie haben verloren';
  if FSpielerZahl1 = FComputerZahl1 then
  begin
    FPunkte := FPunkte + 1;
    Result := 'Sie haben gewonnen!'
  end;
  if FSpielerZahl2 = FComputerZahl2 then
  begin
    FPunkte := FPunkte + 1;
    Result := 'Sie haben gewonnen!'
  end;
  if FSpielerZahl3 = FComputerZahl3 then
  begin
    FPunkte := FPunkte + 1;
    Result := 'Sie haben gewonnen!'
  end;

end;

Forlan 9. Sep 2009 11:23

Re: If Abfrage
 
[OT] Ihr glaubt garnicht wie froh ich war mal "If Abfrage" im Titel zu lesen anstatt "If Schleife" :mrgreen: [/OT]

Schnittcher 9. Sep 2009 11:24

Re: If Abfrage
 
Hallo,

alles klar danke für die schnellen Antworten.

Eine Frage jetzt noch wenn ich sagen will "Sie haben 2 Zahlen richtig erraten!"

Das ich prüfe ob FPunkte zum Beispiel um 1 größer geworden ist oder um 2 oder um 3?

Und wenn größer um 2 dann: "Sie haben " Zahlen richtig erraten!"

Kann man das so machen?

Gruß,
Schnittcher

Satty67 9. Sep 2009 11:30

Re: If Abfrage
 
wenn Du die Anzahl der erratenen Punkte in einer Integer-variable hast (z.B. points), kannst Du einen String mit Format bilden:

ShowMessage(Format('Sie haben %d Zahlen richtig erraten!',[Points]));

Schnittcher 9. Sep 2009 11:34

Re: If Abfrage
 
Hallo,

ich habe es jetzt so gelöst.

Delphi-Quellcode:
function TZahlen.VergleichePunkteAlt: string;
begin
  if FPunkte - FPunkte_alt = 1 then
    Result := 'Sie haben eine Zahl richtig erraten!'
  else if FPunkte - FPunkte_alt = 2 then
    Result := 'Sie haben zwei Zahlen richtig erraten!'
  else if FPunkte - FPunkte_alt = 1 then
  Result:= 'Sie haben zwei Zahlen richtig erraten!'
end;
Gruß,
Schnittcher

Die Muhkuh 9. Sep 2009 11:41

Re: If Abfrage
 
Zitat:

Zitat von Schnittcher
Hallo,

ich habe es jetzt so gelöst.

Delphi-Quellcode:
function TZahlen.VergleichePunkteAlt: string;
begin
  if FPunkte - FPunkte_alt = 1 then
    Result := 'Sie haben eine Zahl richtig erraten!'
  else if FPunkte - FPunkte_alt = 2 then
    Result := 'Sie haben zwei Zahlen richtig erraten!'
  else if FPunkte - FPunkte_alt = 1 then
  Result:= 'Sie haben zwei Zahlen richtig erraten!'
end;
Gruß,
Schnittcher

Da ist aber ein dicker Fehler drin.

Die letzte If-Abfrage ist wie die erste und wenn die erste schon nicht klappt, wird die letzte genau so wenig klappen. Außerdem fehlt noch, ob man nichts erraten hat.

Schnittcher 9. Sep 2009 11:48

Re: If Abfrage
 
Hallo,

ja stimmt da muss eine 3 hin. Aber geht es den so?

Gruß,
Schnittcher

Luckie 9. Sep 2009 11:50

Re: If Abfrage
 
Und für den Fall, dass gar nichts zutrifft:
Delphi-Quellcode:
function TZahlen.VergleichePunkteAlt: string;
begin
  if FPunkte - FPunkte_alt = 1 then
    Result := 'Sie haben eine Zahl richtig erraten!'
  else if FPunkte - FPunkte_alt = 2 then
    Result := 'Sie haben zwei Zahlen richtig erraten!'
  else if FPunkte - FPunkte_alt = 3 then
    Result:= 'Sie haben drei Zahlen richtig erraten!'
  else
    Result := 'Verloren';
end;

Klaus01 9. Sep 2009 11:50

Re: If Abfrage
 
Zitat:

Zitat von Schnittcher
Hallo,

ja stimmt da muss eine 3 hin. Aber geht es den so?

Gruß,
Schnittcher

.. im Prinzip schon, nur wird es etwas mühsam wenn Du
das für jede mögliche Anzahl von Punkten und Spielgewinnen so machen
willst.

Grüße
Klaus

BAMatze 9. Sep 2009 11:54

Re: If Abfrage
 
Zitat:

Zitat von Die Muhkuh
Zitat:

Zitat von Schnittcher
Hallo,

ich habe es jetzt so gelöst.

Delphi-Quellcode:
function TZahlen.VergleichePunkteAlt: string;
begin
  if FPunkte - FPunkte_alt = 1 then
    Result := 'Sie haben eine Zahl richtig erraten!'
  else if FPunkte - FPunkte_alt = 2 then
    Result := 'Sie haben zwei Zahlen richtig erraten!'
  else if FPunkte - FPunkte_alt = 1 then
  Result:= 'Sie haben zwei Zahlen richtig erraten!'
end;
Gruß,
Schnittcher

Da ist aber ein dicker Fehler drin.

Die letzte If-Abfrage ist wie die erste und wenn die erste schon nicht klappt, wird die letzte genau so wenig klappen. Außerdem fehlt noch, ob man nichts erraten hat.

Wie wäre es mit einer case-Anweisung:

Delphi-Quellcode:
function TZahlen.VergleichePunkteAlt: string;
begin
  case FPunkte - FPunkte_alt of
  0: Result := 'Sie haben keine Zahl richtig erraten!';
  1: Result := 'Sie haben eine Zahl richtig erraten!';
  2: Result := 'Sie haben 2 Zahlen richtig erraten!';
  3: Result := 'Sie haben 3 Zahlen richtig geraten!';
  end;
  else Result := 'Es ist ein Fehler in der Berechnung aufgetreten!';
Sieht wie ich finde deutlich besser aus, als die verschachtelten if-Anweisungen.

MfG
BAMatze

[Edit1] Muhkuh´s Einwand mit keinem Treffer hinzugefügt[/Edit]

Schnittcher 9. Sep 2009 11:56

Re: If Abfrage
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

mehr gibt es ja nicht.

Das mit dem case finde ich auch gut.

Das schaue ich mir mal an. Danke.

so eine Frage noch:

Delphi-Quellcode:
  if FRunden = FRundenEingabe then
  ShowMessage(Format('Sie haben %d Punkte erreicht!',[punkte]))
  else
  begin
  SpielerZahlen[0] := StrToInt(edZahl1.Text);
  SpielerZahlen[1] := StrToInt(edZahl2.Text);
  SpielerZahlen[2] := StrToInt(edZahl3.Text);
  Zahlen := TBackupClassesFactory.Zahlen;
  Zahlen.SpielerZahl := SpielerZahlen;
  Zahlen.set_ComputerZahlen;
  Zahlen.vergleichen;
  lbAussage.Caption := Zahlen.VergleichePunkteAlt;
  FPunkte := FPunkte + Zahlen.HolePunkte;
  Zahlen.get_Punkte(FPunkte);
  lbPunkte.Caption := IntToStr(Zahlen.HolePunkte);
  end;
Sieht jemand hier einen Fehler?

Fehler ist im Anhang.

Gruß,
Schnittcher

nahpets 9. Sep 2009 12:07

Re: If Abfrage
 
Hallo,

wo ist den das Create von TBackupClassesFactory?

Die Fehlermeldung sieht so aus, als würdest Du auf eine nichtinitialisierte Variabel zugreifen.

Schnittcher 9. Sep 2009 12:17

Re: If Abfrage
 
Hallo,

das kam erst nach der If Abfrage, das war der Fehler.
Danke.

Gruß,
Schnittcher


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