В каждом столбце матрицы поменять местами первый отрицательный элемент и последний нулевой - C (СИ)

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

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

мне дана задача: В каждом столбце двумерного массива поменять местами первый отрицательный элемент и последний нулевой. Я написала код, но он не хочет рабоать, я не понимаю почему, найдите пожалуйста ошибку.
Листинг программы
  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5. int i,j,x,y,q,d,f,g,h,z; // i j - индексы массива mas[0][2]
  6. printf("Vvedite zna4enie strok=");
  7. scanf("%d",&x);
  8. while(x<=0) // на случай, если пользователь введет отрицательное количество строк
  9. {
  10. printf("error, kol-vo elementov >0 ");
  11. scanf("%d", &x);
  12. }
  13. printf("\nVvedite zna4enie stolbcov=");
  14. scanf("%d",&y);
  15. while(y<=0) // на случай, если пользователь введет отрицательное количество столбцов
  16. {
  17. printf("error, kol-vo elementov >0 ");
  18. scanf("%d", &y);
  19. }
  20. int M[x][y];
  21. for(i=0;i<x;i++) //пока циклы выполняются, прога будет запрашивать значения элемента
  22. {
  23. for(j=0;j<y;j++)
  24. {
  25. printf("\nVvedite zna4enie elementa [%d][%d]=",i,j);
  26. scanf("%d",&M[i][j]);
  27. }
  28. }
  29. for (i=0,q=0;;i++);
  30. {
  31. if (q=y)
  32. {
  33. break;
  34. }
  35. if(M[i][q]<0)
  36. {
  37. d=i;
  38. f=q;
  39. return 0;
  40. }
  41. if (M[i][q]==0)
  42. {
  43. g=i;
  44. h=q;
  45. }
  46. if(i==x-1)
  47. {
  48. z=M[d][f];
  49. M[d][f]=M[g][h];
  50. M[g][h]=z;
  51. i=0;
  52. q++;
  53. }
  54. }
  55. for(i=0;i<y;i++) // пока циклы выполняются, выводится на экран весь получившийся массив
  56. {
  57. for(j=0;j<x;j++)
  58. {
  59. printf("[%d][%d]=%d\n",i,j,M[i][j]);
  60. }
  61. }
  62. return 0;
  63. }

Решение задачи: «В каждом столбце матрицы поменять местами первый отрицательный элемент и последний нулевой»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define N 7
  5. #define M 9
  6. int main(void)
  7. {
  8.     int A[N][M], i, j, flag = 0, first_neg, last_zero, temp;
  9.     srand(time(NULL));
  10.     for(i = 0; i < N; i++, putchar('\n'))
  11.         for(j = 0; j < M; j++)
  12.             printf("%3d", A[i][j] = rand() % 10 - 5);
  13.     for(j = 0; j < M; j++){
  14.         for(i = 0, last_zero = -1, flag = 0; i < N; i++){
  15.             if(!flag){
  16.                 if(A[i][j] < 0){
  17.                     first_neg = i;
  18.                     flag = 1;
  19.                 }
  20.             }
  21.             if(A[i][j] == 0)
  22.                 last_zero = i;
  23.         }
  24.         if(flag && last_zero >= 0){
  25.             temp = A[first_neg][j];
  26.             A[first_neg][j] = A[last_zero][j];
  27.             A[last_zero][j] = temp;
  28.         }
  29.     }
  30.     putchar('\n');
  31.     for(i = 0; i < N; i++, putchar('\n'))
  32.         for(j = 0; j < M; j++)
  33.             printf("%3d", A[i][j]);
  34.     return 0;
  35. }

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

  1. Включаем необходимые заголовочные файлы для работы с I/O, генерацией случайных чисел и временем.
  2. Определяем размерность матрицы NxM.
  3. Инициализируем переменные для работы с матрицей и временной переменной.
  4. Инициализируем генератор случайных чисел начальным значением, используя текущее время.
  5. Заполняем матрицу случайными числами от -5 до 5.
  6. Перебираем строки матрицы, начиная с последней.
  7. Для каждой строки перебираем столбцы, начиная с первого.
  8. Если это первая отрицательная встреча, запоминаем индекс первого отрицательного элемента и флаг переключается.
  9. Если это первая встреча с нулевым элементом, запоминаем индекс последнего нулевого элемента.
  10. Если флаг переключился и последний нулевой элемент найден, меняем элементы местами.
  11. Выводим матрицу на экран.
  12. Возвращаем 0, чтобы указать, что программа успешно завершилась.

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


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

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

14   голосов , оценка 3.786 из 5

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

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

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