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

Dlaczego program nie działa gdy liczbą najbliższą nie jest liczba całkowita?

Object Storage Arubacloud
0 głosów
179 wizyt
pytanie zadane 20 października 2015 w C i C++ przez Malina Nowicjusz (120 p.)

Program ma za zadanie znaleźć liczbę najbliższą średniej z 5-ciu podanych i podaj średnią oraz tą liczbę. Po podaniu liczb 6.5  3.5  0  15  0 jako wynik podaje 0, a powinien podać 3.5 lub 6.5. Wielokrotnie analizowałem kod i nie mogę znaleźć błędu. Byłbym wdzięczny gdyby ktoś pomógł mi go odnaleźć. Wadą tego programu jest też to, że gdyby warunek spełniały dwie liczby to zostanie wypisana tylko jedna z nich, tego problemu również nie mogę rozwiązać. 

#include <iostream>
using namespace std;
float a,b,c,d,e,m1,m2,m3,m4,m5,m,s;
int main()
{
    cout << "Podaj piec liczb oddzielonych spacja" <<endl;
    cin>>a>>b>>c>>d>>e;
    s=(a+b+c+d+e)/5;

    m1=a-s;
    if(m1<0)m1=-m1;
    m2=b-s;
    if(m2<0)m2=-m2;
    m3=c-s;
    if(m3<m3)m3=-m3;
    m4=d-s;
    if(m4<0)m4=-m4;
    m5=e-s;
    if(m5<0)m5=-m5;

    m=m1;
    if(m2<m)m=m2;
    if(m3<m)m=m3;
    if(m4<m)m=m4;
    if(m5<m)m=m5;

    if(m==m1)m=a;
    if(m==m2)m=b;
    if(m==m3)m=c;
    if(m==m4)m=d;
    if(m==m5)m=e;

    cout<<"Srednia wynosi: "<<s<<" , a liczba jej najblizsza: "<<m<<endl;
    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 20 października 2015 przez ZakosiliMiNeta Nałogowiec (30,870 p.)

Moim zdaniem ta masa ifów nie ma sensu. Podam troszkę łatwiejszą opcję. Wszystkie te liczby co chcerz podać wrzuć do tablicy i wczytaj. Oblicz średnią ( ok masz gites ). Następnie zadeklaruj sobie zmienną pomocniczą ( float ) oraz flot na trzymanie liczby najbliżej średniej. Odpalasz pętlę  ( tyle ile jest liczb ) i obliczasz | śr - tab[i] | <- wartość bezwzględna,a następnie sprawdzasz  czy ta wartość bezwzględna jest mniejsza od zmiennej pomocniczej i ustawiasz liczbę najbliższą.

Kawałek kodu do zrozumienia zamysłu


  2 
  3 int main (){
  4    float tab[5];
  5    float sr, pm = 1000.0, naj = -1.0 ; // sr - srednia   pm -  zmienna pomocnicza   naj - liczba najblizsza sredniej
  6    wczytujesz te liczby
  7    sr = ...
  8 
  9    for ( int i = 0; i < 5; i++ ){
 10       float pm2 = | sr - tab[i] |
 11       if ( pm < pm2 ){ pm = pm2 naj=tab[i];
 12    }
 13 
 14 
 15 }

 

komentarz 20 października 2015 przez Malina Nowicjusz (120 p.)
Wielkie dzięki, wygląda to teraz dużo lepiej i co najważniejsze działa. Masz jeszcze może jakiś pomysł jak zrobić, żeby wypisać dwie liczby najbliższe? Np gdy podamy liczby 4  6  15  0  0  to 4 i 6 są tak samo odległe od średniej równej 5, a wyświetlona zostanie tylko jedna z nich.
komentarz 21 października 2015 przez ZakosiliMiNeta Nałogowiec (30,870 p.)

Trzymaj druga zmienną naj2

if ( pm < pm2 ){ pm = pm2; naj2 =naj; naj=tab[i]; }

 

Podobne pytania

0 głosów
1 odpowiedź 1,011 wizyt
+1 głos
1 odpowiedź 613 wizyt
pytanie zadane 18 października 2020 w C i C++ przez Wolv63 Użytkownik (630 p.)
0 głosów
2 odpowiedzi 1,163 wizyt

92,596 zapytań

141,446 odpowiedzi

319,720 komentarzy

61,980 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!

...