Перед первым столбцом матрицы, содержащим только положительные элементы, вставить столбец из единиц - C (СИ)

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

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

Дана матрица размера M × N. Перед первым столбцом, содержащим только положительные элементы, вставить столбец из единиц. Если требуемых столбцов нет, то вывести матрицу без изменений. Уже 5 часов не могу доделать программу, подскажите пожалуйста. Столбец с положительными элементами нахожу, а вставить столбец из единиц не могу. Пытался сделать через дополнительную матрицу, вот код:
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. #include <time.h>
  5. int main()
  6. {
  7. setlocale(LC_CTYPE,"Russian");
  8. printf("Введите размер матрицы N = ");
  9. int N,M;
  10. srand(time(NULL));
  11. scanf("%d",&N);
  12. if(N<2){
  13. printf("В матрице должно быть минимум 2 строки!");
  14. return 0;
  15. }
  16. printf("Введите размер матрицы M = ");
  17. scanf("%d",&M);
  18. int arr[N][M];
  19. int i,j;
  20. ///Initialize
  21. printf("Ввести матрицу вручную или автоматически?\n1. Вручную\n2. Автоматически\n");
  22. int sw;
  23. scanf("%d",&sw);
  24. if(sw == 2){
  25. for(i=0;i<=N-1;i++){
  26. for(j=0;j<=M-1;j++){
  27. arr[i][j] = rand()/400-20;
  28. }
  29. }
  30. } else {
  31. printf("\nВведите элементы матрицы:\n");
  32. for(i=0;i<=N-1;i++){
  33. for(j=0;j<=M-1;j++){
  34. scanf("%d",&arr[i][j]);
  35. }
  36. }
  37. }
  38. printf("\nПервоначальная матрица:\n");
  39. ///M - строки N - столбцы
  40. ///Вывод первоначальной матрицы
  41. for(i=0;i<=N-1;i++){
  42. printf("\n");
  43. for(j=0;j<=M-1;j++){
  44. printf("%3d ",arr[i][j]);
  45. }
  46. }
  47. ///program
  48. ///-------------------поиск столбца с положительными членами------------------
  49. int current = 0,z=0,stl = -1;
  50. for(j=0;j<M;j++){
  51. for(i=0;i<N;i++){
  52. if(arr[i][j]>0 && current == j){
  53. z++;///Если строка одна и элемент больше нуля увеличиваем счётчик
  54. if(z == N){ ///z == N-1 если счётчик равен количеству элементов столбца
  55. stl = j; ///Присваиваем номер столбца в котором все члены положительны
  56. break;
  57. }
  58. }
  59. if(i == N-1){///если последняя итерация то увеличиваем строку на 1
  60. current++;
  61. z = 0;
  62. }
  63. }
  64. }
  65. printf("Положительные члены в %d столбце",stl);
  66. ///---------------нашли столбец и засунули в stl------------------------
  67. int siz = M+1;
  68. int narr[N][siz];
  69. int temp;
  70. int k = 1; ///Счётчик для сдвига матрицы
  71. if(stl != -1){
  72. printf("\nНовая матрица:\n");
  73. for(i=0;i<N;i++){
  74. for(j=0;j<siz;j++){
  75. narr[i][j] = 1; ///заполняем массив единицами
  76. }
  77. }
  78. j = 0;
  79. for(i=0;i<N;i++){
  80. for(j=0;j<siz;j++){
  81. if(j == stl){
  82. narr[i][j] = arr[i][stl];
  83. narr[i][j+1] = arr[i][stl];
  84. ///j+=2;
  85. continue;
  86. ///narr[i][j] = arr[i][j]; ///заполняем массив таким же массивом кроме последнего столбца
  87. ///printf("\n--------\n%d\n--------\n",narr[i][j+1]);
  88. }
  89. }
  90. }
  91. for(i=0;i<N;i++){
  92. for(j=0;j<siz;j++){
  93. /**if(j == stl && stl == 0){
  94. temp = narr[i][j];
  95. narr[i][j] = narr[N-1][siz-1];
  96. narr[i][j+1] = temp;
  97. continue;
  98. }
  99. if(j == stl){
  100. temp = narr[i][j];
  101. narr[i][j] = narr[N-1][siz-1];
  102. narr[i][j+1] = temp;
  103. }
  104. */
  105. }
  106. k++;
  107. }
  108. for(i=0;i<N;i++){
  109. printf("\n");
  110. for(j=0;j<siz;j++){
  111. printf("%3d ",narr[i][j]);
  112. }
  113. }
  114. } else {
  115. for(i=0;i<=N-1;i++){
  116. printf("\n");
  117. for(j=0;j<=M-1;j++){
  118. printf("%3d ",arr[i][j]);
  119. }
  120. }
  121. }
  122.  
  123. return 0;
  124. }

Решение задачи: «Перед первым столбцом матрицы, содержащим только положительные элементы, вставить столбец из единиц»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define M  10
  4. #define N  3
  5.  
  6. int matrix_insert(int mat[N][M], int m){
  7.     int i, j, a, b;
  8.     for(j = 0; j < m; ++j){
  9.         i = 0;
  10.         while((i < N) && (mat[i][j] > 0))
  11.             ++i;
  12.  
  13.         if(i == N){
  14.             for(a = 0; a < N; ++a){
  15.                 for(b = m; b > j; --b)
  16.                     mat[a][b] = mat[a][b - 1];
  17.                 mat[a][b] = 1;
  18.             }
  19.             ++m;
  20.             ++j;
  21.         }
  22.     }
  23.     return m;
  24. }
  25.  
  26. int main(void){
  27.     int i, j, m;
  28.     int mat[N][M];
  29.  
  30.     m = M / 2;
  31.     for(i = 0; i < N; ++i){
  32.         for(j = 0; j < m; ++j)
  33.             mat[i][j] = ((rand() % 10) < 7) ? (2 + rand() % 3) : -(2 + rand() % 3);
  34.     }
  35.  
  36.     m = matrix_insert(mat, m);
  37.     for(i = 0; i < N; ++i){
  38.         for(j = 0; j < m; ++j)
  39.             printf("% 2d ", mat[i][j]);
  40.         putchar('\n');
  41.     }
  42.     return 0;
  43. }

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с массивами и вводом-выводом
  2. Объявление матрицы с фиксированным размером
  3. Определение функции, которая будет вставлять дополнительный столбец из единиц перед первым столбцом матрицы
  4. В функции main создается матрица случайных чисел
  5. Вызывается функция matrix_insert для вставки дополнительного столбца из единиц перед первым столбцом матрицы
  6. Выводится на экран полученная матрица

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


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

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

12   голосов , оценка 4.083 из 5

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

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

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