Объектно-ориентированная




#include <iostream>

using namespace std;

 

class Matrix

{

private:

float pr; //произведение

protected:

float** matrix; //матрица

int n, m; //размер матрицы

public:

Matrix(int n, int m); //конструктор

void fillmatrix();//заполнение матрицы

void checkvalue();//проверка всех подходящих элементов

//если есть хотя бы 1 удов. условиям, то pr = 1 (чтобы умножение было не на нуль)

virtual float process();//произведение элементов

friend void maintask(Matrix* pr1, Matrix* pr2, Matrix* pr3);//функция friend для получения произведений каждого из классов матриц

};

Matrix::Matrix(int n, int m)

{

this->n = n;

this->m = m;

}

void Matrix::fillmatrix()

{

matrix = new float* [n];

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

{

matrix[i] = new float[m];

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

{

cin >> matrix[i][j];

}

}

}

void Matrix::checkvalue()

{

pr = 0;

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

{

for (int j = i+1; j < m; j++)

{

if (matrix[i][j] > 0)

{

pr = 1;

}

}

}

}

float Matrix::process()

{

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

{

for (int j = i+1; j < m; j++)

{

if (matrix[i][j] > 0)

{

pr *= matrix[i][j];

}

}

}

return pr;

}

 

void maintask(Matrix* pr1, Matrix* pr2, Matrix* pr3)

{

float prA = pr1->process();

float prB = pr2->process();

float prC = pr3->process();

cout << "Произведение для A: " << prA;

cout << "\nПроизведение для B: " << prB;

cout << "\nПроизведение для C: " << prC;

cout << "\nИскомое значение: " << (prA + prB) * prC;

}

 

class Matrix_2:public Matrix //Наследник будет находить сумму положительных элементов, находящихся выше главной диагонали.

{

private:

float sum = 0;

public:

Matrix_2(int n, int m):Matrix(n, m){}; //конструктор

void fillmatrix()

{

matrix = new float* [n];

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

{

matrix[i] = new float[m];

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

{

cin >> matrix[i][j];

}

}

}

float process()

{

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

{

for (int j = i + 1; j < m; j++)

{

if (matrix[i][j] > 0)

{

sum += matrix[i][j];

}

}

}

return sum;

}

friend void task2(Matrix_2* s1, Matrix_2* s2, Matrix_2* s3); //Считает среднее арифметическое 3 матриц

};

 

void task2(Matrix_2* s1, Matrix_2* s2, Matrix_2* s3) //Считает среднее арифметическое 3 матриц

{

float sA = s1->process();

float sB = s2->process();

float sC = s3->process();

cout << "Сумма для A: " << sA;

cout << "\nСумма для B: " << sB;

cout << "\nСумма для C: " << sC;

cout << "\nСреднее арифметическое: " << (sA + sB + sC) / 3.0;

}

 

 

void all()

{

Matrix* A;

Matrix* B;

Matrix* C;

 

A = new Matrix(4, 4);

B = new Matrix(5, 5);

C = new Matrix(3, 3);

 

cout << "Матрица А:\n";

A->fillmatrix();

cout << "\nМатрица B:\n";

B->fillmatrix();

cout << "\nМатрица C:\n";

C->fillmatrix();

 

A->checkvalue();

B->checkvalue();

C->checkvalue();

 

maintask(A, B, C);

 

Matrix_2* A1;

Matrix_2* B1;

Matrix_2* C1;

 

A1 = new Matrix_2(4, 4);

B1 = new Matrix_2(5, 5);

C1 = new Matrix_2(3, 3);

 

cout << "\nМатрица А1:\n";

A1->fillmatrix();

cout << "\nМатрица B1:\n";

B1->fillmatrix();

cout << "\nМатрица C1:\n";

C1->fillmatrix();

 

task2(A1, B1, C1);

}

 

 

int main()

{

setlocale(LC_ALL, "Russian");

all();

system("pause");

return 0;

}

10. Условие:

Для матрицы A (7×3) вычислить общую сумму элементов строк, первый элемент которых положителен, а для матрицы B (6×4) — общую сумму элементов строк, в которых первый элемент больше единицы.

Функциональная

#include <iostream>

using namespace std;

 

void FILL(float matrix[][10], int k, int l)

{

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

{

for (int c = 0; c < l; c++)

{

cin >> matrix[i][c];

}

}

}

void CHECK(float matrix[][10], int k, int l, int D, float *sum)

{

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

{

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

{

if (matrix[i][0] > D)

{

*sum += matrix[i][j];

}

}

}

}

void OUT(float sum1, float sum2)

{

cout << "\nСумма для А: "<<sum1;

cout << "\nСумма для B: "<<sum2;

}

int main()

{

setlocale(LC_ALL, "Russian");

float A[10][10], B[10][10], sumA = 0, sumB = 0;

cout << "Введите матрицу A 7x3:\n";

FILL(A, 7, 3);

cout << "Введите матрицу B 6x4:\n";

FILL(B, 6, 4);

CHECK(A, 3, 3, 0, &sumA);

CHECK(B, 3, 3, 1, &sumB);

OUT(sumA, sumB);

system("pause");

return 0;

}

11. Условие:

Даны целочисленные матрицы A (4×5) и B (3×7). Проверить, есть ли в матрице A элементы, равные D, а в матрице B — элементы, равные Q, где D, Q — заданные значения.

Функциональная

#include <iostream>

using namespace std;

void FillMatrix(int m[][10], int k, int n)

{

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

{

for (int c = 0; c < n; c++)

{

cin >> m[i][c]; }

}

}

bool ProcessMatrix(int m[][10], int k, int n, int D)

{

bool num = false;

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

{

for (int c = 0; c < n; c++)

{

if (m[i][c] == D)

{

num = true;

break;

}

}

}

return num;

}

void OutNumbers(bool num)

{

if (num)

{

out << "Есть такие элементы";

}

else

{

cout << "Таких элементов нет";

}

}

void main()

{

setlocale(LC_ALL, "Russian");

int A[10][10], B[10][10], D, Q;

cout << "Введите D: ";

cin >> D;

cout << "\nВведите значения матрицы А:\n";

FillMatrix(A, 4, 5);

cout << "\nВведите Q: ";

cin >> Q;

cout << "\nВведите значения матрицы B:\n";

 

FillMatrix(B, 3, 7);

bool numA = ProcessMatrix(A, 4, 5, D);

bool numB = ProcessMatrix(B, 3, 7, Q);

cout << "\nВ матрице A ";

OutNumbers(numA);

cout << "\nВ матрице B ";

OutNumbers(numB);

cout << "\n";

system("pause");}

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-07-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: