Урок 18. Задача 8.

Урок 18. Задача 8.

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

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

type arrI = array[1..10] of integer;
type arrC = array[1..4] of char;
var  s :string;
     i, ind :integer;
     arI :arrI;
     arC :arrC;

function issdigit(s :string) :boolean;
var fl :boolean;
begin
  if (s >= '0') and (s <= '9') then
      fl := true
    else
      fl := false;
  issdigit := fl;
end;

function get_int_array(s :string; arI :arrI) :arrI;
var i, j, n :integer;
    s_i :string;
begin
  j := 1;
  for i := 1 to high(arI) do
    if issdigit(s[i]) then
      s_i := s_i + s[i]
    else
    begin
      val(s_i, n);
      arI[j] := n;
      j := j + 1;
      s_i := '';
    end;
  get_int_array := arI;
end;

function get_char_index(s_char :char; arC :arrC) :integer;
var i :integer;
begin
  for i := 1 to high(arC) do
    if s_char = arC[i] then
      get_char_index := i;
end;

function get_string(s :string) :string;
var i :integer;
    s_2 :string;
begin
  for i := 1 to length(s) do
    if s[i] <> ' ' then
      s_2 := s_2 + s[i];
  get_string := s_2;
end;

begin
  for i := 1 to high(arC) do // массив символов
    arC[i] := '+-*/'[i];
  s := '16 +  3';
  s := get_string(s);  // убираю пробелы из строки
  arI := get_int_array(s, arI); // массив чисел
  for i := 1 to length(s) do
    if not issdigit(s[i]) then
      ind := get_char_index(s[i], arC); // получаю оператор

  if ind = 1 then
    writeln(arI[1] + arI[2])
  else
    writeln(arI[1] - arI[2]);
  readln();
end.  
vedro-compota's picture

засчитано

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