Sandmännchen: 52 Karten, Wert + Farbe in Arrays... elegantere Lösung?

Hallo,

ich möchte in einem Programm alle Karten eines 52 Blatt Deck einbringen.
Durch Zufall wird dann eine Karte z.B. 8 Dame gezeigt.

Ich habe mir Überlegt, dies in einem Array zu machen.

Ein Array mit 13 Feldern für die Werte 2 - A und ein Array mit 4 Feldern für die Farben PIK,KARO,KREUZ,HERZ.

Dann erzeuge ich 2 Zufallszahlen (RND *13) und (RND *4)....
Zeige dann die Karte + Farbe an:

karteWert(zufall1) + karteFarbe(zufall2)

(Ich lege jetzt keinen Wert auf eine bestimmte Programmiersprache)

Gibt es eine bessere Lösung?

Danke!

  1. Hallo,

    Dann erzeuge ich 2 Zufallszahlen (RND *13) und (RND *4)....
    Zeige dann die Karte + Farbe an:

    karteWert(zufall1) + karteFarbe(zufall2)

    demnach musst du deinen zufallswert noch überprüfen, denn es kann durchaus vorkommen, das dann 3x die herz 5 entsteht ...

    MfG. Christoph Ludwig

    --
    Wo die Sprache aufhört, fängt die Musik an...
    Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
    Go to this
    1. @@minicrispie:

      demnach musst du deinen zufallswert noch überprüfen, denn es kann durchaus vorkommen, das dann 3x die herz 5 entsteht ...

      Dann kann es aber vorkommen, dass die Schleife sehr lange läuft. (Wenn auch die Wahrscheinlichkeit, dass nach dem n-ten Durchlauf immer noch nicht alle 52 Karten ausgewählt wurden, mit wachsendem n gegen 0 geht.)

      Besser wäre es, ein Array mit allen 52 Karten zu haben und darauf die shuffle-Methode anzuwenden.

      Wenn die gewählte Programmiersprache noch keine solche Methode bereitstellt, muss man sie eben selbst implementieren.

      Live long and prosper,
      Gunnar

      --
      Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
  2. ich möchte in einem Programm alle Karten eines 52 Blatt Deck einbringen.
    Durch Zufall wird dann eine Karte z.B. 8 Dame gezeigt.

    Ich habe mir Überlegt, dies in einem Array zu machen.

    Ein Array mit 13 Feldern für die Werte 2 - A und ein Array mit 4 Feldern für die Farben PIK,KARO,KREUZ,HERZ.

    Warum unbedingt zwei Arrays?
    Eins reicht.
    array = alle_karten und dann Zufallszahl * array.length

    Struppi.

  3. Gibt es eine bessere Lösung?

    Du kannst auch eine einzige Zufallszahl verwenden:

      
    #include<stdio.h>  
    #include<stdlib.h>  
      
    int main(int argc, char *argv[]) {  
      int x, farbe, zahl;  
      char *sf[] = {"karo", "herz", "pik", "kreuz"};  
      char *sz[] = {"zwei", "drei", "vier", "fuenf", "sechs",  
                    "sieben", "acht", "neun", "zehn",  
                    "Bube", "Dame", "Koenig", "Ass"};  
      
      if(argc!=2) return 1;  
      srandom(atof(argv[1]));  
      x = (int)(52*(double)random()/RAND_MAX);  
      farbe = x/13;  
      zahl  = x%13;  
      
      printf("Die Karte lautet %s %s!\n", sf[farbe], sz[zahl]);  
      return 0;  
    }  
    
    

    Aufruf mit Integer-Zahl als Argument
    für den Random-Seed...

    MfG

    Andreas