Урок 13.1. Вложенные циклы. Задача №18.

Урок 13.1 Задача №18.

Модифицируйте решение предыдущей задачи, так, чтобы длина
возрастающего фрагмента каждый раз увеличивалась на единицу
(начиная с двух):
8 10 два числа 3 12 14 16 три числа 3 18 20 22 24 четыре числа ...3... и т.д.
ПРИМЕЧАНИЕ: эту задачу можно решить, как вложенными циклами,
так и вообще одним циклом (что более изящно),
при этом решение одним циклом можно сделать, как используя делимость нацело
(для определения момента вывода тройки), так и не используя.
Решите всеми тремя способами.

var i, j, k, M, N : integer;
// Первый способ: вложенными циклами.
begin
  M := 2;
  i := 8;
  writeln ('Enter positive integer: ');
  readln (N);
  if (N < 0) then
    writeln ('Error! You enter negative integer, try again!')
  else begin
    while (i <= N) do
    begin
      for j := 1 to M do
      begin
        if (i <= N) then
          write (i, ' ');
          i += 2;
      end;
      M += 1;
      write (3, ' ');
    end;
  end;

  // Второй способ: один цикл
  //используя делимость нацело (для определения момента вывода тройки).
  k := 2;
  i := 8;
  writeln ('Enter positive integer: ');
  readln (N);
  if (N < 0) then
    writeln ('Error! You enter negative integer, try again!')
  else begin
    repeat
      write (i, ' ');
      i += 2;
      j += 1;
      if (j mod 2 = 0) and (j = k) then
      begin
        write (3, ' ');
        j := 0;
        k += 1;
      end
      else if (j mod 2 = 1) and (j = k)then
      begin
        write (3, ' ');
        j := 0;
        k += 1;
      end;
    until (i > N);
  end;
  // Третий способ: один цикл (for)
  // не используя делимость нацело (для определения момента вывода тройки).
  k := 2;
  writeln ('Enter positive integer: ');
  readln (N);
  if (N < 0) then
    writeln ('Error! You enter negative integer, try again!')
  else begin
    for i := 8 to N do
    begin
      if (i mod 2 = 0) then
      begin
        write (i, ' ');
        j += 1;
      end;
      if (j >= k) then
      begin
        write (3, ' ');
        j := 0;
        k += 1;
      end;
    end;
  end;
  // Третий способ: один цикл (while)
  // не используя делимость нацело (для определения момента вывода тройки).
  i := 8;
  k := 2;
  writeln ('Enter positive integer: ');
  readln (N);
  if (N < 0) then
    writeln ('Error! You enter negative integer, try again!')
  else begin
    while (i <= N) do
    begin
      write (i, ' ');
      i += 2;
      j += 1;
      if (j = k) then
      begin
        write(3, ' ');
        j := 0;
        k += 1;
      end;
    end;
  end;

  readln(); // Удержание консоль
end.// Завершение программы