Skocz do zawartości

9. Wyrażenia, operacje logiczne - szersze zrozumienie.


# CSH External VIP Project

Masz dosyć problemów z czynnikiem zaufania w CS2 lub notorycznymi banami?

Sprawdź CSH External VIP Project.


Więcej informacji  

Rekomendowane odpowiedzi

W tej lekcji chciałem zająć się głównie operacjami logicznymi w Autoit. Najpierw jednak chciałbym troszkę przybliżyć wam niektóre elementy kodu, które wpisujemy, a nie do końca wiemy jak się nazywają:

 

Zaczniemy od podstawowych pojęć:

Zmienna (ang. Variable ) - poznaliśmy już ten twór - jest to "kontener" na dane. W autoit wszystkie zmienne zaczynają się znakiem $

Zmienna tablicowa / Tablica (ang. Array) - o tym w następnej części kursu - to jest zmienna, zawierająca w sobie kilka zmiennych, które rozróżniamy indeksem (cyferką w kwadratowym nawiasie). Przykładowo tablica: $tablica[0], $tablica[1], $tablica[999], $tablica[$x]

Operacje warunkowe - (właściwie nie wiem czy to poprawna nazwa, ale ja takiej używam) są to wszystkie operacje, które potrzebują do działania warunku. Można w nich wyróżnić grupy takie jak np: Instrukcje warunkowe, Pętle.

Funkcje - to znamy także - procedury które można wykonać w dowolnej części programu. Wykonują one odpowiednie instrukcje, dzięki którym mogą(nie muszą) zwrócić jakąś wartość oraz przyjąć jakieś argumenty. Charakteryzują się nawiasami występującymi po nazwie funkcji- Funkcja().

Makra - w autoit są to jakby stałe, które zawierają różne informacje np: aktualną datę, ścieżkę do rożnych miejsc na dysku takich jak "Moje dokumenty","Program files" itp. Charakteryzują się znakiem "@" przed nazwą makra. Przykłady: @MIN, @ScriptDir, @DesktopWidth, @ComputerName.

Dyrektywy - komendy wydawane do kompilatora przed rozpoczęciem procesu kompilacji np. #include, #NoTrayIcon.

 

W kodzie możemy wyróżnić takie podstawowe elementy:

Bloki instrukcji - są to po prostu instrukcje jednej operacji warunkowej lub funkcji czyli instrukcje zawarte między np: If...EndIf; While...Wend; Func...EndFunc.

Warunki - wyrażenia zawierające operatory warunkowe czyli np. $a>1, $x>=3, GUICtrlRead($input)=="input".

Argumenty - Zmienne lub wyrażenia podawane do funkcji (znajdują się w nawiasach) np ($zmienna, 3+4, "ciąg znaków")

Wyrażenia - Celowo podałem je na końcu, bo nimi w szczególności chciałbym się dziś zająć- jest to właściwie główna grupa w której można wyróżnić grupy takie jak argumenty czy warunki.

 

Wyrażenie to przykładowo $zmienna + 1; GUICtrlRead($input) - 2; 3 * 4; $x < 2; "Witam " & "wszystkich". Każde wyrażenie zwraca jakąś wartość. W przypadku warunków jest to wartość logiczna czyli:True lub False. Teraz wreszcie dowiemy się jak dokładnie działają operacje warunkowe. Załóżmy prosty program:

$a = 1
If ($a > 0) Then
	 MsgBox(0,"tytuł","tekst")
EndIf
Dla nas oczywistym jest, że instrukcja się wykona, jednak jak robi to program? Otóż warunek (wyrażenie) wykona się, i w tym wypadku zwróci wartość True, instrukcja warunkowa if wykona się i wyskoczy MsgBox() :). Niby nic wielkiego, a jednak.

Wartości True i False mają swoje odpowiedniki w liczbach. Wartość True oznacza się zazwyczaj cyfrą 1, ale tak naprawdę każda inna wartość (również ujemna) różna od 0 da nam True. Tylko cyfra 0 da nam False. Tak więc jeśli zrobimy coś takiego:

$a = 1
If $a Then
	 MsgBox(0,"tytuł","tekst")
EndIf[/autoit]
to instrukcja także się wykona. Dopiero gdy wpiszemy 0 możemy liczyć na brak reakcji ze strony If'a:
[autoit]$a = 0
If $a Then
	 MsgBox(0,"tytuł","tekst")
EndIf

No także znamy już podstawowe operacje logiczne, więc można przejść dalej. Zajmiemy się wiec operatorami logicznymi czyli:

And (tzw. koniunkcja)- jest to operator logiczny tłumaczony jako "i" czyli jeśli 2 warunki są spełnione to zwróci nam True. Działa on na zasadzie, że porównuje wartość logiczną wyrażenia z jego lewej strony, z wartością logiczną wyrażenia z jego prawej strony. Trochę to zakręcone, ale zaraz wytłumaczę na przykładzie:

(2-3 And 1)= True
(False And 1)= False
(False And 0)= False
-jak widać w pierwszym przykładzie z lewej strony operatora mamy 2-3 czyli 1 co przekłada się na true. Z prawej strony także mamy 1 czyli true. Tak więc True And True = True xD proste jak drut :D

-w drugim przykładzie mamy z lewej strony operatora False, a z prawej strony 1. Wartość wyrażenia wyniesie False, ponieważ muszą być prawdziwe obydwa warunki by And zwrócił nam True.

- w trzecim po obydwu stronach mamy False (przypominam 0=False) więc sytuacja jest oczywiscie taka sama, ponieważ tutaj żaden z warunków nie jest spełniony. Możemy więc teraz narysować tablicę prawdy (tabelka, która pokazuje nam w jakim przypadku operator przyjmuje prawdę, a w jakim fałsz):

Dołączona grafika

Myślę że tablicy nie trzeba tłumaczyć. Przypominam tylko że 0=False, a wszystko inne różne od 0 czyli np. 1=True

 

Or (tzw. Alternatywa)- jest to operator logiczny tłumaczony jako "lub" czyli jeśli minimalnie 1 warunek jest spełniony to zwróci nam True. Działa on identycznie jak And tylko jego tabela prawdy różni się trochę:

Dołączona grafika

tutaj już nie będę tłumaczył gdyż myślę, że tabelka wszystko nam wyjaśnia.

 

Not (tzw. Negacja)- jest to operator logiczny zmieniający naszą wartość logiczną na przeciwną. Działa tak samo jak powyższe tyle że przyjmuje tylko jedną wartość stojącą po jego prawej stronie czyli np:

$a = False
If Not $a Then
	 MsgBox(0,"tytuł","tekst")
EndIf
w tym wypadku if wykona się.

Tablica prawdy:

Dołączona grafika

 

Tak więc wiemy już dokładnie jak działają poszczególne operatory logiczne. Trzeba to wiedzieć gdyż takie tłumaczenie jak "lub" czy "i" nie zawsze nam wystarcza. Czasem zdarza się tak, że według naszego rozumowania powinien program działać, jednak on odmawia posłuszeństwa. Warto więc wtedy sprawdzić jakie wartości zwrócą warunki i jaką ostateczną wartość przyjmie wyrażenie z naszym operatorem logicznym. Po prostu analizujemy program krok po kroku.

Co do negacji to warto jej używać w przypadku gdy chcemy, by coś zmieniało się na wartość przeciwną. Np włączanie/wyłączanie programu jednym hotkeyem:

HotKeySet("{F8}","_F8")

$wlacz=False

While 1
	 If $wlacz Then
		 SoundPlay(@WindowsDir & "\media\tada.wav",1)
	 Else
		 Sleep(100)
	 EndIf
WEnd

Func _F8()
	 $wlacz=Not $wlacz
EndFunc

No i to na tyle. Myślę, że pojęliście logikę działania programu i przyda Wam się to w przyszłości. Na koniec jeszcze krótkie zadanko:

Zapisz program z pętlą While, która wczytywać będzie znak z klawiatury(za pomocą InputBox) tak długo, aż użytkownik poda znak t lub T.
Wiem, że zadanie banalne, ale na nim ostatnio pomyliłem operatory i głowiłem się czemu nie działa, dlatego daję je tutaj.

 

Pozdrawiam,

Yubasek.

Odnośnik do komentarza

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Regulamin. Polityka prywatności