Średnia i indeksowanie

0

Dobry,
od kilku dni zacząłem bawić się w programowanie. Robię teraz kurs z YT, i było tam zadanie do samodzielnego wykonania (odrobinę zmodyfikowane przeze mnie): najpierw pytam ile liczb chce podać, następnie je podaje, liczę średnia i mam wskazując która liczba jest najbliżej średniej.

Uznamem, że najlepiej będzie użyć wartości bezwzględnej, badam różnice między zadana liczba a średnia wszystkich. I najbliższa średniej to ta dla której najmniejsza jest wartość bezwzględna. Ale mam pewien problem ponieważ mam tu 2 tablice i bardzo indeksowanie mi się rozłazi i dodatkowo dla liczb z przecinkami nie liczy tez dobrze abs...

#include <iostream>
#include <cmath>

using namespace std;

int liczba;
float *liczby = new float [liczba];
float *odleglosc = new float [liczba];
float srednia (float *liczby, int liczba)
{
    float suma=0;
    for (int i=0; i<liczba; i++)
    {
       suma += liczby[i];
       liczby[i]++;
    }
    return suma/(liczba);
}


int main()
{
    cout << "Ile liczb chcesz podac: ";
    cin>> liczba;

    for (int i=0; i<liczba; i++)
    {
        cout<<"Podaj "<<i+1<<" liczbe: ";
        cin>>liczby[i];
    }

    cout<<endl<<"Srednia jest rowna: "<<srednia(liczby,liczba)<<endl<<endl;

    for (int i=0; i<liczba; i++)
    {
        odleglosc[i] = (liczby[i]-srednia(liczby, liczba));
        cout<<"Odleglosc liczby "<<liczby[i]<<" od sredniej jest rowna: "<<abs(odleglosc[i])<<endl;
        //odleglosc[i]++;
    }


    cout<<endl;

    for (int i=0; i<liczba; i++)
    {
        cout<<i+1<<" liczba teraz to: "<<liczby[i]<<endl;
    }

    return 0;
}

0

A i nie chodzi mi o kod całego działającego programu tylko o wskazówkę co jest nie tak...

Na samym dole wyświetla mi się na nowo tablica która pojadę użytkownik, jednak rożni się ona znacznie od tej zadanej

0
int liczba;
float *liczby = new float [liczba];
float *odleglosc = new float [liczba];

To zupełnie nie ma sensu.

  1. zmienne globalne
  2. tworzysz 0-elementowe tablice
  3. używasz new. (dlaczego nie: https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/ )

W ogóle nie ma potrzeby abyś miał tu dwie tablice. Indeks tej obecnie najbliższej do średniej to jedna zmienna.

A, jeszcze jedno: wiesz, że dookoła <<, >> i innych operatorów można wstawiać spacje?

0

Chciałem mieć dwie osobne tablice, aby w każdej chwili wrócić do tej pierwszej. I jeżeli użytkownik wprowadzi liczby to nie są one 0 elementowe. Przynajmniej ja tak rozumiem.

Ale wróćmy do sedna: czemu jak na końcu programu wywołuje ponownie tablice "liczby" to maja one inne wartości? Jeżeli dobrze to rozumiem to nigdzie jej nie zastępuje.

0

Wielkość tablicy jest ustalana w momencie jej tworzenia. W przypadku zmiennych globalnych jest to zanim wywołane zostanie main. Wtedy też wartość liczba to 0.

Nadal nie rozumiem po co chcesz mieć dwie tablice, ale jeśli użytkownik wprowadzi liczby, to Ty po prostu będziesz pisał poza zakresem 0-elementowej tablicy.

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