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

Znajdowanie liczby najblizszej sredniej

0 głosów
1,003 wizyt
pytanie zadane 19 lipca 2018 w C i C++ przez Nowacx02 Obywatel (1,060 p.)

Witam robie zadanie z kursu programowania pana Zelenta które brzmi "napisz program znajdujacy liczbe najblizsza średniej z 5-ciu podanych liczb". Napisałem następujący kod jednak nie wypisuje on 2 liczb lub więcej w sytuacji gdy np 2 liczby są najblizej sredniej (np. 0 0 15 6.5 3.5 czyli 3.5 i 6.5). Czy da się jakoś poprawic ten kod by działał dobrze w sensie by wypisywał więcej niż 1 najblizszych liczb?

#include <iostream>

using namespace std;

int main()
{
    float cyf[5],roznica[5],srednia;
    cout<<"Podaj 5 liczb: "; cin>>cyf[0]>>cyf[1]>>cyf[2]>>cyf[3]>>cyf[4];
    srednia = (cyf[0] + cyf[1] + cyf[2] + cyf[3] + cyf[4]) / 5 ;
    cout<<"Srednia wynosi: "<<srednia<<endl;
    for(int i=0;i<5;i++)
        roznica[i]=cyf[i]-srednia;

        float najblizej=roznica[0];   // 0 0 15 3.5 6.5
        for(int i=1;i<5;i++)
        {
        if(roznica[i]==0)
            najblizej=roznica[i];
        else if((roznica[i]<najblizej&&roznica[i]>0)||(roznica[i]>najblizej&&roznica[i]<0))
            najblizej=roznica[i];
        }
        najblizej+=srednia;
    cout<<"Liczba najblizej sredniej to: "<<najblizej<<endl;

    return 0;
}

 

2 odpowiedzi

+2 głosów
odpowiedź 19 lipca 2018 przez Ukasz Użytkownik (960 p.)
wybrane 19 lipca 2018 przez Nowacx02
 
Najlepsza

Zrobiłem to w ten sposób:

(nie sprawdzałem dokładnie na wszystkich przypadkach, ale na podanym przez Ciebie i kilku innych było dobrze, więc chyba jest ok)

#include <iostream>
#include <cmath>

int main()
{
    using namespace std;
    float number[5], diffrence[5]; float mean, smallest_diffrence;

    cout<<"Podaj 5 liczb: "; cin>>number[0]>>number[1]>>number[2]>>number[3]>>number[4];
        mean=(number[0]+number[1]+number[2]+number[3]+number[4])/5; //obliczam srednia
        smallest_diffrence=abs(number[0]-mean); //najmniejsza roznica

    //petla szukajaca ile wynosi najmniejsza roznica
    for(int i=0; i<5; i++)
    {
     diffrence[i]=abs(number[i]-mean); //tablica z roznicami ze srednia poszczegolnych liczb
     if(diffrence[i]<smallest_diffrence){smallest_diffrence=diffrence[i];}
    }

    //petla wypisujaca liczby ktore maja roznice rowna najmniejszej 
    cout<<"\n\n Najblizej sredniej: ";
    for(int i=0; i<5; i++)
    {
     if(diffrence[i]==smallest_diffrence){cout<<number[i]<<" ";}
    }

 cin.get(); cin.get();
 return 0;
}

Może Ci się przyda ;) Pozdro

0 głosów
odpowiedź 19 lipca 2018 przez Bondrusiek Maniak (61,440 p.)
Witam,

możesz wykorzystać kontener np wektor, który będzie przechowywał wiele danych które będą miały taką samą odległość od średniej. Załóżmy że znajdujesz wartość która jest najbliżej do średniej to czyścisz wektor i dodajesz wartość. Jeśli nowa liczba ma taką samą wartość to tylko dodajesz do wektora za pomocą metody push_back(). Po wyjściu z pętli wyświetlasz zawartość tego kontenera.

Podobne pytania

0 głosów
1 odpowiedź 336 wizyt
+1 głos
1 odpowiedź 876 wizyt
0 głosów
2 odpowiedzi 505 wizyt

93,427 zapytań

142,421 odpowiedzi

322,648 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
...