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

wynik = inf ?

Object Storage Arubacloud
0 głosów
537 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 114 wizyt
pytanie zadane 30 marca 2020 w C i C++ przez Daaa22 Dyskutant (8,250 p.)
0 głosów
1 odpowiedź 786 wizyt
0 głosów
1 odpowiedź 159 wizyt
pytanie zadane 22 maja 2017 w JavaScript przez jaco Początkujący (290 p.)

92,555 zapytań

141,402 odpowiedzi

319,540 komentarzy

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

...