#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");}