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

> ВНИМАНИЕ!

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

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

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


Гость






Цитата(Георгий @ 9.01.2009 14:55) *
процедура должна вычислять значение ф-ии F:=x+y; НО. к ней будет 100500 обращений и нельзя ее прогонять через interpretator вот таким образом:
Может, я чего-то не понимаю, но если здесь НЕЛЬЗЯ вызывать функцию вот так:
interpretator(st, var F)
, то почему там МОЖНО вызывать
rez_xy(x,y)
? Чего ты мудришь? Приводи полную программу, чего у тебя там творится, а не морочь мозги ни себе ни другим. Я например не вижу причин, по которым второй вариант, предложенный Lapp-ом будет работать быстрее, чем тот модуль, который сейчас есть у тебя. Попробуй меня переубедить...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Новичок
*

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

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


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

я кажется не понял про 2ой вариант. я вот так его представляю мб я не прав.
2ой вариант:

создаю файл function.pas кидаю его в папку TPU, код function.pas:

{$N+}
Unit function;


{===}interface

function BBog_xy(x:real;y:real):real;

{===}implementation

function BBog_xy(x:real;y:real):real;

begin

{F1}BBog_xy:=x+y;{F2}

end.


перед запуском основной программы построения графиков я запускаю программу для ввода грфика ф-ии

ее задача открыть файл function.pas и изменить строку "{F1}BBog_xy:=x+y;{F2}" на ту что введет пользователь скажем пользователь ввел x*y код function.pas изменится на:

{$N+}
Unit function;


{===}interface

function BBog_xy(x:real;y:real):real;

{===}implementation

function BBog_xy(x:real;y:real):real;

begin

{F1}BBog_xy:=x*y;{F2}

end.


после чего я запускаю программу построения графиков общий вид кода которой:

profram graphiki;
uses function,graph;

begin
x:=-100;
y:=-100;
repeat
if abs(function BBog_xy(x;y))<0.001 then putpixel(x,y);

until x>1000;
end;


впринцыпе все работает НО перед запуском программы построения графиов необходимо нажать F9 тобишь откомпилировать ее и после чего запусть на ctrl+F9 иначе она будет работать со старым не измененным TPU.
дак вот как то можно сделать чтобы автоматически при окрытии кода программы он автоматически компилировался и запускался после этого????


или предложите мне другой варинт для решения этой задачи пожалуйста! give_rose.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Профи
****

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

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


TPU создается только как промежуточный этап компиляции. В конце концов он включается в exe. Поэтому, для того, чтобы изменения в файле function.pas вступили в силу, необходимо откомпилировать программу заново.
Как вариант, попробуй вызывать компилятор в режиме командной строки (без запуска IDE). Сделать это можно внутри программы для ввода графика функции или создать bat-файл в котором будут прописаны необходимые команды:
Код
@echo off
chfunc.exe
c:\tp\bin\tpc.exe -b gr.pas > nul
del func.tpu
gr.exe
Для использования, создай дирректорию, кинь туда исходник программы (gr.pas), исходник модуля с функцией (func.pas), exe-шник программы для ввода функции (chfunc.exe) и этот bat-ник. Только укажи в нем свой путь к компилятору.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Новичок
*

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

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


Вот, об этом я и говорил! сейчас попробую это сделать
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Новичок
*

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

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


работает если изменить "c:\tp7\turbo.exe -b start.PAS > nul" на "c:\tp7\turbo.exe start.PAS > nul" можно как то еще сделать чтобы исходник запускался сам??

алгоритм в ручную
1) открываю блокнотом C:\tp7\TPU\usesone.PAS ввожу нужную ф-ию, сохраняю.
2) удаляю C:\tp7\TPU\usesone.tpu
3) Запускаю C:\tp7\START.PAS
4) компилирую, нажимая F9
5) запускаю через ctrl+F9
6)наслаждаюсь работой программы

прикрепил папку с паскалем и всеми необходимыми файлами иам еще редми есть "что для чего.txt" там еще раз описал все. ссылка на скачивание архива 991кб http://webfile.ru/2589899

ПОМОГИТЕ оптимизировать все запуском одного bat файла !!!!

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


Профи
****

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

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


А зачем ты из батника все команды вырезал?

C:\tp\bin\tpc.exe -b gr.pas > nul - компилирует программу. Тут не к turbo.exe нужно путь писать, а именно к компилятору (tpc.exe). Модификатор -b нужен для автоматической компиляции модулей.

Если у тебя нет пока программы для правки модуля с твоей функцией и ты предпочитаешь делать это вручную, используй вот этот батник:
Код
@echo off
c:\tp7\tpc.exe -b start.pas > nul
del usesone.tpu
start.exe

PS Кстати, Turbo Pascal у тебя какой-то порезанный.

PPS Как тебе уже намекал Volvo, этот способ довольно корявый и, кстати, противоречит заданию. Поэтому лучше разберись с той библиотекой, тем более, что помощь в этом тебе уже предлагали.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #27


Гость






Георгий, вот скажи честно, тебе нравится такая организация программы? А вот теперь смотри сюда: берем из аттача TPU-файл, занимающийся вычислением произвольной функции, и компилируем с его помощью программу:

uses  parser;

const
s1: string = '2.75*(3+4*X)*5';
s2: string = '2.75*(3+4*X)*5-4*Y';

var ls: tlist;

begin
setFunction(s1, ls);
setVariable('X', 3);
writeln('result = ', eval(ls):8:3);
setVariable('X', 5);
writeln('result = ', eval(ls):8:3);

setFunction(s2, ls);
setVariable('X', 3);
setVariable('Y', 7);
writeln('result = ', eval(ls):8:3);
setVariable('X', 5);
writeln('result = ', eval(ls):8:3);
end.
Заметь, ты можешь не имея никаких исходников этого модуля (я исходники тебе пока не покажу, они еще слишком сырые) поменять функцию, перекомпилировать и запустить программу, можешь переделать ввод, и ввести значение функции, тогда вообще все будет выполняться в рантайме. Можешь добавить в функцию переменных (до 26, все буквы латинского алфавита от A до Z, только прописные, а не строчные; строчные зарезервированы для функций). Правда пока доступны только арифметические операции (+ - * /), но добавить мат. функции, имея на руках модуль, корректно работающий с арифметикой - дело пары часов максимум. И не надо никаких тебе извращений с корректировкой исходного текста, и тому подобными вещами... Насколько ты видишь из приведенного кода, сначала функция готовится, а потом, при вызове eval, вычисляется, причем вычисляется она очень быстро...

Итак, что выбираешь? Продолжать свою эпопею с TPC, или сделать нормальную программу?

Кстати, если выберешь путь, предложенный мной - тему надо будет перенести в Задачи, она по-моему уже сейчас вышла за пределы Теории...


Прикрепленные файлы
Прикрепленный файл  PARSER.zip ( 2.16 килобайт ) Кол-во скачиваний: 272
 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


Новичок
*

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

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


Archon, я так понял что
@echo off
не выводит исполняемые команды на экран

c:\tp7\tpc.exe -b start.pas > nul
должен компилировать файл start.pas с новым модулем, + создавать c:\tp7\tpu\start.exe (у меня в этой директории создаются exe) но exe файл не создаются + должен после компиляции создаваться файл c:\tp7\tpu\usesone.tpu но он тоже не создается. вывод: компиляции не происходит?

del c:\tp7\tpu\usesone.tpu
после создания выше он должен удалиться (тк он не создался -> понятно почему вылезает ошибка: "нет файла")

start.exe
должен запускаться скомпилированный exe с новой ф-ей но также понятно почему вылазит ошибка тк его нет нигде

мб что то не так у меня? мб паскаль корявый или команды все же не правильные?

Volvo, я пока на счет твоего варианта не могу никак въехать unsure.gif мозга видимо не хватает у меня, я еще посижу подумаю мб догадаюсь и отпишу как это произойдет. мне сейчас хоть как бы сделать

Добавлено через 10 мин.
volvo,
я вот как я понял:
const
s1: string = '2.75*(3+4*X)*5';
s2: string = '2.75*(3+4*X)*5-4*Y';


очевидно для меня что это ф-ии которые надо построить, но почему их две??

var ls: tlist;
tlist это ты наверное в парсере обозначил формат типа ззаписи smile.gif я предполагаю

begin
setFunction(s1, ls);

это наверное ввод ф-ии

setVariable('X', 3);
это наврное ввод в ф-ию x

writeln('result = ', eval(ls):8:3);
это вывод ответа

setVariable('X', 5);
writeln('result = ', eval(ls):8:3);
это снова в качестве примера наверное показываешь что можно обращаться с какими угодно переменными потом (кстате вот это и нужно мне было! good.gif )

setFunction(s2, ls);
setVariable('X', 3);
setVariable('Y', 7);

это наврное ввод-фии с несколькими переменными , и соответственно ввод x y


writeln('result = ', eval(ls):8:3);
setVariable('X', 5);
writeln('result = ', eval(ls):8:3);

это походу пример что так можно и тут, только где setVariable('Y', 5); ммм а почему не совпадают числа после x? там 3,5,3,7,5 ?


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


Гость






Цитата
очевидно для меня что это ф-ии которые надо построить, но почему их две??
А для теста. Сначала обработал одну, потом поменял функцию на другую, обработал другую...
Цитата
setVariable('X', 5);
writeln('result = ', eval(ls):8:3);
это снова в качестве примера наверное показываешь что можно обращаться с какими угодно переменными потом
Угу... Вот именно для этого я и написал этот модуль. В этом-то вся и суть: ты скрываешь детали реализации. Все, что надо знать для вычисления функции - это собственно сама функция, и значения переменных... Менять переменные можешь любым образом, хоть в цикле, хоть подставляя вручную - программе без разницы, как ты это делаешь...

Цитата
это походу пример что так можно и тут, только где setVariable('Y', 5); ммм а почему не совпадают числа после x?
А почему они должны совпадать? Вот тут:
setFunction(s2, ls);
setVariable('X', 3);
setVariable('Y', 7);
writeln('result = ', eval(ls):8:3);
я вычисляю функцию f(X, Y) = 2.75*(3+4*X)*5-4*Y при X = 3, Y = 7, а вот тут:
setVariable('X', 5);
writeln('result = ', eval(ls):8:3);
эта же функция вычисляется при X = 5, Y = 7 (значение Y не поменялось с прошлого вызова setVariable('Y', 7), оно по прежнему равно 7). setVariable же просто задает значение переменной...

Тему все-таки переношу в Задачи.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #30


Новичок
*

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

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


blink.gif blink.gif blink.gif
Фигасе! скачал другой паскаль и стало компилироваться и создаваться еxе!
все работает!!! good.gif good.gif good.gif good.gif good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #31


Новичок
*

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

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


Volvo, сделал программу, но опять косяк, не могу понять почему такая глупая ошибка получается blink.gif
суть в следующем:
через прогу у меня запускаются 1 из 3х паскалевских проги.
1) run.bat долженкомпилировать и запускать прогу START.EXE

@echo off
TPC.exe -B -U.. start.pas > nul
del usesone.tpu
start.exe


2) runtwo.bat долженкомпилировать и запускать прогу STARTTWO.EXE

@echo off
TPC.exe -B -U.. starttwo.pas > nul
del usesone.tpu
starttwo.exe


3) runpol.bat долженкомпилировать и запускать прогу STARTPOL.EXE

@echo off
TPC.exe -B -U.. startpol.pas > nul
del usesone.tpu
startpol.exe



1 и 2ой запускаются, а 3ий у меня дома работает а на др компах, при запуске, открывается батник, компилирует все нормально но не открывает скомпилированный эксешник.
вот ссылка на прогу http://depositfiles.com/files/jxao0uzds да чтобы проверить 3 файл надо поставить галочку "параметрический вид" и нажать "построить график"
ПОЖАЛУЙСТА ПОМОГИ!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #32


Гость






Цитата
сделал программу, но опять косяк, не могу понять почему такая глупая ошибка получается
А я тебе говорил, что не надо пользоваться бредовым алгоритмом... Ты опять за свое... Пойми раз и навсегда: чем больше файлов содержит проект - тем больше вероятности, что он не заработает... А ты вместо того, чтобы вкомпилировать все в один файл (с использованием того модуля, пусть и доработанного, что я предложил тебе выше), и ЗАБЫТЬ раз и навсегда о том, что надо делать какие-то BATники, таскать за собой компилятор, устанавливать это все мало того что на диск C: (еще не давая пользователю изменить путь к установке), так еще и в его корень (!!!) А я не работаю под Админским аккаунтом. Результат:
Прикрепленное изображение

Итог - такая программа дальше мусорки не проходит... Хочешь - помогу добавить в свой модуль ту функциональность, которая нужна тебе, и доработать твою программу, чтобы она делала абсолютно то же самое, что делает сейчас, но не сбоила, и работала одинаково ВЕЗДЕ. Но для этого мне надо 1) знать, какие именно функции ты будешь обрабатывать и 2) мне нужен полный исходник твоей программы... Не хочешь выкладывать в общий доступ - есть контактная информация в профиле... Больше ничем помочь не могу...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #33


Новичок
*

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

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


мне хотелось бы чтобы ф-ию можно было вводить в делфи, те придется переделать весь код программы под делфи? (когда я начинал писать программу я еще не знал делфи.)
blink.gif 1200строк переделать в код под делфи blink.gif с учетом того что с графикой в делфи я не работал еще вообще ни разу. как думаешь у меня получится?
или всетаки проще разобраться почему батник не работает?
слушай вот он компилируется, раз уж начал делать коряво надо бы и закончить коряво, просто переделывать все нормально... "игра не стоит свеч"
тогда как запустить ексешный файл через делфи*?

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


Гость






Цитата
1200строк переделать в код под делфи
Уточняю: 1200 строк корявого кода перенести в Дельфи... А может, НЕкорявого будет в 2-3 раза меньше, как ты думаешь?

Цитата
как думаешь у меня получится?
Я не телепат... Твой код не видел, как он написан - не знаю, как его можно упростить/сделать более эффективным - тоже не имею понятия...

Цитата
раз уж начал делать коряво надо бы и закончить коряво, просто переделывать все нормально... "игра не стоит свеч"
До свидания... Это не для меня... Делай дальше эту корявую "поделку" сам, у меня больше нет никакого желания заходить в этот топик и помогать тебе на "сдать и забыть", а не "научиться делать правильно". Удачи...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #35


Новичок
*

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

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


volvo, можешь подсказать похожие ф-ии в делфи
паскаль делфи
cleardevice; ?

ch:=readkey; ?
if ch=char(пробел, ентер, ) then ?


я то могу попробывать переделать просто это будет столько вопросов, кстате на счет корявого ты не прав, код сделан достаточно четко, чтобы проц как можно меньше грузить при вычислении, скажем у меня есть case of: на 300 строк тк алгорит построения сложный. при построении графика ф-ии программа не прочесывает все область значений а ищет значения в маленькой окрестности где график существует и выстраивает цыпочки графика.

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


?
***

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

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


Цитата
можешь подсказать похожие ф-ии в делфи


при прорамирование на делфи работа идет с компанентами, и вся работа ведется на форме
...похожие... функции и процедури проктическ одинаковы
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #37


Новичок
*

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

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


как очистить экран?
не помогает form1.Canvas.FillRect(Rect);
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #38


Гость






Цитата
как очистить экран?
Не экран, а канву.. Это тебе не Паскаль, где у тебя была графика полноэкранная, здесь все в окне, на его канве.

Вот так, если я не ошибаюсь:
  PatBlt(Form1.Canvas.Handle, 0, 0,
Form1.ClientWidth, Form1.ClientHeight, PATCOPY);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #39


Новичок
*

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

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


а что на счет readkey??
у меня в паскале был цикл:

repeat
ch:=readkey;
if ch=char(13) then .....
if ch=char(8) then .....
if ch=(' ') then .....
until ch=char(27);

как мне его рганизовать в делфи?

Добавлено через 7 мин.
))) через hotkey наверное делфается??? smile.gif

Добавлено через 45 сек.
только как на стрелочки сделать*??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #40


Гость






Цитата
как мне его рганизовать в делфи?
А вот это уже твоя проблема... Ты исходники засекретил, ЧТО и КАК у тебя делается - знаешь только ты, советовать ничего не буду, скажешь одно, получится, что надо было совершенно другое... Думай сам...

Добавлено через 3 мин.
В общем, так... Чтобы не спрашивать, "а как сделать 2+3, а как с циклами", и т.д., почитай что-нибудь про язык программирования Дельфи. А потом будешь задавать вопросы, что останется непонятным... Нельзя вот так просто Copy+Paste-ом перенести программу с одной платформы (DOS) на другую (Windows)... Где-нибудь да нарвешься на неприятности... Так что сначала разберись, что такое событийное программирование (это про Дельфи), и как оно работает, а потом - продолжим...
 К началу страницы 
+ Ответить 

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

 





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