Operatory allegro
Ostatnio zmodyfikowano 2008-08-13 17:54
Patzick Temat założony przez niniejszego użytkownika |
Operatory allegro » 2008-08-12 23:43:08 Witam, to mój pierwszy post, przepraszam, ale nie mogłem nigdzie tego znaleźć. Otóż chodzi mi o operatory logiczne. Dokładniej mam problem z zamykaniem aplikacji, gdyż chcę, aby to można było robić za pomocą Ecsape i krzyżyka. while( !key[ KEY_ESC ] || !close_button_pressed ) { } dzieją się dziwne rzeczy, trzeba na przemian krzyżyk i escape wciskać i dopiero się zamyka, a || powinno chyba robić jako OR, więc nie trzeba w tej sytuacji 2 wciskać. Proszę o pomoc :) |
|
DejaVu |
» 2008-08-13 00:01:34 [tutorial]Pętla while powinna wyglądać tak: while( !key[ KEY_ESC ] && !close_button_pressed ) { } Czytasz to: jeśli NIE wciśnięto klawisza I NIE wciśnięto krzyżyka, to wykonuj blok... Możesz to samo zapisać inaczej, i myślę że będzie prostsze dla Ciebie w czytaniu: while( !( key[ KEY_ESC ] || close_button_pressed ) ) { } Z praw de Morgana ta własność wynika (czy czegoś takiego ;p). Generalnie warto poświęcić trochę czasu na logikę jako czystą matematykę (zera i jedynki) oraz znać kilka wzorów na pamięć), bo one często upraszczają zapisy w programowaniu. Jako programista ze sporym już doświadczeniem na karku mogę Ci powiedzieć, że ucząc się w liceum nie doceniałem tych zadań z logiki, które były na lekcjach. Mimo wszystko ten jeden jedyny dział warto opanować dobrze i 'pobawić' się nim trochę w przekształcenia aby uzyskać krótsze zapisy logiczne itp. [/tutorial] /edit: Nie polecam generalnie traktować 'while' jako 'dopóki', ponieważ zaburza to logiczne czytanie. Powyższy przykład tłumacz sobie lepiej jako: JEŚLI warunek prawdziwy TO wykonaj blok I WRÓĆ PONOWNIE do sprawdzenia warunku. |
|
Patzick Temat założony przez niniejszego użytkownika |
» 2008-08-13 17:54:23 ok, czyli wystarczy, że "!" jest na początku alternatywy i wtedy || działa normalnie jako "lub"? Akurat lubiłem zadania z logiki, chodziło mi tylko o to, że gdy dałem
while( !key[KEY_ESC] || !close_button_pressed)
to nie działało jak powinno, gdyż zamykało się dopiero po wciśnięciu krzyżyka i Escape'a na przemian. Myślałem, że każdy warunek trzeba zanegować. Dzięki, idę przetestować. |
|
« 1 » |