<?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[Vier gewinnt - Koordinaten verwalten (war: Array)]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine PB in der ich ein Gatter zeichne. Unter anderem habe ich ein Shame das ich in eines dieser Rechtecke verschiebe.</p>
<p>Zur Info, ich programmiere das Spiel Vier gewinnt. Wie lese ich die Koordinaten aus, damit ich später eine Abfrage programmieren kann wenn vier in einer Reihe sind!</p>
<p>Ich vermute mal das ich ein Array anlegen sollte! Nur weiss ich nicht wie ich das im Hintergrund mit starten lassen soll!</p>
<p>Bin noch neu auf dem Gebiet, aus diesem Grund, sorry für die evtl. etwas doofe Fragestellung. <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="🙄"
    /> Ich hoff ihr wisst trotzdem was ich meine! <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="😕"
    /></p>
<p>Gruß<br />
Eleonora</p>
<p><strong>Edit:</strong><br />
Bitte aussagekräftige Überschriften wählen. Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/77562/vier-gewinnt-koordinaten-verwalten-war-array</link><generator>RSS for Node</generator><lastBuildDate>Mon, 29 Jun 2026 11:43:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/77562.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 22 Jun 2004 11:32:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Tue, 22 Jun 2004 12:01:07 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine PB in der ich ein Gatter zeichne. Unter anderem habe ich ein Shame das ich in eines dieser Rechtecke verschiebe.</p>
<p>Zur Info, ich programmiere das Spiel Vier gewinnt. Wie lese ich die Koordinaten aus, damit ich später eine Abfrage programmieren kann wenn vier in einer Reihe sind!</p>
<p>Ich vermute mal das ich ein Array anlegen sollte! Nur weiss ich nicht wie ich das im Hintergrund mit starten lassen soll!</p>
<p>Bin noch neu auf dem Gebiet, aus diesem Grund, sorry für die evtl. etwas doofe Fragestellung. <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="🙄"
    /> Ich hoff ihr wisst trotzdem was ich meine! <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="😕"
    /></p>
<p>Gruß<br />
Eleonora</p>
<p><strong>Edit:</strong><br />
Bitte aussagekräftige Überschriften wählen. Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/545727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/545727</guid><dc:creator><![CDATA[Eleonora]]></dc:creator><pubDate>Tue, 22 Jun 2004 12:01:07 GMT</pubDate></item><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Tue, 22 Jun 2004 11:56:39 GMT]]></title><description><![CDATA[<p>Hallo Eleonora,<br />
hilft das möglicherweise schon weiter <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="😕"
    /> kann aber auch sein, dass ich das zu einfach sehe. Ich stelle mit vor du löscht das array und trägst dann die Spielzüge ein.</p>
<pre><code class="language-cpp">int	Gatter[Reihe][Spalte];
</code></pre>
<p>MfG<br />
Evi48</p>
]]></description><link>https://www.c-plusplus.net/forum/post/545768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/545768</guid><dc:creator><![CDATA[evi48]]></dc:creator><pubDate>Tue, 22 Jun 2004 11:56:39 GMT</pubDate></item><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Tue, 22 Jun 2004 12:54:36 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// erzeugen
   max_zeilen = 14;   // nur als Beispiel, weiß nicht wie groß das Spielfeld ist
   max_spalten = 6;   

   DatenMatrix = new int*[max_zeilen];
   for (int s = 0; s &lt; max_zeilen; s++)
      DatenMatrix[s] = new int[max_spalten];

   // löschen
   for (int i = 0; i &lt; max_zeilen;  i++)
      delete[] DatenMatrix[i];      // Spalten löschen
   delete[] DatenMatrix;            // Zeilen löschen

   // Zugriff
   DatenMatrix[x][y];   // wobei x 0 bis 13 sein kann und y 0 bis 5, bei obigem max_zeilen und max_spalten
</code></pre>
<p>Diese Matrix kannst Du im Konstruktor erzeugen und im Destruktor löschen. Nicht vergessen die Matrix (und max_spalten, max_zeilen) im Header zu deklarieren (int** DatenMatrix;). Sinnvollerweise solltest Du auch eine Init-Funktion dafür erstellen, die alle Felder auf 0 setzt. Die Überprüfung, ob vier in einer Reihe sind, solltest Du ausgehend vom letzten Stein, nur für diesen Stein prüfen (spart Rechenzeit ;). Ich stelle mir das so vor, dass der Wert 0 bedeutet, Feld ist frei, 1 = Stein Spieler 1, 2 = Stein Spieler 2. Von diesem Array ausgehend, würde ich das Zeichnen steuern.</p>
<p>Wie Du die zu setzende Position im Array herausbekommst, ist abhängig von Deiner bisherigen Implementation. Man kann aber ausgehend vom letzten Click errechnen welche Position gesetzt wird. So irgendwie in der Richtung Mausposition X beim Click / Breite der Spalte und Mausposition / Höhe der Zeile in deinem Gitter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/545783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/545783</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 22 Jun 2004 12:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Wed, 23 Jun 2004 10:35:53 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Sorry, aber ich glaub das ist noch etwas zu hoch für mich! <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="😞"
    /><br />
Ich habs jetzt mal versucht, allerdings funktioniert es nicht wirklich! <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="😕"
    /><br />
Hier mal mein Code:</p>
<pre><code>__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   xpos = ypos = 0;
   move_shape = false;

     //int gatter[5][6];
  int zeilen = 6, spalten = 7, i, gatter;

  gatter = new int*[zeilen];
  for(i=0;i&lt;zeilen;i++)
  {
    gatter[i] = new int[spalten];
  }
</code></pre>
<p>Er bringt mir die Fehlermeldung, dass ich int** nicht nach int konvertieren kann!?</p>
<p>Was mach ich falsch (wahrscheinlich alles <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>Danke schon mal für die Hilfe!</p>
<p>Gruß Elle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/546375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/546375</guid><dc:creator><![CDATA[Eleonora]]></dc:creator><pubDate>Wed, 23 Jun 2004 10:35:53 GMT</pubDate></item><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Wed, 23 Jun 2004 10:37:36 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Sorry, aber ich glaub das ist noch etwas zu hoch für mich! <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="😞"
    /><br />
Ich habs jetzt mal versucht, allerdings funktioniert es nicht wirklich! <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="😕"
    /><br />
Hier mal mein Code:</p>
<pre><code>__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   xpos = ypos = 0;
   move_shape = false;

     //int gatter[5][6];
  int zeilen = 6, spalten = 7, i, gatter;

  gatter = new int*[zeilen];
  for(i=0;i&lt;zeilen;i++)
  {
    gatter[i] = new int[spalten];
  }
</code></pre>
<p>Er bringt mir die Fehlermeldung, dass ich int** nicht nach int konvertieren kann!?</p>
<p>Was mach ich falsch (wahrscheinlich alles <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>Danke schon mal für die Hilfe!</p>
<p>Gruß Elle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/546377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/546377</guid><dc:creator><![CDATA[Eleonora]]></dc:creator><pubDate>Wed, 23 Jun 2004 10:37:36 GMT</pubDate></item><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Wed, 23 Jun 2004 11:11:34 GMT]]></title><description><![CDATA[<p>Hallo Eleonora,</p>
<p>Du hast Gatter als int deklariert, Gatter muß als int** deklariert werden. Außerdem solltest (mußt) Du gatter, spalten und zeilen im Header deklarieren, sonst kannst Du die Variablen nur im Konstruktor verwenden, aber nicht mehr im weiteren Programmverlauf.</p>
<p>Header</p>
<pre><code class="language-cpp">int Spalten, Zeilen;
int** Gatter;
</code></pre>
<pre><code class="language-cpp">__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   xpos = ypos = 0;
   move_shape = false;

  int zeilen = 6;
  spalten = 7;
  gatter = NULL; // vorsichtshalber, damit man überprüfen kann, ob die Erzeugung erfolgreich war

  gatter = new int*[zeilen];
  for(int i=0;i&lt;zeilen;i++)
  {
    gatter[i] = new int[spalten];
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/546408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/546408</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 23 Jun 2004 11:11:34 GMT</pubDate></item><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Wed, 23 Jun 2004 11:32:30 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ok, so weit funktioniert es schon mal! Nun möchte ich es allerdings auch noch verstehen und nicht nur abtippen!</p>
<p>Für was steht <strong>int</strong>** eigentlich? Kann nichts in der Hilfe dazu finden! Und seh ich es richtig, das ich jetzt ein Feld erstellt hab welches im Hintergrund dargestellt wird?</p>
<p>Stimmt das, dass ich im Destruktor nur den Inhalt lösche und nicht das Komplette Feld?</p>
<p>Gruß Elle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/546433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/546433</guid><dc:creator><![CDATA[Eleonora]]></dc:creator><pubDate>Wed, 23 Jun 2004 11:32:30 GMT</pubDate></item><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Wed, 23 Jun 2004 14:14:56 GMT]]></title><description><![CDATA[<p>Hallo Eleonora,</p>
<p>int** ist ein Zeiger auf einen Zeiger.</p>
<p>Das Thema ist recht komplex und ich wüßte gar nicht, wo ich mit den Erklärungen beginnen sollte. (Davon abgesehen bin ich ein schlechter 'Erklärer' <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="😞"
    /> .)<br />
Such mal in der Hilfe nach Referenzierungs-/Dereferenzierungsoperatoren.</p>
<p>Ich hab' hier mal ein Beispiel vorbereitet, das Dir verschiedene Zugriffsarten auf ein Array verdeutlichen soll. Dazu brauchst Du ein TStringGrid und 2 Buttons auf einem Form. Versuch mal zu nachzuvollziehen was da passiert.<br />
Du mußt nur die beide Buttonfunktionen einfügen:</p>
<pre><code class="language-cpp">void __fastcall TForm1::Button1Click(TObject *Sender)
{
	int max_zeilen = 14;
	int max_spalten = 6;
	StringGrid1-&gt;RowCount = max_zeilen;
	StringGrid1-&gt;ColCount = max_spalten;

	// erzeugen
	int** DatenMatrix = new int*[max_zeilen];
	for (int z = 0; z &lt; max_zeilen; z++)
		DatenMatrix[z] = new int[max_spalten];

	// initialisieren
	for (int z = 0; z &lt; max_zeilen; z++)
		for (int s = 0; s &lt; max_spalten; s++)
			DatenMatrix[z][s] = (z * max_spalten) + s + 1;

	// ausgeben
	for (int z = 0; z &lt; max_zeilen; z++)
		for (int s = 0; s &lt; max_spalten; s++)
			StringGrid1-&gt;Cells[s][z] = AnsiString(DatenMatrix[z][s]);

	// löschen
	for (int i = 0; i &lt; max_zeilen;  i++)
		delete[] DatenMatrix[i];
	delete[] DatenMatrix;

}
//--------------------------------------------------------------------------
-

void __fastcall TForm1::Button2Click(TObject *Sender)
{
	int max_zeilen = 14;
	int max_spalten = 6;
	int* pZeile;
	int* pSpalte;
	int** pDatenMatrix;

	StringGrid1-&gt;RowCount = max_zeilen;
	StringGrid1-&gt;ColCount = max_spalten;

	// erzeugen
	int** DatenMatrix = new int*[max_zeilen];
	for (int z = 0; z &lt; max_zeilen; z++)
		DatenMatrix[z] = new int[max_spalten];

	// initialisieren
	pDatenMatrix = DatenMatrix;

	for (int z = 0; z &lt; max_zeilen; z++)
	{
		pZeile = *pDatenMatrix;
		for (int s = 0; s &lt; max_spalten; s++)
		{
			pSpalte = pZeile;
			*pSpalte = (z * max_spalten) + s + 1;
			pZeile++;
		}
		pDatenMatrix++;
	}

	// ausgeben
	for (int i = 0; i &lt; max_zeilen; i++)
	{
		pZeile = *(DatenMatrix + i);
		for (int o = 0; o &lt; max_spalten; o++)
		{
			pSpalte = pZeile + o;
			StringGrid1-&gt;Cells[o][i] = *pSpalte;
		}
	}

	// löschen
	for (int i = 0; i &lt; max_zeilen;  i++)
		delete[] DatenMatrix[i];
	delete[] DatenMatrix;
}
//--------------------------------------------------------------------------
-
</code></pre>
<p>Ob Du int* DatenMatrix (int* DatenMatrix = new int[max_zeilen * max_spalten]) oder int** DatenMatrix verwendest ist eigentlich egal. Ich dachte nur, dass die Aufteilung in einzelne Zeilen leichter zu verstehen wäre (offensichtlich habe ich da geirrt, ist nicht das erste Mal <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>
]]></description><link>https://www.c-plusplus.net/forum/post/546477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/546477</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 23 Jun 2004 14:14:56 GMT</pubDate></item><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Tue, 29 Jun 2004 06:53:29 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Erst mal danke für die Erklärung und den Code. Das mit dem StringGrid versteh ich soweit. Ich hatte bis jetzt nur keine Zeit es irgendwie bei mir einzubauen! Ich meld mich wieder wenn es nicht klappen sollte.<br />
Danke noch mal!</p>
<p>Gruß Eleonora</p>
<p>Hätte nicht gedacht, dass das für einen &quot;Anfänger&quot; so ein Aufwand ist! <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>
]]></description><link>https://www.c-plusplus.net/forum/post/549672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/549672</guid><dc:creator><![CDATA[Eleonora]]></dc:creator><pubDate>Tue, 29 Jun 2004 06:53:29 GMT</pubDate></item><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Tue, 29 Jun 2004 13:21:53 GMT]]></title><description><![CDATA[<p>Ein <em>int array[x][y];</em> hätte es sicher auch getan und dir die wüste Zeigerarithmetik erspart. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/549808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/549808</guid><dc:creator><![CDATA[Jansen]]></dc:creator><pubDate>Tue, 29 Jun 2004 13:21:53 GMT</pubDate></item><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Tue, 29 Jun 2004 13:53:43 GMT]]></title><description><![CDATA[<p>Jansen schrieb:</p>
<blockquote>
<p>Ein <em>int array[x][y];</em> hätte es sicher auch getan und dir die wüste Zeigerarithmetik erspart. <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>Ok, ich gebe zu, war vielleicht ein bißchen hochgegriffen. Aber unter Berücksichtigung der Tatsache, dass Zugriffe mir reiner Zeigerarithmetik schneller laufen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/549833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/549833</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 29 Jun 2004 13:53:43 GMT</pubDate></item><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Tue, 29 Jun 2004 14:20:58 GMT]]></title><description><![CDATA[<p>Joe_M. schrieb:</p>
<blockquote>
<p>Aber unter Berücksichtigung der Tatsache, dass Zugriffe mir reiner Zeigerarithmetik schneller laufen...</p>
</blockquote>
<p>Schneller als was? Der Zugriff auf ein int-Array das auf dem Stack liegt?</p>
<p>-junix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/549855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/549855</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Tue, 29 Jun 2004 14:20:58 GMT</pubDate></item><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Tue, 29 Jun 2004 17:06:40 GMT]]></title><description><![CDATA[<p>junix schrieb:</p>
<blockquote>
<p>Schneller als was? Der Zugriff auf ein int-Array das auf dem Stack liegt?</p>
</blockquote>
<p>... ja, wo Du das <em>so</em> schreibst, bekomme ich Zweifel an meiner Aussage. Ich habe morgen und übermorgen viel Arbeit, aber spätestens Freitag werde ich dafür eine kleine Testroutine schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/549937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/549937</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 29 Jun 2004 17:06:40 GMT</pubDate></item><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Tue, 29 Jun 2004 18:41:56 GMT]]></title><description><![CDATA[<p>Was ist, wenn die Größe des Spielfeldes erst zur Laufzeit festgelegt werden soll? Dann kann man anscheinend kein normales Array benutzen:</p>
<p>Header:<br />
int x,y;</p>
<p>irgendwo:<br />
x = 12;<br />
y = 13;</p>
<p>irgendwo dahinter:<br />
int Feld[x][y];</p>
<p>Da kommt der Fehler, dass man nur Konstanten benutzen darf.<br />
Oder gibt es da eine andere Möglichkeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/550000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/550000</guid><dc:creator><![CDATA[snOOfy]]></dc:creator><pubDate>Tue, 29 Jun 2004 18:41:56 GMT</pubDate></item><item><title><![CDATA[Reply to Vier gewinnt - Koordinaten verwalten (war: Array) on Wed, 30 Jun 2004 08:01:00 GMT]]></title><description><![CDATA[<p>Blackshadow schrieb:</p>
<blockquote>
<p>Was ist, wenn die Größe des Spielfeldes erst zur Laufzeit festgelegt werden soll?</p>
</blockquote>
<p>Da mußt Du zwangsläufig new verwenden.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/760">@junix</a>:</p>
<p>Joe_M. schrieb:</p>
<blockquote>
<p>...eine kleine Testroutine schreiben.</p>
</blockquote>
<p>Bin doch schon dazu gekommen. Allerdings mit dem Ergebnis, dass sich bei keinerlei Perfomanceunterschiede ergeben...</p>
<pre><code class="language-cpp">// Testroutinen (nur 3 Buttons und 3 Labels auf einem Form und die 3 Variablen aus der OnCreate im Header deklarieren):
void __fastcall TForm1::FormCreate(TObject *Sender)
{
	max_zeilen = 10; 
	max_spalten = 10; 
	loop_count = 1000000;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	Button1-&gt;Enabled = false;
	int test;
	int start;
	int ende;

	int** DatenMatrix = new int*[max_zeilen]; 
	for (int z = 0; z &lt; max_zeilen; z++) 
		  DatenMatrix[z] = new int[max_spalten]; 

	for (int z = 0; z &lt; max_zeilen; z++) 
	{
		for (int s = 0; s &lt; max_spalten; s++) 
		{
			DatenMatrix[z][s] = (z * max_spalten) + s + 1; 
		}
	}

	start = GetTickCount();
	for (int loop = 0; loop &lt; loop_count; loop++)
	{
		for (int z = 0; z &lt; max_zeilen; z++) 
			 for (int s = 0; s &lt; max_spalten; s++) 
				test = DatenMatrix[z][s]; 
	}
	ende = GetTickCount();
	Label1-&gt;Caption = AnsiString(ende - start);

	for (int i = 0; i &lt; max_zeilen;  i++) 
	  delete[] DatenMatrix[i]; 
	delete[] DatenMatrix; 
	Button1-&gt;Enabled = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
	Button2-&gt;Enabled = false;
	int* pDatenMatrix;
	int test; 
	int start;
	int ende;

	int* DatenMatrix = new int[max_zeilen * max_spalten]; 

	pDatenMatrix = DatenMatrix; 

	for (int z = 0; z &lt; max_zeilen; z++) 
	{ 
		for (int s = 0; s &lt; max_spalten; s++) 
		{ 
			*pDatenMatrix = (z * max_spalten) + s + 1; 
			pDatenMatrix++; 
		} 
	} 

	start = GetTickCount();
	for (int loop = 0; loop &lt; loop_count; loop++)
	{
		pDatenMatrix = DatenMatrix; 
		for (int z = 0; z &lt; max_zeilen; z++) 
		{ 
			for (int s = 0; s &lt; max_spalten; s++) 
			{
				test = *pDatenMatrix;
				pDatenMatrix++; 
			} 
		} 
	}
	ende = GetTickCount();
	Label2-&gt;Caption = AnsiString(ende - start);

	delete[] DatenMatrix; 
	Button2-&gt;Enabled = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
	Button3-&gt;Enabled = false;
	int test;
	int start;
	int ende;

	int DatenMatrix[10][10]; 

	for (int z = 0; z &lt; max_zeilen; z++) 
		for (int s = 0; s &lt; max_spalten; s++) 
			DatenMatrix[z][s] = (z * max_spalten) + s + 1; 

	start = GetTickCount();
	for (int loop = 0; loop &lt; loop_count; loop++)
	{
		for (int z = 0; z &lt; max_zeilen; z++)
		{ 
			for (int s = 0; s &lt; max_spalten; s++) 
			{
				test = DatenMatrix[z][s]; 
			}
		}
	}
	ende = GetTickCount();
	Label3-&gt;Caption = AnsiString(ende - start);

	Button3-&gt;Enabled = true;
}
//---------------------------------------------------------------------------
</code></pre>
<p>Vielleicht ist dieses Testszenario auch einfach nicht geeignet um die Performance zu testen... Irgendwelche Anregungen oder Erklärungen, junix?</p>
<p>EDIT:<br />
Ich habe das jetzt mal mit QueryPerformance Counter gemessen:</p>
<pre><code class="language-cpp">LARGE_INTEGER start, ende, frequenz; 
start.QuadPart = 0;
ende.QuadPart = 0;
QueryPerformanceFrequency(&amp;frequenz);
QueryPerformanceCounter(&amp;start);
// ein Schleifendurchlauf
QueryPerformanceCounter(&amp;ende);
LabelX-&gt;Caption = AnsiString(((double) ende.QuadPart - (double) start.QuadPart) / (double) frequenz.QuadPart);
</code></pre>
<p>Hierbei ergibt sich das (von mir) erwartete Bild. Die Methode unter Button1 ist schneller. Ergebnisse (AMD Athon XP 2400, Array 1500 * 500, 1 Schleifendurchlauf):<br />
Button1: 0,0007615...<br />
Button2: 0,0011317...<br />
Button3: 0,0011317...<br />
Die Ergebnisse variieren bei jedem Durchlauf etwas, aber die Relation bleibt idenntisch. Offensichtlich ist GetTickCount nicht genau genug.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/550147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/550147</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 30 Jun 2004 08:01:00 GMT</pubDate></item></channel></rss>