Sumowanie elementów tablicy dynamicznej

0
#include <iostream>

using namespace std;

int suma(int b, int n)
{
    int *a = new int[n];
    if (n==1) return *a;
    if (n>1)
    {
        for (int i=0;i<n;i++)
        b=a[i]+a[i+1];
    }
    return b;
}
int main()
{
    int t,n,i,j;
    cout << "t: "; cin >> t;
        for (i=0;i<t;i++)
        {
            cout << "\nn: "; cin >> n;
            int *tab = new int[n];
            for (j=0;j<n;j++) cin >> tab[n];
            {
                cout << suma(tab[n], n);
            }
        }

    return 0;
}
 

Program się kompiluje jednak wyniki wychodzą jak " z kosmosu " i nie mam pojęcia dlaczego :( Z góry dziękuje za odpowiedzi (:

0

Ten kod to jeden wielki WTF. Spróbuj porobić komentarze do niego, zapewne w trakcie ich pisania zorientujesz się co źle robisz.

Podpowiem tylko jedną podstawową rzecz: w niepascalowych językach tablice zwykle numeruje się od zera, jeśli robisz new int[n], to poprawne indeksy to od 0 do (n-1) włącznie.

0

Czy mógłbyś wyjaśnić co Ty chcesz osiągnąć? Ten kod nie ma żadnego sensu. W funkcji suma sumujesz (w dodatku źle, bo nie ma elementu a[i+1] dla i == n-1) elementy tablicy dynamicznej, która składa się z nieokreślonych bajtów. Na koniec tej funkcji masz wyciek pamięci. W main też wyciek pamięci.

0

no to tak:
t - liczba testów,
n - ile elementów ma być do zsumowania,
i,j - liczniki pętli.

Chcę osiągnąć to, aby sumował elementy tablicy ale nawet nie wiem co robię źle :/

0

Pytanie na początek:
Po co tworzysz nową tablicę w funkcji suma?

0

No w sumie to był głupi pomysł przyznaję wam rację, a robiłem ją po to żeby funkcja suma miała jakieś odwołanie do funkcji main. Teraz zmieniłem całą funkcję suma i wygląda to tak:

int suma(int b, int n)
{
    int wynik=0;
    if (n==1) return b;
    if (n>1)
    {
        for (int i=0;i<n;i++)
        {
            wynik=wynik+b;
        }
        return wynik;
    }
}

Ale i tak źle sumuje :D

0

myślę że powinno pomóc:

#include <iostream>
#include <numeric>

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

	int * tab;
	int n;
	std::cin >> n;
	tab = new int[n];

	for(int i = 0; i < n; i++) {
		tab[i] = i;
	}

	int ac = std::accumulate(tab, tab + n,0);

	for(int i = 0; i < n; i++) {
		std::cout << tab[i] << "\n";
	}
	std::cout << "ac: "<< ac;

	std::cin.get();
	std::cin.get();
}
 
1

PeterZof:
No świetnie, teraz dla n >= 1 ta funkcja zwraca b * n. O to ci chodziło? Jeśli funkcja suma ma sumować elementy tablicy, to, TADAM, TADAM, musisz jej przekazać jakoś tą tablicę. Czy to przez wskaźnik, referencję, wartość, referencję do obiektu mającego do niej wskaźnik, czy jak tylko chcesz, ale jakoś tam musisz przekazać.

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