36. Класс Точка на плоскости37. Класс Вектор на плоскости38. Класс Рациональное число

36. Класс Точка на плоскости

Ссылка для тренировки

С++

Создайте класс Point реализующий идею точки на плоскости. Внутренняя реализация класса на ваше усмотрение.

В качестве обязательных членов должны присутствовать:

  1. Конструкторы:

    • Конструктор с тремя параметрами a1 и a2 типа double и coord_system типа перечисление состоящее из двух значений: Cartesian и Polar. Если третий параметр задан как Cartesian, то параметры a1 и a2 являются координатами x и y декартовой системы координат, если третий параметр задан как Polar, то a1 и a2 это r и полярной системы координат соответственно ( везде задаётся в радианах). Параметр coord_system имеет значение по умолчанию Cartesian, а a1 и a2 по умолчанию нули.
  2. Деструктор. Т.к. класс динамически нечего не создаёт деструктор можно не объявлять.

  3. Операторы == и !=. Сравнивает два объекта класса Point на равенство/не равенство, при этом не играет роли в какой системе координат задавались координаты точки при создании. Если отклонение по каждой координате не превышает 10-10, то считается что это одна и та же точка.

  4. Оператор <<. Выводит координаты точки в поток в виде строки в формате: "(X,Y)", где X и Y заменяются на значение координат точки x и y в декартовой системе координат.

  5. Оператор >>. Считывает координаты точки из потока в виде строки в формате: "(X,Y)", где X и Y координаты точки x и y в декартовой системе координат.

  6. Методы get_x и get_y возвращающие координаты точки в декартовой системе координат;

  7. Методы get_r и get_phi возвращающие координаты точки в полярной системе координат;

  8. Методы set_x и set_y устанавливающие новое значение соответствующей координаты точки в декартовой системе координат;

  9. Методы set_r и set_phi устанавливающие новое значение соответствующей координаты точки в полярной системе координат;

Используйте код представленный ниже и этот файл для проверки правильности реализации класса и операторов. Класс можно описать тут же или подключить как отдельный файл (он пригодится в следующем задании).

Python

По аналогии с заданием для С++ реализуйте класс Point.

В качестве обязательных членов должны присутствовать:

  1. Метод __init__. Кроме self должен принимать ещё три параметра: a1 и a2 и coord_system:

    1. Если аргумент a1 - это строка, то остальные аргументы игнорируются, а сама строка парсится исходя из того, что она в формате: "(X,Y)", где X и Y вещественные координаты точки x и y в декартовой системе координат.
    2. Если аргумент a1 - это число, то смотрим на аргумент coord_system. Он может принимать да значения: Cartesian и Polar. Если он задан как Cartesian, то аргументы a1 и a2 являются координатами x и y декартовой системы координат, если coord_system задан как Polar, то a1 и a2 это r и полярной системы координат соответственно ( везде задаётся в радианах). По умолчаниюcoord_system задан как Cartesian, а a1 и a2 по умолчанию нули.
  2. Финализатор. Можно не объявлять.

  3. Операторы == (метод __eq__) и != (метод __ne__). Сравнивает два объекта класса Point на равенство/не равенство, при этом не играет роли в какой системе координат задавались координаты точки при создании. Если отклонение по каждой координате не превышает 10-10, то считается что это одна и та же точка.

  4. Методы __repr__ и __str__. Преобразуют объект класса Point в строку в формате: "(X,Y)", где X и Y заменяются на значение координат точки x и y в декартовой системе координат.

  5. Методы get_x и get_y возвращающие координаты точки в декартовой системе координат;

  6. Методы get_r и get_phi возвращающие координаты точки в полярной системе координат;

  7. Методы set_x и set_y устанавливающие новое значение соответствующей координаты точки в декартовой системе координат;

  8. Методы set_r и set_phi устанавливающие новое значение соответствующей координаты точки в полярной системе координат;

Используйте код представленный ниже и этот файл для проверки правильности реализации класса и операторов. Класс можно описать тут же или подключить как отдельный файл (он пригодится в следующем задании).

Формат ввода
Файл с данными в формате: набор Точек разделённые двумя символами: запятая и пробел. Каждая точка задана в ПДСК в формате: открывающая круглая скобка, координата X, запятая, координата Y, закрывающая круглая скобка. Точки образуют фигуру.

Формат вывода
Вывод должен заканчиваться на "It works!", что свидетельствует о том, что класс написан правильно. Если вывод заканчивается на "It not works!", значите в классе есть ошибки.

 

37. Класс Вектор на плоскости

Ссылка для тренировки (Скоро)

С++

Создайте класс Vector реализующий идею вектора на плоскости. Внутренняя реализация класса на ваше усмотрение.

В качестве обязательных членов должны присутствовать:

  1. Конструкторы (НЕ совмещать):

    • Конструктор по умолчанию. Конструктор создаёт вектор единичной длины в направлении оси .
    • Конструктор с одним параметром. Параметр end - это объект класса Point (задание 36). Конструктор создаёт вектор направленный из начала координат в точку end.
    • Конструктор с двумя параметрами. Параметры - begin и end - это объекты класса Point. Конструктор создаёт вектор направленный из begin в end.
  2. Деструктор. Т.к. класс динамически нечего не создаёт можно не объявлять свой деструктор.

  3. Оператор ==. Сравнивает два объекта класса Vector на равенство. Точность сравнения 10-10.

  4. Оператор унарный -. Возвращает новый вектор направление которого противоположно направлению вектора к которому применяется оператор.

  5. Оператор бинарный +. Левый и правый операнды класса Vector. Возвращает новый вектор являющийся покомпонентной суммой левого и правого операндов.

  6. Оператор бинарный -. Левый и правый операнды класса Vector. Возвращает новый вектор являющийся покомпонентной разностью левого и правого операндов.

  7. Оператор бинарный *. Левый операнд класса Vector, правый типа double. Возвращает новый вектор компоненты которого умножены на правый операнд.

  8. Метод length. Метод не принимает параметров и возвращает длину вектора;

  9. Оператор бинарный *. Левый и правый операнды класса Vector. Возвращает вещественное число вычисляющееся как скалярное произведение векторов-операндов.

Используйте код представленный ниже для проверки правильности реализации класса. Рекомендуется закомментировать все тесты и "открывать" их по одному, по мере выполнения задания.

Python

По аналогии с заданием для С++ реализуйте класс Vector.

В качестве обязательных членов должны присутствовать:

  1. Метод __init__. Кроме self должен принимать ещё два параметра: begin и end - экземпляры класса Point из задания 36:

    • Если аргументы не заданы, то создаётся вектор единичной длины в направлении оси .
    • Если задан один аргумент, создаётся вектор направленный из начала координат в точку переданную в качестве параметра.
    • Если заданы оба аргументаbegin и end, то создаётся вектор направленный из begin в end.
  2. Финализатор. Можно не объявлять.

  3. Метод __eq__ (оператор ==). Сравнивает два объекта класса Vector на равенство. Точность сравнения 10-10.

  4. Метод __neg__ (унарный -). Возвращает новый вектор направление которого противоположно направлению вектора к которому применяется оператор.

  5. Метод __add__ (бинарный +). Левый и правый операнды класса Vector. Возвращает новый вектор являющийся покомпонентной суммой левого и правого операндов.

  6. Метод __sub__ (бинарный -). Левый и правый операнды класса Vector. Возвращает новый вектор являющийся покомпонентной разностью левого и правого операндов.

  7. Метод __mul__ (бинарный *). Левый операнд класса Vector, правый типа double. Возвращает новый вектор компоненты которого умножены на правый операнд.

  8. Метод length. Метод не принимает параметров и возвращает длину вектора;

  9. Метод __mul__ (бинарный *). Левый и правый операнды класса Vector. Возвращает вещественное число вычисляющееся как скалярное произведение векторов-операндов.

Используйте код представленный ниже для проверки правильности реализации класса. Рекомендуется закомментировать все тесты и "открывать" их по одному, по мере выполнения задания.

Формат ввода
Ввода нет.

Формат вывода
Все тесты должны быть пройдены (passed). Если хотя бы один тест не пройден (failed), то класс реализован не правильно.

 

38. Класс Рациональное число

Ссылка для тренировки (Скоро)

С++

Создайте класс Rational реализующий идею рационального числа. Внутренняя реализация класса на ваше усмотрение.

В качестве обязательных членов должны присутствовать:

  1. Конструкторы:

    • Конструктор по умолчанию. Конструктор создаёт рациональное число инициализированное нулём;
    • Конструктор с двумя параметрами типа int . Конструктор принимает параметр a и b и создаёт рациональное число инициализированное .
  2. Деструктор. По необходимости.

  3. Статический член класса gcd принимающий два целых числа и возвращающий наибольший общий делитель.

  4. Оператор ==. Сравнивает два объекта класса Rational на равенство.

  5. Оператор бинарный +. Левый и правый операнды класса Rational. Возвращает рациональное число являющееся суммой левого и правого операндов.

  6. Оператор бинарный -. Левый и правый операнды класса Rational. Возвращает рациональное число являющееся разностью левого и правого операндов.

  7. Оператор бинарный *. Левый и правый операнды класса Rational. Возвращает рациональное число являющееся произведением левого и правого операндов.

  8. Оператор бинарный /. Левый и правый операнды класса Rational. Возвращает рациональное число являющееся частным левого и правого операндов.

  9. Операторы преобразования к типам:

    • double - возвращает вещественное число соответствующее рациональному;
    • bool - возвращает false если число равно нулю и true в остальных случаях;
  10. Метод numerator - возвращающий числитель;

  11. Метод denominator - возвращающий знаменатель;

  12. Метод isNaN - возвращающий true, если число соответствует и false в противном случае. Обратите внимание NaN, с точки зрения математики - это неопределённое число, то есть любое. Поэтому он не равен ни чему, даже самому себе.

Используйте код представленный ниже для проверки правильности реализации класса.

Python

По аналогии с заданием для С++ реализуйте класс Rational.

В качестве обязательных членов должны присутствовать:

  1. Метод __init__. Кроме self должен принимать ещё два параметра: numerator и denominator - целые числа:

    • Если аргументы не заданы. То создаётся рациональное число инициализированное нулём;
    • Если задан только numerator. То создаётся рациональное число инициализированное .
    • Если заданы оба аргумента. То создаётся рациональное число инициализированное .
  2. Финализатор. По необходимости.

  3. Статический метод gcd принимающий два целых числа и возвращающий наибольший общий делитель.

  4. Метод __eq__ (оператор ==). Сравнивает два объекта класса Rational на равенство.

  5. Метод __add__ (бинарный +). Левый и правый операнды класса Rational. Возвращает рациональное число являющееся суммой левого и правого операндов.

  6. Метод __sub__ (бинарный -). Левый и правый операнды класса Rational. Возвращает рациональное число являющееся разностью левого и правого операндов.

  7. Метод __mul__ (оператор *). Левый и правый операнды класса Rational. Возвращает рациональное число являющееся произведением левого и правого операндов.

  8. Метод __truediv__ (оператор /). Левый и правый операнды класса Rational. Возвращает рациональное число являющееся частным левого и правого операндов.

  9. Операторы преобразования к типам:

    • __float__ - возвращает вещественное число соответствующее рациональному;
    • __bool__ - возвращает false если число равно нулю и true в остальных случаях;
  10. Метод numerator - возвращающий числитель;

  11. Метод denominator - возвращающий знаменатель;

  12. Метод isNaN - возвращающий True, если число соответствует и False в противном случае. Обратите внимание NaN, с точки зрения математики - это неопределённое число, то есть любое. Поэтому он не равен ни чему, даже самому себе.

Используйте код представленный ниже для проверки правильности реализации класса:

Формат ввода
Ввода нет.

Формат вывода
Все тесты должны быть пройдены (passed). Если хотя бы один тест не пройден (failed), то класс реализован не правильно.