rendered paste body/*Berechnent iterativ (a über b), ohne O(a) zu verlassen*/
#include <stdio.h>
int main()
{
unsigned int a, b; /*Variablen*/
int i, nennerlaenge;
printf("\n Ein Programm zur Berechnung des Binomialkoeffizientens. \n(a uber b)\n"); /*Eingabe*/
printf("a?\n");
scanf("%u", &a);
printf("b?\n");
scanf("%u", &b);
if (b==a || b==0) /*Einfache Fälle*/
{
printf("\nErgbnis: 1\n");
return 0;
}
if (b >a || ((b == 0) && (a ==0)) )
{
printf("\nErgebnis: 0\n");
return 0;
}
/*Tatsaechliche Berechnung*/
unsigned int zaehler[a]; /*Deklariere Zaehler*/
for (i=0; i<a; i++)
{
zaehler[i]=i+1;
}
if (b < (a-b)) /*Zaehler mit b bzw. (a-b) kürzen*/
{
for (i=0; i<(a-b); i++)
zaehler[i]=1;
nennerlaenge=b;
}
else
{
for (i=0; i<(b); i++)
zaehler[i]=1;
nennerlaenge=(a-b);
}
unsigned int nenner[a]; /*Nennerzuweisung*/
for (i=a-1; 0<i; i--)
{
if (i>(a-nennerlaenge-1))
nenner[i]=nennerlaenge-a+i+1;
else
nenner[i]=1;
}
/*for (i=0; i<a; i++)
printf(" %u ", zaehler[i]);
printf("\n");
for (i=0; i<a; i++)
printf(" %u ", nenner[i]);*/
double ergebnis;
ergebnis=1;
i=a-1;
while ( ((nenner[i]!=1) || (zaehler[i]!=1)) )
{
/*printf("\nTest: %lf, %u, %u", ergebnis, zaehler[i], nenner[i]);*/
ergebnis = ergebnis*((double)(zaehler[i])/(nenner[i]));
/*printf("\nTest: %lf, %u, %u", ergebnis, zaehler[i], nenner[i]);*/
i--;
}
printf("Ergebnis: %lf", ergebnis);
/*if ((double)(ergebnis-(int)ergebnis) != 0) /*minimale Rechenfehler im double abfangen*/
/*ergebnis=(double)((int)ergebnis+1);*/
return 0;
}