Функциональная
#include <conio.h>
#include <iostream>
using namespace std;
void masout(float a[ ],int n,char c);
void matrin(float [ ][5],int n,int m,char c);
void minmatr(float [ ][5],int n,int m,float min[ ]);
void main()
{float a[3][5],b[7][5], mina[3], minb[7];
matrin(a,3,5,'a'); matrin(b,7,3,'b');
minmatr(a,3,5,mina); minmatr(b,7,3,minb);
masout(mina,3,'a'); masout(minb,7,'b');
_getch();
}
void minmatr(float a[][5],int n,int m,float min[])
{int i,j;
for (i=0; i<n; i++)
{min[i]=a[i][0];
for (j=1;j<m; j++)
if (a[i][j]<min[i])
min[i]=a[i][j];
}
}
void matrin(float a[][5],int n,int m,char c)
{int i,j;
cout<<"Input matrix "<<c<<" size of "<<n<<'*'<<m<<endl;
for (i=0;i<n;i++)
for (j=0;j<m;j++)
cin>>a[i][j];
}
void masout(float a[],int n,char c)
{int i;
cout<<"Results for "<<c<<endl;
for (i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
2. Условие:
В матрицах A (7×7) и B (5×5) заменить каждый положительный элемент, стоящий выше главной диагонали, на нуль.
Функциональная
#include <iostream>
using namespace std;
void FillMatrix(float m[][10], int k, int n)
{
for (int i = 0; i < k; i++)
{
for (int c = 0; c < n; c++)
{
cin >> m[i][c];
}
}
}
int ProcessMatrix(float m[][10], int k, int n)
{
for (int i = 0; i < k; i++)
{
for (int c = i + 1; c < n; c++)
{
if (m[i][c] > 0)
m[i][c] = 0;
}
}
return 0;
}
void OutNumbers(float m[][10], int k, int n)
{
for (int i = 0; i < k; i++)
{
for (int c = 0; c < n; c++)
cout << m[i][c] << "\t";
cout << endl;
}
}
void main()
{
setlocale(LC_ALL, "Russian");
float A[10][10], B[10][10];
cout << "\nВведите значения матрицы А:\n";
FillMatrix(A, 7, 7);
cout << "\nВведите значения матрицы B:\n";
FillMatrix(B, 5, 5);
ProcessMatrix(A, 7, 7);
ProcessMatrix(B, 5, 5);
cout << "Новая матрица А: \n";
OutNumbers(A, 7, 7);
cout << "Новая матрица B: \n";
OutNumbers(B, 5, 5);
}
Объектно-ориентированная
#include <iostream>
using namespace std;
class Matrix
{
protected:
int n, m;
int** matrix;
public:
Matrix(int n1, int m1);
void Fill();
void Process();
void Out();
};
class NewMatrix: public Matrix
{
public:
NewMatrix(int n1, int m1): Matrix(n1, m1) {}
void Fill();
void Process2();
};
Matrix::Matrix(int n1, int m1)
{
n = n1; m = m1;
};
|
void Matrix::Fill()
{
cout << "Введите матрицу А" << endl;
matrix = new int* [n];
for (int i = 0; i < n; i++)
{
matrix[i] = new int[m];
for (int c = 0; c < m; c++)
{
cin >> matrix[i][c];
}
}
}
void NewMatrix::Fill()
{
cout << "ВВЕДИТЕ МАТРИЦУ В" << endl; //отличается оформлением приглашения
matrix = new int* [n];
for (int i = 0; i < n; i++)
{
matrix[i] = new int[m];
for (int c = 0; c < m; c++)
{
cin >> matrix[i][c];
}
}
}
void Matrix::Process()
{
for (int i = 0; i < n; i++)
{
for (int c = i + 1; c < m; c++)
{
if (matrix[i][c] > 0)
matrix[i][c] = 0;
}
}
}
void NewMatrix::Process2()//замена положительных значений, стоящих ниже главной диагонали на 1
{
for (int i = 0; i < n; i++)
{
for (int c = 0; c < i; c++)
{
if (matrix[i][c] > 0)
matrix[i][c] = 1;
}
}
}
void Matrix::Out()
{
for (int i = 0; i < n; i++)
{
for (int c = 0; c < m; c++)
{
cout << matrix[i][c] << "\t";
}
cout << endl;
}
}
int main()
{
setlocale(LC_ALL, "Rus");
Matrix A(7, 7);
NewMatrix B(5, 5);
A.Fill();
cout << "Новая матрица А: \n";
A.Process();
A.Out();
B.Fill();
cout << "Новая матрица B: \n";
B.Process2();
B.Out();
return 0;
system("pause");
}
3. Условие:
Если среднее арифметическое SA положительных элементов матрицы A (5×4) больше среднего арифметического SB положительных элементов матрицы B (4×6), найти сумму SA + SB, иначе найти разность SA – SB.
Функциональная
#include <iostream>
using namespace std;
void WOD(int[5][6], int n, int m, char c);
int POS(int[5][6], int n, int m);
int main(){
setlocale(LC_ALL, "RUS");
int A[5][6], B[4][6];
int SA, SB;
WOD(A, 5, 4, 'A');
WOD(B, 4, 6, 'B');
SA = POS(A, 5, 4);
SB = POS(B, 4, 6);
cout «SA «endl;
cout «SB«endl;
if (SA > SB)
cout «" сумма положительных элементов SA > SB " «SA + SB «endl;
else
cout «" сумма положительных элементов SA < SB " «SA - SB «endl;
system("pause");
}
/****************************************/
void WOD(int a[][6], int n, int m, char c)
|
{ int i, j;
cout «"Input matrix " «c «" size of " «n «"*" «m «endl;
/* Далее цикл для поэлементного ввода массива*/
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
cin » a[i][j];
}
/****************************************/
int POS(int a[][6], int n, int m)
{
int i, j, k=0, SA=0;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 4; j++)
{
if (a[i][j] > 0)
{
SA += a[i][j];
k++;
}
}
}
SA = SA / k;
return (SA);
}
Объектно-ориентированная
#include <iostream>
using namespace std;
class Matrica
{
protected:
float** mas, Sr;
int n, m;
char c;
public:
Matrica(char c, int n = 1, int m = 1);
void vvod();
float pos();
};
class Matrica_2class: public Matrica
{
public:
Matrica_2class(char c, int n, int m): Matrica(c, n, m) {};
void vvod();
float pos();
};
Matrica::Matrica(char c, int n, int m)
{
this->n = n;
this->m = m;
mas = new float* [n];
for (int i = 0; i < n; i++)
{
mas[i] = new float[m];
for (int j = 0; j < m; j++)
{
mas[i][j] = 0;
}
}
}
void Matrica::vvod()
{
cout << "Ввод матрицы " << c << " размером " << n << "*" << m << endl;
/* цикл для поэлементного ввода массива*/
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> mas[i][j];
}
float Matrica::pos()
{
Sr = 0;
int k = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (mas[i][j] > 0)
{
Sr += mas[i][j];
k++;
}
}
}
return Sr = Sr / k;
}
void Matrica_2class::vvod()
{
cout << "ВВОД МАТРИЦЫ" << c << " РАЗМЕРОМ " << n << "*" << m << endl;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> mas[i][j];
}
float Matrica_2class::pos()
{
Sr = 0;
int k = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (mas[i][j] > 1)
{
Sr += mas[i][j]; //ср.арифметическое нечетных элементов больше 0
k++;
}
}
}
return Sr = Sr / k;
}
int main()
{
setlocale(LC_ALL, "Rus");
float SA = 0, SB = 0;
Matrica* A;
Matrica_2class* B;
A = new Matrica('A', 5, 4);
B = new Matrica_2class('B', 4, 6);
cout << "Матрица A:\n";
A->vvod();
cout << endl;
cout << "Матрица B:\n";
B->vvod();
cout << endl;
SA = A->pos();
SB = B->pos();
if (SA > SB)
{
cout << " сумма положительных элементов SA > SB " << endl;
|
cout << "SA + SB = " << SA + SB;
}
else
{
cout << " сумма положительных элементов SA < SB " << endl;
cout << "SA - SB = " << SA - SB;
}
delete A;
delete B;
}
4. Условие:
Даны матрицы A (5×5), B (7×7), C (4×4). Вычислить значение выражения PA + PB – PC, где PA (PB, PC) — произведение положительных элементов главной диагонали матрицы A (B, C).
Функциональная
#include <iostream>
using namespace std;
void FillMatrix(float M[][10], int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> M[i][j];
}
}
}
bool ProcessMatrix(float M[][10], int n, float& P)
{
bool F = false;
P = 1;
for (int i = 0; i < n; i++)
{
if (M[i][i] > 0)
{
P = P * M[i][i];
F = true;
}
}
return F;
}
void check(bool F, float P, int& k)
{
if (F == true)
{
cout << "Произведение положительных элементов главной диагонали матрицы: " << P << "\n";
}
else if (F == false)
{
cout << "Главная диагональ матрицы не имеет положительных элементов\n";
k++;
}
}
int main()
{
setlocale(LC_ALL, "Russian");
float M[10][10], PA = 1, PB = 1, PC = 1;
int n, k = 0;
bool Pr = true;
cout << "\nВведите значения матрицы А (5,5):\n";
FillMatrix(M, 5, 5);
Pr = ProcessMatrix(M, 5, PA);
check(Pr, PA, n);
//PA = P;
cout << "\nВведите значения матрицы B (7,7):\n";
FillMatrix(M, 7, 7);
Pr = ProcessMatrix(M, 7, PB);
check(Pr, PB, n);
//PB = P;
cout << "\nВведите значения матрицы C(4,4):\n";
FillMatrix(M, 4, 4);
Pr = ProcessMatrix(M, 4, PC);
check(Pr, PC, n);
//PC = P;
if (k == 0)
{
cout << "PA + PB – PC = " << PA << " + " << PB << " - " << PC << " = " << PA + PB - PC << endl;
}
else
{
cout << "В одной из матриц отсутствуют положительные элементы в главной диагонале\n";
}
system("pause");
return 0;
}