• 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

VPS Starter Arubacloud
0 głosów
1,636 wizyt
pytanie zadane 11 października 2018 w C i C++ przez Vitall Początkujący (400 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 2018 przez Aisekai Nałogowiec (42,190 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 2018 przez areklipno Stary wyjadacz (11,930 p.)

@Vitall,
 musiałbyś zrobić

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

 

komentarz 11 października 2018 przez Vitall Początkujący (400 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 2018 przez Aisekai Nałogowiec (42,190 p.)
edycja 11 października 2018 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 2018 przez Vitall Początkujący (400 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 2018 przez kejm_ Bywalec (2,310 p.)
edycja 11 października 2018 przez kejm_

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 2018 przez TakIoKoder Bywalec (2,560 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 2018 przez Vitall Początkujący (400 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 2018 przez TakIoKoder Bywalec (2,560 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 2018 przez C.J Obywatel (1,370 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ź 418 wizyt
pytanie zadane 26 kwietnia 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
1 odpowiedź 570 wizyt
pytanie zadane 16 maja 2018 w PHP przez intoksynator Gaduła (3,450 p.)
0 głosów
2 odpowiedzi 429 wizyt
pytanie zadane 1 kwietnia 2020 w C i C++ przez Atman Użytkownik (810 p.)

93,018 zapytań

141,984 odpowiedzi

321,282 komentarzy

62,364 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...