<?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[switch&#x2F;goto]]></title><description><![CDATA[<p>Hallo<br />
Kann mir jemand bei meinem Problem helfen?</p>
<p>Ich habe ein Gitter mit L*L=N Punkten.<br />
Auf dieses Gitter setze ich irgendwo zwei Variable i1 und i2.<br />
Im Loop:<br />
Wenn i1=i2 wird entweder i1 zu irgendeinem Nachbar verschoben (shift()), oder beide Variable werden wieder zufällig auf einen anderen Punkt gesetzt (mit einer bestimmten Wahrscheinlichkeit - move()).<br />
Wenn beide Variable umplatziert werden, wird die Schleife verlassen.<br />
Wird verschoben, dann solange bis i1 wieder mit i2 zusammenfällt.</p>
<p>Nun kommt der Punkt bei dem ich Probleme habe:<br />
Die Schleife wird dann noch nicht verlassen, sondern es wird wieder entschieden, ob umplatziert wird oder ob i1 verschoben wird...</p>
<p>Ich weiss, man soll goto nicht unbedingt verwenden, aber ich habe sonst keine Idee. Ja, und nebenbei funktioniert das mit dem goto sowieso nicht (endlosschleife!)</p>
<p>Hier mal mein Idee:</p>
<pre><code class="language-cpp">for (int t = 0; t &lt; steps; t++)		//# of closed path
	{

		double p = drand48();
		int x;

		again:
		if ((i1 == 12) &amp;&amp; (p &lt; p0)) 
		{
			x = 1;
		}
		else if ((i1 == i2) &amp;&amp; (p &gt;= p0))
		{
			x = 2;
		}
		switch (x) 
		{
			case 1: move(); break;
			case 2: do 
				shift();
				while (i1 != i1); 
			default:  p = drand48();
				goto again;
				break;
		}
count_bonds();
	}
</code></pre>
<p>kann mir jemand sagen, wie man das elegant löst. Zerbreche mir schon seit Stunden den Kopf.<br />
danke<br />
nijntje</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301369/switch-goto</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 02:06:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301369.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Mar 2012 14:38:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to switch&#x2F;goto on Sun, 25 Mar 2012 14:53:13 GMT]]></title><description><![CDATA[<p>Hallo<br />
Kann mir jemand bei meinem Problem helfen?</p>
<p>Ich habe ein Gitter mit L*L=N Punkten.<br />
Auf dieses Gitter setze ich irgendwo zwei Variable i1 und i2.<br />
Im Loop:<br />
Wenn i1=i2 wird entweder i1 zu irgendeinem Nachbar verschoben (shift()), oder beide Variable werden wieder zufällig auf einen anderen Punkt gesetzt (mit einer bestimmten Wahrscheinlichkeit - move()).<br />
Wenn beide Variable umplatziert werden, wird die Schleife verlassen.<br />
Wird verschoben, dann solange bis i1 wieder mit i2 zusammenfällt.</p>
<p>Nun kommt der Punkt bei dem ich Probleme habe:<br />
Die Schleife wird dann noch nicht verlassen, sondern es wird wieder entschieden, ob umplatziert wird oder ob i1 verschoben wird...</p>
<p>Ich weiss, man soll goto nicht unbedingt verwenden, aber ich habe sonst keine Idee. Ja, und nebenbei funktioniert das mit dem goto sowieso nicht (endlosschleife!)</p>
<p>Hier mal mein Idee:</p>
<pre><code class="language-cpp">for (int t = 0; t &lt; steps; t++)		//# of closed path
	{

		double p = drand48();
		int x;

		again:
		if ((i1 == 12) &amp;&amp; (p &lt; p0)) 
		{
			x = 1;
		}
		else if ((i1 == i2) &amp;&amp; (p &gt;= p0))
		{
			x = 2;
		}
		switch (x) 
		{
			case 1: move(); break;
			case 2: do 
				shift();
				while (i1 != i1); 
			default:  p = drand48();
				goto again;
				break;
		}
count_bonds();
	}
</code></pre>
<p>kann mir jemand sagen, wie man das elegant löst. Zerbreche mir schon seit Stunden den Kopf.<br />
danke<br />
nijntje</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195234</guid><dc:creator><![CDATA[nijntje]]></dc:creator><pubDate>Sun, 25 Mar 2012 14:53:13 GMT</pubDate></item><item><title><![CDATA[Reply to switch&#x2F;goto on Sun, 25 Mar 2012 14:55:40 GMT]]></title><description><![CDATA[<p>continue - na gut. nicht ganz, da stehen ja noch 2 zeilen drüber <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2195244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195244</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 25 Mar 2012 14:55:40 GMT</pubDate></item><item><title><![CDATA[Reply to switch&#x2F;goto on Sun, 25 Mar 2012 15:03:35 GMT]]></title><description><![CDATA[<p>Du hast bei <code>while (i1 != i1);</code> einen Tippfehler. Außerdem fehlt dir in diesem Zweig das <code>break</code> . Wenn i1 != i2 ist, werden beide Variablen nicht verändert und du bist in einer Endlosschleife. Ist die Gleichheit etwa immer gegeben?</p>
<p>Edit: Achso, es gibt einen Pfad, bei dem <code>x</code> nichts zugewiesen wird, sodass du undefiniertes Verhalten hast. Praktisch gesehen, könnte in x zufällig der Wert 1 oder 2 stehen, weil du x nicht initialisierst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195249</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 25 Mar 2012 15:03:35 GMT</pubDate></item><item><title><![CDATA[Reply to switch&#x2F;goto on Sun, 25 Mar 2012 15:10:49 GMT]]></title><description><![CDATA[<p>Jetzt hab ich ganz vergessen, auf dein Problem einzugehen:</p>
<pre><code class="language-cpp">for (int t = 0; t &lt; steps; t++)        //# of closed path
{
    if(i1 == i2)
    {
        while(drand48() &gt;= p0)
            shiftUntilEqual();

        move();
        return;
    }
    count_bonds();
}
</code></pre>
<p>Ergibt natürlich noch nicht so viel Sinn, weil ich aus deinem Code aus obigen Gründen nicht ganz schlau werde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195253</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 25 Mar 2012 15:10:49 GMT</pubDate></item><item><title><![CDATA[Reply to switch&#x2F;goto on Sun, 25 Mar 2012 15:12:55 GMT]]></title><description><![CDATA[<p>continue geht doch. hast ja dort das gleiche stehen.</p>
<pre><code class="language-cpp">for (int t = 0; t &lt; steps; t++)		//# of closed path
{
  double p = drand48();
  int x; //initialisierung fehlt

  if ((i1 == 12) &amp;&amp; (p &lt; p0)) 
  {
    x = 1;
  }
  else if ((i1 == i2) &amp;&amp; (p &gt;= p0))
  {
    x = 2;
  }

  switch (x) 
  {
    case 1:
      move();
      break;
    case 2:
      do 
        shift(); //spielt das ne rollt, was shift macht?
      while (i1 != i1); //?
    default: 
      continue;
  }

  count_bonds();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2195255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195255</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 25 Mar 2012 15:12:55 GMT</pubDate></item><item><title><![CDATA[Reply to switch&#x2F;goto on Sun, 25 Mar 2012 15:17:52 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort. <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="🙂"
    /><br />
Also ich bin leider nur anfängerin in c++.<br />
ich dachte, wenn man das break weglässt, wird der nächste schritt im switch auch ausgeführt, das ist ja das was ich eigentlich will.<br />
wenn i1 sich mit i2 auf dem Punkt wieder trifft, soll zuerst entschieden werden (mit p), ob jetzt beide Punkte versetzt werden sollen (move()) und damit die Schleife verlassen, oder ob i1 wieder zu einem Nachbar geht (das wieder solange, bis i1=12).</p>
<pre><code class="language-cpp">void Worm::move(void)
{
	double c = drand48();
	i = c*N;

	i1 = i;		//both endpoints on the same site
	i2 = i;
	cout &lt;&lt; &quot;move to: i=&quot; &lt;&lt; i &lt;&lt; endl;
}
</code></pre>
<p>ja und shift() ist etwas sehr lang. hier nur der schritt indem die variable verändert werden:</p>
<pre><code class="language-cpp">i1 = j;
i = i1;
</code></pre>
<p>wobei i nach j geht. j ist der nächste Nachbar.</p>
<p>p.s. danke wegen dem tippfehler</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195257</guid><dc:creator><![CDATA[nijntje]]></dc:creator><pubDate>Sun, 25 Mar 2012 15:17:52 GMT</pubDate></item><item><title><![CDATA[Reply to switch&#x2F;goto on Sun, 25 Mar 2012 15:24:57 GMT]]></title><description><![CDATA[<p>es wird eben zuerst vorgeschlagen mit einer bestimmten wahrscheinlichkeit zu move() oder shift(). move() wird mit p=1 akzeptiert, falls vorgeschlagen.<br />
shift() wird mit einer bestimmten wahrscheinlichkeit akzeptiert, die eben in dieser funktion integriert ist.</p>
<p>(In shift wird noch gezeichnet und gelöscht und die nachbarn vorgeschlagen und die wahrscheinlichkeiten berechnet... aber das spielt jetzt keine rolle, oder?)</p>
<p>initialisierung von x=0??</p>
<p>nochmals danke ihr beiden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195260</guid><dc:creator><![CDATA[nijntje]]></dc:creator><pubDate>Sun, 25 Mar 2012 15:24:57 GMT</pubDate></item><item><title><![CDATA[Reply to switch&#x2F;goto on Sun, 25 Mar 2012 16:01:25 GMT]]></title><description><![CDATA[<p>ach ja, da fehlt nur die Initialisierung...</p>
<p>dann klappts!<br />
danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195271</guid><dc:creator><![CDATA[nijntje]]></dc:creator><pubDate>Sun, 25 Mar 2012 16:01:25 GMT</pubDate></item></channel></rss>