[C++] Sumowanie wyrazów ciągu harmonicznego

Awatar użytkownika
Hendra
Użytkownik
Użytkownik
Posty: 176
Rejestracja: 18 sty 2015, o 23:42
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 37 razy
Pomógł: 3 razy

[C++] Sumowanie wyrazów ciągu harmonicznego

Post autor: Hendra »

Witajcie!
Napisałem program, który powinien sumować n pierwszych wyrazów ciągu harmonicznego w postaci: \(\displaystyle{ a_{n}= \frac{1}{n+1}}\). Niestety coś w kodzie jest źle, bo wynik wychodzi zupełnie niedobry (pełno w nim e i dziwnych potęg) albo jest napisane "nan".
Bardzo prosiłbym o spojrzenie na poniższy skrypt i być może znalezienie błędu:

Kod: Zaznacz cały

#include <iostream>
#include <math.h>
#include <cstdio>
#include <ctime>
using namespace std;
int main ()
{
	int n;
	int k;
	long double S;
	cout<<"Wpisz ilosc sumowanych wyrazow ciagu"<<endl;
	cin>>n;
	cout<<"Wpisz wykladnik"<<endl;
	cin>>k;
	clock_t start = clock();
	for (unsigned long long i=1 ; i<pow(n,k)+1 ; i++) 
		{ 
  			S+=1/(1+i); 
		} 
	cout<<"Suma = "<<S<<endl;
	 printf( "Czas wykonywania: %lu ms
", clock() - start );
    system ("pause");
    return 0;
}
Ostatnio zmieniony 22 lip 2016, o 06:16 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Awatar użytkownika
Santiago A
Użytkownik
Użytkownik
Posty: 248
Rejestracja: 22 sty 2016, o 20:56
Płeć: Mężczyzna
Lokalizacja: Zaragoza
Podziękował: 9 razy
Pomógł: 51 razy

[C++] Sumowanie wyrazów ciągu harmonicznego

Post autor: Santiago A »

Nie inicjujesz zmiennej S, wynikiem dzielenia 1/(1+i) jest zawsze zero (dlaczego?). Oczyszczony kod wyglądałby mniej więcej tak:

Kod: Zaznacz cały

#include <iostream>
#include <math.h>
#include <cstdio>
#include <ctime>
using namespace std;
int main () {
    int n;
    float S = 0;
    cout << "Wpisz ilosc sumowanych wyrazow ciagu: ";
    cin >> n;
    for (int i = 1 ; i <= n ; i++) 
        S += 1.0 / i;

    cout << "Suma = " << S << "
";
    return 0;
}
Uwaga: ze względu na zawiłości arytmetyki zmiennoprzecinkowej powinieneś sumować od \(\displaystyle{ i = n}\) do \(\displaystyle{ i = 1}\), nie odwrotnie.
ODPOWIEDZ