Как перегрузить функции для работы с матрицей (int, double, char)?
Всем добрый день. Пмогите, пожалуйста. Какая-то дичь получается.
Написать перегруженные функции (int, double, char) для выполнения следующих задач:
1.1. Определение максимального элемента на главной диагонали матрицы. 1.2. Определение минимального элемента на главной диагонали матрицы. 1.3. Сортировка элементов строк матрицы по возрастанию. 1.4. Сортировка элементов столбцов матрицы по убыванию.
Используя аргументы, передаваемые функции по умолчанию:
• Измените программы из заданий 1.1 и 1.2 с помощью шаблона. • Измените программы из заданий 1.3 и 1.4 с помощью шаблона.
#include <iostream>
#include <ctime>
using namespace std;
int** createArr2D(int rows, int cols)
{
int** mas = new int* [rows];
for (int r = 0; r < rows; r++)
mas[r] = new int[cols] {0};
return mas;
}
double** createArr2D(double rows, double cols)
{
double** mas = new double* [rows];
for (int r = 0; r < rows; r++)
mas[r] = new double[cols] {0};
return mas;
}
char** createArr2D(int rows, int cols)
{
for (int r = 0; r < rows; r++)
mas[r] = new char[cols] {0};
return mas;
}
void SetRndArray2D(int** arr, int n, int m, int a = 1, int b = 9)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
arr[i][j] = a + rand() % (b - a + 1);
}
void SetRndArray2D(double** arr, int n, int m, int a = 1, int b = 9)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
arr[i][j] = a + rand() % (b - a + 1) / static_cast<double>(rand() % 10 + 1);
}
void SetRndArray2D(char** arr, int n, int m)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
arr[i][j] = 97 + rand() % 26;
}
void PrintArray2D(int** arr, int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << arr[i][j] << "\t";
cout << endl;
}
}
void PrintArray2D(double** arr, int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << arr[i][j] << "\t";
cout << endl;
}
}
void PrintArray2D(char** arr, int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << arr[i][j] << "\t";
cout << endl;
}
}
void SortingArray2D(int** arr, int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m - 1; j++)
{
int index = j;
int minElement = arr[i][j];
for (int p = j; p < m; p++)
{
if (minElement > arr[i][p])
{
index = p;
minElement = arr[i][p];
}
}
swap(arr[i][j], arr[i][index]);
}
}
}
void SortingArray2D(double** arr, int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m - 1; j++)
{
int index = j;
double minElement = arr[i][j];
for (int p = j; p < m; p++)
{
if (minElement > arr[i][p])
{
index = p;
minElement = arr[i][p];
}
}
swap(arr[i][j], arr[i][index]);
}
}
}
void SortingArray2D(char** arr, int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m - 1; j++)
{
int index = j;
int minElement = arr[i][j];
for (int p = j; p < m; p++)
{
if (minElement > arr[i][p])
{
index = p;
minElement = arr[i][p];
}
}
swap(arr[i][j], arr[i][index]);
}
}
}
int MinElOnTheMainDiagonalArray2D(int** arr, int n) // определение минимального элемента на главной диагонали матрицы - int
{
int min = arr[0][0];
for (int i = 1; i < n; i++)
if (min > arr[i][i]) min = arr[i][i];
return min;
}
double MinElOnTheMainDiagonalArray2D(double** arr, int n)
{
double min = arr[0][0];
for (int i = 1; i < n; i++)
if (min > arr[i][i]) min = arr[i][i];
return min;
}
char MinElOnTheMainDiagonalArray2D(char** arr, int n)
{
int min = arr[0][0];
for (int i = 1; i < n; i++)
if (min > arr[i][i]) min = arr[i][i];
return min;
}
int MaxElOnTheMainDiagonalArray2D(int** arr, int n)
{
int max = arr[0][0];
for (int i = 1; i < n; i++)
if (max < arr[i][i]) max = arr[i][i];
return max;
}
double MaxElOnTheMainDiagonalArray2D(double** arr, int n)
{
double max = arr[0][0];
for (int i = 1; i < n; i++)
if (max < arr[i][i]) max = arr[i][i];
return max;
}
char MaxElOnTheMainDiagonalArray2D(char** arr, int n)
{
int max = arr[0][0];
for (int i = 1; i < n; i++)
if (max < arr[i][i]) max = arr[i][i];
return max;
}
void DeleteArray2D(int** arr, int n)
{
for (int i = 0; i < n; i++)
delete[] arr[i];
delete[] arr;
}
void DeleteArray2D(double** arr, int n)
{
for (int i = 0; i < n; i++)
delete[] arr[i];
delete[] arr;
}
void DeleteArray2D(char** arr, int n)
{
for (int i = 0; i < n; i++)
delete[] arr[i];
delete[] arr;
}
int main()
{
int n = 4, m = n;
char** arr = createArr2D(n, m);
srand(time(0));
SetRndArray2D(arr, n, m);
cout << "Source array:\n";
PrintArray2D(arr, n, m);
SortingArray2D(arr, n, m);
cout << "Sorted array:\n";
PrintArray2D(arr, n, m);
cout << "Minimal element on the main diagonal of the matrix: " << MinElOnTheMainDiagonalArray2D(arr, n) << endl;
cout << "Maximum element on the main diagonal of the matrix: " << MaxElOnTheMainDiagonalArray2D(arr, n) << endl;
DeleteArray2D(arr, n);
int n = 4, m = n;
double** arr = createArr2D(n, m);
srand(time(0));
SetRndArray2D(arr, n, m);
cout << "Source array:\n";
PrintArray2D(arr, n, m);
SortingArray2D(arr, n, m);
cout << "Sorted array:\n";
PrintArray2D(arr, n, m);
cout << "Minimal element on the main diagonal of the matrix: " << MinElOnTheMainDiagonalArray2D(arr, n) << endl;
cout << "Maximum element on the main diagonal of the matrix: " << MaxElOnTheMainDiagonalArray2D(arr, n) << endl;
DeleteArray2D(arr, n);
int n = 4, m = n;
int** arr = createArr2D(n, m);
srand(time(0));
SetRndArray2D(arr, n, m);
cout << "Source array:\n";
PrintArray2D(arr, n, m);
SortingArray2D(arr, n, m);
cout << "Sorted array:\n";
PrintArray2D(arr, n, m);
cout << "Minimal element on the main diagonal of the matrix: " << MinElOnTheMainDiagonalArray2D(arr, n) << endl;
cout << "Maximum element on the main diagonal of the matrix: " << MaxElOnTheMainDiagonalArray2D(arr, n) << endl;
DeleteArray2D(arr, n);
}