Задание 22 Урок 13.1

Задание 22 Урок 13.1

Пользователь передает целое положительное число N, выведете на экран последовательность от 1 до N, так чтобы ширина "ёлочки" росла волнами. Например, для N=49 получим:
123--сначала до двух456789--потом до трёх101112--возвращаемся к одному131415161718192021--тут уже четыре2223242526--снова убывает 2728293031323334353637383940414243444546474849

var i,n,i1,a,m,b : integer;
begin
write('Vvedite chislo n: ');
readln(n);
i:=1;
i1:=1;
a:=0;
m:=2;
 while(i1<=n) do begin

   repeat
     write(i1, ' ');
     i1:=i1+1;
     a:=a+1;
    until(i<=a) or (i1>n);

  a:=0;
  writeln();

    if(i=m)then begin
      b:=-1;
      m:=m+1;
    end else if(i=1)then begin
      b:=1;
    end;

  i:=i+b;
 end;
readln();
end.
vedro-compota's picture

  1. проблемы с форматированием
  2. решить одним циклом

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

var i,n,m,a,b,c : integer;
begin
write('Vvedite chislo n: ');
readln(n);
a:=1;
b:=1;
m:=2;
for i:=1 to n do
begin
  if(a=b) then
  begin
    writeln(i,' ');
    if(b=m) then
    begin
      m:=m+1;
      c:=-1
    end
    else if(b<=1) then
      c:=1;
    b:=b+c;
    a:=1;
  end
  else
  begin
    write(i,' ');
    a:=a+1;
  end;
end;
readln();
end.
vedro-compota's picture

очередной элемент можно печатать сразу, что соответственно избавит от дублирования кода:

writeln(i,' ');
//....
    write(i,' ');

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

var i,n,m,a,b,c : integer;
begin
write('Vvedite chislo n: ');
readln(n);
a:=1;
b:=1;
m:=2;
for i:=1 to n do
begin
  write(i,' ');
  if(a=b) then
  begin
    writeln();
    if(b=m) then
    begin
      m:=m+1;
      c:=-1
    end
    else if(b<=1) then
      c:=1;
    b:=b+c;
    a:=1;
  end
  else
  begin
    a:=a+1;
  end;
end;
readln();
end
vedro-compota's picture

начать с a=0, что поможет избавиться от ветки:

  else
  begin
    a:=a+1;
  end;

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

var i,n,m,a,b,c : integer;
begin
  write('Vvedite chislo n: ');
  readln(n);
  b:=1;
  m:=2;

  for i:=1 to n do
  begin
    write(i,' ');
    a:=a+1; //присвоили

    if(a=b) then
    begin
      if(b=m) then
      begin
        m:=m+1;
        c:=-1
      end
      else if(b<=1) then
        c:=1;

      writeln();
      b:=b+c;
      a:=0;//сброс
    end;
  end;
readln();
end.
vedro-compota's picture

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

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