Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <iostream>
- #include <cstdlib>
- int** FreeMemory(int, int**); //Очистка матрицы
- int** SizeOfMatr(int*, int*); //Ввод размеров матрицы и выделение памяти, соответствующего размера
- void InputData(int, int, int**); //Ввод элементов матрицы
- void OutputData(int, int, int**); //Вывод заданной матрицы
- int** Change(int, int, int**, int*); //Преобразования над матрицей
- int main()
- {
- setlocale(0, "");
- int **a=0, **b=0, s, n, m, cur;
- bool A = false, B, C=false, flag;
- do
- {
- system("cls");
- puts("Нажмите:\n 1 - если хотите задать размер массива\n");
- puts("2 - если хотите ввести элементы массива\n");
- puts("3 - если хотите вывести ваш массив\n");
- puts("4 - если хотите выполнить преобразования над массивом\n");
- puts("5 - если хотите вывести результат\n");
- puts("0 - если хотите выйти\n");
- scanf_s("%d", &s);
- switch (s)
- {
- case 1:
- system("cls");
- if (A == true)
- a = FreeMemory(n, a);
- a = SizeOfMatr(&n, &m);
- A = true;
- B = false;
- break;
- case 2:
- system("cls");
- if (A == true)
- {
- InputData(n, m, a);
- B = true;
- }
- else
- {
- puts("Ошибка! Введите размер массива!");
- puts("\n");
- system("pause");
- }
- break;
- case 3:
- system("cls");
- if (A == true)
- {
- if (B == true)
- {
- OutputData(n, m, a);
- }
- else
- puts("Ошибка! Введите элементы массива!");
- }
- else
- puts("Ошибка! Введите размер массива!");
- puts("\n");
- system("pause");
- break;
- case 4:
- system("cls");
- if (A == true)
- {
- if (B == true)
- {
- if (C == true)
- b = FreeMemory(cur, b);
- b = Change(n, m, a, &cur);
- C = true;
- }
- else
- puts("Ошибка! Введите элементы массива!\n");
- }
- else
- puts("Ошибка!Введите размер массива!");
- puts("\n");
- system("pause");
- break;
- case 5:
- system("cls");
- if (A == true)
- {
- if (B == true)
- {
- if (C == true)
- {
- if (cur == 0) puts("Массив не сформирован");
- else
- OutputData(n, cur, b);
- }
- else
- puts("Ошибка! Выполните преобразования!");
- }
- else
- puts("Ошибка! Введите элементы массива!\n");
- }
- else
- puts("Ошибка!Введите размер массива!");
- puts("\n");
- system("pause");
- break;
- case 0: system("cls");
- puts("Конец программы!\n");
- system("pause");
- break;
- default:
- system("cls");
- puts("Ошибка! Нажмите цифру, соответствующую одному из пунктов меню! \n");
- system("pause");
- break;
- }
- } while (s != 0);
- return 0;
- }
- //Функция для очистки памяти, занимаемой матрицей
- int** FreeMemory(int n, int** matr)
- {
- for (int i = 0; i < n; i++)
- free(*(matr + i));
- free(matr);
- return NULL;
- }
- //Функция для ввода размеров матрицы и выделения памяти, соответствующего размера
- int** SizeOfMatr(int *n, int *m)
- {
- int **matr;
- do
- {
- printf("Введите число строк матрицы\n");
- scanf("%d",n);
- if(*n < 1)
- printf("1 < Число строк\n");
- }
- while(*n < 1);
- do
- {
- printf("Введите число столбцов матрицы\n");
- scanf("%d",m);
- if(*m < 1)
- printf("1 < Число столбцов\n");
- }
- while(*m < 1);
- matr = (int**)malloc(*n*sizeof(int*));
- for(int i = 0;i < *n;i++)
- *(matr+i) = (int*)malloc(*m*sizeof(int));
- return matr;
- }
- //Функция для ввода элементов матрицы
- void InputData(int n, int m, int** matr)
- {
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++)
- {
- printf("Введите элемент массива [%d,%d] ", i, j);
- scanf_s("%d", *(matr + i) + j);
- }
- }
- //Функция для вывода матрицы
- void OutputData(int n, int m, int** matr)
- {
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < m; j++)
- printf("%4d", *(*(matr + i) + j));
- printf("\n");
- }
- }
- //Функция для выполнения преобразований над матрицей
- int** Change(int m,int n,int **matr,int *cur)
- {
- int **newmatr = NULL;
- *cur = 0;
- int j;bool flag;
- for(int i = 0;i < n;i++)
- {
- for(j = 0,flag = false;j < m-1 && !flag;j++)
- if(*(*(matr+i)+j) < *(*(matr+i)+j+1))
- flag = true;
- if(flag == false)
- {
- newmatr = (int**)realloc(newmatr,(*cur+1)*sizeof(int*));
- *(newmatr + *cur) = (int*)malloc(m*sizeof(int));
- for(int j = 0;j < m;j++)
- *(*(newmatr+*cur)+j) = *(*(matr+i)+j);
- *cur = *cur +1;
- }
- }
- printf("Новая матрица рассчитана.\n");
- return newmatr;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement