Сортировка строк двухмерного динамического массива по возрастанию - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите,пожалуйста, написать программу так,чтобы программный код, выполняющий действия пунктов меню выполнялся в отдельных

функциях

. И

без использования глобальных функций

. А вот исходный код,если что, без функций.Вот этот
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. #include <time.h>
  5. #define _CRTDBG_MAP_ALLOC
  6. #include <crtdbg.h>
  7.  
  8. int main()
  9. {
  10. setlocale(0, "");
  11. srand(time(NULL));
  12. int height = 0;
  13. int width = 0;
  14. int numb = 0;
  15. int numb2 = 0;
  16. int t = 0;
  17. int sort;
  18. int **a = NULL;
  19. a = new int * [height];
  20. for ( int i = 0; i < height; i ++ )
  21. {
  22. a[i] = new int [width];
  23. }
  24. printf("Программа сортировки строк двухмерного динамического массива по возрастанию\n\n");
  25. do
  26. {
  27. fflush(stdin);
  28. printf("1. Задать размерность двухмерного массива\n");
  29. printf("2. Выбор заполнения массива\n");
  30. printf("3. Вывод необработанного массива\n");
  31. printf("4. Обработка массива\n");
  32. printf("5. Вывод обработанного массива на экран\n");
  33. printf("0. Выход и программы\n");
  34. scanf_s("%d", &numb);
  35. system("cls");
  36. switch(numb)
  37. {
  38. case 1:
  39. {
  40. for ( int i = 0; i < height; i ++ )
  41. {
  42. delete [] a[i];
  43. }
  44. delete [] a;
  45. height = 0;
  46. width = 0;
  47. do
  48. {
  49. fflush(stdin);
  50. printf("Введите размерность массива: ");
  51. printf("\nШирина:> ");
  52. scanf_s("%d", &width);
  53. printf("Высота:> ");
  54. scanf_s("%d", &height);
  55. system("cls");
  56. }
  57. while ( height <= 0 || width <= 0);
  58. a = new int * [height];
  59. for ( int i = 0; i < height; i ++ )
  60. {
  61. a[i] = new int [width];
  62. }
  63. t = 1;
  64. break;
  65. }
  66. case 2:
  67. {
  68. if ( t > 0 )
  69. {
  70. do
  71. {
  72. fflush(stdin);
  73. printf("Выберите:\n 1. С клавиатуры\n 2. Рандомно\n");
  74. scanf_s("%d", &numb2);
  75. system("cls");
  76. }
  77. while ( numb2 != 1 && numb2 != 2 );
  78. switch (numb2)
  79. {
  80. case 1:
  81. {
  82. printf("Заполните массив:\n");
  83. for ( int i = 0; i < height; i ++ )
  84. {
  85. for( int j = 0; j < width; j ++ )
  86. {
  87. printf("Введите элемент %d-ой строчки %d-ого столбца: ", i + 1, j + 1);
  88. scanf_s("%d", &a[i][j]);
  89. }
  90. system("cls");
  91. }
  92. break;
  93. }
  94. case 2:
  95. {
  96. printf("Массив заполнен рандомно");
  97. getchar();
  98. getchar();
  99. system("cls");
  100. for ( int i = 0; i < height; i ++ )
  101. {
  102. for( int j = 0; j < width; j ++ )
  103. {
  104. a[i][j] = rand() % 50 - 25;
  105. }
  106. }
  107. break;
  108. }
  109. }
  110. t = 2;
  111. }
  112. else
  113. {
  114. printf("Задайте размерность массива\n");
  115. getchar();
  116. getchar();
  117. system("cls");
  118. }
  119. break;
  120. }
  121. case 3:
  122. {
  123. if ( t == 2 )
  124. {
  125. printf("Вот сам массив:\n");
  126. for ( int i = 0; i < height; i ++ )
  127. {
  128. for( int j = 0; j < width; j ++ )
  129. {
  130. printf("%4d", a[i][j]);
  131. }
  132. printf("\n");
  133. }
  134. getchar();
  135. getchar();
  136. system("cls");
  137. break;
  138. }
  139. else
  140. {
  141. printf("Сделайте предыдущий шаг");
  142. getchar();
  143. getchar();
  144. system("cls");
  145. break;
  146. }
  147. break;
  148. }
  149. case 4:
  150. {
  151. if ( t == 2 )
  152. {
  153. int * x = NULL;
  154. for( int i = 0; i < height; ++ i )
  155. {
  156. for( int j = i + 1; j < height; ++ j )
  157. {
  158. if( a[i][0] > a[j][0] )
  159. {
  160. x = a[i];
  161. a[i] = a[j];
  162. a[j] = x;
  163. }
  164. }
  165. }
  166. printf("Массив обработан\n");
  167. getchar();
  168. getchar();
  169. system("cls");
  170. t = 4;
  171. }
  172. else
  173. {
  174. printf("Сделайте предыдущий шаг");
  175. getchar();
  176. getchar();
  177. system("cls");
  178. }
  179. break;
  180. }
  181. case 5:
  182. {
  183. if ( t == 4 )
  184. {
  185. printf("Вот обработанный массив\n");
  186. for ( int i = 0; i < height; i ++ )
  187. {
  188. for( int j = 0; j < width; j ++ )
  189. {
  190. printf("%4d", a[i][j]);
  191. }
  192. printf("\n");
  193. }
  194. getchar();
  195. getchar();
  196. system("cls");
  197. }
  198. else
  199. {
  200. printf("Сделаете предыдущие шаги");
  201. getchar();
  202. getchar();
  203. system("cls");
  204. }
  205. break;
  206. }
  207. }
  208. }
  209. while ( numb != 0 );
  210. for ( int i = 0; i < height; i ++ )
  211. {
  212. delete [] a[i];
  213. }
  214. delete [] a;
  215. _CrtDumpMemoryLeaks();
  216. return 0;
  217. }
Я тут наколякал,но я не профи пока в программировании.Так что это не верно немного)))
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. #include <time.h>
  5. #define _CRTDBG_MAP_ALLOC
  6. #include <crtdbg.h>
  7. void case1(int **a,int height,int width);
  8. void case1(int **a,int height,int width)
  9. {
  10. for ( int i = 0; i < height; i ++ )
  11. {
  12. delete [] a[i];
  13. }
  14. delete [] a;
  15. height = 0;
  16. width = 0;
  17. do
  18. {
  19. fflush(stdin);
  20. printf("Введите размерность массива: ");
  21. printf("\nШирина:> ");
  22. scanf_s("%d", &width);
  23. printf("Высота:> ");
  24. scanf_s("%d", &height);
  25. system("cls");
  26. }
  27. while ( height <= 0 || width <= 0);
  28. a = new int * [height];
  29. for ( int i = 0; i < height; i ++ )
  30. {
  31. a[i] = new int [width];
  32. }
  33. }
  34.  
  35. void case2(int **a,int height,int width,int numb2);
  36. void case2(int **a,int height,int width, int numb2)
  37. {
  38. system("cls");
  39. do
  40. {
  41. fflush(stdin);
  42. printf("Выберите:\n 1. С клавиатуры\n 2. Рандомно\n");
  43. scanf_s("%d", &numb2);
  44. system("cls");
  45. }
  46. while ( numb2 != 1 && numb2 != 2 );
  47. switch (numb2)
  48. {
  49. case 1:
  50. {
  51. printf("Заполните массив:\n");
  52. for ( int i = 0; i < height; i ++ )
  53. {
  54. for( int j = 0; j < width; j ++ )
  55. {
  56. printf("Введите элемент %d-ой строчки %d-ого столбца: ", i + 1, j + 1);
  57. scanf_s("%d", &a[i][j]);
  58. }
  59. system("cls");
  60. }
  61. break;
  62. }
  63. case 2:
  64. {
  65. printf("Массив заполнен рандомно");
  66. getchar();
  67. system("cls");
  68. for ( int i = 0; i < height; i ++ )
  69. {
  70. for( int j = 0; j < width; j ++ )
  71. {
  72. a[i][j] = rand() % 50 - 25;
  73. }
  74. }
  75. break;
  76. }
  77. }
  78. }
  79.  
  80. void case3(int **a,int height,int width);
  81. void case3(int **a,int height,int width)
  82. {
  83. system("cls");
  84. printf("Вот сам массив:\n");
  85. for ( int i = 0; i < height; i ++ )
  86. {
  87. for( int j = 0; j < width; j ++ )
  88. {
  89. printf("%4d", a[i][j]);
  90. }
  91. printf("\n");
  92. }
  93. getchar();
  94. system("cls");
  95. }
  96. void case4(int **a,int height,int width, int *x);
  97. void case4(int **a,int height,int width, int *x)
  98. {
  99. system("cls");
  100. for( int i = 0; i < height; ++ i )
  101. {
  102. for( int j = i + 1; j < height; ++ j )
  103. {
  104. if( a[i][0] > a[j][0] )
  105. {
  106. x = a[i];
  107. a[i] = a[j];
  108. a[j] = x;
  109. }
  110. }
  111. }
  112. printf("Массив обработан\n");
  113. getchar();
  114. system("cls");
  115. }
  116. void case5(int **a,int height,int width);
  117. void case5(int **a,int height,int width)
  118. {
  119. system("cls");
  120. printf("Вот обработанный массив\n");
  121. for ( int i = 0; i < height; i ++ )
  122. {
  123. for( int j = 0; j < width; j ++ )
  124. {
  125. printf("%4d", a[i][j]);
  126. }
  127. printf("\n");
  128. }
  129. getchar();
  130. system("cls");
  131. }
  132. void del(int **a,int height);
  133. void del(int **a,int height)
  134. {
  135. for ( int i = 0; i < height; i ++ )
  136. {
  137. delete [] a[i];
  138. }
  139. delete [] a;
  140. }
  141. int print( int n );
  142. int print( int n )
  143. {
  144. if ( 1 == n )
  145. {
  146. fflush(stdin);
  147. printf("1. Задать размерность двухмерного массива\n");
  148. printf("2. Выбор заполнения массива\n");
  149. printf("3. Вывод необработанного массива\n");
  150. printf("4. Обработка массива\n");
  151. printf("5. Вывод обработанного массива на экран\n");
  152. printf("0. Выход и программы\n");
  153. }
  154. int m;
  155. scanf_s("%d", &m);
  156. getchar();
  157. return m;
  158. }
  159. int main()
  160. {
  161. setlocale(0, "");
  162. srand(time(NULL));
  163. int height = 0;
  164. int width = 0;
  165. int numb2 = 0;
  166. int t = 0;
  167. int sort;
  168. int **a = NULL;
  169. int *x = NULL;
  170. a = new int * [height];
  171. for ( int i = 0; i < height; i ++ )
  172. {
  173. a[i] = new int [width];
  174. }
  175. printf("Программа сортировки строк двухмерного динамического массива по возрастанию\n\n");
  176. int menu = 0;
  177. do
  178. {
  179. menu = print(1);
  180. switch(menu)
  181. {
  182. case 1:
  183. {
  184. case1(a,height,width);
  185. t = 1;
  186. break;
  187. }
  188. case 2:
  189. {
  190. if ( t > 0 )
  191. {
  192. case2(a,height,width, numb2);
  193. t = 2;
  194. }
  195. else
  196. {
  197. printf("Задайте размерность массива\n");
  198. getchar();
  199. getchar();
  200. system("cls");
  201. }
  202. break;
  203. }
  204. case 3:
  205. {
  206. if ( t == 2 )
  207. {
  208. case3(a,height,width);
  209. t = 3;
  210. break;
  211. }
  212. else
  213. {
  214. printf("Сделайте предыдущий шаг");
  215. getchar();
  216. getchar();
  217. system("cls");
  218. break;
  219. }
  220. break;
  221. }
  222. case 4:
  223. {
  224. if ( t == 3 )
  225. {
  226. case4(a, height, width, x);
  227. t = 4;
  228. }
  229. else
  230. {
  231. printf("Сделайте предыдущий шаг");
  232. getchar();
  233. getchar();
  234. system("cls");
  235. }
  236. break;
  237. }
  238. case 5:
  239. {
  240. if ( t == 4 )
  241. {
  242. case5(a,height,width);
  243. }
  244. else
  245. {
  246. printf("Сделаете предыдущие шаги");
  247. getchar();
  248. getchar();
  249. system("cls");
  250. }
  251. break;
  252. }
  253. }
  254. }
  255. while ( menu != 0 );
  256. del(a,height);
  257. _CrtDumpMemoryLeaks();
  258. return 0;
  259. }

Решение задачи: «Сортировка строк двухмерного динамического массива по возрастанию»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. #include <time.h>
  5.  
  6. void init() {
  7.     setlocale(0, "");
  8.     srand(time(NULL));
  9.     printf( "Программа сортировки строк двухмерного динамического массива по возрастанию\n\n");
  10.  
  11. }
  12.  
  13. int **alloc_array(int n_row, int n_col) {
  14.     int **a =(int**)malloc (n_row*sizeof(int*));
  15.     for (int i = 0; i < n_row; i++) {
  16.         a[i] = (int*)malloc(n_col*sizeof(int));
  17.     }
  18.     return a;
  19. }
  20. // int ***a, чтобы вернуть из функции адрес массива
  21. void case1(int ***a, int *n_col, int *n_row) {
  22.     do {
  23.         //1\fflush(stdin);
  24.         printf("Введите размерность массива: ");
  25.         printf("\nШирина:> ");
  26.         scanf("%d", n_col);
  27.         printf("Высота:> ");
  28.         scanf("%d", n_row);
  29.         //system("cls");
  30.     } while (*n_row <= 0 || *n_col <= 0);
  31.     //здесь отдаем адрес наружу
  32.     *a = alloc_array(*n_row, *n_col);
  33. }
  34.  
  35. void case2(int **a, int n_row, int n_col) {
  36.     int vybor;
  37.     if (a != NULL) {
  38.         do {
  39.             //fflush(stdin);
  40.             printf("Выберите:\n 1. С клавиатуры\n 2. Рандомно\n");
  41.             scanf("%d", &vybor);
  42.             system("cls");
  43.         } while (vybor != 1 && vybor != 2);
  44.         switch (vybor) {
  45.         case 1: {
  46.             printf("Заполните массив:\n");
  47.             for (int i = 0; i < n_row; i++) {
  48.                 for (int j = 0; j < n_col; j++) {
  49.                     printf("Введите элемент %d-ой строчки %d-ого столбца: ",
  50.                             i + 1, j + 1);
  51.                     scanf("%d", &a[i][j]);
  52.                 }
  53.                 system("cls");
  54.             }
  55.             break;
  56.         }
  57.         case 2: {
  58.             printf("Массив заполнен случайными числами");
  59.             getchar();
  60.             getchar();
  61.             system("cls");
  62.             for (int i = 0; i < n_row; i++) {
  63.                 for (int j = 0; j < n_col; j++) {
  64.                     a[i][j] = rand() % 50 - 25;
  65.                 }
  66.             }
  67.             break;
  68.         }
  69.         }
  70.     } else {
  71.         printf("Сделайте предыдущий шаг");
  72.         getchar();
  73.         getchar();
  74.         system("cls");
  75.     }
  76. }
  77.  
  78. void case3(int **a, int n_row, int n_col) {
  79.     if (a != NULL) {
  80.         printf("Вот сам массив:\n");
  81.         for (int i = 0; i < n_row; i++) {
  82.             for (int j = 0; j < n_col; j++) {
  83.                 printf("%4d", a[i][j]);
  84.             }
  85.             printf("\n");
  86.         }
  87.         getchar();
  88.         getchar();
  89.         system("cls");
  90.     } else {
  91.         printf("Сделайте предыдущий шаг");
  92.         getchar();
  93.         getchar();
  94.         system("cls");
  95.     }
  96. }
  97.  
  98. void case4(int **a, int n_row, int n_col) {
  99.     if (a != NULL) {
  100.         int x = 0;
  101.         for (int i = 0; i < n_row; ++i) {
  102.             for (int j = 0; j < n_col; ++j) {
  103.                 {
  104.                     // тут разобраться в вашем коде
  105.                     a[i][i] = 0;
  106.                 }
  107.             }
  108.         }
  109.         printf("Массив обработан\n");
  110.         getchar();
  111.         getchar();
  112.         //system("cls");
  113.     } else {
  114.         printf("Сделайте предыдущий шаг");
  115.         getchar();
  116.         getchar();
  117.         system("cls");
  118.     }
  119. }
  120.  
  121. void case5(int **a, int n_row, int n_col) {
  122.     if (a != NULL) {
  123.         printf("Вот обработанный массив\n");
  124.         for (int i = 0; i < n_row; i++) {
  125.             for (int j = 0; j < n_col; j++) {
  126.                 printf("%4d", a[i][j]);
  127.             }
  128.             printf("\n");
  129.         }
  130.         getchar();
  131.         getchar();
  132.         system("cls");
  133.  
  134.     } else {
  135.         printf("Сделаете предыдущие шаги");
  136.         getchar();
  137.         getchar();
  138.         system("cls");
  139.     }
  140. }
  141.  
  142. void destroy(int **a, int n_row) {
  143.     for (int i = 0; i < n_row; i++) {
  144.         free(a[i]);
  145.     }
  146.     free(a);
  147. }
  148. void menu() {
  149.     int n_row = 0;
  150.     int n_col = 0;
  151.     int **a = NULL;
  152.     init();
  153.     int vybor = 0;
  154.     do {
  155.         //fflush(stdin);
  156.         printf("1. Задать размерность двухмерного массива\n");
  157.         printf("2. Выбор заполнения массива\n");
  158.         printf("3. Вывод необработанного массива\n");
  159.         printf("4. Обработка массива\n");
  160.         printf("5. Вывод обработанного массива на экран\n");
  161.         printf("0. Выход и программы\n");
  162.         scanf("%d", &vybor);
  163.         system("cls");
  164.         switch (vybor) {
  165.         case 1: {
  166.             case1(&a, &n_row, &n_col);
  167.             break;
  168.         }
  169.         case 2: {
  170.             case2(a, n_row, n_col);
  171.             break;
  172.         }
  173.         case 3: {
  174.             case3(a, n_row, n_col);
  175.             break;
  176.         }
  177.         case 4: {
  178.             case4(a, n_row, n_col);
  179.             break;
  180.         }
  181.         case 5: {
  182.             case5(a, n_row, n_col);
  183.             break;
  184.         }
  185.         }
  186.     } while (vybor != 0);
  187.     destroy(a, n_row);
  188. }
  189.  
  190. int main() {
  191.     menu();
  192.     return 0;
  193. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы