• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Obliczanie średniej c++, zaokrąglone wyniki nie wiem czemu.

Object Storage Arubacloud
+1 głos
632 wizyt
pytanie zadane 21 września 2017 w C i C++ przez Józef Niecierski Początkujący (440 p.)

Problem z programem obliczającym średnią iluś liczb. Program działa dla t testów. W każdym wczytujemy n liczb, liczymy sumę i w linii 29. obliczamy średnią. Jednakże wynik jest ZAOKRĄGLONY w dół z niewiadomych powodów. Prosiłbym o pomoc.

#include <iostream>

using namespace std;

int main()
{
float srednia=0;
int t,n;
    cout<<"Ile testow: ";
    cin>>t;
    for(int j=0; j<t; j++)
        {


        cout << "Obliczanie sredniej" << endl;
        cout<<"Podaj ile liczb: ";
        cin>>n;
int suma=0;
int liczba[n];
            for(int i=0; i<n;i++)
            {
            cout<<"Podaj "<<i<<". liczbe: ";
            cin>>liczba[i];
            suma=suma+liczba[i];

            }
        srednia=suma/n;

        cout<<"Suma: "<<suma<<endl;
        cout<<"Srednia: "<<srednia<<endl;
        }






    return 0;
}

 

3 odpowiedzi

0 głosów
odpowiedź 21 września 2017 przez criss Mędrzec (172,590 p.)
wybrane 22 września 2017 przez Józef Niecierski
 
Najlepsza

Zmień typ zmiennej suma na float (bądź inny typ zmiennoprzecinkowy), albo przy wykonywaniu dzielenia castuj ją na float: 

srednia = static_cast<float>(suma) / n;

Dzieląc int przez int (tak jak teraz), wynikiem też będzie int i stąd ucięcie części niecałkowitej. Tak, wynik dzielenia jest przypisywany do floata, ale zauważ, że najpierw tworzona jest zmienna tymczasowa będą wynikiem dzielenia (i tutaj jest typu int), a dopiero potem jest przypisywany do floata.

komentarz 22 września 2017 przez Józef Niecierski Początkujący (440 p.)
Dziękuję za odpowiedź i wyjaśnienie bardzo serdecznie, działa, dziękuję za pomoc.
+2 głosów
odpowiedź 21 września 2017 przez seba Dyskutant (8,900 p.)
Po pierwsze suma musi posiadać zmienną  float a po drugie nie tak się robi dynamiczną alokacje pamięci.
komentarz 22 września 2017 przez Józef Niecierski Początkujący (440 p.)
Dziękuję za odpowiedź działa. Co do alokowania pamięci, to dopiero się uczę.
+1 głos
odpowiedź 21 września 2017 przez Tomasz90 Nałogowiec (25,140 p.)
On nie jest zaokrąglony tylko ucięte to co jest po przecinku. Żeby był dobry wynik musisz mieć w mianowniku lub liczniku liczbę rzeczywistą. Przykładowo dzieląc 3.0 / 2 otrzymasz 1.5 ale jeżeli podzielisz 3 / 2 to otrzymasz 1.
komentarz 22 września 2017 przez Józef Niecierski Początkujący (440 p.)
Dziękuję za odpowiedź i wyjaśnienie bardzo serdecznie, działa, dziękuję za pomoc.

Podobne pytania

0 głosów
1 odpowiedź 303 wizyt
0 głosów
1 odpowiedź 745 wizyt
pytanie zadane 17 marca 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)
–1 głos
0 odpowiedzi 497 wizyt
pytanie zadane 18 stycznia 2016 w Inne języki przez niezalogowany

92,551 zapytań

141,397 odpowiedzi

319,528 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...