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

Język C++ szkoła programowania - problem z zadaniem 2 z rozdziału 6.

Object Storage Arubacloud
0 głosów
301 wizyt
pytanie zadane 17 maja 2018 w C i C++ przez Junior_plusplus Obywatel (1,130 p.)

Treść Zadania 2 z rozdziału 6

Napisz program odczytujący do 10 datków do tablicy wartości double. Program ma kończyć wczytywanie danych po podaniu wartości nieliczbowej . Na koniec program ma pokazać średnią liczb oraz podać te wartości z tablicy, które od tej średniej są większe.

Witam, mam problem w trakcie wykonywania programu, który polega na tym, że oprócz wskazania wartości wyższych od średniej pojawiają się dodatkowe liczby niewiadomego pochodzenia.

W związku z powyższym bardzo proszę o:

- pomoc/wskazówkę  w rozwiązaniu problemu,

- pomoc/wskazówkę jak skonstruować kod, aby zdanie: "Datki większe od średniej to: " wraz z takimi wartościami wyświetlało się tylko w przypadku gdy rzeczywiście takie wartości będą,

- ogólną ocenę kodu (wskazanie np. co można poprawić/ulepszyć).

Z góry dziękuję za pomoc.

Poniżej kod:

#include <iostream>

using namespace std;

const int ArSize = 10;
int main()
{
    double datki[ArSize];
    double suma = 0.0;
    double srednia = 0.0;
    int i=0;

    cout << "Prosze podaj wysokosc wplaconych datkow";
    cout << " (max. ilosc danych to 10): " << endl;

    for (i = 0; i < ArSize; i++)
    {
        cout << " Datek numer "<<i+1<<": ";
        cin >>datki[i];
        suma += datki[i];
        srednia = suma/i;
        if(!(datki[i]))
        break;
    }


    cout << "\nSrednia datkow to: "<<srednia<<endl;

    cout << "Datki wieksze od sredniej to: ";
    for(int i = 0; i<ArSize; i++)
    {
        if(datki[i]>srednia)
        cout <<datki[i]<<"\t";
    }

    cout <<endl;
    return 0;
}

 

 

1 odpowiedź

+1 głos
odpowiedź 17 maja 2018 przez j23 Mędrzec (194,920 p.)
wybrane 17 maja 2018 przez Junior_plusplus
 
Najlepsza

Program ma kończyć wczytywanie danych po podaniu wartości nieliczbowej .

Ja to rozumiem tak, że maksymalna liczba datków będzie 10, ale może być mniej. Zatem nie możesz zakładać w pętli z linii 30, że zawsze będzie ArSize datków.

 

Pętlę czytającą zrobiłbym tak:

for (i = 0; i < ArSize && cin >> datki[i]; ++i)
{
	suma += datki[i];
}

// tu `i` zawiera ilość datków.

 

PS. po co liczysz średnią w pętli, jeśli możesz zrobić to po tym, jak przeczytasz wszystkie datki i obliczysz sumę?

komentarz 17 maja 2018 przez Junior_plusplus Obywatel (1,130 p.)

Dziękuję bardzo za odpowiedź.

Po wprowadzeniu zmian udało się prawidłowo wyświetlać dane większe od średniej z tym, że pojawił się problem z numeracją datków ponieważ chciałem je po kolei numerować ale chyba w tym przypadku będzie to niemożliwe?

Czy masz może jakiś pomysł na to jaki warunek wprowadzić, aby zdanie: "Datki większe od średniej to: " wraz z takimi wartościami wyświetlało się tylko w przypadku gdy rzeczywiście takie większe wartości będą.

#include <iostream>

using namespace std;

const int ArSize = 10;
int main()
{
    double datki[ArSize];
    double suma = 0.0;
    double srednia = 0.0;
    int i=0;

    cout << "Prosze podaj wysokosc wplaconych datkow";
    cout << " (max. ilosc danych to 10): " << endl;

    cout << "Datek numer 1: ";
    for (i = 0; i < ArSize && cin >> datki[i]; ++i)
    {
        cout << "Datek numer "<<i+1<<": ";
        suma += datki[i];

        if(!(datki[i]))
        break;
    }


    srednia = suma/i;
    cout << "\nSrednia datkow to: "<<srednia<<endl;

    cout << "Datki wieksze od sredniej to: ";
    for(int j = 0; j<i; j++)
    {
        if(datki[j]>srednia)
        cout <<datki[j]<<"\t";
    }



    cout <<endl;
    return 0;
}

 

komentarz 17 maja 2018 przez Junior_plusplus Obywatel (1,130 p.)
edycja 17 maja 2018 przez Junior_plusplus

Wszystkie problemy rozwiązane.

Bardzo dziękuję za cenne wskazówki i szybką pomoc.

Poniżej aktualny kod:

 

#include <iostream>

using namespace std;

const int ArSize = 10;
int main()
{
    double datki[ArSize];
    double suma = 0.0;
    double srednia = 0.0;
    int i=0;

    cout << "Prosze podaj wysokosc wplaconych datkow";
    cout << " (max. ilosc danych to 10): " << endl;

    cout << "Datek numer 1: ";
    for (i = 0; i < ArSize && cin >> datki[i]; ++i)
    {
        cout << "Datek numer "<<i+2<<": ";
        suma += datki[i];
        if(!(datki[i]))
        break;
    }


    srednia = suma/i;
    cout << "\nSrednia datkow to: "<<srednia<<endl;


    for(int j = 0; j<i; j++)
    {
        if(datki[j]>srednia)
        {
                 cout << "Datki wieksze od sredniej to: ";
                 cout <<datki[j]<<"\t";
        }

    }

    cout <<endl;
    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 369 wizyt
0 głosów
1 odpowiedź 1,811 wizyt

92,556 zapytań

141,404 odpowiedzi

319,562 komentarzy

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

...