Удалить столбцы, в которых есть хотя бы 1 нулевой элемент - C (СИ)
Формулировка задачи:
удалить столбцы, в которых есть хотя бы 1 нулевой элемент. В чем ошибка. Ниже привел только функцию
int udalstolb(int n, int m, int (*a)[20]) {int *i,*j,*u; for(j=*a;j<*a+20*n;j++) { for(i=j;i<j+20*n;i+=20) if(*i==0) break; if (i==j+n*20) continue; for(u=j;u<*a+m-1;u++) for(i=u;i<u+20*n;i+=20) *i=*(i+1); m--; j--; } return m; }
Решение задачи: «Удалить столбцы, в которых есть хотя бы 1 нулевой элемент»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 9 #define M 18 void del_col(int*, int, int, int, int); int main() { int i, j, A[N][M], count = 0; srand(time(NULL)); for(i = 0; i < N; i++, putchar('\n')) for(j = 0; j < M; j++) printf("%3d", A[i][j] = rand() % 18); for(i = 0; i < N; i++) for(j = 0; j < M - count; j++) if(A[i][j] == 0){ del_col(A[0], N, M, count, j); count++; j--; } puts("Reduced array:"); for(i = 0; i < N; i++, putchar('\n')) for(j = 0; j < M - count; j++) printf("%3d", A[i][j]); putchar('\n'); return 0; } void del_col(int* arr, int nRow, int nCol, int count, int k) { for(int i = 0; i < nRow; i++) for(int j = k; j < nCol - count - 1; j++) *(arr + i * nCol + j) = *(arr + i * nCol + j + 1); }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем функцию
del_col
, которая будет удалять столбцы с нулевыми элементами - Задаем размер массива
N
иM
- Инициализируем массив
A
случайными значениями от 0 до 18 - Считаем количество нулевых элементов в массиве и сохраняем их позиции в отдельный массив
count
- Используя два вложенных цикла, удаляем нулевые столбцы, вызывая функцию
del_col
- Выводим уменьшенный массив на экран
- Возвращаем 0, чтобы указать, что программа успешно завершилась
- В функции
del_col
используем два вложенных цикла для перебора элементов массива - Заменяем нулевые элементы на следующие элементы в столбце, начиная с элемента с индексом
k
- Возвращаем 0, чтобы указать, что функция успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д