Дана строка символов содержащая текст и арифметические выражения вида 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
Не нашли ответ?
Ответить на вопрос
Похожие вопросы