Читаем О чём не пишут в книгах по Delphi полностью

function Func(const FuncName, S: string; var Integer): Extended;

var

 Arg: Extended;

begin

 // Вычисляем аргумент

 Arg:= Expr(S, P);

 // Сравниваем имя функции с одним из допустимых

 if AnsiCompareText(FuncName, 'sin') = 0 then

Result:= Sin(Arg)

 else if AnsiCompareText(FuncName, 'соs') = 0 then

Result:= Cos(Arg)

 else if AnsiCompareText(FuncName, 'ln') = 0 then

Result:= Ln(Arg)

 else

raise ESyntaxError.Create('Неизвестная функция ' + FuncName);

end;

// Выделение из строки идентификатора и определение,

// является ли он переменной или функцией

function Identifier(const S: string: var P: Integer): Extended;

var

 InitP: Integer;

 IDStr, VarValue: string;

begin

 // Запоминаем начало идентификатора

 InitP:= P;

 // Первый символ был проверен ещё в функции Base.

 // Сразу переходим к следующему

 Inc(P);

 while (P <= Length(S)) and

(S[P] in ('A'..'Z', 'a'..'z', '_', '0'..'9']) do

Inc(P);

 // Выделяем идентификатор из строки

 IDStr:= Copy(S, InitP, P — InitP);

 // Если за ним стоит открываемая скобка — это функция

 if (Р <= Length(S)) and (S[P) — '(' then

 begin

 Inc(P);

Result:= Func(IDStr, S, P);

 // Проверяем, что скобка закрыта

 if (Р > Length(S)) or (S[P] <> ')') then

 raise ESyntaxError.Create(

'Ожидается ")" в позиции ' + IntToStr(P));

 Inc(P);

 end

 // если скобки нет — переменная

 else

 begin

VarValue:= Form1.ListBoxVars.Items.Values[IDStr];

 if VarValue = '' then

 raise ESyntaxError.Create(

'Необъявленная переменная ' + IDStr +

 ' в позиции ' + IntToStr(P))

elsе Result:= StrToFloat(VarValue);

 end;

end;

// Выделение подстроки, соответствующей ,

// и ее вычисление

function Base(const S: string; var P: Integer): Extended;

begin

 if P > Length(S) then

raise ESyntaxError.Create('Неожиданный конец строки');

 // По первому символу подстроки определяем,

 // какое это основание

 case S[P] of

 '(': // выражение в скобках

 begin

 Inc(Р);

Result:= Expr(S, Р);

// Проверяем, что скобка закрыта

 if (Р > Length(S)) or (S[P) <> ')') then

 raise ESyntaxError.Create(

'Ожидается ")" в позиции ' + IntToStr(Р));

 Inc(Р);

 end;

'0'..'9': // Числовая константа

Result:= Number(S, P);

 'A'..'Z', 'a'..'z', '_': // Идентификатор (переменная или функция)

Result:= Identifier(S, P);

 else

raise ESyntaxError.Create(

'Некорректный символ в позиции ' + IntToStr(Р));

 end;

end;

// Выделение подстроки, соответствующей ,

// и ее вычисление

function Factor(const S: string; var P: Integer): Extended;

begin

 if P > Length(S) then

raise ESyntaxError.Create('Неожиданный конец строки');

 // По первому символу подстроки определяем,

 // какой это множитель

 case S[P] of

 '+'; // унарный "+"

 begin

 Inc(Р);

Result:= Factor(S, P);

 end;

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных