All pastes #2066237 Raw Edit

Stuff

public text v1 · immutable
#2066237 ·published 2011-05-21 14:04 UTC
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;
}