Домашнее задание 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
— режим работыРежим Тип i
int
с детекцией переполненийd
double
bi
BigInteger
expression
— вычисляемое выражение;x1
,x2
;y1
,y2
;z1
,z2
— диапазоны изменения переменных (включительно).
Возвращаемое значение — таблица значений функции, где
R[i][j][k]
соответствуетx = x1 + i
,y = y1 + j
,z = z1 + k
. Если вычисление завершилось ошибкой, в соответствующей ячейке должен бытьnull
.-
Доработайте интерфейс командной строки:
-
Первым аргументом командной строки программа должна принимать указание
на тип, в котором будут производится вычисления:
Опция Тип -i
int
с детекцией переполнений-d
double
-bi
BigInteger
- Вторым аргументом командной строки программа должна принимать выражение для вычисления.
- Программа должна выводить результаты вычисления для всех целочисленных значений переменных из диапазона −2..2.
-
Первым аргументом командной строки программа должна принимать указание
на тип, в котором будут производится вычисления:
- Реализация не должна содержать непроверяемых преобразований типов.
-
Реализация не должна использовать аннотацию
@SuppressWarnings
. - При выполнении задания следует обратить внимание на простоту добавления новых типов и операций.