Динамический массив. Удалить столбец и строку с максимальным элементом и отразить зеркально - 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, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д