Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <clocale>
- #include <cstdio>
- #include <iostream>
- #include <cstdlib>
- #include <memory.h>
- #include <ctime>
- #define Char_Height 50
- #define Char_Width 50
- double** Input(int N, int M);
- void Entry(double **a, int N, int M);
- bool Check(char *char_num);
- void Rand(double **a, int N, int M);
- void Process(double **a, int N, int M);
- void Result(double **a, int N, int M);
- void Delete(double **a, int N);
- int Height();
- int Width();
- using namespace std;
- int main()
- {
- setlocale(LC_ALL, "Russian");
- setlocale(LC_ALL, "rus");
- srand(time(NULL));
- double **a = NULL;
- int height = 0, width = 0;
- int menu = 0, menu1 = 0, menu2 = 0;
- int wasEntered = 0;
- int wasInput = 1;
- cout << "Программа для нахождения минимального значения в двумерном массиве\n\n";
- do
- {
- cout << "1. Ввод данных\n";
- cout << "2. Обработка данных\n";
- cout << "3. Вывод результата на экран\n";
- cout << "---------------\n";
- cout << "0. Выход\n";
- cin >> menu;
- switch (menu)
- {
- case 1:
- if (wasInput == 1)
- {
- height = Height();
- width = Width();
- a = Input(height, width);
- cout << "1. Введите значения вручную\n";
- cout <<"2. Введем случайные значения\n";
- cin >> menu1;
- switch (menu1)
- {
- case 1:
- Entry(a, height, width);
- break;
- case 2:
- Rand(a, height, width);
- break;
- default:
- cout << "\aНеверный пункт меню!\n";
- break;
- }
- cout << "\n";
- wasInput = 0;
- wasEntered = 1;
- }
- else
- {
- Delete(a, height);
- cout << "\aПроизведена очистка массива!\nДля введения нового массива нажмите 1.\n\n";
- wasInput = 1;
- wasEntered = 0;
- }
- break;
- case 2:
- if (wasEntered == 1)
- Process(a, height, width);
- else
- cout << "\aСначала нужно задать и ввести массив!\nВыберите пункт меню 1.\n\n";
- break;
- case 3:
- if (wasEntered == 1)
- Result(a, height, width);
- else
- cout << "\aСначала нужно задать и ввести массив!\nВыберите пункт меню 1.\n\n";
- break;
- case 0:
- Delete(a, height);
- break;
- default:
- cout << "\aНеверный пункт меню!\n";
- break;
- }
- } while (menu != 0);
- return 0;
- }
- int Height()
- {
- int height_mass = 0;
- char char_height[Char_Height] = { '0' };
- cout << "Количество строк массива: ";
- cin >> char_height;
- while (Check(char_height) == false || char_height[0] == '-')
- {
- cout << "\aНеверное значение!\nВведите новое значение: ";
- cin >> char_height;
- }
- height_mass = atoi(char_height);
- return height_mass;
- }
- int Width()
- {
- int width_mass = 0;
- char char_width[Char_Width] = { '0' };
- cout << "Колличество столбцов массива: ";
- cin >> char_width;
- while (Check(char_width) == false || char_width[0] == '-')
- {
- cout << "\aНеверное значение!\nВведите новое значение: ";
- cin >> char_width;
- }
- width_mass = atoi(char_width);
- return width_mass;
- }
- double** Input(int N, int M)
- {
- double **a = new double*[N];
- for (int i = 0; i < N; i++)
- a[i] = new double[M];
- return a;
- }
- void Entry(double **a, int N, int M)
- {
- char char_num[Char_Height];
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < M; j++)
- {
- printf("элемент [%d,%d]: ", i + 1, j + 1);
- cin >> char_num;
- while (Check(char_num) == false)
- {
- cout << "\aВведено неверное значение!\n";
- printf("элемент [%d,%d]: ", i + 1, j + 1);
- cin >> char_num;
- }
- a[i][j] = atoi(char_num);
- }
- }
- }
- bool Check(char *char_num)
- {
- int i = 0;
- if (char_num[0] == '-' && char_num[1] != '\0')
- i++;
- while (char_num[i] != '\0')
- {
- if (char_num[i] < '0' || char_num[i] > '9')
- return false;
- i++;
- }
- return true;
- }
- void Rand(double **a, int N, int M)
- {
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < M; j++)
- {
- a[i][j] = (1 + rand() % 100) / double((1 + rand() % 10));
- }
- }
- }
- void Process(double **a, int N, int M)
- {
- double temp = 0, temp1 = 0;
- double min = a[0][0];
- int num_height = 0, num_width = 0;
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < M; j++)
- {
- if (a[i][j] < min)
- {
- min = a[i][j];
- num_height = i;
- num_width = j;
- }
- }
- }
- printf("\nМинимальное элемент матрицы: %.2f\n", min);
- printf("Номер строки минимального элемента %d\nНомер столбца минимального элемента %d\n\n", num_height + 1, num_width + 1);
- if (min != a[0][0] && min != a[num_height][0])
- {
- for (int i = 0; i < N; i++)
- {
- temp = a[i][num_width];
- a[i][num_width] = a[i][0];
- a[i][0] = temp;
- }
- min = a[num_height][0];
- cout << "\nПроизведена перестановка столбцов.\n\n";
- }
- else
- cout << "\nПерестановка столбцов не требуется, так как элемент находится в 1 столбце\n\n";
- if (min != a[0][0] && min != a[0][num_width])
- {
- for (int j = 0; j < M; j++)
- {
- temp1 = a[num_height][j];
- a[num_height][j] = a[0][j];
- a[0][j] = temp1;
- }
- cout << "\nПроизведена перестановка строк.\n\n";
- }
- else
- cout << "\nПерестановка строк не требуется, так как элемент находится в 1 строке\n\n";
- }
- void Result(double **a, int N, int M)
- {
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < M; j++)
- {
- printf("%10.2f", a[i][j]);
- }
- cout << "\n";
- }
- }
- void Delete(double **a, int N)
- {
- for (int i = 0; i < N; i++)
- {
- delete[] a[i];
- }
- delete[] a;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement