Program obliczający sumę silni – nie wiem co mam źle

2018-12-09 20:26
0

Mam do napisania program obliczający sumę silni, czyli 1!+2!+3!+4! + ....
Nie wiem co mam źle, będę wdzięczny za pomoc.

#include <iostream>

using namespace std;

int s(int n)
{
    int suma=1;
    int wynik=0;
    for(int j=1; j<=n; j++){
    for(int i=1; i=j; i++)
    {
        suma = i*suma;
    }
    wynik = suma+wynik;

    } return wynik;
}
int main()
{
    int w;
    cin>>w;
    cout<<s(w);

    return 0;
}
edytowany 1x, ostatnio: furious programming, 2018-12-09 21:53

Pozostało 580 znaków

2018-12-09 20:37
kq
1

i=j przypisanie zamiast porównania. BTW: zakres int bardzo szybko ci się skończy


Pozostało 580 znaków

2018-12-09 21:09
0

ok poprawiłem ale dalej nie działa tak jak powinien, jeszcze jakieś wskazówki?

edytowany 1x, ostatnio: furious programming, 2018-12-09 21:53

Pozostało 580 znaków

2018-12-09 21:13
kq
0

Nie ustawiasz sumy na 1 dla kolejnych silni


możesz rozwinąć? - Tomek Nadrowski 2018-12-09 21:37
int suma=1; nie czyścisz kolejnych wartości. - kq 2018-12-09 21:38
mógłbyś podpowiedzieć co powinienem dopisać i gdzie? szczerze mówiąc nie bardzo wiem - Tomek Nadrowski 2018-12-09 21:52
odpowiadaj w odpowiedziach. - kq 2018-12-09 21:57

Pozostało 580 znaków

2018-12-09 22:14
0

Kod po poprawce wygląda tak:

#include <iostream>

using namespace std;

int s(int n)
{
    int suma=1;
    int wynik=0;
    for(int j=1; j<=n; j++){
    for(int i=1; i=j; i++)
    {
        suma = i*suma;
    }
    wynik = suma+wynik;

    } return wynik;
}
int main()
{
    int w;
    cin>>w;
    cout<<s(w);

    return 0;
}

działa poprawnie gdy wprowadzę 1 i 2, dla 3 zwraca 15 a powinien 8

Powinien 9: s(3) = 1! + 2! + 3! = 1 + 2 + 6 = 9 - lion137 2018-12-10 13:31

Pozostało 580 znaków

2018-12-09 22:15
kq
0

Prześledź co się dzieje z wartością suma podczas wykonania.


Pozostało 580 znaków

2018-12-09 22:50
0

Na samym początku zacząłem od tego kodu

#include <iostream>

using namespace std;

int s(int n)
{
    int suma=1;

    for(int i=1; i<=n; i++)
    {
        suma = i*suma;
    }
    return suma;
}
int main()
{
    int w;
    cin>>w;
    cout<<s(w);

    return 0;
}

liczy silnie dobrze, nie wiem jak prześledzić wartości sumy

edytowany 1x, ostatnio: Tomek Nadrowski, 2018-12-09 22:51

Pozostało 580 znaków

2018-12-09 22:51
kq
0

Zrób eksperyment myślowy i zastanawiaj się jaką wartość ma ta zmienna po każdym kroku programu. Ewentualnie użyj debuggera.


Pozostało 580 znaków

2018-12-09 23:05
0

Próbowałem używać debuggera ale za każdym razem omija mi moją funkcję(czyli nie pokazuje krok po kroku co się w niej dzieje), jakby debugger działał tylko w funkcji main

Ustawiłeś punkt debugowania? - GironX 2018-12-10 06:12

Pozostało 580 znaków

2018-12-10 13:19
1

Nie Potrzebowałbyś debuggera, Gdybyś się sekundę zastanowił nad tą funkcją:)
S1 = 1
S2 = S1 + 1*2
S3 = S2 + 1*2*3
...
SN = S(N - 1) + N!
Co prowadzi do banalnego kodu:

int sum_fact(int n){        
    int f = 1; // f for factorial:)
    int s = 0;
    for(int i = 1; i <= n; i++){
        f *= i;
        s += f;
    }
    return s;   
}

Zreszta, Mógłbyś , równie dobrze, napisać to naiwnie, zakres, nawet 64 bitów, szybko się skończy.

int fact(int n){
    if (n == 0) return 1;
    else
        return n * fact(n - 1);
}
int sum_fact_naive(int n){
    int s = 0;
    for (int i = 1; i <= n; i++)
        s += fact(i);
    return s;
}

edytowany 1x, ostatnio: lion137, 2018-12-10 13:24

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0