Заменить минимальный элемент массива А максимальным элементом массива В - 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;
}
Объяснение кода листинга программы
- Создание двумерного массива (матрицы) с помощью функции
create_matrix(). - Заполнение матрицы случайными целыми числами от 0 до 19 с помощью функции
fill_matrix(). - Поиск минимального элемента в матрице с помощью функции
matrix_min_element(). - Поиск максимального элемента в матрице с помощью функции
matrix_max_element(). - Вывод содержимого матрицы на экран с помощью функции
print_matrix(). - Замена минимального элемента в первой матрице на максимальный элемент из второй матрицы с помощью функции
replace_value_in_matrix(). - Замена максимального элемента во второй матрице на минимальный элемент из первой матрицы с помощью функции
replace_value_in_matrix(). - Вывод измененного содержимого матриц на экран с помощью функции
print_matrix(). - Освобождение памяти, выделенной под матрицы, с помощью функции
destroy_matrix(). - Приостановка выполнения программы до нажатия клавиши с помощью команды
system(pause). - Возврат значения 0, что означает успешное выполнение программы.