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

Zadanie z kursu C++ nr 11 Znajdowanie największej liczby

Object Storage Arubacloud
0 głosów
783 wizyt
pytanie zadane 7 grudnia 2015 w C i C++ przez rafix7 Nowicjusz (150 p.)
edycja 7 grudnia 2015 przez rafix7

Witam napisałem program o znajdowaniu  liczby najbliższej do średniej , ale coś jest nie tak. Wydaje mi się, że mój zapis ma logiczny sens i jego niepoprawne działanie wynika z błędu, ktorego nie mogę zauważyć. Proszę o pomoc. Z zadania nr 1 {-55,-44,-33,11,22} wychodzi mi, że liczba 22 jest właściwa, ale jak łatwo można zauważyć nie jest to prawdą. 


#include <iostream>

using namespace std;

float a,b,c,d,e,sr;


int main()
{
    cout << "Podaj 5 liczb oddzielonych spacja" << endl;
    cin>>a>>b>>c>>d>>e;

    sr=(a+b+c+d+e)/5; //-19.8
    cout<<"Srednia tych liczb wynosi: " <<sr<< endl;



         if (((sr-a)<(sr-b)) && ((sr-a)<(sr-c))&& ((sr-a)<(sr-d)) && ((sr-a)<(sr-e)))
        cout<<"Najblizsza liczba do sredniej to: "<< a;
    else if (((sr-b)<(sr-a)) && ((sr-b)<(sr-c))&& ((sr-b)<(sr-d)) && ((sr-b)<(sr-e)))
        cout<<"Najblizsza liczba do sredniej to: "<< b;
    else if (((sr-c)<(sr-a)) && ((sr-c)<(sr-b))&& ((sr-c)<(sr-d)) && ((sr-c)<(sr-e)))
        cout<<"Najblizsza liczba do sredniej to: "<< c;
    else if (((sr-d)<(sr-a)) && ((sr-d)<(sr-b))&& ((sr-d)<(sr-c)) && ((sr-d)<(sr-e)))
        cout<<"Najblizsza liczba do sredniej to: "<< d;
    else if (((sr-e)<(sr-a)) && ((sr-e)<(sr-b))&& ((sr-e)<(sr-d)) && ((sr-e)<(sr-c)))
        cout<<"Najblizsza liczba do sredniej to: "<< e;



    return 0;

}

 

4 odpowiedzi

+1 głos
odpowiedź 7 grudnia 2015 przez Mikrokontroler xD Stary wyjadacz (13,500 p.)
wybrane 7 grudnia 2015 przez rafix7
 
Najlepsza
wiem że to są twoje początki jednak staraj się unikać pisania takiego kodu.

Ja na twoim miejscu obliczyłbym najpierw średnią a później szukał najmniejszej różnicy pomiędzy liczbami
(czyli tak naprawdę ograniczyłbym to do szukania najmniejszej liczby)

Z całym szacunkiem ale ten kod powineneś usunąć.

Pozdrawiam i życzę sukcesów w dalszej nauce :)
komentarz 7 grudnia 2015 przez rafix7 Nowicjusz (150 p.)
edycja 7 grudnia 2015 przez rafix7

Znalazłem funkcje dla wartości bezwględnej i zacząłem szuakać najmniejszej różnicy i zapis jest dla mnie zrozumiały, tylko, że tak na prawdę po dłuższym czasie główkowania zerżnąłem go z komentarzy z pod odcinka co strasznie mnie boli, bo sam nie potrafiłem na to wpaść jak to zapisać ;/  Tu wychodzi mój brak rozumowania i abstrakcyjnego myślenia, ale mimo to nie zamierzam się poddać :D


roznica=fabs(a-srednia);
    if(fabs(b-srednia)<=roznica) najb=b, roznica=fabs(b-srednia);
    if(fabs(c-srednia)<=roznica) najb=c, roznica=fabs(c-srednia);
    if(fabs(d-srednia)<=roznica) najb=d, roznica=fabs(d-srednia);
    if(fabs(e-srednia)<=roznica) najb=e, roznica=fabs(e-srednia);
    cout<<"Liczba najblizej sredniej to: "<< najb;

komentarz 7 grudnia 2015 przez Mikrokontroler xD Stary wyjadacz (13,500 p.)
a po co tobie wartość bezwzględna?
co stoi na przeszkodzie żeby wartość średnia była ujemna?

Najlepiej to sobie poukładać w głowie o co tak naprawdę nam chodzi
Obliczyć średnią? -> dodać wszystkie elementy i podzielić na ich ilość
Mamy średnią? -> porównajmy wszystkie liczby z wartością średnią po czym wybierz najmniejszą
komentarz 7 grudnia 2015 przez pietrzakacper Mądrala (7,480 p.)
Nie średnia ma być nieuejmna a róznica liczby ze średnią. Poniewż chcesz obliczyć która liczba jest najbliżej średniej.
komentarz 7 grudnia 2015 przez Mikrokontroler xD Stary wyjadacz (13,500 p.)
ale ze mnie gapa masz rację :)
+1 głos
odpowiedź 7 grudnia 2015 przez pietrzakacper Mądrala (7,480 p.)

Zauważ, że jak od ujemnej średniej sr (dla wprowadzonych wartości) odejmujesz jakąkolwiek liczbę dodatnią na przykład e to jest t działanie sr( -19.8) -e (22) co daje nam działanie -19.8 - 22 co się równa -41.8. A ten wynik nie pokazuje nam wcale jak blisko tej średniej jest zmienna e. Poczytaj o wartości bezwzględnej.

komentarz 7 grudnia 2015 przez pietrzakacper Mądrala (7,480 p.)
Zauważ także, że -41.8 faktycznie jest najmniejsza ze wszystkich innych różnic dlatego program podaje ci 22 za poprawną odpowiedź.
0 głosów
odpowiedź 7 grudnia 2015 przez criss Mędrzec (172,590 p.)
No nie wiem, jak dla mnie 22 jest największe i wszystko się zgadza :|
komentarz 7 grudnia 2015 przez rafix7 Nowicjusz (150 p.)
Przepraszam. Chodziło mi o liczbę najbliższą średniej.
0 głosów
odpowiedź 8 grudnia 2015 przez Krzysiek Rojowski Obywatel (1,110 p.)
Matko Boska !

1.Nie pisz takich niewyraźnych kodów.Ponieważ jeżeli ten kod byłby większe o kilkanaście linijek zacząłbyś się gubić.

2.Dam ci radę stwórz dodatkową zmienną i zapisz do niej pierwszą zmienną.

2.Następnie sprawdź czy zmienia po niej nie jest większe jeżeli tak przypisz tą zmienną do stworzonej wcześniej  zmiennej przechowującą tą największą liczbe.

Pozdrawiam :)

Podobne pytania

0 głosów
2 odpowiedzi 661 wizyt
0 głosów
2 odpowiedzi 654 wizyt
+1 głos
3 odpowiedzi 599 wizyt

92,578 zapytań

141,427 odpowiedzi

319,653 komentarzy

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

...