<?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[Programmstruktur]]></title><description><![CDATA[<p>Hi,</p>
<p>ich will ein Programm schreiben, dass in der Lage ist, innerhalb von 10 systematischen Fragen eine ganze Zahl zwischen 1 - 100 zu bestimmen. Ich saß jetzt sicher schon 4 std und habe nach einem ansatz gesucht und mir ist nichts besseres eingefallen als eine in blöcken sortierte switch-case abfrage die die aufkommenden zahlenintervalle immer weiter halbiert. wenn dies der einzig gute lösungsansatz wäre, würde das bedeuten, dass ich über 100 einzelne switch-case strukturen schreiben müsste.... das muss doch auch eleganter/effizienter gehen oder ?</p>
<p>ch bin neuanfänger und würde mich freuen wenn ich vielleicht den ein oder anderen tipp von einem profi bekommen könnte was die besagte struktur angeht oder zumindest wie man an solch komplexere aufgaben herangeht.</p>
<p>lg und schönes wochenende,</p>
<p>max</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/266796/programmstruktur</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 16:45:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266796.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 May 2010 15:45:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programmstruktur on Fri, 14 May 2010 15:45:01 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich will ein Programm schreiben, dass in der Lage ist, innerhalb von 10 systematischen Fragen eine ganze Zahl zwischen 1 - 100 zu bestimmen. Ich saß jetzt sicher schon 4 std und habe nach einem ansatz gesucht und mir ist nichts besseres eingefallen als eine in blöcken sortierte switch-case abfrage die die aufkommenden zahlenintervalle immer weiter halbiert. wenn dies der einzig gute lösungsansatz wäre, würde das bedeuten, dass ich über 100 einzelne switch-case strukturen schreiben müsste.... das muss doch auch eleganter/effizienter gehen oder ?</p>
<p>ch bin neuanfänger und würde mich freuen wenn ich vielleicht den ein oder anderen tipp von einem profi bekommen könnte was die besagte struktur angeht oder zumindest wie man an solch komplexere aufgaben herangeht.</p>
<p>lg und schönes wochenende,</p>
<p>max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897143</guid><dc:creator><![CDATA[MAX2.0]]></dc:creator><pubDate>Fri, 14 May 2010 15:45:01 GMT</pubDate></item><item><title><![CDATA[Reply to Programmstruktur on Fri, 14 May 2010 15:58:35 GMT]]></title><description><![CDATA[<p>Ich nehme mal an, dass du nur Fragen der Art &quot;Ist die Zahl größer als X?&quot; meinst? Da gibt es natürlich verschiedene Ansätze, aber der mit dem switch ist sicherlich der mit Abstand schlechteste.</p>
<p>Der Trick an der Sache ist, dass du dir merkst in welchem Intervall du gerade bist und die Frage entsprechend stellst. Am Anfang hast du den Intervall 1-100, da fragst du nach ob die Zahl größer ist als (100+1)/2=50. Nehmen wir mal an, die Antwort ist ja, dann hast du den Intervall 51-100. Dann fragst du nach (51+100)/2=75. Dieses Schema wiederholst du bis die Zahl gefunden ist.</p>
<p>Die beiden naheliegenden Lösungen dafür sind eine Schleife oder eine Rekursion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897153</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 14 May 2010 15:58:35 GMT</pubDate></item><item><title><![CDATA[Reply to Programmstruktur on Fri, 14 May 2010 16:44:57 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Die beiden naheliegenden Lösungen dafür sind eine Schleife oder eine Rekursion.</p>
</blockquote>
<p>Das Problem riecht förmlich nach Rekursion. Ich würd das einfach mal der Eleganz wegen rekursiv definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897184</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 14 May 2010 16:44:57 GMT</pubDate></item><item><title><![CDATA[Reply to Programmstruktur on Fri, 14 May 2010 16:49:37 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Die beiden naheliegenden Lösungen dafür sind eine Schleife oder eine Rekursion.</p>
</blockquote>
<p>Das Problem riecht förmlich nach Rekursion. Ich würd das einfach mal der Eleganz wegen rekursiv definieren.</p>
</blockquote>
<p>Aber prinzipiell ist die Rekursion unnötig, da man nur einen einzigen Ast entlangläuft. Ich hätte daher eher die Schleife gewählt.</p>
<p>Interessant wäre auch eine Template-Metaprogrammierungslösung, die einen für jeden Intervall eine passende Funktion erzeugt. Das entspräche zwar effektiv der Lösung mit den 100 switches, aber interessant wäre das trotzdem mal zu sehen. Falls mir am Wochenende mal langweilig ist, programmier ich das mal, falls es noch kein anderer bis dahin gemacht hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897187</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 14 May 2010 16:49:37 GMT</pubDate></item><item><title><![CDATA[Reply to Programmstruktur on Fri, 14 May 2010 16:53:23 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Die beiden naheliegenden Lösungen dafür sind eine Schleife oder eine Rekursion.</p>
</blockquote>
<p>Das Problem riecht förmlich nach Rekursion. Ich würd das einfach mal der Eleganz wegen rekursiv definieren.</p>
</blockquote>
<p>Aber prinzipiell ist die Rekursion unnötig, da man nur einen einzigen Ast entlangläuft. Ich hätte daher eher die Schleife gewählt.</p>
<p>Interessant wäre auch eine Template-Metaprogrammierungslösung, die einen für jeden Intervall eine passende Funktion erzeugt. Das entspräche zwar effektiv der Lösung mit den 100 switches, aber interessant wäre das trotzdem mal zu sehen. Falls mir am Wochenende mal langweilig ist, programmier ich das mal, falls es noch kein anderer bis dahin gemacht hat.</p>
</blockquote>
<p>Ja, unnötig, aber trotzdem elegant. Wie auch die Meta Version.</p>
<p>Das eine Schleife das Mittel der Wahl ist, wenn es ernst gilt, ist klar, aber man darf ja auch verschiedene Ansätze probieren. <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/1897188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897188</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 14 May 2010 16:53:23 GMT</pubDate></item><item><title><![CDATA[Reply to Programmstruktur on Fri, 14 May 2010 16:58:44 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Das Problem riecht förmlich nach Rekursion. Ich würd das einfach mal der Eleganz wegen rekursiv definieren.</p>
</blockquote>
<p>Meine Nase ist verstopft.</p>
<pre><code class="language-cpp">for(;;){
  int m=(u+o)/2;
  while(int c=compare(m)){
    if(c&gt;0)
      u=m+1;
    else
      o=m-1;
  }
  return m;
}
</code></pre>
<pre><code class="language-cpp">int m=(u+o)/2;
if(int c=compare(m)){
  if(c&gt;0)
    return rek(m+1,o);
  else
    return rek(u,m-1);
}
else
  return m;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1897189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897189</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 14 May 2010 16:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to Programmstruktur on Fri, 14 May 2010 17:13:25 GMT]]></title><description><![CDATA[<p>Hmm. Hab mir das eleganter vorgestellt.<br />
Naja. Jetzt fehlt ja nur noch die Metaversion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897198</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 14 May 2010 17:13:25 GMT</pubDate></item><item><title><![CDATA[Reply to Programmstruktur on Fri, 14 May 2010 17:27:59 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Naja. Jetzt fehlt ja nur noch die Metaversion.</p>
</blockquote>
<p>Jetzt, wo die rekursive Variante bekannt ist, sollte man mit Metaprogrammierung mehr oder weniger analog vorgehen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897211</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 14 May 2010 17:27:59 GMT</pubDate></item><item><title><![CDATA[Reply to Programmstruktur on Fri, 14 May 2010 17:33:31 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Naja. Jetzt fehlt ja nur noch die Metaversion.</p>
</blockquote>
<p>Jetzt, wo die rekursive Variante bekannt ist, sollte man mit Metaprogrammierung mehr oder weniger analog vorgehen können.</p>
</blockquote>
<p>Klar. Aber das überlasse ich mal SeppJ oder allenfalls dem TO, wenn er schneller ist. <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/1897218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897218</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 14 May 2010 17:33:31 GMT</pubDate></item><item><title><![CDATA[Reply to Programmstruktur on Fri, 14 May 2010 17:51:21 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

const int min = 1;
const int max = 100;

template&lt;int, int&gt; struct question;    // Must be a class, because function template partial specialization is not allowed

template&lt;int value&gt; struct question&lt;value,value&gt;
{
  static void ask()
  {
    std::cout&lt;&lt;&quot;The answer is &quot;&lt;&lt;value&lt;&lt;std::endl;
  }
};

template&lt;int lower, int upper&gt; struct question
{
  static void ask()
  {
    const int middle=(lower+upper)/2;
    std::cout&lt;&lt;lower&lt;&lt;&quot; &quot;&lt;&lt;upper&lt;&lt;std::endl;
    std::cout&lt;&lt;&quot;Is the answer greater than &quot;&lt;&lt;middle&lt;&lt;&quot;?&quot;&lt;&lt;std::endl;
    bool answer;
    std::cin &gt;&gt; answer;
    if (answer) question&lt;middle+1,upper&gt;::ask();
    else question&lt;lower,middle&gt;::ask();
  }
};

int main ()
{
  question&lt;min,max&gt;::ask();
}
</code></pre>
<p>Compiliert auch ordentlich lange, bei mir fast 1 s für 1-100. Für 1-1000 sogar über 5 s.</p>
<p>edit: Und das Programm kommt natürlich mit log2(100)=6.64 Fragen aus. Ok, sagen wir maximal 7 <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>
<p>edit2: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> An den Threadersteller: Nimm nicht diese Lösung. Dies ist ein C++-Programmiererscherz und nicht praxistauglich. Orientier dich an dem was volkard geschreiben hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897228</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 14 May 2010 17:51:21 GMT</pubDate></item><item><title><![CDATA[Reply to Programmstruktur on Fri, 14 May 2010 17:58:43 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897237</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 14 May 2010 17:58:43 GMT</pubDate></item><item><title><![CDATA[Reply to Programmstruktur on Fri, 14 May 2010 18:02:14 GMT]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>vielen Dank für eure zahlreichen Antworten, ich kann es morgen leider erst detailliert durchgehen, merke aber schon dass ich genau das von euch bekommen habe was ich suche. vielen vielen dank <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1897238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897238</guid><dc:creator><![CDATA[MAX2.0]]></dc:creator><pubDate>Fri, 14 May 2010 18:02:14 GMT</pubDate></item><item><title><![CDATA[Reply to Programmstruktur on Fri, 14 May 2010 18:02:40 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> An den Threadersteller: Nimm nicht diese Lösung. Dies ist ein C++-Programmiererscherz und nicht praxistauglich.</p>
</blockquote>
<p>Schön gesagt. Ob Marc++us uns für diesen Satz unten einen Button baut?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897239</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 14 May 2010 18:02:40 GMT</pubDate></item><item><title><![CDATA[Reply to Programmstruktur on Sat, 15 May 2010 10:09:44 GMT]]></title><description><![CDATA[<p>An volkard:</p>
<pre><code class="language-cpp">for(;;){
  int m=(u+o)/2;
  while(int c=compare(m)){
    if(c&gt;0)
      u=m+1;
    else
      o=m-1;
  }
  return m;
}
</code></pre>
<pre><code class="language-cpp">int m=(u+o)/2;
if(int c=compare(m)){
  if(c&gt;0)
    return rek(m+1,o);
  else
    return rek(u,m-1);
}
else
  return m;
</code></pre>
<p>Gehören die beiden Algorithmen zusammen? wäre dir sehr dankbar, wenn du mich durch deinen gedankengang führen könntest. (rekursion ist mir leider noch völlig unbekannt... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> )</p>
<p>also im 1.) nutzt du eine for-schleife (was müsste in den kriterien stehen??) in der praktisch steht, dass m=(u+o)/2 ist, sprich das intervall halbiert. doch was steckt hinter der while schleife und warum wird m erst in der for-schleife deklariert ??</p>
<p>lg max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897440</guid><dc:creator><![CDATA[MAX2.0]]></dc:creator><pubDate>Sat, 15 May 2010 10:09:44 GMT</pubDate></item></channel></rss>