Вопрос по задчe 21 урока 13.1.

Задача 21. (Урок 13.1).Не удается сделать плавное убывание чисел. Достигая заданного числа, строка переходит на новую, а количество чисел стартует с 1, а должно быть -1 от введенного.

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

var N,M, KLM, a,c,b,v: integer;

begin
  {writeln('vvedite cislo N');
  readln(N);
  writeln('vvedite cislo M');
  readln(M);}

  N := 99;
  M := 5;
  KLM := M;
  a := 1;
  c := 1;
  b := 0;
  //v := 1;
   for N:= 1 to N do
    begin
      write(N, ' ');
      if (v = 1) then
      begin
        a := a + 1;
           if (a >= KLM) then
           begin
             writeln();
             a := 1;
             KLM := KLM - 1;
              if (KLM = 1) then
               begin
               KLM := M;
               v := 0;
               end;
           end;
      end
      else
      if (v = 0) then
      begin
        b := b + 1;
        if (b = c) then
         begin
          writeln();
          c := c + 1;
          b := 0;
          if (c > M) then
           begin
           c := 1;
           v := 1;
           end;
        end;
      end;
    end;
end.
vedro-compota's picture

просьба вторую задачу оформить отдельной темой, а отсюда убрать.
Один вопрос - один пост

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

vedro-compota's picture

  • дать переменным понятные имена
  •  M := M - 1;

    -- М менять не стоит, переделать

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

Romakip's picture

var M,N, shetcisel,iznahalnoeznah, klonM: integer;

begin
  iznahalnoeznah := 1;
  writeln('vvedite cislo N');
  readln(N);
  writeln('vvedite cislo M');
  readln(M);
  klonM := M;
    while (shetcisel < N) do
     begin
       shetcisel := shetcisel + 1;
       write(shetcisel, ' ');
       klonM := klonM - 1;
       if ( klonM = 0 ) then
       begin
         writeln();
         klonM := iznahalnoeznah + 1;
         iznahalnoeznah := klonM;
         if (iznahalnoeznah > M) then
           begin
             klonM := 1;
             iznahalnoeznah := 1;
           end;
       end;
     end;
end.
vedro-compota's picture

чтобы перенести строку, мы должны проверить достигла ли очередная строка ожидаемой длины, т.е. нужно завести переменные отвечающие за ожидаемую длину строки и за текущую длину строки.

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