#include<iostream>
using namespace std;
class Matrix
{
protected:
int n, m;
char D_Q;
float DQ;
float** arr;
public:
Matrix(int n, int m, char D_Q);
void FillMatrix();
bool Process();
};
Matrix::Matrix(int n, int m, char D_Q) // конструктор
{
this->n = n;
this->m = m;
this->D_Q = D_Q;
};
void Matrix::FillMatrix() // заполнение матрицы
{
cout << "размером " << n << " на " << m << endl;
arr = new float* [n];
for (int i = 0; i < n; i++)
{
arr[i] = new float[m];
for (int j = 0; j < m; j++)
{
cin >> arr[i][j];
}
}
cout << "Введите " << D_Q << ": " << endl;
cin >> DQ;
}
bool Matrix::Process() // обработка матрицы
{
for (int i = 0; i < n; i++)
{
for (int c = 0; c < m; c++)
{
if (arr[i][c] == DQ) //проверка на равенство
{
return true;
}
}
}
return false; //возврат количества элементов
}
class matrix_nasl: public Matrix // Класс наследник
{
public:
matrix_nasl(int n, int m, char D_Q); // Конструктор наследника
int MinEl(); // Поиск минимального элемента (доп. условие)
void FillMatrix(); // Переопределенный метод ввода
};
matrix_nasl::matrix_nasl(int n, int m, char D_Q): Matrix(n, m, D_Q) {} //Использование конструктора предка в контрукторе наследника
int matrix_nasl::MinEl() // Поиск минимального элемента
{
int min = arr[0][0];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (arr[i][j] < min)
{
min = arr[i][j];
}
}
}
return min;
}
void matrix_nasl::FillMatrix() // Заполнение матрицы
{
cout << "РАЗМЕРОМ " << n << " НА " << m << endl;
arr = new float* [n];
for (int i = 0; i < n; i++)
{
arr[i] = new float[m];
for (int j = 0; j < m; j++)
{
cin >> arr[i][j];
}
}
cout << "ВВЕДИТЕ " << D_Q << ": " << endl;
cin >> DQ;
}
int main()
{
setlocale(LC_ALL, "Rus");
bool proverka;
cout << "Введите матрицу A ";
Matrix A(4, 5, 'D');
A.FillMatrix();
proverka = A.Process();
if (proverka)
{
cout << "Есть такие элементы" << endl;
}
else
{
cout << "Таких элементов нет" << endl;
}
cout << "ВВЕДИТЕ МАТРИЦУ B ";
matrix_nasl B(3, 7, 'Q');
B.FillMatrix();
|
proverka = B.Process();
if (proverka)
{
cout << "Есть такие элементы" << endl;
}
else
{
cout << "Таких элементов нет" << endl;
}
cout << "Минимальный элемент матрицы B: " << B.MinEl() << endl;
system("pause");
}
12. Условие:
Для каждой из матриц A (4×5) и B (5×3) определить количество строк, сумма элементов которых положительна.
Функциональная
#include <conio.h>
#include <iostream>
#include <fstream>
using namespace std;
void vvod(float a[][5], int N, int M, char c) // заполнение матрицы
{
cout << "Input matrix " << c << " size of " << N << '*' << M << endl;
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
cin >> a[i][j];
}
int sum1(float a[][5], int N, int M)
{
float sum;
int k = 0;
for (int i = 0; i < N; i++)
{
sum = 0;
for (int j = 0; j < M; j++)
sum = sum + a[i][j];
if (sum > 0)
k = k++;
}
return k;
}
int main() // основная функция
{
float a[4][5]; float b[5][5];
int K1, K2;
vvod(a, 4, 5, 'a');
K1 = sum1(a, 4, 5);
cout << "Results for "<< K1 << endl;
vvod(b, 5, 3, 'b');
K2 = sum1(b, 5, 3);
cout << "Results for " << K2 << endl;
system("pause");
}
Объектно-ориентированная
#include <iostream>
using namespace std;
class P //Создание класса P
{
protected:
float** matrix; //матрица
int n, m; //размерность матрицы
int num = 0; //количество элементов, удовл. условию
char c; //имя матрицы
public:
P(int n, int k, char c); //конструктор
void fillM() //заполнение матрицы
{
cout << "Input matrix " << c << " size of " << n << '*' << m << endl;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> matrix[i][j];
}
void processM() //Обработка матрицы: определить количество строк, сумма элементов которых положительна
{
float sum;
for (int i = 0; i < n; i++)
{
sum = 0;
for (int j = 0; j < m; j++)
{
sum += matrix[i][j];
}
if (sum > 0)
{
num++;
}
}
}
void outR() //Вывод результатов
|
{
cout << "\nResult for matrix " << c << " is " << num << endl;
}
};
P::P(int n, int m, char c)//конструктор
{
this->c = c;
this->n = n;
this->m = m;
this->matrix = new float* [n];//Выделение памяти для матрицы
for (int i = 0; i < n; i++)
{
matrix[i] = new float[m];
for (int j = 0; j < m; j++)
matrix[i][j] = 0;
}
}
void program() //Вспомогательная функция
{
P* A; //объявление указателя на экземпляр класса
P* B;
A = new P(4, 5, 'A'); //Создание экземпляра А класса P
B = new P(5, 3, 'B'); //Создание экземпляра B класса P
A->fillM(); //заполнение матрицы
B->fillM();//заполнение матрицы
A->processM();//обработка
B->processM();//обработка
A->outR(); //вывод результатов
B->outR();//вывод результатов
}
int main()
{
program(); //вызов вспомогательной функции
system("pause");
return 0;
}
13. Условие:
В каждой из матриц A (4×3), B (5×4) поменять местами две строки: в A вторую и третью строки, в B — первую и третью.
Функциональная
#include "pch.h"
#include <conio.h>
#include <iostream>
using namespace std;
void matrin(float a[][4], int n, int m, char c);
void matrout(float a[][4], int n, int m, char c);
void swap(float a[][4], int n1, int m1, int n, int m, char c);
void main()
{
setlocale(LC_ALL, "Russian");
float A[4][4], B[5][4];
// ввод матрицы
matrin(A, 4, 3, 'A');
matrin(B, 5, 4, 'B');
// вывод
matrout(A, 4, 3, 'A');
matrout(B, 5, 4, 'B');
// поменять местами строки
swap(A, 2, 3, 4, 3, 'A');
swap(B, 1, 3, 5, 4, 'B');
// вывод
matrout(A, 4, 3, 'A');
matrout(B, 5, 4, 'B');
_getch();
}
void matrin(float a[][4], int n, int m, char c)
{
int i, j;
cout << "Введите матрицу " << c << endl;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
cin >> a[i][j];
cout << endl;
}
void matrout(float a[][4], int n, int m, char c)
{
int i, j;
cout << "Матрица " << c << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
cout << a[i][j] << "\t";
cout << endl;
}
}
void swap(float a[][4], int n1, int m1, int n, int m, char c) {
|
int i, j, tmp;
for (int j = 0; j < m; j++) {
tmp = a[n1-1][j];
a[n1-1][j] = a[m1-1][j];
a[m1-1][j] = tmp;
}
}