Форум программистов и сисадминов CyberForum.ru
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум Форум программистов > Форум Basic > Форум Visual Basic
Восстановить пароль Регистрация

Ответ Создать новую тему
 
Старый 16.03.2010, 21:33   #1
lisov
Новичок
 
Аватар для lisov
 
Регистрация: 16.03.2010
Сообщений: 11
Репутация: 0 (0)
Используя алгоритм Евклида, найти наибольший общий делитель (НОД) / Visual Basic

Дорогие программисты! Не могу справиться с задачками! Буду благодарна за помощь или подсказку!

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

Моя версия такова:
Код Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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, посчитать сумму могоу... ну вот мой вариант:

Код Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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.

С этим совсем туго....

Заранее благодарна!!!
Лучшие ответы (1)
Старый 17.03.2010, 00:23   #2
YuraAAA
Форумчанин
 
Аватар для YuraAAA
 
Регистрация: 25.10.2009
Сообщений: 1,545
Репутация: 707 (625)
Лучшие ответы: 26
1.1 Алгоритм Эвклида. Задача сделана в VB 6.0 и полностью рабочая
Код Visual Basic
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
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
Добавлено через 9 минут
2.Ну как бы так)
Код Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Command1_Click()
Dim A As Single, res As Single
Dim n, minN
A = Text1
n = 1
minN = 1
res = 0
Do While res <= A
res = res + 1 / n
minN = n
n = n + 1
Loop
MsgBox minN
End Sub
Добавлено через 58 секунд
Цитата Сообщение от lisov Посмотреть сообщение
Вычислить сумму с заданной точностью e(e вводится с клавиатуры). Считать, что требуемая точность достигнута, если очередное слагаемое оказалось по модулю меньше, чем e.
Сумму чего ?) Какого-то натурального числа N ?)
Другие темы раздела Форум программистов Visual Basic. Программирование на Visual Basic. Помощь в решении задач.
Visual Basic программа в visual basic
дано колесо,на нём точка,при касании с поверхностью она должна оставлять отпечаток и траекторию,и так при каждом касании...(колесо должно двигаться) заранее спасибо.
Visual Basic Считание времени
Бейсико-знающие Помогите пожалуйста, у меня такая фигня: Я ваяю на VB6 одну программку которая считает время с включения компа. эта есть проблема: мне нужно чтобы он считал время с какого-то времени, например: Dim Время as intiger Sub form_load () время=time lbl1.caption=время + time end...
Старый 17.03.2010, 14:17  [ТС]   #3
lisov
Новичок
 
Аватар для lisov
 
Регистрация: 16.03.2010
Сообщений: 11
Репутация: 0 (0)
YuraAAA, спасибо за ответы!!!!

А по поводу 3 задачи - там выражение не скопировалось! А я по незнанию не глянула!
пишу ещё раз:

3. Вычислить сумму (значок суммы от 0 до бесконечности 1/(4^i + 5^(i+2)) ) с заданной точностью e(e вводится с клавиатуры). Считать, что требуемая точность достигнута, если очередное слагаемое оказалось по модулю меньше, чем e.
Старый 17.03.2010, 16:04   #4
YuraAAA
Форумчанин
 
Аватар для YuraAAA
 
Регистрация: 25.10.2009
Сообщений: 1,545
Репутация: 707 (625)
Лучшие ответы: 26
ааа,понятно) ну сейчас посмотрю

Добавлено через 18 минут
Код Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Command1_Click()
Dim y As Single, ySum As Single
Dim i, e
If IsNumeric(Text1) = False Then
MsgBox ("Vvedite 4islo!")
Exit Sub
End If
e = Text1
i = 0
y = 1 / (4 ^ 0 + 5 ^ (0 + 2))
Do While Abs(y) >= e
y = 1 / (4 ^ i + 5 ^ (0 + 2))
ySum = ySum + y
i = i + 1
Loop
MsgBox (ySum)
End Sub
Ну вот так,на сколько я понял =)
Старый 17.03.2010, 23:28  [ТС]   #5
lisov
Новичок
 
Аватар для lisov
 
Регистрация: 16.03.2010
Сообщений: 11
Репутация: 0 (0)

Спасибо большое!
Старый 17.03.2010, 23:28
Yandex
Объявления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Автор
С++ для начинающих Найти наибольший общий делитель (НОД) двух введенных натуральных чисел, используя алгоритм Евклида
Найти наибольший общий делитель (НОД) двух введенных натуральных чисел, используя алгоритм Евклида. Алгоритм Евклида: вычитаем числа меньшее до тех число и есть НОД
vitalik-botanik
С++ для начинающих наибольший общий делитель (НОД) двух целых положительных чисел A и B, используя алгоритм Евклида:
Описать функцию NOD2(A, B) целого типа, находящую наибольший общий делитель (НОД) двух целых положительных чисел A и B, используя алгоритм Евклида: НОД(A, B) = НОД(B, A mod B), если B ≠ 0; НОД(A, 0) = A. С помощью этой функции найти наибольшие общие делители пар (A, B), (A, C), (A, D), если даны...
Ejevikka
С++ для начинающих Найти наибольший общий делитель (НОД), используя алгоритм Евклида
Даны целые положительные числа A и B. Найти их наибольший об-щий делитель (НОД), используя алгоритм Евклида: НОД(A, B) = НОД(B, A mod B), если B ≠ 0; НОД(A, 0) = A. Решите на С++, спасибо заранее.
Маша Болдина
C для начинающих наибольший общий делитель(НОД) двух целых положительных чисел А и В,используя алгоритм Евклида
Описать функцию NOD2(A,B) целого типа,находящую наибольший общий делитель(НОД) двух целых положительных чисел А и В,используя алгоритм Евклида: НОД(А,В)=НОД(В,А modB), если В не равно 0; НОД(А,0)=А. С помощью этой функции найти наибольшие общие делители пар (А,В),(А,С),(А,D),если даны числа...
Бо
С++ для начинающих Описать функцию NOD2(A,B) целого типа,находящую наибольший общий делитель(НОД) двух целых положительных чисел А и В,используя алгоритм Евклида:....
Описать функцию NOD2(A,B) целого типа,находящую наибольший общий делитель(НОД) двух целых положительных чисел А и В,используя алгоритм Евклида: НОД(А,В)=НОД(В,А modB), если В не равно 0; НОД(А,0)=А. С помощью этой функции найти наибольшие общие делители пар (А,В),(А,С),(А,D),если...
Бо
Опции темы

Текущее время: 08:11. Часовой пояс GMT +4.

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.