Tablice dynamiczne - funkcja

0

Cześć, mam problem z funkcją, która ma mi zwrócić średnią z wartości komórek danej tablicy. Wyniki mimo małych wartości dają gigantyczne wyniki. Jakaś pomoc z wytłumaczeniem co robię źle?

#include <iostream>
#include <math.h>
#include <cstdlib>

using namespace std;

double srednia(int rozmiar, int* tablica)
{
    int suma;

    for (int i = 0; i < rozmiar; i++) {
        suma += *tablica;
        tablica++;
    }
    return suma / rozmiar;
}

int main()
{
    int rozmiar;

    cout << "Podaj rozmiar tablicy: " << endl;
    cin >> rozmiar;
    int* tablica = new int[rozmiar];
    system("cls");

    for (int i = 0; i < rozmiar; ++i) {
        cout << "Podaj " << i + 1 << " element tablicy: ";
        cin >> tablica[i];
        cout << endl;
        system("cls");
    }

    system("cls");
    cout << "Srednia wynosi " << srednia(rozmiar, tablica);
    delete[] tablica;
    return (0);
}
1
int suma;

Jaką wartość ma suma? No właśnie. Inicjalizuj zmienne. Ponadto, niech suma będzie typu double, inaczej będziesz miał dzielenie całkowite w wyniku.

Dodatkowa lektura: https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/

0
kq napisał(a):
int suma;

Jaką wartość ma suma? No właśnie. Inicjalizuj zmienne. Ponadto, niech suma będzie typu double, inaczej będziesz miał dzielenie całkowite w wyniku.

Dodatkowa lektura: https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/

Ok dzięki, myślałem, że program domyślnie da 0 na start w tym int-cie
W tej lekturze miałeś na myśli, że ten "new" i "delete" jest zbędny, czy to, że robię jakiś błąd? Bo jest to moje zadanie na studia i gościu wymaga od nas byśmy użyli obu tych komend

1

Nie musisz (a nawet nie powinieneś) cytować całego posta jeśli odpowiadasz bezpośrednio pod nim.

W C++ w wielu miejscach nie ma domyślnej inicjalizacji sensowną wartością (wartościowa lektura: https://blog.tartanllama.xyz/initialization-is-bonkers/ )

Co do new i delete - jak masz wymóg na studiach to masz wymóg na studiach, ale to jest na tyle zła praktyka, że można ją śmiało nazywać błędem.

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