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

Jak zrozumieć pętlę while z warunkiem true

0 głosów
148 wizyt
pytanie zadane 11 października w C i C++ przez Vitall Początkujący (330 p.)

Cześć,

mam zadanie nastepującej treści:
"Napisać program pobierający liczby całkowite od użytkownika do momentu pobrania zera i wypisujący największą z pobranych liczb (końcowe zero nie jest brane pod uwagę)".

Do tego zadania jest zamieszczone rozwiązanie:

#include<iostream>
#include<limits>
using namespace std;

int main()
{
	int a, max;
	bool czy_byly_liczby;
	czy_byly_liczby = false;
	max = numeric_limits<int>::min();
	// cout << max;
	while(true)
	{
		cout << "podaj liczbe: " ;
		cin >> a;
		if (a == 0)
			break;
		czy_byly_liczby = true;
		if (a > max)
			max = a;
	}
	if(czy_byly_liczby == true)
		cout << "najwieksza liczba, to:  " << max << endl;
	else
		cout << "nie bylo liczb, nie ma najwiekszej";
	
	
	return 0;
}

Czy ktoś z Was mógłby wytłumaczyć mi jakim cudem działa na starcie pętla while, skoro zmienna czy_byly_liczby ustawiona jest na false, a pętla while działa tylko dla jej wartości true?

komentarz 11 października przez Aisekai Nałogowiec (29,050 p.)
A czy używasz tej zmiennej do sterowania pętlą? Bo ja widzę, że masz tam zwykłe while(true) - dziwne byłoby jakby pętla się nie wykonywała
komentarz 11 października przez areklipno Obywatel (1,300 p.)

@Vitall,
 musiałbyś zrobić

while (czy_byly_liczby)
{
.......
}

 

komentarz 11 października przez Vitall Początkujący (330 p.)
No właśnie ja tego nie rozumiem.

Mamy pętlę:
while(warunek){instrukcje;}

Jak warunek jest prawdziwy, to wykonujemy instrukcje, jak jest fałszywy, to nie wykonujemy instrukcji. Ale mowa cały czas o jakimś warunku.

A tutaj jest:
while(true){instrukcje;}

Jest tylko "true", gdzie jest warunek, albo jaki on jest, że ma wartość true?
2
komentarz 11 października przez Aisekai Nałogowiec (29,050 p.)
edycja 11 października przez Aisekai
Inaczej. Pętla while, wykonuje się gdy warunek jest spełniony. Co oznacza, że warunek jest spełniony? Oznacza, że warunek jest prawdziwy. Czyli pętla while ma postać: while(warunek==true), tylko nie jest wymagane pisanie tego true. Jaki masz warunek u Ciebie? Wartosc warunku u Ciebie masz true. Więc, wygląda to mniej więcej while(true==true).
komentarz 11 października przez Vitall Początkujący (330 p.)

 

OK, czyli podsumowując, napis:
 

while (true)
{
      instrukcje;
}

Oznacza, że ja nie podaję żadnej zmiennej do sterowania pętli while, bo i tak sprawdzałaby ona wartość logiczną tejże zmiennej, tylko po prostu podaję wartość logiczną "true". Efektem tego jest fakt, że pętla while będzie działać na starcie zawsze, bo ma "true" - dalsze jej działanie zależy już od instrukcji, które "powiedzą" dla kompa, kiedy ma z niej wyjść (ją wyłączyć). No chyba już kumam, dzięki Wszystkim za odpowiedzi :)

3 odpowiedzi

+1 głos
odpowiedź 11 października przez Kamil Błaszczyk Użytkownik (800 p.)
edycja 11 października przez Kamil Błaszczyk

Siedzę w Java, ale jak na moje oko to:

Pętla While  ze zmienną {czy_byly_liczby} ma tyle wspólnego, że jeśli są liczby nastawia true. Nie ma wpływu na jej początkowe działanie, to true w nawiasie NIE WPŁYWA na {czy_byly_liczby}

{czy_byly_liczby} ma wpływ na instrukcję if, jest jej argumentem przypisanym na true (wartość początkową można zmieniać to nic nie znaczy praktycznie.

Jeśli jednak żaden z if sprawdzających nie zmieni {czy_byly_liczby} na true, zostaje on falsem (zadeklarowanym na początku) czyli program drukuje końcowego else i kończy działanie.

Mam nadzieję, że pomogłem rozjaśnić temat. Miłego dnia!

0 głosów
odpowiedź 11 października przez TakIoKoder Bywalec (2,580 p.)
Przeciez nie masz wpisane while(czy_byly_liczby) tylko while(true)

Zmienna czy_byly_liczby w tym przypadku nie służy do sterowania pętlą tylko przechowywania informacji czy user oprocz 0 wpisał jeszcze jakąś liczbę.
komentarz 11 października przez Vitall Początkujący (330 p.)
Czyli jak mam while(true){instrukcje;}, to mówię dla kompa, że ma tak, czy siak wykonać pętlę while, bo "true"?

Rozumiem, że jak steruję pętlą za pomocą zmiennej, to wtedy od jej wartości logicznej true/false zależy wykonanie lub nie- pętli. Ale z czymś takim pierwszy raz się spotykam (a dopiero zaczynam zabawę z C++).

For, do..while i inne też tak działają, że ustawię sobie "true" i będzie chodzić?
komentarz 11 października przez TakIoKoder Bywalec (2,580 p.)
Tak, to jest wlasnie ta wartosc logiczna. W tym przypadku bedzie to caly czas true.

https://en.wikipedia.org/wiki/Infinite_loop
0 głosów
odpowiedź 13 października przez C.J Obywatel (1,330 p.)
Na początek to powinieneś podstawić jakąś liczbę pod max, (np 0 lub jaką ujemną liczbę) bo zmienną a porównujesz do niczego i wtedy program wariuje. Do zmiennej a też podstaw cokolwiek oprócz 0. (ze względów bezpieczeństwa, żeby przez przypadek nie pominęło wykonania pętli)

Pętla powinna wyglądać tak:

while(a!=0){ podanie liczby i porównanie do max}

lub tak:

do{podanie liczby i porównanie do max}while(a!=0);

Podobne pytania

0 głosów
1 odpowiedź 59 wizyt
0 głosów
1 odpowiedź 54 wizyt
pytanie zadane 26 kwietnia w C i C++ przez Hiskiel Pasjonat (17,060 p.)
0 głosów
2 odpowiedzi 136 wizyt
pytanie zadane 24 marca 2016 w C i C++ przez Philip Bywalec (2,340 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

56,369 zapytań

101,067 odpowiedzi

208,200 komentarzy

28,041 pasjonatów

Przeglądających: 313
Pasjonatów: 12 Gości: 301

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...