Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <conio.h>
- #include <locale.h>
- #include <ctime>
- #include <stdlib.h>
- #include <ctime>
- constexpr int N = 50;
- int read(double arr[N][N], int n, int m);
- void random(double arr[N][N], int n, int m);
- int print_variant(int& count);
- void printTable(double arr[N][N], int n, int m);
- void opisanie();
- void zna(int& n, int& m, int N, int &obr);
- void Menu();
- double summa(double arr[N][N], int n, int m, double sum);
- void obrabotka(double arr[N][N], double arrsumM[N][N], double arrsumN[N][N], double p, double y, double x, int m, int n, double ara[N], double sum);
- int main()
- {
- setlocale(LC_ALL, "Russian");
- double arr[N][N];
- int n = -1, m = -1, count = -56, op;
- double arrsumM[N][N];
- double arrsumN[N][N];
- int x = 0, y = 0;
- double ara[N];
- double sum, p;
- int obr;
- obr = -1;
- p = 0; sum = 0; int vibor = -56;
- while (vibor != 5)
- {
- system("cls");
- Menu();
- vibor = print_variant(count);
- switch (vibor) {
- case 1:
- opisanie();
- break;
- case 2:
- if (obr == 1)
- printf("Будет введена новая матрица\n");
- else
- printf("Будет введена матрица\n");
- printf("Как вы хотите заполнить матрицу?\n");
- printf("Введите 1, если случайным образом\n");
- printf("Введите 2, если хотите ввести её\n");
- scanf_s("%d", &op);
- while (op != 1 && op != 2)
- scanf_s("%d", &op);
- if (op == 2)
- {
- zna(n, m, N, obr);
- while (read(arr, n, m) == 1)
- printf("Значения введены некорректно, повторите попытку");
- obr = 1;
- }
- else if (op == 1)
- {
- zna(n, m, N, obr);
- random(arr, n, m);
- obr = 1;
- }
- break;
- case 3:
- if (obr == -1)
- printf("Сперва сформируйте матрицу, чтобы её обработать\n");
- else
- printf("Сейчас ваша матрица будет обработана\n");
- obrabotka(arr, arrsumM, arrsumN, p, y, x, m, n, ara, sum);
- break;
- case 4:
- if (obr == -1)
- printf("невозможно, таблица не была введена\n");
- else
- printTable(arr, n, m);
- break;
- }
- system("pause");
- if (vibor == 5)
- {
- system("cls");
- return 0;
- }
- }
- return 0;
- }
- int read(double arr[N][N], int n, int m) // функция ввода матрицы
- {
- printf("Введите вашу матрицу\n");
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++)
- {
- if (scanf_s("%lf", &arr[i][j]) == 0)
- return 1;
- }
- return 0;
- }
- void zna(int& n, int& m, int N, int &obr) // функция ввода размеров
- {
- n = -56; m = -56;
- while (n < 1 || n > N)
- {
- printf("Введите размер строки, пока он не будет превышать ограничение на размер или измените размер\n");
- scanf_s("%d", &n);
- }
- while (m < 1 || m > N)
- {
- printf("Введите размер столбца, пока он не будет превышать ограничение на размер или измените размер\n");
- scanf_s("%d", &m);
- }
- }
- void printTable(double arr[N][N], int n, int m) // функция вывода матрицы
- {
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++)
- {
- printf("%10.2lf", arr[i][j]);
- if (j == m - 1)
- printf("\n");
- }
- }
- double summa(double arr[N][N], int n, int m, double sum)
- {
- for (int i = 0; i < n; i++) // Здесь мы ищем сумму всех элементов матрицы
- for (int j = 0; j < m; j++)
- sum += arr[i][j];
- printf("\n");
- printf("Cумма элементов массива равна %.2lf", sum);
- return sum;
- }
- void Menu()
- {
- printf("********| Выберите предложенные № |********\n");
- printf("-------------------------------------------\n");
- printf("* 1) Описание программы *\n");
- printf("-------------------------------------------\n");
- printf("* 2) Заполнение матрицы *\n");
- printf("-------------------------------------------\n");
- printf("* 3) Обработка матрицы *\n");
- printf("-------------------------------------------\n");
- printf("* 4) Вывод матрицы *\n");
- printf("-------------------------------------------\n");
- printf("* 5) Выход из меню *\n");
- printf("*******************************************\n");
- }
- int print_variant(int& count)
- {
- while (count != 5)
- {
- scanf_s("%d", &count);
- return count;
- }
- }
- void opisanie()
- {
- printf("Программа получает на вход матрицу. Результатом программы является матрица, полученная из исходной путем вычисления\n");
- printf("суммы элементов выше и правее для каждого элемента матрицы, затем вычитания этих сумм из общей суммы элементов матрицы\n\n");
- }
- void random(double arr[N][N], int n, int m)
- {
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++)
- arr[i][j] = rand() % 100 - 50;
- }
- void obrabotka(double arr[N][N], double arrsumM[N][N], double arrsumN[N][N], double p, double y, double x, int m, int n, double ara[N], double sum)
- {
- for (int i = 0; i < n; i++) // Здесь мы ищем сумму всех элементов матрицы
- for (int j = 0; j < m; j++)
- sum = sum + arr[i][j];
- for (int j = 0; j < m; j++) // находим сумму элементов выше определенного элемента
- for (int i = 1; i < n; i++)
- {
- y = i;
- for (int k = 0; k <= y - 1; k++)
- p += arr[k][j];
- arrsumM[j][i] = p;
- p = 0;
- }
- for (int j = 0; j < m; j++)
- arrsumM[j][0] = 0;
- p = 0;
- for (int i = 0; i < n; i++) // находим сумму элементов правее определенного элемента
- for (int j = 0; j < m - 1; j++)
- {
- x = j;
- for (int k = 0; k <= x; k++)
- p += arr[i][k];
- arrsumN[i][j] = p;
- p = 0;
- }
- for (int i = 0; i < n; i++) // сортируем массив с суммами
- {
- for (int j = 0; j < m - 1; j++)
- ara[j] = arrsumN[i][j];
- for (int j = 0; j < m - 1; j++)
- arrsumN[i][j] = ara[m - j - 2];
- }
- for (int i = 0; i < n; i++) // формируем новую матрицу
- for (int j = 0; j < m; j++)
- arr[i][j] = sum - arrsumM[j][i];
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m - 1; j++)
- arr[i][j] = arr[i][j] - arrsumN[i][j];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement