Продублировать 2 раза столбец матрицы, содержащий ее минимальный элемент - C (СИ)
Формулировка задачи:
Решение задачи: «Продублировать 2 раза столбец матрицы, содержащий ее минимальный элемент»
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
const int n=3; // strok
const int m=5; // stolbcov
int dubl(int **mas,int min,int nom)
{
int **mas1;
mas1=(int**)calloc(n,sizeof(int*));
for(int i=0;i<(m+2);i++)
{
mas1[i]=(int*)calloc((m+2),sizeof(int));
}
if(mas==NULL)
{
puts("error");
return -1;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<(m+2);j++)
{
if(j<m)
{
mas1[i][j]=mas[i][j];
}
else if(j>=m)
{
mas1[i][j]=mas[i][nom];
}
}
}
puts("Posle \n");
for(int i=0;i<n;i++)
{
for(int j=0;j<(m+2);j++)
{
printf("%d ",mas1[i][j]);
}
puts("\n");
}
/*for(int i=0;i<(m+2);i++)
{
free(mas1[i]);
}
free(mas1);*/
}
void minel(int **mas)
{
int min=mas[0][0],nom=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(min>mas[i][j])
{
min=mas[i][j];
nom=j;
}
}
}
dubl(mas,min,nom);
}
int main()
{
srand(time(NULL));
int **mas;
mas=(int**)calloc(n,sizeof(int*));
for(int i=0;i<m;i++)
{
mas[i]=(int*)calloc(m,sizeof(int));
}
if(mas==NULL)
{
puts("error");
return -1;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
mas[i][j]=rand()%5+1;
}
}
puts("Do \n");
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
printf("%d ",mas[i][j]);
}
puts("\n");
}
minel(mas);
/* for(int i=0;i<m;i++)
{
free(mas[i]);
}
free(mas); */
return 0;
}
Объяснение кода листинга программы
В этом коде есть две основные функции: dubl и minel. Функция dubl принимает на вход матрицу (представленную двумерным массивом) и минимальный элемент этой матрицы. Она дублирует этот элемент два раза, вставив его в конец строки. Код для этого начинается с 26-й строки. Функция minel находит минимальный элемент в матрице и его позицию (номер столбца). Затем она вызывает функцию dubl, передавая ей этот минимальный элемент и его позицию. Код для этого начинается с 41-й строки. В функции main создается случайная матрица 3x5, выводится на экран, затем вызывается функция minel. Код для этого начинается с 73-й строки. Код также содержит фрагменты, которые освобождают память, выделенную под матрицу, но в данном случае они отключены. Пожалуйста, обратите внимание, что в данном коде не обрабатывается ошибка, когда матрица не может быть выделена.