<?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[Übungsaufgabe]]></title><description><![CDATA[<p>Hallo wir sollen in einer Übungsaufgabe ein Programm um einige Stellen ergänzen.<br />
Es handelt sich um einen Binären Suchbaum.</p>
<p>Von mir ergänzt wurden bisher ein Teil im Einfügen und im Ausgeben.</p>
<p>Es sollen 1000 Zufallswerte eingefügt und diese ausgegeben werden, wobei größere Werte zuerst ausgegeben werden sollen.</p>
<p>Nur muss irgendwo ein gr0ßer Fehler drin sein, denn das Programm hängt sich auf:<br />
Wie gesagt der Fehler ist am wahrscheinlichsten in den Funktionen insert oder print</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;ctime&gt;

using namespace std;

struct knoten
{
    knoten *links;
    knoten *rechts;
    int wert;
};

knoten *new_knoten(int wert)
{
    knoten *hilf;
    hilf = new knoten;

    if (hilf == NULL)
    {
        return hilf;
    }
    else
    {
        hilf -&gt; links = NULL;
        hilf -&gt; rechts = NULL;
        hilf -&gt; wert = wert;
        return hilf;
    }
}

int insert_baum(knoten **wurzel, int wert)
{
// Der Baum ist noch leer
    if (*wurzel == NULL)
    {
        *wurzel = new_knoten(wert);
        if (*wurzel == NULL)
        {
            return 1;
        }
        return 0;
    }
    else if((wert &gt; (*wurzel)-&gt;wert) &amp;&amp; (*wurzel)-&gt;rechts == NULL)
    {
        (*wurzel)-&gt;rechts = new_knoten(wert);
    }
    else if((wert &lt; (*wurzel)-&gt;wert) &amp;&amp; (*wurzel)-&gt;links == NULL)
    {
        (*wurzel)-&gt;links = new_knoten(wert);
    }
    else
    {
        knoten** tmp = wurzel;
        if(wert &gt; (*tmp)-&gt;wert)
        {
            insert_baum( &amp;((*tmp)-&gt;rechts),wert);
        }
        else if(wert &lt; (*tmp)-&gt;wert)
        {
            insert_baum( &amp;((*tmp)-&gt;links), wert);
        }
    }
    return 0;
}

void print_baum(knoten *wurzel)
{
    if(wurzel == NULL)
    {
        cout &lt;&lt; &quot;Leerer Baum !&quot; &lt;&lt; endl;
    }
    else
    {
        while(wurzel-&gt;rechts != NULL)
        {
            print_baum(wurzel-&gt;rechts);
        }
        cout &lt;&lt; wurzel-&gt;wert &lt;&lt; endl;
        while(wurzel-&gt;links != NULL)
        {
            print_baum(wurzel-&gt;links);
        }
    }
}

int main()
{
    knoten *wurzel = NULL;
    srand(time(0));
    /* Funktion rand() gibt einen Zufallswert zurueck */
    for(int i= 0; i &lt;10; i++)
    {
        insert_baum(&amp;wurzel, rand()%100000);
    }
    print_baum(wurzel);
    return 1;
}
</code></pre>
<p>Es tut mir leid dass ich keine näheren Angeben machen kann bezüglich des Fehlers.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243896/übungsaufgabe</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 16:22:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243896.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Jun 2009 17:12:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Übungsaufgabe on Mon, 22 Jun 2009 17:12:37 GMT]]></title><description><![CDATA[<p>Hallo wir sollen in einer Übungsaufgabe ein Programm um einige Stellen ergänzen.<br />
Es handelt sich um einen Binären Suchbaum.</p>
<p>Von mir ergänzt wurden bisher ein Teil im Einfügen und im Ausgeben.</p>
<p>Es sollen 1000 Zufallswerte eingefügt und diese ausgegeben werden, wobei größere Werte zuerst ausgegeben werden sollen.</p>
<p>Nur muss irgendwo ein gr0ßer Fehler drin sein, denn das Programm hängt sich auf:<br />
Wie gesagt der Fehler ist am wahrscheinlichsten in den Funktionen insert oder print</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;ctime&gt;

using namespace std;

struct knoten
{
    knoten *links;
    knoten *rechts;
    int wert;
};

knoten *new_knoten(int wert)
{
    knoten *hilf;
    hilf = new knoten;

    if (hilf == NULL)
    {
        return hilf;
    }
    else
    {
        hilf -&gt; links = NULL;
        hilf -&gt; rechts = NULL;
        hilf -&gt; wert = wert;
        return hilf;
    }
}

int insert_baum(knoten **wurzel, int wert)
{
// Der Baum ist noch leer
    if (*wurzel == NULL)
    {
        *wurzel = new_knoten(wert);
        if (*wurzel == NULL)
        {
            return 1;
        }
        return 0;
    }
    else if((wert &gt; (*wurzel)-&gt;wert) &amp;&amp; (*wurzel)-&gt;rechts == NULL)
    {
        (*wurzel)-&gt;rechts = new_knoten(wert);
    }
    else if((wert &lt; (*wurzel)-&gt;wert) &amp;&amp; (*wurzel)-&gt;links == NULL)
    {
        (*wurzel)-&gt;links = new_knoten(wert);
    }
    else
    {
        knoten** tmp = wurzel;
        if(wert &gt; (*tmp)-&gt;wert)
        {
            insert_baum( &amp;((*tmp)-&gt;rechts),wert);
        }
        else if(wert &lt; (*tmp)-&gt;wert)
        {
            insert_baum( &amp;((*tmp)-&gt;links), wert);
        }
    }
    return 0;
}

void print_baum(knoten *wurzel)
{
    if(wurzel == NULL)
    {
        cout &lt;&lt; &quot;Leerer Baum !&quot; &lt;&lt; endl;
    }
    else
    {
        while(wurzel-&gt;rechts != NULL)
        {
            print_baum(wurzel-&gt;rechts);
        }
        cout &lt;&lt; wurzel-&gt;wert &lt;&lt; endl;
        while(wurzel-&gt;links != NULL)
        {
            print_baum(wurzel-&gt;links);
        }
    }
}

int main()
{
    knoten *wurzel = NULL;
    srand(time(0));
    /* Funktion rand() gibt einen Zufallswert zurueck */
    for(int i= 0; i &lt;10; i++)
    {
        insert_baum(&amp;wurzel, rand()%100000);
    }
    print_baum(wurzel);
    return 1;
}
</code></pre>
<p>Es tut mir leid dass ich keine näheren Angeben machen kann bezüglich des Fehlers.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731155</guid><dc:creator><![CDATA[seltsamer mensch]]></dc:creator><pubDate>Mon, 22 Jun 2009 17:12:37 GMT</pubDate></item><item><title><![CDATA[Reply to Übungsaufgabe on Mon, 22 Jun 2009 17:18:35 GMT]]></title><description><![CDATA[<p>seltsamer mensch schrieb:</p>
<blockquote>
<p>Es tut mir leid dass ich keine näheren Angeben machen kann bezüglich des Fehlers.</p>
</blockquote>
<p>Das tut uns auch leid. Kannst du denn nicht wenigstens sagen, wo sich das Programm aufhängt? Und vielleicht auch, wie (also Segmentation Fault, Heap Corruption, nichts passiert, Programm beendet sich sofort)?</p>
<p>Geh ansonsten mal mit dem Debugger durch und prüfe die Variablen.</p>
<p>Edit: Was mir gleich aufgefallen ist: Du prüfst nach deinen Anforderung mit <code>new</code> , ob der Zeiger Null ist. Sofern du nicht die <code>nothrow</code> -Version aufrufst (und das tust du hier nicht), wirft <code>new</code> bei Fehlschlag eine Exception vom Typ <code>std::bad_alloc</code> . Aber diese Fehlerabfrage kannst du momentan getrost vernachlässigen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731157</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 22 Jun 2009 17:18:35 GMT</pubDate></item><item><title><![CDATA[Reply to Übungsaufgabe on Mon, 22 Jun 2009 17:21:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">while(wurzel-&gt;rechts != NULL)
        {
            print_baum(wurzel-&gt;rechts);
        }
        cout &lt;&lt; wurzel-&gt;wert &lt;&lt; endl;
        while(wurzel-&gt;links != NULL)
        {
            print_baum(wurzel-&gt;links);
        }
</code></pre>
<p>Solltes es bei unterem nicht wurzel-&gt;rechts statt links sein?</p>
<p>edit: Hmm... scheint doch richtig zu sein, ich war blind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731158</guid><dc:creator><![CDATA[SWW13]]></dc:creator><pubDate>Mon, 22 Jun 2009 17:21:33 GMT</pubDate></item><item><title><![CDATA[Reply to Übungsaufgabe on Mon, 22 Jun 2009 17:32:55 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void print_baum(knoten *wurzel)
{
    if(wurzel == NULL)
    {
        cout &lt;&lt; &quot;Leerer Baum !&quot; &lt;&lt; endl;
    }
    else
    {
        if(wurzel-&gt;rechts != NULL)
        {
            print_baum(wurzel-&gt;rechts);
        }
        cout &lt;&lt; wurzel-&gt;wert &lt;&lt; endl;
        if(wurzel-&gt;links != NULL)
        {
            print_baum(wurzel-&gt;links);
        }
    }
}
</code></pre>
<p>statt dem while ein if hin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731169</guid><dc:creator><![CDATA[nocheinmitglied]]></dc:creator><pubDate>Mon, 22 Jun 2009 17:32:55 GMT</pubDate></item></channel></rss>