В каждом столбце матрицы поменять местами первый отрицательный элемент и последний нулевой - C (СИ)
Формулировка задачи:
мне дана задача: В каждом столбце двумерного массива поменять местами первый отрицательный элемент и последний нулевой. Я написала код, но он не хочет рабоать, я не понимаю почему, найдите пожалуйста ошибку.
#include<stdio.h> #include<math.h> int main() { int i,j,x,y,q,d,f,g,h,z; // i j - индексы массива mas[0][2] printf("Vvedite zna4enie strok="); scanf("%d",&x); while(x<=0) // на случай, если пользователь введет отрицательное количество строк { printf("error, kol-vo elementov >0 "); scanf("%d", &x); } printf("\nVvedite zna4enie stolbcov="); scanf("%d",&y); while(y<=0) // на случай, если пользователь введет отрицательное количество столбцов { printf("error, kol-vo elementov >0 "); scanf("%d", &y); } int M[x][y]; for(i=0;i<x;i++) //пока циклы выполняются, прога будет запрашивать значения элемента { for(j=0;j<y;j++) { printf("\nVvedite zna4enie elementa [%d][%d]=",i,j); scanf("%d",&M[i][j]); } } for (i=0,q=0;;i++); { if (q=y) { break; } if(M[i][q]<0) { d=i; f=q; return 0; } if (M[i][q]==0) { g=i; h=q; } if(i==x-1) { z=M[d][f]; M[d][f]=M[g][h]; M[g][h]=z; i=0; q++; } } for(i=0;i<y;i++) // пока циклы выполняются, выводится на экран весь получившийся массив { for(j=0;j<x;j++) { printf("[%d][%d]=%d\n",i,j,M[i][j]); } } return 0; }
Решение задачи: «В каждом столбце матрицы поменять местами первый отрицательный элемент и последний нулевой»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 7 #define M 9 int main(void) { int A[N][M], i, j, flag = 0, first_neg, last_zero, temp; srand(time(NULL)); for(i = 0; i < N; i++, putchar('\n')) for(j = 0; j < M; j++) printf("%3d", A[i][j] = rand() % 10 - 5); for(j = 0; j < M; j++){ for(i = 0, last_zero = -1, flag = 0; i < N; i++){ if(!flag){ if(A[i][j] < 0){ first_neg = i; flag = 1; } } if(A[i][j] == 0) last_zero = i; } if(flag && last_zero >= 0){ temp = A[first_neg][j]; A[first_neg][j] = A[last_zero][j]; A[last_zero][j] = temp; } } putchar('\n'); for(i = 0; i < N; i++, putchar('\n')) for(j = 0; j < M; j++) printf("%3d", A[i][j]); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с I/O, генерацией случайных чисел и временем.
- Определяем размерность матрицы NxM.
- Инициализируем переменные для работы с матрицей и временной переменной.
- Инициализируем генератор случайных чисел начальным значением, используя текущее время.
- Заполняем матрицу случайными числами от -5 до 5.
- Перебираем строки матрицы, начиная с последней.
- Для каждой строки перебираем столбцы, начиная с первого.
- Если это первая отрицательная встреча, запоминаем индекс первого отрицательного элемента и флаг переключается.
- Если это первая встреча с нулевым элементом, запоминаем индекс последнего нулевого элемента.
- Если флаг переключился и последний нулевой элемент найден, меняем элементы местами.
- Выводим матрицу на экран.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д