Содержание
- Контракты кода
- Пред- и постусловия
- Операторы присваивания, композиции, ветвления, цикла
- Стратегии доказательств
- Контракты функций
- Чистые функции
- Хранимое состояние и инварианты
Примеры
zipДомашнее задание 1. Обработка ошибок
-
Разработайте классы
Checked*, выполняющие соответствующие операции с проверкой на переполнения и неверные аргументы. -
Добавьте в программу, вычисляющую выражения,
обработку ошибок, в том числе:
- ошибки разбора выражений;
- ошибки вычисления выражений.
-
Для выражения
1000000*x*x*x*x*x/(x-1)вывод программы должен иметь следующий вид:x f 0 0 1 division by zero 2 32000000 3 121500000 4 341333333 5 overflow 6 overflow 7 overflow 8 overflow 9 overflow 10 overflow
Результатdivision by zero(overflow) означает, что в процессе вычисления произошло деление на ноль (переполнение). - При выполнении задания следует обратить внимание на дизайн и обработку исключений.
- Человеко-читаемые сообщения об ошибках должны выводиться на консоль.
- Программа не должна «падать» с исключениями (как стандартными, так и добавленными).
-
Код должен находиться в пакете
expression.exceptions.
Домашнее задание 2. Бинарный поиск
- Реализуйте итеративный и рекурсивный варианты бинарного поиска в массиве.
-
На вход подается целое число
xи массив целых чиселa, отсортированный по невозрастанию. Требуется найти минимальное значение индексаi, при которомa[i] ≤ x. -
Для
main, функций бинарного поиска и вспомогательных функций должны быть указаны, пред- и постусловия. Для реализаций методов должны быть приведены доказательства соблюдения контрактов в терминах троек Хоара. -
Интерфейс программы.
- Имя основного класса —
search.BinarySearch. - Первый аргумент командной строки — число
x. - Последующие аргументы командной строки — элементы массива
a.
- Имя основного класса —
-
Пример запуска:
java search.BinarySearch 3 5 4 3 2 1. Ожидаемый результат:2.
Библиография
- Дейкстра Э. Дисциплина программирования
- Мейер Б. Объектно-ориентированное конструирование программных систем
- Hoare C. An axiomatic basis for computer programming