Задача 7 урок 17

Задача 7 урок 17

На вход вашей программы подается строка вида:

<целоечисло><произвольное число пробелов> <арифм.операция> <произвольное число пробелов> <целоечисло>

например:

1 +  3

или

2 - 12

Напишите программу, которая разбирает вычисляет результат этого приложения (сделайте поддержку операций сложения и вычитания).

var x, y: integer;
    s, w: string;

procedure getData(str: string; var n, m: integer; var z: string);
var i, y, T, Code: integer; a: string;
begin
  y:=1; //индекс вводимого числа
  for i:=1 to length(s) do
    begin
      if ((str[i]>='0')and(str[i]<='9')) AND (y=1) then  //если число
        a:=a+str[i]
      else if (str[i]=' ') AND (y=1) then //после первого пробела
        begin
          Val(a, T, Code);
          n:=T;
          a:='';
          inc(y);
        end
      else if (str[i]='+') OR (str[i]='-') then
        z:= str[i]
      else if ((str[i]>='0')and(str[i]<='9')) AND (y=2) then
        a:=a+str[i];
        if i=length(str) then   //после последнего символа
        begin
          Val(a, T, Code);
          m := T;
        end;
    end;
end;

begin
  writeln('Vvedite stroku vida: chislo/n*probel/+ OR -/n*probel/chislo');
  readln(s);
  getData(s, x, y, w);
  if w='+' then
    writeln('summa = ',x+y)
  else
    writeln('raznost = ',x-y);
  readln();
end.
vedro-compota's picture

(str[i]>='0')and(str[i]

-- постараться уйти от дублирования

_____________
матфак вгу и остальная классика =)

var x, y: integer;
    s, w: string;
 
procedure getData(str: string; var n, m: integer; var z: string);
var i, y, T, Code: integer; a: string;
begin
  y:=1; //индекс вводимого числа
  for i:=1 to length(s) do
    begin
      if ((str[i]>='0')and(str[i]<='9')) then  //если число
        a:=a+str[i]
      else if (str[i]=' ') then //после первого пробела
        begin
          Val(a, T, Code);
          n:=T;
          a:='';
          inc(y);
        end
      else if (str[i]='+') OR (str[i]='-') then
        z:= str[i];
      if i=length(str) then   //после последнего символа
        begin
          Val(a, T, Code);
          m := T;
        end;
    end;
end;
 
begin
  writeln('Vvedite stroku vida: chislo/n*probel/+ OR -/n*probel/chislo');
  readln(s);
  getData(s, x, y, w);
  if w='+' then
    writeln('summa = ',x+y)
  else
    writeln('raznost = ',x-y);
  readln();
end.
vedro-compota's picture

решение засчитано

_____________
матфак вгу и остальная классика =)