Advertisement
Guest User

1

a guest
Dec 21st, 2014
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.53 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <cstdlib>
  4.  
  5. int** FreeMemory(int, int**); //Очистка матрицы
  6. int** SizeOfMatr(int*, int*); //Ввод размеров матрицы и выделение памяти, соответствующего размера
  7. void InputData(int, int, int**); //Ввод элементов матрицы
  8. void OutputData(int, int, int**); //Вывод заданной матрицы
  9. int** Change(int, int, int**, int*); //Преобразования над матрицей
  10.  
  11. int main()
  12. {
  13. setlocale(0, "");
  14. int **a=0, **b=0, s, n, m, cur;
  15. bool A = false, B, C=false, flag;
  16.  
  17. do
  18. {
  19. system("cls");
  20. puts("Нажмите:\n 1 - если хотите задать размер массива\n");
  21. puts("2 - если хотите ввести элементы массива\n");
  22. puts("3 - если хотите вывести ваш массив\n");
  23. puts("4 - если хотите выполнить преобразования над массивом\n");
  24. puts("5 - если хотите вывести результат\n");
  25. puts("0 - если хотите выйти\n");
  26. scanf_s("%d", &s);
  27.  
  28. switch (s)
  29. {
  30. case 1:
  31. system("cls");
  32. if (A == true)
  33. a = FreeMemory(n, a);
  34. a = SizeOfMatr(&n, &m);
  35. A = true;
  36. B = false;
  37. break;
  38. case 2:
  39. system("cls");
  40. if (A == true)
  41. {
  42. InputData(n, m, a);
  43. B = true;
  44. }
  45. else
  46. {
  47. puts("Ошибка! Введите размер массива!");
  48. puts("\n");
  49. system("pause");
  50. }
  51. break;
  52. case 3:
  53. system("cls");
  54. if (A == true)
  55. {
  56. if (B == true)
  57. {
  58. OutputData(n, m, a);
  59. }
  60. else
  61. puts("Ошибка! Введите элементы массива!");
  62. }
  63. else
  64. puts("Ошибка! Введите размер массива!");
  65.  
  66. puts("\n");
  67. system("pause");
  68. break;
  69. case 4:
  70. system("cls");
  71. if (A == true)
  72. {
  73. if (B == true)
  74. {
  75. if (C == true)
  76. b = FreeMemory(cur, b);
  77. b = Change(n, m, a, &cur);
  78. C = true;
  79. }
  80. else
  81. puts("Ошибка! Введите элементы массива!\n");
  82. }
  83. else
  84. puts("Ошибка!Введите размер массива!");
  85. puts("\n");
  86. system("pause");
  87.  
  88. break;
  89.  
  90. case 5:
  91. system("cls");
  92. if (A == true)
  93. {
  94. if (B == true)
  95. {
  96. if (C == true)
  97. {
  98. if (cur == 0) puts("Массив не сформирован");
  99. else
  100. OutputData(n, cur, b);
  101. }
  102.  
  103. else
  104. puts("Ошибка! Выполните преобразования!");
  105.  
  106. }
  107. else
  108.  
  109. puts("Ошибка! Введите элементы массива!\n");
  110. }
  111. else
  112. puts("Ошибка!Введите размер массива!");
  113. puts("\n");
  114. system("pause");
  115.  
  116. break;
  117. case 0: system("cls");
  118. puts("Конец программы!\n");
  119. system("pause");
  120. break;
  121.  
  122. default:
  123. system("cls");
  124. puts("Ошибка! Нажмите цифру, соответствующую одному из пунктов меню! \n");
  125. system("pause");
  126. break;
  127.  
  128. }
  129.  
  130.  
  131.  
  132. } while (s != 0);
  133.  
  134. return 0;
  135.  
  136. }
  137.  
  138. //Функция для очистки памяти, занимаемой матрицей
  139.  
  140. int** FreeMemory(int n, int** matr)
  141. {
  142. for (int i = 0; i < n; i++)
  143. free(*(matr + i));
  144. free(matr);
  145. return NULL;
  146. }
  147.  
  148. //Функция для ввода размеров матрицы и выделения памяти, соответствующего размера
  149.  
  150. int** SizeOfMatr(int *n, int *m)
  151. {
  152. int **matr;
  153. do
  154. {
  155. printf("Введите число строк матрицы\n");
  156. scanf("%d",n);
  157. if(*n < 1)
  158. printf("1 < Число строк\n");
  159. }
  160. while(*n < 1);
  161. do
  162. {
  163. printf("Введите число столбцов матрицы\n");
  164. scanf("%d",m);
  165. if(*m < 1)
  166. printf("1 < Число столбцов\n");
  167. }
  168. while(*m < 1);
  169. matr = (int**)malloc(*n*sizeof(int*));
  170. for(int i = 0;i < *n;i++)
  171. *(matr+i) = (int*)malloc(*m*sizeof(int));
  172.  
  173.  
  174. return matr;
  175. }
  176.  
  177. //Функция для ввода элементов матрицы
  178.  
  179. void InputData(int n, int m, int** matr)
  180. {
  181. for (int i = 0; i < n; i++)
  182. for (int j = 0; j < m; j++)
  183. {
  184. printf("Введите элемент массива [%d,%d] ", i, j);
  185. scanf_s("%d", *(matr + i) + j);
  186. }
  187.  
  188. }
  189.  
  190. //Функция для вывода матрицы
  191.  
  192. void OutputData(int n, int m, int** matr)
  193. {
  194. for (int i = 0; i < n; i++)
  195. {
  196. for (int j = 0; j < m; j++)
  197. printf("%4d", *(*(matr + i) + j));
  198. printf("\n");
  199. }
  200. }
  201.  
  202. //Функция для выполнения преобразований над матрицей
  203.  
  204. int** Change(int m,int n,int **matr,int *cur)
  205. {
  206. int **newmatr = NULL;
  207. *cur = 0;
  208. int j;bool flag;
  209. for(int i = 0;i < n;i++)
  210. {
  211.  
  212. for(j = 0,flag = false;j < m-1 && !flag;j++)
  213. if(*(*(matr+i)+j) < *(*(matr+i)+j+1))
  214. flag = true;
  215. if(flag == false)
  216. {
  217. newmatr = (int**)realloc(newmatr,(*cur+1)*sizeof(int*));
  218. *(newmatr + *cur) = (int*)malloc(m*sizeof(int));
  219. for(int j = 0;j < m;j++)
  220. *(*(newmatr+*cur)+j) = *(*(matr+i)+j);
  221. *cur = *cur +1;
  222. }
  223. }
  224. printf("Новая матрица рассчитана.\n");
  225. return newmatr;
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement