Title / Description
Code Public Class Form1 Private Sub ButtonStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonStart.Click Dim stTime As DateTime ' время начала работы алгоритма stTime = DateTime.Now ' в зависимости от выбранного алгоритма вызываем соотв функции Select Case BoxSelect.SelectedIndex Case 0 ' генерация М-последовательности If (StartMSeq()) Then ' если во входных параметрах ошибки, время вычисления не указываем TextBoxTime.Text = getMsDiffTime(stTime).ToString End If Case 1 ' генерация простых чисел по буферному алгоритму Dim bufSeq As New BufSequence() RichTextBox.Text = startSeq(bufSeq) ' вычисляем и выводим результат TextBoxTime.Text = getMsDiffTime(stTime).ToString ' записываем время работы алгоритма Case 2 ' генерация простых чисел по собственному алгоритму Dim mySeq As New MySequence() RichTextBox.Text = startSeq(mySeq) TextBoxTime.Text = getMsDiffTime(stTime).ToString End Select End Sub ' вычисление М-последовательности Private Function StartMSeq() As Boolean Dim mSeq As New MSequence() Dim A() As Byte Dim M() As Byte Dim N As Integer ' если какой то из входных параметрв не задан, выходим с ошибкой If (TextBoxA.Text.Length = 0 Or TextBoxM.Text.Length = 0 Or TextBoxN.Text.Length = 0) Then MsgBox("Некорректные входные параметры") TextBoxTime.Text = "" Return False End If ' установили длинну для массива А и занесли исходные значения ReDim A(TextBoxA.Text.Length - 1) For i = 0 To TextBoxA.Text.Length - 1 A(i) = Val(TextBoxA.Text.Chars(i)) Next ' и для массива M ReDim M(TextBoxM.Text.Length - 1) For i = 0 To TextBoxM.Text.Length - 1 M(i) = Val(TextBoxM.Text.Chars(i)) Next ' получили N - размер генерируемой последовательности N = Val(TextBoxN.Text) ' вывели результат RichTextBox.Text = mSeq.Run(A, M, N) Return True End Function ' демонстрация полиморфизма. В зависимости от объекта вызывается тот или иной метод генерации простых чисел Private Function startSeq(ByVal privSeq As PrivSequence) As String Return privSeq.calculateSequence() End Function ' возвращает разницу между указанным и текущим периодом времени в мс Private Function getMsDiffTime(ByVal stTime As DateTime) As Integer Dim finTime As DateTime finTime = DateTime.Now If (finTime.Second > stTime.Second) Then Return (finTime.Second - stTime.Second) * 1000 + finTime.Millisecond Else Return finTime.Millisecond - stTime.Millisecond End If End Function End Class Модуль: seq_generate Module seq_generate Public Class MSequence Public Function Run(ByVal A() As Byte, ByVal userM() As Byte, ByVal mCnt As Integer) As String Dim res As String = "" Dim M(mCnt) As Byte ' заносим первые цифры М-последовательности For i = 0 To userM.GetUpperBound(0) M(i) = userM(i) res += M(i).ToString Next ' продолжаем М-последовательност For i = userM.Length To M.GetUpperBound(0) M(i) = (A(0) * M(i - 1)) Xor (A(1) * M(i - 2)) Xor (A(2) * M(i - 3)) res += M(i).ToString Next Return res End Function End Class 'interface Public Interface PrivSequence Function calculateSequence() As String End Interface Public Class BufSequence Implements PrivSequence ' генерация простых чисел по буферному алгоритму (MIXAL) Public Function calculateSequence() As String Implements PrivSequence.calculateSequence Dim primers(5000) As Integer 'массив найденных простых чисел Dim primeNumber As Integer ' простое число Dim privNumber As Integer ' частное от деления Dim divNumber As Integer ' делитель Dim modNumber As Integer ' остаток от деления primeNumber = 3 modNumber = 0 ' вычисление простых чисел For i = 0 To primers.GetUpperBound(0) primers(i) = primeNumber modNumber = 0 While (modNumber = 0) primeNumber += 2 divNumber = 2 Line1: privNumber = primeNumber / divNumber modNumber = primeNumber Mod divNumber End While If (privNumber > divNumber) Then divNumber += 1 GoTo Line1 End If Next ' обработка результата Dim res As String res = "" For j = 0 To primers.GetUpperBound(0) res += primers(j).ToString + " " Next Return res End Function End Class Public Class MySequence Implements PrivSequence ' генерация последовательных чисел по собственному алгоритму Public Function calculateSequence() As String Implements PrivSequence.calculateSequence Dim primers(5000) As Integer 'массив найденных простых чисел Dim primeNumber As Integer ' простое число primeNumber = 3 ' перебираем делители для каждого нечетного числа ' в случае, если это число простое - заносим в массив For i = 0 To primers.GetUpperBound(0) While (checkPrimeNumber(primeNumber) = False) primeNumber += 2 End While primers(i) = primeNumber primeNumber += 2 Next ' обработка результата Dim res As String res = "" For j = 0 To primers.GetUpperBound(0) res += primers(j).ToString + " " Next Return res End Function ' проверить методом перебора, является ли число простым Private Function checkPrimeNumber(ByVal numb As Integer) As Boolean Dim modNumber As Integer Dim res As Boolean res = True For i = 2 To numb - 1 modNumber = numb Mod i If (modNumber = 0) Then res = False Exit For End If Next Return res End Function End Class End Module
Author
Highlight as C C++ CSS Clojure Delphi ERb Groovy (beta) HAML HTML JSON Java JavaScript PHP Plain text Python Ruby SQL XML YAML diff code