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

Задача 18 Урок 13.1:

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

Одним циклом:

var N, M, c, i: integer;   
begin
 writeln('Введите целое число N > 7:');
 readln(N);
 M := 2;
 if N > 7 then
  begin
   i := 8;
   while i <= N do
    begin
     if c < M then
      begin
       write(i, ' ');
       i += 2;
       c += 1;
      end
     else
      begin
       write('3 ');
       c := 0;
       M += 1;
      end;
    end;
  end
 else writeln('Ошибка');
 readln();
end.

Одним циклом с делимостью нацело:

var N, M, c, i: integer;  
begin
 writeln('Введите целое число N > 7:');
 readln(N);
 M := 2;
 if N > 7 then
  begin
   i := 8;
   while i <= N do
    begin
     if c div M = 0 then
      begin
       write(i, ' ');
       i += 2;
       c += 1;
      end
     else
      begin
       write('3 ');
       c := 0;
       M += 1;
      end;
    end;
  end
 else writeln('Ошибка');
 readln();
end.

Вложенными циклами:

var N, M, c, i: integer;   
begin
 writeln('Введите целое число N > 7:');
 readln(N);
 M := 2;
 if N > 7 then
  begin
   i := 8;
   while i <= N do
    begin
     while c < M do
      begin
       write(i, ' ');
       i += 2;
       c += 1;
      end;
     write('3 ');
     c := 0;
     M += 1;
    end;
  end
 else writeln('Ошибка');
 readln();
end.