• 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
162 wizyt
pytanie zadane 11 października 2018 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 2018 przez Aisekai Nałogowiec (31,450 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 Bywalec (2,220 p.)

@Vitall,
 musiałbyś zrobić

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

 

komentarz 11 października 2018 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 2018 przez Aisekai Nałogowiec (31,450 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 (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 2018 przez Kamil Błaszczyk Obywatel (1,510 p.)
edycja 11 października 2018 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 2018 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 2018 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 2018 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 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ź 61 wizyt
0 głosów
1 odpowiedź 56 wizyt
pytanie zadane 26 kwietnia 2018 w C i C++ przez Hiskiel Pasjonat (18,600 p.)
0 głosów
2 odpowiedzi 140 wizyt
pytanie zadane 24 marca 2016 w C i C++ przez Philip Bywalec (2,340 p.)
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

59,199 zapytań

104,616 odpowiedzi

216,478 komentarzy

31,590 pasjonatów

Przeglądających: 164
Pasjonatów: 0 Gości: 164

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.

...