#13.2 Вложенные циклы для вывода матриц, таблиц -- примеры решения задач. Паскаль

В этом уроке мы продолжим разбирать тему вложенных циклов в Паскаль (начало разговора о вложенных циклах тут). И поработаем с выводом на экран таблиц, в частности, рисуя "флаги" с применением ASCII art-а.

Пример №1 -- заполнение матрицы символами

Задача:

вывести на экран "флаг" (матрицу $N \times N$, заполненную символами), вида:

- - - - - -
- - - - - -
- - - - - -
- - - - - -

Решение:

var m, i, j: integer;
begin
  m := 8; // размерность квадрата

  for i:=1 to m do // цикл запускающий вывод очередной строки
    begin
      for j:=1 to m do  // вывод символов в очередной строке
          write('- ');

      writeln(); // перенос строки
    end;

  readln();
end.   

Пример №2 -- условие принадлежности главной и побочной диагонали матрицы

Рассмотрим пример решения задачи, выводящей на экран Андреевский флаг:

var m, i, j: integer;
begin
  m := 15; // начальное значение для счетчика внешнего цикла

  for i:=1 to m do
    begin
      for j:=1 to m do

        if (i = j) then  // условие принадлежности главной диагонали
          write('X ')
         { далее проверим условие принадлежности побочной диагонали }
        else if ((j = (m + 1 - i))  AND (i = (m + 1 - j))) then
             write('X ')
          else
          write('* ');

      writeln();
    end;

  readln();
end.    

Задачи для самостоятельного решения

  1. Составьте программу, которая выводит на экран прямоугольный флаг $N \times M$ вида (используйте циклы repeat):
    - - - - - -
    - - - - - -
    - - - - - -
    - - - - - -
    
  2. Составьте программу, которая выводит на экран прямоугольный флаг $N \times M$ вида (c чередованием плюсов и минусов в строках, используйте циклы while):
    - - - - - -
    + + + + + +
    - - - - - -
    + + + + + +
    - - - - - -  
    
  3. Составьте программу, которая выводит на экран прямоугольный флаг $N \times M$ вида (с рамкой по краям):
    + + + + + +
    + - - - - +
    + - - - - +
    + + + + + +
    
  4. Подготовительная задача для "счет"

    Пользователь вводит число от 1 до 9, вывести его в представлении как счетах со сдвинутыми костями (всего десять костей на спице), например:

    • если ноль, то все кости справа:
      ---++++++++++
    • если три, то значащая часть слева, а все отстальное справа:
      +++---+++++++
    • если девять:
      +++++++++---+
  5. Предварительная справка: настоящие счеты выглядят как-то так (кости, с помощью которых отсчитывают число разрядов, нанизаны на спицы):
    счеты

    В некоем виртуальном пространстве есть виртуальные, опять же, ASCII-счеты, с 7-ю спицами по 10 костяшек на каждой, в сброшенном состоянии (условный ноль) они выглядят так:

    ---++++++++++
    ---++++++++++
    ---++++++++++
    ---++++++++++
    ---++++++++++
    ---++++++++++
    ---++++++++++
    

    Задание: визуализируйте на счетах введенное пользователем число.

    Примеры:

    1. Пользователь вводит: 7
      Получаем:
      ---++++++++++
      ---++++++++++
      ---++++++++++
      ---++++++++++
      ---++++++++++
      ---++++++++++
      +++++++---+++
    2. Пользователь вводит: 28
      Получаем:
      ---++++++++++
      ---++++++++++
      ---++++++++++
      ---++++++++++
      ---++++++++++
      ++---++++++++
      ++++++++---++
      
    3. Пользователь вводит: 1984
      Получаем:
      ---++++++++++
      ---++++++++++
      ---++++++++++
      +---+++++++++
      +++++++++---+
      ++++++++---++
      ++++---++++++
      
    4. Пользователь вводит: 2021
      А наша программа отвечает:
      ---++++++++++
      ---++++++++++
      ---++++++++++
      ++---++++++++
      ---++++++++++
      ++---++++++++
      +---+++++++++
      

    ПРИМЕЧАНИЕ: задача была предложена участником @math2 для соревнований IFF 2020.

  6. Проверочные задачи (решать не обязательно):

  7. Пользователь задает целое положительное число N, выведите матрицу из чисел, размером N, на N, так чтобы элементы ее главной диагонали были заменены, звездочками, напр.
    для N = 3, мы должны получить:
    * 2 3
    1 * 3
    1 2 *
    
  8. Пользователь задает целое положительное N, выведите матрицу из чисел, размером N, на N, так чтобы элементы ее побочной диагонали были заменены, звездочками, напр.:
    • для N = 3, мы должны получить:
      1 2 *
      1 * 3
      * 2 3
      
    • для N = 4, мы должны получить:
      1 2 3 *
      1 2 * 4
      1 * 3 4
      * 2 3 4
      
      
  9. Пользователь задает целое положительное число N, выведите матрицу из чисел, размером N на N, так чтобы элементы ее и главной и побочной диагонали были заменены, звездочками, напр.
    • для N = 3, мы должны получить:
      * 2 *
      1 * 3
      * 2 *
      
    • для N = 4, мы должны получить:
      * 2 3 *
      1 * * 4
      1 * * 4
      * 2 3 *