Задача 18 урок 13.1

http://fkn.ktu10.com/?q=node/8697

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

!!ПРИМЕЧАНИЕ: эту задачу можно решить, как вложенными циклами, так и вообще одним циклом (что более изящно), при этом решение одним циклом можно сделать, как используя делимость нацело (для определения момента вывода тройки), так и не используя.
Решите всеми тремя способами.

// 1 цикл + деление (mod)
program task18_1_lesson13_1;
var n, m, i, k, j, c : integer;
begin
  j:=8;                   //n1 последовательности
  k:=0;                   //разность -> n2-n1...
  readln(n);
  m:=2;                   //старт локация "3"
  c:=0;                   //счётчик #элемента послед.
  if n<0 then
    writeLn ('error')
  else
    begin
      for i:=1 to n do
        begin
          write(j + k,' ');
          k := k + 2;
          c := c + 1;
          if ((c mod m) = 0) then
            Begin
              write(3, ' ');
              c := 0;
              m := m +1;
            end;
        end;
    end;
   readLn();
end.

Второй способ:

//вложеный цикл
program task18_2_lesson13_1;
var
m, n, i, j, c, k:Integer;
begin
  readLn(n);
  k:=8;
  c:=0;
  i:=1;
  m:=2;
  if  n < 0 then
    writeln('error')
  else
    begin
      while i < n do           //i-ый член послед. меньше N-ного
        begin
          for j:=1 to m do   //пишем члены последовательности до "3"
          begin
            write(k+c, ' ');
            i := i + 1;           //счет кол-ва элементов послед.
            c := c + 2;          //разность N-ного члена и первого
          end;
          write (3, ' ');
          m := m + 1;            //меняю положение "3" -> влияет на цикл FOR
        end ;
  readLn();
    end ;
end.

Третий:

// 1 цикл БЕЗ деления
program task18_1_lesson13_1;
var n, m, i, k, j, c : integer;
begin
  j := 8;                   //n1 последовательности
  k := 0;                   //разность -> n2-n1...
  readln(n);
  i := 0;
  m := 2;                   //старт локация "3"
  c := 0;                   //счётчик #элемента послед.
  if (n < 0) then
    writeLn ('error')
  else
    begin
      repeat
          i := i + 1;           //следующий член последовательности до "3"
          write(j + k,' ');
          k := k + 2;
          c := c + 1;           // счетчик кол-ва членов (чтобы не привысить N)
          if (i = m) then
            Begin
              write(3, ' ');
              i := 0;            //обнулили и снова считаем сколько чисел от "3" до "3"
              m := m +1;
            end;
      until (c = n);
    end;
   readLn();
end.