Задача 22 Урок 13.1
Primary tabs
Пользователь передает целое положительное число N, выведете на экран последовательность от 1 до N, так чтобы ширина "ёлочки" росла волнами. Например, для N=49 получим:
var N, M, i ,c ,k :integer;
f: boolean;
begin
writeln('vvedi massu elki N ');
readln(N);
M := 2;
i := 1; // начало отсчета последовательности
k := 1; // динамический построчный ограничитель ширины елки от одного до N c шагом +1 и -1
while(i <= N) do
begin
if((k <= M) and (not f) )then // увеличение елки. (not f) чтобы не вернуться в это условие при уменьшении елки
begin
c := 0; //внутриусловный посимвольный счетчик ширины елки
repeat
if(i <= N) then // когда достигнут максимум по массе елки закончить
begin
write(i, ' ');
i := i + 1; // увеличиваем последовательность чисел
c := c + 1; // увеличиваем ширину ветки елки на 1 (не мах)
end;
until (c = k); // условие выхода по отресовке ветки
writeln();
k := k + 1; //увеличиваем ограничительную ширину строки на 1
end
else // уменьшение елки
begin
c := 0; //внутриусловный посимвольный счетчик ширины елки
repeat
if(i <= N) then // когда достигнут максимум по массе елки закончить
begin
write(i, ' ');
i := i + 1; // увеличиваем последовательность чисел
c := c + 1; // увеличиваем ширину ветки елки на 1 (не мах)
end;
until (c = (k-2)); // (к-2) из за особеностей кода. условие выхода по отресовке ветки
writeln();
k := k - 1; //уменьшаем ограничительную ширину строки на 1
f := true; // флаг чтобы не вернуться в условие по увеличению елки
if(k=2) then // условие чтобы начать снова ёлку увеличивать(выйдя из уменьшения)
begin
f := false;
M := M + 1; // увеличение елки на 1 после спуска
end;
end;
end;
readln();
end.
- Log in to post comments
- 6655 reads
jl8qy9kd_pro
Fri, 08/06/2021 - 13:16
Permalink
одним циклом
var N, M, i ,L ,k :integer; begin writeln('vvedi massu elki N '); readln(N); M := 2; l := 2; // ограничитель символов в строке (начать с 2х и закончить 1) k := 0; // посимвольный счетчик на строке i := 2; writeln(1); while (i <= N) do begin if(k <= L) then // условие входа для увеличения елки if(k = L) then //увеличиваем длину строки на 1 begin i := i - 1; L := L + 1; if(L > M) then //в последней итерации на увеличение меняем зайдет сюда и переключит на уменьшение begin L := M - 1; // создается разница в 2 раза между L и k k := L * 2; end else k := 0; writeln(); end else begin write(i, ' '); k := k + 1; end else if(k > L) then //условие для уменьшения begin write(i, ' '); k := k - 1; if((k = L) and ((k <= 1) or (L <= 1))) then //условие на выход из уменьшения, далее елка увеличивается begin l := 2; // создаем стартовые условия для увеличения k := 0; M := M + 1; // елка увеличивается на 1 сама writeln(); end else if(k = L) then //уменьшаем длину строки на 1 и переход на строку 34 begin L := L - 1; // создается разница в 2 раза между L и k k := L * 2; writeln(); end; end; i := i + 1; end; readln(); end.vedro-compota
Sun, 08/08/2021 - 12:53
Permalink
ждем решения задачки 21: http
ждем решения задачки 21: http://fkn.ktu10.com/?q=node/12709#comme...
_____________
матфак вгу и остальная классика =)
jl8qy9kd_pro
Sat, 08/21/2021 - 17:04
Permalink
RE
var N, M, i ,c ,k :integer; f: boolean; begin writeln('vvedi massu elki N '); readln(N); M := 1; k := 0; c := 1; f := true; for i := 1 to N do begin write(i, ' '); k := k + 1; if((k = c) and (f = true)) then begin k := 0; c := c + 1; writeln(); end else if((k = c) and (f = false)) then begin k := 0; c := c - 1; writeln(); end; if((c > M) and (f = true)) then begin M := M+1; f := false; c := c - 2; end else if((c = 1) and (f = false)) then f := true else if((c < 1) and (f = false)) then // на случай если высота елки 2 begin c := 2; M := M+1; end; end; readln(); end.jl8qy9kd_pro
Sat, 08/21/2021 - 17:06
Permalink
результат
vedro-compota
Sun, 08/22/2021 - 13:30
Permalink
if((k = c) and (f = true))
-- избежать дублирования, см. урок 9 задача 11 http://fkn.ktu10.com/?q=node/8539
_____________
матфак вгу и остальная классика =)
jl8qy9kd_pro
Sun, 08/22/2021 - 17:17
Permalink
RE
var N, M, i ,c ,k :integer; f: boolean; begin writeln('vvedi massu elki N '); readln(N); writeln('vvedi shiriny M '); readln(M); k := 0; c := 1; f := true; for i := 1 to N do begin write(i, ' '); k := k + 1; if(k = c) then begin k := 0; writeln(); if(f = true) then c := c + 1 else c := c - 1; end; if((c > M) and (f = true)) then begin f := false; c := c - 2; end else if((c = 1) and (f = false)) then f := true else if((c < 1) and (f = false)) then // на случай если высота елки 2 c := 2; end; readln(); end.vedro-compota
Sun, 08/29/2021 - 13:19
Permalink
if((c > M) and (f = true))
-- нет зависимости от флага, перепроверить блок весь:
if((c > M) and (f = true)) then begin f := false; c := c - 2; end else if((c = 1) and (f = false)) then f := true else if((c < 1) and (f = false)) then // на случай если высота елки 2 c := 2;_____________
матфак вгу и остальная классика =)
jl8qy9kd_pro
Fri, 09/03/2021 - 12:58
Permalink
RE
var N, M, i ,c ,k :integer; f: boolean; begin writeln('vvedi massu elki N '); readln(N); writeln('vvedi shiriny M '); readln(M); k := 0; c := 1; f := true; for i := 1 to N do begin write(i, ' '); k := k + 1; if(k = c) then begin k := 0; writeln(); if(f) then c := c + 1 else c := c - 1; end; if(c > M) then begin f := false; c := c - 2; end else if(c = 1) then f := true else if(c < 1) then // на случай если высота елки 2 c := 2; end; readln(); end.vedro-compota
Sun, 09/05/2021 - 13:13
Permalink
попытать переписать блок:
попытать переписать блок:
перенеся его внутрь блока:
_____________
матфак вгу и остальная классика =)
jl8qy9kd_pro
Mon, 09/06/2021 - 16:09
Permalink
RE
var N, M, i ,c ,k :integer; f: boolean; begin writeln('vvedi massu elki N '); readln(N); writeln('vvedi shiriny M '); readln(M); k := 0; c := 1; f := true; for i := 1 to N do begin write(i, ' '); k := k + 1; if(k = c) then begin k := 0; writeln(); if(c = M) then f := false else if (c = 1) then f := true ; if(f) then c := c + 1 else c := c - 1; end; end; readln(); end.vedro-compota
Wed, 09/08/2021 - 19:56
Permalink
решение засчитано
решение засчитано
_____________
матфак вгу и остальная классика =)