Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Arrays Verschachteln

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.01.2005, 13:18 Uhr
~Maks
Gast


Hallo zusammen,

Wollte mal eine wahrscheinlich typische Anfängerfrage stellen, hoffe aber das Thema gabs hier so noch nicht:
Möchte ein Roulette Programm schreiben.
Dazu habe ich alle relevanten Zahlen in eindimensionale Felder gespeichert.
Erst wird die Größe des Arrays festgestellt und dann werden die einzelnen Zahlen die z.B. in Rot vorkommen in einer For-Schleife aufgelistet.
Mir ist klar, daß diese Methode programmiertechnisch typisch Anfänger ist, aber ich wüßte momentan nicht wie man das optimaler lösen kann..?

Später sollen dann alle Arrays durchsucht werden, ob die gefallene Zahl darin enthalten ist.



C++:

    int Schwarz    [] = {1,3,5,7,9,12,14,16,18,19,21,23,25, 27,30,32,34,36};
    int Rot        [] = {2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35};
    int Gerade    [] = {2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36};
    int Ungerade         [] = {1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35};
    int Manque    [] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18};
    int Passe    [] = {19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36};

//erst mal Groesse des Arrays feststellen
int GroesseSchwarz = sizeof(Schwarz)/sizeof(Schwarz[0]); cout<<"groesse von Schwarz: "<< GroesseSchwarz <<"\n";

int GroesseRot = sizeof(Rot)/sizeof(Rot[0]); cout<<"groesse von Rot: "<< GroesseRot <<"\n";

// Auflisten aller Chancen die in Frage kommen
cout << "Schwarz: ";
        for (int ch = 0; ch < GroesseSchwarz; ch=ch+1)
    {
            cout << Schwarz[ch] << ", ";
    }
cout << endl;

cout << "Rot: ";
        for (int ch = 0; ch < GroesseRot; ch=ch+1)
    {
            cout << Rot[ch] << ", ";
    }
cout << endl;



usw.

Danke für die Mühe im voraus!

Maks

Dieser Post wurde am 20.01.2005 um 18:26 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.01.2005, 13:34 Uhr
Tommix



Hallo,
irgendwie steht bei mir einer auf der Leitung - ich finde Deine Frage nicht ?!

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.01.2005, 13:56 Uhr
Oliver
S2-Pixelgeneral


@Tommix:


Zitat:

aber ich wüßte momentan nicht wie man das optimaler lösen kann..?




Gerade und ungerade kannst du z.B. so bestimmen:


C++:
// gerade
for(int i=0;i<ANZAHL_ROULETTE_ZAHLEN;++i)
if(!(i%2)) cout << i;
// gerade
for(int i=0;i<ANZAHL_ROULETTE_ZAHLEN;++i)
if(i%2) cout << i;


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )

Dieser Post wurde am 20.01.2005 um 14:11 Uhr von Oliver editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.01.2005, 14:17 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Gerade und ungerade kannst du z.B. so bestimmen:


und nicht nur das... für gerade/ungerade &1 verwenden (oder modulo 2)...
und >18 oder >= 18 sollte auch wesentlich einfacher sein als dafür ein array vorzuhalten...
wenn etwas nicht schwarz ist ist es automatisch rot (von 0 mal abgesehen) also reicht ein array dafür...
eventuell gibts auch ne expliziete formel beim roulette um festzustellen ob schwarz oder rot weiss ich aber nicht
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.01.2005, 18:04 Uhr
~Maks
Gast


Danke für die Anregungen, das mit Gerade und Ungerade ist schon mal ein guter Punkt.
In ähnlicher Form hab ich das dann mit den Plein und Dreier Kombinationen gemacht.

Meine FRAGE (stimmt ist nicht ganz erkennbar) war hauptsächlich darauf bezogen,
daß ich zum
// Auflisten aller Chancen die in Frage kommen
für Schwarz und für Rot und für Gerade und.... immer eine neue Schleife in den Quellcode schreiben müßte, um endlich komplett alle aufzulisten und sämtliche Arrays durchzugehen.
Das heißt ich müßte insgesamt mindestens 17 oder 18 Schleifen mit Copy und Paste aufführen. Immer gleicher Text. Das muß doch irgendwie auch anders funktionieren?

Hier in dem Code schon mal ZWEI von den vielen Schleifen.
17 oder 18 werden es, weil ich ja nicht nur Schwarz, Rot, Gerade, Ungerade, Manque und Passe habe, sondern auch noch Plein, dreier, vierer, sechser, 3 Kolonnen, 3 Dutzend und was weiß ich noch alles.



Code:
// Auflisten aller Chancen die in Frage kommen
cout << "Schwarz: ";
        for (int ch = 0; ch < GroesseSchwarz; ch=ch+1)
    {
            cout << Schwarz[ch] << ", ";
    }
cout << endl;

cout << "Rot: ";
        for (int ch = 0; ch < GroesseRot; ch=ch+1)
    {
            cout << Rot[ch] << ", ";
    }
cout << endl;



Wenn ich dann später beim durchsuchen feststellen will an welcher Stelle denn nun die Zahlen gefunden wurden, müßte ich ja irgendeine Sprungmarke haben, wie z.B. gehe in den Array Namen Schwarz und druck mir das 5. Element.

Ohne meine vielen Schleifen weiß ich aber nicht wie das gehen könnte...
Vielleicht die Namen Schwarz und Rot und.. selbst in ein Array speichern?
Aber wie?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.01.2005, 18:08 Uhr
~Maks
Gast


Vector Funktion vielleicht?
Dann könnte ich Int und string zusammen verwenden, aber ne richtige Vorstellung hab ich irgendwie nicht, wie ich dann z.B. Schwarz, 5. Element konkret ansprechen soll.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.01.2005, 10:52 Uhr
Th



Definier dir ein zweidimensionales Array:


C++:
enum Folgen { Schwarz, Rot, Gerade, Ungerade, /*... ,*/ MaxFolgen }; // hier kannst du noch weitere eintragen

const int MaxWerte = 20; // oder auch höher

int Werte[MaxFolgen][MaxWerte] =
{
    {1,3,5,7,9,12,14,16,18,19,21,23,25, 27,30,32,34,36},
    {2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35},
    {2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36},
    {1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35}

    // ... Platz für weitere
};

void func()
{
     for(int i=0; i<MaxFolgen; i++)
     {
         cout << "Werte für Folge " << i << ": ";
         for(int j=0; j<MaxWerte && Werte[i][j] > 0; j++)
            cout << Werte[i][j] + ", ";
         cout << endl;
}



Zu beachten ist nur, daß bei statischen Arrays die Default-Werte "0" sind, du also explizit auf 0 abfragen solltest, da die einzelnen Arrays nun immer "MaxWerte" lang sind.
Da die "0" bei Roulette ja auch vorkommt (ich weiß nur nicht, ob sie in einer Folge definiert ist), kannst du auch eine andere Zahl (z.B. "-1") verwenden, die du dann am Ende jeden Arrays setzen mußt (um die Arrays auf "MaxWerte" aufzufüllen).

Mittels des "enum Folgen" kannst du auch explizit auf einzelne Arrays zugreifen, z.B. "Werte[Schwarz][j]".

Viel Spaß noch beim Spielen

Dieser Post wurde am 21.01.2005 um 10:53 Uhr von Th editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
21.01.2005, 14:50 Uhr
~Maks
Gast


Da kann ich nur sagen vielen Dank! "enum", das war genau der Datentyp nach dem ich gesucht hatte, denn der umgeht elegant (wie ich jetzt nachgelesen habe) genau das String-INT-Problem, das ich mit Schwarz, Gerade und der Zuweisung zu einer Integer Zahl gehabt hätte.
Und dabei war DER Satz

Zitat von Th:

Mittels des "enum Folgen" kannst du auch explizit auf einzelne Arrays zugreifen, z.B. "Werte[Schwarz][j]".


wohl der Wichtigeste von allen.
"Arrays immer auf Null abfragen" ist zwar komisch wegen der Versetzung, aber das lass ich so, man soll ja flexibel bleiben.

Nur mit DEM Satz:

Zitat von Th:

Da die "0" bei Roulette ja auch vorkommt (ich weiß nur nicht, ob sie in einer Folge definiert ist), kannst du auch eine andere Zahl (z.B. "-1") verwenden, die du dann am Ende jeden Arrays setzen mußt (um die Arrays auf "MaxWerte" aufzufüllen).


komm ich noch ein wenig ins Grübeln.
Was bedeutet in dem Zusammenhang denn die -1 am Schluß einer jeden Auflistung?
Heißt das, wenn eine Auflistung (z.B. Schwarz {1,3,5,7,9,12,14,16,18,19,21,23,25, 27,30,32,34,36}) mal kürzer als diese momentan glücklich "gewählten" 18 Elemente wird, dann werden die restlichen Elemente bis zum Maxwert automatisch mit Null aufgefüllt? Und ich sollte dann die -1 hintenanstellen, damit das nicht passiert, richtig?

Die Null ist auf jeden Fall in einer Folge schon definiert (nämlich spätestens bei "Plein") allerdings werden da die vorkommenden Zahlen (alle Zweierkombinationen) nicht in einem Array aufgelistet, sondern berechnet. Mal sehn, wie ich das dann mit der enum-Funktion kombinieren kann.

Auf jeden Fall super Dank für die genaue Auflistung, damit hab ich jetzt mehr gelernt als wenn jemand bloß gesagt hätte, benutz die enum-Funktion. Der entscheidende Satz war ja wie schon gesagt:

Zitat von Th:

Mittels des "enum Folgen" kannst du auch explizit auf einzelne Arrays zugreifen, z.B. "Werte[S c h w a r z][j]".



Grüße
Markus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.01.2005, 15:30 Uhr
Th



Schön, daß ich dir helfen konnte.
Ich bekomm sonst so wenig Dank für meine Arbeit ... schnief

Das tut mal richtig gut...

Bzgl. der -1: ja, das hast du richtig verstanden.

Beispiel:

C++:
int array[5] = { 1, 2, 3 };   // automatisch mit zwei Nullen aufgefüllt
int array[5] = { 1, 2, 3, -1, -1 }; // alle Werte von Hand gesetzt



Leider kann man den Standardwert nicht selbst bestimmen, d.h. der Compiler erzeugt immer Nullen.

Mittels des STL-Datentyps "std::vector" kann man auch dynamische Arrays verwenden, aber für dein Projekt nicht nötig, da die Arrays ja fest sind und nicht während des Programms verändert werden.

Falls noch Fragen sind, ich schaue weiter ab und zu ins Forum...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: