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