Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2016, 19:43   #1
alexandrik121
 
Регистрация: 19.11.2016
Сообщений: 6
По умолчанию Вывести элементы матрицы на экран в следующем порядке:

Безымянный.pngпомогите ребят написать код, написать код неделю мучаюсь с ней, срочно надо в

Последний раз редактировалось alexandrik121; 19.11.2016 в 20:06.
alexandrik121 вне форума Ответить с цитированием
Старый 19.11.2016, 21:06   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

1. пишем "стандартную змейку" (тырим код с http://cppstudio.com/post/4991/ )
2. зеркально отображаем её и выводим
Код:
public static void Main(string[] args)
        {
            int n = 10;
            double[,] mas = new double[n,n];
            double[,] mirror = new double[n,n];
            for (int i=0;i<n;i++)
            {
                for(int j=0;j<n;j++)
                {
                    if(i+j<n)
                    {
                        mas[i, j] = 0.5 * (i + j + 1) * (i + j + 2) + ((i + j) % 2 == 0 ? -i : -j);
                    }
                    else
                    {
                        int p = n - i - 1;
                        int q = n - j - 1;
                        mas[i, j] = n * n + 1 - (0.5 * (p + q + 1) * (p + q + 2) + ((p + q) % 2 == 0 ? -p : -q));
                    }
                    mirror[i,n-1-j]=mas[i,j];
                }
            }
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                    Console.Write(mirror[i, j] + "\t");
                Console.WriteLine();
             }
        }
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 25.11.2016, 11:14   #3
kva52
 
Регистрация: 23.06.2014
Сообщений: 5
По умолчанию

Код:
  class Program
  {
    static int N = 4;
    static void Main(string[] args)
    {
      CommonPrint();
      DiagonalPrint();
      Console.WriteLine("\n OK!");
      Console.ReadLine();
    }

    private static void CommonPrint()
    {
      Console.WriteLine("CommonPrint:");
      for (int i = 0; i < N; i++)
      {
        for (int j = 0; j < N; j++)
          PrintElement(i, j);
        Console.WriteLine();
      }
    }
    private static void DiagonalPrint()
    {
      Console.WriteLine("\nDiagonalPrint:");

      bool revers = false;  //определяет направление перебора элементов по диагонали
      int r, c;             //координаты начальной клетки при движении по диагонали

      //цикл по диагоналям (всего 2*N-1)
      //диагонали d нумеруем по номеру столбца в нулевой строке
      for (int d = N - 1; d >= -(N-1); d--)
      {
        if (revers)   //направление вниз-вправо
        {
          if (d >= 0)
          {
            r = 0;
            c = d;
          }
          else
          {
            r = -d;
            c = 0;
          }
          for (; r < N && c < N; r++, c++)
            PrintElement(r, c);
        }
        else          //направление вверх-влево
        {
          if (d >= 0)
          {
            r = (N - 1) - d;
            c = N - 1;
          }
          else
          {
            r = N - 1;
            c = (N - 1) + d;
          }
          for (; r >=0 && c >=0; r--, c--)
            PrintElement(r, c);
        }
        Console.WriteLine();
        revers = !revers;
      } //for d
    }

    private static void PrintElement(int i, int j)
    {
      Console.Write("({0},{1}) ", i, j);
    }
Результат:
CommonPrint:
(0,0) (0,1) (0,2) (0,3)
(1,0) (1,1) (1,2) (1,3)
(2,0) (2,1) (2,2) (2,3)
(3,0) (3,1) (3,2) (3,3)

DiagonalPrint:
(0,3)
(0,2) (1,3)
(2,3) (1,2) (0,1)
(0,0) (1,1) (2,2) (3,3)
(3,2) (2,1) (1,0)
(2,0) (3,1)
(3,0)

Последний раз редактировалось kva52; 25.11.2016 в 11:21.
kva52 вне форума Ответить с цитированием
Старый 26.11.2016, 13:12   #4
kva52
 
Регистрация: 23.06.2014
Сообщений: 5
По умолчанию

Можно покороче предыдущий вариант переписать
Код:
    private static void DiagonalPrint()
    {
      Console.WriteLine("\nDiagonalPrint:");
      for (int d = N + N - 2; d >= 0; d -= 2)        //цикл по диагоналям (всего 2*N-1)
      {
        for (int r = N - 1, c = d; r >= 0; r--, c--) //по диагонали вверх-влево
          if (c >= 0 && c < N)
            PrintElement(r, c);
        Console.WriteLine();

        for (int r = 0, c = d - N; r < N; r++, c++)  //по диагонали вниз-вправо
          if (c >= 0 && c < N)
            PrintElement(r, c);
        Console.WriteLine();
      } //for d
    }
kva52 вне форума Ответить с цитированием
Старый 03.12.2016, 23:03   #5
alexandrik121
 
Регистрация: 19.11.2016
Сообщений: 6
По умолчанию

спасибо, друзья
alexandrik121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[PASCAL]: Вывести элементы побочной диагонали квадратной матрицы в порядке возрастания Dr Rainman Помощь студентам 6 14.10.2016 19:57
За один просмотр файла f (file of real) и без дополнительных файлов вывести элементы файла f в следующем порядке... (Pascal ABC) ГОолодный Помощь студентам 1 29.04.2014 16:06
Вывести ненулевые элементы на экран в обратном порядке Alexandr- Помощь студентам 4 19.03.2013 22:44
Напечатать элементы заданной матрицы А(N, N) в следующем порядке)заранее спасибо только в паскале Вовик-вовик Помощь студентам 3 24.10.2012 13:12
Вычислить среднее арифметическое каждого столбца матрицы и вывести на экран в порядке возрастания ILMAR95 Паскаль, Turbo Pascal, PascalABC.NET 3 01.04.2011 15:44