1. Условие:
Даны две матрицы: а из 3-х строк и 5 столбцов (в дальнейшем будем условно записывать а[3*5]) и b[7*3]. Вычислить минимальные значения для каждой строки каждой из этих матриц.
1) Функциональная
#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) заменить каждый положительный элемент, стоящий выше главной диагонали, на нуль.
1) Функциональная
#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);
}
2) Объектно-ориентированная
#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");
}