• 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.

Cloud VPS
0 głosów
420 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 (195,240 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ź 561 wizyt
0 głosów
1 odpowiedź 2,169 wizyt

93,467 zapytań

142,460 odpowiedzi

322,735 komentarzy

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

Kursy INF.02 i INF.03
...