vb
Diff
code posted
created at 18 Jun 09:14
Edit
|
Back
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
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 |
6.76 KB in 5 ms with coderay