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

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

Пользователь передает целое положительное число N, выведете на экран последовательность от 1 до N, так чтобы ширина "ёлочки" росла волнами. Например, для N=49 получим:
1
2 3--сначала до двух
4
5 6
7 8 9--потом до трёх
10 11
12--возвращаемся к одному
13 14
15 16 17
18 19 20 21--тут уже четыре
22 23 24 25 26--снова убывает
27 28 29 30
31 32 33
34 35
36
37 38
39 40 41
42 43 44 45
46 47 48
49

Решение:

program u13z21;
var i,j,k,N,M,t:integer;
begin
  writeln('Vvedite chislo - N');
  readln(N);
  M:=2;
  i:=1; //номер элемента по порядку
  j:=1; //номер строки
  k:=1;
  t:=1;//номер элемента в строке
  for i:=1 to N do
  begin
    write(i,' ');
    if j=k then
    begin
      writeln();
      j:=0;
      if k=M then
      begin
        t:=0;
        M:=M+1;
      end;
      if k=1 then
        t:=1;
      if t=1 then
        k:=k+1;
      if t=0 then
        k:=k-1;
    end;
    j:=j+1;
  end;
  readln();
end.

Консоль:

Vvedite chislo - N
51
1
2 3
4
5 6
7 8 9
10 11
12
13 14
15 16 17
18 19 20 21
22 23 24
25 26
27
28 29
30 31 32
33 34 35 36
37 38 39 40 41
42 43 44 45
46 47 48
49 50
51
vedro-compota's picture


if k=M then
      begin
        t:=0;
        M:=M+1;
      end;
      if k=1 then
        t:=1;
      if t=1 then
        k:=k+1;
      if t=0 then
        k:=k-1;

-- выяснить какие условия выполняются одновременно, а какие нет - если непонятно см. задача 11 урок 9 http://fkn.ktu10.com/?q=node/8539

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

program u13z21;
var i,j,k,N,M:integer;
  t:boolean;
begin
  writeln('Vvedite chislo - N');
  readln(N);
  writeln();
  M:=1; // максимальное количество элементов в елочке
  i:=1; // номер элемента по порядку
  j:=1; // номер элемента в строке
  k:=1; // количество элементов в строке
  t:=TRUE; // переключатель возрастания/убывания
  for i:=1 to N do
  begin
    write(i,' ');
    if j=k then
    begin
      writeln();
      j:=0;
      if k=M then
      begin
        t:=FALSE;
        M:=M+1;
      end;
      if k=1 then
        t:=TRUE;
      if t then
        k:=k+1
      else
        k:=k-1;
    end;
    j:=j+1;
  end;
  readln();
end.
vedro-compota's picture

if k=M then
begin
t:=FALSE;
M:=M+1;
end;
if k=1 then

-- не нужен ли тут else?

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