• Входной файл содержит выражение которое состоит только из цифр и знаков +, - и *. В выражении цифры и знаки чередуются. Дано одно длинное арифметическое выражение и Вам нужно его вычислить, соблюдая при этом порядок действий.
    Формат входного файла
    Дано одно длинное арифметическое выражение
    Формат выходного файла
    Решения выражении
    Примеры

    question img

Ответы 6

  • -5+2-4*2 возвращает 7...
  • вот что значит алгоритм, склеенный на коленке)))
  • используйте классику: разбор строки в обратную польскую запись
    • Автор:

      chubszfua
    • 5 лет назад
    • 0
  • Добавил костыль
  • Проверили на унарный минус, работает?
    • Автор:

      monica
    • 5 лет назад
    • 0
  • var i,l,k,n,p:integer; s:string; Z: set of char; A: array[1..100] of real; B: array[1..100] of char; R,Buf:real; function F(A:real; Z:char; B:real):real;  begin   case Z of    '+': result:=A+B;    '-': result:=A-B;    '*': result:=A*B;    '/': result:=A/B;    end;  end;begin Assign(input,'input.txt'); Assign(output,'output.txt'); Reset(input); Rewrite(output); Readln(S); close(input); L:=length(s); k:=0; n:=0; Z:=['+','-','*','/']; for i:=1 to L do  if not(S[i] in Z) then begin   inc(k);   A[k]:=StrToInt(S[i]);  end   else begin    inc(n);    B[n]:=S[i];   end;if (S[1] in Z) then     begin           if s[1]='-' then A[1]:=A[1]*(-1);     for i:=1 to n do       b[i]:=b[i+1];     dec(n);    end;  i:=0; While (i<n) do begin  inc(i);  if ((B[i]= '*') or (B[i]='/')) then  begin   buf:=F(A[i],B[i],A[i+1]);   A[i]:=buf;   for p:=i+1 to k do    A[p]:=A[p+1];      for p:=i to n do    B[p]:=B[p+1];   dec(n);   dec(i);  end; end; R:=A[1]; for i:=1 to n do if not((B[i]= '*') or (B[i]='/')) then   R:=F(R,B[i],A[i+1]); writeln(R); Close(output); end.
    answer img
    • Автор:

      ty59
    • 5 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years