Policzenie sumy wyrazów ciągu

0

Policzyć sumę wyrazów ciągu An= (n+1)/(1+2n+n2 ) gdzie n=1, 2, 3,. . .
Sumowanie wykonywać do momentu, gdy ostatni dodany wyraz ciągu jest
mniejszy niż wprowadzona liczba epsilon.

Mój kod:

#include <iostream>

using namespace std;

double A(int n){
n=1.0;
return (n+1.0)/(1.0+(2.0)*n+n*n);
}


int main()
{
    int n;
    double epsilon, x=0;
    cout << "Podaj epsilon: ";
    cin>>epsilon;

do
{
x=x+A(n);
n++;
}while (A(n-1)>=epsilon);

cout<<"Suma wyrazow ciagu An: "<<x;
    return 0;
}

Gdy wpiszę epsilon większy od 0.5, to pokazuje dobry wynik (0.5), natomiast dla epsilon<=0.5 program przechodzi do następnej linii. Wpatruję się w ten kod i nie mam pojęcia, co jest nie tak. Pomocy :(.

0

Co to jest?

n = 1.0;
0

Kombinowałem na różne sposoby, z "n=1" też nie działa.

0

Ale po co? Jaki jest sens tego?

0

No żeby zacząć od jedynki, tak jak jest w treści zadania.

1

Przecież te kroki realizujesz za pomocą pętli w main, funkcja zwraca tylko wynik dla konkretnego n. Zresztą pomyśl jaki byłby sens przekazać n do funkcji skoro i tak zaraz dostanie wartość 1?
No i n w main powinno być inicjalizowane wartością: int n = 1;

0

Poprawiłem i śmiga, dzięki :).

0

Skoro: (n+1)/(1+2n+n2 ) >= epsilon to n >= (1-epsilon)/epsilon

Stąd:

#include <iostream>
using namespace std;
 
int main()
  {
   double epsilon,sum=0;
   cout<<"Podaj epsilon: ";
   cin>>epsilon;
   for(int n=(int)ceil((1-epsilon)/epsilon);n>=0;--n) sum+=(1.+n)/(1.+2*n+n*n);
   cout<<"Suma wyrazow ciagu: "<<sum<<endl;
   return 0;
  }

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