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

Która liczba jest najbliższa średniej? [Zadanie domowe z odc. 11 c++] - pewna kwestia

0 głosów
1,484 wizyt
pytanie zadane 12 sierpnia 2015 w C i C++ przez Adam Jakś Dyskutant (8,940 p.)

#include <iostream>

using namespace std;
float a,b,c,d,e;
float av;
float ava, avb, avc, avd, ave;
float diff;

int main()
{
    cout << "Prosze podac 5 liczb oddzielonych spacja lub enterem."<<endl<<
    "Do zapisywania liczb niecalkowitych prosze uzywac kropki. Np. 3.14 ."
    << endl;

    cin>> a >> b >> c >> d >> e;

    av=(a+b+c+d+e)/5;

    if (av>=a) ava=av-a; else if (av<a) ava=a-av;
    if (av>=b) avb=av-b; else if (av<b) avb=b-av;
    if (av>=c) avc=av-c; else if (av<c) avc=c-av;
    if (av>=d) avd=av-d; else if (av<d) avd=d-av;
    if (av>=e) ave=av-e; else if (av<e) ave=e-av;

    diff=ava;

    if (avb<diff) diff=avb;
    if (avc<diff) diff=avc;
    if (avd<diff) diff=avd;
    if (ave<diff) diff=ave;

    cout<< "Srednia= " << av << endl;

    if (diff==ava)
    cout<< "Najblizsza= " << a << endl;

    if (diff==avb)
    cout<< "Najblizsza= " << b << endl;

    if (diff==avc)
    cout<< "Najblizsza= " << c << endl;

    if (diff==avd)
    cout<< "Najblizsza= " << d << endl;

    if (diff==ave)
    cout<< "Najblizsza= " << e << endl;

    return 0;
}

Witam, w jaki sposób dodać w powyższym kodzie możliwość wyświetlania dwóch innych liczb tak samo bliskich średniej, przy jednoczesnym uniknięciu powtarzania się tej samej liczby?

Czyli np. mam liczby: 

1) 3 3 3 1 5 (średnia- 3, najbliżej-wszystkie trójki, lecz chcę wyświetlić liczbę 3 tylko raz)

2) 3.5   6.5   0   15   0 (średnia- 5, najbliżej- 3.5 oraz 6.5, chcę wyświetlić obie te liczby)

Pozdrawiam.

2 odpowiedzi

+1 głos
odpowiedź 12 sierpnia 2015 przez Szykem2 Nałogowiec (29,510 p.)
wybrane 12 sierpnia 2015 przez Adam Jakś
 
Najlepsza
Po pierwsze zrobiłym funkcję, która znajduje najbliższą liczbę zamiast tylu if'ów i starałbym się raczj porównać moduły różnic tych liczb i średniej, w sensie, że dla najmniejszego modułu mamy liczbę najbliższą. Ale jeśli chcesz ten twój sposób to tylko dodaj else przed każdym if'em poza pierwszym i zadziała( jeśli algorytm jest poprawny).

Edit: mówię tu o ostatnich pięciu if
komentarz 12 sierpnia 2015 przez Szykem2 Nałogowiec (29,510 p.)
Mój błąd nie doczytałem pytania podpunkt b: ja bym w jakieś tablicy tymczasowej storował te liczby i w tych ostatnich pięciu if tylko je tam wkładał i sprawdzał czy już się wcześniej nie powtórzyły.
0 głosów
odpowiedź 12 sierpnia 2015 przez Dragonet.17 Pasjonat (19,630 p.)
Użyj tablic i funkcji, która zastąpi ten nadmiar if'ów :D
Musisz pomyśleć jak rozwiązać kwestię porównywania dodatniej i ujemnej różnicy :) wtedy już będzie z górki

Podobne pytania

0 głosów
1 odpowiedź 543 wizyt
pytanie zadane 18 marca 2016 w C i C++ przez emilime Nowicjusz (220 p.)
0 głosów
2 odpowiedzi 850 wizyt
0 głosów
2 odpowiedzi 1,452 wizyt
pytanie zadane 9 października 2015 w C i C++ przez parimple Początkujący (260 p.)

93,664 zapytań

142,580 odpowiedzi

323,121 komentarzy

63,189 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...