Удалить столбцы, в которых есть хотя бы 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);
}

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

  1. Включаем необходимые заголовочные файлы
  2. Определяем функцию del_col, которая будет удалять столбцы с нулевыми элементами
  3. Задаем размер массива N и M
  4. Инициализируем массив A случайными значениями от 0 до 18
  5. Считаем количество нулевых элементов в массиве и сохраняем их позиции в отдельный массив count
  6. Используя два вложенных цикла, удаляем нулевые столбцы, вызывая функцию del_col
  7. Выводим уменьшенный массив на экран
  8. Возвращаем 0, чтобы указать, что программа успешно завершилась
  9. В функции del_col используем два вложенных цикла для перебора элементов массива
  10. Заменяем нулевые элементы на следующие элементы в столбце, начиная с элемента с индексом k
  11. Возвращаем 0, чтобы указать, что функция успешно завершилась

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

8   голосов , оценка 4.125 из 5
Похожие ответы