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

Operatory allegro

Ostatnio zmodyfikowano 2008-08-13 17:54
Autor Wiadomość
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.

C/C++
while( !key[ KEY_ESC ] || !close_button_pressed )
{
    //kod
}

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 :)
P-1261
DejaVu
» 2008-08-13 00:01:34
[tutorial]Pętla while powinna wyglądać tak:
C/C++
while( !key[ KEY_ESC ] && !close_button_pressed )
{
    //kod
}
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:
C/C++
while( !( key[ KEY_ESC ] || close_button_pressed ) ) //Wykrzyknij ważny na początku
{
    //kod
}

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.
C/C++
while( waurnek )
{
    //blok
}
Powyższy przykład tłumacz sobie lepiej jako:
JEŚLI warunek prawdziwy TO wykonaj blok I WRÓĆ PONOWNIE do sprawdzenia warunku.
P-1263
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ć.
P-1277
« 1 »
  Strona 1 z 1