Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ
Факультет «Радио и телевидение»
Кафедра «Системы и сети радиосвязи и телерадиовещания»
Лабораторная работа № 6
по дисциплине «Информационные технологии и программирование»
«Основы объектно-ориентированного программирования»
Выполнил:
Вариант №13
Цель работы
Освоить основные принципы и понятия объектно-ориентированного программирования. Научиться создавать простые классы, создавать конструкторы, перегружать операции, создавать объекты классов и передавать их в функции.
Задание
Выберите для выполнения лабораторной работы свой вариант. В разрабатываемом классе перегрузите потоковые операции для объектов класса. Для выполнения задания предложенного варианта перегрузите необходимые математические операции. При разработке класса вашего варианта учтите индивидуальные уточнения для функций – членов класса.
Разработайте для объектов вашего класса предложенные в каждом варианте пользовательские функции.
Разработайте программу, организующую ввод данных и демонстрацию работы разработанных функций.
Составьте отчет о проделанной работе, который должен включать: цель работы, вариант задания, текст программы (листинг и скриншот) и результат выполнения программы (в виде скриншота).
В соответствии с Вашим вариантом разработать класс. Название класса, приватные данные-члены и необходимые публичные функции-члены указаны в таблице 1.
Индивидуальные варианты функций приведены в Таблице 2.
Вариант выбирается по номеру студента в списке группы, актуальном на начало текущего семестра.
Для всех вариантов необходимо перегрузить арифметические операции.
Составить пользовательскую функцию y, указанную в индивидуальном задании и необходимые вспомогательные функции.
Следует отметить, что для работы с дробями в языке имеется готовый тип Fraction в модуле fractions, однако не следует его применять в данной лабораторной работе. Для работы с комплексными числами также не следует использовать готовые типы и классы, так как задачей данной работы является освоение принципов объектно-ориентированного программирования путем написания собственных классов.
Рисунок 1 – вариант задания
Рисунок 2 – вариант функции
Ход работы
Программа для выполнения задания:
def NOD(a, b):
if int(a) == a and int(b) == b:
if b < a:
while b != 0:
r = a % b
a = b
b = r
return a
else:
while a != 0:
r = b % a
b = a
a = r
return b
return 1
class Rational:
def __init__(self, nom, denom):
while nom != int(nom) or denom!= int(denom):
nom *= 10
denom *= 10
self.nom = nom / NOD(nom, denom)
self.denom = denom / NOD(nom, denom)
def __add__(self, other): return Rational(self.nom*other.denom + self.denom*other.nom, self.denom*other.denom)
def __sub__(self, other): return Rational(self.nom * other.denom - self.denom * other.nom, self.denom * other.denom)
def flip(self): return Rational(self.denom, self.nom)
def __mul__(self, other): return Rational(self.nom*other.nom, self.denom*other.denom)
def print_r(self):
if self.nom * self.denom > 0: print(self.nom, '/', self.denom, sep='')
else: print('-', abs(self.nom), '/', abs(self.denom), sep='')
variant = int(input('Если ваш х - обыкновенная дробь, введите 1. Если десятичная, введите 0: '))
match variant:
case 0:
nom = float(input('Введите ваше число: '))
denom = 1
case 1:
nom, denom = map(float, input('Введите числитель и знаменатель вашей дроби через пробел: ').split())
x = Rational(nom, denom)
y = Rational(3, 7) + Rational(5, 11) * x - Rational(5, 2) * x.flip()
y.print_r()
Конец программы
Рисунок 3 – результат выполнения работы для х = 1/2
Рисунок 4 – результат выполнения работы для х = 0,05
Вывод:
В ходе данной работы научились объектно-ориентированное программирование в python, использовали классы и объекты, а также уже изученные функции.
Таким образом, для определения собственных типов, помимо встроенных, удобно использовать объектно-ориентированное программирование.
Москва 2024
