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

Liczby większe od średniej

0 głosów
1,435 wizyt
pytanie zadane 2 maja 2018 w C i C++ przez XSPACE Użytkownik (690 p.)

Witam od niedawna próbuję coraz częściej sił w c++ i zacząłem wykonywać zadanie w którym było trzeba podać 10 wartości typu double, a program na tej podstawie ma obliczyć średnią podanych liczb oraz wartości większe od średniej. Problem jest w tym że szukanie liczby większej od średniej działa niepoprawnie i niestety nie wiem jak to naprawić.

 

#include <iostream>

using namespace std;

int main()
{
    const int Max = 10;
    double gift[Max], suma = 0, naj[Max];
    int licznik = 0, ile = 0;
    float srednia;

    cout<< "Ile chcesz wplacic, podaj 10 wartosci: \n";
        for (int i = 1; i < 11; i++ ){
            while (!(cin>> gift[i]))
                cin.clear();
            while (cin.get() != '\n')
                continue;

            suma++;
             licznik+=gift[i];
            cout<< "Proszę podać "<< i + 1<< " wartosc: ";
            srednia = licznik / suma;
        }

        for (int j = 0; j < Max; j++){
            if (srednia < gift[j])
                ile++;
                naj[j] = gift[j];

        }


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

        for (int k = 0; k < ile; k++)
        cout<<endl<< "Liczba wyzsza niz srednia to "<<naj[k];

    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 2 maja 2018 przez niezalogowany
wybrane 2 maja 2018 przez XSPACE
 
Najlepsza

Podczas wczytywania wartości do tablicy wychodzisz poza jej zakres (gift[10] jest poza tablicą). Liczenie średniej było niepoprawne. Podczas kopiowania wartości większych od średnich do nowej tablicy powinieneś użyć zmiennej ile, a nie j. Poprawiłem też kilka innych rzeczy:

#include <iostream>
#include <limits>

int main() {
	const int max = 10;
	double gifts[max], sum = 0;
	std::cout << "Ile chcesz wplacic, podaj 10 wartosci: \n";
	for (int i = 0; i < max; i++) {
		std::cout << "Proszę podać " << i + 1 << " wartosc: ";
		while (!(std::cin >> gifts[i])) {
			std::cin.clear();
			std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
			std::cout << "UPS podales zlom wartosc nieliczbowom. Sprobuj jeszcze raz: ";
		}
		sum += gifts[i];
	}
	// obliczanie sredniej dopiero po zakonczeniu petli:
	double average = sum / max; // jak double to trzymajmy sie go do konca

	int greater_size = 0;
	double greater_than_avg[max];
	for (int j = 0; j < max; j++) {
		if (average < gifts[j]) {
			greater_than_avg[greater_size] = gifts[j]; /* osobny iterator 
				dla drugiej tablicy, bo wartosci chcesz 
				miec od 0 do greater_size, a nie rozlozone jak 
				w pierwszej tablicy
			*/
			greater_size++;
		}
	}

	std::cout << "\n\nSrednia wynosi: " << average << std::endl;

	for (int k = 0; k < greater_size; k++) {
		std::cout << "\nLiczba wyzsza niz srednia to " << greater_than_avg[k];
	}
}

Podobne pytania

0 głosów
3 odpowiedzi 383 wizyt
pytanie zadane 24 października 2018 w C i C++ przez KmNwK Nowicjusz (210 p.)
0 głosów
1 odpowiedź 302 wizyt
pytanie zadane 5 grudnia 2018 w C i C++ przez Cevet Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 2,561 wizyt
pytanie zadane 4 listopada 2017 w C i C++ przez mn130496 Gaduła (3,640 p.)

93,735 zapytań

142,671 odpowiedzi

323,294 komentarzy

63,297 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...