Для трех матриц написать перегруженные функции (тип элементов int, double, char) для выполнения следующих задач:
- инициализация квадратной матрицы (заполнение случайными значениями);
- вывод матрицы на экран;
- определение максимального и минимального элементов на главной диагонали матрицы;
- сортировка элементов по возрастанию отдельно для каждой строки матрицы.
программа работает, НО во время сортировки массива double некоторые элементы округляет и выводит как int. Подскажите как исправить, пожалуйста
Код:
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
void rndarray(int**, int);
void rndarray(double**, int);
void rndarray(char**, int);
void out_arr(int**, int);
void out_arr(double**, int);
void out_arr(char**, int);
int max_el(int**, int);
double max_el(double**, int);
char max_el(char**, int);
int min_el(int**, int);
double min_el(double**, int);
char min_el(char**, int);
void Bsort(int**, int size);
void Bsort(double**, int size);
void Bsort(char**, int size);
int main()
{
srand(time(NULL));
const int size = 4;
int** arr_i = new int* [size];
for (int i = 0; i < size; i++)
arr_i[i] = new int[size];
rndarray(arr_i, size);
out_arr(arr_i, size);
cout << "\nmax in array 1 main diagonal =\t" << max_el(arr_i, size);
cout << "\nmin in array 1 main diagonal =\t" << min_el(arr_i, size);
cout << endl << endl;
double** arr_d = new double* [size];
for (int i = 0; i < size; i++)
arr_d[i] = new double[size];
rndarray(arr_d, size);
out_arr(arr_d, size);
cout << "\nmax in array 2 main diagonal =\t" << max_el(arr_d, size);
cout << "\nmin in array 2 main diagonal =\t" << min_el(arr_d, size);
cout << endl << endl;
char** arr_c = new char* [size];
for (int i = 0; i < size; i++)
arr_c[i] = new char[size];
rndarray(arr_c, size);
out_arr(arr_c, size);
cout << "\nmax in array 3 main diagonal =\t" << max_el(arr_c, size);
cout << "\nmin in array 3 main diagonal =\t" << min_el(arr_c, size);
cout << endl << endl;
cout << "\n\tArrays after sort\n";
Bsort(arr_i, size); cout << endl;
Bsort(arr_d, size); cout << endl;
Bsort(arr_c, size); cout << endl;
for (int i = 0; i < size; i++)
delete[]arr_i[i];
delete[]arr_i;
for (int i = 0; i < size; i++)
delete[]arr_d[i];
delete[]arr_d;
for (int i = 0; i < size; i++)
delete[]arr_c[i];
delete[]arr_c;
return 0;
}
void rndarray(int** ar, int s)
{
for (int i = 0; i < s; i++)
for (int j = 0; j < s; j++)
ar[i][j] = rand() % 30;
}
void rndarray(double** ar, int s)
{
for (int i = 0; i < s; i++)
for (int j = 0; j < s; j++)
ar[i][j] = rand() % 1000 / 10.;
}
void rndarray(char** ar, int s)
{
for (int i = 0; i < s; i++)
for (int j = 0; j < s; j++)
ar[i][j] = rand() % 256;
}
void out_arr(int** ar, int s)
{
for (int i = 0; i < s; i++)
{
for (int j = 0; j < s; j++)
{
cout << ar[i][j] << '\t';
}cout << endl;
}
}
void out_arr(double** ar, int s)
{
for (int i = 0; i < s; i++)
{
for (int j = 0; j < s; j++)
{
cout << ar[i][j] << '\t';
}cout << endl;
}
}
void out_arr(char** ar, int s)
{
for (int i = 0; i < s; i++)
{
for (int j = 0; j < s; j++)
{
cout << ar[i][j] << '\t';
}cout << endl;
}
}
int max_el(int** ar, int s)
{
int max = ar[0][0];
for (int i = 0; i < s; i++)
if (ar[i][i] > max)max = ar[i][i];
return max;
}
double max_el(double** ar, int s)
{
double max = ar[0][0];
for (int i = 0; i < s; i++)
if (ar[i][i] > max)max = ar[i][i];
return max;
}
char max_el(char** ar, int s)
{
char max = ar[0][0];
for (int i = 0; i < s; i++)
if (ar[i][i] > max)max = ar[i][i];
return max;
}
int min_el(int** ar, int s)
{
int min = ar[0][0];
for (int i = 0; i < s; i++)
if (ar[i][i] < min)min = ar[i][i];
return min;
}
double min_el(double** ar, int s)
{
double min = ar[0][0];
for (int i = 0; i < s; i++)
if (ar[i][i] < min)min = ar[i][i];
return min;
}
char min_el(char** ar, int s)
{
char min = ar[0][0];
for (int i = 0; i < s; i++)
if (ar[i][i] < min)min = ar[i][i];
return min;
}
void Bsort(int** arr, int size)
{
for (int k = 0; k < size; k++)
for (int i = 0; i < size; i++)
for (int j = 0; j < size - 1; j++)
if (arr[k][j] > arr[k][j + 1])
{
int tmp = arr[k][j];
arr[k][j] = arr[k][j + 1];
arr[k][j + 1] = tmp;
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
cout << arr[i][j] << '\t';
}cout << endl;
}
}
void Bsort(double** arr, int size)
{
for (int k = 0; k < size; k++)
for (int i = 0; i < size; i++)
for (int j = 0; j < size - 1; j++)
if (arr[k][j] > arr[k][j + 1])
{
int tmp = arr[k][j];
arr[k][j] = arr[k][j + 1];
arr[k][j + 1] = tmp;
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
cout << arr[i][j] << '\t';
}cout << endl;
}
}
void Bsort(char** arr, int size)
{
for (int k = 0; k < size; k++)
for (int i = 0; i < size; i++)
for (char j = 0; j < size - 1; j++)
if (arr[k][j] > arr[k][j + 1])
{
int tmp = arr[k][j];
arr[k][j] = arr[k][j + 1];
arr[k][j + 1] = tmp;
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
cout << arr[i][j] << '\t';
}cout << endl;
}
}
РУЗУЛЬТАТ ВЫПОЛНЕНИЯ
Цитата:
8 15 1 15
29 23 17 4
2 25 21 23
29 18 16 0
max in array 1 main diagonal = 23
min in array 1 main diagonal = 0
42.5 10.4 38.7 30.4
15.4 96.2 15 36.3
1.1 4.2 58.3 85.4
52.5 33.1 23.7 35.2
max in array 2 main diagonal = 96.2
min in array 2 main diagonal = 35.2
╘ = >
╞ ш ┬
5 Щ Ї №
И + ┌ ▓
max in array 3 main diagonal = Ї
min in array 3 main diagonal = ▓
Arrays after sort
1 8 15 15
4 17 23 29
2 21 23 25
0 16 18 29
10.4 30.4 38 42
15 15 36.3 96
1.1 4.2 58.3 85.4
23.7 33 35.2 52
╘ = >
┬ ╞ ш
Щ Ї № 5
И ▓ ┌ +
|