Массив: Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз - C#
Формулировка задачи:
Условие задачи:
Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз (в зависимости от введенного режима). n может быть больше количества элементов в строке или столбце.
Вот мой код:
Программа в принципе работает, но наоборот. Вместо сдвига вправо - сдвигает влево. Вместо сдвига вниз - сдвигает вверх. Подскажите пожалуйста, как исправить это.
Кто-нибудь может дать совет как исправить это?
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace LabRab6
- {
- class Program
- {
- static void Main(string[] args)
- {
- //Массив элементов
- const int z = 4, x = 5;
- int[,] a = new int[z, x] {
- {1, 1, 0, 0, 0},
- {1, 1, 0, 0, 0},
- {0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0}
- };
- Console.WriteLine("Исходный массив: ");
- for (int i = 0; i < z; ++i)
- {
- for (int j = 0; j < x; ++j)
- Console.Write("\t" + a[i, j]);
- Console.WriteLine();
- }
- //Вводим количество элементов для сдвига
- Console.Write("Введите количество элементов для сдвига: ");
- string buf1 = Console.ReadLine();
- int n = int.Parse(buf1);
- //Ввдим режим сдвига
- Console.Write("Выберите режим сдвига( 1 - вправо, 2 - вниз ): ");
- string buf2 = Console.ReadLine();
- int sd = int.Parse(buf2);
- //Осуществляем сдвиги
- int inew = 0, jnew = 0;
- int g = 0;
- if (sd == 1)
- {
- Console.WriteLine("Сдвиг вправо:");
- for (int i = 0; i < z; ++i)
- {
- for (int j = 0; j < x; ++j)
- {
- inew = (i + (g % z)) % z;
- jnew = (j + (n % x)) % x;
- Console.Write("\t" + a[inew, jnew]);
- }
- Console.WriteLine();
- }
- }
- else if (sd == 2)
- {
- Console.WriteLine("Сдвиг вниз:");
- for (int i = 0; i < z; i++)
- {
- for (int j = 0; j < x; j++)
- {
- inew = (i + (n % z)) % z;
- jnew = (j + (g % x)) % x;
- Console.Write("\t" + a[inew, jnew]);
- }
- Console.WriteLine();
- }
- }
- else Console.WriteLine("Ошибка!");
- //Ввыводим массив со сдвигом
- Console.ReadLine();
- }
- }
- }
Решение задачи: «Массив: Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз»
textual
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace LabRab6
- {
- class Program
- {
- static void Main(string[] args)
- {
- //Массив элементов
- const int z = 4, x = 5;
- int[,] a = new int[z, x] {
- {1, 1, 0, 0, 0},
- {1, 1, 0, 0, 0},
- {0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0}
- };
- Console.WriteLine("Исходный массив: ");
- for (int i = 0; i < z; ++i)
- {
- for (int j = 0; j < x; ++j)
- Console.Write("\t" + a[i, j]);
- Console.WriteLine();
- }
- //Вводим количество элементов для сдвига
- Console.Write("Введите количество элементов для сдвига: ");
- string buf1 = Console.ReadLine();
- int n = int.Parse(buf1);
- //Ввдим режим сдвига
- Console.Write("Выберите режим сдвига( 1 - вправо, 2 - вниз ): ");
- string buf2 = Console.ReadLine();
- int sd = int.Parse(buf2);
- //Осуществляем сдвиги
- int inew = 0, jnew = 0;
- int g = 0;
- if (sd == 1)
- {
- Console.WriteLine("Сдвиг вправо:");
- int nnew = x - n % x; // Выносим повторяющиеся вычисления за пределы цикла
- for (int i = 0; i < z; ++i)
- {
- inew = i;
- for (int j = 0; j < x; ++j)
- {
- jnew = (j + nnew) % x;
- Console.Write("\t" + a[inew, jnew]);
- }
- Console.WriteLine();
- }
- }
- else if (sd == 2)
- {
- Console.WriteLine("Сдвиг вниз:");
- int nnnew = z - n % z; // Выносим повторяющиеся вычисления за пределы цикла
- for (int i = 0; i < z; ++i)
- {
- for (int j = 0; j < x; ++j)
- {
- jnew = j;
- inew = (i + nnnew) % z;
- Console.Write("\t" + a[inew, jnew]);
- }
- Console.WriteLine();
- }
- }
- else Console.WriteLine("Ошибка!");
- //Ввыводим массив со сдвигом
- Console.ReadLine();
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д