Strona 1 z 1

[C++] Program do wyliczania wzoru

: 7 sie 2013, o 19:14
autor: Majka99
Napisz program, który pobiera liczbę całkowitą dodatnią \(\displaystyle{ n}\), a następnie oblicza wartość
funkcji \(\displaystyle{ s(n)}\), gdzie
\(\displaystyle{ s(n)= \sum_{k=1}^{n} k+n^k}\)

Kod: Zaznacz cały

#include <iostream>

using namespace std;
 int suma(int n)
 {
 
 int suma=0;
 for(int k=0;k<=n;k++)
 suma=suma+k+n^k;
 return suma;
 	
 	
 	
 	
 }



int main() {
	
	int n;
	cout<<"podaj numer wyrazu"<<endl;
	cin>>n;
	cout<<"Wynik to : "<<suma(n)<<endl;
	
	
	return 0;
}
Pierwszy wyraz liczy dobrze a później już niestety nie.gdzie mam błąd ?

[C++] Program do wyliczania wzoru

: 7 sie 2013, o 20:18
autor: MakCis
A czym jest operator ^ w języku C++? Zamiast tego zastosuj lepiej funkcje pow:

Kod: Zaznacz cały

http://www.cplusplus.com/reference/cmath/pow/

[C++] Program do wyliczania wzoru

: 7 sie 2013, o 20:28
autor: witekkq
Dodatkowo zgodnie z poleceniem powinnaś sprawdzić czy liczba którą przekazujesz jest "całkowita dodatnia"

W pętli masz od k=0 dlaczego?

[C++] Program do wyliczania wzoru

: 7 sie 2013, o 22:00
autor: Majka99

Kod: Zaznacz cały

#include <iostream>

using namespace std;
int potega(int a,int x)
{
	if(x==0)
	return 1;
	return potega(a,x-1)*a;
	
	
}
 int suma(int n)

 {
 
 int suma=0;
 for(int k=1;k<=n;k++)
 suma=suma+k+potega(n,k);
 return suma;
 	
 	
 	
 	
 }



int main(int argc, char** argv) {
	

	int n;
	cout<<"podaj numer wyrazu"<<endl;
	cin>>n;
	if(n>0)
	cout<<"Wynik to : "<<suma(n)<<endl;
	
	
	return 0;
}
Teraz dziala,zapomnialam się z tym potegowaniem <gafa>.Tak jest wszystko ok ?
dzieki za pomoc

[C++] Program do wyliczania wzoru

: 7 sie 2013, o 22:05
autor: Gouranga
Jest ok tylko że potęgowanie rekurencyjne będzie wolno działać, zmień na iteracyjne

[C++] Program do wyliczania wzoru

: 8 sie 2013, o 10:36
autor: MakCis
Dlaczego uważasz, że potęgowanie iteracyjne będzie szybsze niż rekurencyjne? Obie wersje mają złożoność liniową \(\displaystyle{ \mathcal{O}(n)}\).

Jeśli już tak bardzo zależy nam na złożoności obliczeniowej w przypadku potęgowania to powinniśmy skorzystać z , który da nam złożoność logarytmiczną \(\displaystyle{ \mathcal{O}(\log n)}\) lub funkcji wbudowanej (dostępnej z biblioteki cmath bodajże).

[C++] Program do wyliczania wzoru

: 8 sie 2013, o 20:03
autor: gryxon
Czasami zbicie stałej (w tym przypadku 2 razy szybsze byłoby potęgowanie iteracyjne?) jest znacznym przyśpieszeniem

[C++] Program do wyliczania wzoru

: 27 sie 2013, o 11:26
autor: ksisquare

Kod: Zaznacz cały

    s=0; p=1;
    for(k=1; k<=n; k++){
        p *= n;
        s += k+p;
    }
    cout >> s;