Другие языки программирования и технологии

Динамические массивы. СИ

Сформировать двумерный массив. Удалить из него все столбцы, в которых встречается заданное число.

Ребят, помогите!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <locale.h>
#include <conio.h>
void main() {
int ** a, ** t, row, col, ncol, num, n, m, next = 0, flag;
srand((unsigned)time(NULL));
row = rand() % 4 + 4;
Sleep(1001);
col = rand() % 6 + 9;
a = (int **)calloc(row, sizeof(int *));
for (n = 0; n < row; n++, printf("\n")) {
a[n] = (int *)calloc(col, sizeof(int));
for (m = 0; m < col; m++) {
a[n][m] = rand() % 10;
printf("%d ", a[n][m]);
} } setlocale(LC_CTYPE, "Russian_Russia.1251");
printf("\n Введите заданное число: ");
while (!scanf_s("%d", &num)){
printf("\a Ошибка! Повторите ввод: ");
fflush(stdin);
} t = (int **)calloc(row, sizeof(int *));
for (n = 0; n < row; n++) {
t[n] = (int *)calloc(col, sizeof(int));
for (m = 0; m < col; m++) t[n][m] = a[n][m];
} ncol = col;
for (m = 0; m < col; m++) for (n = 0; n < row; n++) if (t[n][m] == num) { --ncol; break; }
if (ncol < col) {
for (n = 0; n < row; n++) free(a[n]);
free(a);
a = (int **)calloc(row, sizeof(int *));
for (n = 0; n < row; n++) a[n] = (int *)calloc(ncol, sizeof(int));
} for (m = 0; m < col; m++) {
flag = 1;
for (n = 0; n < row; n++) if (t[n][m] == num) { flag = 0; break; }
if (flag) { for (n = 0; n < row; n++) a[n][next] = t[n][m];++next; }
} for (n = 0; n < row; n++) free(t[n]);
free(t);
col = ncol;
printf("\n");
for (n = 0; n < row; n++, printf("\n")) for (m = 0; m < col; m++) printf("%d ", a[n][m]);
for (n = 0; n < row; n++) free(a[n]);
free(a);
_getch();
}
БИ
Беркин Имашев
64 389
Лучший ответ
Да там писать-то - раз плюнуть. Только что печатать надо, а думать не надо...