Вставка элементов в динамический массив со сдвигом - 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))

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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