Решить в среде pascal: 1) написать простенький калькулятор через ввод строки, который на входе получает строку вида "число1 знак операции число2" (например, "2 + 5" или "3 / 42"), а выводит значение этого выражения. числа - любые целые неотрицательные, знаки - +. -. *, / 2) написать программу, которая на входе получает строку под кодовым названием "загрязненное число" (вида "4km-549_ffb)5)6") состоящую из символов, а на выходе выводит удвоенное число из изначальной строки (а именно, 454956*2 = 909912)
uses
System.Text.RegularExpressions;
begin
var s:=' - 32 / - 21 ';
s:=RegEx.Replace(s,'\s','');
var a:=RegEx.Matches(s,'(-{0,1}\d+)|[\+\-\*/]');
var n:=a.Count;
var x,y:integer;
var c:char;
case n of
3:begin
x:=StrToInt(a[0].ToString); y:=StrToInt(a[2].ToString);
c:=a[1].ToString[1]
end;
2:begin
x:=StrToInt(a[0].ToString); var s1:=a[1].ToString;
c:=s1[1]; s1[1]:='0'; y:=StrToInt(s1)
end;
else
begin Writeln('Недопустимое выражение'); exit end
end;
WriteFormat('{0} {1} {2} = ',x,c,y);
case c of
'+':Writeln(x+y);
'-':Writeln(x-y);
'*':Writeln(x*y);
'/':Writeln(x/y)
end
end.
Тестовое решение:
-32 / -21 = 1.52380952380952
// PascalABC.NET 3.0, сборка 1128
begin
var s:='4km-549_ffb)5)6';
var t:=s.Where(x->x in ['0'..'9']).JoinIntoString('');
var n:int64;
if TryStrToInt64(t,n) then Writeln(2*n)
else Writeln('Не удалось выделить число')
end.
Тестовое решение:
909912