Программа поиска дружественных чисел. Visual Basic
List1 (Нулевую строчку заполняем заглавием: Дружественные числа)
Timer1 - для прерываний
Label1 - записка с пояснением (желтая)
Создаем в той же папке где программа файлы:
last.txt - будем сохранять последнее просчитанное число(напишем в него 1, сохраним и закроем).
Druj.txt - будем записывать пары дружественных чисел построчно.
Программа работает следующим образом:
Сначала в загрузке формы, открывает файл last.txt, забирает последнее просчитанное число. Приcваивает его переменной Nt.
Затем прерывание и действия передаются таймеру. С шагов Sh = 17 таймер запускает
17 просчётов дружественных чисел и возвращает управление. После задержки снова запускается на следующий просчет в 17 проверяемых чисел(N).
Основной алгоритм: cbCount1():
Для каждого просчитываемого числа, находится сумма делителей нацело (накопительный S от 2 до корня из N). Для суммы делителей находится сумма ее делителей S2 (до корня из S). Если N (S) является квадратом, то делитель учитываем только один раз.
Если N=S2, то найдена пара дружественных чисел. Записываем их в порядке возрастания (N < S) :
If (N = S2) And (N < S) Then
Это позволяет не дублировать пары (и не сохранять дополнительную информацию), когда будет просчитываться большее число и найдется к нему пара – меньшее число.
Пара при соблюдении условия записывается в List1 и в файл.
Каждые 1000 просчитываемых чисел, пересохраняется last.exe. Также он пересохраняется при выходе из программы крестиком в Form_Terminate().
‘Код программы на Visual Basic 6.0.
Public Nt, Sh As Long
Public State As Long
Private Sub cbCount1()
For N = Nt To Nt + Sh
Nt = N
S = 1
R = Int(Sqr(N))
For i = 2 To R
t = N Mod i
If t = 0 Then S = S + i + (N \ i)
If (t = 0) And (i = R) Then S = S - (N \ i)
Next i
R = Int(Sqr(S))
S2 = 1
For i = 2 To R
t = S Mod i
If t = 0 Then S2 = S2 + i + (S \ i)
If (t = 0) And (i = R) Then S2 = S2 - (S \ i)
Next i
If N Mod 100 = 0 Then Form1.Refresh
If (N = S2) And (N < S) Then
List1.List(List1.ListCount) = Str(N) + ", " + Str(S)
List1.Refresh
Open CurDir + "\Druj.txt" For Append As #88
StL = Trim(Trim(Str(N)) + " " + Trim(Str(S)))
Print #88, StL
Close (88)
End If
If N Mod 1000 = 0 Then
Open CurDir + "\last.txt" For Output As #88
Print #88, Trim(Str(Nt))
Close (88)
End If
Next N
Form1.Caption = "Дружественные числа: " + Str(Nt)
End Sub
Private Sub Form_Load()
Timer1.Interval = 1
State = 1
Sh = 17
Open CurDir + "\last.txt" For Input As #88
Line Input #88, StL
Nt = Val(Trim(StL))
Close (88)
End Sub
Private Sub Form_Terminate()
Open CurDir + "\last.txt" For Output As #88
Print #88, Trim(Str(Nt))
Close (88)
End Sub
Private Sub Timer1_Timer()
Select Case State
Case 1
Call cbCount1
State = 1
End Select
End Sub
Свидетельство о публикации №214102600171
Я использую Визуал Бейсик для более интересных вещей ))
Кстати, Вы ещё посещаете этот сайт? Или ну его?
Однако упоминание о бейсике меня радует. На этом сайте хоть обсудить что хочешь спокойно можно, не в пример сайтам программистов - на них возни много, а толку чуть. Хотя кое-что я и на этих сайтах для себя почерпнул.
Чтобы комментарий скучным не казался -
. . . . Ода Турбо Бейсику
Забив на оператор GOTO, *
Все перешли на языки сложнее,
Чем Бейсик. Но по-прежнему милее
Мне он. Люблю его за простоту.
За численные строк обозначенья, **
Универсальность функции INKEY$, ***
За мысли постепенное теченье,
За все RETURN, которые там есть, ****
За длинный милый ряд волшебных звуков,
За амплитуды, полнящие файл,
За классику - всех Бахов и их внуков,
За всё, что я пока не записал.
За возвышенье творческих мотивов,
За любованье ритмикой танго.
За страсть любви, без всяких перерывов,
Достойную Поэта.
Одного достаточно, чтоб целый мир восславить.
Не важно - языком, или пером.
Как говорил Алмyстафа красавец, *****
С любовью этой, дай Бог, не умрём.
__________
* использование оператора GOTO считается дурным тоном в программировании
** строки текста программы на Бейсике могут нумероваться
*** функция INKEY$ возвращает код нажатой клавиши, а также отслеживает комбинации клавиш
**** RETURN возврат из подпрограммы
***** Алмyстафа - персонаж книги "Пророк"Д.Х.Джебрана
Турбо Бейсик я использовал, в частности, для озвучивания классической музыки
прослушать записи можно тут - http://yadi.sk/d/poMxlrBuxendv
сейчас перешёл на Визуал Бейсик.
С уважением и с радостью, что встретил любителя Бейсика. ))
Дмитрий Маштаков 29.08.2018 09:39 Заявить о нарушении