@Alertoso

Как можно модифицировать этот код до целых чисел?

Как сделать, чтобы ещё можно было и целые числа вводить(то есть 55+22, например)
program Project2;

{$APPTYPE CONSOLE}

function LenExpression(S:String):integer;
var len:integer;
begin
 if length(S)<=0 then Result:=0
 else
  case s[length(S)] of
   ')':
    begin
     delete(S,length(S),1);
     len:=LenExpression(S);
     delete(S,length(S)-len+1,len);
     Result:=len+LenExpression(S)+1;
    end;
   '(': Result:=1
   else
    begin
     delete(S,length(S),1);
     Result:=1+LenExpression(S);
    end;
  end;
end;
 
function Expression(S:String):integer;
var
 Res,len:integer;
begin
 Res:=0;
 if length(S)>0 then
  begin
   case s[length(S)] of
    ')': begin
          delete(S,length(S),1);
          len:=LenExpression(S);
          Res:=Expression(S);
          delete(S,length(S)-len+1,len);
         end;
    '0'..'9': begin
               Res:=(ord(S[length(S)])-48);
               writeln(Res);
               delete(S,length(S),1);
              end;
   end;
   if length(S)>0 then
    Case s[length(S)] of
     '-': begin
           delete(S,length(S),1);
           Result:=Expression(S)-Res;
          end;
     '+': begin
           delete(S,length(S),1);
           Result:=Expression(S)+Res;
          end;
     '*': begin
           delete(S,length(S),1);
           Result:=Expression(S)*Res;
          end;
     '(': Result:=Res;
    end
   else Result:=Res;
  end
  else Writeln('!!error!!');
end;
 
var
 S:String;
begin
 Write('S: ');
 Readln(S);
 Writeln('Exp: ',Expression(S));
 readln;
end.
  • Вопрос задан
  • 58 просмотров
Пригласить эксперта
Ответы на вопрос 1
@C0COK
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

function LenExpression(S: string): integer;
var
  len: integer;
begin
  if length(S) <= 0 then
    Result := 0
  else
    case S[length(S)] of
      ')':
        begin
          delete(S, length(S), 1);
          len := LenExpression(S);
          delete(S, length(S) - len + 1, len);
          Result := len + LenExpression(S) + 1;
        end;
      '(':
        Result := 1     else
      begin
        delete(S, length(S), 1);
        Result := 1 + LenExpression(S);
      end;
    end;
end;

function Expression(S: string): integer;
var
  i: Integer;
  str_value: string;
  value: Integer;
  value2: Integer;
  exp: string;
begin
  value := -1;
  value2 := -1;
  result := -1;
  if length(S) > 0 then
  begin
    for i := 1 to length(S) do
    begin

      if S[i] in ['0'..'9'] then
      begin
        str_value := str_value + S[i];
      end;

      if (S[i] in ['-', '+', '*']) then
      begin
        exp := S[i];
        value := str_value.ToInteger();
        str_value := '';
      end;

      if i = Length(S) then
      begin
        value2 := str_value.ToInteger();
        str_value := '';
      end;

    end;

    if exp = '-' then
      result := value - value2;
    if exp = '+' then
      result := value + value2;
    if exp = '*' then
      result := value * value2;
    if exp = '' then
    begin
      Writeln('!!error!!');
      Result := -1;
    end;
  end
  else
    Writeln('!!error!!');
end;

var
  S: string;

begin
  while true do
  begin
    Write('Value s: ');
    Readln(S);
    Writeln('Exp: ' + s + ' = ' + Expression(S).ToString);

  end;
end.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
05 нояб. 2024, в 19:14
100000 руб./за проект
05 нояб. 2024, в 19:07
12000 руб./за проект
05 нояб. 2024, в 17:38
150000 руб./за проект