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