Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kilka warunków w while

Ostatnio zmodyfikowano 2015-06-14 14:45
Autor Wiadomość
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:

C/C++
#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.
P-133531
carlosmay
» 2015-06-13 23:18:03
Nieważne jakie liczby podasz warunki zawsze będą prawdziwe
i if zwróci false,
C/C++
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
C/C++
if( liczba < 100 && liczba != 89 && liczba != 98 && liczba != 99 )
{
    return false;
}

nie wiem czy taki był zamysł.
P-133532
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.
P-133534
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:

C/C++
liczba = 50;

if( liczba < 100 || liczba != 89 )
analiza:
C/C++
liczba < 100 = true; // wykonuje instrukcje return false;

liczba = 105;
liczba < 100 = false;
liczba != 89 = true; // calosc = true;

liczba = 89;
liczba != 89 = false;
liczba < 100 = true; // calosc = true;

Za każdym razem wykonuje się instrukcja pierwszego if()
Zwraca ona wartość
C/C++
false
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.
C/C++
bool sprawdzCzyDobrze( int liczba )
{
    if( liczba < 100 && liczba != 89 && liczba != 98 && liczba != 99 )
    {
        return false;
    }
    else
    {
        return true;
    }
}
P-133539
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?
P-133542
wilkoo13
» 2015-06-14 10:56:52
Napisałeś że nie działa. Jak powinno działać?
P-133543
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.
P-133545
carlosmay
» 2015-06-14 13:08:49
C/C++
#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:
C/C++
bool sprawdzCzyDobrze( int liczba )
{
    if( liczba < 100 ) // wpierw sprawdz czy liczba jest mniejsza od 100, jesli tak to wykonaj instrukcje
    {
        if( !( liczba != 89 ) || !( liczba != 98 ) || !( liczba != 99 ) ) // sprawdz liczba jest rowna jednej z warunku, jesli tak to wykonaj instrukcje
        {
            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:
C/C++
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...
P-133552
« 1 » 2
  Strona 1 z 2 Następna strona