Błędne wyniki podczas obliczania dwumianu newtona

0

Witam serdecznie :)
Właśnie zaczynam swoją przygodę z programowaniem dlatego mam problem z dosyć trywialnym zadaniem mianowicie: dwumianem newtona. Nie chce przepisywać gotowego kodu z sieci zależy mi na napisaniu własnego. Czy jakaś pomocna dusza mogła by mi wskazać błąd?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/**********************************************************************/
    int silnia(int wartosc)
        {
            int zwrot=1, i=1;
				for(i;i<=wartosc;i++)
				{
					 zwrot*=i;
				}
            return zwrot;

        }
/**********************************************************************/
    int symbol_newtona(int n, int k)
        {
            int wartosc;
            wartosc=silnia(n)/(silnia(k)*silnia(n-k));
            return wartosc;
        }
/**********************************************************************/
    double dwumian_newtona(double a,double b,int n)
        {																/*(a+b)^n*/
		int i=0,wartosc=0;
			for (i; i <= n; i++)
				{
					wartosc += (symbol_newtona(n, i)*pow(a, n - i)*pow(b, i));
				}
		return wartosc;
        }
/**********************************************************************/

int main()
{
	double a,b,wartosc;
	int n;
	scanf("%f",a);
	scanf("%f",b);
	scanf("%u",n);
	wartosc = dwumian_newtona(a, b, n);
	printf("\n %f", wartosc);


}

0

Algorytm masz opracowany dobrze - przyjrzyj się temu jak wczytujesz dane (rzuć okiem na przykłady w internecie itd.).

0
Patryk27 napisał(a):

Algorytm masz opracowany dobrze - przyjrzyj się temu jak wczytujesz dane (rzuć okiem na przykłady w internecie itd.).

Śliczne dzięki :) za poświęcony czas na przeanalizowanie.

0
Patryk27 napisał(a):

Algorytm masz opracowany dobrze - przyjrzyj się temu jak wczytujesz dane (rzuć okiem na przykłady w internecie itd.).

Fakt że dane są źle wczytywane.
Jednak to jest algorytm naiwny, który daje poprawne wyniki jedyni dla małych wartości wejściowych, a błędne dla wartości, dla wyników, które mieszczą się w int.
Jest lepsza metoda, w której nie liczy się silni.

1 użytkowników online, w tym zalogowanych: 0, gości: 1