<?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[Wert in einer rekursioven Funktion sichern]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>Ich habe doch noch ein Problem bei meiner Mergesort-Aufgabe. Und zwar:</p>
<pre><code>void MergeSort(int* a, int Anfang, int Ende){
	if(Anfang &lt; Ende){
	int Laenge ;
	if (Laenge &lt;= Ende){Laenge = 0;}
	if(Laenge &lt; Ende){Laenge = Ende;}
	int Mitte = (Anfang + Ende) / 2;

	MergeSort (a, Anfang, Mitte);

	MergeSort (a, Mitte + 1, Ende);
</code></pre>
<p>Ja, ich weiss, der code ist nich fehlerfrei, ich sehe auch den Fehler <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="😃"
    /><br />
Ich sage mal, was ich erreichen möchte: ich will dass &quot;Laenge&quot; den 1. Wert von Ende annimt und danach beim nächsten (rekusioven) AUfruf der Funktion sich nicht mehr ändert. Das, was ihr sieht, ist einer meiner letzten Versuche, und wie ihr schon ahnen konnt, hat sich das Programm wegen dem Widerspruch im Code aufgehängt <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="🙂"
    /> Irgendein VOrschlag, wie ich den Wert von Laenge sichern könnte?</p>
<p>Vielen Dank im Vorauas<br />
babadura</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/255484/wert-in-einer-rekursioven-funktion-sichern</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 23:42:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/255484.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Dec 2009 13:40:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wert in einer rekursioven Funktion sichern on Tue, 01 Dec 2009 13:40:22 GMT]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>Ich habe doch noch ein Problem bei meiner Mergesort-Aufgabe. Und zwar:</p>
<pre><code>void MergeSort(int* a, int Anfang, int Ende){
	if(Anfang &lt; Ende){
	int Laenge ;
	if (Laenge &lt;= Ende){Laenge = 0;}
	if(Laenge &lt; Ende){Laenge = Ende;}
	int Mitte = (Anfang + Ende) / 2;

	MergeSort (a, Anfang, Mitte);

	MergeSort (a, Mitte + 1, Ende);
</code></pre>
<p>Ja, ich weiss, der code ist nich fehlerfrei, ich sehe auch den Fehler <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="😃"
    /><br />
Ich sage mal, was ich erreichen möchte: ich will dass &quot;Laenge&quot; den 1. Wert von Ende annimt und danach beim nächsten (rekusioven) AUfruf der Funktion sich nicht mehr ändert. Das, was ihr sieht, ist einer meiner letzten Versuche, und wie ihr schon ahnen konnt, hat sich das Programm wegen dem Widerspruch im Code aufgehängt <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="🙂"
    /> Irgendein VOrschlag, wie ich den Wert von Laenge sichern könnte?</p>
<p>Vielen Dank im Vorauas<br />
babadura</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1815909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815909</guid><dc:creator><![CDATA[babadura]]></dc:creator><pubDate>Tue, 01 Dec 2009 13:40:22 GMT</pubDate></item><item><title><![CDATA[Reply to Wert in einer rekursioven Funktion sichern on Tue, 01 Dec 2009 14:10:14 GMT]]></title><description><![CDATA[<p>deine if's am Anfang machen irgendwie garkeinen Sinn, vor allem der Vergleich mit ner uninitialisierten Variablen ist garnicht gut.<br />
Was willst du mit der Länge noch gleich erreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1815930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815930</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 01 Dec 2009 14:10:14 GMT</pubDate></item><item><title><![CDATA[Reply to Wert in einer rekursioven Funktion sichern on Tue, 01 Dec 2009 14:16:58 GMT]]></title><description><![CDATA[<p>ja, ich weiss, dass diese if's gar keinen Sinn machen <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>
<pre><code>void Merge (int *a, int Anfang, int Mitte, int Ende /*,int Laenge*/){

	int tmp[Ende - Anfang + 1], i = Anfang, j = Mitte+1;
		for (int k=0;k&lt;=Ende-Anfang;k++){
			if ( (i&lt;=Mitte) &amp;&amp; (( j&gt;Ende) || (a[i] &lt; a[j]))){
			tmp[k] = a[i];
			i++;
			}
			else{
			tmp[k]=a[j];
			j++;
			//cout&lt;&lt;a[i]&lt;&lt;&quot; &quot;&lt;&lt;a[j]&lt;&lt;endl;
			}
		}
		for(int k=0; k&lt;=Ende-Anfang;k++){
		a[Anfang+k] = tmp[k];
		}

		for(int b=0;b&lt;16;b++) //hier möchste ich &quot;b&lt;Laenge&quot; haben 
                {
		cout&lt;&lt;a[b]&lt;&lt;&quot; &quot;;
		}
		cout&lt;&lt;endl;
}

void MergeSort(int* a, int Anfang, int Ende){
	if(Anfang &lt; Ende){
	int Laenge = 0;
	//if (Laenge &lt;= Ende){Laenge = 0;}
	//if(Laenge &lt; Ende){Laenge = Ende;}
	int Mitte = (Anfang + Ende) / 2;

	//cout&lt;&lt;Anfang&lt;&lt;&quot;  &quot;&lt;&lt;Mitte&lt;&lt;&quot; &quot;&lt;&lt;Mitte+1&lt;&lt;&quot; &quot;&lt;&lt;Ende&lt;&lt;endl;
	MergeSort (a, Anfang, Mitte);

	MergeSort (a, Mitte + 1, Ende);

	Merge (a, Anfang, Mitte, Ende/*, Laenge*/);

	}
}
</code></pre>
<p>So sah meine Code ursprunglich aus. Mergesort wird natuerlich aus main aufgerufen. Das ist auch der grund, warum ich versuche Laenge in Mergesort so irgendwie an Merge zu übergeben, dass er nur den ganz ersten Wert übergibt, und nicht geänderten. Ich möchste quasi nicht auf dem Bildschirm nur eine konstate Anzahl von Zahlen ausgegeben bekommen. Ich glaube, ich habe mich wieder etwas unglücklich ausgedruckt, ich kann nur hoffen, dass Ihr mich verstanden habt <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>babadura</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1815935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815935</guid><dc:creator><![CDATA[babadura]]></dc:creator><pubDate>Tue, 01 Dec 2009 14:16:58 GMT</pubDate></item><item><title><![CDATA[Reply to Wert in einer rekursioven Funktion sichern on Tue, 01 Dec 2009 14:40:31 GMT]]></title><description><![CDATA[<p>babadura schrieb:</p>
<blockquote>
<p>ja, ich weiss, dass diese if's gar keinen Sinn machen <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>
</blockquote>
<p>Dann setz uns doch nichts vor was uns verwirrt.<br />
Warum reichst du die Länge nicht einfach durch - nur in der äußersten Funktion (dem einzigen Aufruf der von außen kommt) übergibst du nichts oder lässt sie berechnen.</p>
<pre><code class="language-cpp">void Merge (int *a, int Anfang, int Mitte, int Ende ,int Laenge){
	int tmp[Ende - Anfang + 1], i = Anfang, j = Mitte+1;
	for (int k=0;k&lt;=Ende-Anfang;k++){
		if ( (i&lt;=Mitte) &amp;&amp; (( j&gt;Ende) || (a[i] &lt; a[j]))){
			tmp[k] = a[i];
			i++;
		}
		else{
			tmp[k]=a[j];
			j++;
			//cout&lt;&lt;a[i]&lt;&lt;&quot; &quot;&lt;&lt;a[j]&lt;&lt;endl;
		}
	}
	for(int k=0; k&lt;=Ende-Anfang;k++){
		a[Anfang+k] = tmp[k];
	}

	for(int b=0;b&lt;Laenge;b++){
		cout&lt;&lt;a[b]&lt;&lt;&quot; &quot;;
	}
	cout&lt;&lt;endl;
}

void MergeSort(int* a, int Anfang, int Ende, int Laenge = 0){
	if (Laenge==0) Laenge = Ende-Anfang;

	if(Anfang &lt; Ende){
		int Mitte = (Anfang + Ende) / 2;
		//cout&lt;&lt;Anfang&lt;&lt;&quot;  &quot;&lt;&lt;Mitte&lt;&lt;&quot; &quot;&lt;&lt;Mitte+1&lt;&lt;&quot; &quot;&lt;&lt;Ende&lt;&lt;endl;
		MergeSort (a, Anfang, Mitte, Laenge);
		MergeSort (a, Mitte + 1, Ende, Laenge);
		Merge (a, Anfang, Mitte, Ende, Laenge);
	}
}
</code></pre>
<p>Ich hab dir die Einrückungen mal korrigiert und cpp-Tags spendiert, so wies war wars schrecklich und inkonsistent.</p>
<p>Alternative gibts auch noch:</p>
<pre><code class="language-cpp">void DoMergeSort(int* a, int Anfang, int Ende, int Laenge){
	if(Anfang &lt; Ende){
		int Mitte = (Anfang + Ende) / 2;
		//cout&lt;&lt;Anfang&lt;&lt;&quot;  &quot;&lt;&lt;Mitte&lt;&lt;&quot; &quot;&lt;&lt;Mitte+1&lt;&lt;&quot; &quot;&lt;&lt;Ende&lt;&lt;endl;
		DoMergeSort (a, Anfang, Mitte, Laenge);
		DoMergeSort (a, Mitte + 1, Ende, Laenge);
		Merge (a, Anfang, Mitte, Ende, Laenge);
	}
}

//Die hier wird in der main aufgerufen:
void MergeSort(int* a, int Laenge){ 
	if (Laenge&gt;0){
		DoMergeSort(a, 0, Laenge, Laenge);
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1815950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815950</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 01 Dec 2009 14:40:31 GMT</pubDate></item><item><title><![CDATA[Reply to Wert in einer rekursioven Funktion sichern on Wed, 02 Dec 2009 12:18:04 GMT]]></title><description><![CDATA[<p>Vielen Dank, jetzt funktioniert es. Na ja, warum ist es mir selber nicht eingefallen?..</p>
<p>Ansonsten - es tut mir leid für die unverständliche code - bin ein Programmieranfänger und schönheits-OP werde ich nur gleich durchführen. Hoffentlich lerne ich irgendwann mal auch ohne OPs auszukommen.</p>
<p>Ich entschuldige mich auch für den eher unverständlichen Code aus dem 1. Beitrag - irgendwie ist mir mein Code so vertraut gewesen, dass ich dachte, es ist der ganzen Welt vertraut. <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>
<p>Liebe Grüße<br />
Babadura</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816406</guid><dc:creator><![CDATA[babadura]]></dc:creator><pubDate>Wed, 02 Dec 2009 12:18:04 GMT</pubDate></item><item><title><![CDATA[Reply to Wert in einer rekursioven Funktion sichern on Wed, 02 Dec 2009 14:17:28 GMT]]></title><description><![CDATA[<p>babadura schrieb:</p>
<blockquote>
<p>Hoffentlich lerne ich irgendwann mal auch ohne OPs auszukommen.</p>
</blockquote>
<p>Hoffentlich nicht. Es gibt an jedem Code immer stellen, die verbessert werden können. Man schaffts quasi nie im ersten Wurf <em>Den Idealen Code</em> hinzuschreiben. Wenn du also irgendwann meinst dass du ohne Refactoring und kontinuierliche Verbesserungen auskommst hats du das Stadium erreicht wo dein Code unweigerlich vergammelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816480</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 02 Dec 2009 14:17:28 GMT</pubDate></item></channel></rss>