Вы находитесь на странице: 1из 7

Министерство образования Республики Молдова

Технический университет Молдовы


Департамент программной инженерии и автоматики

ОТЧЕТ
Лабораторная работа № 1-2
По дисциплине «ООП»

Выполнил: Ст. гр. TI-197 Грибиненко А.


Проверил: Брынзан Л.

Кишинев 2020
ЛАБОРАТОРНАЯ РАБОТА № 1-2

Тема: Структура – механизм абстракции, Конструктор – функция инициализации


объектов класса.
Цели работы:
 изучение основ абстракции;
 изучение правил определения и использования структур данных;
 создание переменных типа структуры, обращение к полям;
 изучение принципов программирования, основанное на работе со структурами.
 изучение основ определения и использования конструкторов;
 изучение основ определения и использования деструкторов;
 изучение типов конструкторов;

Вариант: 2b.
Задание:

b) Создать абстрактный тип данных (структура) - вектор, который имеет указатель на float
и число элементов. Определить функции: инициализации, удаления вектора, установки/
изменения размера, доступа к элементам вектора, вычисления суммы элементов вектора.
Для примера, в функции main, организовать поэлементное умножение двух векторов.

b) Создать класс Matrix-матрица. Данный класс содержит указатель на double, количество


строк и столбцов и переменную - код ошибки. Определить конструктор без параметров,
конструктор с одним параметром – квадратная матрица и конструктор с двумя
параметрами – прямоугольная матрица и др. Определить методы доступа: возвращение и
определение значения элемента (i,j). Определить функции сложения и вычитания
(матрицы с матрицей), умножение матрицы на матрицу. Определить умножение матрицы
на число. Проверить работу этого класса. В случае нехватки памяти, несоответствия
размерностей, выхода за пределы используемой памяти устанавливать код ошибки.

Листинг 1 - Поэлементное умножение двух векторов.

Vector operator*(Vector secondVector) {


Vector resultVector = Vector(this->myVector.size());
for (int i = 0; i < myVector.size(); i++)
resultVector.myVector[i] = this->myVector[i] *
secondVector.myVector[i];
return resultVector; }

Листинг 2 - вычисления суммы элементов вектора.

float summElements() {
float summ = 0;
for (int i = 0; i < this->myVector.size(); i++) {
summ += this->myVector[i];
}
return summ;
}
Листинг 3 – Операций над матрицами.

Matrix operator+(Matrix secondMatrix) { //Сложение матриц


if (this->n == secondMatrix.n && this->m == secondMatrix.m) {
Matrix resultMatrix = Matrix(this->n, this->m);
for (int i = 0; i < this->n; i++)
for (int j = 0; j < this->m; j++)
resultMatrix.matrix[i][j]=this->matrix[i][j]+secondMatrix.matrix[i]
[j];
return resultMatrix;
}
}
Matrix operator-(Matrix secondMatrix) { // Вычитание матриц
if (this->n == secondMatrix.n && this->m == secondMatrix.m) {
Matrix resultMatrix = Matrix(this->n, this->m);
for (int i = 0; i < this->n; i++)
for (int j = 0; j < this->m; j++)
resultMatrix.matrix[i][j]=this->matrix[i][j] - secondMatrix.matrix[i]
[j];
return resultMatrix;
}
}
Matrix operator* (Matrix& secondMatrix) // Умножение матриц
{
if (this->n == secondMatrix.m && this->m == secondMatrix.n) {
Matrix resultMatrix(this->n, this->m);
double summ = 0;
for (int i = 0; i < this->n; i++) {
for (int j = 0; j < secondMatrix.m; j++) {
for (int k = 0; k < this->m; k++) {
summ += this->matrix[i][k] * secondMatrix.matrix[k][j];
}
resultMatrix.matrix[i][j] = summ;

summ = 0;
}
}
return resultMatrix;
}
}
Matrix operator* (double number) // Умножение матрицы на число
{
Matrix resultMatrix(this->n, this->m);
for (int i = 0; i < this->n; i++) {
for (int j = 0; j < this->m; j++) {
resultMatrix.matrix[i][j] = this->matrix[i][j]*number;
}
}
return resultMatrix;
}};
Вывод: В ходе работы были созданы два класса для работы с массивами и матрицами, а
так же методы для работы с ними.

Полный листинг кода


class Vector {
public:
vector<float> myVector;
Vector(int i) {
this->myVector.resize(i, 0);
}
~Vector() {
this->myVector.clear();
}
void resize(int i) {
this->myVector.resize(i, 0);
}
float getElement(int i) {
return this->myVector[i];
}
float summElements() {
float summ = 0;
for (int i = 0; i < this->myVector.size(); i++) {
summ += this->myVector[i];
}
return summ;
}
Vector operator*(Vector secondVector) {
Vector resultVector = Vector(this->myVector.size());
for (int i = 0; i < myVector.size(); i++)
resultVector.myVector[i]= this->myVector[i] *
secondVector.myVector[i];
return resultVector;
}
};
class Matrix {
public:
double matrix[100][100];
int n;
int m;
Matrix();
Matrix(double j) : n(j), m(j) {};
Matrix(double p, double g) : n(p), m(g) {};
int getN() {
return this->n;
}
int getM() {
return this->m;
}
int setN() {
return this->n;
}
int setM() {
return this->m;
}
Matrix operator+(Matrix secondMatrix) {
if (this->n == secondMatrix.n && this->m == secondMatrix.m) {
Matrix resultMatrix = Matrix(this->n, this->m);
for (int i = 0; i < this->n; i++)
for (int j = 0; j < this->m; j++)
resultMatrix.matrix[i][j] = this->matrix[i][j] +
secondMatrix.matrix[i][j];
return resultMatrix;
}
}
Matrix operator-(Matrix secondMatrix) {
if (this->n == secondMatrix.n && this->m == secondMatrix.m) {
Matrix resultMatrix = Matrix(this->n, this->m);
for (int i = 0; i < this->n; i++)
for (int j = 0; j < this->m; j++)
resultMatrix.matrix[i][j] = this->matrix[i][j] -
secondMatrix.matrix[i][j];
return resultMatrix;
}
}
Matrix operator* (Matrix& secondMatrix)
{
if (this->n == secondMatrix.m && this->m == secondMatrix.n) {
Matrix resultMatrix(this->n, this->m);
double summ = 0;
for (int i = 0; i < this->n; i++) {
for (int j = 0; j < secondMatrix.m; j++) {
for (int k = 0; k < this->m; k++) {
summ += this->matrix[i][k] * secondMatrix.matrix[k][j];
}
resultMatrix.matrix[i][j] = summ;

summ = 0;
}
}
return resultMatrix;
}
}
Matrix operator* (double number)
{
Matrix resultMatrix(this->n, this->m);
for (int i = 0; i < this->n; i++) {
for (int j = 0; j < this->m; j++) {
resultMatrix.matrix[i][j] = this->matrix[i][j]*number;
}
}
return resultMatrix;
}
};
int main()
{
Vector x(3);
Vector y(3);
for (int i = 0; i < x.myVector.size(); i++) {
cin >> x.myVector[i];
}
for (int i = 0; i < y.myVector.size(); i++) {
cin >> y.myVector[i];
}
Vector z = x * y;
for (int i = 0; i < z.myVector.size(); i++) {
cout << z.myVector[i] << " ";
}3
Matrix a(2);
Matrix b(2);
for (int i = 0; i < a.n; i++) {
for (int j = 0; j < a.m; j++) {
cin >> a.matrix[i][j];
}
}
for (int i = 0; i < b.n; i++) {
for (int j = 0; j < b.m; j++) {
cin >> b.matrix[i][j];
}
}
Matrix c = a + b;
for (int i = 0; i < c.n; i++) {
for (int j = 0; j < c.m; j++) {
cout << c.matrix[i][j] << " ";
}
cout << endl;
}
c = a - b;
for (int i = 0; i < c.n; i++) {
for (int j = 0; j < c.m; j++) {
cout << c.matrix[i][j] << " ";
}
cout << endl;
}
c = a * b;
for (int i = 0; i < c.n; i++) {
for (int j = 0; j < c.m; j++) {
cout << c.matrix[i][j] << " ";
}
cout << endl;
}
a = a*5.5;
for (int i = 0; i < a.n; i++) {
for (int j = 0; j < a.m; j++) {
cout << a.matrix[i][j] << " ";
}
cout << endl;

}
}

Вам также может понравиться