Funkcje informacyjne
Wersja z dnia 18:04, 18 paź 2020 autorstwa HenrykDabrowski (dyskusja | edycje) (Utworzono nową stronę "<div style="text-align:right; font-size: 130%; font-style: italic; font-weight: bold;">18.10.2020</div> __FORCETOC__ == Funkcja IsDigit == Funkcja IsDigit() sprawdz...")
18.10.2020
Funkcja IsDigit
Funkcja IsDigit() sprawdza, czy pierwszy znak zmiennej znakowej jest cyfrą.
Function IsDigit(Txt as String) as Boolean
'funkcja sprawdza czy pierwszy znak zmiennej Txt jest cyfrą
Dim Code as Long
If IsEmpty(Txt) OR Txt = "" Then
IsDigit = False
Exit Function
End If
Code = Asc(Txt)
IsDigit = False
If Code >= 48 AND Code <= 57 Then
IsDigit = True
End If
End Function
Sub Informacyjne1()
MsgBox IsDigit("123") 'True
MsgBox IsDigit("abc") 'False
MsgBox IsDigit("") 'False
MsgBox IsDigit(3.14) 'True
MsgBox IsDigit(True) 'False
End Sub
Wyjaśnienie dlaczego nie pojawia się błąd, gdy funkcja IsDigit() zostaje wywołana z niewłaściwym typem parametru i dlaczego zwraca taki wynik, Czytelnik znajdzie TUTAJ
Funkcja IsPrime
Funkcja IsPrime() sprawdza, czy liczba całkowita jest liczbą pierwszą. Uwaga: działanie funkcji IsDigit() można przyspieszyć dwukrotnie, sprawdzając jedynie dzielniki nieparzyste, a nawet trzykrotnie sprawdzając jedynie dzielniki postaci 6k-1 i 6k+1. To proste ulepszenie algorytmu pozostawiamy Czytelnikowi. Oczywiście funkcja ta nie nadaje się do sprawdzania bardzo dużych liczb całkowitych.
Function IsPrime(n as Long) as Boolean
'funkcja sprawdza, czy liczba całkowita n jest liczbą pierwszą
Dim d as Long
If n <= 2 Then
IsPrime = (n=2)
Exit Function
End If
IsPrime = True
For d = 2 To Int( Sqr(n) ) + 1 'całość z pierwiastka kwadratowego z n plus 1
If (n MOD d) = 0 Then
IsPrime = False
Exit For
End If
Next d
End Function
Sub Informacyjne2()
'lista liczb pierwszych mniejszych od liczby 1000
Dim oSht as Object
Dim k as Long, Wiersz as Long
oSht = ThisComponent.getSheets().getByIndex(0) 'uchwyt do pierwszego arkusza
ThisComponent.CurrentController.setActiveSheet(oSht) 'uaktywnienie pierwszego arkusza
oSht.getColumns().insertByIndex(0, 2) 'dodajemy dwie kolumny na pozycję pierwszą
Wiersz = 0
For k = 0 To 1000
If IsPrime(k) Then
oSht.getCellByPosition(0, Wiersz).Value = Wiersz + 1
oSht.getCellByPosition(1, Wiersz).Value = k
Wiersz = Wiersz + 1
End If
Next k
End Sub
LibreOffice Calc – makra Strona główna