Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 15 Variablen auf Ungleichheit prüfen (https://www.delphipraxis.net/174431-15-variablen-auf-ungleichheit-pruefen.html)

Skritek 22. Apr 2013 17:57

Delphi-Version: 7

15 Variablen auf Ungleichheit prüfen
 
Hallo,

habe da ein kleines Problem. Ich schreibe zur Zeit für den Unterricht an einem kleinen Black Jack (17&4) Programm und es klappt auch alles, bis auf die Überprüfung, dass auf dem Tsch verschiedene Karten liegen.
Also möchte ich die 15 Variablen "Karte1...Karte15" auf ihre Ungleichheit prüfen.

Diese sind vorher durch die Funktion:
Code:
function Zufallskarte(Von, Bis: Integer): Integer;
begin
  Result := Random(Succ(Bis - Von)) + Von;
end;
ermittelt worden.

Wie kann ich das hinbekommen ohne jede Variable einzeln auf Karte1<>Karte2 usw. zu überprüfen? Und danach, falls eine gleiche dabei ist, eine neue Auswählen, die nochmal darauf geprüft wird?

Danke schonmal Tom

Union 22. Apr 2013 17:58

AW: 15 Variablen auf Ungleichheit prüfen
 
Du solltest die Karten am besten in einem Array oder in einer Liste verwalten.

Skritek 22. Apr 2013 18:00

AW: 15 Variablen auf Ungleichheit prüfen
 
Okay,
und wie genau ? :)
Sorry, Arrays hatten wir noch nicht ...

Union 22. Apr 2013 18:04

AW: 15 Variablen auf Ungleichheit prüfen
 
Dann speichere doch die Information als String oder in den Bits eines Integerwerts.

Skritek 22. Apr 2013 18:11

AW: 15 Variablen auf Ungleichheit prüfen
 
Wie kann ich denn eine Variable, die zZ. noch keinen Wert hat in einen String umwandeln, der in einem Array verwendet werden kann ?
Kannst du mir das nicht eventuell am Quellcode zeigen?

Könnte das nicht eventuell so aussehen ?

Code:
function Zufallskarte(Von, Bis: Integer): Integer;
var
  i,i2: byte;
  variabelspeicher: array [1...15] of string;
begin
  Result := Random(Succ(Bis - Von)) + Von;


  variabelspeicher[1]:= '<Karte1>';
  variabelspeicher[2]:= '<Karte2>';
  variabelspeicher[3]:= '<Karte3>';
  variabelspeicher[4]:= '<Karte4>';
  variabelspeicher[5]:= '<Karte5>';
  variabelspeicher[6]:= '<Karte6>';
  variabelspeicher[7]:= '<Karte7>';
  variabelspeicher[8]:= '<Karte8>';
  variabelspeicher[9]:= '<Karte9>';
  variabelspeicher[10]:= '<Karte10>';
  variabelspeicher[11]:= '<Karte11>';
  variabelspeicher[12]:= '<Karte12>';
  variabelspeicher[13]:= '<Karte13>';
  variabelspeicher[14]:= '<Karte14>';
  variabelspeicher[15]:= '<Karte15>';

  for i:=1 to 10 do
    for i2:=1 to 10 do
      if i2<>i then
          if variabelspeicher[i] = variabelspeicher[i2] then
             Result := Random(Succ(Bis - Von)) + Von;
end;
LG

Aphton 22. Apr 2013 18:19

AW: 15 Variablen auf Ungleichheit prüfen
 
Anstatt 15 Variablen zu verwenden, solltest du eine Variable verwenden~
Also anstatt:
Karte1, Karte2, ...., Karte15: Integer;

Das hier:
Karten: Array[1..15] of Integer;

Dann ermittelst du wie gewohnt die Karten eben per Zufallskarte
Also:
Karten[1] := Zufallskarte(...);
Karten[2] := Zufallskarte(...);
..

Dann kannste nämlich schön mit Schleifen durch und kucken, ob ne Karte doppelt oder mehrfach vorkommt!

Skritek 22. Apr 2013 18:23

AW: 15 Variablen auf Ungleichheit prüfen
 
und in das (...) von Zufallskarte kommt dann was? Die Kartenvariable?! Also z.B. Karte1 ?

Aphton 22. Apr 2013 18:44

AW: 15 Variablen auf Ungleichheit prüfen
 
Du hast doch geschrieben
Zitat:

Diese sind vorher durch die Funktion:
..
ermittelt worden
Genau so wie du sie bereits einmal zuvor ermittelt hast, tust du das jz auch wieder - daran ändert sich nichts!

DeddyH 22. Apr 2013 19:01

AW: 15 Variablen auf Ungleichheit prüfen
 
Das ist doch eigentlich das gleiche Prinzip wie bei den Hier im Forum suchenLottozahlen. Eine mögliche Implementierung findest Du auch hier.

Skritek 22. Apr 2013 19:48

AW: 15 Variablen auf Ungleichheit prüfen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also, das sieht dann jetzt so aus:

Code:
function Zufallskarte(Von, Bis: Integer): Integer;
var
  i,i2: byte;
  Karte: array [1..15] of Integer;
begin
  Result := Random(Succ(Bis - Von)) + Von;

  Karte[1]:= Zufallskarte(1, 52);
  Karte[2]:= Zufallskarte(1, 52);
  Karte[3]:= Zufallskarte(1, 52);
  Karte[4]:= Zufallskarte(1, 52);
  Karte[5]:= Zufallskarte(1, 52);
  Karte[6]:= Zufallskarte(1, 52);
  Karte[7]:= Zufallskarte(1, 52);
  Karte[8]:= Zufallskarte(1, 52);
  Karte[9]:= Zufallskarte(1, 52);
  Karte[10]:= Zufallskarte(1, 52);
  Karte[11]:= Zufallskarte(1, 52);
  Karte[12]:= Zufallskarte(1, 52);
  Karte[13]:= Zufallskarte(1, 52);
  Karte[14]:= Zufallskarte(1, 52);
  Karte[15]:= Zufallskarte(1, 52);

  for i:=1 to 10 do
    for i2:=1 to 10 do
      if i2<>i then
          if Karte[i] = Karte[i2] then
             Result := Random(Succ(Bis - Von)) + Von;
end;
Ist da irgendwo ein Fehler, weil wenn ich das so kopiliere und die erste Karte ziehe kommt ein Fehler, von wegen Stack Überlauf ( Im Projetkt ....exe ist eine Exeption der Klasse EStackOverflow aufgetreten. ), was soll ich tun ?!

Habe in den Anhang mal das gesamte Projekt reingetan, also wer Zeit hat, kann es sich gerne mal anschauen... Kommen noch diverse andere Fehler, wo ich die Lösung nicht weiß ...

edit:

Also keine richtigen Fehler, sondern nur ?logische? also die, die nicht vom Kompiler erkannt werden. z.B. dass es ab der 3. vom Comuter gezogenen Karte nicht mehr die Endkriterien wie SummeCu < 21 oder so ähnliches überprüft, sondern einfach aufhört...


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr.
Seite 1 von 2  1 2      

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