Вставка элементов в динамический массив со сдвигом - C (СИ)
Формулировка задачи:
Здравствуйте! Несколько месяцев назад дали задания по динамическим массивам:
Дана матрица А[m,n] и массив B[m]. Вставить после каждого столбца, содержащего четное количество элементов массива B столбец, содержащий элементы этого массива, при каждой вставке циклически сдвигая их на один элемент вниз.
Я 3 раза переписывал код и он никак не хочет работать, кто-нибудь сможет найти ошибку? А то я уже
вот код:
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <ctime>
int** inputmatr(int, int);
void poisk(int*, int**, int, int);
void vstavka(int*, int**, int*, int, int, int);
int main()
{
int m, n;
m = 0;
n = 0;
scanf_s("%d", &m);//строки
scanf_s("%d", &n);//столбцы
int* array = (int*)malloc(sizeof(int)*m);
free(array);
printf("Massiv A: \n");
for (int i = 0; i < m; i++)
{
array[i] = 0 + rand() % 10;
printf("%4d", array[i]);
}
printf("\n");
int** matr = inputmatr(m, n);
printf_s("\n");
poisk(array, matr, m, n);
system("pause");
return 0;
}
int** inputmatr(int m, int n)
{
int** matr = (int**)malloc(sizeof(int*) * n);
for (int i = 0; i < m; i++)
{
matr[i] = (int*)malloc(sizeof(int) * m);
}
printf("matriza: \n");
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
matr[i][j] = 0 + rand() % 10;
printf("%4d",matr[i][j]);
}
printf("\n");
}
return matr;
}
void poisk(int *arr, int **mtx, int m, int n)
{
int chet = 0;
int kek = 0;
int* help = (int*)malloc(sizeof(int)*300);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
for (int k = 0; k < m; k++)
{
if (mtx[j][i] == arr[k])
{
chet++;
}
}
}
if ((chet % 2 == 0) && (chet != 0))
{
help[kek] = i;
kek++;
}
chet = 0;
}
vstavka(arr, mtx, help, m, n, kek);
}
void vstavka(int * arr, int **mtx, int * help, int m, int n, int kek)
{
int** fin = (int**)malloc(sizeof(int*) * (n + kek));
for (int i = 0; i < m; i++)
{
fin[i] = (int*)malloc(sizeof(int) * m);
}
int chet = 0;
int rekt = 0;
for (int i = 0; i < (n+kek); i++)
{
if (i - 1 == help[rekt])
{
for (int j = 0; j < m; j++)
{
fin[j][i] = arr[j];
}
rekt++;
}
else
{
for (int j = 0; j < m; j++)
{
fin[j][i] = mtx[j][chet];
}
chet++;
}
}
printf("matriza fin: \n");
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
printf("%4d", fin[i][j]);
}
printf("\n");
}
}Решение задачи: «Вставка элементов в динамический массив со сдвигом»
textual
Листинг программы
if (i - 1 == (help[rekt]+rekt))