Case в Pascal

Я создаю калькулятор. При нажатии, к примеру +, переменной operation присваивается значение ‘+’. operation :string; Дак вот:

 case operation[1] of
            '+': a := a + real.Parse(databox.Text);
            '-': a := a - real.Parse(databox.Text);
            '*': a := a * real.Parse(databox.Text);
            '/': a := a / real.Parse(databox.Text);
        end;

Почему, если после operation убрать [1], выводит ошибку

“Нельзя преобразовать тип char к string”

А если [1] оставить(Как в коде), то все работает нормально. Что дает эта [1] и как это вообще работает?

Проблема в том, что у Вас в case использована переменная типа string, а в качестве меток выступают константы типа char. [1] выделяет из строки первый символ и проблемы нет.

Другой вариант:

case operation of
  string('+') : …
  string('-') : …
…
end;

Хотя, вот такой вариант лучше:

{$reference System.Data.dll}
uses System.Data;
begin
  with new DataTable() do Write(Compute(ReadString, ''));
end.
1 лайк

О, спасибо - еще один способ вычислять выражения ломом :slight_smile: Тогда лучше так:

{$reference System.Data.dll}
uses System.Data;
begin
  Print(DataTable.Create.Compute(ReadString, ''));
end.

Можно немного сократить, так тоже работает:

begin
  Print(System.Data.DataTable.Create.Compute(ReadString, ''));
end.