Используя алгоритм Евклида, найти наибольший общий делитель (НОД) - VB

Формулировка задачи:

Дорогие программисты! Не могу справиться с задачками! Буду благодарна за помощь или подсказку! 1. Даны натуральные числа n, m. 1.1. Используя алгоритм Евклида, найти наибольший общий делитель (НОД) n и m. 1.2. Найдите наибольший общий делитель (НОД) n и m любым другим способом. 1.3. Какой из алгоритмов вычисления НОД более эффективны и почему (ответ добавить в код как комментарий). 1.2: моя версия решения работает 1.3 - сама напишу.А вот с Евклидом никак не подружусь Рекомендации от преподавателя: Наибольший общий делитель чисел 9 и 6 - это такой число 3, так как и 9 и 6 делятся на 3 и это наибольшее из их общих делителей. Общими делителями чисел 6 и 12 являются числа 1,2,3,4,6, а НОД(12, 18)=6, т.е. наибольший из общих делителей. Алгоритм Евклида нахождения НОД основан на следующих свойствах этой величины. Пусть m и n - одновременно не равные 0 целые неотрицательные числа и пусть m>=n. Тогда, если n=0, то НОД (n,m)=m; а если n<>0, то для чисел m,n,r, где r - остаток от деления m на n, выполняется равенство НОД (m,n) = НОД (n,r). Например, НОД (15,6) = НОД (6,3) = НОД (3,0) = 3 Моя версия такова:
m = TextBox1.Text
        n = TextBox2.Text
 
        If m >= n And n <> 0 Then
            Do While r <> 0
                r = m Mod n
                If r = 0 Then
                    nod = n
                Else
                    m = n And n = r
                End If
            Loop
        Else
            Do While r <> 0
                r = n Mod m
                If r = 0 Then
                    nod = m
                Else
                    n = m And m = r
                End If
            Loop
        End If
        Label5.Text = "НОД:" & nod
Задача 2Для данного действительного числа a, найти такое наименьшее n, что 1 + 1/2 + … +1/n > a. Рекомендации Суть задания в том, что нужно вычислять сумму 1 + 1/2 + … +1/n до тех пор, пока она меньше или равна a. Выходные данные - не значение суммы, а значение перменной n, при котором сумма 1 + 1/2 + … +1/n стала больше a. Для решения задачи удобно использовать цикл с пост-условием. с этим заданием совсем плохо справилась... не пойму как определить n, посчитать сумму могоу... ну вот мой вариант:
er = "Ошибка ввода данных!"
 
        If IsNumeric(TextBox3.Text) = True Then
            a = TextBox3.Text
 
            res = 0
            i = 1
            Do
                res = res + 1 / i
                i = i + 1
            Loop While res <= a
            m = i + 1
            Label13.Text = m
        Else
            Label13.Text = er
        End If
Задача 3:Вычислить сумму с заданной точностью e(e вводится с клавиатуры). Считать, что требуемая точность достигнута, если очередное слагаемое оказалось по модулю меньше, чем e. С этим совсем туго.... Заранее благодарна!!!

Код к задаче: «Используя алгоритм Евклида, найти наибольший общий делитель (НОД) - VB»

textual
Private Sub Command1_Click()
Dim m, n, r
m = CInt(Text1)
n = CInt(Text2)
r = 1
If m >= n And n <> 0 Then
Do While r <> 0
r = (m Mod n)
If r = 0 Then
nod = n
GoTo line1
Else
m = n
n = r
End If
Loop
Else
Do While r <> 0
r = n Mod m
If r = 0 Then
nod = m
Else
n = m And m = r
End If
Loop
End If
line1:
Label1 = "НОД:" & nod
End Sub

5   голосов, оценка 3.800 из 5


СОХРАНИТЬ ССЫЛКУ