Динамический массив. Удалить столбец и строку с максимальным элементом и отразить зеркально - 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;
}

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

  1. Программа начинается с заголовка, в котором указаны необходимые библиотеки для работы с массивами и вводом-выводом.
  2. Далее, в функции main(), происходит запрос на ввод размера массива от пользователя.
  3. После успешного ввода, динамический двумерный массив инициализируется случайными числами от -1000 до 1999.
  4. Затем, происходит вывод исходного массива на экран.
  5. Следующим шагом, находится максимальное значение в массиве и его координаты (строка и столбец).
  6. Максимальное значение удаляется из массива, а элементы сдвигаются вверх и влево, чтобы сохранить целостность массива.
  7. Далее, выполняется зеркальное отражение массива относительно горизонтальной оси и вертикальной оси.
  8. Выводятся на экран исходный и результирующий массивы.
  9. В конце программы, все выделенные динамические памяти освобождаются, а функция main() возвращает 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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