C - szereg

QP
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 10 lat
  • Postów:4
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?

Kopiuj
#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;
} 
B8
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 10 lat
  • Postów:29
0

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

fasadin
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
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

Kopiuj
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

QP
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 10 lat
  • Postów:4
0

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

edytowany 1x, ostatnio: QuePasa
B8
No inaczej sie nie da.
fasadin
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
0

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

QP
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 10 lat
  • Postów:4
0

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

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
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))

Kopiuj
</del>

Poprawka: 

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

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

Kopiuj
edytowany 1x, ostatnio: vpiotr
MarekR22
i zrobiła ci się silnia, której tam nie ma :P
vpiotr
hmm, poprawione.
QP
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 10 lat
  • Postów:4
0

w dobrym kierunku idę, czy kompletnie beznadziejnym?

Kopiuj
#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;
}
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:minuta
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:

Kopiuj
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.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: MarekR22
QP
Więc powinienem jednak iść w kierunku tego co miałem na samym początku?
MarekR22
w sumie tak, ale tam masz poważne błędy! Poza tym napisanie tego w osobnej funkcji jest bardziej czytelne i łatwiejsze w zrozumieniu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.