Prosty program

0

Mam do napisania program taki jak w załączniku. Jednak nie mam pojęcia jak ten szereg przedstawić. Mój aktualny kod to:

 double suma(double x,int n)
{ 
int i;

if(fabs(x)<1 && n<100){
for(i=0;i<n;i++){

}

}else return 0;

1
  1. zapoznaj się z inkrementacją: http://4programmers.net/Forum/1101404
  2. int n oraz int i - spodziewasz się ujemnych numerów szeregu?
  3. oblicz czemu się równa szereg(i+1)/szereg(i), zakładając że x - szereg(0)
0

Zapewne masz problem jak wyliczyć n-ty wyraz tego ciągu. Pominiemy 'x' i kwestie znaku w naszych rozwiązaniach. Zauważ, że n-ty wyraz tego ciągu składa się z 2n - 1 elementów. Licznik ma zawsze o 1 element mniej od mianownika. Zauważ też, że licznik to iloczyn kolejnych nieparzystych cyfr, a mianownik to iloczyn cyfr parzystych, z wyjątkiem ostatniej. Więc n-ty element element możesz wyrazić jako (iloczyn liczb nieparzystych / iloczyn liczb parzystych) / liczbę nieparzystą. Ta liczba nieparzysta, to kolejna liczba z szeregu liczb, które znajdują się w liczniku.

A o to część rozwiązania:

double n_element(int number){
  int nominator = 1;
  int denominator = 1;
  int multiplier = 1;

  for(multiplier = 1; multiplier < (2 * number - 1); ++multiplier){
    if((multiplier % 2) - 1 == 0)
      nominator *= multiplier;
    else
      denominator *= multiplier;
  }
  if(number % 2 == 0)
    return -(double)nominator / (double)(denominator * multiplier);
  else
    return (double)nominator / (double)(denominator * multiplier);
} 
0

W takim razie czy tak:

double n_element(double x, int number){
  double value = 0.0;

  if(fabs(x) < 1 && number < 100){
    if(number == 0)
      value = 1.0;
    else{
      value = x;
      do{
        value *= -(pow(2.0 * number - 1.0, 2.0) / (2.0 * number * (2.0 * number + 1.0))) * x * x;
      }while(--number > 0);
    }
  }
  return value;
}

będzie poprawnie?

0

Na to samo ci wychodzi, jeżeli masz funkcje n_element to już jest źle.
Każdy kolejny element wyliczaj na podstawie poprzedniego.
I od razu ich sumuj.
int number - czyżby spodziewałeś się ujemnych numerów?
if(fabs(x) < 1 && number < 100) - to sprawdzaj na zewnątrz funkcji.
pow(2.0 * number - 1.0, 2.0) - nie używaj pow do potęg całkowitych tym bardziej 2 lub 3, wydaje mi się że masz problem z kolejnością operacji w matematyce.

0

I po raz kolejny:

double n_sum(double x, unsigned int count){
  double sum = 0.0;

  if(fabs(x) < 1 && count < 100){
    sum = 1.0;
    if(count > 0){
      double value = x;
      unsigned int number = 1;
      do{
        value *= -((2.0 * number - 1.0) * (2.0 * number - 1.0) / (2.0 * number * (2.0 * number + 1.0))) * x * x;
        sum += value;
      }while(count > number++);
    }
  }
  return sum;
}

A miało być proste.

0

Sprawdź co ci zwraca dla count = 0, count = 1 i count = 2 i policz to w excelu lub openoffice

0
double suma(double x,int n)
{
int i;

if(fabs(x)<1 &&(n>0&& n<100)){
   double sum,wyr;
        sum=x;
wyr=x;
for(i=1;i<n;++i){
wyr*=-(2*i-1)*(2*i-1)*x*x/((2*i+1)*2*i);
sum+=wyr;
}
return sum;
}else return 0;

}

Czy ten kod jest poprawny, czy użyłem tu jakiś zbędnych rzeczy?

1

To straszne! http://ideone.com/81hHxF

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

double suma(double x,unsigned n)
  {
   if((fabs(x)>=1)||(n<1)) return 0;
   double item=x,sum=item;
   for(unsigned i=2,p=1;i<=n;++i,p+=2,sum+=item) item*=-x*x*p*p/((p+1)*(p+2));
   return sum;
  }

int main(void)
  {
   for(unsigned n=0;n<=4;++n) printf("%u %.12lf\n",n,suma(0.1,n));
   return 0;
  }

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