• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak obliczyć szereg harmoniczny dla podanej wartości eps? C++

Object Storage Arubacloud
0 głosów
3,507 wizyt
pytanie zadane 30 października 2015 w C i C++ przez Moonshine Mądrala (6,360 p.)
edycja 30 października 2015 przez Moonshine
Witam, spotkałem się jak na tą chwilę z zadanie nie do przejścia. A mianowicie:

Napisz program, który obliczy sumę szeregu harmonicznego dla podanej dokładności obliczeń eps.

Potrafie napisać program obliczający sumę tego szeregu z podanym n z klawiatury. Ale nie wiem kompletnie jak zabrać się za główny wątek tego zadania. Znalazłby się ktoś kto by mi podpowiedział jak coś takiego zrobić? Jak obliczyć sume tego szeregu dla podanej dokładności obliczeń eps?

2 odpowiedzi

+1 głos
odpowiedź 30 października 2015 przez furas Maniak (53,800 p.)
wybrane 30 października 2015 przez Moonshine
 
Najlepsza
Jeśli różnica między sumą `n-1` elementów a sumą `n` elementów będzie mniejsza (lub równa) `eps` to mamy wynik z dokładnością do `eps`. W tym celu wystarczy sprawdzać czy dodawany element jest mniejszy (lub równa) niż `eps`.

Z tym "lub równy" tylko nie jestem pewny - może powinno być tylko "mniejszy".
0 głosów
odpowiedź 1 listopada 2015 przez Moonshine Mądrala (6,360 p.)
#include <iostream>


using namespace std;

int main()
{
	long double suma=0.0;
	long double suman=0.0; //suma n to jest suma n-1 czyli poprzedniego wyrazu szeregu
	int n;
	cout<<"|---------------------------WITAJ------------------------------|"<<endl;
	cout<<"|--Program oblicza sume szeregu z dokladnoscia eps-------------|"<<endl;
	cout<<"|--------------------------------------------------------------|"<<endl;
	cout<<endl;
	
	float eps;
	int i=1;
	long double roznica;
	
	cout<<"Podaj eps: ";
	cin>>eps;
	
	do
	{
		i++;
		suma=suma+(1/float(i));
		suman=suman+(1/float(i-1));
		roznica=suma-suman;
		if(roznica<0)
		{
			roznica=-roznica;
		}
		cout<<roznica;
	}while(roznica>eps);
	
	cout<<"Suma szeregu z dokladnoscia do eps= "<<eps<<" Wynosi: "<<suma<<endl;
	
}	

Co w tym kodzie jest nie tak bo nawet dla eps=0.01 suma szeregu wynosi nieskończoność? ;o

komentarz 1 listopada 2015 przez furas Maniak (53,800 p.)
Zanim sprawdzę kod w działaniu powiem tylko, że tak na prawdę to

roznica = 1/float(i);

więc nie ma potrzeby liczenia drugiej sumy. Podobnie nie ma potrzeby sprawdzać czy jest mniejsze od zera bo nie powinno być mniejsze od zera.

Ponieważ wykonujesz kilka działań na liczbach wymiernych, które są niedokładne więc obecnie liczona różnica też może mieć niedokłady wynik - może kumulować niedokładności.
komentarz 1 listopada 2015 przez furas Maniak (53,800 p.)
Dodaj wypisywanie zmiennych a zobaczysz, że w `suma` nie został dodany pierwszy element o wartości 1 bo zaczyna dodawanie od 1/2 a w `suman` zaczyna dodawanie od 1/1.
komentarz 1 listopada 2015 przez Moonshine Mądrala (6,360 p.)
Dzieki wielkie furas! Teraz działa!
komentarz 1 listopada 2015 przez furas Maniak (53,800 p.)
Z tego wszystkiego mam tylko jedną wątpliwość - sprawdziłem w WIkipedi, że ten szereg jest rozbiezny do nieskończoności więc tak właściwie trudno powiedzieć o liczeniu z dokładnością eps - tak jak to ma miejsce w szeregach zbieżnych.
komentarz 1 listopada 2015 przez Moonshine Mądrala (6,360 p.)
W tym zadaniu pewnie bardziej chodzi o naukę myślenia algorytmicznego niż o własności szeregów. Jest to zadanie na studenckie laboratorium ;)

Podobne pytania

0 głosów
1 odpowiedź 2,863 wizyt
pytanie zadane 12 marca 2016 w C i C++ przez muscler Użytkownik (720 p.)
0 głosów
0 odpowiedzi 624 wizyt
pytanie zadane 18 grudnia 2020 w C i C++ przez Empire Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 1,188 wizyt
pytanie zadane 14 stycznia 2017 w Visual Basic przez r3mix Nowicjusz (120 p.)

92,536 zapytań

141,377 odpowiedzi

319,452 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...