Заменить минимальный элемент массива А максимальным элементом массива В - C (СИ)

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

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

Добрый вечер. Не понимаю как работать с функциями, помогите с программой. Заменить минимальный элемент массива А (5х8) максимальным элементом массива В (7х6), а минимум массива В - максимальным элементом массива А.

Решение задачи: «Заменить минимальный элемент массива А максимальным элементом массива В»

textual
Листинг программы
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int** create_matrix(int rows, int cols)
{
    int i = 0;
    int** matrix = (int**)malloc(sizeof(int*) * rows);
    for (i = 0; i < rows; i++)
        matrix[i] = (int*)malloc(sizeof(int) * cols);
    return matrix;
}
 
void fill_matrix(int** matrix, int rows, int cols)
{
    int i = 0, j = 0;
    for (i = 0; i < rows; i++)
        for (j = 0; j < cols; j++)
            matrix[i][j] = rand() % 20;
}
 
void destroy_matrix(int** matrix, int rows)
{
    int i = 0;
    for (i = 0; i < rows; i++)
        free(matrix[i]);
    free(matrix);
}
 
void print_row(const int* row, 
               int size, 
               const char *elem_fmt, 
               const char *row_separator)
{
    while (size--)
        printf(elem_fmt, *row++);
    printf(row_separator);
}
 
void print_matrix(const int** matrix, 
                  const int rows,
                  const int cols,
                  const char *elem_fmt, 
                  const char *row_separator)
{
    int i = rows;
    while (i--)
        print_row(*matrix++, cols, elem_fmt, row_separator);
}
 
struct point
{
    int x, y;
};
 
struct point matrix_max_element(const int** matrix, int rows, int cols)
{
    struct point max_point = { 0, 0 };
    int i = 0, j = 0;
    for (i = 0; i < rows; i++)
    {
        for (j = 0; j < cols; j++)
            if (matrix[i][j] > matrix[max_point.y][max_point.x])
            {
                max_point.x = j;
                max_point.y = i;
            }
    }
    return max_point;
}
 
struct point matrix_min_element(const int** matrix, int rows, int cols)
{
    struct point min_point = { 0, 0 };
    int i = 0, j = 0;
    for (i = 0; i < rows; i++)
    {
        for (j = 0; j < cols; j++)
            if (matrix[i][j] < matrix[min_point.y][min_point.x])
            {
                min_point.x = j;
                min_point.y = i;
            }
    }
    return min_point;
}
 
void replace_value_in_matrix(int** matrix, const struct point* p, int value)
{
    matrix[p->y][p->x] = value;
}
 
int main(void)
{
    int a_rows = 5, 
        a_cols = 8,
        b_rows = 7,
        b_cols = 6;
    struct point a_min, a_max, b_max, b_min;
    int **a, **b;
    srand(time(0));
    a = create_matrix(a_rows, a_cols);
    b = create_matrix(b_rows, b_cols);
    fill_matrix(a, a_rows, a_cols);
    fill_matrix(b, b_rows, b_cols);
 
    a_min = matrix_min_element(a, a_rows, a_cols);
    a_max = matrix_max_element(a, a_rows, a_cols);
 
    b_min = matrix_min_element(b, b_rows, b_cols);
    b_max = matrix_max_element(b, b_rows, b_cols);
    
    print_matrix(a, a_rows, a_cols, "%4d", "\n");
    putchar('\n');
    print_matrix(b, b_rows, b_cols, "%4d", "\n");
    puts("\n");
 
    replace_value_in_matrix(a, &a_min, b[b_max.y][b_max.x]);
    replace_value_in_matrix(b, &b_min, a[a_max.y][a_max.x]);
 
    print_matrix(a, a_rows, a_cols, "%4d", "\n");
    putchar('\n');
    print_matrix(b, b_rows, b_cols, "%4d", "\n");
    puts("\n");
 
    destroy_matrix(a, a_rows);
    destroy_matrix(b, b_rows);
#ifdef _MSC_VER
    system("pause");
#endif
    return 0;
}

Объяснение кода листинга программы

  1. Создание двумерного массива (матрицы) с помощью функции create_matrix().
  2. Заполнение матрицы случайными целыми числами от 0 до 19 с помощью функции fill_matrix().
  3. Поиск минимального элемента в матрице с помощью функции matrix_min_element().
  4. Поиск максимального элемента в матрице с помощью функции matrix_max_element().
  5. Вывод содержимого матрицы на экран с помощью функции print_matrix().
  6. Замена минимального элемента в первой матрице на максимальный элемент из второй матрицы с помощью функции replace_value_in_matrix().
  7. Замена максимального элемента во второй матрице на минимальный элемент из первой матрицы с помощью функции replace_value_in_matrix().
  8. Вывод измененного содержимого матриц на экран с помощью функции print_matrix().
  9. Освобождение памяти, выделенной под матрицы, с помощью функции destroy_matrix().
  10. Приостановка выполнения программы до нажатия клавиши с помощью команды system(pause).
  11. Возврат значения 0, что означает успешное выполнение программы.

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

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