
Дан двумерный массив. Переместить его элементы по периметру на 1 значение влево (против часовой
стрелки) и вывести изменённый массив. Использовать динамический массив с возможностью ввести размерность. Язык: C, C++

Ответы на вопрос

Ответ:
Код на C++:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int N = 1, M = 1;
cout << "Vvedite razmernost' massiva M:";
cin >> M;
cout << "Vvedite razmernost' massiva N:";
cin >> N;
int** mas;
int** mas2;
mas = new int* [M];
mas2 = new int* [M];
for (int i = 0; i < M; i++)
{
mas[i] = new int[N];
mas2[i] = new int[N];
}
int p = 1;
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
mas[i][j] = p;
p++;
}
}
cout << "\nMassiv: \n";
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
mas2[i][j] = mas[i][j];
cout.width(3);
cout << mas[i][j] << " ";
}
cout << "\n";
}
for (int j = 0; j < N - 1; j++)
{
mas2[0][j] = mas[0][j + 1];
mas2[0][N - 1] = mas[1][N - 1];
mas2[M - 1][j + 1] = mas[M - 1][j];
mas2[M - 1][0] = mas[M - 2][0];
}
for (int i = 0; i < M - 1; i++)
{
mas2[i + 1][0] = mas[i][0];
mas2[i][N - 1] = mas[i + 1][N - 1];
}
cout << "\nMassiv posle smesheniya: \n";
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
cout.width(3);
cout << mas2[i][j] << " ";
}
cout << "\n";
}
_getch();
}
///////////////////////////////////////////////////////////////////////////////////////////////
Код на C#:
static void Main(string[] args)
{
int N = 0, M = 0;
Console.Write("Введите размерность массива M: ");
M = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите размерность массива N: ");
N = Convert.ToInt32(Console.ReadLine());
int[,] mas = new int[M, N];
int[,] mas2 = new int[M, N];
int p = 1;
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
mas[i, j] = p;
p++;
}
}
Console.WriteLine();
Console.Write("Массив: ");
Console.WriteLine();
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
mas2[i, j] = mas[i, j];
Console.Write(String.Format("{0,3}", mas[i, j]));
}
Console.WriteLine();
}
for (int j = 0; j < N - 1; j++)
{
mas2[0, j] = mas[0, j + 1];
mas2[0, N - 1] = mas[1, N - 1];
mas2[M - 1, j + 1] = mas[M - 1, j];
mas2[M - 1, 0] = mas[M - 2, 0];
}
for(int i = 0; i < M - 1; i++)
{
mas2[i + 1, 0] = mas[i, 0];
mas2[i, N - 1] = mas[i + 1, N - 1];
}
Console.WriteLine();
Console.Write("Массив после смещения: ");
Console.WriteLine();
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
Console.Write(String.Format("{0,3}", mas2[i, j]));
}
Console.WriteLine();
}
Console.ReadKey();
}
Объяснение:
Код задания на двух языках. Надеюсь, помог.



Для решения этой задачи вам потребуется создать двумерный динамический массив, заполнить его значениями и затем переместить элементы по его периметру на одну позицию влево. Вот пример реализации на языке C++:
cpp#include <iostream>
using namespace std;
// Функция для перемещения элементов по периметру массива на 1 позицию влево
void shiftElements(int** arr, int rows, int cols) {
int* temp = new int[rows]; // Временный массив для хранения верхней строки
// Сохраняем верхнюю строку во временный массив
for (int i = 0; i < cols; i++) {
temp[i] = arr[0][i];
}
// Сдвигаем элементы верхней строки на 1 позицию влево
for (int i = 0; i < cols - 1; i++) {
arr[0][i] = arr[0][i + 1];
}
// Сдвигаем элементы левого столбца на 1 позицию вверх
for (int i = 0; i < rows - 1; i++) {
arr[i][0] = arr[i + 1][0];
}
// Сдвигаем элементы нижней строки на 1 позицию вправо
for (int i = 0; i < cols - 1; i++) {
arr[rows - 1][i] = arr[rows - 1][i + 1];
}
// Сдвигаем элементы правого столбца на 1 позицию вниз
for (int i = 0; i < rows - 1; i++) {
arr[i][cols - 1] = arr[i + 1][cols - 1];
}
// Восстанавливаем элементы правого столбца из временного массива
for (int i = 0; i < rows - 1; i++) {
arr[i + 1][cols - 1] = temp[i];
}
delete[] temp;
}
int main() {
int rows, cols;
cout << "Введите количество строк: ";
cin >> rows;
cout << "Введите количество столбцов: ";
cin >> cols;
// Создаем двумерный динамический массив
int** arr = new int*[rows];
for (int i = 0; i < rows; i++) {
arr[i] = new int[cols];
}
// Заполняем массив значениями
int value = 1;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
arr[i][j] = value++;
}
}
// Вызываем функцию для перемещения элементов
shiftElements(arr, rows, cols);
// Выводим измененный массив
cout << "Измененный массив:" << endl;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << arr[i][j] << "\t";
}
cout << endl;
}
// Освобождаем память
for (int i = 0; i < rows; i++) {
delete[] arr[i];
}
delete[] arr;
return 0;
}
Этот код создает двумерный динамический массив, заполняет его значениями, перемещает элементы по периметру на одну позицию влево и выводит измененный массив. Не забудьте освободить память после завершения программы.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili