profile
Опубликовано 6 лет назад по предмету Информатика от sannnserrrIsIsSander

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

  1. Ответ
    Ответ дан PatifonKakao

    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.
    1. Ответ
      Ответ дан Аккаунт удален
      -5+2-4*2 возвращает 7...
    2. Ответ
      Ответ дан Аккаунт удален
      вот что значит алгоритм, склеенный на коленке)))
    3. Ответ
      Ответ дан Аккаунт удален
      используйте классику: разбор строки в обратную польскую запись
    4. Ответ
      Ответ дан PatifonKakao
      Добавил костыль
    5. Ответ
      Ответ дан Аккаунт удален
      Проверили на унарный минус, работает?
Самые новые вопросы