Вставка элементов в динамический массив со сдвигом - 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))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д