• 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
750 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,570 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,570 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 1,269 wizyt
0 głosów
1 odpowiedź 492 wizyt

93,439 zapytań

142,431 odpowiedzi

322,674 komentarzy

62,802 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

...