Petla while zapisuje najwieksza wartosc.

0

Czesc, byl juz taki temat na forum jednak chyba nie do konca zrozumialem jak to dziala.
Otoz napisalem funkcje:
Zadanie brzmi:

czytuje ciąg liczb całkowitych jednocyfrowych (niekoniecznie dodatnich) aż do
wczytania liczby innej niż jednocyfrowa (pętlą while)>

double Petla_While()
{
	double najwieksza, liczba;
	int licznik = 1;

	cout << "Prosze wprowadzic " << licznik << " liczbe jednocyfrowa (<-9,9>).";
	cin >> liczba;
	najwieksza = liczba;
	licznik++;
	while (true)
	{
		if ((liczba < -10) || (liczba > 10))
		{
			break;
		}
		cout << "Wprowadz kolejna " << licznik << " liczbe.";
		cin >> liczba;
		licznik++;

		if (liczba > najwieksza)
		{
			najwieksza = liczba;
		}
	}
	return najwieksza;
}

Niestety instrukcja warunkowa nie zatrzymuje petli przed zapisaniem największej liczby w wartości największa.
Co robie zle ?

1

Umieść instrukcję warunkową przed zapisaniem największej liczby w wartości największa.

0
kq napisał(a):

Umieść instrukcję warunkową przed zapisaniem największej liczby w wartości największa.

ok dziala dziekuje !

edit:

jendak nie do konca, zapisalem to tak:

double Petla_While()
{
	double najwieksza, liczba;
	int licznik = 1;
	cout << "Prosze wprowadzic liczbe jednocyfrowa (<-9,9>).";
	while (true)
	{
		cout << "Wprowadz liczbe " << licznik << " liczbe.";
		cin >> liczba;		
		if ((liczba < -10) || (liczba > 10))
		{
			break;
		}
		najwieksza = liczba;
		licznik++;
		if (liczba > najwieksza)
		{
			najwieksza = liczba;
		}
	}	

	cout << najwieksza; // Dla wyswietlenia wartosci
	return najwieksza;
}

Problem pojawia sie w momencie gdy na samym poczatku chce wprowadzic wartosc wieksza niz jednocyfrowa. Kompilator sie wysypuje.

0

Zauważ, że przerywasz pętle w momencie gdy wpisana liczba jest < -10 lub > 10 PRZED tym jak inicjalizujesz zmienną najwieksza. Skutkiem tego są "śmieci" wewnątrz zmiennej, którą zwracasz z funkcji. Konkretnie to kompilator pobrał sobie wartość z miejsca przeznaczonego na tą zmienną na stosie. Dodaj inicjalizację zmiennej najwieksza przed albo wewnątrz if'a jako pierwszą instrukcję w jego ciągu instrukcji i będzie wszystko w porządku.

1

Jesli wprowadzana liczba jest zapisywana w double, to Twój if nie zadziała poprawnie przy liczbie zmiennoprzecinkowej znajdującej się w przedziale od -10 do 10.
Np. 2,24 to trzycyfrowa liczba spełniająca ten warunek.

Gdybym chciał to zrobić porządznie (wersja niekonieczna przy początkach nauki programowania), to pewnie pomyślałbym o zapisie inputu do stringa i sprawdził jego długość.

1 użytkowników online, w tym zalogowanych: 0, gości: 1