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;