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

C++ powtarzanie się tej samej liczby.[Kurs C++ odc.11]

Object Storage Arubacloud
0 głosów
654 wizyt
pytanie zadane 9 czerwca 2017 w C i C++ przez Moras Obywatel (1,620 p.)

Skończyłem oglądać 11 odcinek kursu C++ i wziąłem się robienie zadania domowego z tego odcinka. Zadanie polegało na tym by program obliczył średnią z podanych liczb, a następnie wskazał liczby z tych podanych, które są najbliższe średniej. Myślę, że zrobiłem to zadanie poprawnie, lecz mam jeden problem. Gdy podaje liczby: 3, 5, 3, 1, 3 to program wyświetla "Liczba(y) najblizsze sredniej to: 3 3 3 ". Wiem dlaczego się tak dzieje, ale chciałbym by program tylko raz wyświetlił liczbę 3. Proszę o pomoc, niżej wstawiam kod.

#include <iostream>
#include <cmath>

using namespace std;

int main()
{

    cout<<"Podaj z ilu liczb bedziesz liczyl srednia ";
    int ile;
    cin>>ile;

    float *liczba;
    liczba=new float[ile];

    cout<<endl;

    for(int i=0; i<ile; i++)
    {
        cout<<"Wprowadz "<<i+1<<" liczbe: ";
        cin>>liczba[i];
    }


    float suma=0;
    for(int i=0; i<ile; i++)
    {
        suma=suma+liczba[i];
    }


    float srednia=suma/ile;

    cout<<endl<<"Srednia wynosi: "<<srednia<<endl;


    float najmroznica=fabs(srednia-liczba[0]);

    for(int i=0; i<ile; i++)
    {
        if(fabs(srednia-liczba[i])<najmroznica)
        {
            najmroznica=fabs(srednia-liczba[i]);
        }
    }

    cout<<endl<<"Liczba(y) najblizsze sredniej to: ";

    for(int i=0; i<ile; i++)
    {
        if(fabs(srednia-liczba[i])==najmroznica)
        {
          cout<<liczba[i]<<" ";
        }
    }
    delete [] liczba;


    return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 10 czerwca 2017 przez OfftheCode Gaduła (4,050 p.)
Hmmm pewnie można to by było lepiej zrobić, ale możesz stworzyć flagę która po wypisaniu pierwszej liczby zmienia wartość i przy tej zmienionej nie dopuszcza kolejnych wyświetleń.
komentarz 10 czerwca 2017 przez Moras Obywatel (1,620 p.)

A co w sytuacji gdy będą dwie lub więcej liczb, które są najbliżej średniej? np. po podaniu tego zestawu liczb program powinien wyświetlić 6.5 i 3.5.

  • 6.5
  • 3.5
  • 0
  • 15
  • 0
0 głosów
odpowiedź 10 czerwca 2017 przez niezalogowany

Zapisuj do zmiennej położenie liczby najbliższej średniej (albo samą liczbę). Zaoszczędzisz sobie ponownego szukania rozwiązania pętlą:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{

    cout<<"Podaj z ilu liczb bedziesz liczyl srednia ";
    int ile;
    cin>>ile;

    float *liczba;
    liczba=new float[ile];

    cout<<endl;

    for(int i=0; i<ile; i++)
    {
        cout<<"Wprowadz "<<i+1<<" liczbe: ";
        cin>>liczba[i];
    }


    float suma=0;
    for(int i=0; i<ile; i++)
    {
        suma=suma+liczba[i];
    }


    float srednia=suma/ile;

    cout<<endl<<"Srednia wynosi: "<<srednia<<endl;


    float najmroznica=fabs(srednia-liczba[0]);
    int gdzie_najmniejsza_roznica = 0;

    for(int i=0; i<ile; i++)
    {
        if(fabs(srednia-liczba[i])<najmroznica)
        {
            najmroznica=fabs(srednia-liczba[i]);
            gdzie_najmniejsza_roznica = i;
        }
    }

    cout<<endl<<"Liczba(y) najblizsze sredniej to: "<<liczba[gdzie_najmniejsza_roznica]<<endl;


    delete [] liczba;


    return 0;
}

 

komentarz 10 czerwca 2017 przez Moras Obywatel (1,620 p.)

Fajne rozwiązanie, nie wpadłem na to, ale niestety nie zawsze program działa poprawnie :(

Gdy poda się liczby:

  • 6.5
  • 3.5
  • 0
  • 15
  • 0

Program powinien podać dwie liczby 6.5 i 3.5, a podaje tylko jedną.

 

komentarz 10 czerwca 2017 przez OfftheCode Gaduła (4,050 p.)
Hmmm to może niech flaga blokuje wypisanie jedynie wartości jaka już została wtedy dla większej ilości takich blokad trzeba by bylo opracować coś lepszego
komentarz 10 czerwca 2017 przez niezalogowany
#include <iostream>
#include <cmath>

using namespace std;

int main()
{

    cout<<"Podaj z ilu liczb bedziesz liczyl srednia ";
    int ile;
    cin>>ile;

    float *liczba;
    liczba=new float[ile];

    cout<<endl;

    for(int i=0; i<ile; i++)
    {
        cout<<"Wprowadz "<<i+1<<" liczbe: ";
        cin>>liczba[i];
    }


    float suma=0;
    for(int i=0; i<ile; i++)
    {
        suma=suma+liczba[i];
    }


    float srednia=suma/ile;

    cout<<endl<<"Srednia wynosi: "<<srednia<<endl;


    float najmroznica=fabs(srednia-liczba[0]);

    for(int i=0; i<ile; i++)
    {
        if(fabs(srednia-liczba[i])<najmroznica)
        {
            najmroznica=fabs(srednia-liczba[i]);
        }
    }

    cout<<endl<<"Liczba(y) najblizsze sredniej to: ";

    for(int i=0; i<ile; i++)
    {
        if(fabs(srednia-liczba[i])==najmroznica)
        {
            bool czy_byla = 0;

            for(int j=0; j<i; j++) // od 0 do aktualnej liczby
            {
                if( liczba[j] == liczba[i] )
                {
                    czy_byla = true;
                    break;
                }
            }

            if( !czy_byla )
            cout<<liczba[i]<<" ";
        }
    }
    delete [] liczba;


    return 0;
}

 

Podobne pytania

+1 głos
2 odpowiedzi 224 wizyt
0 głosów
3 odpowiedzi 242 wizyt
pytanie zadane 8 lipca 2017 w C i C++ przez Kacper Paluch Nowicjusz (150 p.)
0 głosów
1 odpowiedź 144 wizyt
pytanie zadane 21 listopada 2017 w C i C++ przez Malkow Początkujący (330 p.)

92,568 zapytań

141,422 odpowiedzi

319,641 komentarzy

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

...