Поменять местами левую и правую половины матрицы - C (СИ)

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

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

Привет ребят! Помогите, пожалуйста, доделать вторую программку и подскажите с алгоритмом для первой: 1. Дана квадратная матрица A порядка M. Начиная с элемента A[1,1], вывести ее элементы следующим образом («уголками»): все элементы первой строки; элементы последнего столбца, кроме первого (уже выведенного) элемента; оставшиеся элементы второй строки; оставшиеся элементы предпоследнего столбца и т. д.; последним выводится элемент AM,1. 2. Дана матрица размера M x N (N — четное число). Поменять местами левую и правую половины матрицы. Вот вторая программа: она неправильно меняет левую и правую часть: Исходный массив: 42 68 35 1 70 25 79 59 63 65 6 46 82 28 62 92 Новый массив: 1 35 68 42 59 79 25 70 46 6 65 63 92 62 28 82 А должно быть: 35 1 42 68 79 59 70 25 6 46 63 65 62 92 81 28
#include <cstdio>
#include <stdlib.h>
#include <locale>
int main()
{
    
    setlocale(LC_ALL,"Russian");
    const int n = 5;
    int arr[n][n];
    int i,j,b;
    for(i = 0; i < n; i++)
    for(j = 0; j < n; j++) arr[i][j] = rand() % 100+1;
    printf("Исходный массив: \n");
    for (i=0;i<n;i++){
        for (j=0;j<n;j++) printf("%d\t", arr[i][j]);
        printf("\n");}
//-----------------------------------------------
    b=0;
    for(i = 0; i < n; i++)
    for(j = 0; j < n; j++)
        {   
            if (j < n / 2)
            {
                b=arr[i][j];
                arr[i][j]=arr[i][n - 1 - j];
                arr[i][n - 1 - j]=b;
            }
            
    }
//-----------------------------------------------
    printf("Новый массив: \n");
    for (i=0;i<n;i++){
        for (j=0;j<n;j++) printf("%d\t", arr[i][j]);
        printf("\n");}
    return 0;
    }

Решение задачи: «Поменять местами левую и правую половины матрицы»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
#define SIZE 4
 
void swap(int *a, int *b)
{
    int buf = *a;
    *a = *b;
    *b = buf;
}
 
int main(void)
{
    int matrix[SIZE][SIZE] = {
        { 42, 68, 35, 1 },
        { 70, 25, 79, 59 },
        { 63, 65, 6,  46 },
        { 82, 28, 62, 92 }
    };
    int i, j;
    for(i = 0; i < SIZE; i++)
    {
        for(j = 0; j < SIZE; j++)
            printf("%*d", 4, matrix[i][j]);
        putchar('\n');
    }
    for(i = 0; i < SIZE; i++)
        for(j = 0; j < SIZE >> 1; j++)
            swap(&matrix[i][j], &matrix[i][(SIZE >> 1) + j]);
    putchar('\n');
    for(i = 0; i < SIZE; i++)
    {
        for(j = 0; j < SIZE; j++)
            printf("%*d", 4, matrix[i][j]);
        putchar('\n');
    }
    system("pause");
    return 0;
}

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

В данном коде реализована функция swap(), которая меняет местами два указателя на int. В функции main() создаётся матрица int matrix[SIZE][SIZE], заполненная некоторыми значениями. Затем, с помощью двух вложенных циклов, выводится на экран содержимое матрицы. Далее, с помощью ещё двух вложенных циклов, элементы левой и правой половин матрицы меняются местами, используя функцию swap(). И, наконец, с помощью двух вложенных циклов, обновлённое содержимое матрицы выводится на экран. Для корректной работы кода, необходимо, чтобы размерность матрицы (SIZE) была четным числом.

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


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

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

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