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. |
|
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ść.
|
|
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: int liczba;
int maksimum;
bool eksperymentujemy =( liczba >= maksimum );
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. bool raz = 12345; bool dwa = 3.14; bool trzy = "Ala ma kota";
if( raz == 12345 ) { } double liczba = dwa;
|
|
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? |
|
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 bool StatekZniszczony = false;
while( true ) { if( ) { StatekZniszczony = true; } if( StatekZniszczony == true ) { } else if( StatekZniszczony == false ) { } }
kod jest bardzo uproszczony ale myślę, że powinieneś go zrozumieć. |
|
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? |
|
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ę. |
|
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?
|
|
1 2 « 3 » 4 |