Урок 13 задача 22

Пользователь передает целое положительное число N, выведете на экран последовательность от 1 до N, так чтобы ширина "ёлочки" росла волнами.

Урок 13 задача 22

var n,i,C,L,M: integer;
  F: boolean;
begin
  C:=0;   // предожидаемая ячейка
  L:=1;  //количество ячеек в строке (длина строки)
  M:=1;  // число ограничитель
  writeln('write n');
  readln(n);
  for i:=1 to n do
    begin
      write(i, ' ');  //пишем число
      C:=C+1;        // увеличиваем счетчик ячеек
      if (C=L) then  // если число ячеек = длине строки
        begin
          if (L = M) then //если длинна строки стала равна ограничителю М
            F:=false;     // флаг опускаем
          if (L = 1) then  //если в строке осталась 1 ячейка, то флаг поднимаем
            begin
              F:=true; //флаг поднят
              M:=M+1;   //ограничитель прибавил 1
            end;                //Вводим условие
          if (F) then   //если флаг поднят
            L:=L+1      //прибавляем одну ячейку к имеющимся в строке
          else         //если флаг опущен
            L:=L-1;    //убираем одну ячейку
            writeln();   //перевод строки
            C:=0;        //обнуляем
        end;
     end;

  readln();
end. 

Key Words for FKN + antitotal forum (CS VSU):

vedro-compota's picture

1)

if (L = M) then //если длинна строки стала равна ограничителю М
            F:=false;     // флаг опускаем
          if (L = 1) then 

-- может ли L одновременно быть и 1 и M (см. задача 9 отсюда http://fkn.ktu10.com/?q=node/8539
)

в остальном нормально

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

var n,i,C,L,M: integer;
  F: boolean;
begin
  C:=0;   // предожидаемая ячейка
  L:=1;  //количество ячеек в строке (длина строки)
  M:=1;  // число ограничитель
  writeln('write n');
  readln(n);
  for i:=1 to n do
    begin
      write(i, ' ');  //пишем число
      C:=C+1; // увеличиваем счетчик ячеек
      if (C=L) then  // если число ячеек = длине строки
        begin
          if (L = 1) then
            begin
              F:=true; //флаг поднят
              M:=M+1;//ограничитель прибавил 1
            end
          else if (L = M) then //если длинна строки стала равна ограничителю М
            F:=false; // флаг опускаем

          if (F) then //если флаг поднят
            L:=L+1
          else         //если флаг опущен
            L:=L-1;    //убираем одну ячейку
            writeln();   //перевод строки
            C:=0;        //обнуляем
        end;
     end;

  readln();
end.                

  readln();
end.                       
vedro-compota's picture

#для_статического_анализа --- метка для последующего анализа

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