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

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

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

1) С помощью вложенных циклов

program U131Z18;
var n,s,m,k: integer;
begin
  writeln('vvedite polozhitelnoe chislo');
  readln(n);
  if n<0 then
    writeln('oshibka')
  else
  begin
    m:=2;
    s:=0;
    k:=8;
    while k<=n do
    begin
      while (k<=n) and (s<m) do
      begin
        write(k,' ');
        k:=k+2;
        s:=s+1;
      end;
      write('3 ');
      m:=m+1;
      s:=0;
    end;
  end;
  readln();
end.   

2) используя делимость нацело

program U131Z18;
var n,s,m,k: integer;
begin
  writeln('vvedite polozhitelnoe chislo');
  readln(n);
  if n<0 then
    writeln('oshibka')
  else
  begin
    m:=2;
    s:=0;
    k:=8;
    while k<=n do
    begin
      write(k,' ');
      k:=k+2;
      s:=s+1;
      if ((s mod m)=0) then
      begin
         write('3 ');
         m:=m+1;
         s:=0;
      end;
    end;
  end;
  readln();
end.      

3) НЕ используя делимость нацело

program U131Z18;
var n,s,m,k: integer;
begin
  writeln('vvedite polozhitelnoe chislo');
  readln(n);
  if n<0 then
    writeln('oshibka')
  else
  begin
    m:=2;
    s:=0;
    k:=8;
    while k<=n do
    begin
      write(k,' ');
      k:=k+2;
      s:=s+1;
      if (s=m) then
      begin
         write('3 ');
         m:=m+1;
         s:=0;
      end;
    end;
  end;
  readln();
end.  
vedro-compota's picture

решение засчитано

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