Funkcje informacyjne: Różnice pomiędzy wersjami

Z Henryk Dąbrowski
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 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.
+
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;'>MOD</span></b> d) <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>0</span> <b><span style='color:#1f1c1b;'>Then</span></b>
+
         <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