PascalABC. Даны подпрограмма для работы со стэками, нужно дописать основное тело и заставить работать.
const maxlength =100;
type elementtype = integer;
stack = record
elements : array[1..maxlength] of elementtype;
top: integer
end;
var rs: stack;
procedure Push( x:elementtype; var S:stack);
begin
with S do
if top =1 then begin writeln(‘Стек полон’); Exit end
else begin
top:=top-1;
elements[top]:=x
end
end;
задание из документа для неё звучит как "В качестве отладки программы заполним стек десятью нечетными числами, начиная с единицы"
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!
begin
var w:=ReadlnString.ToWords;
var St:=new Stack <integer>;
var r:=0;
foreach var t in w do
if t[1].IsDigit then St.Push(t.ToInteger)
else begin
var a:=St.Pop;
var b:=St.Pop;
case t[1] of
'+':St.Push(a+b);
'-':St.Push(b-a);
'*':St.Push(a*b)
end;
end;
Writeln(St.Pop)
end.
Контрольный пример
8 9 + 1 7 - *
-102
2. Задача крайне просто решается при регулярного выражения с рекурсией. Фактически вводить количество шаров не нужно, поэтому после ввода оно отбрасывается.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!
begin
Writeln(ReadlnString.ToWords.Skip(1).JoinIntoString('').
MatchValue('(.)\1{2,}').Length);
end.
Контрольный пример
5 2 3 3 3 1
3
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!
begin
var w:=ReadlnString.ToWords;
var St:=new Stack <integer>;
var r:=0;
foreach var t in w do
if t[1].IsDigit then St.Push(t.ToInteger)
else begin
var a:=St.Pop;
var b:=St.Pop;
case t[1] of
'+':St.Push(a+b);
'-':St.Push(b-a);
'*':St.Push(a*b)
end;
end;
Writeln(St.Pop)
end.
Контрольный пример
8 9 + 1 7 - *
-102
2. Задача крайне просто решается при регулярного выражения с рекурсией. Фактически вводить количество шаров не нужно, поэтому после ввода оно отбрасывается.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!
begin
Writeln(ReadlnString.ToWords.Skip(1).JoinIntoString('').
MatchValue('(.)\1{2,}').Length);
end.
Контрольный пример
5 2 3 3 3 1
3