<?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[Grenzen bei verschachtelten Schleifen]]></title><description><![CDATA[<p>Hallo</p>
<p>Eigentlich dachte ich, dass ich verschachtelte for Schleifen inzwischen verstanden habe, doch nun stocke ich bei folgendem Problem, was mir zeigt das ich es doch noch nicht wirklich verstanden habe.</p>
<p>Ich habe eine Matrix A mit zwei Zeilen und vier Spalten und eine Matrix B mit vier Zeilen und vier Spalten, bzw. allgemein (r x n)-Matrix A und (s x n)-Matrix B. Nun möchte ich von jedem Zeilenvektor von A und jedem Zeilenvektor von B den Hammingabstand berechnen um zu testen ob Matrix A und B gleiche Zeilenvektoren besitzen (Hamming Abstand Null). Die Abstandsfunktion habe ich ausgegliedert und mit einem Unit Test auf Richtigkeit getestet. Nur bei den Schleifen erhalte ich immer eine Speicherfehler aufgrund der Unterschiedlichen Zeilenzahl von A und B.</p>
<p>Wie würde man hier die Grenzen der for Schleifen richtig testen und ist es evtl. sinnvoller mit einer while und for Schleife zu arbeiten?</p>
<p>Danke für Tipps und Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338605/grenzen-bei-verschachtelten-schleifen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 10:16:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338605.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Jun 2016 09:55:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Grenzen bei verschachtelten Schleifen on Mon, 27 Jun 2016 09:55:34 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Eigentlich dachte ich, dass ich verschachtelte for Schleifen inzwischen verstanden habe, doch nun stocke ich bei folgendem Problem, was mir zeigt das ich es doch noch nicht wirklich verstanden habe.</p>
<p>Ich habe eine Matrix A mit zwei Zeilen und vier Spalten und eine Matrix B mit vier Zeilen und vier Spalten, bzw. allgemein (r x n)-Matrix A und (s x n)-Matrix B. Nun möchte ich von jedem Zeilenvektor von A und jedem Zeilenvektor von B den Hammingabstand berechnen um zu testen ob Matrix A und B gleiche Zeilenvektoren besitzen (Hamming Abstand Null). Die Abstandsfunktion habe ich ausgegliedert und mit einem Unit Test auf Richtigkeit getestet. Nur bei den Schleifen erhalte ich immer eine Speicherfehler aufgrund der Unterschiedlichen Zeilenzahl von A und B.</p>
<p>Wie würde man hier die Grenzen der for Schleifen richtig testen und ist es evtl. sinnvoller mit einer while und for Schleife zu arbeiten?</p>
<p>Danke für Tipps und Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500251</guid><dc:creator><![CDATA[cpp_Jungspund]]></dc:creator><pubDate>Mon, 27 Jun 2016 09:55:34 GMT</pubDate></item><item><title><![CDATA[Reply to Grenzen bei verschachtelten Schleifen on Mon, 27 Jun 2016 12:34:45 GMT]]></title><description><![CDATA[<p>Zwischen for- und while-Schleife besteht eigentlich kein Unterschied.</p>
<p>Du kannst die (fast) jederzeit gegeneinader austauschen.</p>
<pre><code>Initialisierung;
while(Bedingung){
  Schleifenkörper
  Inkrement
}

for(Initialisierung; Bedingung;Inkrement){
  Schleifenkörper
}
</code></pre>
<p>Der Unterschied liegt in der Gültigkeit der Schleifenvariablen, wenn du sie erst bei der Initialisierung definierst.</p>
<p>Ohne Code von dir, wird das nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500260</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Mon, 27 Jun 2016 12:34:45 GMT</pubDate></item><item><title><![CDATA[Reply to Grenzen bei verschachtelten Schleifen on Mon, 27 Jun 2016 18:34:08 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Danke für deine Antwort. Etwas sehr schönes ist heute passiert. Ich konnte zum ersten mal eigenständig debuggen, indem ich mir immer alle Variable ausgeben ließ und so meine Fehler fand und dadurch sah ich wie man es richtig machen muss. Es läuft jetzt <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>Falls jemand mal ein ähnliches Problem haben sollte hier mein Code. Falls man etwas besser machen kann würde ich mich über Tipps freuen.</p>
<p>In meinem Header <strong>Routine.h</strong></p>
<pre><code>int HammingDistance(std::vector&lt;int&gt; &amp;vecA, std::vector&lt;int&gt; &amp;vecB);
void MatricesRowComparison(std::vector&lt; std::vector&lt;int&gt; &gt; &amp;MatrixA, std::vector&lt; std::vector&lt;int&gt; &gt; &amp;MatrixB);
</code></pre>
<p>Die Source Datei <strong>Routine.cpp</strong></p>
<pre><code>// _____________________________________________________________________
// Hamming distance of two vectors
int Routine::HammingDistance(std::vector&lt;int&gt; &amp;vecA, std::vector&lt;int&gt; &amp;vecB) {
int hm_distance; hm_distance=0;

for(size_t i=0; i&lt;vecA.size(); i++){
if(!(vecA[i]==vecB[i])){hm_distance++;} else{hm_distance=hm_distance+0;}
}

return hm_distance;
}
// _____________________________________________________________________
// Compare the Hamming distance for each possible row of two matrices 
void Routine::MatricesRowComparison(std::vector&lt; std::vector&lt;int&gt; &gt; &amp;MatrixA, std::vector&lt; std::vector&lt;int&gt; &gt; &amp;MatrixB) {
std::ofstream print(&quot;./Output.txt&quot;,std::ios_base::app);

int rowsA, columnsA, rowsB, dist;
rowsA=MatrixA.size(); columnsA=MatrixA[1].size(); rowsB=MatrixB.size(); 

std::vector&lt;int&gt; vectorsA(columnsA);
std::vector&lt;int&gt; vectorsB(columnsA);

for(int r=0; r&lt;rowsA; ++r) {
  for(int s=0; s&lt;rowsB; ++s) {
    for(int n=0; n&lt;columnsA; ++n) {
      vectorsA[n]=MatrixA[r][n]; 
      vectorsB[n]=MatrixB[s][n]; 
    }  
  dist = Routine::HammingDistance(vectorsA, vectorsB); // Calculate Hamming distance
  if(dist==0) {print &lt;&lt; std::endl &lt;&lt; &quot;Attractor &quot; &lt;&lt; s+1 &lt;&lt; &quot; is fixpoint for pattern &quot; &lt;&lt; r+1;} 
  else{continue;}
  }
}

}
// _____________________________________________________________________
</code></pre>
<p>Und in der main Funktion wird das dann aufgerufen</p>
<pre><code>Routine::MatricesRowComparison(pattern, attractors);
</code></pre>
<p>(Bei mir heißt die Matrix A pattern und B heißt attractors)</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500299</guid><dc:creator><![CDATA[cpp_Jungspund]]></dc:creator><pubDate>Mon, 27 Jun 2016 18:34:08 GMT</pubDate></item><item><title><![CDATA[Reply to Grenzen bei verschachtelten Schleifen on Mon, 27 Jun 2016 19:50:02 GMT]]></title><description><![CDATA[<p>Ein paar Kommentare dazu:</p>
<ul>
<li>Mir gefällt dein Einrückstil nicht. Während vieles davon Geschmackssache ist, ist es doch überwiegender Konsens, dass du sowas wie <code>if(!(vecA[i]==vecB[i])){hm_distance++;} else{hm_distance=hm_distance+0;}</code> auf mehrere Zeilen aufteilen solltest. Außerdem würde ich auch den Code in Funktionen einrücken. Und Zeilen 29-31 sind falsch eingerückt. Ich persönlich mal <code>clang-format</code> sehr gerne zum automatischen Formatieren (Ich persönlich mag 4 Spaces Einrückung am liebsten).</li>
<li><code>vector::size()</code> liefert <code>size_t</code> zurück, nicht <code>int</code> . Das ist bei dir durchgehend ignoriert. Sowas wie</li>
</ul>
<pre><code>int rowsA, columnsA, rowsB, dist;
rowsA=MatrixA.size(); columnsA=MatrixA[1].size(); rowsB=MatrixB.size();
</code></pre>
<p>kannst du besser schreiben wie folgt:</p>
<pre><code>auto rowsA = MatrixA.size();
auto columnsA = MatrixA[1].size();
auto rowsB = MatrixB.size();
</code></pre>
<p>und das <code>dist</code> kannst du später direkt in <code>auto dist = HammingDistance(...)</code> deklarieren.</p>
<ul>
<li>Den <code>ofstream</code> würde ich von außen in die Funktion hineingeben, er hat ja mit der eigentlichen Berechnung nix zu tun (wenn es denn wirklich ein stream sein muss und die Funktion nicht vielleicht das Resultat in anderer Form zurückgeben könnte). Und <code>print</code> klingt eher nah dem Namen einer Funktion als nach einem Stream. Ich würde <code>os</code> als Namen vorschlagen.</li>
<li>Du solltest Parameter als <code>const</code> deklarieren, wenn du sie nicht änderst (Parameter von HammingDistance).</li>
<li>Wozu soll <code>hm_distance=hm_distance+0;</code> gut sein?!</li>
<li>Den Code habe ich nicht ganz genau durchgeguckt, aber du kopierst 2 Vectoren. Es sollte doch reinen, nur einen Matrix zu transponieren, aus der anderen kannst du die Zeilen doch direkt nehmen.</li>
</ul>
<p>Und zum Ende: ISLAND VOR!!!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500306</guid><dc:creator><![CDATA[wob]]></dc:creator><pubDate>Mon, 27 Jun 2016 19:50:02 GMT</pubDate></item><item><title><![CDATA[Reply to Grenzen bei verschachtelten Schleifen on Mon, 27 Jun 2016 20:00:41 GMT]]></title><description><![CDATA[<p>Als Beispiel wie man es macht, ist das aber nicht geeignet.</p>
<p>Wenn der else-Zweig keinen Effekt hat (+ 0), dann lass ihn komplett weg.</p>
<p>Die n-Schleife kannst du weglassen,</p>
<p>Ein</p>
<pre><code>dist = Routine::HammingDistance(vectorsA[r], vectorsB[s]);
</code></pre>
<p>sollte reichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500310</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Mon, 27 Jun 2016 20:00:41 GMT</pubDate></item><item><title><![CDATA[Reply to Grenzen bei verschachtelten Schleifen on Mon, 27 Jun 2016 22:15:11 GMT]]></title><description><![CDATA[<p>Danke für die Kritik. Ich werde versuchen sie umzusetzen.</p>
<p>const-correctness ist etwas woran ich derzeit in meinen Büchern lese. Ich muss gestehen ich verstehe bei konkret diesem Punkt noch einiges nicht. Ich sah mir vor kurzem einen Vortrag an, der hat mich ehrlich gesagt aber nur mehr verwirrt. Dieser hier:</p>
<p><a href="https://www.youtube.com/watch?v=Y1KOuFYtTF4" rel="nofollow">https://www.youtube.com/watch?v=Y1KOuFYtTF4</a></p>
<p>In meinem Buch steht aber auch noch viel das ich noch nicht gelesen habe. Ich bleibe am Ball und hoffe, dass das mit der Zeit und Übung schon wird.</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500328</guid><dc:creator><![CDATA[cpp_Jungspund]]></dc:creator><pubDate>Mon, 27 Jun 2016 22:15:11 GMT</pubDate></item></channel></rss>