ИДЗ по ДМиТИ 2023 / ИДЗ 1
.docxПервое задание по алгоритмам над целыми числами
Выполнила Бараева Елизавета гр. 2383
Задача 2a. Обоснуйте и напишите, алгоритм деления на 2 любого целого числа.
1. ПРИМЕРЫ
Вход: 7
Выход: целая часть 3, остаток 1
Вход: -11
Выход: целая часть -6, остаток 1
Вход: 4
Выход: целая часть 2, остаток 0
Вход: -20
Выход: целая часть -10, остаток 0
Общий случай:
Под общий случай подходят все целые числа.
Крайний случай:
Не обнаружено.
2. ВЫСКАЗЫВАНИЯ
Если на вход подается положительное число, то частное и остаток всегда будут положительным.
Если подается отрицательное число, то частное будет отрицательным, а остаток будет положительным.
Если подается 0, то и частное, и остаток будут равны 0.
Если подается четное или нечетное, то остаток будет равен 0 или 1 соответственно.
3. АЛГОРИТМ
r := n; q := 0
ЕСЛИ n > 0 ТО:
ЦИКЛ-ПОКА r - 2 >= 0:
r := r – 2
q := q + 1
КОНЕЦ ЦИКЛА
КОНЕЦ ЕСЛИ
ИНАЧЕ:
ЦИКЛ-ПОКА r < 0:
r := r + 2
q := q - 1
КОНЕЦ ЦИКЛА
КОНЕЦ ИНАЧЕ
Инвариант: n = 2 * q + r
4. ДОКАЗАТЕЛЬСТВО КОРРЕКТНОСТИ АЛГОРИТМА
Метод математической индукции:
База: n = 2 * 0 + r верно
Индукционный переход:
При положительных числах: r → r – 2, q → q + 1
2 * (q + 1) + r – 2 = 2 * q + 2 + r – 2 = 2 * q + r
При неотрицательных числах: r → r + 2, q → q – 1
2 * (q – 1) + r + 2 = 2 * q – 2 + r + 2 = 2 * q + r
5. ТЕСТИРОВАНИЕ
