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

bool porownanie = 123 >= 321;

Ostatnio zmodyfikowano 2017-02-18 17:08
Autor Wiadomość
Szymon2727
» 2017-02-17 13:33:35
Nie, to Ty nie potrafisz zrozumieć bool'a.

Bool może mieć wartość jeden lub zero, kropka.

A wiesz czemu korzysta się z bool'a? Bo zabiera bardzo mało pamięci.

Twój przykład:
( 111 != 222 )

Masz grę i te dwie liczby to int z podanymi już wartościami i przykładowo musi zajść taki warunek, by coś się stało. Podajesz te dwa inty na początku, ale warunek występuje znacznie później.

Miłej zabawy z zmiennymi globalnymi lub przeciąganiu tych dwóch intów przez cały program - można się pogubić jak nagle potrzebujemy dwóch intów z 50, zamiast 5 booli.

Prawie zawsze w większych programach są takie operacje, ptaszki, kółeczka w formatkach czy co tam jeszcze ma przejmować decyzje użytkownika - wielu, by po prostu wolało użyć int, bo tak jest łatwiej, ale dopiero po użyciu bool widzi się, że jest to wygodniejsze i łatwiejsze.
P-157898
Dolce
Temat założony przez niniejszego użytkownika
» 2017-02-18 10:50:13
Dziękuję Wam przede wszystkim za cierpliwość.
Niestety, jestem muzykiem i mój mózg pracuje standardowo na innych falach niż Wasz. Nie ma co się tu rozpisywać.
Natomiast powoli coś mi tam się zmienia w myśleniu odnośnie bool i być może to jest dobry kierunek.

Pytanie 1:
Na początku opiszę problem z moim rozumowaniem. Po co przypisywać typowi bool na początku kodu np. zmienną: eksperymentujemy = 12312; skoro można eksperymentujemy = 1; bo dla bool 12312 czy też 1 to i tak 1 (true). Jak widać, moje rozumowanie jest dość naiwne ale TAKIE JEST i ciężko mi z tego zrezygnować :)
Dalej, widziałem też przykład z mniej więcej takim zapisem: bool eksperymentujemy = 123 >= 321; czyli wg mojego rozumowania 0 (false). Nie łatwiej wpisać eksperymentujemy = 0;?
Po co te wszystkie kombinacje?
Oczywiście pytanie jest, jak zwykle uproszczone. Rozumiem, że tak być musi. Jednak w powyższy sposób przedstawiłem jak w chwili obecnej rozumuje mój mózg, by ewentualnym chętnym do prostowania jego fałdów było łatwiej tłumaczyć z polskiego na nasze. Jak to zrozumie, być może i ja kiedyś komuś pomogę, kto wie. 
Można również opanować temat poprzez przerobienie 1001 przykładów i być może tak się skończy. Czasem nie warto męczyć się ze zrozumieniem istoty, szybciej będzie systemem małpy :)

Pytanie 2:

Kod z lekcji:

#include <iostream>

int main()
{
    bool eksperymentujemy = 12312;
    std::cout << "eksperymentujemy = " << eksperymentujemy << std::endl;
    eksperymentujemy = 0;
    std::cout << "eksperymentujemy = " << eksperymentujemy << std::endl;
    eksperymentujemy = - 123.0;
    std::cout << "eksperymentujemy = " << eksperymentujemy << std::endl;
    return 0;
}

Jeśli na początku przypisujemy boolowi zmienną eksperymentujemy = 12312 a w dalszym "biegu" kodu zmieniamy ją na eksperymentujemy = 0 to czy 0 zastępuje (do momentu ewentualnej, kolejnej zmiany wartości tej zmiennej) w dalszym kodzie wartość 12312? Czy ta wartość (12312) traci już zupełnie "moc" czy też kolejne zmienne się muszą z nią w jakiś sposób liczyć? To w zasadzie pytanie o system hierarchii. Zakładam, że kolejne wartości liczbowe "wykasowują" pierwszą wartość, przypisaną bezpośrednio przy typie bool ale wolę się upewnić.

Jak zwykle będę wdzięczny za życzliwość.
P-157931
jankowalski25
» 2017-02-18 11:58:29
W przypadku typu
bool
 używaj wyłącznie
true
 oraz
false
 (lub wyrażeń, które zwracają taką wartość). Nie wstawiaj zera ani jedynki. Tak się robiło kiedyś, gdy nie było czegoś takiego, jak
bool
 i ludzie w tym celu używali na przykład
int
. Powodowało to liczne problemy i jeśli chcesz ich uniknąć, to nie mieszaj liczb z wartościami logicznymi.
Po co przypisywać typowi bool na początku kodu np. zmienną: eksperymentujemy = 12312; skoro można eksperymentujemy = 1; bo dla bool 12312 czy też 1 to i tak 1 (true). Jak widać, moje rozumowanie jest dość naiwne ale TAKIE JEST i ciężko mi z tego zrezygnować :)
To był tylko przykład, żeby pokazać, że wszystko, co jest różne od zera, zostanie zamienione na
true
. W normalnym kodzie wpisuj
true
 lub
false
.
Dalej, widziałem też przykład z mniej więcej takim zapisem: bool eksperymentujemy = 123 >= 321; czyli wg mojego rozumowania 0 (false). Nie łatwiej wpisać eksperymentujemy = 0;?
Wyobraź sobie coś takiego:
C/C++
int liczba;
//użytkownik podaje jakąś liczbę (na przykład 123)
int maksimum;
//wyliczamy maksimum czegośtam (wyszło 321)
bool eksperymentujemy =( liczba >= maksimum );
//dalej jeszcze w dziesięciu różnych miejscach
//zmieniamy te trzy zmienne na różne sposoby
W kursie pojawiają się przykłady proste, które nie zawsze mają bezpośrednie odniesienie do rzeczywiście pisanego kodu. Chodzi o to, aby zrozumieć, jak działa
bool
, a nie podawać praktyczne przykłady, które byłyby długie i niepotrzebnie skomplikowane.
Jeśli na początku przypisujemy boolowi zmienną eksperymentujemy = 12312 a w dalszym "biegu" kodu zmieniamy ją na eksperymentujemy = 0 to czy 0 zastępuje (do momentu ewentualnej, kolejnej zmiany wartości tej zmiennej) w dalszym kodzie wartość 12312? Czy ta wartość (12312) traci już zupełnie "moc" czy też kolejne zmienne się muszą z nią w jakiś sposób liczyć? To w zasadzie pytanie o system hierarchii. Zakładam, że kolejne wartości liczbowe "wykasowują" pierwszą wartość, przypisaną bezpośrednio przy typie bool ale wolę się upewnić.
Do zmiennej typu
bool
 nie wpiszesz wartości takich, jak
12345
,
3.14
 czy
"Ala ma kota"
. Nastąpi niejawne rzutowanie tego do jednego, prostego
true
 lub
false
. A jeśli chodzi o zmienne, to każde przypisanie kasuje poprzednią wartość i jeśli jej sobie gdzieś nie zapiszesz, to jest tracona.
C/C++
bool raz = 12345;
bool dwa = 3.14;
bool trzy = "Ala ma kota";
//z tych trzech zmiennych nie wyciągniesz nic innego, niż true lub false
if( raz == 12345 )
{
    //nie sprawdzisz, czy tam było 12345, czy 78
}
double liczba = dwa; //nie dostaniesz z powrotem 3.14
//ze zmiennej trzy również nie odczytasz napisu "Ala ma kota"
P-157933
Dolce
Temat założony przez niniejszego użytkownika
» 2017-02-18 13:20:18
Bardzo dziękuję, wcześniejsza pomoc oraz Twoja obecna mi naprawdę rozjaśnia temat.
Zazdroszczę Wam znajomości języka programowania.
Tyle fajnych rzeczy można tworzyć, gdy się ma otwartą głowę, zna C++
i posiada płytkę z mikroprocesorem + programator.

Na razie muszę poeksperymentować na różnych przykładach z bool, żeby sobie
radzić z poprawnym rozumieniem i stosowaniem tego typu.

Mam dwa pytania:
1) Cyt: "W przypadku typu bool używaj wyłącznie true oraz false (lub wyrażeń, które zwracają taką wartość)."
   Jeśli to nie kłopot, czy mógłbyś mi wyjaśnić o co chodzi z tymi wyrażeniami?
2) Napisałeś, by stosować w praktyce zapis false oraz true.
   Czy ten zapis stosuje się wyłącznie na początku kodu, przy typie bool, np. bool eksperymetnujemy = true a następnie 
   ewentualnie w razie konieczności zmiany logiki na false czyli przekształcamy zmienną eksperymentujemy = false a "wewnątrz"
   kodu wstawiamy zawsze zmienną eksperymentujemy?
   Czy też true i false stosuje się również "wewnątrz" kodu? Jeśli ta to w jakim celu?  
P-157937
michal11
» 2017-02-18 15:00:05
ad1. Wyrażenia zwracające boola to np. operatory porównań, taki kod
123 > 123
 zwraca boola czy 123 jest większe od 123, czyli w tym przypadku zwróci false.

ad2.
Może podam ci taki przykład, załóżmy, że piszesz grę w której masz jakieś statki kosmiczne które powinny sobie latać w różne strony i np. atakować. Taki statek może zostać w pewnym momencie zniszczony i wtedy nie powinien nic robić tylko sobie dryfować w przestrzeni kosmicznej. taką logikę możesz zrobić właśnie na boolu. Uproszczony kod

C/C++
bool StatekZniszczony = false;

while( true ) // nieskończona pętla
{
    if( /* jakiś warunek na zniszczenie statku np. wcisniecie spacji albo innego klawisza*/ )
    {
        StatekZniszczony = true;
    }
   
    if( StatekZniszczony == true )
    {
        //reszta kodu odpowiedzialna za dryfowanie
    }
    else if( StatekZniszczony == false )
    {
        //strzelaj
        //lataj
        //itp.
    }
   
}

kod jest bardzo uproszczony ale myślę, że powinieneś go zrozumieć.
P-157940
Dolce
Temat założony przez niniejszego użytkownika
» 2017-02-18 16:32:44
Dziękuję.
Na razie doszedłem do lekcji operacje porównania więc nie znam if, while itp.
Jednak kod wyjaśnia to o co pytałem.

Tak z ciekawości, zejdę nieco na ziemię:

#include <iostream>

int main()
{
    int zmienna = 5;
    bool row = 10 * 4 + zmienna < zmienna * 8;
    std::cout << " wynik = " << row << std::endl;
    zmienna = 10;
    std::cout << " wynik = " << row << std::endl;
    return 0;
}

Dlaczego wynik to flase false zamiast false true?
Co zrobić, by bool dokonał kolejnych obliczeń ze zmienną = 10?
P-157949
jankowalski25
» 2017-02-18 16:48:17
if( StatekZniszczony == true )
To jest masło maślane. Wystarczy samo
if( StatekZniszczony )
. Prościej, krócej i czytelniej.
else if( StatekZniszczony == false )
Jak wyżej, wystarczy
if( !StatekZniszczony )
, a najlepiej w ogóle wywalić ten drugi
if
 (w tym przykładzie samo
else
 wystarczy).
Dlaczego wynik to flase false zamiast false true?
Dlatego, że nie zmieniasz wartości zmiennej
row
. W C++ takie wyrażenia podlegają ewaluacji gorliwej (są obliczane natychmiast i się nie zmieniają, dopóki sam tego nie zrobisz), a leniwą (wyliczanie wyrażeń w momencie użycia) otrzymasz pakując określony element w funkcję.
P-157954
Dolce
Temat założony przez niniejszego użytkownika
» 2017-02-18 16:59:09
A w jaki sposób można to ewentualnie wykonać, by było krócej niż tak:

#include <iostream>

int main()
{
    int zmienna = 5;
    bool row = 10 * 4 + zmienna < zmienna * 8;
    std::cout << " wynik = " << row << std::endl;
    zmienna = 10;
    row = 10 * 4 + zmienna < zmienna * 8;
    std::cout << " wynik = " << row << std::endl;
    return 0;
}

Czy też za każdym razem należy podawać całą "linijkę obliczeniową" row?
P-157962
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona