Suma częściowa ciągu

0

Próbuję rozwiązać pewne zadanie. Polega ono na tym, że muszę stworzyć program obliczający n-tą sumę częściową pewnego ciągu. Ten ciąg to x2 /2n. Niestety, nie wychodzi mi. Oto kod:

#include <stdio.h>
#include <math.h>
float suma (int n)
{
float suma=0.0;
float x;
int i;
for (i=1;i<=n;i++)
{
   suma+=(pow(x,2))/(pow(2,i));
}

return suma;
}

int main (){
float x;
int n;

printf ("program obliczy n-ta sume czesciowa ciagu x^2/(2^n\n");
printf ("podaj x: ");
scanf ("%d", &x);
printf ("podaj n: ");
scanf ("%d", &n);

printf ("suma czesciowa tego ciagu o n rownym wynosi %0.2f\n", suma(n));
}

Jakieś wskazówki mile widziane :)

1

Do funkcji przekazujesz tylko jeden argument, którym jest n, natomiast x olewasz. Zmienna x, która jest w funkcji jest całkiem inną zmienną niż ta w main.

0

Niestety nie za bardzo wiem co teraz zrobić. Mam tam gdzie jest funkcja wpisać oprócz int n również float x? Nadal nie działa. Czy też uzależnić funkcję od x dopiero w funkcji main?

0

Masz napisać funkcję partial_sum(x, n) zależną od x oraz od n. Czy nie jest w takim razie jasne, że x oraz n należy tej funkcji przekazać? ;-)

0

Chodzi Ci o coś takiego? Idę przynajmniej w dobrym kierunku?

#include <stdio.h>
#include <math.h>
float suma (int n, float x)
{
float suma=0.0;

int i;
for (i=1;i<=n;i++)
{
   suma+=(pow(x,2))/(pow(2,i));
}

return suma;
}

int main (){
float x;
int n;

printf ("program obliczy n-ta sume czesciowa ciagu x^2/(2^n\n");
printf ("podaj x: ");
scanf ("%d", &x);
printf ("podaj n: ");
scanf ("%d", &n);

printf ("suma czesciowa tego ciagu o n rownym wynosi %0.2f\n", suma(n, x));
}
 
0

Jasne, idziesz w bardzo dobrym kierunku! Czy teraz coś jeszcze nie działa?

1

Niby tak, ale w ten sposób to nic sensownego nie policzysz bo wyliczenie 2n szybko przekroczy ci zakres inta.Poza tym robisz to lekko bezmyślnie. Po co w ogóle używasz pow()? Nie jest tu wcale potrzebne.
x2 jest stałe więc możesz je policzyc przed pętlą jako x*x, będzie znacznie szybciej.
Poza tym po co liczysz za każdym razem 2n skoro wiedząc ile wynosi 2n-1 możesz po prostu pomnożyć to przez 2 i dostaniesz 2n?
Popatrz: dla x=2 kolejne wyrazy ciągu to:
4/2, 4/4, 4/8, 4/16, 4/32, 4/64... widzisz prawidłowość? Każdy kolejny wyraz to poprzedni podzielony przez 2...

0

Program kończy się gdy podam x w postaci np. 5.0 lub 4.0.
W przypadku podania x i n normalnie wynik = 0

0

Dobra, masz jeszcze taki błąd, że:

float x;

ale

scanf ("%d", &x);

%d służy do wczytywania intów, a Ty definitywnie chcesz wczytać coś, co będzie interpretowane jako float.

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