Die Programmiersprache Recapis kennt außer den beiden Zahlentypen integer und float noch den Typ rational. Daher liefert in Recapis z.B. der Ausdruck "1/2+1/6" nicht die Floatzahl 0.6666667 sondern die Bruchzahl 2/3.
Die Funktion summe() hat mit der for-Schleife in C, sowohl syntaktische als auch semantische Ähnlichkeit. Angenommen man möchte die Summe der Quadrate der natürliche Zahlen von 1 bis n in einem geschlossenen Ausdruck verwenden, um z.B. die Richtigkeit der Formel im Vergleich zum schlichten Aufsummieren zu überprüfen mit dem Programm
if ( summe() == formel() )
$='Alles OK!';
else $='Nanu?';
Für formel() kann man "n^3/3+n^2/2+n/6" einsetzen.
Das schlichte Aufsummieren muss jedoch in einer vorgeschalteten Schleife geschehen.
n=3;
sum=0;
for(i=1;i<=n;i++)
sum+=i^2;
if ( sum == int(n^3/3+n^2/2+n/6) )
$='Alles OK!';
else $='Nanu?';
Mit Recapis kann wie folgt kürzer kodiert werden.
n=3;
if ( summe((i=1),i<=n,i^2) == int(n^3/3+n^2/2+n/6) )
$='Alles OK!';
else $='Nanu?';
Zu beachten:
Mit diesen beiden Eigenschaften lassen sich die rationalen Zahlen des Potenzdreicks potenz.pdf gemäß unten stehender Formel recht übersichtlich berechnen.
Das folgende Programm kann die Formel $$ a_k = \frac{\binom{e}{k} - \sum_{m=0}^{k-1}a_m\binom{e+1-m}{k+1-m}}{e+1-k} $$ einigermaßen schlicht übernehmen
anz=12;
a Rvector (anz+1);
for(e=0;e<=anz;e++){
$='e = ',"%2d"printf(e),' :\t';
for(k=0;k<=e;k++){
a[k]=
( biko(e,k) // der Binomialkoeffizient
- summe ( (m = 0),
m <= k-1,
a[m] * biko(e+1-m, k+1-m)
)
)
/ (e+1-k);
$=zaehler(a[k]),'/',nenner(a[k]),'\t';
}
$='\n';
}
und produziert diese Ausgabe:
e = 0 : 1/1 e = 1 : 1/2 1/2 e = 2 : 1/3 1/2 1/6 e = 3 : 1/4 1/2 1/4 0/1 e = 4 : 1/5 1/2 1/3 0/1 -1/30 e = 5 : 1/6 1/2 5/12 0/1 -1/12 0/1 e = 6 : 1/7 1/2 1/2 0/1 -1/6 0/1 1/42 e = 7 : 1/8 1/2 7/12 0/1 -7/24 0/1 1/12 0/1 e = 8 : 1/9 1/2 2/3 0/1 -7/15 0/1 2/9 0/1 -1/30 e = 9 : 1/10 1/2 3/4 0/1 -7/10 0/1 1/2 0/1 -3/20 0/1 e = 10 : 1/11 1/2 5/6 0/1 -1/1 0/1 1/1 0/1 -1/2 0/1 5/66 e = 11 : 1/12 1/2 11/12 0/1 -11/8 0/1 11/6 0/1 -11/8 0/1 5/12 0/1 e = 12 : 1/13 1/2 1/1 0/1 -11/6 0/1 22/7 0/1 -33/10 0/1 5/3 0/1 -691/2730
Wenn man HTML-Kode erzeugen will,
\[\frac{1}{1}\qquad\]
\[\frac{1}{2}\qquad\frac{1}{2}\qquad\]
\[\frac{1}{3}\qquad\frac{1}{2}\qquad\frac{1}{6}\qquad\]
muss das Programm angepasst werden.
anz=3;
B Rvector (anz+1);
for(e=0;e<=anz;e++){
$='\\[';
for(i=0;i<=e;i++){
B[i]=
( biko(e,i) // der Binomialkoeffizient
- summe ( (m = 0),
m <= i-1,
B[m] * biko(e+1-m, i+1-m)
)
)
/ (e+1-i);
$='\\frac{',zaehler(B[i]),'}{',nenner(B[i]),'}\\qquad';
}
$='\\]\n';
}