// Массив должен выводится с доп. столбцом в начале и после этого выдавать запрос на продолжение работы в программе или выход. Переполнение происходит после вывода массива с доп столбцом.
Main.cpp
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
#include "Functions.h"
int main(void)
{
int n, m, i;
int **a;
char s = 'n';
while (s != 'Y' && s != 'y')
{
printf("\n Enter the dimension of the matrix A[n][m]");
printf("\n Number of columns N = ");
scanf_s(" %d", &n);
printf("\n Number of rows M = ");
scanf_s(" %d", &m);
if ((a = (int**)calloc(n, sizeof(int*))) == 0)
{
printf("\n Memory allocation failure Array **a \n");
exit(1);
}
for (i = 0; i < n; i++)
if ((a[i] = (int*)calloc(m, sizeof(int))) == 0)
{
printf("\n Memory allocation failure Array *a \n");
exit(1);
}
ReadMatr(a, n, m);
PrintMatr(a, n, m);
AddColumn(a, n, m);
freeArray(a, n);
printf("Close program \n Y - Yes N - No \n");
s = _getch();
}
return 0;
}
Functions.cpp
#include <stdio.h>
#include <stdlib.h>
#include "functions.h"
void ReadMatr(int **M, int n, int m)
{
int i, j;
for (i = 0; i<n; i++)
for (j = 0; j<m; j++)
M[i][j] = rand() % (n*m);
return;
}
void PrintMatr(int **M, int n, int m)
{
int i, j;
printf("\n Output matrix A[%d][%d]:\n", n, m);
for (i = 0; i<n; i++)
{
for (j = 0; j<m; j++)
printf(" %4d ", M[i][j]);
printf("\n");
}
return;
}
void AddColumn(int **M, int n, int m)
{
int i, j, *Temp;
int C1 = m + 1;
for (i = 0; i < n; i++)
{
if ((Temp = (int*)realloc(M[i], C1 * sizeof(int))) == 0)
{
printf("Memory allocation failure after expanding for *a");
exit(1);
}
}
for (int i = m; i < C1; i++) {
if ((M[i] = (int *)calloc(n, sizeof(int))) == 0) {
printf("\nMemory allocation failure *a");
exit(1);
}
for (j = m; j < C1; j++)
M[i][j] = rand() % (n*m);
printf("\n Output matrix with an additional column A[%d][%d]:\n", n, m);
for (i = 0; i < n; i++)
{
for (j = C1; j > 0; j--)
{
int Temp = M[i][j - 1];
M[i][j] = M[i][j - 1];
M[i][j] = Temp;
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < C1; j++)
printf(" %4d ", M[i][j]);
printf("\n");
}
}
return;
}
void freeArray(int **M, int n)
{
int i;
for (i = 0; i < n; i++)
{
free(M[i]);
}
free(M);
}
Functions.h
void ReadMatr(int **, int, int);
void PrintMatr(int **, int, int);
void AddColumn(int **, int, int);
void freeArray(int **, int);
Не могу понять как исправить эти ошибки
Корректная функция AddColumn
:
void AddColumn(int **M, int n, int m)
{
int i, j;
int C1 = m + 1;
//выделяем память под ещё один столбец
for (i = 0; i < n; i++)
{
if ((M[i] = (int*)realloc(M[i], C1 * sizeof(int))) == 0)
{
printf("Memory allocation failure after expanding for *a");
exit(1);
}
}
//двигаем все столбцы на один вправо
for (int j = C1-1; j > 0; j--){
for (int i = 0; i < n; i++){
int tmp = M[i][j];
M[i][j] = M[i][j-1];
M[i][j-1] = tmp;
}
}
//заполняем крайний слева столбец случайными числами
for (int i = 0; i < n; i++){
M[i][0] = rand() % (n*m);
}
printf("\n Output matrix with an additional column A[%d][%d]:\n", n, m);
for (i = 0; i < n; i++)
{
for (j = 0; j < C1; j++)
printf(" %4d ", M[i][j]);
printf("\n");
}
return;
}
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Был код, калькулятор римских и арабских чиселНужно его преобразовать, чтобы был в 3 файла main
Добрый день, подскажите пожалуйста, что я делаю не так? Хочу создать структуру из двух байтов и указателя на функцию, прикомпиляции выдает...
Помогите пожалуйста разобраться в данной ошибкеСам еще только учусь, поэтому потратил большое количество времени, пытаясь разобраться в этом
Имеется проект в C++ Builder, также имеется файл форматаpas содержащий довольно большое количество нужного кода