Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 02.11.2009, 13:44   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Можно ли как-нибудь загнать текст "x+3" в функцию?

Т.е. что б получилась функция от х
Код:
function f(x:integer):integer;
begin
 result:=x+3;
end;
Парсер вроде не такая уж проблема как программное создание функции)
TwiX вне форума
Старый 02.11.2009, 13:46   #2
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию

Так и создавайте парсер, в чем проблема?
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума
Старый 02.11.2009, 13:55   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Проблема во времени) Например что бы построить график от функции f(x:integer):integer, нужно в десятки раз меньше времени чем, строить его, вызывая для каждой точки парсер =\
TwiX вне форума
Старый 02.11.2009, 13:59   #4
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию

А функцию, в конечном итоге, не для каждой точки будете вызывать?
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума
Старый 02.11.2009, 14:06   #5
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

в функции будет считаться только выражение, а в парсере, параллельно создаваться само выражение.
TwiX вне форума
Старый 02.11.2009, 14:39   #6
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Написал простенький парсер - как я и говорил. Что бы пройти парсеру от 0 до 1000000 потребовалось 2090 мс, а функции - 0 мс =)
TwiX вне форума
Старый 02.11.2009, 16:28   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

таких тем уже тысячи наверно.
есть много компонентов для выполнения строки..

Цитата:
Написал простенький парсер - как я и говорил. Что бы пройти парсеру от 0 до 1000000 потребовалось 2090 мс, а функции - 0 мс =)
покажи свой парсер, посмотрим что ты там наворотил=)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 02.11.2009, 17:15   #8
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Вот) Пятиминутный, совсем бональный (знает только цифры и + - ):
Код:
function tform1.pars(s: string; x: Integer):integer;
var
  i,tmp, op,res:Integer;
begin
  res:=0;
  i:=1;
  op:=0;
  while i<=length(s) do
  begin
    tmp:=-999;
    case s[i] of
      '+': op:=0;
      '-': op:=1;
      '0'..'9': tmp:=StrToInt(s[i]);
      'x': tmp:=x;
    end;
    if tmp<>-999 then
    begin
      if op=0 then
        res:=res+tmp
      else
        res:=res-tmp;
    end;
    inc(i);
  end;
  Result:=res;
end;
В принципе может кому-нибудь пригодится=)

Добавлено:
В принципе, вот вся прога (в button2click меняем f(x) на pars и видим разницу во времени):
Код:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    function f(x:integer):integer;
    function pars(s:string; x:integer):integer;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit3.Text:=IntToStr(pars(edit1.Text, strtoint(edit2.Text)));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  x:integer;
  t1,t2:Cardinal;
begin
  t1:=GetTickCount;
  for x := 0 to 1000000 do
  begin
    f(x);
    //pars(Edit1.Text, x);
  end;
  t2:=GetTickCount;
  Label1.Caption:='Time used: '+IntToStr(t2-t1);
end;

function tform1.pars(s: string; x: Integer):integer;
var
  i,tmp, op,res:Integer;
begin
  res:=0;
  i:=1;
  op:=0;
  while i<=length(s) do
  begin
    tmp:=-999;
    case s[i] of
      '+': op:=0;
      '-': op:=1;
      '0'..'9': tmp:=StrToInt(s[i]);
      'x': tmp:=x;
    end;
    if tmp<>-999 then
    begin
      if op=0 then
        res:=res+tmp
      else
        res:=res-tmp;
    end;
    inc(i);
  end;
  Result:=res;
end;

function tform1.f(x: Integer):integer;
begin
  Result:=x+3;
end;
end.

Последний раз редактировалось TwiX; 02.11.2009 в 17:20.
TwiX вне форума
Старый 02.11.2009, 17:59   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
function PpPars(S:String;x:integer):integer;
type TOperation=(opMinus,opPlus);
var i:integer;
    t:integer;
    Operation:TOperation;
function Add(OP:TOperation;Res,x:integer):integer;
begin
 case OP of
  opMinus:Result:=Res-x;
  opPlus:Result:=Res+x;
  else Result:=Res;
 end;
end;
begin
 i:=1;
 Operation:=opPlus;
 t:=0;
 Result:=0;
 while i<=Length(s) do
  begin
   case s[i] of
    '-':begin
         Result:=Add(Operation,Result,t);
         Operation:=opMinus;
         t:=0;
        end;
    '+':begin
         Result:=Add(Operation,Result,t);
         Operation:=opPlus;
         t:=0;
        end;
    '0'..'9':t:=(t*10)+StrToInt(s[i]);
    'x','X':t:=x;
   end;
   inc(i);
  end;
 Result:=Add(Operation,Result,t);
end;
вот посмотри мой вариант
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 02.11.2009, 18:08   #10
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Разве не то же самое?)
Я писал это только, что бы убедится в разнице во времени =\
Так всё-таки можно ли создать программно функцию?
TwiX вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно заменять "запятая" на "Enter" Silent-cry Microsoft Office Word 4 26.01.2018 12:03
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Как можно разбить "exe" файл для распечатки? Ninzjacont Помощь студентам 2 04.06.2009 15:12
Можно ли как нибудь работать с портом "напрямую" - например, подать напряжение на pin итд Истребитель Помощь студентам 2 02.12.2008 16:30