Строки верхней половины матрицы поменять местами со строками нижней половины - C (СИ)
Формулировка задачи:
Дан двумерный массив из четного числа строк. Строки верхней половины массива поменять местами со строками нижней половины
чет тип этого
#include <iostream>
#include <iomanip>
using namespace std;
const int str = 5;
const int stl = 6;
int arr[str][stl];
int main (){
cout<<"Исходный массив :\n\n";
for (int i=0;i<str;i++)
{
for (int j=0;j<stl;j++)
{
arr[i][j] = rand() % 99 + 1;
cout << setw(3) << arr[i][j];
}
cout << "\n\n";
}
cout << "Полученный массив:\n\n";
for (int i = 0; i < str; i++)
{
for (int j = 0; j < stl; j++)
{
if (j < stl / 2)
{
swap (arr[i][j], arr[i][stl - 1 - j]);
}
cout << setw(3) << arr[i][j];
}
cout << "\n\n";
}
cin.get();
}Решение задачи: «Строки верхней половины матрицы поменять местами со строками нижней половины»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
int main() {
int n, m;
scanf("%d%d", &n, &m);
static int arr[128][128];
int y, x;
for (y = 0; y < n; y++)
for (x = 0; x < m; x++)
scanf("%d", &arr[y][x]);
void *arr_p = arr;
int arr_size = n * 128 * sizeof (int);
memcpy(arr_p + arr_size, arr_p, arr_size / 2); // 1 -> 3
memcpy(arr_p, arr_p + arr_size / 2, arr_size / 2); // 2 -> 1
memcpy(arr_p + arr_size / 2, arr_p + arr_size, arr_size / 2); // 3 -> 2
for (y = 0; y < n; y++) {
for (x = 0; x < m; x++)
printf("%d ", arr[y][x]);
printf("\n");
}
return 0;
}
Объяснение кода листинга программы
- Программа считывает из стандартного ввода два целых числа n и m, которые представляют собой размеры матрицы.
- Программа считывает значения матрицы, используя два вложенных цикла.
- Программа выполняет операции обмена местами между строками верхней и нижней половины матрицы, используя функцию memcpy.
- Программа выводит значения матрицы на стандартный вывод, используя два вложенных цикла.
- Программа завершает свое выполнение и возвращает 0.