AutoIt/Ćwiczenia dla początkujących - przykładowe rozwiązania

1. Napisać funkcje obliczające:

- cotangens

- średnią arytmetyczną i geometryczną dwóch argumentów

- mniejszą z dwóch liczb

- większą z dwóch liczb

Funkcji użyć w prostym skrypcie demonstracyjnym.

Przykładowe rozwiązanie:

$a=1
$b=2.2

MsgBox(0,"Funkcje matematyczne","ctg(1) = "&ctg($a))
MsgBox(0,"Funkcje matematyczne","Średnia arytmetyczna = "&sr_arytm($a, $b))
MsgBox(0,"Funkcje matematyczne","Średnia geometryczna = "&sr_geom($a, $b))
MsgBox(0,"Funkcje matematyczne","Liczba mniejsza = "&min($a, $b))
MsgBox(0,"Funkcje matematyczne","Liczba większa = "&max($a, $b))

;definicje funkcji
;cotangens
Func ctg($kt)
   Return 1/Tan($kt)
EndFunc

;średnia arytmetyczna
Func sr_arytm($a, $b)
   Return ($a + $b)/2
EndFunc

;średnia geometryczna
Func sr_geom($a, $b)
   Return Sqrt($a * $b)
EndFunc

;liczba mniejsza
Func min($a, $b)
   If $a<=$b Then Return $a
   Return $b
EndFunc

;liczba większa
Func max($a, $b)
   If $a<=$b Then Return $b
   Return $a
EndFunc


2. W oparciu o bitowe funkcje logiczne, napisać funkcję zmieniającą wyrażenie na string liczby dwójkowej. Funkcja powinna mieć możliwość określenia długości stringu, jeżeli parametr pominiemy długość domyślna 32 bity. Jeżeli zadana długość mniejsza od wymaganej, to obcinane znaki z lewej strony.

Najprościej będzie wykorzystać własności funkcji BitAND. Możemy za jej pomocy testować czy w liczbie ustawiony jest dany bit. Do funkcji przekażemy 2 argumenty, pierwszym będzie badana liczba, a drugim liczba testująca (musi mieć ona ustawiony tylko ten bit, który aktualnie testujemy). Funkcja zwróci liczę większą od zera (True) gdy dany bit w obu liczbach będzie ustawiony. W tym przypadku dopisujemy na początku stringu liczby dwójkowej "1". Jeżeli bit w testowanej liczbie nie będzie ustawiony, to funkcja zwróci 0 (False) i do liczby dwójkowej dopisujemy 0.

Przykładowe rozwiązanie:

$liczba=100
MsgBox(0,"DEC->BIN",Bin($liczba,8))

;Funkcja zamienia wyrażenie na string liczby dwójkowej
;$liczba - wyrażenie zamieniane na sring dwójkowy
;$len - ilość bitów (znaków w stringu wynikowym)
Func Bin($liczba, $len=32)
   Local $bin, $i
   For $i=0 To $len-1
      If BitAND($liczba, 2^$i) Then
         $bin="1"&$bin  ;dla bitu ustawionego
      Else
         $bin="0"&$bin  ;dla bitu nieustawionego
      EndIf
   Next
   Return $bin
EndFunc


3. Napisać funkcję zamieniającą string liczby dwójkowej na liczbę dziesiętną (odpowiednik funkcji Dec).

Przykładowe rozwiązanie:

$bin="100100111"
MsgBox(0,"BIN->DEC",BinToDec($bin))

Func BinToDec($bin)
   Local $len=StringLen($bin), $dec=0, $i, $j, $a
   For $i=$len to 1 Step -1
      $j=$len-$i
      $a=StringMid($bin,$i,1)
      $dec+=Number($a)*2^$j
   Next
   Return $dec
EndFunc