• 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,452 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ź 323 wizyt
pytanie zadane 26 kwietnia 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
1 odpowiedź 439 wizyt
pytanie zadane 16 maja 2018 w PHP przez intoksynator Gaduła (3,450 p.)
0 głosów
2 odpowiedzi 291 wizyt
pytanie zadane 1 kwietnia 2020 w C i C++ przez Atman Użytkownik (810 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...