Nie działa funkcja z tablicą.

0

Mam problem z nastepujacym kodem. Ma on za zadanie zsumowac wartosci tabeli a, ktorej przypisane sa wartosci z funkcji fibonacci i zwrocic wartosc sumy.

#define N 6
#include <iostream>
#include <stdlib.h>
#include <assert.h>
using namespace std;

int fibonacci ( int *a, int n ){
    if ( a == NULL )
        return -1;
    if ( n <= 0 )
        return -2;
    int *x = a;
    *x = 1;
    *(x+1) = 1;
    int i = 2;
    while ( i  < n ){
        *(x + i) = *(x + i - 2) + *(x + i - 1);
        i++;
    }
    return 0;
}


int sumArray(int * a, int len , int * sum){
    if ( a == NULL || sum == NULL )
        return -1;
    *sum = 0;
    for ( int i = 0; i <= len; i++ ){
        *sum = a[i] + *sum;
    }
    return 0;  
}
int main() {
    int a[N];
    int sum;
    fibonacci(a, N);
    sumArray( a, N, &sum );
    cout << sum <<endl;
 return 0;
}
1

I jak jest Twój problem? Umieszczaj kod w tagach z językiem, aby składnia była kolorowana.

0

Konsola wyświetla mi wynik "4310324", który jest błędny.

0

W takim razie zobacz czy poprawnie generujesz tablicę. Jeśli tak, to sprawdź czy poprawnie sumujesz.

1

Skorzystaj z wektora i numeric.

#include<iostream>
#include<vector>
#include<numeric>
using namespace std;

unsigned fib_iterative(unsigned n){
    unsigned a = 0, b = 1;
    for(unsigned i = 1; i <= n; ++i){
        unsigned tmp = a + b;
        a = b;
        b = tmp;
    }
    return a;
}

int main(){
    vector<unsigned> fibs;
    int count = 10;
    for(int i = 0; i < count; ++i){
        fibs.push_back(fib_iterative(i + 1));
        cout << fibs[i] << endl;
    }

    cout << endl << accumulate(fibs.begin(),fibs.end(),0) << endl;
    return 0;
}

PS: @Koziołek Fib zerżnięty z Twojego linku, bo już samemu mi się myśleć nad Fibonacchim nie chiało hehe http://madsbuch.com/blog/100-days-of-fibonacci-overview/ ;)

0

Generalnie w zadaniu chodzi o to aby zastosować taką formę funkcji:

int sumArray(int * a, int len , int * sum)

Jest to ćwiczenie na referencje i tablicę. Sam efekt nie jest o tyle ważny, co droga, którą go osiągnieto, chociaż powinien być właściwy.

3

tu jest błąd

for ( int i = 0; i <= len; i++ ){ 

Wychodzisz poza tablicę!

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