valentinshmickov, Библиотеку к проекту надеюсь знаешь как подключать?
Код
#include <fstream>
#include<locale.h>
#include<time.h>
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
#include <iostream>
#include <string.h>
#include <omp.h>
using namespace std;
struct maxmin
{
maxmin() {}
double min;
double max;
};
double **filein(int n, int m)
{
double **mass = new double *[n];
cout << "Исходный массив" << endl;
double nm = n * m, id=0;
for (int i = 0;i < n; i++)
{
mass [i]= new double[m];
for (int j = 0;j < m;j++)
{
id++;
mass [i][j]= 1 + rand() % 1001;
now:
int i1 = i, j1 = j - 1;
while (1)
{
if (i1 == -1) { break; }
if ((mass[i1][j1] == mass[i][j]) && ((i == i1 && j > j1) || (i > i1)))
{
srand(time(NULL));
mass [i][j]= 1 + rand() % 1001;
goto now;
}
j1--;
if (j1 < 0) { i1--; j1 = m - 1; }
if (i1 < 0)
{
break;
}
}
cout << (id * 100) / nm << "% ";
}
}
cout << endl;
for (int i = 0;i < n;i++)
{
for (int j = 0;j < m;j++)
{
cout << mass [i][j]<< "\t";
}
cout << endl;
}
return mass;
}
maxmin обработчик1(double **mass, int n, int m)
{
maxmin res;
res.min = res.max = mass[1][1];
for (int i = 0;i < n;i++)
{
for (int j = 0;j < m;j++)
{
if (res.max < mass[i][j]) { res.max = mass[i][j]; }
else if (res.min > mass[i][j]) { res.min = mass[i][j]; }
}
}
return res;
}
double **обработчик2(double **mass, int n, int m)
{
start:
cout << "Как отсортировать элементы матрицы (возрастанию - 1/убыванию - 2)? ";
int ty;
cin >> ty;
if (ty == 1)
{
double tmp;
for (int i = 0; i < n;i++)
for (int j = 0;j < m;j++)
for (int i1 = 0;i1 < n;i1++)
for (int j1 = 0;j1 < m;j1++)
{
if ((mass[i1][j1] < mass[i][j]) && ((i == i1 && j<j1) || (i<i1)))
{
tmp = mass[i][j];
mass [i][j]= mass[i1][j1];
mass[i1][j1] = tmp;
}
}
}
else if (ty == 2)
{
double tmp;
for (int i = 0; i < n;i++)
for (int j = 0;j < m;j++)
for (int i1 = 0;i1 < n;i1++)
for (int j1 = 0;j1 < m;j1++)
{
if ((mass[i1][j1] > mass[i][j]) && ((i == i1 && j<j1) || (i<i1)))
{
tmp = mass[i][j];
mass [i][j]= mass[i1][j1];
mass[i1][j1] = tmp;
}
}
}
else
{
cout << "Вы ввели неправильное значение" << endl;
goto start;
}
return mass;
}
int main(int argc, char *argv)
{
setlocale(LC_ALL, "Russian");
srand(time(NULL)); int n, m;
cout << "Введите размерность (столбы строки): "; cin >> n >> m;
system("pause");
maxmin max_min;
double **mass = filein(n, m);
double **sortmass;
#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
{
max_min = обработчик1(mass, n, m);
}
#pragma omp section
{
sortmass = обработчик2(mass, n, m);
}
}
}
cout << "Результаты работы программы" << endl;
cout << "Минимальный элемент массива - " << max_min.min << endl;
cout << "Максимальный элемент массива - " << max_min.max << endl;
cout << "Отсортированный массив:" << endl;
for (int i = 0;i < n;i++)
{
for (int j = 0;j < m;j++)
{
cout << sortmass [i][j]<< "\t";
}
cout << endl;
}
system("pause");
}