<?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[rekursive Funktion - Gestaltungsprobleme]]></title><description><![CDATA[<p>Guten Abend liebe C++ Freunde,</p>
<p>Ich habe eine Schwierigkeit beim erstellen der folgenden rekursiven Funktion (ordnen), wäre nett wenn ihr mir dabei etwas helfen könntet.</p>
<pre><code class="language-cpp">typedef struct element_sammlung * sammlung ;
typedef struct element_sammlung {
							int			wert ;
							sammlung	naechste ;
} element_sammlung ;
</code></pre>
<p>Fragt mich nicht warum die Struktur so definiert wurde, für Anfänger soll das wohl so einfacher sein. (laut Professor)</p>
<p>//Rekursive Funktion<br />
Ziel der Funktion &quot;ordnen&quot; ist es eine bestehende Sammlung (in Form einer Liste mit dynamisch allokierten Elementen.) aufsteigend zu ordnen. Dabei muss nicht betrachtet werden ob die Zahl mehrmals vorkommt denn das Elimieren mehrfacher gleicher Zahlen übernimmt später eine andere Funktion.</p>
<p><strong>Kurzes Beispiel:</strong></p>
<p>Gegeben: A = { 2 3 5 1 1}</p>
<p>ordnen (A);</p>
<p>A = {1 1 2 3 5}</p>
<pre><code class="language-cpp">void ordnen (sammlung&amp; S)
{

	if(S!=NULL)
		{
			sammlung temp = erstelle_leer();
			// Ich muss eine Temporäre Sammlung erstellen um einfuegen anwenden zu können,
			// aber das klappt mit der rekursivität dann nicht mehr.
			// Wie kann ich es anders machen?

			einfuegen(S-&gt;Wert,temp);
			ordnen(S-&gt;naechste);
			loeschen(S);
			S=temp;	
		}
	else
	{}
}
</code></pre>
<p>**Fals die Unterfunktion einfuegen und loeschen benötigt werden, kann ich diese auch noch gerne posten.<br />
**<br />
Beschreibung der beiden Funktionen (einfuegen und loeschen).</p>
<p>einfuegen: Fügt ein neues Element in die Liste an richtiger Stelle ein, richtige Stelle -&gt; in geordneter Reihenfolge.</p>
<p>loeschen: Gibt dynamischen Speicherplatz des verwendeten Elements frei.</p>
<p>Vielen Dank für eure Hilfe</p>
<p>Und seiet nachsichtig mit mir <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="😉"
    /> Ich lerne noch.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/257447/rekursive-funktion-gestaltungsprobleme</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 20:15:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257447.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 28 Dec 2009 21:46:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to rekursive Funktion - Gestaltungsprobleme on Mon, 28 Dec 2009 21:46:33 GMT]]></title><description><![CDATA[<p>Guten Abend liebe C++ Freunde,</p>
<p>Ich habe eine Schwierigkeit beim erstellen der folgenden rekursiven Funktion (ordnen), wäre nett wenn ihr mir dabei etwas helfen könntet.</p>
<pre><code class="language-cpp">typedef struct element_sammlung * sammlung ;
typedef struct element_sammlung {
							int			wert ;
							sammlung	naechste ;
} element_sammlung ;
</code></pre>
<p>Fragt mich nicht warum die Struktur so definiert wurde, für Anfänger soll das wohl so einfacher sein. (laut Professor)</p>
<p>//Rekursive Funktion<br />
Ziel der Funktion &quot;ordnen&quot; ist es eine bestehende Sammlung (in Form einer Liste mit dynamisch allokierten Elementen.) aufsteigend zu ordnen. Dabei muss nicht betrachtet werden ob die Zahl mehrmals vorkommt denn das Elimieren mehrfacher gleicher Zahlen übernimmt später eine andere Funktion.</p>
<p><strong>Kurzes Beispiel:</strong></p>
<p>Gegeben: A = { 2 3 5 1 1}</p>
<p>ordnen (A);</p>
<p>A = {1 1 2 3 5}</p>
<pre><code class="language-cpp">void ordnen (sammlung&amp; S)
{

	if(S!=NULL)
		{
			sammlung temp = erstelle_leer();
			// Ich muss eine Temporäre Sammlung erstellen um einfuegen anwenden zu können,
			// aber das klappt mit der rekursivität dann nicht mehr.
			// Wie kann ich es anders machen?

			einfuegen(S-&gt;Wert,temp);
			ordnen(S-&gt;naechste);
			loeschen(S);
			S=temp;	
		}
	else
	{}
}
</code></pre>
<p>**Fals die Unterfunktion einfuegen und loeschen benötigt werden, kann ich diese auch noch gerne posten.<br />
**<br />
Beschreibung der beiden Funktionen (einfuegen und loeschen).</p>
<p>einfuegen: Fügt ein neues Element in die Liste an richtiger Stelle ein, richtige Stelle -&gt; in geordneter Reihenfolge.</p>
<p>loeschen: Gibt dynamischen Speicherplatz des verwendeten Elements frei.</p>
<p>Vielen Dank für eure Hilfe</p>
<p>Und seiet nachsichtig mit mir <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="😉"
    /> Ich lerne noch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829070</guid><dc:creator><![CDATA[The architect 0]]></dc:creator><pubDate>Mon, 28 Dec 2009 21:46:33 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive Funktion - Gestaltungsprobleme on Mon, 28 Dec 2009 22:41:39 GMT]]></title><description><![CDATA[<p>Die Funktion zum Ordnen kannst du eigentlich recht einfach programmieren. Dazu probierst du der Einfachheit halber einfach mal den Bubblesort-Algorithmus aus.</p>
<p>Der ist nicht sehr schnell, aber sollte ausreichen, denke ich. Du musst ihn eben nur auf dein Problem anwenden und deine Elemente durch löschen und einfügen tauschen bzw. die Zeiger tauschen.</p>
<p><a href="http://de.wikipedia.org/wiki/Bubblesort" rel="nofollow">http://de.wikipedia.org/wiki/Bubblesort</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829093</guid><dc:creator><![CDATA[asdasd]]></dc:creator><pubDate>Mon, 28 Dec 2009 22:41:39 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive Funktion - Gestaltungsprobleme on Mon, 28 Dec 2009 22:44:34 GMT]]></title><description><![CDATA[<p>Achso... Muss es denn rekursiv sein? Wenn nicht, machs mit Bubblesort.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829097</guid><dc:creator><![CDATA[asdasd]]></dc:creator><pubDate>Mon, 28 Dec 2009 22:44:34 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive Funktion - Gestaltungsprobleme on Mon, 28 Dec 2009 23:07:00 GMT]]></title><description><![CDATA[<p>Ja es muss rekursiv sein, denke iterativ wäre für mich kein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829105</guid><dc:creator><![CDATA[The architect 0]]></dc:creator><pubDate>Mon, 28 Dec 2009 23:07:00 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive Funktion - Gestaltungsprobleme on Mon, 28 Dec 2009 23:50:40 GMT]]></title><description><![CDATA[<p>Also wenn du es mit dem Bubblesort-Algorithmus machst, brauchst du im Prinzip nichts löschen sondern kannst einfach die Werte/Zeiger austauschen.</p>
<p>Du kannst ja mal deinen kompletten Source hereinstellen, dann würde sich sicherlich noch eher jeman dazu bereit erklären, dir zu helfen <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/1829123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829123</guid><dc:creator><![CDATA[...]]></dc:creator><pubDate>Mon, 28 Dec 2009 23:50:40 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive Funktion - Gestaltungsprobleme on Sun, 03 Jan 2010 22:04:23 GMT]]></title><description><![CDATA[<p>Ich habe das nun mal mit dem Bubblesort Algo probiert,</p>
<p>Das ist von Algo-Wiki:</p>
<pre><code class="language-cpp">void swap(int&amp; a, int&amp; b)
{
	int z=a;
	a=b;
	b=z;
}

int main()
{
	int size;
	cout&lt;&lt;&quot;Wie viele Elemente wollen sie eingeben?&quot;&lt;&lt;endl;
	cin&gt;&gt;size;
	int* arr=new int[size];

	for(int i=0; i&lt;size; i++)
	{
		cout&lt;&lt;&quot;&gt;&quot;;
		cin&gt;&gt;arr[i];
	}

	cout&lt;&lt;&quot;\n\nBeginne Ausgabe\n\n&quot;&lt;&lt;endl;

	for(int i=0; i &lt; size; i++)
	{
		for(int j=1; j &lt; size-i; j++)
			if(arr[j] &gt; arr[j-1])
				swap(arr[j], arr[j-1]);
	}

	for(int i=0; i&lt;size; i++) cout&lt;&lt;i&lt;&lt;endl;  //Ausgeben

	return 0;
}
</code></pre>
<p>Meine Anpassung:</p>
<pre><code class="language-cpp">void change(sammlung&amp; A, sammlung&amp; B){

	sammlung tempo=A;
	tempo-&gt;naechste=A-&gt;naechste;	
	A=B;
	A-&gt;naechste = B-&gt;naechste;
	B=tempo;
}
</code></pre>
<pre><code class="language-cpp">void sortieren (sammlung&amp; C)
{
//iterativ
sammlung laeufer_C_1 = C;
sammlung laeufer_C_2 = C;

	while(laeufer_C_1!=NULL){
		while(laeufer_C_2-&gt;naechste!=NULL){

			if(laeufer_C_1-&gt;wert &lt; laeufer_C_2-&gt;naechste-&gt;wert)
				change(laeufer_C_1, laeufer_C_2-&gt;naechste);

			laeufer_C_2=laeufer_C_2-&gt;naechste;
		}
		laeufer_C_1=laeufer_C_1-&gt;naechste;
	}
}
</code></pre>
<p>Leider funktioniert meine Anpassung nicht richtig.<br />
Ich konnte diese if Bedingung nicht umsetzen,</p>
<pre><code class="language-cpp">if(arr[j] &gt; arr[j-1])
				swap(arr[j], arr[j-1]);
</code></pre>
<p>Weil ich verwende bei meiner Sammlung, eine dynamische Allokierung, deshalb kann ich nicht sagen welches Element vor einem anderen Element liegt.<br />
Auf die Gefahr hin das nun jemand sagt, kein Prob.. mach noch einen Zeiger auf das vorherige Element in die Struktur. Das könnte ich machen, aber laut Aufgabenstellung nicht erlaubt.</p>
<p>Wie könnte ich das Problem lösen?</p>
<p>Desweiteren, wie realisiert man den Bubblesort rekursiv? Weil ich will/muss das Rekursiv machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1831848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1831848</guid><dc:creator><![CDATA[The architect 0]]></dc:creator><pubDate>Sun, 03 Jan 2010 22:04:23 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive Funktion - Gestaltungsprobleme on Sun, 03 Jan 2010 23:22:56 GMT]]></title><description><![CDATA[<p>Ich schätze man kann Bubblesort nur indirekt Rekursiv machen:</p>
<pre><code class="language-cpp">bool bsort(Element *root)
{
	Element *ptr = root;

	while (ptr-&gt;next)
	{
		if (ptr-&gt;value &lt; ptr-&gt;next-&gt;value)
		{
			std::swap(ptr-&gt;value, ptr-&gt;next-&gt;value);

			return true;
		}

		ptr = ptr-&gt;next;
	}

	return false;
}

void sort(Element *root)
{
	Element *ptr = root;

	if (bsort(root))
	{
		sort(root);
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1831894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1831894</guid><dc:creator><![CDATA[asdasd]]></dc:creator><pubDate>Sun, 03 Jan 2010 23:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive Funktion - Gestaltungsprobleme on Sun, 03 Jan 2010 23:25:44 GMT]]></title><description><![CDATA[<p>Ich depp... Dabei liegt die Lösung vor den Füßen. Rekursiv:</p>
<pre><code class="language-cpp">void bsort(Element *root)
{
	Element *ptr = root;

	while (ptr-&gt;next)
	{
		if (ptr-&gt;value &lt; ptr-&gt;next-&gt;value)
		{
			std::swap(ptr-&gt;value, ptr-&gt;next-&gt;value);

			bsort(root);
		}

		ptr = ptr-&gt;next;
	}
}
</code></pre>
<p>Rekursiv. Et Voilà.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1831895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1831895</guid><dc:creator><![CDATA[asdasd]]></dc:creator><pubDate>Sun, 03 Jan 2010 23:25:44 GMT</pubDate></item><item><title><![CDATA[Reply to rekursive Funktion - Gestaltungsprobleme on Sun, 03 Jan 2010 23:37:37 GMT]]></title><description><![CDATA[<p>Auf die While-Schleife wirst du wohl nicht verzichten können. Ich habs ohne versucht, aber das geht nur bei sehr(!) kleinen Listen:</p>
<pre><code class="language-cpp">void bsort_r(Element *root, Element *pos)
{
	if (pos &amp;&amp; pos-&gt;next)
	{
		if (pos-&gt;value &lt; pos-&gt;next-&gt;value)
		{
			std::swap(pos-&gt;value, pos-&gt;next-&gt;value);

			bsort_r(root, root);
		}
		else
		{
			bsort_r(root, pos-&gt;next);
		}
	}
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1831900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1831900</guid><dc:creator><![CDATA[sadasdasd]]></dc:creator><pubDate>Sun, 03 Jan 2010 23:37:37 GMT</pubDate></item></channel></rss>