IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

3 страниц V  1 2 3 >  
 Ответить  Открыть новую тему 
> компиляция Exe-шника
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской
Реальное имя: Георгий

Репутация: -  0  +


добрый день!
возможно ли такое:
1) имеется исходник кода, необходимо чтобы при его открытии он сам компилировался (не нажимая F9) (ВАЖНО чтобы он проверял TPU файлы привазаные к нему!!!!).
2) если сохранить этот файл в exe то при его запуске он компилировался и запускался (ВАЖНО чтобы он проверял TPU файлы привазаные к нему!!!!).


blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






И зачем это тебе, можно уточнить? Саму задачу озвучь, возможно она решается более стандартными средствами.

Потому как для решения того, что ты написал, надо как минимум знать, ЧЕМ будет открываться исходник... Вот я, например, открываю SciTE-ом, хоть занажимайся F9 - ничего не будет компилироваться. Хотя нажатие на другую клавишу (или выбор пункта меню) прекрасно компилирует/билдит программу...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской
Реальное имя: Георгий

Репутация: -  0  +


в общем я написал программу для построения графиков. ввод ф-ии осуществляется непосредственно в исходнике, я хочу скрыть код программы, для этого я создал модуль usONE.pas в котором написал ф-ию в которой будет написана ф-ия, создал 2ой модуль usWTO.pas в котором скрыты основные процедуры и ф-ии, он будет откомпилирован паскалем в TPU файл, после чего исходник удалю, также осталась часть программы от Begin до end. в которой происходит вызов всех процедур и 2х модулей.
Планирую написать программу загрузчик которая выполняет: 1) маленькую программу для изменения ф-ии в usONE.pas пользователь вводит ф-ию в формат string после чего она как текстовый файл сохрананяется в usONE.pas 2) после чего программа загрузчик после завершения работы маленькой программы должна открывать программу которая, как раз, и должна компилироваться сама в начале (тем самым она обновляет usONE.pas в котором будет уже написана новая информация о ф-ии) желательно сама запускаться и строить график. тобишь

1) пользователь запускает файл
2) открывается прога 1 которая просит ввести ф-ию, после ввода записывает ф-ию в usONE.pas закрывается и запускает
3) прогу 2 которая читает TPU с веденой в него ф-ей, сама запускается и строит график

Сообщение отредактировано: Георгий -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Не мучайся... Напиши парсер, который позволит вычислять значение функции, заданной строкой. То есть, пользователь вводит функцию в строку, и твой парсер вычисляет значение этой функции (что-то подобное на форуме выкладывалось, см. в поиске по ключевому слову "интерпретатор"). Тогда не понадобится ничего "скрывать", достаточно будет только TPU-файла, в котором будут необходимые средства для вычисления значения функции.

"Скрывать" - в кавычках. Потому, что это не сокрытие. Кому надо - все равно сломает, а себе ты наживешь проблемы.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской
Реальное имя: Георгий

Репутация: -  0  +


я нашел интерпретатор http://pascal.sources.ru/parsing/swexpr.htm он находится в модуле, как подключить этот модуль то?
вот имеется строка и как ее прогнать через этот модуль то??

Сообщение отредактировано: Георгий -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
мб есть OBJECTS.TPU?
Есть. По крайней мере, должен быть, в папке TP\UNITS. Если у тебя появляется такая ошибка, значит, версия компилятора, на которой создан этот самый Objects.TPU, не совпадает с той версией, которая используется тобой для компиляции проекта (как пример - файл OBJECTS.TPU из пакета TP7 и использование TP6 для компиляции программы выдаст тебе именно такую ошибку).

Проверил программу по ссылке. За исключением того, что Integer надо заменить на LongInt, у компилятора (TP 7.0) больше нет никаких претензий. Скачай себе нормальный дистрибутив Паскаля, установи, и у тебя ошибка тоже пропадет...

Цитата
вот имеется строка и как ее прогнать через этот модуль то??
Там есть пример использования - программа INT.PAS
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской
Реальное имя: Георгий

Репутация: -  0  +


модуль стал нормально компилироваться

млин не пруха mad.gif
пример не работает

вылазит ошибка Type mismatch на GetVariable:=GetX;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Ты сообщения мои вообще читаешь? Я же написал:
Цитата
За исключением того, что Integer надо заменить на LongInt
, ну так замени:

{$F+}
Function GetX(Code:LongInt):Real; { <--- Изменить }
begin
GetX:=X;
end;
{$F-}
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской
Реальное имя: Георгий

Репутация: -  0  +


млин я не могу понять пример, я понимаю только где происходит ввод ф-ии а где выводится значение ф-ии не могу понять.
вот скажем прога:



program Integrator;
uses swexpr;
var X,Y,Fxy:Real;
F,Code:String;
i,n:integer;

{$F+}

Function GetX(Code:longint):Real;
begin
GetX:=X;
end;

Function GetY(Code:longint):Real;
begin
GetY:=Y;
end;

{$F-}


begin

AddVariable('X',1);
GetVariable:=GetX;

AddVariable('Y',2);
GetVariable:=GetY;

repeat
Writeln('введите ф-ию с использованеим x и y '); {надо ввести к примеруsad.gifF=x+y) }
Write('f(X,Y)=');
Readln(F);
if F='' then halt;
Code:=CompileExpression(F);
until not CompileError;



Fxy:=InterpreteExpression(Code);

end.



так шоли?
чтобы ввести x и y надо:

AddVariable('X',1);
GetVariable:=GetX;

AddVariable('Y',2);
GetVariable:=GetY;

при таком раскладе он читает только y ((( тобишь считает x за y

что нужно исправить чтобы он читал и x и y ??

Сообщение отредактировано: Георгий -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской
Реальное имя: Георгий

Репутация: -  0  +


Please help!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Попробуй вот так:
{$F+}
Function GetXY(Code:LongInt):Real;
begin
Case Code of
1: GetXY := X;
2: GetXY := Y;
end;
end;
{$F-}

...
AddVariable('X',1);
AddVariable('Y',2);
GetVariable:=GetXY;
...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской
Реальное имя: Георгий

Репутация: -  0  +


АААААААААААААААААААААААААААААААААААААААА
ААААААААААА give_rose.gif give_rose.gif give_rose.gif give_rose.gif give_rose.gif give_rose.gif give_rose.gif
СПАСИБА!! yes2.gif good.gif
очень классно!!! все работает!!! не представляешь как помог!

Добавлено через 1 мин.
давай кошелек webmoney положу 50wmr smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской
Реальное имя: Георгий

Репутация: -  0  +


млин опять ничего не работает mega_chok.gif

короче у меня есть ф-ия "BBog_xy" в которую вводится значения x y и по сути она должна вставлять их в введеную ф-ию и выводить ответ
вот тут то и возникла проблема. к ней идет 100500 запросов а прогонять 100500 раз модуль не возможно.

как вот сделать чтобы скажем процедурка "TEST" для ввода ф-ии сохраняла результат из переменных x y (к примеру было введено "x+y" и она должна хранить этот результат !не в формате стринг!, без знания значений x y.
а ф-ия "BBog_xy" зная значения x y както обращалась к гдето хранившемся результате из процедурки "TEST" подставляла значения x y и выводила ответ.

ваще такое возможно?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Цитата
процедурка "TEST" для ввода ф-ии сохраняла результат из переменных x y (к примеру было введено "x+y" и она должна хранить этот результат !не в формате стринг!, без знания значений x y.
а ф-ия "BBog_xy" зная значения x y както обращалась к гдето хранившемся результате из процедурки "TEST" подставляла значения x y и выводила ответ.
Ты для себя-то реши, в каком формате и что ты хочешь хранить, а то получается "пойди туда, не знаю куда, принеси то, не знаю что..." (С)

Задачу формализуй: что за функция, где и что известно, к чему доступ должен быть, к чему - нет, КАК ВЫЗЫВАЕТСЯ вычисление значения функции с тем или иным параметром... И чем не устраивает то решение, которое озвучено выше?

Навскидку могу дополнительно предложить введенную функцию опять же парсить, загонять в дерево: узлы - операции, или операнды, над которыми эти операции должны выполняться, (или перегонять в ОПЗ - обратную польскую запись, и хранить в виде списка, но тут будет засада с тем, что ты замучаешься реализовывать И вычисления простых арифметических операций, и вычисления функций от одного/двух/трех аргументов) но там, где будут потом подставляться значения аргументов - хранить указатель на какой-то элемент массива аргументов... А потом, при вычислении функции, передавать параметром в функцию вычисления сам массив аргументов. Предупреждаю сразу: в итоге все равно сведется к тому, что и было уже найдено тобой, только ты реализуешь этот велосипед сам. А потом поймешь, что НЕЛЬЗЯ вычислять что-то, что-то вводя, но ничего об этом не зная, в каких-то точках... Я понятно объяснил?

Есть несколько готовых классов-парсеров (ООП, естественно), но пока не будет уточнения о том, какие могут быть функции, и что на каком этапе тебе известно, а что надо скрыть, и что когда вычисляется - ссылок не будет.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской
Реальное имя: Георгий

Репутация: -  0  +


Volvo я наверное тебя уже измучил со своими вопросами но все же хочу доделать начатое дело до конца.

матри,

вводим "x+y"

--------------------------------------------
procedure interpretator(st,var F) - она переводит введеную строку st (x+y) из string в F:=x+y; в переменные тобишь.
--------------------------------------------

procedure rez_xy(x,y) процедура должна вычислять значение ф-ии F:=x+y; НО. к ней будет 100500 обращений и нельзя ее прогонять через interpretator вот таким образом:

--------------------------------------------


procedure rez_xy(x,y)
(знаем x y)
interpretator(st, var F) (вычисляет значение ф-ии зная x y ,
те она подставляет сразу значения в выводимую ф-ию)

и вывод результата.





Можно ли сделать вот таким образом:



procedure interpretator(st,var F) (должна сохранить результат не численно а сохранить
расположение переменных, те она должна хранить что она должна приплюсовать x и y)

далее
procedure rez_xy(x,y)

она должна как то обращаться к F которая хранит результат приплюсовывания
и соответственно щас должна сложить x y численно.

вывод результата.




дак както вот так можно сделать?


М
Постарайся не делать слишком длинных строк внутри тегов CODE.
Читать трудно.
Lapp

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Георгий @ 9.01.2009 15:55) *
дак както вот так можно сделать?
Все можно, вопрос нужно ли..

Как я понял, тебя волнует скорость выполнения. Ускорить можно, например..

1. Скомпилировав исходную строку в некий "код", выполнение которого будет проходить быстрее. Желательно его, кстати, делать в польской нотации, которую практически не нужно разбирать (на этом сэкономить время). Это примерно то, что ты сам предлагаешь (запомнить - значит скомпилировать этот код).

2. Можно генерировать код на Паскале (или другом языке такого же уровня) и записывать в файл. Затем этот файл компилировать (разумеется, из программы) и запускать (тоже в программе). Способ довольно реальный, но требует тащить за собой компилятор.

3. Генерить машинный код (иначе говоря, ехе-шник) и запускать. Тоже выполнимая задача. Свистеть будет пулей!

"Главное в нашем деле - вовремя остановиться" (С)


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской
Реальное имя: Георгий

Репутация: -  0  +


2 вариант я уже сделал, но это не удобно очень
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Георгий @ 10.01.2009 10:14) *
2 вариант я уже сделал, но это не удобно очень
Чем именно? Я вижу только одно "неудобство": время компиляции само по себе очень немалое, так что выигрыш будет ощущаться только на ОООЧЕНЬ больших расчетах.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской
Реальное имя: Георгий

Репутация: -  0  +


несколько биллионов запросов
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Георгий @ 10.01.2009 12:01) *
несколько биллионов запросов
Тогда в чем слстоит упомянутое неудобство?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

3 страниц V  1 2 3 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 0:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name