
- •Сборник типовых расчетов по курсу Практикум на эвм
- •Введение
- •1. Решение задач
- •1.1. Решение примерного варианта Вариант №0
- •1.2. Решение некоторых стандартных задач
- •1.2.1. Наибольший общий делитель
- •1.2.2. Наименьшее общее кратное
- •1.2.3. Разложение на простые множители
- •1.2.4. Вывод календаря
- •2. Задания для типового расчета Вариант №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
- •Список литературы
1.2. Решение некоторых стандартных задач
Рассмотрим некоторые стандартные задачи, встречающиеся во многих вариантах.
1.2.1. Наибольший общий делитель
Дадим определения наибольшего общего делителя (НОД) и разработаем алгоритм для его вычисления.
Наибольшим общим делителем двух натуральных чисел a и b, называется третье натуральное число c, на которое делятся оба этих числа.
В учебнике для учащихся 6 классов, дан алгоритм вычисления НОД двух чисел:
1) Разложить оба числа на простые множители. Т.е. на произведение простых чисел.
2) Из множителей, входящих в разложение одного из чисел, вычеркнуть те, которые не входят в разложение другого числа.
3) Найти произведение оставшихся множителей в первом числе.
Например, найдем НОД двух чисел: 72 и 20. Для краткости будем обозначать - НОД(72, 20).
1. 72=22233, 20=225.
2. Из первого числа вычеркиваем 2, 3 и 3. Из второго числа вычеркиваем 5.
3. 22=4.
Данный алгоритм является относительно сложным для программирования. Рассмотрим один из более простых алгоритмов - алгоритм Евклида. Он основан на следующих трех свойствах НОД.
1. НОД(a, b) = НОД(b,a).
2. НОД(a, a) = 1.
3. Если a>b, то НОД(a, b) = НОД(a-b, b).
По этому алгоритму НОД(72,20) = НОД(72-20,20) = НОД(52,20) = = НОД(32,20) = НОД(12,20) = НОД(12,8) = НОД(4,8) = НОД(4,4) =4.
Напишем теперь функцию, реализующую алгоритм Евклида.
Function НОД(ByVal a As Long, ByVal b As Long) As Long
While a <> b
If a > b Then a = a - b Else b = b - a
Wend
НОД = a
End Function
Внутри данной функции формальные параметры a и b изменяются. Поэтому они должны иметь атрибуты byVal, т.е. должны передаваться по значению, а не по ссылке, как предусмотрено по умолчанию.
Напишем теперь простейшую программу для тестирования приведенной выше функции.
Sub testНОД()
Dim a As Long, b As Long, c As Long
a = 72: b = 20: c = НОД(a, b)
MsgBox ("НОД(" + Str(a) + "," + Str(b) + ")=" + Str(c))
End Sub
Программа выводит в стандартное окно: НОД(72, 20) = 4.
Если из заглавия функции убрать атрибуты параметров byVal, то вывод программы будет следующим: НОД(4, 4) = 4.
1.2.2. Наименьшее общее кратное
Наименьшим общим кратным натуральных чисел a и b называют наименьшее натуральное число, которое кратно и a и b.
В том же учебнике по математике приведен следующий алгоритм:
1. Разложить оба числа на простые множители.
2. Выписать множители, входящие в разложение одного из чисел.
3. Добавить к ним недостающие множители из разложения другого числа.
4. Найти произведение получившихся множителей.
Пример. НОК(72,20).
1) 72=22233, 20=225.
2) НОК(72,20)= 22233.
3) НОК(72,20)= 222335.
4) НОК(72,20)= 360.
Опять же, данный алгоритм относительно сложный для программирования. Учитывая, что компьютер выполняет арифметические операции в миллионы раз быстрее человека, проще применить следующий алгоритм:
1) c=max(a, b).
2) Если c без остатка делится на b, то НОК(a, b) = c и выход из функции.
3) c = c + b. Перейти на пункт 2.
4) Напишем теперь функцию НОК - реализующую предложенный алгоритм.
' НОК -- русскими буквами
Function НОК(ByVal a As Long, ByVal b As Long) As Long
Dim c As Long
If a > b Then c = a Else c = b
While (c Mod b) <> 0
c = c + a
Wend
НОК = c
End Function
Для тестирования написанной функции применим предыдущую тестирующую программу, изменив только названия программы и функции.
Sub testНОК()
Dim a As Long, b As Long, c As Long
a = 72: b = 20: c = НОК(a, b)
MsgBox ("НОК(" + Str(a) + "," + Str(b) + ")=" + Str(c))
End Sub