<?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 binaerSuch Funktion]]></title><description><![CDATA[<p>Habe ein kleineres Problem.<br />
Wir sollen für die Uni eine rekursive Funktion schrieben, die folgende Art den Platz des Arrays sucht in dem der eingegebene Wert steht:<br />
Endwert/2 und schauen, ob die gesuchte Zahl kleiner oder größer als die Zahl im mittleren Array ist - wobei bei ungeraden Teilungen wie 13/2 links der kleinere Wert stehen soll (6,7).</p>
<p>Falls der Wert nicht im Array vorhanden ist, soll die Funktion -1 ausspucken. Das habe ich allerdings noch nicht implementiert.. Zur Zeit habe ich noch Probleme falls die Zahlen in dem Array sind.<br />
Folgendes habe ich geschrieben und bin es auch schon im Kopf mit den Zahlen durchgegangen, jedoch funktioniert es leider nicht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int binaerSuche(int start, int end, int val, int array[])
{
   if (val==array[(int)((end/2)+0.5)])
      return (end/2)+0.5;
   else
      return (val&lt;array[(int)((end/2)+0.5)]) ? binaerSuche(start, (end/2)-0.5, val, array :
      binaerSuche((end/2)+0.5, end, val, array);
}

int main()
{
   int array[] = {1,4,5,7,8,9,12,15,20,36,55,128,999}
   int value;

   cout &lt;&lt; &quot;Geben Sie den zu suchenden Wert ein: &quot;;
   cin &gt;&gt; value;
   cout &lt;&lt; &quot;Der Wert steht im Array an der Stelle : &quot;
        &lt;&lt; binaerSuche(0, 12, value, array) &lt;&lt; endl;

   Return 0;
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Brauche Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276733/rekursive-binaersuch-funktion</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 07:31:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276733.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 07 Nov 2010 16:43:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rekursive binaerSuch Funktion on Sun, 07 Nov 2010 16:43:54 GMT]]></title><description><![CDATA[<p>Habe ein kleineres Problem.<br />
Wir sollen für die Uni eine rekursive Funktion schrieben, die folgende Art den Platz des Arrays sucht in dem der eingegebene Wert steht:<br />
Endwert/2 und schauen, ob die gesuchte Zahl kleiner oder größer als die Zahl im mittleren Array ist - wobei bei ungeraden Teilungen wie 13/2 links der kleinere Wert stehen soll (6,7).</p>
<p>Falls der Wert nicht im Array vorhanden ist, soll die Funktion -1 ausspucken. Das habe ich allerdings noch nicht implementiert.. Zur Zeit habe ich noch Probleme falls die Zahlen in dem Array sind.<br />
Folgendes habe ich geschrieben und bin es auch schon im Kopf mit den Zahlen durchgegangen, jedoch funktioniert es leider nicht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int binaerSuche(int start, int end, int val, int array[])
{
   if (val==array[(int)((end/2)+0.5)])
      return (end/2)+0.5;
   else
      return (val&lt;array[(int)((end/2)+0.5)]) ? binaerSuche(start, (end/2)-0.5, val, array :
      binaerSuche((end/2)+0.5, end, val, array);
}

int main()
{
   int array[] = {1,4,5,7,8,9,12,15,20,36,55,128,999}
   int value;

   cout &lt;&lt; &quot;Geben Sie den zu suchenden Wert ein: &quot;;
   cin &gt;&gt; value;
   cout &lt;&lt; &quot;Der Wert steht im Array an der Stelle : &quot;
        &lt;&lt; binaerSuche(0, 12, value, array) &lt;&lt; endl;

   Return 0;
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Brauche Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1976793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1976793</guid><dc:creator><![CDATA[glasklar]]></dc:creator><pubDate>Sun, 07 Nov 2010 16:43:54 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive binaerSuch Funktion on Sun, 07 Nov 2010 17:08:34 GMT]]></title><description><![CDATA[<p>glasklar schrieb:</p>
<blockquote>
<p>... jedoch funktioniert es leider nicht ...</p>
</blockquote>
<p>Was genau funktioniert nicht und wie lautet deine Frage?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1976803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1976803</guid><dc:creator><![CDATA[Mitleid]]></dc:creator><pubDate>Sun, 07 Nov 2010 17:08:34 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive binaerSuch Funktion on Sun, 07 Nov 2010 18:58:36 GMT]]></title><description><![CDATA[<p>glasklar schrieb:</p>
<blockquote>
<p>Habe ein kleineres Problem.<br />
Wir sollen für die Uni eine rekursive Funktion schrieben, die folgende Art den Platz des Arrays sucht in dem der eingegebene Wert steht:<br />
Endwert/2 und schauen, ob die gesuchte Zahl kleiner oder größer als die Zahl im mittleren Array ist - wobei bei ungeraden Teilungen wie 13/2 links der kleinere Wert stehen soll (6,7).</p>
<p>Falls der Wert nicht im Array vorhanden ist, soll die Funktion -1 ausspucken. Das habe ich allerdings noch nicht implementiert.. Zur Zeit habe ich noch Probleme falls die Zahlen in dem Array sind.<br />
Folgendes habe ich geschrieben und bin es auch schon im Kopf mit den Zahlen durchgegangen, jedoch funktioniert es leider nicht:</p>
</blockquote>
<p>Hallo glasklar,</p>
<p>Willkommen im C++-Forum.</p>
<p>Nun zunächst compiliert es nicht. In Zeile 9 fehlt eine ')' vor dem :; in Zeile 15 fehlt das Semikolon am Ende und in Zeile 23 hast Du return mit einem großen 'R' geschrieben.<br />
Beim Compilieren gibt es noch einige Warnungen, davon später mehr.</p>
<p>Jetzt gehe ich das Programm nochmal im Kopf durch. Angenommen die Eingabe ist 8. Dann ist der erste Aufruf von binaerSuche start/end= 0 12 array[start/end]= 1 999.<br />
Der Ausdruck '(int)((end/2)+0.5)' liefert für end==12 den Wert 6. Wichtig end/2 liefert IMMER ein int, auch wenn int ungerade ist. Addiert man dann 0.5 verwandelt sich das ganze in ein double und mit dem cast auf int wieder in int zurück. Ist end&gt;0, so ist das +0.5 völlig wirkungslos.</p>
<p>weiter im Programm: array[6] == 12 und 8 ist kleiner als 12; also landet man bei<br />
binaerSuche(start, (end/2)-0.5, val, array )<br />
end/2 liefert int(6); -0.5 liefert double(5.5) und der cast auf int (end ist wieder ein int) liefert 5. Hier warnt der Compiler, dass was nicht stimmt. end/2-1 hätte übrigens die selbe Wirkung.</p>
<p>Der Aufruf ist jetzt<br />
binaerSuche start/end= 0 5 array[start/end]= 1 9<br />
Der Ausdruck '(int)((end/2)+0.5)' liefert für end==5 den Wert 2. (wieso s.o.)<br />
array[2] == 5 und 8 ist nicht kleiner als 5, also landen wir jetzt bei<br />
binaerSuche((end/2)+0.5, end, val, array)</p>
<p>Der Aufruf ist jetzt<br />
binaerSuche start/end= 2 5 array[start/end]= 5 9<br />
end bleibt bei 5 und der Ausdruck '(int)((end/2)+0.5)' liefert für end==5 immer noch den Wert 2. Das willst Du aber gar nicht, Du willst doch einen Wert zwischen 2 und 5 haben - da 8 doch zwischen array[2]==5 und array[5]==9 liegt.</p>
<p>Der nächste Aufruf ist demnach wieder<br />
binaerSuche start/end= 2 5 array[start/end]= 5 9</p>
<p>usw. bis der Stack Deines PCs überläuft und einen Laufzeitfehler liefert.</p>
<p>1.Tipp mache Dich mit der Integerarithmetik vertraut<br />
2.Tipp definiere end genau - es bietet sich an, end als letzten Index+1 zu definieren, so dass das Duo start/end ein halboffenes Intervall bildet.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1976845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1976845</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 07 Nov 2010 18:58:36 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive binaerSuch Funktion on Mon, 08 Nov 2010 08:10:02 GMT]]></title><description><![CDATA[<p>Das mit dem kompilieren liegt daran, dass ich in der Bahn kein Internethatte und alles mit dem Handy abgetippt habe <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>Hmm das mit dem geteilt durch 2 habe ich mir wegen des Aufteilens gemäß der Aufgabenstellung ausgedacht:<br />
12/2-0.5 = 5.5 also 5 -&gt; 0...5<br />
12/2+0.5 = 6.5 also 6 -&gt; 6...12</p>
<p>5/2-0.5 = 2 -&gt; 0...2<br />
5/2+0.5 = 3 -&gt; 3...5</p>
<p>usw..</p>
<p>-1 anstatt von 0.5 würde dementsprechend nicht das selbe machen. Sitz aber grad in der Uni ich schau mir deine Antwort nachher nochmal genauer an <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>Danke schon mal im Vorraus</p>
<p>glG Robert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1977079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1977079</guid><dc:creator><![CDATA[glasklar]]></dc:creator><pubDate>Mon, 08 Nov 2010 08:10:02 GMT</pubDate></item></channel></rss>