<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[kompakter programmieren mit Arrays?]]></title><description><![CDATA[<p>Also das hier ist ein kleiner Auszug aus einem Roulette Programm.<br />
Nach Feststellen der Array Größe, wir für jede einzelne Setzmöglichkeit<br />
(für Schwarz, für Rot, für Gerade für ungerade, für....) eine eigene For-Schleife aufgerufen, die die Elemente einzeln durchgeht (und auf der Konsole ausgibt).</p>
<p>PROBLEM ist jetzt, wenn ich später sagen will, die Zufallszahl war z.B. &quot;14&quot;, durchsuche alle Arrays, ob die Zahl 14 vorkommt, wie vermeide ich die ganzen For-Schleifen (// Auflisten aller Chancen die in Frage kommen) und wie könnte ich mit einer Doppelschleife oder sonstigen Tricks den Code verkürzen? Vektoren vielleicht?<br />
Ich weiß, ich kann Gerade und ungerade mit einer Formel berechnen lassen, aber<br />
um die massenhaft Schleifen komme ich damit auch nicht rum.<br />
Wie kann man das anders lösen?</p>
<p>Danke für die Mühe im voraus!</p>
<pre><code>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&lt;&lt;&quot;groesse von Schwarz: &quot;&lt;&lt; GroesseSchwarz &lt;&lt;&quot;\n&quot;;

int GroesseRot = sizeof(Rot)/sizeof(Rot[0]); cout&lt;&lt;&quot;groesse von Rot: &quot;&lt;&lt; GroesseRot &lt;&lt;&quot;\n&quot;;

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

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

.
.
....usw.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/98654/kompakter-programmieren-mit-arrays</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 14:22:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/98654.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Jan 2005 09:17:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to kompakter programmieren mit Arrays? on Fri, 21 Jan 2005 09:17:25 GMT]]></title><description><![CDATA[<p>Also das hier ist ein kleiner Auszug aus einem Roulette Programm.<br />
Nach Feststellen der Array Größe, wir für jede einzelne Setzmöglichkeit<br />
(für Schwarz, für Rot, für Gerade für ungerade, für....) eine eigene For-Schleife aufgerufen, die die Elemente einzeln durchgeht (und auf der Konsole ausgibt).</p>
<p>PROBLEM ist jetzt, wenn ich später sagen will, die Zufallszahl war z.B. &quot;14&quot;, durchsuche alle Arrays, ob die Zahl 14 vorkommt, wie vermeide ich die ganzen For-Schleifen (// Auflisten aller Chancen die in Frage kommen) und wie könnte ich mit einer Doppelschleife oder sonstigen Tricks den Code verkürzen? Vektoren vielleicht?<br />
Ich weiß, ich kann Gerade und ungerade mit einer Formel berechnen lassen, aber<br />
um die massenhaft Schleifen komme ich damit auch nicht rum.<br />
Wie kann man das anders lösen?</p>
<p>Danke für die Mühe im voraus!</p>
<pre><code>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&lt;&lt;&quot;groesse von Schwarz: &quot;&lt;&lt; GroesseSchwarz &lt;&lt;&quot;\n&quot;;

int GroesseRot = sizeof(Rot)/sizeof(Rot[0]); cout&lt;&lt;&quot;groesse von Rot: &quot;&lt;&lt; GroesseRot &lt;&lt;&quot;\n&quot;;

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

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

.
.
....usw.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/702127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/702127</guid><dc:creator><![CDATA[Maks]]></dc:creator><pubDate>Fri, 21 Jan 2005 09:17:25 GMT</pubDate></item><item><title><![CDATA[Reply to kompakter programmieren mit Arrays? on Fri, 21 Jan 2005 10:08:42 GMT]]></title><description><![CDATA[<p>-&gt; sind denn die zahlen beim roulette nicht immer an der selben position?<br />
-&gt; warum ermittelst du die grösse des array zur laufzeit, wenn diese doch fix ist?<br />
-&gt; als programmierer weisst du doch wo die 14 drin steht, d.h.<br />
-&gt; 14 ist gerade und kommt nur in Schwarz, Gerade und Manque<br />
-&gt; damit braucht du nur diese 3 Array zu durchsuchen</p>
<p>besser ist natürlich nur ein Array zu nehmen (von 1-36) und dort für jede zahl so eine art zugehörigkeitsflag zu setzen. wenn du dann deine zahl hast, greifst du mit dieser als index einfach auf das array zu und wertest das enthaltene flag aus. damit weist du, wo die zahl dazu gehört. und hast nicht mal eine schleife benötigt!</p>
<p>könnte mir das in etwa so vorstellen...</p>
<pre><code class="language-cpp">// mögliche Flags
#define ROULETTE_BLACK  0x01
#define ROULETTE_RED    0x02
#define ROULETTE_EVEN   0x04
#define ROULETTE_ODD    0x08
#define ROULETTE_PASSE  0x10
#define ROULETTE_MANQUE 0x20

int Zahlen[36] = { ROULETTE_BLACK | ROULETTE_ODD | ROULETTE_MANQUE,  // 1 
                   ROULETTE_RED   | ROULETTE_ODD | ROULETTE_MANQUE,  // 2
                   ... // usw. fuer den Rest

// Zugriff dann
int zahl  = 14;
int flags = Zahlen[Zahl - 1]; // Index beginnt bei 0, daher noch -1 

// Zahl ist schwarz
if (flags &amp; ROULETTE_BLACK)
...

// Zahl ist rot
if (flags &amp; ROULETTE_RED) 
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/702164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/702164</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Fri, 21 Jan 2005 10:08:42 GMT</pubDate></item><item><title><![CDATA[Reply to kompakter programmieren mit Arrays? on Fri, 21 Jan 2005 16:22:36 GMT]]></title><description><![CDATA[<p>Danke für die ausführliche Antwort!<br />
Hmm, warum hab ich mich mal wieder auf die aufwendigere Roulettezahlen-Darstellung verlegt. Deinen Ansatzz, daß man eher Werte der jeweiligen Zahl zuordnen sollte als andersrum, so wie ich hatte ich auch schon mal, aber leider wieder verworfen.<br />
Ich find aber Deine Methode besser. Vor Allem mit den Flags.</p>
<p>Es gibt nur zwei Sachen mit denen ich irgendwie nichts anfangen kann:<br />
Was bedeuten die<br />
0x01<br />
0x02<br />
0x04<br />
0x08<br />
0x10<br />
0x20<br />
hinter dem #define Befehl? Mit #define wird doch ein konstanter Ausdruck festgelegt? Ist das der dafür reservierte Speicherplatz?</p>
<p>und bei DEM Ausdruck</p>
<pre><code>int Zahlen[36] = { ROULETTE_BLACK | ROULETTE_ODD | ROULETTE_MANQUE,  // 1 
                   ROULETTE_RED   | ROULETTE_ODD | ROULETTE_MANQUE,  // 2 
                   ... // usw. fuer den Rest
</code></pre>
<p>kenn ich z.B. nicht das Pipe | Zeichen. Was bewirkt das hier?<br />
Denn bei zweidimensionalen Arrays wird das ja anders aufgelistet...</p>
<pre><code>xyz = {{RB, RO, RM}, {RD, RO, RM}}...
</code></pre>
<p>und wenn ichs dann richtig verstanden habe, braucht man ja zumindest so viele IF-Abfragen wie es Setzmöglichkeiten gibt, also ein IF für Schwarz, für Rot, für Gerade usw., stimmts? Naja das KANN man eben nicht vereinfachen, klar.</p>
<p>Aber der Ansatz ist gut, ich versuch mal was draus zu machen (sofern ich das | Zeichen verstehe...</p>
<p>Soweit ichs verstanden habe:</p>
<p>wenn die Zahl, die vom Zufallsgenerator erzeugt wurde z.B. die 14 ist, wird der 14. Wert (14-1) im Array &quot;Zahlen&quot; aufgerufen, bei dem dann z.B. die Flags stehen: die Zahl 14 ist Schwarz, Gerade, und Manque usw.</p>
<p>nur was soll dann bei dem</p>
<pre><code>if (flags &amp; ROULETTE_BLACK)
</code></pre>
<p>rauskommen?<br />
Wenn die Bedingung flags erfüllt ist (also der 14. Wert im Array Zahlen gefunden ist) und zugleich Roulette_BLACK erfüllt ist (also wenn die Zahl schwarz ist, dann soll WAS passieren?</p>
<p>Ich dachte das Roulette_Black ist überflüssig, weil ich durch das Flag schon an der richtigen Stelle im Array Zahlen bin und dort schon steht, daß<br />
die Zahl ja schwarz ist?</p>
<p>Wo ist mein Denkfehler?</p>
<p>Ansonsten finde ich DEN Ansatz wie gesagt verfolgenswert besser, danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/702605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/702605</guid><dc:creator><![CDATA[Maks]]></dc:creator><pubDate>Fri, 21 Jan 2005 16:22:36 GMT</pubDate></item><item><title><![CDATA[Reply to kompakter programmieren mit Arrays? on Fri, 21 Jan 2005 21:41:59 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>Mit #define wird doch ein konstanter Ausdruck festgelegt?</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>schau mal bitte nach was #define bedeutet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>und mit 0x01/0x02/0x04 ..... sind die einzelnen Bits gemeint<br />
(schau dir das mal binaer an)</p>
<p>| == oder</p>
<p>Das schreit doch ein bischen nach Grundlagen oder <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>MfG<br />
Klaus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/702840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/702840</guid><dc:creator><![CDATA[KlausB]]></dc:creator><pubDate>Fri, 21 Jan 2005 21:41:59 GMT</pubDate></item><item><title><![CDATA[Reply to kompakter programmieren mit Arrays? on Sat, 22 Jan 2005 00:30:05 GMT]]></title><description><![CDATA[<p>Stimmt, es schreit. Gibt noch einiges nachzuholen.<br />
Inzwischen hab ich mich auch ein wenig schlauer gemacht. Wenn auch das Wissen, daß &quot;| = oder&quot; heißt nicht gleich zum Aha-Erlebnis geführt hat.<br />
Wollte nur diesen guten Ansatz komplett richtig verstehen und nicht einfach so drüberhudeln , nach dem Motto, danke, jetzt weiß ich wies geht und das wars.<br />
Im Gegenteil!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/702900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/702900</guid><dc:creator><![CDATA[Maks]]></dc:creator><pubDate>Sat, 22 Jan 2005 00:30:05 GMT</pubDate></item><item><title><![CDATA[Reply to kompakter programmieren mit Arrays? on Sat, 22 Jan 2005 08:44:30 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich wollte noch anmerken, daß überhaupt keine Notwendigkeit besteht, die Konstanten über Präprozessor-Direktiven zu definieren.<br />
Also weg mit dem Faustkeil und her mit einem Aufzählungstyp!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/702942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/702942</guid><dc:creator><![CDATA[dschensky]]></dc:creator><pubDate>Sat, 22 Jan 2005 08:44:30 GMT</pubDate></item><item><title><![CDATA[Reply to kompakter programmieren mit Arrays? on Sat, 22 Jan 2005 15:47:56 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#define ROULETTE_BLACK  0x01  // 0x01 (hex) ==  1 (dezimal)
#define ROULETTE_RED    0x02  // 0x02 (hex) ==  2 (dezimal) 
#define ROULETTE_EVEN   0x04  // 0x04 (hex) ==  4 (dezimal)
#define ROULETTE_ODD    0x08  // 0x08 (hex) ==  8 (dezimal)
#define ROULETTE_PASSE  0x10  // 0x10 (hex) == 16 (dezimal)
#define ROULETTE_MANQUE 0x20  // 0x20 (hex) == 32 (dezimal)
</code></pre>
<p>mit dem | bewirkst du eine logische oder verknüpfung der werte, d.h. jedes<br />
gesetzte bit ist auch im ergebnis gesetzt. siehe tabelle</p>
<pre><code>| | 0 | 1
---+---+---
 0 | 0 | 1
 1 | 1 | 1

-&gt; zahl 1  == ROULETTE_BLACK | ROULETTE_ODD | ROULETTE_MANQUE
           ==        1  |         8  |        32
           == 00000001  |  00001000  |  00100000
           == 00101001
</code></pre>
<p>mit</p>
<pre><code class="language-cpp">if (Flag &amp; ROULETTE_BLACK)
</code></pre>
<p>wertes du dann aus, welches bit gesetzt ist. die und-verknüpfung liefert 1<br />
wenn ein bit an beiden stellen gesetzt ist, sonst 0. siehe tabelle.</p>
<pre><code>&amp; | 0 | 1
---+---+---
 0 | 0 | 0
 1 | 0 | 1
</code></pre>
<p>was genau du mit den zufallszahlen machen willst, weiss ich ja nicht. wenn du mit der zufallszahl das array abfragst, weisst du noch nicht ob die zahl schwarz/rot, gerade/ungerade, passe/manque ist, dass bekommst du erst durch die auswertung der flags heraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/703259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/703259</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Sat, 22 Jan 2005 15:47:56 GMT</pubDate></item><item><title><![CDATA[Reply to kompakter programmieren mit Arrays? on Mon, 24 Jan 2005 10:58:49 GMT]]></title><description><![CDATA[<p>Na DAS ist ja klasse, eine ausführliche Erklärung!<br />
Vielen Dank, damit werde ich jetzt mal ein wenig basteln, hoffe, es kommt was brauchbares raus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/704423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/704423</guid><dc:creator><![CDATA[Maks]]></dc:creator><pubDate>Mon, 24 Jan 2005 10:58:49 GMT</pubDate></item><item><title><![CDATA[Reply to kompakter programmieren mit Arrays? on Mon, 24 Jan 2005 11:01:32 GMT]]></title><description><![CDATA[<p>Zitat:</p>
<blockquote>
<p>Also weg mit dem Faustkeil und her mit einem Aufzählungstyp!</p>
</blockquote>
<p>ALso einen VOrteil könnte es haben: Geschwindigkeit, nur könntest Du Recht haben, in dem Fall sinds so wenig Daten, daß es mit Aufzählung wohl auch gehen müßte!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/704426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/704426</guid><dc:creator><![CDATA[Maks]]></dc:creator><pubDate>Mon, 24 Jan 2005 11:01:32 GMT</pubDate></item></channel></rss>