Домашние задания

Домашнее задание 1. Обработка ошибок

  1. Разработайте классы Checked*, выполняющие соответствующие операции с проверкой на переполнения и неверные аргументы.
  2. Добавьте в программу, вычисляющую выражения, обработку ошибок, в том числе:
    • ошибки разбора выражений;
    • ошибки вычисления выражений.
  3. Для выражения 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) означает, что в процессе вычисления произошло деление на ноль (переполнение).
  4. При выполнении задания следует обратить внимание на дизайн и обработку исключений.
  5. Человеко-читаемые сообщения об ошибках должны выводиться на консоль.
  6. Программа не должна «падать» с исключениями (как стандартными, так и добавленными).
  7. Код должен находиться в пакете expression.exceptions.

Репозиторий курса

  1. Реализуйте итеративный и рекурсивный варианты бинарного поиска в массиве.
  2. На вход подается целое число x и массив целых чисел a, отсортированный по невозрастанию. Требуется найти минимальное значение индекса i, при котором a[i] ≤ x.
  3. Для main, функций бинарного поиска и вспомогательных функций должны быть указаны, пред- и постусловия. Для реализаций методов должны быть приведены доказательства соблюдения контрактов в терминах троек Хоара.
  4. Интерфейс программы.
    • Имя основного класса — search.BinarySearch.
    • Первый аргумент командной строки — число x.
    • Последующие аргументы командной строки — элементы массива a.
  5. Пример запуска: java search.BinarySearch 3 5 4 3 2 1. Ожидаемый результат: 2.

Домашнее задание 3. Очередь на массиве

  1. Определите модель и найдите инвариант структуры данных «очередь».
    • Определите функции, которые необходимы для реализации очереди.
    • Найдите их пред- и постусловия, если очередь не может содержать null.
  2. Реализуйте классы, представляющие циклическую очередь на основе массива.
    • Класс ArrayQueueModule должен реализовывать один экземпляр очереди с использованием переменных класса.
    • Класс ArrayQueueADT должен реализовывать очередь в виде абстрактного типа данных (с явной передачей ссылки на экземпляр очереди).
    • Класс ArrayQueue должен реализовывать очередь в виде класса (с неявной передачей ссылки на экземпляр очереди).
    • Должны быть реализованы следующие функции (процедуры) / методы:
      • enqueue – добавить элемент в очередь;
      • element – первый элемент в очереди;
      • dequeue – удалить и вернуть первый элемент в очереди;
      • size – текущий размер очереди;
      • isEmpty – является ли очередь пустой;
      • clear – удалить все элементы из очереди.
    • Модель, инвариант, пред- и постусловия записываются в исходном коде в виде комментариев.
    • Обратите внимание на инкапсуляцию данных и кода во всех трех реализациях.
  3. Напишите простые тесты к реализованным классам.

Домашнее задание 4. Очереди

  1. Определите интерфейс очереди Queue и опишите его контракт.
  2. Реализуйте класс LinkedQueue — очередь на связном списке.
  3. Выделите общие части классов LinkedQueue и ArrayQueue в базовый класс AbstractQueue.

Это домашнее задание связано с предыдущим.