Содержание
- Контракты кода
- Пред- и постусловия
- Операторы присваивания, композиции, ветвления, цикла
- Стратегии доказательств
- Контракты функций
- Чистые функции
- Хранимое состояние и инварианты
Примеры
zipДомашнее задание 1. Обработка ошибок
-
Добавьте в программу, вычисляющую выражения, обработку ошибок, в том числе:
- ошибки разбора выражений;
- ошибки вычисления выражений.
-
Для выражения
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) означает, что в процессе вычисления произошло деление на ноль (переполнение). - При выполнении задания следует обратить внимание на дизайн и обработку исключений.
- Человеко-читаемые сообщения об ошибках должны выводиться на консоль.
- Программа не должна «вылетать» с исключениями (как стандартными, так и добавленными).
Домашнее задание 2. Вычисление в различных типах
Добавьте в программу разбирающую и вычисляющую выражения трех переменных поддержку вычисления в различных типах.
Создайте класс
expression.generic.GenericTabulator, реализующий интерфейсexpression.generic.Tabulator:public interface Tabulator { Object[][][] tabulate( String mode, String expression, int x1, int x2, int y1, int y2, int z1, int z2 ) throws Exception; }Аргументы
mode— режим работыРежим Тип iintс детекцией переполненийddoublebiBigIntegerexpression— вычисляемое выражение;x1,x2;y1,y2;z1,z2— диапазоны изменения переменных (включительно).
Возвращаемое значение — таблица значений функции, где
R[i][j][k]соответствуетx = x1 + i,y = y1 + j,z = z1 + k. Если вычисление завершилось ошибкой, в соответствующей ячейке должен бытьnull.-
Доработайте интерфейс командной строки:
-
Первым аргументом командной строки программа должна принимать указание
на тип, в котором будут производиться вычисления:
Опция Тип -iintс детекцией переполнений-ddouble-biBigInteger - Вторым аргументом командной строки программа должна принимать выражение для вычисления.
- Программа должна выводить результаты вычисления для всех целочисленных значений переменных из диапазона −2..2.
-
Первым аргументом командной строки программа должна принимать указание
на тип, в котором будут производиться вычисления:
- Реализация не должна содержать непроверяемых преобразований типов.
-
Реализация не должна использовать аннотацию
@SuppressWarnings. - При выполнении задания следует обратить внимание на простоту добавления новых типов и операций.
Домашнее задание 3. Бинарный поиск
- Реализуйте итеративный и рекурсивный варианты бинарного поиска в массиве.
-
На вход подается целое число
xи массив целых чиселa, отсортированный по невозрастанию. Требуется найти минимальное значение индексаi, при которомa[i] <= x. -
Для
main, функций бинарного поиска и вспомогательных функций должны быть указаны, пред- и постусловия. Для реализаций методов должны быть приведены доказательства соблюдения контрактов в терминах троек Хоара. -
Интерфейс программы.
- Имя основного класса —
search.BinarySearch. - Первый аргумент командной строки — число
x. - Последующие аргументы командной строки — элементы массива
a.
- Имя основного класса —
-
Пример запуска:
java search.BinarySearch 3 5 4 3 2 1. Ожидаемый результат:2.