<?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[templatefunktion Binominalkoeffient]]></title><description><![CDATA[<p>Hallo Leute,<br />
kann mir hier vielleicht einer weiter helfen? Und zwar soll ich eine Templategeschichte machen die einen binominalkoeffizieten berechnet. Meine Rechnung stimmt nur habe ich noch Probleme mit dem Code. Mit der Übergabe der Parameter hackt es sehr. Oder ist der Fehler ganz woanders? Könnte mir irgend jemand hier vielleicht meine Fehler ausbügeln?</p>
<p>:edit<br />
Aufgabenstellung<br />
Die Fakultät ist als Rekursive Templatefunktion mit einem Template Parameter vom Typ int implementiert. Der Binominalkoeffizient ist implementiert als Template Funktion mit zwei Template Parametern vom Typ int und verwendet die Template Funktion zur Berechnung der Fakultät.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iomanip&gt; //make available setprecision()
using namespace std; 

//Funktions-Template mit Ganzzahlparameter k

template &lt;int z&gt; int f() //Ursruenglich stand da double f()

//Fuer jeden Wert k wird, falls notwendig, eine eigene 
//Funktion ausgepraegt 
{
  return z*f&lt;z-1&gt;();
} 

template&lt;&gt; int f&lt;0&gt;() //Spezialisierung fuer int-Wert k=0
{
   return 1;
}
//Funktions-Template um Binomkof zu berechnen

template&lt;int a, int b&gt; int binom(){

	return( f&lt;a&gt;() / ( f&lt;b&gt;() * f&lt;a-b&gt;()) );
}

int main() {

	int n,k;

	cout&lt;&lt;&quot;Geben sie n ein&quot;&lt;&lt;endl;
	cin&gt;&gt;n;
	cout&lt;&lt;&quot;Geben sie k ein&quot;&lt;&lt;endl;
	cin&gt;&gt;k;
	cout&lt;&lt; binom(n,k) &lt;&lt;endl;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/127950/templatefunktion-binominalkoeffient</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 06:21:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/127950.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 28 Nov 2005 21:07:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to templatefunktion Binominalkoeffient on Mon, 28 Nov 2005 21:24:39 GMT]]></title><description><![CDATA[<p>Hallo Leute,<br />
kann mir hier vielleicht einer weiter helfen? Und zwar soll ich eine Templategeschichte machen die einen binominalkoeffizieten berechnet. Meine Rechnung stimmt nur habe ich noch Probleme mit dem Code. Mit der Übergabe der Parameter hackt es sehr. Oder ist der Fehler ganz woanders? Könnte mir irgend jemand hier vielleicht meine Fehler ausbügeln?</p>
<p>:edit<br />
Aufgabenstellung<br />
Die Fakultät ist als Rekursive Templatefunktion mit einem Template Parameter vom Typ int implementiert. Der Binominalkoeffizient ist implementiert als Template Funktion mit zwei Template Parametern vom Typ int und verwendet die Template Funktion zur Berechnung der Fakultät.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iomanip&gt; //make available setprecision()
using namespace std; 

//Funktions-Template mit Ganzzahlparameter k

template &lt;int z&gt; int f() //Ursruenglich stand da double f()

//Fuer jeden Wert k wird, falls notwendig, eine eigene 
//Funktion ausgepraegt 
{
  return z*f&lt;z-1&gt;();
} 

template&lt;&gt; int f&lt;0&gt;() //Spezialisierung fuer int-Wert k=0
{
   return 1;
}
//Funktions-Template um Binomkof zu berechnen

template&lt;int a, int b&gt; int binom(){

	return( f&lt;a&gt;() / ( f&lt;b&gt;() * f&lt;a-b&gt;()) );
}

int main() {

	int n,k;

	cout&lt;&lt;&quot;Geben sie n ein&quot;&lt;&lt;endl;
	cin&gt;&gt;n;
	cout&lt;&lt;&quot;Geben sie k ein&quot;&lt;&lt;endl;
	cin&gt;&gt;k;
	cout&lt;&lt; binom(n,k) &lt;&lt;endl;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/929292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929292</guid><dc:creator><![CDATA[wlive]]></dc:creator><pubDate>Mon, 28 Nov 2005 21:24:39 GMT</pubDate></item><item><title><![CDATA[Reply to templatefunktion Binominalkoeffient on Mon, 28 Nov 2005 21:40:20 GMT]]></title><description><![CDATA[<p>so get geht das nicht, non-type template parameter müssen konstante ausdrücke sein, also kannst du sie nicht erst zur laufzeit abfragen. wenn die aufgabe tatsächlich so gestellt wurde ist sicher auch nicht nach einem ganzen program gefragt, sondern nach einem klassen template mit einem spezillen member, das das funktionsergebnis enthält</p>
<pre><code class="language-cpp">template&lt;int n, int k&gt;
struct Binomialkoeffizient
{
    static const int value = // ... was hier kommt, sollst du dir überlegen
};
</code></pre>
<p>damit das funktioniert, musst das template noch für gewisse fälle (partiell) spezialisieren um endlos-rekursion zu vermeiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929309</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 28 Nov 2005 21:40:20 GMT</pubDate></item><item><title><![CDATA[Reply to templatefunktion Binominalkoeffient on Mon, 28 Nov 2005 22:18:26 GMT]]></title><description><![CDATA[<p>wlive schrieb:</p>
<blockquote>
<p>Hallo Leute,<br />
kann mir hier vielleicht einer weiter helfen? Und zwar soll ich eine Templategeschichte machen die einen binominalkoeffizieten berechnet. Meine Rechnung stimmt nur habe ich noch Probleme mit dem Code. Mit der Übergabe der Parameter hackt es sehr. Oder ist der Fehler ganz woanders? Könnte mir irgend jemand hier vielleicht meine Fehler ausbügeln?</p>
</blockquote>
<p>camper hat's schon gesagt ...<br />
Templates werden immer zur Compile-Zeit aufgelöst. D.h. alle Ergebnisse (z.B. Fakultät) die mit Template-Technicken berechnet werden sind nach dem Compilieren berechnet, also bevor Du Dein Programm laufen lassen kannst.<br />
Also kannst Du nur schreiben:</p>
<pre><code class="language-cpp">int main()
{
    using namespace std;
    cout &lt;&lt; binom&lt; 5, 3 &gt;() &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>wo dann auch das korrekte Ergebnis (hier 10) erscheint.</p>
<p>'ne Alternative dazu wäre übrigens</p>
<pre><code class="language-cpp">template&lt; int N, int K &gt;
struct Binom
{
    enum { value = Binom&lt; N - 1, K - 1 &gt;::value + Binom&lt; N - 1, K &gt;::value };
};
template&lt; int N &gt;
struct Binom&lt; N, 0 &gt; { enum { value = 1 }; };
template&lt; int N &gt;
struct Binom&lt; N, N &gt; { enum { value = 1 }; };

int main()
{
    using namespace std;
    cout &lt;&lt; Binom&lt; 5, 3 &gt;::value &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>dann vermeidet man die hohen Werte der Fakultäten, dafür wird der Compiler mehr gefordert.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929335</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Mon, 28 Nov 2005 22:18:26 GMT</pubDate></item><item><title><![CDATA[Reply to templatefunktion Binominalkoeffient on Mon, 28 Nov 2005 23:02:16 GMT]]></title><description><![CDATA[<p>wobei der enum hack nicht unbedingt schön ist und eigentlich nur bei alten und kaputten compilern gebraucht wird. übrigens fehlt noch eine explizite spezialisierung für &lt;0,0&gt;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929348</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 28 Nov 2005 23:02:16 GMT</pubDate></item></channel></rss>