<?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[Abbruchkriterium bei return anweisung]]></title><description><![CDATA[<p>Hallo ich habe ein problem, was mich seit wochen beschäftigt und mir ist noch nicht die richtige idee eingefallen.</p>
<p>also folgendes:</p>
<p>ich habe ein array mit m-1 stellen, die anfangs mit 0 belegt ist.<br />
in diesem array will ich sämtliche partitionen durchlaufen, im sinne von</p>
<p>000<br />
001<br />
010<br />
011<br />
012</p>
<p>und dann sollte (!) er bei 012 abbrechen.</p>
<p>mein algorithmus durchläuft alles wunderbar und gibt den richtigen wert auch an die hauptfunktion zurück<br />
allerdings macht er dann dummerweise weiter...<br />
auch wenn ich ein abbruchkriterium einbaue zb:<br />
int partition (int *par, int m)<br />
{<br />
....</p>
<p>if (x==1)<br />
return (*par);</p>
<p>}<br />
x ist nur dann eins, wenn 012 wie oben zb erreicht ist und dieses kriterium passt auch das habe ich mehrmals überprüft.</p>
<p>das problem ist, dass er zwar alles richtig durchläuft, aber nicht beim richtigen punkt bzw überhaupt nicht abbricht.</p>
<p>woran liegt das?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/209871/abbruchkriterium-bei-return-anweisung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 02:21:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209871.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Apr 2008 09:08:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Abbruchkriterium bei return anweisung on Fri, 04 Apr 2008 09:08:27 GMT]]></title><description><![CDATA[<p>Hallo ich habe ein problem, was mich seit wochen beschäftigt und mir ist noch nicht die richtige idee eingefallen.</p>
<p>also folgendes:</p>
<p>ich habe ein array mit m-1 stellen, die anfangs mit 0 belegt ist.<br />
in diesem array will ich sämtliche partitionen durchlaufen, im sinne von</p>
<p>000<br />
001<br />
010<br />
011<br />
012</p>
<p>und dann sollte (!) er bei 012 abbrechen.</p>
<p>mein algorithmus durchläuft alles wunderbar und gibt den richtigen wert auch an die hauptfunktion zurück<br />
allerdings macht er dann dummerweise weiter...<br />
auch wenn ich ein abbruchkriterium einbaue zb:<br />
int partition (int *par, int m)<br />
{<br />
....</p>
<p>if (x==1)<br />
return (*par);</p>
<p>}<br />
x ist nur dann eins, wenn 012 wie oben zb erreicht ist und dieses kriterium passt auch das habe ich mehrmals überprüft.</p>
<p>das problem ist, dass er zwar alles richtig durchläuft, aber nicht beim richtigen punkt bzw überhaupt nicht abbricht.</p>
<p>woran liegt das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486278</guid><dc:creator><![CDATA[cafriga]]></dc:creator><pubDate>Fri, 04 Apr 2008 09:08:27 GMT</pubDate></item><item><title><![CDATA[Reply to Abbruchkriterium bei return anweisung on Fri, 04 Apr 2008 09:10:57 GMT]]></title><description><![CDATA[<p>Dazu musst du schon etwas mehr Code zeigen. Hast du den wert von x im Debugger überprüft?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486280</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 04 Apr 2008 09:10:57 GMT</pubDate></item><item><title><![CDATA[Reply to Abbruchkriterium bei return anweisung on Fri, 04 Apr 2008 09:14:16 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Dazu musst du schon etwas mehr Code zeigen. Hast du den wert von x im Debugger überprüft?</p>
</blockquote>
<p>ja habe ich wie gesagt mehrmals<br />
ok dann der ganze code... egal wie konfus er aussieht, er funktioniert bis auf das abbrechen..</p>
<pre><code>int partition2 (int *par, int m)
{
    int j=0,i=0,  k=0, l=0, max=0, x=0, z=0, xy=0, r=0;       

    for(i=0;i&lt;m;i++)                              //
        if(par[i]!=0)                             //Hier wird das Maximum für jede entsprechende
            break;                                //Stelle berechnet.
        for (j=i;j&lt;m;j++)                         //
            max++;                                //

    if (par[m-1]==0)                              //
       {                                          //Wenn die letzte Stelle Null ist, dann wird hier
       par[m-1]++;                                //die letzte Stelle des Arrays um eins erhöht.
       return (*par);                             //
       }                                          //

    if(par[m-1]&gt;0)                                // Falls die letzte Stelle des Arrays größer als 
     {                                            //Null ist werden folgende Aktionen in Gang gesetzt

            for (j=m-1;j&gt;0;j--)
            { 
                l=par[j];

                if(l&lt;max)                         //Prüfung, ob die Stelle das entsprechende Maximum noch nicht erreicht hat
                   {    
                        par [j]++;                //Falls nein, wird hier der komplette Array als Zahl gesehen, ähnlich dem
                        for(i=j+1; i&lt;m; i++)      //binären Zählalgorithmus um eins erhöht.
                             par [i]=0;           //

                        for(r=0;r&lt;m;r++)          //
                            if(par[r]!=0)         //
                                if(par[r]==1)     //
                                    {             // Hier wird überprüft, ob die erste Stelle 
                                    xy=1;         //des Arrays ungleich Null wie vorgesehen eine eins
                                    break;        //ist.
                                                  //
                                    }             //
                                else              //
                                  {               //
                                  xy=0;           //
                                  break;}         //
                            z=1;
                        if(xy==1)                 //Falls dies zutrifft, wird hier weiter geprüft
                        for(i=r;i&lt;m;i++)          //
                        { 

                          if(par[i]!=0)           //
                              if(z+1&gt;=par[i])     //Hier wird überprüft, ob der Abstand zwischen
                                  {               //den einzelnen Arrayeinträgen nicht mehr als
                                  x=1;            //eins beträgt
                                  z=par[i];       //
                                  }               //
                              if(z&lt;par[i])        //
                               {   x=0;           //
                               break;}            //
                                                  //
                          }                       //

                        if (x==1)                  //Falls die neuen Arraywerte den obigen Prüfungen
                             return (*par);        //standhielten, wird hier der Wert ausgegeben.

                   }

       }

     }   

}
</code></pre>
<p>und dieser wert wird in eine schleife zurückgegeben, die momentan testweise einfach 30 mal durchlaufen wird.<br />
bei anderen funktionen bricht er vor den 30 durchläufen richtig ab, aber in diesem fall wird 30 mal ein wert zurückgegeben, auch wenn ich schon lange damit fertig wäre...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486285</guid><dc:creator><![CDATA[cofriga]]></dc:creator><pubDate>Fri, 04 Apr 2008 09:14:16 GMT</pubDate></item><item><title><![CDATA[Reply to Abbruchkriterium bei return anweisung on Fri, 04 Apr 2008 09:37:05 GMT]]></title><description><![CDATA[<p>Wird die Stelle überhaupt erreicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486306</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 04 Apr 2008 09:37:05 GMT</pubDate></item><item><title><![CDATA[Reply to Abbruchkriterium bei return anweisung on Fri, 04 Apr 2008 09:39:39 GMT]]></title><description><![CDATA[<p>ja wie gesagt alles 100 mal überprüft er gibt nur werte zurück die er gar nicht mehr zurückgeben dürfte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486310</guid><dc:creator><![CDATA[cofriga]]></dc:creator><pubDate>Fri, 04 Apr 2008 09:39:39 GMT</pubDate></item><item><title><![CDATA[Reply to Abbruchkriterium bei return anweisung on Fri, 04 Apr 2008 10:19:05 GMT]]></title><description><![CDATA[<p>vielleicht hilft es noch weiter wenn ich den entsprechenden abschnitt in der main noch poste</p>
<pre><code>for (i=0; i&lt;n; i++)
{
partition(Part, m);
outarr(Part, m);
}
</code></pre>
<p>n ist dabei 30 und diese ganze schleife ist noch provisorisch, aber am ende wird da auch eine schleife stehen... outarr ist die ausgabe des array.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486346</guid><dc:creator><![CDATA[cofriga]]></dc:creator><pubDate>Fri, 04 Apr 2008 10:19:05 GMT</pubDate></item><item><title><![CDATA[Reply to Abbruchkriterium bei return anweisung on Fri, 04 Apr 2008 10:27:44 GMT]]></title><description><![CDATA[<p>Was gravierendes konnte ich jetzt nicht finden.</p>
<p>Also ich würde da mal ein wenig Ordnung in den Code bringen und dann Schritt für Schritt druchgehen (wenn nötig vereinfachen) und schauen, was für Werte vorliegen. Und wenn irgendwo ein Wert nicht das ist, was du denkst er haben sollte, dann hast du das Problem schon mal eingegrenzt.</p>
<p>Du weisst ja, dass irgendwie was mit dem x nicht stimmt, also einfach schauen, von wo er den falschen Wert hat.</p>
<p>btw.<br />
Eventuell liegt es daran, dass irgendeine Variable 2 mal benutzt wird und du merkst es nicht. Also könntest du auch einfach mal die Namen so ändern, dass sie ein wenig klarer sind, was sie machen sollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486353</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 04 Apr 2008 10:27:44 GMT</pubDate></item><item><title><![CDATA[Reply to Abbruchkriterium bei return anweisung on Fri, 04 Apr 2008 10:30:05 GMT]]></title><description><![CDATA[<p>Etwas gravierendes: Da fehlen an einigen Stellen geschweifte Klammern bei den Schleifen, so daß diese keinen Sinn machen und auch die ganze Einrückung sinnlos ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486355</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Fri, 04 Apr 2008 10:30:05 GMT</pubDate></item><item><title><![CDATA[Reply to Abbruchkriterium bei return anweisung on Fri, 04 Apr 2008 10:47:20 GMT]]></title><description><![CDATA[<p>Das stimmt so nicht. Jede Schleife dort macht etwas. Das man das anders und auch kürzer formulieren könnte ist klar, aber völlig sinnlos ist keine Schleife.<br />
Hier mal mit mehr Klammern, ein paar Umformungen und ccp-Tags.</p>
<pre><code class="language-cpp">int partition2 (int *par, int m)
{
    int j=0,i=0, l=0, max=0, x=0, z=0, xy=0, r=0;
    for(i=0;i&lt;m;i++)
    {
        if(par[i]!=0)                             //Hier wird das Maximum für jede entsprechende
            break;
    }
    for (j=i;j&lt;m;j++)                         //
        max++;                                //
    if (par[m-1]==0)                              //
    {                                          //Wenn die letzte Stelle Null ist, dann wird hier
       par[m-1]++;                                //die letzte Stelle des Arrays um eins erhöht.
       return (*par);                             //
    }                                          //
    if(par[m-1]&gt;0)                                // Falls die letzte Stelle des Arrays größer als
    {                                            //Null ist werden folgende Aktionen in Gang gesetzt
        for (j=m-1;j&gt;0;j--)
        {
            l=par[j];
            if(l&lt;max)                         //Prüfung, ob die Stelle das entsprechende Maximum noch nicht erreicht hat
            {
                par [j]++;                //Falls nein, wird hier der komplette Array als Zahl gesehen, ähnlich dem
                for(i=j+1; i&lt;m; i++)      //binären Zählalgorithmus um eins erhöht.
                    par [i]=0;
                for(r=0;r&lt;m;r++)
                {         //
                    if(par[r]!=0)
                    {        //
                        if(par[r]==1)
                        {             // Hier wird überprüft, ob die erste Stelle
                            xy=1;         //des Arrays ungleich Null wie vorgesehen eine eins
                        } else
                        {
                            xy=0;
                        }
                        break;
                    }
                }
                z=1;
                if(xy==1)
                {
                    for(i=r;i&lt;m;i++)
                    {
                        if(par[i]!=0 &amp;&amp; z+1&gt;=par[i])     //Hier wird überprüft, ob der Abstand zwischen
                        {
                                x=1;            //eins beträgt
                                z=par[i];
                        }
                        if(z&lt;par[i])
                        {
                            x=0;
                            break;
                        }
                    }
                }
                if (x==1)                  //Falls die neuen Arraywerte den obigen Prüfungen
                    return (*par);        //standhielten, wird hier der Wert ausgegeben.
            }
        }
     }
     return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1486364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486364</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 04 Apr 2008 10:47:20 GMT</pubDate></item><item><title><![CDATA[Reply to Abbruchkriterium bei return anweisung on Fri, 04 Apr 2008 11:37:35 GMT]]></title><description><![CDATA[<p>also schon mal vielen dank für die vielen antworten, aber ich glaube das problem liegt weniger am code selbst als an meiner anwendung der return-anweisung (vielleicht)</p>
<p>wenn ich zb ganz radikal x==0 setze, dürfte zb kein wert ausgegeben werden, wird er aber trotzdem.</p>
<p>vielleicht ist das eher so, dass ich, wenn kein wert zurückgegeben wird, in die main zurückgesprungen wird und dieser veränderte wert -obwohl er nicht gewünscht ist - ausgegeben wird.<br />
wie ich das aber verhindern kann, weiß ich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486386</guid><dc:creator><![CDATA[cofriga]]></dc:creator><pubDate>Fri, 04 Apr 2008 11:37:35 GMT</pubDate></item><item><title><![CDATA[Reply to Abbruchkriterium bei return anweisung on Fri, 04 Apr 2008 12:01:55 GMT]]></title><description><![CDATA[<p>Deine Funktion hat ja nicht in jedem Fall ein return. Das hatte ich in meiner Variante ja auch korrigiert. Getestet habe ich das aber nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486404</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 04 Apr 2008 12:01:55 GMT</pubDate></item><item><title><![CDATA[Reply to Abbruchkriterium bei return anweisung on Fri, 04 Apr 2008 13:05:07 GMT]]></title><description><![CDATA[<p>Also wenn du sagst, dass da was zurückgegeben wird, obwohl es nicht dürfte, dann würde ich sagen, dass der Fehler hier liegt:</p>
<pre><code class="language-cpp">if (par[m-1]==0)                              //
    {                                          //Wenn die letzte Stelle Null ist, dann wird hier
       par[m-1]++;                                //die letzte Stelle des Arrays um eins erhöht.
       return (*par);                             //
    }
</code></pre>
<p>Weil das die einzige Stelle ist, wo es sonst was zurückgibt.. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1486447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486447</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 04 Apr 2008 13:05:07 GMT</pubDate></item><item><title><![CDATA[Reply to Abbruchkriterium bei return anweisung on Fri, 04 Apr 2008 14:33:45 GMT]]></title><description><![CDATA[<p>vielen dank das problem wurde gelöst, ich habe einfach in der mainfunktion eine if-bedingung eingebaut, was jetzt funktioniert, nachdem der code auch richtig ist.</p>
<p>also danke nochmals, kann geschlossen werden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1486488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1486488</guid><dc:creator><![CDATA[cofriga]]></dc:creator><pubDate>Fri, 04 Apr 2008 14:33:45 GMT</pubDate></item></channel></rss>