Funkcje informacyjne: Różnice pomiędzy wersjami
Przejdź do nawigacji
Przejdź do wyszukiwania
m (1 wersja) |
|||
Linia 40: | Linia 40: | ||
== Funkcja IsPrime == | == Funkcja IsPrime == | ||
− | Funkcja IsPrime() sprawdza, czy liczba całkowita jest liczbą pierwszą. Uwaga: działanie funkcji | + | Funkcja IsPrime() sprawdza, czy liczba całkowita jest liczbą pierwszą. Uwaga: działanie funkcji IsPrime() 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. |
<span style="color: green"><b><span style='color:#1f1c1b;'>Function </span></b>IsPrime(n <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>) <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Boolean</span> | <span style="color: green"><b><span style='color:#1f1c1b;'>Function </span></b>IsPrime(n <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>) <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Boolean</span> | ||
Linia 51: | Linia 51: | ||
IsPrime <span style='color:#000080;'>=</span> True | IsPrime <span style='color:#000080;'>=</span> True | ||
<b><span style='color:#1f1c1b;'>For </span></b>d <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>2</span> <b><span style='color:#1f1c1b;'>To</span></b> <span style='color:#0095ff;'>Int</span>( <span style='color:#0095ff;'>Sqr</span>(n) ) + <span style='color:#ff0000;'>1</span> <span style='color:#707070;'>'całość z pierwiastka kwadratowego z n plus 1</span> | <b><span style='color:#1f1c1b;'>For </span></b>d <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>2</span> <b><span style='color:#1f1c1b;'>To</span></b> <span style='color:#0095ff;'>Int</span>( <span style='color:#0095ff;'>Sqr</span>(n) ) + <span style='color:#ff0000;'>1</span> <span style='color:#707070;'>'całość z pierwiastka kwadratowego z n plus 1</span> | ||
− | <b><span style='color:#1f1c1b;'>If </span></b>(n <b><span style='color:#000000;'> | + | <b><span style='color:#1f1c1b;'>If </span></b>(n <b><span style='color:#000000;'>Mod</span></b> d) <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>0</span> <b><span style='color:#1f1c1b;'>Then</span></b> |
IsPrime <span style='color:#000080;'>=</span> False | IsPrime <span style='color:#000080;'>=</span> False | ||
<b><span style='color:#1f1c1b;'>Exit For</span></b> | <b><span style='color:#1f1c1b;'>Exit For</span></b> |
Wersja z 17:47, 8 wrz 2023
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 IsPrime() 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