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

wynik = inf ?

Cloud VPS
0 głosów
764 wizyt
pytanie zadane 27 stycznia 2019 w C i C++ przez Magmardo Początkujący (310 p.)

Witam,

mam problem z programem, otóż wynik nie wychodzi taki jaki powinien, zamiast prawidłowego wyniku wychodzi "srednia = inf ", gdzie popełniłem błąd?

 

#include <iostream>

int main ()
{
    float tablica [10][10];
    float suma = 0;
    float srednia [10];

    for (int i = 0; i < 10; i++)
    {
        std::cout<<"Wiersz " << (i + 1) << ".\n";
        for (int j = 0; j < 10; j++)
        {
            std::cin>>tablica[i][j];
            suma += tablica[i][j];
            srednia[i] += suma / j;
            if(tablica[i][j]==0) break;
        }
    }

    for (int k = 0; k < 10; k++)
    {
        std::cout<<"Srednia " << k << ". : "<<srednia [k];
        std::cout<<"\n";
    }

    return 0;
}

 

1 odpowiedź

+2 głosów
odpowiedź 27 stycznia 2019 przez Arkadiusz Sikorski Pasjonat (20,160 p.)
wybrane 30 stycznia 2019 przez Magmardo
 
Najlepsza
srednia[i] += suma / j;

to tutaj następuje dzielenie przez 0 dla j = 0, co skutkuje wynikiem +inf.
 

Ponadto, jeśli rozumiem, chcesz obliczyć 10 średnich z 10 elementów każda, ale nie zerujesz zmiennej suma, bo obliczeniu i-tej średniej. Jest tu trochę błędów, które można by rozwiązać, pod warunkiem, że powiesz co dokładnie program ma robić :)

komentarz 27 stycznia 2019 przez Magmardo Początkujący (310 p.)
Użytkownik wprowadza 10 liczb całkowitych, do czasu kiedy nie będzie pustej linii(ja użyłem do tego funkcji break i po wcisnieciu 0 przechodzi do kolejnego wiersza)  lub dojdzie do 10-tej to wtedy program wyświetla średnią z każdego wiersza no i później będę musiał użyć sortowania aby pominąć te wiersze dla których średnia wychodzi ujemna, ale z tym to raczej już sam sobie poradzę.

Tak wygłada treść ćwiczenia: "Dane wczytywane są w formie linii zawierających liczby całkowite. Ilość liczb w linii może wahać się od 1 do 10 (nie jest z góry określona ale zakłada się, że po ostatniej liczbie w linii nie ma już żadnych znaków). Linia pusta kończy wczytywanie danych. Należy wyświetlić zawartość linii danych uporządkowaną w/g średniej wartości liczb w linii z pominięciem tych linii, dla których średnia ma wartość ujemną. Sposób sortowania - dowolny."
komentarz 29 stycznia 2019 przez Arkadiusz Sikorski Pasjonat (20,160 p.)

Ja bym spróbował wczytać 10 razy linię przy użyciu std::getline, a następnie użył std::stringstream (obiekt klasy stringstream to taki obiekt jak std::cin, tylko że sami "podajemy" mu dane, to trochę tak, jakbyśmy mogli ustawić, co pojawi się w std::cin), by "wyjąć" z wczytanej linii odpowiednią ilość liczb całkowitych do wyliczenia średniej. Z braku czasu podaję pseudokod:
 

float srednie[10];
std::string linie[10];

dla i=0..9:
	std::string linia;
	std::getline(std::cin, linia);
	std::stringstream linia_strumien(linia);
	int x;
	int suma = 0;
	int ile_w_linii = 0;
	while(linia_strumien >> x) // czyli dopóki możemy 'wyjąć' inta z naszej wczytanej linii
		suma += x;	
		ile_w_linii++;

	float srednia = suma / ile_w_linii;
	srednie[i] = srednia;
	linie[i] = linia;
	
// sortowanie i cała reszta

Oczywiście to tylko zarys, może da się to zrobić prościej, ale mi akurat coś takiego przyszło do głowy (tak czy siak polecam zapoznać się ze strumieniami, są przydatne).

komentarz 30 stycznia 2019 przez Magmardo Początkujący (310 p.)

Dzięki za pomoc, ale jednak wolałbym zostać przy swojej metodzie z pętlą for. Usunąłem zero z sumy oraz j i program nawet nie daje wpisać użytkownikowi danych, ukazując to:

Obrazek

komentarz 7 lutego 2019 przez Magmardo Początkujący (310 p.)
Ktoś jest w stanie mi pomóc?

Podobne pytania

0 głosów
0 odpowiedzi 184 wizyt
pytanie zadane 30 marca 2020 w C i C++ przez Daaa22 Dyskutant (8,250 p.)
0 głosów
1 odpowiedź 997 wizyt
0 głosów
1 odpowiedź 194 wizyt
pytanie zadane 22 maja 2017 w JavaScript przez jaco Początkujący (290 p.)

93,469 zapytań

142,404 odpowiedzi

322,715 komentarzy

62,852 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
...