Obliczanie iteracyjnie przybliżonej sumy szeregu.

0

Cześć wszystkim,
Zwracam się z prośbą o pomoc. Stawiam swoje pierwsze kroki w programowaniu C++, nie za bardzo jeszcze wiem co do czego, korzystam z materiałów zawartych w sieci natomiast nie mogę znaleźć zbyt wiele informacji na temat zadania które otrzymałem do rozwiązania:

Oblicz iteracyjnie przybliżoną sumę szeregu 1+1/3+1/6+1/10+1/15+ ...

Czy byłby ktoś na tyle uprzejmy aby pomóc mi w rozwiązaniu tego zadania?

P.S. Na forum jest sporo tematów o obliczaniu sumy szeregu aczkolwiek niezbyt jestem w stanie wykorzystać zawarte tam informacje.

Proszę o wyrozumiałość jestem kompletnym nowicjuszem.

Pozdrawiam.

1
Filip20V napisał(a):

P.S. Na forum jest sporo tematów o obliczaniu sumy szeregu aczkolwiek niezbyt jestem w stanie wykorzystać zawarte tam informacje.

Bo przykłady liczą jabłka, a ty chcesz liczyć brzoskwinie?

Pokaż co próbowałeś. 4p to nie platforma do wyłudzania prac domowych.

1
  1. Znajdź wzór na n-ty element Twojego szeregu.
  2. Zainicjuj zerem zmienną suma (typu double) przed pętlą.
  3. Kod Twojej pętli musi się wykonać n ilość razy.
  4. W każdym obrocie pętli musisz dodać n-ty element szeregu do zmiennej suma.

Im więcej elementów dodasz, tym dokładniejsze przybliżenie. Oczywiście z umiarem, bo sam typ zmiennoprzecinkowy nie jest idealnie dokładny....

0

#include <iostream>
#include <math.h>

float suma = 0;
int n;

using namespace std;

int main()
{
cout << "Podaj zakres sumy: ";
cin >> n;

for(int i=1;i<= n;i++)
{
    suma += (1.0/i);
}

cout << "suma= " << suma << endl;
return 0;

}

Jak do tej pory posiadam coś takiego.
Nie mam na celu wyłudzania prac domowych, po prostu jestem w lesie za grupą i nadrabiam zaległości. Małymi krokami sam poznaje programowanie w C++.

1

Nie jest źle. Teraz musisz tylko zaimplementować poprawny wzór na szereg i dla pewności rzutuj inty na floaty.

W każdym obrocie pętli Twój mianownik się zwiększa o liczbę o 1 większą.

0
Filip20V napisał(a):

Jak do tej pory posiadam coś takiego.
Nie mam na celu wyłudzania prac domowych, po prostu jestem w lesie za grupą i nadrabiam zaległości. Małymi krokami sam poznaje programowanie w C++.

No, jest prawie OK, zostało zmienić jabłka na pomarańcze, czyli zmienić wzór na element Twojego szeregu.

Masz jakiś pomysł na 1,3,6,10 ... ? Pytanie nie ma nic do programowania. Matematyka i pomyślunek

0

Jeżeli chodzi o 1, 3, 6, 10... z matematyki to zdaje się będzie liczba trójkątna

Teraz kwestia jak to wprowadzić do kompilatora?

0
Spine napisał(a):

Teraz kwestia jak to wprowadzić do kompilatora?

Potrzebujesz w pętli drugi licznik zwiększany o odpowiednie wartości w odpowiednim czasie.

j += i; ?

Tylki najpierw zainicjuj j odpowiednią wartością.

0

Użyj funkcji, wystrzegaj się zmiennych globalnych.

double calculateSumOfSeries( int step )
{
    double result {0.0};
    int triangularNumber {1};
    for( int i=1 ; i<=step ; ++i )
    {
        result += 1.0/triangularNumber;
        triangularNumber += (i+1);
    }
    return result;
}
0

@TomaszLiMoon

double calculateSumOfSeries( int step )
{
    double result {0.0};
    int triangularNumber {0};
    for( int i=1 ; i<=step ; i++ )
    {
        triangularNumber += i;
        result += 1.0/triangularNumber;
    }
    return result;
}
0

Wymyśliliśmy coś takiego, zdaję się że działa.

#include <iostream>
#include <math.h>

double suma = 0, calculateSumOfSeries;
int n, step, triangularNumber = 0;
using namespace std;
int triang_n(int n);

int main()
{
       cout << "Podaj zakres sumy: ";
       cin >> n;
       step = 1;
       for (int i = 1; i <= n; i++)
{
        cout <<  triang_n(i) << endl;
        suma += 1.0 / triang_n(i);
}
       cout << "suma= " << suma << endl;
       system("pause");
       return 0;
}
int triang_n(int n)
{
       int triang = 1;
       for (int j = 2; j <= n; j++)
             triang += j;
       return triang;
}
`
0

Finalnie jest tak:

#include <iostream>
#include <math.h>
double suma = 0;
int n,  triangularNumber = 0;
using namespace std;
int main()
{
       cout << "Podaj zakres sumy: ";
       cin >> n;
       for (int i = 1; i <= n; i++)
       {
             triangularNumber += i;
             cout <<  "x=:"  << triangularNumber << endl;
             suma += 1.0 / triangularNumber;
       }
       cout << "suma = " << suma << endl;
       system("pause");
       return 0;
}

Dziękuję za wskazówki.
0
Filip20V napisał(a):

Finalnie jest tak:

#include <iostream>
#include <math.h>
double suma = 0;
int n,  triangularNumber = 0;
using namespace std;
int main()
{
       cout << "Podaj zakres sumy: ";
       cin >> n;
       for (int i = 1; i <= n; i++)
       {
             triangularNumber += i;
             cout <<  "x=:"  << triangularNumber << endl;
             suma += 1.0 / triangularNumber;
       }
       cout << "suma = " << suma << endl;
       system("pause");
       return 0;
}

Dziękuję za wskazówki.

Permutation Oriented Programming ?
Miałeś już kod być może dobry, wróciłeś do nieprawidłowego z dodawaniem "i".

Naprawdę sam to piszesz, czy kopiujesz od kogoś bez analizy?

1

Jeśli to nie koniec twoich przygód z programowaniem, to powinieneś to poprawić.

  • nie używaj zmiennych globalnych - nigdy
  • nie pisz wszystkiego w main, jeśli będziesz dzielił funkcje na mniejsze funkcje, będzie ci łatwiej pisać i czytać bardziej trudne rzeczy
#include <iostream>
#include <cmath>

double triangularNumber(int n)
{
     return n * (n + 1) / 2;
}

double invTriangNumSeries(int n)
{
    double sum = 0;
    for (int i = 1; i <= n; ++i)
        sum += 1.0 / triangularNumber(i);

    return sum;
}

int main()
{
    int n;
    std::cout << "Podaj dlugosc szeregu: ";
    std::cin >> n;
    std::cout << "suma = " << invTriangNumSeries(n) << '\n';

    return 0;
}

Może i jest nieco dłuższe ale łatwiejsze w czytaniu i poprawianiu.

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