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

zadanie domowe 11 odcinek liczba najbliżej średniej

Object Storage Arubacloud
0 głosów
504 wizyt
pytanie zadane 3 grudnia 2017 w C i C++ przez szatko Nowicjusz (190 p.)
#include <iostream>
#include <cmath>

using namespace std;

double liczby[5];
double suma=0;
double srednia;
float najblizej;




int main()


{
    cout<<"Podaj 5 liczb"<<endl;
for (int i=0; i<5; i++)
{
    cin>>liczby[i];
    suma+=liczby[i];
    fabs(srednia-liczby[i]);

}

srednia=suma/5;
cout<<"Srednia = "<<srednia<<endl;

najblizej=liczby[0];
    if (fabs(srednia-liczby[1])<fabs(srednia-liczby[0]))
        najblizej=liczby[1];
    if (fabs(srednia-liczby[2])<fabs(srednia-liczby[1]))
        najblizej=liczby[2];
      if (fabs(srednia-liczby[3])<fabs(srednia-liczby[2]))
        najblizej=liczby[3];
        if (fabs(srednia-liczby[4])<fabs(srednia-liczby[3]))
        najblizej=liczby[4];

        cout<<"Najblizej sredniej jest liczba: "<<najblizej<<endl;






    return 0;
}


 

Cześć - testując taki mój program wychodzi błędny wynik na zmiennych 6.5 3.5 0 15 0 - pokazuje oczywiście prawidłową średnią , lecz najbliżej średniej traktuje 0 a nie 3.5 i 6.5  - dlaczego ?  miałem zmiennie na floatach , potem poczytałem że double rozwiązuje sprawę , abs zmieniłem a fabs - już brakuje mi pomysłów
 

2 odpowiedzi

0 głosów
odpowiedź 3 grudnia 2017 przez chucksqll Stary wyjadacz (12,930 p.)

Ponieważ Twoje if'y nie gwarantują tego. Zastanów się nad nimi, czy przypadkiem w warunkach nie powinieneś przyrównywać zmiennej najblizej a nie kolejnych liczb do siebie.

 if (fabs(srednia-liczby[1])<fabs(srednia-liczby[0]))
        najblizej=liczby[1];

zamiast takiego czegoś powinno być:

 if (fabs(srednia-liczby[1])<fabs(najblizej))
        najblizej=liczby[1];

 

komentarz 3 grudnia 2017 przez criss Mędrzec (172,590 p.)

Też nie do końca. Raczej:

if (fabs(srednia-liczby[1])<fabs(srednia - najblizej))
       najblizej=liczby[1];

Btw: @szatko, dla czego to nie jest w pętli? Jakby tych liczb było 100tys., też byś pisał if dla każdej?

komentarz 3 grudnia 2017 przez chucksqll Stary wyjadacz (12,930 p.)
No w sumie racja, nie zwróciłem uwagi.
komentarz 4 grudnia 2017 przez szatko Nowicjusz (190 p.)

No dobra, po przerobieniu tak jak miałem poza pętlą przy zmiennych 6.5 3.5 0 15 0 pokazywało mi tylko jedną najbliższą czyli 3,5 w przypadku wersji chucksql'a a w przypadku Twojej 6.5

Teraz jak to wrzuciłem w pętle to pokazuje mi 0 czyli punkt wyjścia - a już nie mówiąc o tym, że powinno wskazać 6.5 i 3.5.

 

for (int i=0; i<5; i++)
{
    cin>>liczby[i];
    suma+=liczby[i];
    fabs(srednia-liczby[i]);
    najblizej=liczby[0];
    
   if (fabs(srednia-liczby[1])<fabs(srednia - najblizej))
       najblizej=liczby[1];

    if (fabs(srednia-liczby[2])<fabs(srednia - najblizej))
       najblizej=liczby[2];

     if (fabs(srednia-liczby[3])<fabs(srednia - najblizej))
       najblizej=liczby[3];

       if (fabs(srednia-liczby[4])<fabs(srednia - najblizej))
       najblizej=liczby[4];

}

srednia=suma/5;
cout<<"Srednia = "<<srednia<<endl;


        cout<<"Najblizej sredniej jest liczba: "<<najblizej<<endl;

 

komentarz 4 grudnia 2017 przez criss Mędrzec (172,590 p.)
Chcesz wskazać dwie liczby?  Za pomocą jednej zmiennej? To już by podchodziło pod magię.
0 głosów
odpowiedź 15 października 2018 przez marta.kappav Nowicjusz (180 p.)

A moj kod??? Moze ktos  mi powiedziec dlaczego jest zly i nic nie oblicza???? Chcialam zrobic cos prostego bez zadnych fabs i innych bibliotek, ale cos mi nie dziala... Czy nie mozna tego zrobic w prosty sposob bez obliczania wartosci bezwzglednej (abs) itp itd??? Takie tylko teoretyczne pytanie... 

 

#include <iostream>

using namespace std;
//funkcja obliczajaca srednia liczb

float srednia(float i, float j, float k)
{
    return (i+j+k)/3;
}

int main()
{
    float a, b, c, x;

    cout << "Podaj trzy liczby rozdzielone spacja: ";
    cin>>a>>b>>c;



    cout<<"Srednia liczb to: "<<srednia(a, b, c)<<endl;

//roznica sredniej i podanych liczb

    float m, n, o;

    m=srednia(a, b, c)-a; cout<<m<<endl;
    n=srednia(a, b, c)-b; cout<<n<<endl;
    o=srednia(a, b, c)-c; cout<<o<<endl;

    cin>>m>>n>>o;

/*zamiana liczby ujemnej na dodatnia*/

    if(m<0) m=m*(-1); cout<<m<<endl;
    if(n<0) n=n*(-1); cout<<n<<endl;
    if(o<0) o=o*(-1); cout<<o<<endl;

//szukanie najmniejszej liczby ze zmiennich m, n i o (roznic)
    x=m;
    if (n<m) x=n;
    if (o<n) x=o;

    cout<<"Liczba najblizsza sredniej, to: "<<x<<endl;
    return 0;
}

 

 

 

Podobne pytania

0 głosów
2 odpowiedzi 732 wizyt
0 głosów
1 odpowiedź 229 wizyt

92,575 zapytań

141,425 odpowiedzi

319,650 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!

...