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

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

Модифицируйте решение предыдущей задачи, так, чтобы длина возрастающего фрагмента каждый раз увеличивалась на единицу (начиная с двух):

8 10  3  10 12 14  3  16 18 20 22  3....3....и т.д.

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

Вер1(вложенный цикл):

program task18v1;
var n,a,i,m: integer;
begin
  a:=8;
  writeln('Vvedite N bolwe ili ravno 8 u M');
  readln(n);
  readln(m);
  if (n>=8) then
  begin
    while (a<=n) do
    begin
      for i:=1 to m do
      begin
        write (a,' ');
        a:=a+2;
        if (a>n) then
          break
      end;
      if (a<=n) then
        write (3,' ');
      m:=m+1;
    end;
  end
  else
  writeln('owibka');
  readln();
end.       

Вер2(используя делимость):

program task18v2;
var n,a,i,m: integer;
begin
  a:=8;
  i:=0;
  writeln('Vvedite N bolwe ili ravno 8 u M');
  readln(n);
  readln(m);
  if (n>=8) then
  begin
    while (a<=n) do
    begin
      write (a,' ');
      a:=a+2;
      i:=i+1;
      if (i mod M=0) then
      begin
        write (3,' ');
        M:=M+1;
        i:=0;
      end
    end;
  end
  else
  writeln('owibka');
  readln();
end.                     

Вер 3(без делимости одним циклом)

program task18v3;
var n,a,i,m: integer;
begin
  a:=8;
  i:=0;
  writeln('Vvedite N bolwe ili ravno 8 u M');
  readln(n);
  readln(m);
  if (n>=8) then
  begin
    while (a<=n) do
    begin
      write (a,' ');
      a:=a+2;
      i:=i+1;
      if (i=M) then
      begin
        write (3,' ');
        M:=M+1;
        i:=0;
      end
    end;
  end
  else
  writeln('owibka');
  readln();
end.                     
vedro-compota's picture

засчитано

_____________
матфак вгу и остальная классика =)