Kilka warunków w while
Ostatnio zmodyfikowano 2015-06-14 14:45
Szymon2727 Temat założony przez niniejszego użytkownika |
Kilka warunków w while » 2015-06-13 22:57:57 Tak jak w temacie. Próbowałem np. czegoś takiego: #include <iostream>
bool sprawdzCzyDobrze( int liczba ) { if( liczba < 100 || liczba != 89 ) { return false; } if( liczba != 98 || liczba != 99 ) { return false; } return true; }
int main() { int liczba; bool a; do { std::cin >> liczba; a = sprawdzCzyDobrze( liczba ); } while( a != true ); }
Jednak nie działa. |
|
carlosmay |
» 2015-06-13 23:18:03 Nieważne jakie liczby podasz warunki zawsze będą prawdziwe i if zwróci false, if( liczba < 100 || liczba != 89 )
tutaj warunki wykluczają się, daj && i zadziała w drugim też tak samo. edit: zerknąłem po łebkach. Te ify całkiem się wykluczają. Jeśli nawet jeden nie spełni warunku to drugi tak i zwróci false. Wszystkie waruni daj do jednego ifa if( liczba < 100 && liczba != 89 && liczba != 98 && liczba != 99 ) { return false; }
nie wiem czy taki był zamysł. |
|
Szymon2727 Temat założony przez niniejszego użytkownika |
» 2015-06-13 23:38:15 Przecież ma zwracać fałsz, gdy będzie różne od podanych liczb i pętla ma się wtedy powtarzać. Z kolei jak podamy daną liczbę lub powyżej stu to ta pętla się zakończy. || zwraca wtedy, gdy jeden z warunków został spełniony, a && kiedy oba. |
|
carlosmay |
» 2015-06-14 01:36:00 Zgadza się. Pętla się nie zakończy, ponieważ każda liczba powyżej stu jest różna od 89,98 i 99. Jak sam napisałeś || zwraca wtedy, gdy jeden z warunków został spełniony |
edit: liczba = 50;
if( liczba < 100 || liczba != 89 )
analiza: liczba < 100 = true;
liczba = 105; liczba < 100 = false; liczba != 89 = true;
liczba = 89; liczba != 89 = false; liczba < 100 = true;
Za każdym razem wykonuje się instrukcja pierwszego if() Zwraca ona wartość w miejsce wywołania funkcji i wychodzi z funkcji. Nie dochodzi nawet do drugiego warunku. Musisz to zrozumieć. Masz gotowca funkcji z tym co napisałem wcześniej. bool sprawdzCzyDobrze( int liczba ) { if( liczba < 100 && liczba != 89 && liczba != 98 && liczba != 99 ) { return false; } else { return true; } }
|
|
Szymon2727 Temat założony przez niniejszego użytkownika |
» 2015-06-14 10:28:13 Liczba np. 5 jest różna od wszystkich, ale nie jest większa od stu, więc powinno zwrócić true? |
|
wilkoo13 |
» 2015-06-14 10:56:52 Napisałeś że nie działa. Jak powinno działać? |
|
Szymon2727 Temat założony przez niniejszego użytkownika |
» 2015-06-14 11:18:31 Kiedy liczba wynosi 89, 98, 99 lub jest większa od stu przestaje się pytać o podanie liczby. |
|
carlosmay |
» 2015-06-14 13:08:49 #include <iostream>
bool sprawdzCzyDobrze( int liczba ) { if( liczba < 100 && liczba != 89 && liczba != 98 && liczba != 99 ) { return false; } else { return true; } }
int main() { int liczba; bool a; do { std::cin >> liczba; a = sprawdzCzyDobrze( liczba ); } while( a != true ); return 0; }
To jest twój program z poprawkami. Działa jak chcesz. Teraz zostaje tylko analiza, aby zrozumieć jak to działa. Porównaj sobie co masz u siebie, a co jest tutaj poprawione. Podpowiedź: Chcesz aby program program wykonywał pętlę gdy spełnione są wszystkie warunki, więc należy użyć koniunkcji. Edit: Tak też można: bool sprawdzCzyDobrze( int liczba ) { if( liczba < 100 ) { if( !( liczba != 89 ) || !( liczba != 98 ) || !( liczba != 99 ) ) { return true; } return false; } else { return true; } }
Jeśli chodzi o returny, to program wychodzi z funkcji po trafieniu na pierwszey z nich. Edit: Trzeci wariant: bool sprawdzCzyDobrze( int liczba ) { if( liczba > 100 || liczba == 89 || liczba == 98 || liczba == 99 ) { return true; } else { return false; } }
Są trzy warianty rozwiązania problemu. Jeszcze raz analiza, analiza, analiza... |
|
« 1 » 2 |