Решение задачи №5 из главы 14

Задача №5 из главы 14

Пользователь передает целое положительное число N, выведете на экран последовательность от 1 до N "ёлочкой", например для N=17:

1
2 3
4 5 6
7 8 9 10
11 12 13 14
15 16 17
Вывод консоли немного не то
vvedite chislo N:
17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
var a, i, j, k:integer;
  function cikl(var n:integer):integer;
  begin
  for i:=1 to N do
    begin
      write(i, ' ');
      j:=0;
      j := j + 1;
  end;
end;
begin
  writeln('vvedite chislo N:');
  readln(a);

  k:=1;
  cikl(a);
   if (j>=k) then
      begin
        writeln();
        j:=0;
        k:=k+1;
      end;
     readln();
end.

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

vedro-compota's picture

не по условию

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

vedro-compota's picture

это решение основывается на идее решения вложенными циклами.

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

gani84's picture

Вывод консоли
Vvedite chislo N
59

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 52 53 54 55
56 57 58 59
var n,j:integer;
    procedure vivod(j:integer);
    var m,z,s:integer;
    f:boolean;
begin
  z:=0; //счетчик
  s:=1; //счетчик кол-ва символов
  m:=0;
  writeln();
  for j:=1 to n do
  begin
    write(j,' ');
    z:=z+1;//счетчик кол-ва строк

    if (s = 1) then //если кол-во символов равно 1
       f:=false //флаг выключается
    else if (s = m) then
       f:=true; //флаг включается

    if (z=s) then
    begin
       writeln();// делаем перенос строки
       z:=0;
       m:=m-1;
       if (f) then
            s:=s-1 //условие для флага включенного
       else
            s:=s+1;  //условие для флага выключенного
    end;
  end;
end;


begin
writeln('Vvedite chislo N');
readln(n);
begin
   vivod(j);
   writeln();
end;
   readln();
end.
vedro-compota's picture

алгоритмически решение правильно
замечания:

  • 1) форматирование
  • 2) vivod(j); -- переменная j не нужна для работы процедуры
  • 3) Процедура не должна обращаться к глобальным переменным

+ потом будем исправлять по примечание:

ПРИМЕЧАНИЕ: для вывода очередной строки используйте отдельную подпрограмму.

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

gani84's picture

var i,n:integer;
procedure vivod(i:integer);
var j,k:integer;
begin
k:=1;
j:=0;
write(i, ' ');
j := j + 1;

if (j>=k) then
   begin
      writeln();
      j:=0;
      k:=k+1;
   end;
end;
begin
  writeln('vvedite chislo N:');
  readln(n);
  for i:=1 to n do
  begin
       vivod(i);
    end;
  readln();
end. 
vedro-compota's picture

сначала решите вложенными циклами, потом будем переделывать на использование процедуры

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