54 Глава 3. Структурированные программы
В нашем языке программирования нет теста, который проверял бы
аргументы на неравенство. Поэтому мы включили два специальных
фрагмента (2). В результате их выполнения переменная u содержит
результат сравнения.
Строки (4) содержат обычный шаг алгоритма Евклида, когда от
большего числа отнимается меньшее. Так как вычитание в нашем язы-
ке отсутствует, то мы используем строки (3) для его выполнения.
∗
Задача 3.16. Докажите правильность алгоритма Euclid.
Задача 3.17. Напишите алгоритмы, которые выполняют:
1. умножение двух чисел;
2. нахождение целой части частного двух чисел;
3. нахождение остатка от деления двух чисел;
4. вычисление факториала числа;
5. проверку, является ли число простым,
и докажите их правильность
Естественно, что можно написать много разных алгоритмов, которые
будут вычислять одну и ту же (частичную) функцию.
Определение 3.18. (Эквивалентность алгоритмов) Алгоритмы
A и B называются эквивалентными, если они вычисляют одну и ту
же (частичную) функцию:
Φ
A
= Φ
B
.
Следствие 3.5. Алгоритмы A и B эквивалентны тогда и только то-
гда, когда они имеют одинаковое число аргументов n и для любых
v ∈ ω
n
или Res (A, v) и Res (B, v) одновременно неопределены, или од-
новременно определены и при этом
Res (A, v) = Res (B, v) .
∗
Задача 3.18. Верно ли следующее утверждение:
Если Π
A
(σ) = Π
B
(σ) для любого состояния σ, то A и B эк-
вивалентны?