Динамический массив. Удалить столбец и строку с максимальным элементом и отразить зеркально - C (СИ)
Формулировка задачи:
Здравствуйте! Помогите пожалуйста!
Динамический двумерный массив a[n,n] заполнить случайными числами. Удалить строку и столбец, содержащие максимальный элемент массив. Зеркально отобразить элементы массива относительно горизонтальной оси симметрии, а затем относительно вертикальной оси симметрии. Вывести на экран исходный и результирующий массивы. Мои наброски#include "stdafx.h"
#include <iostream>
#define n 3
int main()
{
int a[n][n], a2[n][n], i = 0, j = 0, value = 0, maxi, maxj;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
a[i][j] = 0 + rand() % 10;
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (a[i][j] > value)
{
value = a[i][j];
maxi = i;
maxj = j;
}
}
}
/*for (i = 1; i < n; i++)
for (j = 0; j < n; j++)
if (a[i][j] > a[max])
{
max = i;
}*/
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
printf("%d ", a[i][j]);
printf("\n");
}
return 0;
}Решение задачи: «Динамический массив. Удалить столбец и строку с максимальным элементом и отразить зеркально»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
//Динамический двумерный массив a[n,n] заполнить случайными числами.
//Удалить строку и столбец, содержащие максимальный элемент массив.
//Зеркально отобразить элементы массива относительно горизонтальной оси симметрии,
//а затем относительно вертикальной оси симметрии. Вывести на экран исходный и
//результирующий массивы.
int main()
{
int n, i, j, x, r, q, max;
int **a = NULL;
puts("Input number:");
scanf("%d", &n);
a = malloc(n * sizeof(*a));
for(i = 0; i < n; i++)
a[i] = malloc(n * sizeof(a));
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
a[i][j] = rand()%2000 - 1000;
puts("Source array:");
max = a[0][0];
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
printf("%6d", a[i][j]);
if(a[i][j] > max){
max = a[i][j];
r = i;
q = j;
}
}
printf("\n");
}
printf("\nMax element is a[%d][%d] = %d\n", r, q, max);
for(i = r; i < n - 1; i++)
a[i] = a[i + 1];
for(i = 0; i < n - 1; i++){
for(j = q; j < n - 1; j++){
a[i][j] = a[i][j + 1];
}
}
n--;
a = realloc(a, n * sizeof(*a));
for(i = 0; i < n; i++)
a[i] = realloc(a[i], n * sizeof(a));
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
printf("%6d", a[i][j]);
}
printf("\n");
}
puts("Mirror image symmetry about a horizontal axis:");
for(i = 0, x = 1; i < n; i++, x++){
for(j = 0; j < n; j++)
printf("%6d", a[n - x][j]);
printf("\n");
}
puts("mirror image symmetry about a vertical axis:");
for(i = 0; i < n; i++, x++){
for(j = 0, x = 1; j < n; j++, x++)
printf("%6d", a[i][n - x]);
printf("\n");
}
for(i = 0; i < n; i++)
free(a[i]);
free(a);
return 0;
}
Объяснение кода листинга программы
- Программа начинается с заголовка, в котором указаны необходимые библиотеки для работы с массивами и вводом-выводом.
- Далее, в функции main(), происходит запрос на ввод размера массива от пользователя.
- После успешного ввода, динамический двумерный массив инициализируется случайными числами от -1000 до 1999.
- Затем, происходит вывод исходного массива на экран.
- Следующим шагом, находится максимальное значение в массиве и его координаты (строка и столбец).
- Максимальное значение удаляется из массива, а элементы сдвигаются вверх и влево, чтобы сохранить целостность массива.
- Далее, выполняется зеркальное отражение массива относительно горизонтальной оси и вертикальной оси.
- Выводятся на экран исходный и результирующий массивы.
- В конце программы, все выделенные динамические памяти освобождаются, а функция main() возвращает 0, что означает успешное выполнение программы.