<?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[2D-Array: Schleife ändert falsche Zellen!]]></title><description><![CDATA[<p>Hallo zusammen:</p>
<p>Ich muss für Physik ein Array mit physikalischen Größen belegen.<br />
Dazu habe ich das Array folgendermaßen deklariert:</p>
<pre><code>double gridB [N+3][2];    // Geschwindigkeit[0], Impuls[1], Radius[2]
</code></pre>
<p>Beim Initialisieren passiert etwas komisches. Ich habe folgendermaßen initialisiert:</p>
<pre><code>// Radien
    for(int i=0; i &lt;= N+2; i++)        {
        gridB[i][2] = (i-1)*dr;
    }

    printf(&quot;%e \n&quot;, gridB[150][2]);

    // Geschwindigkeiten
    for(int i=0; i &lt;= N+2; i++)        {
        gridB[i][0] = 0;
    }

    printf(&quot;%e \n&quot;, gridB[150][2]);
</code></pre>
<p>Wieso liefern die beiden prints unterschiedliche Werte? Eigentlich dürfte doch die Geschwindigkeiten-Schleife an gridB[i][2] nichts ändern? Danke schonmal <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/topic/326719/2d-array-schleife-ändert-falsche-zellen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 30 May 2026 18:04:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326719.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Jul 2014 16:10:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 2D-Array: Schleife ändert falsche Zellen! on Thu, 03 Jul 2014 16:10:19 GMT]]></title><description><![CDATA[<p>Hallo zusammen:</p>
<p>Ich muss für Physik ein Array mit physikalischen Größen belegen.<br />
Dazu habe ich das Array folgendermaßen deklariert:</p>
<pre><code>double gridB [N+3][2];    // Geschwindigkeit[0], Impuls[1], Radius[2]
</code></pre>
<p>Beim Initialisieren passiert etwas komisches. Ich habe folgendermaßen initialisiert:</p>
<pre><code>// Radien
    for(int i=0; i &lt;= N+2; i++)        {
        gridB[i][2] = (i-1)*dr;
    }

    printf(&quot;%e \n&quot;, gridB[150][2]);

    // Geschwindigkeiten
    for(int i=0; i &lt;= N+2; i++)        {
        gridB[i][0] = 0;
    }

    printf(&quot;%e \n&quot;, gridB[150][2]);
</code></pre>
<p>Wieso liefern die beiden prints unterschiedliche Werte? Eigentlich dürfte doch die Geschwindigkeiten-Schleife an gridB[i][2] nichts ändern? Danke schonmal <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/2406884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406884</guid><dc:creator><![CDATA[ihaveaquestion]]></dc:creator><pubDate>Thu, 03 Jul 2014 16:10:19 GMT</pubDate></item><item><title><![CDATA[Reply to 2D-Array: Schleife ändert falsche Zellen! on Thu, 03 Jul 2014 16:18:41 GMT]]></title><description><![CDATA[<p><code>double gridB [N+3][2];</code> hat nur die zwei 'Spalten', <code>0</code> und <code>1</code> .<br />
Daher ist <code>gridB[i][2]</code> das gleiche wie <code>gridB[i + 1][0]</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406885</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 03 Jul 2014 16:18:41 GMT</pubDate></item><item><title><![CDATA[Reply to 2D-Array: Schleife ändert falsche Zellen! on Thu, 03 Jul 2014 16:33:36 GMT]]></title><description><![CDATA[<pre><code>double gridB [N+3][2];    // Geschwindigkeit[0], Impuls[1], Radius[2]
</code></pre>
<p>In C++ fangen zwar die Indexangaben für Arrayzugriffe bei <code>0</code> an, die Größenangaben bleiben aber dieselben. Du hast ein Array von Arrays von <strong>zwei</strong> Elementen.</p>
<p>Der Zugriff <code>gridB[i][2]</code> ist also relativ unsinnig, macht auf jeden Fall nicht was du willst.</p>
<p>Nimm lieber eine Datenstruktur.</p>
<pre><code>struct PhysicalInfo
{
   double velocity, impulse, radius;
};

PhysicalInfo gridB[N+3];
</code></pre>
<pre><code>printf(&quot;%e \n&quot;, gridB[150][2]);
</code></pre>
<p>Och nö. Das ist absoluter Unsinn. <code>printf</code> versucht eine Fließkommazahl auszugeben, vom Speicher den dein Array hergibt.</p>
<p>Und gerade weil <code>printf</code> so typunsicher ist (und dir keine Fehlermeldung gibt, vielleicht tut dein Compiler das aber) nutzt man in C++ <code>std::cout</code> für Ausgaben.</p>
<p>Probier' mal</p>
<pre><code>for( auto p : gridB )
    std::cout &lt;&lt; p.velocity &lt;&lt; ' ' &lt;&lt; p.impulse &lt;&lt; ' ' &lt;&lt; p.radius &lt;&lt; '\n';
</code></pre>
<p>Der nächste Schritt wäre ein überladener Insertion-Operator für Streams.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406886</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 03 Jul 2014 16:33:36 GMT</pubDate></item><item><title><![CDATA[Reply to 2D-Array: Schleife ändert falsche Zellen! on Thu, 03 Jul 2014 16:28:44 GMT]]></title><description><![CDATA[<p>Ich Vollidiot!!! Danke, natürlich!^^</p>
<pre><code>double gridB [N+3][3];    // Geschwindigkeit[0], Impuls[1], Radius[2]
</code></pre>
<p>~(Edit durch Arcoth, Codetags angepasst)~</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406887</guid><dc:creator><![CDATA[ihaveaquestion]]></dc:creator><pubDate>Thu, 03 Jul 2014 16:28:44 GMT</pubDate></item><item><title><![CDATA[Reply to 2D-Array: Schleife ändert falsche Zellen! on Thu, 03 Jul 2014 17:26:47 GMT]]></title><description><![CDATA[<p>ihaveaquestion schrieb:</p>
<blockquote>
<pre><code>double gridB [N+3][3];    // Geschwindigkeit[0], Impuls[1], Radius[2]
</code></pre>
</blockquote>
<p>Auch wenn es nun technisch richtig ist, ist das immer noch eine ganz schlechte Idee, verschiedene Größen in einem Array zu halten. Das einzige, was du damit bekommst, sind schwer zu findende Logikfehler beim Programmieren. Wenn du zum Beispiel irgendwann mal Geschwindigkeit + Radius berechnest oder anderen Quatsch. Bei der Variante mit dem struct fällt das sofort auf (Und falls du irgendwelche komischen Mythen über schnelle Arrays gehört hast: Das ist in der technischen Umsetzung beides das gleiche). Später kann man sogar noch weiter gehen und den Größen einen entsprechenden Datentyp verpassen, so dass solch ein Fehler sogar vom Compiler gefunden wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406894</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 03 Jul 2014 17:26:47 GMT</pubDate></item><item><title><![CDATA[Reply to 2D-Array: Schleife ändert falsche Zellen! on Fri, 04 Jul 2014 08:39:28 GMT]]></title><description><![CDATA[<p>Das sieht mir so aus als ob der Aufgabensteller mal Fortran-Programmierer war. Da ist sowas durchaus üblich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406955</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 04 Jul 2014 08:39:28 GMT</pubDate></item></channel></rss>