[C++] Program do wyliczania wzoru

Majka99
Użytkownik
Użytkownik
Posty: 152
Rejestracja: 20 paź 2012, o 12:54
Płeć: Kobieta
Lokalizacja: zgierz
Podziękował: 15 razy

[C++] Program do wyliczania wzoru

Post 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 ?
Ostatnio zmieniony 8 sie 2013, o 07:53 przez Afish, łącznie zmieniany 2 razy.
Powód: Całe wyrażenia matematyczne umieszczaj w tagach [latex] [/latex]. Poprawa wiadomości.
MakCis
Użytkownik
Użytkownik
Posty: 1023
Rejestracja: 10 lut 2008, o 15:45
Płeć: Mężczyzna
Podziękował: 72 razy
Pomógł: 15 razy

[C++] Program do wyliczania wzoru

Post 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/
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[C++] Program do wyliczania wzoru

Post 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?
Majka99
Użytkownik
Użytkownik
Posty: 152
Rejestracja: 20 paź 2012, o 12:54
Płeć: Kobieta
Lokalizacja: zgierz
Podziękował: 15 razy

[C++] Program do wyliczania wzoru

Post 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
Gouranga
Użytkownik
Użytkownik
Posty: 1595
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 247 razy

[C++] Program do wyliczania wzoru

Post autor: Gouranga »

Jest ok tylko że potęgowanie rekurencyjne będzie wolno działać, zmień na iteracyjne
MakCis
Użytkownik
Użytkownik
Posty: 1023
Rejestracja: 10 lut 2008, o 15:45
Płeć: Mężczyzna
Podziękował: 72 razy
Pomógł: 15 razy

[C++] Program do wyliczania wzoru

Post 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).
gryxon
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 30 gru 2011, o 02:21
Płeć: Mężczyzna
Lokalizacja: Puławy
Podziękował: 11 razy
Pomógł: 53 razy

[C++] Program do wyliczania wzoru

Post autor: gryxon »

Czasami zbicie stałej (w tym przypadku 2 razy szybsze byłoby potęgowanie iteracyjne?) jest znacznym przyśpieszeniem
ksisquare
Użytkownik
Użytkownik
Posty: 132
Rejestracja: 1 cze 2012, o 07:04
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 15 razy

[C++] Program do wyliczania wzoru

Post autor: ksisquare »

Kod: Zaznacz cały

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