Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Цвинтарный_Иван_362_1_Лабораторная_работа_12.docx
Скачиваний:
1
Добавлен:
21.06.2023
Размер:
46.43 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра промышленной электроники (ПрЭ)

ОТЧЁТ

по результатам лабораторной работы №12

по дисциплине «Информатика»

Наследование

Выполнил

Студент гр. 362-1

________ Цвинтарный И.В.

«___» __________20___г.

Проверил

Преподаватель

_____________ Савин Д.А.

«___»__________20___г.

Томск 2023

Оглавление

Введение 3

1. Ход работы 4

2. Индивидуальное задание 5

3. Программный код – текст программы 5

4. Результаты работы программы 13

Заключение 14

Введение

В двенадцатой лабораторной работе нам необходимо научиться создавать классы-потомки на основе базовых классов и описывать их свойства и методы. Научиться применять конструкторы базового класса в соответствующих конструкторах наследуемых классов. Освоить умение работать с абстрактными классами, дружественными и виртуальными функциями и научиться перегружать операторы. Закрепить навыки конструирования классов, выделения памяти под динамические объекты класса, освобождения памяти, обращения к их свойствам и методам.

1. Ход работы

1. Задать базовый класс и классы-потомки на его основе, реализующие операции с данными, в соответствии с индивидуальным заданием

2. В базовом классе обязательно создать конструктор_по_умолчанию, и конструктор_с_параметрами, а также деструктор класса. Продемонстрировать применение в конструкторах классов-потомков соответствующих конструкторов базового класса

3. Сделать базовый класс абстрактным. Продемонстрировать вызов методов абстрактного класса через объекты класса-потомка

4. Продемонстрировать использование дружественной функции или класса

5. Продемонстрировать реализацию виртуальной функции в базовом классе и в классах-потомках

6. В отчете привести листинг программы, скриншоты тестирования программы, рисунок структуры класса. Листинг программы без комментариев не принимается

2. Индивидуальное задание

Вариант индивидуального задания – 1.

Рисунок 2.1 – Формулировка задания

3. Программный код – текст программы

Основная программа:

#include <iostream>

#include "Matrix.h"

#include "Determinant.h"

using namespace std;

int main()

{

setlocale(LC_ALL, "RUS");

srand(time(nullptr));

MatrixDet matrixDet;

matrixDet.fillMatrix();

matrixDet.print();

matrixDet.calculateDet();

}

CRect.h:

#define _CRT_SECURE_NO_WARNINGS

#pragma once

class Complexchisl

{

private:

int real1;

int imig1;

public:

Complexchisl();

Complexchisl(int real1, int imig1);

~Complexchisl();

void print();

int getX1();

void setX1(int real);

int getY1();

void setY1(int imig);

Complexchisl& operator += (int d);

Complexchisl& operator -= (int d);

Complexchisl& Sum(Complexchisl& odt);

int getModul();

Complexchisl& operator * (Complexchisl& odt);

Complexchisl& operator = (int d);

Complexchisl operator*(const Complexchisl& odt);

Complexchisl& operator + (Complexchisl& odt);

Complexchisl& operator - (Complexchisl& odt);

friend void print_complexchisl(Complexchisl& odt);

};

CRect.cpp:

#define _CRT_SECURE_NO_WARNINGS

#include "CRect.h"

#include <iostream>

#include "math.h"

using namespace std;

Complexchisl::Complexchisl()

{

real1 = 0;

imig1 = 0;

}

Complexchisl::Complexchisl(int real1, int imig1)

{

this->real1 = real1;

Complexchisl::imig1 = imig1;

}

Complexchisl::~Complexchisl()

{}

void Complexchisl::print()

{}

int Complexchisl::getX1()

{

return real1;

}

void Complexchisl::setX1(int real)

{

if (real < 0)

{

real1 = 2;

cout << "Превышено минимальное значение действительной части real1!" << endl;

}

else if (real > 100)

{

real1 = 100;

cout << "Превышено максимальное значение действительной части real1!" << endl;

}

else

real1 = real;

}

int Complexchisl::getY1()

{

return imig1;

}

void Complexchisl::setY1(int imig)

{

if (imig < 0)

{

imig1 = 2;

cout << "Превышено минимальное значение мнимой части imig1!" << endl;

}

else if (imig > 100)

{

imig1 = 100;

cout << "Превышено максимальное значение мнимой части imig1!" << endl;

}

else

imig1 = imig;

}

Complexchisl& Complexchisl::operator += (int d)

{

real1 += d;

imig1 += d;

if (real1 > 100)

real1 = 100;

if (imig1 > 100)

imig1 = 100;

return *this;

}

Complexchisl& Complexchisl::operator -= (int d)

{

real1 -= d;

imig1 -= d;

if (real1 < 0)

real1 = 2;

if (imig1 < 0)

imig1 = 3;

return *this;

}

Complexchisl& Complexchisl::operator + (Complexchisl& odt)

{

Complexchisl prog;

prog.real1 = real1 + odt.real1;

return prog;

}

Complexchisl& Complexchisl::operator - (Complexchisl& odt)

{

Complexchisl prog;

prog.real1 = real1 + odt.real1;

return prog;

}

Complexchisl& Complexchisl::operator * (Complexchisl& odt)

{

Complexchisl prog;

prog.real1 = real1 + odt.real1;

return prog;

}

Complexchisl& Complexchisl::operator = (int d)

{

if (real1 < 0)

real1 = 2;

if (imig1 < 0)

imig1 = 3;

return *this;

}

int Complexchisl::getModul()

{

return (sqrt(pow(real1, 2) + pow(imig1, 2)));

}

Complexchisl& Complexchisl::Sum(Complexchisl& odt)

{

real1 += odt.real1;

imig1 += odt.imig1;

cout << "ComplexSum = " << real1 << " + " << imig1 << "i" << endl;

return *this;

}

Matrix.h:

#pragma once

#include "CRect.h"

#define N 3

#define M 3

class Matrix

{

private:

Complexchisl matrix[N][M];

public:

friend class MatrixDet;

Matrix();

Matrix(Complexchisl matrix);

~Matrix();

void setMatrix(Complexchisl value);

Complexchisl getMatrix();

void fillMatrix();

virtual void print() = 0;

};

Matrix.cpp:

#include "Matrix.h"

#include <iostream>

#include <stdlib.h>

#include <stdio.h>

#define rnd1(a, b) (rand()%((b) - (a) + 1) + (a))

using namespace std;

Matrix::Matrix()

{}

Matrix::Matrix(Complexchisl matrix)

{}

Matrix::~Matrix()

{}

void Matrix::fillMatrix()

{

for (int i = 0; i < 3; i++)

{

for (int j = 0; j < 3; j++)

{

int real1 = rnd1(0, 20);

int imig1 = rnd1(0, 20);

Complexchisl odt(real1, imig1);

matrix[i][j] = odt;

}

}

}

void Matrix::print()

{

for (int i = 0; i < 3; i++)

{

for (int j = 0; j < 3; j++)

{

cout << matrix[i][j].getX1() << " + " << matrix[i][j].getY1() << "i\t";

}

cout << endl;

}

}

Determinant.h:

#pragma once

#include "Matrix.h"

class MatrixDet : public Matrix

{

private:

int RealDet;

int ImigDet;

public:

MatrixDet();

MatrixDet(Complexchisl matrix, int RealDet, int ImigDet);

~MatrixDet();

void setRealDet(int value);

void print();

int getRealDet();

void calculateDet();

void setImigDet(int value);

int getImigDet();

};

Determinant.cpp:

#include "Determinant.h"

#include <iostream>

using namespace std;

MatrixDet::MatrixDet()

: Matrix()

{

cout << "Конструктор по-умолчанию:" << this << endl;

RealDet = 0;

ImigDet = 0;

}

MatrixDet::MatrixDet(Complexchisl matrix, int RealDet, int ImigDet)

{

cout << "Конструктор с параметрами: " << this << endl;

}

MatrixDet::~MatrixDet()

{

cout << "Деструктор: " << this << endl;

}

void MatrixDet::setRealDet(int value)

{

RealDet = value;

}

int MatrixDet::getRealDet()

{

return RealDet;

}

void MatrixDet::setImigDet(int value)

{

ImigDet = value;

}

int MatrixDet::getImigDet()

{

return ImigDet;

}

void MatrixDet::print()

{

for (int i = 0; i < 3; i++)

{

for (int j = 0; j < 3; j++)

{

cout << "Matrix[" << i << "]" << "[" << j << "] = " << matrix[i][j].getX1() << " + " << matrix[i][j].getY1() << "i\t";

}

cout << endl;

}

}

void MatrixDet::calculateDet()

{

RealDet = matrix[0][0].getX1() * matrix[1][1].getX1() * matrix[2][2].getX1()

- matrix[2][2].getX1() * matrix[0][0].getY1() * matrix[1][1].getY1()

- matrix[1][1].getX1() * matrix[0][0].getY1() * matrix[2][2].getY1()

- matrix[0][0].getX1() * matrix[1][1].getY1() * matrix[2][2].getY1()

+ matrix[1][2].getX1() * matrix[0][1].getX1() * matrix[2][0].getX1()

- matrix[2][0].getX1() * matrix[0][1].getY1() * matrix[1][2].getY1()

- matrix[1][2].getX1() * matrix[0][1].getY1() * matrix[2][0].getY1()

- matrix[0][1].getX1() * matrix[2][0].getY1() * matrix[1][2].getY1()

+ (matrix[1][0].getX1() * matrix[2][1].getX1() * matrix[0][2].getX1()

- matrix[0][2].getX1() * matrix[1][0].getY1() * matrix[2][1].getY1()

- matrix[2][1].getX1() * matrix[1][0].getY1() * matrix[0][2].getY1()

- matrix[1][0].getX1() * matrix[2][1].getY1() * matrix[0][2].getY1())

- (matrix[2][0].getX1() * matrix[1][1].getX1() * matrix[0][2].getX1()

- matrix[0][2].getX1() * matrix[2][0].getY1() * matrix[1][1].getY1()

- matrix[1][1].getX1() * matrix[0][2].getY1() * matrix[2][0].getY1()

- matrix[2][0].getX1() * matrix[1][1].getY1() * matrix[0][2].getY1())

- (matrix[1][0].getX1() * matrix[0][1].getX1() * matrix[2][2].getX1()

- matrix[2][2].getX1() * matrix[1][0].getY1() * matrix[0][1].getY1()

- matrix[0][1].getX1() * matrix[1][0].getY1() * matrix[2][2].getY1()

- matrix[1][0].getX1() * matrix[0][1].getY1() * matrix[2][2].getY1())

- (matrix[2][1].getX1() * matrix[1][2].getX1() * matrix[0][0].getX1()

- matrix[0][0].getX1() * matrix[2][1].getY1() * matrix[1][2].getY1()

- matrix[1][2].getX1() * matrix[2][1].getY1() * matrix[0][0].getY1()

- matrix[2][1].getX1() * matrix[1][2].getY1() * matrix[0][0].getY1());

ImigDet = matrix[2][2].getX1() * matrix[1][1].getX1() * matrix[0][0].getY1()

+ matrix[0][0].getX1() * matrix[2][2].getX1() * matrix[1][1].getY1()

+ matrix[1][1].getX1() * matrix[0][0].getX1() * matrix[2][2].getY1()

- matrix[0][0].getY1() * matrix[1][1].getY1() * matrix[2][2].getY1()

+ (matrix[1][2].getX1() * matrix[2][0].getX1() * matrix[0][1].getY1()

+ matrix[2][0].getX1() * matrix[0][1].getX1() * matrix[1][2].getY1()

+ matrix[1][2].getX1() * matrix[0][1].getX1() * matrix[2][0].getY1()

- matrix[0][1].getY1() * matrix[1][2].getY1() * matrix[2][0].getY1())

+ (matrix[2][1].getX1() * matrix[0][2].getX1() * matrix[1][0].getY1()

+ matrix[1][0].getX1() * matrix[0][2].getX1() * matrix[2][1].getY1()

+ matrix[1][0].getX1() * matrix[2][1].getX1() * matrix[0][2].getY1()

- matrix[1][0].getY1() * matrix[2][1].getY1() * matrix[0][2].getY1())

- (matrix[0][2].getX1() * matrix[1][1].getX1() * matrix[2][0].getY1()

+ matrix[0][2].getX1() * matrix[2][0].getX1() * matrix[1][1].getY1()

+ matrix[2][0].getX1() * matrix[1][1].getX1() * matrix[0][2].getY1()

- matrix[2][0].getY1() * matrix[1][1].getY1() * matrix[0][2].getY1())

- (matrix[2][2].getX1() * matrix[0][1].getX1() * matrix[1][0].getY1()

+ matrix[2][2].getX1() * matrix[1][0].getX1() * matrix[0][1].getY1()

+ matrix[1][0].getX1() * matrix[0][1].getX1() * matrix[2][2].getY1()

- matrix[1][0].getY1() * matrix[0][1].getY1() * matrix[2][2].getY1())

- (matrix[1][2].getX1() * matrix[0][0].getX1() * matrix[2][1].getY1()

+ matrix[0][0].getX1() * matrix[2][1].getX1() * matrix[1][2].getY1()

+ matrix[2][1].getX1() * matrix[1][2].getX1() * matrix[0][0].getY1()

- matrix[2][1].getY1() * matrix[1][2].getY1() * matrix[0][0].getY1());

setlocale(LC_ALL, "RUS");

if (ImigDet < 0)

cout << "Определитель = " << RealDet << " - " << abs(ImigDet) << "i" << endl;

else

cout << "Определитель = " << RealDet << " + " << ImigDet << "i" << endl;

}