C - szereg

0

Oblicz wartość następującego wyrażenia dla x podanego przez użytkownika: (wzór do zadania w załączniku)

Chodzi o to żeby wykonać ten program, bez użycia biblioteki <math.h>. Mi już skończyły się pomysły, może coś podpowiecie?

#include <stdio.h>
int main()
{
	int x, n=1, i;
	double f=0, s=1;  
	
	printf("Podaj liczbe x: ");
	scanf("%d", &x);

	
	for (i=1; i<=10; i++)
		{
			f=f+s;
            s=-s*(x*x)/n;
            n=n+1;           
		}

	printf("Wynik to: %.2lf", f);

	return 0;
} 
0

Oho, kolega co temat niżej założył, chyba z tej samej polibudy jest.

1

ciezko podpowiedziec zeby nie zrobic rownania :) wiec sprobuje pokolei Ci wyjasnic

pierwsze mamy -1 do potegi n co na dobra sprawe jest po to zeby rownanie albo mialo + albo - Czyli jezeli N jest parzyste na poczatku bedzie 1 jezeli nieparzyste to -1
nastepnie mnozymy przez X (ktore wczytujemy z klawiatury) do potegi N.

cos do potegi N mozna napisac bardzo prosto potrzebujesz napisac funkcje (wygoogluj co to jest) na takiej zasadzie

int potega(int podstawa, int wykladnik); 

tutaj masz deklaracje, definicje napisz sam

co ma robic? A tam ma byc petla ktora idzie od 2 do wykladnika ( i<=wykladnik )

wiec zrobiles juz to X do potegi masz wynik dzialania juz pomnozony przez 1 albo -1 a teraz wystarczy podzielic przez N

To robisz w kazdym obiegu petli. Wynik (zmienna stworzona przed petla) bedzie rosl zgodnie z wyliczeniami

0

Czyli mam napisać nową funkcję do potęgowania, a potem ją zaimplementować do maina?

0

skoro nie rozumiesz tego co napisalem. Wez do reki pierwszy lepszy kurs dotyczacy jezyka C i sie go ucz.

0

Własnie chciałem się upewnić czy rozumiem. Po co od razu być takim opryskliwym?

2

Tu nie powinno się stosować potęgowania bo bardzo szybko szereg wyczerpie zakres liczb.

Podpowiedź:

``` a(1) = -x a(i) = -a(i-1) * (x / i)

Suma = suma(i=1..10, a(i))

</del>

Poprawka: 

xp(1) = -x
xp(i) = -xp(i-1) * x
a(i) = xp(i) / i

Suma = suma(i=1..10, a(i))

0

w dobrym kierunku idę, czy kompletnie beznadziejnym?

#include <stdio.h>

int potega(int x, int y)
{
	int i, s=1;
	for(i=1;i<=y;i++)
	s*=x;
	return s;
}


int main()
{

	int x=2, y, n=1, w=1, i, p;
	double f=0.0;

//	printf("Podaj liczbe x: ");
//	scanf("%d", &x);
		
		y=n;
		p=potega(x, n);
			
		for (i=1; i<=10; i++)
		{
			f=f+w;
            w=-w*(p/n);
            n++;           
		}

	printf("Wynik to: %.2lf", f);
	
	return 0;
}
0

Po cholerę ta funkcja potęgowania? To jest niepotrzebne, wręcz przeszkadza!
Masz szereg, czyli sumę ciągu. Masz zrobić pętlę for i przy każdej iteracji obliczyć kolejny element ciągu i dodać go do jakiejś zmiennej. Jeśli dobrze to napiszesz to kolejny element ciągu będzie obliczany na podstawie poprzedniej iteracji.
Mógłbym dać gotowca, ale tu chodzi, żebyś ruszą troszkę głową.
Zacznij tak:

double szereg(double x) {
    double sum = 0;
    double a= 1.0;
    for (int i=1; i<=10; ++i) {
         a *= ...
         sum += ...
    }
    return sum;
}

Podobne do tego co podpowiada @vpiotr, ale on zrobił mały błąd.

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