Массив: Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз - C#

Узнай цену своей работы

Формулировка задачи:

Условие задачи: Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз (в зависимости от введенного режима). n может быть больше количества элементов в строке или столбце. Вот мой код:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace LabRab6
  5. {
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. //Массив элементов
  11. const int z = 4, x = 5;
  12. int[,] a = new int[z, x] {
  13. {1, 1, 0, 0, 0},
  14. {1, 1, 0, 0, 0},
  15. {0, 0, 0, 0, 0},
  16. {0, 0, 0, 0, 0}
  17. };
  18. Console.WriteLine("Исходный массив: ");
  19. for (int i = 0; i < z; ++i)
  20. {
  21. for (int j = 0; j < x; ++j)
  22. Console.Write("\t" + a[i, j]);
  23. Console.WriteLine();
  24. }
  25. //Вводим количество элементов для сдвига
  26. Console.Write("Введите количество элементов для сдвига: ");
  27. string buf1 = Console.ReadLine();
  28. int n = int.Parse(buf1);
  29. //Ввдим режим сдвига
  30. Console.Write("Выберите режим сдвига( 1 - вправо, 2 - вниз ): ");
  31. string buf2 = Console.ReadLine();
  32. int sd = int.Parse(buf2);
  33. //Осуществляем сдвиги
  34. int inew = 0, jnew = 0;
  35. int g = 0;
  36. if (sd == 1)
  37. {
  38. Console.WriteLine("Сдвиг вправо:");
  39. for (int i = 0; i < z; ++i)
  40. {
  41. for (int j = 0; j < x; ++j)
  42. {
  43. inew = (i + (g % z)) % z;
  44. jnew = (j + (n % x)) % x;
  45. Console.Write("\t" + a[inew, jnew]);
  46. }
  47. Console.WriteLine();
  48. }
  49. }
  50. else if (sd == 2)
  51. {
  52. Console.WriteLine("Сдвиг вниз:");
  53. for (int i = 0; i < z; i++)
  54. {
  55. for (int j = 0; j < x; j++)
  56. {
  57. inew = (i + (n % z)) % z;
  58. jnew = (j + (g % x)) % x;
  59. Console.Write("\t" + a[inew, jnew]);
  60. }
  61. Console.WriteLine();
  62. }
  63. }
  64. else Console.WriteLine("Ошибка!");
  65. //Ввыводим массив со сдвигом
  66. Console.ReadLine();
  67. }
  68. }
  69. }
Программа в принципе работает, но наоборот. Вместо сдвига вправо - сдвигает влево. Вместо сдвига вниз - сдвигает вверх. Подскажите пожалуйста, как исправить это. Кто-нибудь может дать совет как исправить это?

Решение задачи: «Массив: Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace LabRab6
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             //Массив элементов
  12.             const int z = 4, x = 5;
  13.             int[,] a = new int[z, x] {
  14.                 {1, 1, 0, 0, 0},
  15.                 {1, 1, 0, 0, 0},
  16.                 {0, 0, 0, 0, 0},
  17.                 {0, 0, 0, 0, 0}
  18.             };
  19.             Console.WriteLine("Исходный массив: ");
  20.             for (int i = 0; i < z; ++i)
  21.             {
  22.                 for (int j = 0; j < x; ++j)
  23.                     Console.Write("\t" + a[i, j]);
  24.                 Console.WriteLine();
  25.             }
  26.             //Вводим количество элементов для  сдвига
  27.             Console.Write("Введите количество элементов для  сдвига: ");
  28.             string buf1 = Console.ReadLine();
  29.             int n = int.Parse(buf1);
  30.             //Ввдим режим сдвига
  31.             Console.Write("Выберите режим сдвига( 1 - вправо, 2 - вниз ): ");
  32.             string buf2 = Console.ReadLine();
  33.             int sd = int.Parse(buf2);
  34.             //Осуществляем сдвиги
  35.             int inew = 0, jnew = 0;
  36.             int g = 0;
  37.             if (sd == 1)
  38.             {
  39.                 Console.WriteLine("Сдвиг вправо:");
  40.                 int nnew = x - n % x; // Выносим повторяющиеся вычисления за пределы цикла
  41.                 for (int i = 0; i < z; ++i)
  42.                 {
  43.                     inew = i;
  44.                     for (int j = 0; j < x; ++j)
  45.                     {
  46.                         jnew = (j + nnew) % x;
  47.                         Console.Write("\t" + a[inew, jnew]);
  48.                     }
  49.                     Console.WriteLine();
  50.                 }
  51.             }
  52.             else if (sd == 2)
  53.             {
  54.                 Console.WriteLine("Сдвиг вниз:");
  55.                 int nnnew = z - n % z; // Выносим повторяющиеся вычисления за пределы цикла
  56.                 for (int i = 0; i < z; ++i)
  57.                 {
  58.                     for (int j = 0; j < x; ++j)
  59.                     {
  60.                         jnew = j;
  61.                         inew = (i + nnnew) % z;
  62.                         Console.Write("\t" + a[inew, jnew]);
  63.                     }
  64.                     Console.WriteLine();
  65.                 }
  66.             }
  67.             else Console.WriteLine("Ошибка!");
  68.             //Ввыводим массив со сдвигом
  69.             Console.ReadLine();
  70.         }
  71.     }
  72. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы