Написать програму на Си++ (C++). Даны матрицы. Вычислить значение выражения

9. Условие:

Даны матрицы A (4×4), B (5×5), C (3×3). Вычислить значение выражения (PA + PB)PC, где PA (PB, PC) — произведение положительных элементов матрицы A (B, C), стоящих выше главной диагонали.

1) Функциональная:

#include <iostream>

using namespace std;

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

{

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

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

{

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

{

cin >> matrix[i][j];

}

}

}

float CHECK(float matrix[][10], int k, int l)

{

float pr = 0;

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

{

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

{

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

{

pr = 1;

}

}

}

if (pr!= 0

{

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

{

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

{

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

{

pr *= matrix[i][j];

}

}

}

}

return pr;

}

void main()

{

setlocale(LC_ALL, "Russian");

float A[10][10], B[10][10], C[10][10];

cout << "Input A:\n";

FILLMATR(A, 4, 4);

cout << "\nInput B:\n";

FILLMATR(B, 5, 5);

cout << "\nInput C:\n";

FILLMATR(C, 3, 3);

float prA = CHECK(A, 4, 4);

float prB = CHECK(B, 5, 5);

float prC = CHECK(C, 3, 3);

cout << "\nПроизведение А: " << prA;

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

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

cout << "\nРезультат вычисления по формуле: " << (prA + prB) * prC << endl;

system("pause");

}

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

#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;

}

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: