Главная страница

аа. Документ Microsoft Word. Лабораторная работа ооп." , "cell type" "code", "execution count"


Скачать 44.82 Kb.
НазваниеЛабораторная работа ооп." , "cell type" "code", "execution count"
Дата24.01.2021
Размер44.82 Kb.
Формат файлаdocx
Имя файлаДокумент Microsoft Word.docx
ТипЛабораторная работа
#171014
страница4 из 4
1   2   3   4

"collapsed": 'true'

},

"outputs": [

{

"output_type": "stream",

"name": "stdout",

"text": [

"(2, 3)\n6 4\n"

]

}

],

"source": [

"class Pair():\n",

" def __init__(self, a, b):\n",

" self.a = a\n",

" self.b = b\n",

" \n",

" def set_a(self, a):\n",

" self.a = a\n",

" \n",

" def set_b(self, b):\n",

" self.b = b\n",

"\n",

" def print(self):\n",

" print(f'({self.a}, {self.b})')\n",

" \n",

" def sum(self):\n",

" return self.a + self.b\n",

" \n",

" def max(self):\n",

" return self.a if self.a > self.b else self.b\n",

" \n",

"p = Pair(2, 3)\n",

"p.print()\n",

"p.set_a(4)\n",

"p.set_b(2)\n",

"print(p.sum(), p.max())"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"# Задание №2. "

]

},

{

"cell_type": "markdown",

"metadata": {

"collapsed": 'true'

},

"source": [

"Составить описание класса многочленов от одной переменной, задаваемых степенью многочлена и массивом коэффициентов. Предусмотреть методы для вычисления значения многочлена для заданного аргумента, операции сложения, вычитания и умножения многочленов с получением нового объекта-многочлена, вывод на экран описания многочлена."

]

},

{

"cell_type": "code",

"execution_count": 2,

"metadata": {

"collapsed": 'true'

},

"outputs": [

{

"output_type": "stream",

"name": "stdout",

"text": [

"57\n28\n3*x^0 + 5*x^1 + 8*x^2 \n-1*x^0 + -1*x^1 + -2*x^2 \n3*x^0 + 8*x^1 + 16*x^2 + 13*x^3 + 8*x^4 \n"

]

}

],

"source": [

"class Polynom():\n",

" def __init__(self, coef):\n",

" self.coef = coef\n",

"\n",

" def f(self, x):\n",

" y = 0\n",

" for i in range(len(self.coef)):\n",

" y += (x ** i) * self.coef[i]\n",

" \n",

" return y\n",

" \n",

" def __add__(self, other):\n",

" polynom = []\n",

" for i in range(max(len(other.coef), len(self.coef))):\n",

" if i >= len(self.coef):\n",

" polynom.append(other.coef[i])\n",

" elif i >= len(other.coef):\n",

" polynom.append(self.coef[i])\n",

" else:\n",

" polynom.append(self.coef[i] + other.coef[i])\n",

" \n",

" return Polynom(polynom)\n",

"\n",

" def __sub__(self, other):\n",

" polynom = []\n",

" for i in range(max(len(other.coef), len(self.coef))):\n",

" if i >= len(self.coef):\n",

" polynom.append(other.coef[i])\n",

" elif i >= len(other.coef):\n",

" polynom.append(self.coef[i])\n",

" else:\n",

" polynom.append(self.coef[i] - other.coef[i])\n",

"\n",

" return Polynom(polynom)\n",

" \n",

" def __mul__(self, other):\n",

" polynom = []\n",

" for i in range(len(self.coef)):\n",

" for j in range(len(other.coef)):\n",

" if i + j == len(polynom):\n",

" polynom.append(0)\n",

" \n",

" polynom[i + j] += self.coef[i] + other.coef[j]\n",

" \n",

" return Polynom(polynom)\n",

"\n",

" def print(self):\n",

" for i in range(len(self.coef)):\n",

" print(f'{self.coef[i]}*x^{i}', end=' ')\n",

" if i + 1 < len(self.coef):\n",

" print('+', end=' ')\n",

" \n",

" print()\n",

"\n",

"a = Polynom([1, 2, 3])\n",

"b = Polynom([2, 3, 5])\n",

"print(a.f(4))\n",

"print(b.f(2))\n",

"c = a + b\n",

"d = a - b\n",

"e = a * b\n",

"c.print()\n",

"d.print()\n",

"e.print()"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"# Задание №3\n",

"\n",

"Составить описание класса для вектора, заданного координатами его концов в трехмерном пространстве. Обеспечить операции сложения и вычитания векторов с получением нового вектора (суммы или разности), вычисления скалярного произведения двух векторов, длины вектора, косинуса угла между векторами."

]

},

{

"cell_type": "code",

"execution_count": 3,

"metadata": {},

"outputs": [

{

"output_type": "stream",

"name": "stdout",

"text": [

"(2, 3, 4)\n(6, 4, 4)\n40 0.0019796380090497737 8.246211251235321\n"

]

}

],

"source": [

"class Point3D():\n",

" def __init__(self, x, y, z):\n",

" self.x = x\n",

" self.y = y\n",

" self.z = z\n",

" \n",

" def __add__(self, other):\n",

" return Point3D(self.x + other.x, self.y + other.y, self.z + other.z)\n",

" \n",

" def __sub__(self, other):\n",

" return Point3D(self.x - other.x, self.y - other.y, self.z - other.z)\n",

" \n",

" def scalar(self, other):\n",

" return self.x * other.x + self.y * other.y + self.z * other.z\n",

" \n",

" def cos(self, other):\n",

" return self.scalar(other) / ((self.x ** 2 + other.x ** 2) * (self.y ** 2 + other.y ** 2) * (self.z ** 2 + other.z ** 2))\n",

" \n",

" def length(self):\n",

" return (self.x ** 2 + self.y ** 2 + self.z ** 2) ** 0.5\n",

"\n",

" def print(self):\n",

" print(f'({self.x}, {self.y}, {self.z})')\n",

"\n",

"p1 = Point3D(2, 3, 4)\n",

"p2 = Point3D(4, 1, 0)\n",

"p1.print()\n",

"p3 = p1 + p2\n",

"p3.print()\n",

"print(p3.scalar(p1), p3.cos(p2), p3.length())"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"# Задание №4 Поезда.\n",

"\n",

"Создайте структуру с именем train, содержащую поля: название пунктов отправления и назначения, время отправления и прибытия. Перегрузить операцию сложения - два поезда можно сложить, если пунк назначения первого совпадает с пунктом отправления второго и время прибытия первого раньше чем отправление второго."

]

},

{

"cell_type": "code",

"execution_count": ‘null’

"metadata": {

"collapsed": 'true'

},

"outputs": [],

"source": [

"class Train():\n",

" def __init__(self, start_name, finish_name, start_time, finish_time):\n",

" self.start_name = start_name\n",

" self.finish_name = finish_name\n",

" self.start_time = start_time\n",

" self.finish_time = finish_time\n",

"\n",

" def __add__(self, other):\n",

" if self.finish_name == other.start_name and self.finish_time < other.start_time:\n",

" return Train(self.start_name, other.finish_name, self.start_time, other.finish_time)\n",

"\n",

" def __str__(self):\n",

" return f'{self.start_name} - {self.start_time}\\n{self.finish_name} - {self.finish_time}'\n",

"\n",

"t1 = Train(\"New-York\", \"London\", 10, 13)\n",

"t2 = Train(\"London\", \"Moscow\", 14, 16)\n",

"print(t1 + t2)"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"# Домашнее задание (дополнительное):"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"# Обобщённое число.\n",

"\n",

"Создайте класс обобщающий понятие комплексных, двойных и дуальных чисел. И на его основе создайте классы этих чисел.\n",

"\n",

"Такие числа объеденены одной формой записи:\n",

"\n",

"$$ c = a + ib $$\n",

"\n",

"где c - обобщённое число (комплексное, двойное или дуальное), a и b - вещественные числа, i - некоммутирующий символ.\n",

"\n",

"Именно из-за наличия символа i число c не просто сумма a и b. Такие числа можно представлять как вектор на плоскости (a,b).\n",

"\n",

"А символ i обладает следующим свойством:\n",

"\n",

"- для комплексных чисел\n",

"\n",

"$$ i^2 = -1 $$\n",

"\n",

"- для двойных чисел\n",

"\n",

"$$ i^2 = 1 $$\n",

"\n",

"- для дуальных чисел\n",

"\n",

"$$ i^2 = 0 $$\n",

"\n",

"Перегрузить для них базовые операции: сложения, вычитания, умножения и деления.\n",

"\n",

"Например, операция умножения для таких чисел имеет вид:\n",

"\n",

"$$ (a_1+b_1i)\\cdot (a_2+b_2i)=a_1a_2+b_1a_2i+a_1b_2i+b_1b_2i^{2}=(a_1a_2+b_1b_2i^{2})+(b_1a_2+a_1b_2)i. $$"

]

},

{

"cell_type": "code",

"execution_count": 1,

"metadata": {

"collapsed": 'true'

},

"outputs": [

{

"output_type": "stream",

"name": "stdout",

"text": [

"(4, 6)\n(-2, -2)\n(11, 10)\n(0.44, 0.08)\n(18, 30)\n(0.25, 1.125)\n"

]

}

],

"source": [

"class Complex():\n",

" def __init__(self, a, b):\n",

" self.a = a\n",

" self.b = b\n",

" \n",

" def __add__(self, other):\n",

" return Complex(self.a + other.a, self.b + other.b)\n",

" \n",

" def __sub__(self, other):\n",

" return Complex(self.a - other.a, self.b - other.b)\n",

" \n",

" def __mul__(self, other):\n",

" return Complex(\n",

" self.a * other.a + self.b * other.b * self.i2(), \n",

" self.b * other.a + self.a * other.b\n",

" )\n",

"\n",

" def __truediv__(self, other):\n",

" return Complex(\n",

" (self.a * other.a + self.b * other.b) / (other.a ** 2 + other.b ** 2),\n",

" (other.a * self.b - self.a * other.b) / (other.a ** 2 + other.b ** 2),\n",

" )\n",

"\n",

" def __str__(self):\n",

" return f'({self.a}, {self.b})'\n",

"\n",

" def i2(self):\n",

" return 1\n",

" \n",

"class HyperComplex(Complex):\n",

" def i2(self):\n",

" return 0\n",

"\n",

"class DoubleComplex(Complex):\n",

" def i2(self):\n",

" return 1\n",

"\n",

"c1 = Complex(1, 2)\n",

"c2 = Complex(3, 4)\n",

"print(c1 + c2)\n",

"print(c1 - c2)\n",

"print(c1 * c2)\n",

"print(c1 / c2)\n",

"\n",

"h1 = HyperComplex(3, 4)\n",

"h2 = HyperComplex(6, 2)\n",

"print(h1 * h2)\n",

"\n",

"d1 = DoubleComplex(2, 9)\n",

"d2 = DoubleComplex(8, 0)\n",

"print(d1 / d2)"

]

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"# Формула.\n",

"\n",

"Напишите класс \"Формула\" для создания символьной записи формулы и её вычисления. Класс должен содержать атрибуты: \n",

"- список операций производимых над переменной \"x\", \n",

"- метод для вывода всех операторов и вывода определённого оператора по его номеру,\n",

"- метод для составления формулы как строки скомпанованной из заданных операторов, \n",

"- метод для изменения оператора,\n",

"- метод для подстановки значения x и вычисления значения формулы (например, с помощью функции eval() :-) )."

]

},

{

"cell_type": "code",

"execution_count": ‘null’

"metadata": {

"collapsed": 'true'

},

"outputs": [],

"source": []

},

{

"cell_type": "markdown",

"metadata": {},

"source": [

"# Больше формул!\n",

"\n",

"Определите для объектов класса \"Формула\" алгебраические операции: +, -, *, /."

]

},

{

"cell_type": "code",

"execution_count": ‘null’

"metadata": {

"collapsed": 'true'

},

"outputs": [],

"source": []

}

],

"metadata": {

"kernelspec": {

"name": "python3",

"display_name": "Python 3.9.1 64-bit",

"metadata": {

"interpreter": {

"hash": "8377707fed0120780b1c61ac6aab1c2a77aa53075184a7428b97980d2a12d859"

}

}

},

"language_info": {

"codemirror_mode": {

"name": "ipython",

"version": 3

},

"file_extension": ".py",

"mimetype": "text/x-python",

"name": "python",

"nbconvert_exporter": "python",

"pygments_lexer": "ipython3",

"version": "3.9.1-final"

}

},

"nbformat": 4,

"nbformat_minor": 2

}
1   2   3   4


написать администратору сайта