Входной файл содержит выражение которое состоит только из цифр и знаков +, - и *. В...

0 голосов
38 просмотров

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


image

Информатика (50 баллов) | 38 просмотров
Дан 1 ответ
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 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.
Скачать вложение Текст (TXT)
Скачать вложение Текст (TXT)
(2.5k баллов)
0

Условие if not((B[i]= '*') or (B[i]='/')) then в данном случае можно уже не проверять

0

Это был Ваш ответ?

0

Я изменил решение

0

И теперь все правильно считает?

0

На предложенном вами тесте да

0

-5+2-4*2 возвращает 7...

0

вот что значит алгоритм, склеенный на коленке)))

0

используйте классику: разбор строки в обратную польскую запись

0

Добавил костыль

0

Проверили на унарный минус, работает?