Домашнее задание 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.
Домашнее задание 3. Очередь на массиве
-
Определите модель и найдите инвариант структуры данных
«очередь».
- Определите функции, которые необходимы для реализации очереди.
-
Найдите их пред- и постусловия, если очередь не может содержать
null.
-
Реализуйте классы, представляющие циклическую очередь
на основе массива.
-
Класс
ArrayQueueModuleдолжен реализовывать один экземпляр очереди с использованием переменных класса. -
Класс
ArrayQueueADTдолжен реализовывать очередь в виде абстрактного типа данных (с явной передачей ссылки на экземпляр очереди). -
Класс
ArrayQueueдолжен реализовывать очередь в виде класса (с неявной передачей ссылки на экземпляр очереди). -
Должны быть реализованы следующие функции (процедуры) / методы:
enqueue– добавить элемент в очередь;element– первый элемент в очереди;dequeue– удалить и вернуть первый элемент в очереди;size– текущий размер очереди;isEmpty– является ли очередь пустой;clear– удалить все элементы из очереди.
- Модель, инвариант, пред- и постусловия записываются в исходном коде в виде комментариев.
- Обратите внимание на инкапсуляцию данных и кода во всех трех реализациях.
-
Класс
- Напишите простые тесты к реализованным классам.
Домашнее задание 4. Очереди
-
Определите интерфейс очереди
Queueи опишите его контракт. -
Реализуйте класс
LinkedQueue— очередь на связном списке. -
Выделите общие части классов
LinkedQueueиArrayQueueв базовый классAbstractQueue.
Это домашнее задание связано с предыдущим.
Домашнее задание 5. Вычисление в различных типах
Добавьте в программу разбирающую и вычисляющую выражения трех переменных поддержку вычисления в различных типах.
Создайте класс
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. - При выполнении задания следует обратить внимание на простоту добавления новых типов и операций.