Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.05.2009, 13:30
Vohakisa Vohakisa вне форума
Прохожий
 
Регистрация: 11.05.2009
Сообщения: 1
Репутация: 10
Вопрос Нужна помощь

Вопрос возможно и нубский, но немогу сделать.

У меня программа, которая считает функцию, но заранее я незнаю, какая именно функция будет использована в программе, тоесть саму функцию я вводю в Edit. Например:
Edit1.Text:='(x+1)/2*x';
Как мне сделать, что бы (x+1)/2*x передало допустим в переменную S типа real, и поcтитало значение S.

Приведу пример:
Я имею на форме Edit1, Edit2 и Label1, ввожу в Edit1 некую функцию y(x), а в Edit2 значение переменной "х". В Label1 мне должно вывести значение функции y(x).
Ответить с цитированием
  #2  
Старый 14.05.2009, 21:26
Аватар для PESTS
PESTS PESTS вне форума
Новичок
 
Регистрация: 04.05.2008
Сообщения: 54
Репутация: 11
По умолчанию

Так просто не сделаешь нужна писать парсер!
Вот готовая:
Код:
function Calculate(SMyExpression: string; digits: Byte): string;

  // Calculate a simple expression 

// Supported are:  Real Numbers, parenthesis 

var

  z: Char;

  ipos: Integer;

 

  function StrToReal(chaine: string): Real;

  var

    r: Real;

    Pos: Integer;

  begin

    Val(chaine, r, Pos);

    if Pos > 0 then Val(Copy(chaine, 1, Pos - 1), r, Pos);

    Result := r;

  end;

 

  function RealToStr(inreal: Extended; digits: Byte): string;

  var

    S: string;

  begin

    Str(inreal: 0: digits, S);

    realToStr := S;

  end;

 

  procedure NextChar;

  var

    s: string;

  begin

    if ipos > Length(SMyExpression) then

    begin

      z := #9;

      Exit;

    end

    else

    begin

      s := Copy(SMyExpression, ipos, 1);

      z := s[1];

      Inc(ipos);

    end;

    if z = ' ' then nextchar;

  end;

 

  function Expression: Real;

  var

    w: Real;

 

    function Factor: Real;

    var

      ws: string;

    begin

      Nextchar;

      if z in ['0'..'9'] then

      begin

        ws := '';

        repeat

          ws := ws + z;

          nextchar

        until not (z in ['0'..'9', '.']);

        Factor := StrToReal(ws);

      end

      else if z = '(' then

      begin

        Factor := Expression;

        nextchar

      end

      else if z = '+' then Factor := +Factor

      else if Z = '-' then Factor := -Factor;

    end;

 

    function Term: Real;

    var

      W: Real;

    begin

      W := Factor;

      while Z in ['*', '/'] do

        if z = '*' then w := w * Factor

      else

        w := w / Factor;

      Term := w;

    end;

  begin

    w := term;

    while z in ['+', '-'] do

      if z = '+' then w := w + term

    else

      w := w - term;

    Expression := w;

  end;

begin

  ipos   := 1;

  Result := RealToStr(Expression, digits);

end;
__________________
Маленький мальчик пришёл на систопку
Линукс отстой крикнул он громко
Долго пинали мёртвое тело
Не кто вступился, били за дело

Последний раз редактировалось PESTS, 14.05.2009 в 21:29.
Ответить с цитированием
  #3  
Старый 14.05.2009, 21:30
Аватар для PESTS
PESTS PESTS вне форума
Новичок
 
Регистрация: 04.05.2008
Сообщения: 54
Репутация: 11
По умолчанию

showmessage(Calculate('(x+1)/2*x', 3));
__________________
Маленький мальчик пришёл на систопку
Линукс отстой крикнул он громко
Долго пинали мёртвое тело
Не кто вступился, били за дело
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:06.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter