<?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[n-viele Integer Zahlen deklarieren?]]></title><description><![CDATA[<p>Hi, ich habe hier eine wahrscheinlich sehr einfache Frage, aber ich habe keine Ahnung wie ich die lösen kann.</p>
<p>Ich würde gerne eine nach Eingabe, bestimmte Anzahl an Integer Zahlen deklarieren. Und zwar so. Der Benutzer gibt eine Zahl n ein, was heißen soll, dass n int Zahlen erzeugt werden sollen.</p>
<p>von der Idee sowas:</p>
<p>for(int i= 0; i&lt;=n; i++) {<br />
int Ai;<br />
}</p>
<p>Also A0 A1 A2 ... An.. geht natürlich von der Syntax so nicht. Aber ich hoffe ihr versteht meine Idee. Darüberhinaus will ich jedem Integer eine Zufallszahl zwischen 1 und m zuweisen (natürlich paarweise verschieden). Mit zB 4 Zahlen löse ich das problemlos.</p>
<p>Hoffe jemand kann mir da helfen.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/272541/n-viele-integer-zahlen-deklarieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 20:25:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272541.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 19 Aug 2010 13:28:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 13:28:54 GMT]]></title><description><![CDATA[<p>Hi, ich habe hier eine wahrscheinlich sehr einfache Frage, aber ich habe keine Ahnung wie ich die lösen kann.</p>
<p>Ich würde gerne eine nach Eingabe, bestimmte Anzahl an Integer Zahlen deklarieren. Und zwar so. Der Benutzer gibt eine Zahl n ein, was heißen soll, dass n int Zahlen erzeugt werden sollen.</p>
<p>von der Idee sowas:</p>
<p>for(int i= 0; i&lt;=n; i++) {<br />
int Ai;<br />
}</p>
<p>Also A0 A1 A2 ... An.. geht natürlich von der Syntax so nicht. Aber ich hoffe ihr versteht meine Idee. Darüberhinaus will ich jedem Integer eine Zufallszahl zwischen 1 und m zuweisen (natürlich paarweise verschieden). Mit zB 4 Zahlen löse ich das problemlos.</p>
<p>Hoffe jemand kann mir da helfen.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942017</guid><dc:creator><![CDATA[BAHA]]></dc:creator><pubDate>Thu, 19 Aug 2010 13:28:54 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 13:44:30 GMT]]></title><description><![CDATA[<p>Du könntest ein dynamischers Array verwenden.<br />
Also sowas hier:</p>
<pre><code class="language-cpp">int n;
//...

int* A = new int[n];

// Jetzt hast du ein Feld von n Integer-Variablen.
// Zugreifen auf die Elemente kannst du beispielsweise so:

A[0] = 10;
A[1] = 5;
int i = A[2];

//Das Zuweisen einer Zufallszahl kann dann so aussehen:
int m;

// m = wasauchimmer;

for(int i=0;i&lt;n;i++)
    A[i]=rand()%m+1;

//Wenn das Feld nicht mehr gebraucht wird, musst du den Speicher freigeben mit
delete[] A;
//danach darfst du das Feld allerdings nicht mehr benutzen.
</code></pre>
<p>Das ist jetzt vielleicht ein wenig kompliziert, ich hoffe aber, dass ich dir helfen konnte.</p>
<p>EDIT: Noch was wissenswertes zu der Deklaration der Variablen.<br />
Die Variablen &quot;existieren&quot; nur in dem Block, in dem sie deklariert werden.</p>
<p>Ein Beispiel:</p>
<pre><code class="language-cpp">int GlobVar; // Gilt überall, auch in Funktionen und Klassen.

int main()
{
    int Var; // Ist nur in main() bekannt.

    for(;;)
    {
        int LokaleVar; // Gilt nur in der For-Schleife.
    }

    LokaleVar = 1; // Führt zu einem Fehler, da LokaleVar nur in der For-Schleife bekannt ist.
}
</code></pre>
<p>MfG, Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942023</guid><dc:creator><![CDATA[Jochen S.]]></dc:creator><pubDate>Thu, 19 Aug 2010 13:44:30 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 13:39:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;iostream&gt;

int main()
{
 int x;
 std::cin &gt;&gt; x;

 std::vector&lt;int&gt; A(x);

 // A enthält nun x Integer, ansprechbar durch A[0] bis A[x-1].
}
</code></pre>
<p>vector kann aber noch viel dollere Sachen, weil man sich gar nicht am Anfang auf eine Größe festlegen muss, sondern einfach Elemente hinten dranhängen kann. Mehr dazu in jedem guten C++-Buch.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5675">@Jochen</a> S.: Du magst es wohl gerne unnötig kompliziert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942024</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 19 Aug 2010 13:39:13 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 13:41:42 GMT]]></title><description><![CDATA[<p>Ach vector ^^ vielen Dank an euch beide <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Dabei arbeite ich die ganze Zeit mit vectoren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> w</p>
<p>Weiß noch jemand wie ich die alle unterschiedlich setzen kann? Bei 4 Zahlen habe ich das mit einer whileschleife gemacht . Jedoch wird die Bedingung für jede weitere Zahl die zu überprüfen ist immer länger -.-</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942026</guid><dc:creator><![CDATA[BAHA]]></dc:creator><pubDate>Thu, 19 Aug 2010 13:41:42 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 13:44:51 GMT]]></title><description><![CDATA[<p>Was genau ist denn deine Anforderung? Vielleicht ist std::set eine Alternative zu std::vector?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942030</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 19 Aug 2010 13:44:51 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 13:50:33 GMT]]></title><description><![CDATA[<p>Also ich bin noch nicht so lange bei C++ ^^ Ist halt ein kleiner Programmierkurs über ein Semester gewesen. Es geht darum das ich ein Spiel programmiere (Minesweeper) und ich will je nach Feldgröße verschiedene Mengen von Minen legen. Deswegen halt die variable Anzahl an Integers. Diese sollen die Positionen der Minen auf einem eindimensionalen Vektor darstellen. Auf einem 8x8 Feld will ich beispielsweise 10 Minen legen. Dabei sollen diese Minenpositionen die ich wohl in einem Vector erzeuge, <strong>paarweise verschieden sein</strong>.</p>
<pre><code class="language-cpp">srand( (unsigned)time( NULL ) );
      A1 = rand()%63;
      A2 = rand()%63;
	while(A2==A1) A2 = rand()%63;
      A3 = rand()%63;
      while(A3==A1 || A3==A2) A3 = rand()%63;
	A4 = rand()%63;
	while(A4==A1 || A4==A2 || A4==A3) A4 = rand()%63;
</code></pre>
<p>So hatte ich vor kurzem 4 verschiedene Zahlen erzeugt zwischen 0 und 63.<br />
Hoffe jemand kann mir (Anfänger) da helfen.^^</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942035</guid><dc:creator><![CDATA[BAHA]]></dc:creator><pubDate>Thu, 19 Aug 2010 13:50:33 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 14:00:09 GMT]]></title><description><![CDATA[<p>Meinst du sowas?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

int main()
{
int value;
vector&lt; int &gt; theValues;

while( cin &gt;&gt; value, value != 0 )
{
theValues.push_back( value );
}

// Du kannst so lange Zahlen eingeben, bis du eine 0 eingibst, jede Zahl wird in den Vektor kopiert. Umgang mit Vektor wird dir ja vll bekannt sein? Wenn nicht, du kannst über Iteratoren oder Indizies( sowas hier [0] ) auf die einzelnen Elemente zugreifen.
</code></pre>
<p>Lg freeG</p>
<p>EDIT:<br />
Weiß nicht ob du das gemeint hast, war auf deinen Post davor bezogen nicht auf deinen letzten.</p>
<p>Ok ich habs glaub falsch verstanden.<br />
Meinst du so:</p>
<pre><code class="language-cpp">int anzahlMines = 10;
vector&lt; int &gt; mines;

for( int i = 0; i != 10; ++i )
{
mines.push_back( rand() % 63 );
}
</code></pre>
<p>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942036</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Thu, 19 Aug 2010 14:00:09 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 13:52:14 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>:<br />
Wiso ist das denn kompliziert? Wenn die Größe eines Feldes bekannt ist und sich nicht mehr verändert, spricht doch auch nichts gegen ein dynamisches Feld. Ein solches Feld ist IMHO auch recht einfach zu Handhaben. Sollte das Feld noch erweitert werden, würde ich auch zu vector tendieren.</p>
<p>Das Setzen der Zahlen ist doch einfach:</p>
<pre><code class="language-cpp">for(int i=0;i&lt;n;i++)
{
    A[i] = rand()%m+1;
}

// oder mit einer while-schleife

int i=0;
while(i&lt;n)
{
    A[i++] = rand()%m+1;
}

// rand()%m+1 liefert eine Zahl zwischen 1 und m
</code></pre>
<p>MfG, Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942037</guid><dc:creator><![CDATA[Jochen S.]]></dc:creator><pubDate>Thu, 19 Aug 2010 13:52:14 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 13:58:04 GMT]]></title><description><![CDATA[<p>SOVIELE ANTWORTEN. <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>Vector ist mir bekannt. Das Problem ist halt das ich <strong>n paarweise verschiedene Zahlen erzeugen</strong> will. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Das wäre etwas wie:</p>
<pre><code class="language-cpp">int n; 
cin &gt;&gt; n; //ANZAHL DER ZAHLEN
vector&lt;int&gt; val(n);
srand( (unsigned)time( NULL ) );
for(int i = 0; i &lt;= n-1; i++) {
val[i] = rand()%m; 
}
</code></pre>
<p>Nur diese Zahlen wären im Allgemeinen nicht paarweise verschieden. <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="😞"
    /></p>
<p>PS: ERZEUGT rand()%m; dann nur Zahlen zwischen 0 und m-1?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942038</guid><dc:creator><![CDATA[BAHA]]></dc:creator><pubDate>Thu, 19 Aug 2010 13:58:04 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 14:02:14 GMT]]></title><description><![CDATA[<p>Jochen S. schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>:<br />
Wiso ist das denn kompliziert? Wenn die Größe eines Feldes bekannt ist und sich nicht mehr verändert, spricht doch auch nichts gegen ein dynamisches Feld. Ein solches Feld ist IMHO auch recht einfach zu Handhaben. Sollte das Feld noch erweitert werden, würde ich auch zu vector tendieren.</p>
</blockquote>
<p>Nenn mir einen Vorteil eines dynamischen Arrays gegenüber Vector. Nur einen. Dafür habe ich mindestens einen gravierenden Nachteil des des dynamischen Arrays: Kein RAII. D.h. man ist für das Aufräumen selber verantwortlich. Sobald das Programm auch nur ein bisschen komplexer wird, wird es kompliziert.</p>
<p>Dazu bietet Vector auch noch jede Menge Zusatzfeatures: Erweiterbarkeit, Kopierbarkeit( <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> ), Bekannte Größe, verschiedene Zugriffsmethoden, einheitliches Interface (d.h. Austauschbarkeit mit anderen Containern). Und das alles für lau.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942040</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 19 Aug 2010 14:02:14 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 14:04:37 GMT]]></title><description><![CDATA[<p>Wenn die Zahlen verschieden sein sollen, kann man folgendes machen:</p>
<pre><code class="language-cpp">int Random(int m)
{
    static std::vector&lt;int&gt; A(m);
    static NumValues = 0;

    bool RunLoop = true;
    int x;

    while(RunLoop)
    {
        x = rand()%m+1;
        for(int i=0;i&lt;NumValues;i++)
        if(A[i]==x)RunLoop = false;
        RunLoop = !RunLoop;
    }

    if(++NumValues&gt;=m)NumValues=0;
    return x;
}
</code></pre>
<p>Die Funktion liefert Zufallszahlen zwischen 1 und m und verhindert Wiederholungen. (Hab sie nicht getestet, müsste aber korrekt sein.)</p>
<p>Eventuell kann dir die Funktion ja nützlich sein.</p>
<p>MfG, Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942041</guid><dc:creator><![CDATA[Jochen S.]]></dc:creator><pubDate>Thu, 19 Aug 2010 14:04:37 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 14:03:32 GMT]]></title><description><![CDATA[<p>BAHA schrieb:</p>
<blockquote>
<p>Vector ist mir bekannt. Das Problem ist halt das ich <strong>n paarweise verschiedene Zahlen erzeugen</strong> will. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Wenn ich dich recht verstehe: Schreib doch erstmal die Zahlen der Reihenfolge nach in den vector und dann mach ein random_shuffle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942042</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 19 Aug 2010 14:03:32 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 14:05:16 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int N = ...;
std::vector&lt;int&gt; zahlen;
int MAX = 10;
while(N--)
{
  int r = -1;
  while(r == -1 || std::find(zahlen.begin(), zahlen.end(), r) != zahlen.end())  // r schon enthalten?
    r = rand() % MAX + 1;
  zahlen.push_back(r);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1942043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942043</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Thu, 19 Aug 2010 14:05:16 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 14:07:37 GMT]]></title><description><![CDATA[<p>Das hier immer wieder so Algorithmen mit derart schlechter Zeitkomplexität vorgeschlagen werden. <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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2470">@Maxi</a> und Jochen S.: Testet Eure Vorschläge mal mit 10.000 oder 100.000 Zahlen und staunt wie lange selbst ein heutiger Rechner dafür braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942044</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 19 Aug 2010 14:07:37 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 14:09:03 GMT]]></title><description><![CDATA[<p>Hmm ich werde mal das von Jochen S. testen. Der Rest ist für mich als Anfänger leider etwas zu kompliziert, bzw reichen meine ohnehin eher dürftigen Kenntnisse nicht soweit.</p>
<p>Vielleicht kann mir jemand noch zum Schluss diese Frage beantworten.</p>
<pre><code class="language-cpp">rand()%m; // ERZEUGT Zahlen zwischen 0 und m
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">rand()%m; // ERZEUGT Zahlen zwischen 0 und m-1
</code></pre>
<p>ps. laut Aufgabenstellung soll das Feld beliebig groß sein (jedoch nicht zu groß -.-) Denke so eine Begrenzung durch das Konsolenfenster ist legitim.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942045</guid><dc:creator><![CDATA[BAHA]]></dc:creator><pubDate>Thu, 19 Aug 2010 14:09:03 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 14:15:06 GMT]]></title><description><![CDATA[<p>rand()%m erzeugt Zufallszahlen zwischen 0 und m-1.<br />
Wenn du Zufallszahlen zwischen 1 und m haben willst, musst du noch 1 hinzuaddieren.</p>
<p>Kleine Optimierung meiner Funktion Random:</p>
<pre><code class="language-cpp">int Random(int m)
{
    static std::vector&lt;int&gt; A(m);
    static NumValues = 0;

    bool RunLoop = true;
    int x = rand()%m+1;
    int var = 0;

    while(RunLoop)
    {
        for(int i=0;i&lt;NumValues;i++)
            if(A[i]==x){RunLoop = false;x=var++;}
        RunLoop = !RunLoop;
    }

    if(++NumValues&gt;=m)NumValues=0;
    return x;
}
</code></pre>
<p>Dürfte schneller sein. Ist aber nicht mehr ganz so zufällig <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>MfG, Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942049</guid><dc:creator><![CDATA[Jochen S.]]></dc:creator><pubDate>Thu, 19 Aug 2010 14:15:06 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 14:15:57 GMT]]></title><description><![CDATA[<p>Das sind Zahlen zwischen 0 und m-1, jeweils einschließlich. Das Prozentzeichen ist der modulo-Operator, das heißt der Rest einer Division durch m. Und der kann logischerweise nur zwischen 0 und m-1 liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942050</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 19 Aug 2010 14:15:57 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 14:17:37 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Mir ist klar, dass der Algo nicht grad der schnellste ist. Dafür ist er leicht zu verstehen :).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942051</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Thu, 19 Aug 2010 14:17:37 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 15:10:02 GMT]]></title><description><![CDATA[<p>Da hab ich doch letzten auch was gepostet... passt gut hierher:</p>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-272111-and-postdays-is-0-and-postorder-is-asc-and-start-is-10.html" rel="nofollow">RNG ohne Duplikate</a>.<br />
Laufzeitverhalten ist linear beim Erzeugen, konstant beim Ziehen. Speicherverbrauch wächst leider auch linear <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>Edit:<br />
2. Posting auf der Seite</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942067</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 19 Aug 2010 15:10:02 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Thu, 19 Aug 2010 15:24:18 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>BAHA schrieb:</p>
<blockquote>
<p>Vector ist mir bekannt. Das Problem ist halt das ich <strong>n paarweise verschiedene Zahlen erzeugen</strong> will. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Wenn ich dich recht verstehe: Schreib doch erstmal die Zahlen der Reihenfolge nach in den vector und dann mach ein random_shuffle.</p>
</blockquote>
<p>einfacher gehts gar nicht mehr - schneller auch nicht.</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt; //random_shuffle
#include &lt;iostream&gt; //ein + ausgabe
#include &lt;vector&gt; //unser container für die zahlen
#include &lt;cstdlib&gt; //unsere zufallszahlen-funktion

int main()
{
  using namespace std;

  srand(time(0)); //zufallszahlen generator initialisieren
  rand(); //die erste zufallszahl ist nicht gut genug für uns
    //dieser zufallszahlengenerator wird intern (so lang nicht anders angegeben) von random_shuffle verwendet

  int max;
  cin &gt;&gt; max;
  vector&lt;int&gt; numbers(max);
  for(int i(0); i != max; ++i)
    numbers[i] = i;
/*numbers sieht jz (bei max==5) so aus: {0; 1; 2; 3; 4}*/

  int count;
  cin &gt;&gt; count;
  if(count &gt; max)
    return EXIT_FAILURE;
  random_shuffle(numbers.begin(), numbers.end()); //mischen
/*numbers sieht jz z.Bsp. so aus: {3; 2; 4; 0; 1}*/
  numbers.resize(count);
/*numbers sieht (bei count==3) so aus: {3; 2; 4}*/

//die ausgabe, damit du auch siehst, dass es funktioniert:
  for(vector&lt;int&gt;::const_iterator i(numbers.begin()), e(numbers.end()); i != e; ++i)
    cout &lt;&lt; *i &lt;&lt; endl;

  char dont_close;
  cin &gt;&gt; dont_close;
}
</code></pre>
<p><code>random_shuffle(numbers.begin(), numbers.end()); //mischen</code><br />
die Zeile ist vermutlich die einzige, die du nicht verstehst.<br />
Sollte aber eigtl ganz intuitiv zu verstehen sein.<br />
Dokumentation dazu:<br />
<a href="http://www.cplusplus.com/reference/algorithm/random_shuffle/" rel="nofollow">http://www.cplusplus.com/reference/algorithm/random_shuffle/</a></p>
<p>bb</p>
<p>PS: Gabs bei std::vector nicht auch irgendwo im Standard nen Satz zum CTor(die iteratoren-Überladung) von wegen: Wenn der iterator zu nem size_t gecastet werden kann, dann werden Zahlen eingefügt? Habs gerad nicht auf die Schnelle finden können, war mir aber eigtl relativ sicehr... -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942073</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 19 Aug 2010 15:24:18 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Fri, 20 Aug 2010 14:16:50 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>PS: Gabs bei std::vector nicht auch irgendwo im Standard nen Satz zum CTor(die iteratoren-Überladung) von wegen: Wenn der iterator zu nem size_t gecastet werden kann, dann werden Zahlen eingefügt? Habs gerad nicht auf die Schnelle finden können, war mir aber eigtl relativ sicehr... -.-</p>
</blockquote>
<p>was meinen? es gibt einen konstruktor, der X-mal den Wert Y einfügt, das hat aber nichts mit einem cast zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942445</guid><dc:creator><![CDATA[kunststudent]]></dc:creator><pubDate>Fri, 20 Aug 2010 14:16:50 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Fri, 20 Aug 2010 14:30:21 GMT]]></title><description><![CDATA[<p>kunststudent schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>PS: Gabs bei std::vector nicht auch irgendwo im Standard nen Satz zum CTor(die iteratoren-Überladung) von wegen: Wenn der iterator zu nem size_t gecastet werden kann, dann werden Zahlen eingefügt? Habs gerad nicht auf die Schnelle finden können, war mir aber eigtl relativ sicehr... -.-</p>
</blockquote>
<p>was meinen? es gibt einen konstruktor, der X-mal den Wert Y einfügt, das hat aber nichts mit einem cast zu tun.</p>
</blockquote>
<p>Ne, den meinte ich nicht.<br />
Mir war so, als ob es irgendwo nen (sequentiellen) COntainer gab, bei dem bei der Iterator-Überladung des inserts und/oder des CTors so etwas stand, wie:<br />
<code>if 'Iterator' could be cast to an size_t</code> ...</p>
<p>habs aber nicht gefunden - hab 3 Standards(bzw Drafts: '95,'03,'05) durchsucht aber nichts gefunden - wer weiß, wo ich das wieder gelesen hatte... : D</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942459</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 20 Aug 2010 14:30:21 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Fri, 20 Aug 2010 14:51:04 GMT]]></title><description><![CDATA[<p>schau dir mal die allgemeine einleitung zu containern an, da steht afair irgendetwas zu dem thema, bezieht sich aber, glaube ich, generell darauf, dass es compilerspezifisch ist, zu bestimmen, ob der iterator ein inputiterator ist oder nicht und falls er das nicht ist, eine andere version der funktion/des konstruktors aufgerufen werden soll.</p>
<p>eine zeit noch etwas vor concepts und type_traits (zumindest erlaubt es das verwenden von type traits).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942465</guid><dc:creator><![CDATA[kunststudent]]></dc:creator><pubDate>Fri, 20 Aug 2010 14:51:04 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Fri, 20 Aug 2010 16:02:40 GMT]]></title><description><![CDATA[<p>da hatte ich eigtl auch nachgeguckt - hab jz auch keinen nerv mehr, so gehts ja auch:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iterator&gt;

template&lt;typename T&gt;
struct counter
{
	typedef std::bidirectional_iterator_tag iterator_category;
	typedef T value_type;
	typedef std::ptrdiff_t difference_type;
	typedef difference_type distance_type;
	typedef value_type* pointer;
	typedef value_type&amp; reference;
	typedef const value_type&amp; const_reference;

	reference operator++()
	{
		return ++me;
	}
	reference operator--()
	{
		return --me;
	}

	reference operator*()
	{
		return me;
	}
	const_reference operator*() const
	{
		return me;
	}

	counter(T me = T())
	:	me(me)
	{}

private:
	T me;
};

template&lt;typename T&gt;
bool operator== (counter&lt;T&gt; lhs, counter&lt;T&gt; rhs)
{
	return *lhs == *rhs;
}

template&lt;typename T&gt;
bool operator!= (counter&lt;T&gt; lhs, counter&lt;T&gt; rhs)
{
	return !(lhs == rhs);
}

namespace std
{
	template&lt;typename T&gt;
	typename counter&lt;T&gt;::difference_type distance(counter&lt;T&gt; lhs, counter&lt;T&gt; rhs)
	{
		return static_cast&lt;typename counter&lt;T&gt;::difference_type&gt;( *rhs - *lhs );
	}

	template&lt;typename T, typename diff_t&gt;
	void advance(counter&lt;T&gt;&amp; these, diff_t diff)
	{
		*these += diff;
	}
}

#include &lt;vector&gt;

int main()
{
	std::vector&lt;int&gt; container(counter&lt;int&gt;(3), counter&lt;int&gt;(8));

	std::copy(container.begin(), container.end(), std::ostream_iterator&lt;int&gt;(std::cout, &quot;\r\n&quot;));

	system(&quot;PAUSE&quot;);
}
</code></pre>
<p>ist zwar nicht ganz standard-konform, im namespace std funktionen zu überladen, aber das ist ja auch bei swap gängige praxis, da weder der msvc noch der gcc immer adl nutzen.</p>
<p>im standard steht aber mal wieder nicht, dass distance benutzt werden soll, um die größe herauszubekommen -&gt; zumindest der msvc nutzt es nicht, weder die 9 noch die 10 - stinkt -.-'<br />
oder hab ich da irgendwo nen denkfehler gemacht, bei der distance-überladung?<br />
das random_access_tag wollt ich nicht nutzen, weil ich dann angst habe, dass intern iwo pointer-artithmetik genutzt wird und komische fehler auftreten^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942476</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 20 Aug 2010 16:02:40 GMT</pubDate></item><item><title><![CDATA[Reply to n-viele Integer Zahlen deklarieren? on Sat, 21 Aug 2010 02:44:47 GMT]]></title><description><![CDATA[<p>Jochen S. schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int Random(int m)
{
    static std::vector&lt;int&gt; A(m);
    static NumValues = 0;
   
    bool RunLoop = true;
    int x = rand()%m+1;
    int var = 0;

    while(RunLoop)
    {
        for(int i=0;i&lt;NumValues;i++)
            if(A[i]==x){RunLoop = false;x=var++;}
        RunLoop = !RunLoop;
    }

    if(++NumValues&gt;=m)NumValues=0;
    return x;
}
</code></pre>
<p>Dürfte schneller sein. Ist aber nicht mehr ganz so zufällig <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p><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="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
<p>Pfui: Wenn Du 'ne Funktion &quot;mit Zustand&quot; willst, schreib 'nen &quot;Funktor&quot; (Klasse) und benutze keine static Variablen!</p>
<p>Fehler: NumValues ohne Typ deklariert.</p>
<p>Fehler: A wird nie mit Werten x gefüllt.</p>
<p>Doof: RunLoop. Wenn man den Test hinter einem Funktionsaufruf verstecken kann, lässt sich dieser in der Schleifenbedingung verwenden, so dass Du kein RunLoop brauchst. Damit wird die Schleife auch leichter verständlich. Eine Endlosschleife a la while(true) oder for(;; ) mit break in der Mitte wäre auch denkbar, um RunLoop loszuwerden.</p>
<p>Doof: Keine Gleichverteilung für die übrig gebliebenen Zahlen.</p>
<p>Doof: Schlechte Laufzeitklasse: O(n<sup>2</sup>) für n Ziehungen mit n&lt;=m. Das geht besser.</p>
<p>Da es um das Setzen von Mienen auf Feldern geht und sowieso Speicher für alle Felder reserviert wird, wobei nur maximal eine Miene auf ein Feld kommen soll, kann man den Test, ob das Feld schon besetzt ist, viel eleganter durch eine einzige if-Abfrage regeln. Man wählt so lange eine neue zufällige Position aus, bis man ein freies Feld gefunden hat. Die Zahl der zu setzenden Mienen ist ja typischerweise auch nur ein kleiner Bruchteil der Anzahl der Felder, so dass im Schnitt weniger als zwei &quot;Versuche&quot; pro Miene benötigt werden. Damit es keine Endlosschleife gibt, sollte man die Zahl der Mienen nach oben hin durch Feldanzahl/3 (oder so) begrenzen.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1942607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1942607</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 21 Aug 2010 02:44:47 GMT</pubDate></item></channel></rss>