Дана строка символов содержащая текст и арифметические выражения вида a®b, где ®-один из знаков +,-,*,/. Выписать все арифметические выражения и вычислить их значения
Дана строка символов содержащая текст и арифметические выражения вида a®b, где ®-один из знаков +,-,*,/. Выписать все арифметические выражения и вычислить их значения
Ответ(ы) на вопрос:
Гость
Программа работает при условии, что a и b не в скобках, и вещественные числа написаны с точкой, а не с запятой.
Код PascalABC.NET 3.2, сборка 1407 (19.03.2017):
Var
S,S1,S2:string;
a,b:real;
i,j:integer;
Begin
Write('Введите текст: ');
ReadLn(S);
S:=' '+S+' ';
For i:= 2 to Length(S)-1 do
Begin
S1:='';
S2:='';
if (S[i] = '+')or(S[i] = '-')or(S[i] = '*')or(S[i] = '/') then
if (S[i-1]in['0'..'9'])and(S[i+1]in['0'..'9']) then
Begin
For j:= i-1 downto 2 do
Case S[j] of
'0'..'9','.':S1:=S[j]+S1;
'+','-':
Begin
S1:=S1+S[j];
Break;
End;
else Break;
End;
For j:= i+1 to Length(S)-1 do
Case S[j] of
'0'..'9','.':S2:=S2+S[j];
'+','-':
Begin
S2:=S2+S[j];
Break;
End;
else Break;
End;
a:=StrToFloat(S1);
b:=StrToFloat(S2);
S1:=S1+S[i];
if S2[1] = '-' then S2:='('+S2+')';
S1:=S1+S2;
Case S[i] of
'+':WriteLn(S1+'=',a+b);
'-':WriteLn(S1+'=',a-b);
'*':WriteLn(S1+'=',a*b);
'/':WriteLn(S1+'=',a/b);
End;
End;
End;
End.
Пример:
Введите текст: jhdkjfsgbjsf 2+4sdfgsfd 39.8*178.78dghfg
2+4=6
39.8*178.78=7115.444
Гость
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!
begin
var s:=ReadlnString('Вводите:');
var m:=s.Matches('(\-{0,1}\d+(\.\d+){0,1}[\+\-\*\\]\d+(\.\d+){0,1})');
foreach var e in m do begin
var t:=e.Value;
Write(t,'=');
var op:=t.MatchValue('[\+\-\*\\]');
var i:=Pos(op,t);
var a:=t[:i].ToReal;
var b:=t[i+1:].ToReal;
case op[1] of
'+':Writeln(a+b);
'-':Writeln(a-b);
'*':Writeln(a*b);
'/':Writeln(a/b)
end
end
end.
Пример
Вводите: jhdkjfsgbj sf5+4sdfgs fd39.8*178.78dghfg
5+4=9
39.8*178.78=7115.444
Не нашли ответ?
Похожие вопросы