Program liczący e^x

0
#include <stdio.h>
#include <math.h>

int silnia(int liczba);
int main()
{

    int liczba,n,x = 1;
    liczba = 1;
    for(n = 1 ; n < 20 ; n++)
    {
       liczba += pow(x,n)/silnia(n);
    }
    printf("%d",liczba);


    return 0;

}
int silnia(int liczba)
{
   int i;
   long wynik = 1;
    for(i = 1; i <= liczba; i++)
    {
        wynik = wynik * i;
    }

    return wynik;
}

Chciałem obliczyć (e x) ze wzoru e x = 1 + x/1! + x 2 /2! + x 3 /3! +...

Dałem n do 20, ponieważ potem będzie ciężko już policzyć silnie dla zmiennej.
Co tu poprawić pomoże ktoś ?
Trochę ten wzór nie poprawny,bo nie mogę go dobrze wyeedytować. Ma być x podniesione do potęgi i dzielone na silnie.

1

Proponuje zacząć używać mózgu a nie palców w trakcie programowania. Podpowiedź: w ogóle nie nalezy tu liczyć ani silni ani potęgi. nalezy zauważyć że kolejny wyraz szeregu jest w jakiś sposób związany z wyrazem poprzednim. Czy gdybym podał ci i-ty wyraz tego szeregu to umiałbyś podać mi wyraz i+1?

0

Już podawałem rozwiązanie na tym forum, szukaj hasło: silnia

0

ale ja nie chcę silni, tylko obliczyć liczbę e. 2 i 3 wzór z tej strony:
www.matemaks.pl/liczby-i-dzialania.php?tid=139

0

Taki sam ... jak ty w tym tygodniu też zaczął od silni której nie chciał ...

0

Przejrzałem Twoje tematy od 19 października w jakich się udzielałeś i nic nie znalazłem takiego aby tytuł był podobny do mojego programu.

0

To było raczej w okolicach 16-go

0

Przeszukałem do 10-tego i nadal nic nie znalazłem podobnego tematem do mojego programu.

0

Z takim podejściem, zrezygnuj z programowania bo marnujesz swój czas: http://4programmers.net/Forum/C_i_C++/240195-program_z_wpisaniem_zmiennych_z_lilii_polecen?p=1072598#id1072598

0

To przeczytaj ze zrozumieniem mój post. Podpowiedź:
gdybym powiedział ci że 9 wyraz szeregu wynosi 1000, x wynosi 10 to czy umiałbyś mi powiedzieć ile wynosi wyraz 10, bez używania kalkulatora?

0

Tak na szybko (nie testowałem):

#include <stdio.h>
#include <math.h>
 
long silnia(int liczba);
float oblicz(int x, int k);

int main()
{
    int x = 1;
    int k = 20;
    float liczba;
 
    liczba = oblicz(x, k);
	
    printf("%f", liczba);
 
    return 0;
}

long silnia(int liczba)
{
   int i;
   long wynik = 1;
   
    for(i = 1; i <= liczba; i++)
    {
        wynik = wynik * i;
    }
 
    return wynik;
}

float oblicz(int x, int n_max)
{
    int n;
    float wynik = 1.0;

    for(n = 1 ; n <= n_max ; n++)
    {
       wynik += (float)pow(x, n)/silnia(n);
    }
	
	return wynik;
}
2

@nowicjusz35:

  • do tego potrzebujesz liczb zmienno-przecinkowych. (double lub long double - jeśli obsługuje kompilator)
  • podpowiedź: kolejne elementy szeregu można obliczyć w ten sposób:
a(0) = 1
a(i) = a(i-1) * x / i

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