Продублировать 2 раза столбец матрицы, содержащий ее минимальный элемент - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дана матрица размера M*N.Продублировать 2 раза столбец матрицы, содержащий ее минимальный элемент.

Решение задачи: «Продублировать 2 раза столбец матрицы, содержащий ее минимальный элемент»

textual
Листинг программы
#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-й строки. Код также содержит фрагменты, которые освобождают память, выделенную под матрицу, но в данном случае они отключены. Пожалуйста, обратите внимание, что в данном коде не обрабатывается ошибка, когда матрица не может быть выделена.

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

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