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

Program wskazujący wartość najbliższą średniej nie działa poprawnie

0 głosów
240 wizyt
pytanie zadane 8 stycznia 2021 w C i C++ przez Frog17 Nowicjusz (190 p.)

Jest to zadanie domowe z odcinka 11 kursu C++. Użytkownik ma wprowadzić 5 liczb, a program ma mu podać średnią i liczbę, która jest najbliżej wartości średniej. Podczas podawania niektórych wartości program podaje złą liczbę np. 1 2 3 5 4 (w tej kolejności). Proszę o zlokalizowanie błędu. Z góry dziękuje.

#include <iostream>

using namespace std;
float a[5]; //WARTOSCI
float srednia; //SREDNIA
float odleglosc[5]; //ODLGELOSCI DANYCH LICZB OD SREDNIEJ
float najblizej; //LICZBA NAJBLIZEJ SREDNIEJ
int main()
{
    cout<<"Podaj 5 liczb oddzielonych spacja i zatwierdz enterem: "; 
    cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4];
    srednia=(a[0]+a[1]+a[2]+a[3]+a[4])/5;

    for (int i=0; i<5; i++)
    {
        odleglosc[i]=a[i]-srednia;
        if (odleglosc[i]<0) 
            odleglosc[i]=odleglosc[i]*-1;
    }
    najblizej=a[0];

    for (int i=1; i<5; i++)
        {
            if (odleglosc[i]<odleglosc[i-1]) 
                najblizej=a[i];
        }

    cout<<"Srednia wynosi: "<<srednia<<endl;
    cout<<"Najblizej jest: "<<najblizej<<endl;

    return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 8 stycznia 2021 przez manjaro Nałogowiec (37,390 p.)
wybrane 9 stycznia 2021 przez Frog17
 
Najlepsza

W zasadzie to cały blok od 24-26 linijki jest błędny. Ty sprawdzasz tylko różnice między aktualną wartością a poprzednią, a powinieneś sprawdzać między aktualną a globalnie najmniejszą.

Trochę zmodyfikowałem ten kod:

#include <iostream>
 
using namespace std;
float a[5]; //WARTOSCI
float srednia; //SREDNIA
float odleglosc[5]; //ODLGELOSCI DANYCH LICZB OD SREDNIEJ
float najblizej; //LICZBA NAJBLIZEJ SREDNIEJ
int indeks;

int main() {
    cout<<"Podaj 5 liczb oddzielonych spacja i zatwierdz enterem: "; 
    cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4];
    srednia=(a[0]+a[1]+a[2]+a[3]+a[4])/5;
 
    for (int i=0; i<5; i++) {
        odleglosc[i]=a[i]-srednia;
        if (odleglosc[i]<0) odleglosc[i]=odleglosc[i]*-1;
    }

    najblizej = odleglosc[0];
    indeks = 0;

    for (int i=1; i<5; i++) {
        if (odleglosc[i] < najblizej) {
            najblizej = odleglosc[i];
            indeks = i;
        }
    }

    cout<<"Srednia wynosi: "<<srednia<<endl;
    cout<<"Najblizej jest: "<< a[indeks] <<endl;
 
    return 0;
}

 

 

komentarz 8 stycznia 2021 przez Frog17 Nowicjusz (190 p.)
Bardzo dziękuje za odpowiedź :)
0 głosów
odpowiedź 8 stycznia 2021 przez tangarr Mędrzec (155,180 p.)
Błąd znajduje się w 24 linijce.
komentarz 8 stycznia 2021 przez manjaro Nałogowiec (37,390 p.)
heh wyprzedziłeś mnie ;)

Podobne pytania

0 głosów
1 odpowiedź 1,018 wizyt
0 głosów
3 odpowiedzi 1,092 wizyt
0 głosów
2 odpowiedzi 530 wizyt

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...