компиляция Exe-шника |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
компиляция Exe-шника |
volvo |
10.01.2009 12:51
Сообщение
#21
|
Гость |
процедура должна вычислять значение ф-ии F:=x+y; НО. к ней будет 100500 обращений и нельзя ее прогонять через interpretator вот таким образом: Может, я чего-то не понимаю, но если здесь НЕЛЬЗЯ вызывать функцию вот так:interpretator(st, var F), то почему там МОЖНО вызывать rez_xy(x,y)? Чего ты мудришь? Приводи полную программу, чего у тебя там творится, а не морочь мозги ни себе ни другим. Я например не вижу причин, по которым второй вариант, предложенный Lapp-ом будет работать быстрее, чем тот модуль, который сейчас есть у тебя. Попробуй меня переубедить... Сообщение отредактировано: volvo - 10.01.2009 12:52 |
Георгий |
27.01.2009 17:59
Сообщение
#22
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
задача надо ввести ф-ию и построить ее график, ф-ию нельзя вводить в коде программы тк требуется получить exe-шник в котором не изменить код.
программа для построяние графиков я сделал но ф-ию у меня сейчас можно ввести только в коде. я кажется не понял про 2ой вариант. я вот так его представляю мб я не прав. 2ой вариант: создаю файл function.pas кидаю его в папку TPU, код function.pas:
перед запуском основной программы построения графиков я запускаю программу для ввода грфика ф-ии ее задача открыть файл function.pas и изменить строку "{F1}BBog_xy:=x+y;{F2}" на ту что введет пользователь скажем пользователь ввел x*y код function.pas изменится на:
после чего я запускаю программу построения графиков общий вид кода которой:
впринцыпе все работает НО перед запуском программы построения графиов необходимо нажать F9 тобишь откомпилировать ее и после чего запусть на ctrl+F9 иначе она будет работать со старым не измененным TPU. дак вот как то можно сделать чтобы автоматически при окрытии кода программы он автоматически компилировался и запускался после этого???? или предложите мне другой варинт для решения этой задачи пожалуйста! |
Archon |
27.01.2009 19:13
Сообщение
#23
|
Профи Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: 24 |
TPU создается только как промежуточный этап компиляции. В конце концов он включается в exe. Поэтому, для того, чтобы изменения в файле function.pas вступили в силу, необходимо откомпилировать программу заново.
Как вариант, попробуй вызывать компилятор в режиме командной строки (без запуска IDE). Сделать это можно внутри программы для ввода графика функции или создать bat-файл в котором будут прописаны необходимые команды: Код @echo off Для использования, создай дирректорию, кинь туда исходник программы (gr.pas), исходник модуля с функцией (func.pas), exe-шник программы для ввода функции (chfunc.exe) и этот bat-ник. Только укажи в нем свой путь к компилятору.chfunc.exe c:\tp\bin\tpc.exe -b gr.pas > nul del func.tpu gr.exe -------------------- Close the World...txeN eht nepO
|
Георгий |
27.01.2009 19:59
Сообщение
#24
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
Вот, об этом я и говорил! сейчас попробую это сделать
|
Георгий |
27.01.2009 20:48
Сообщение
#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 файла !!!! Сообщение отредактировано: Георгий - 27.01.2009 20:57 |
Archon |
28.01.2009 0:49
Сообщение
#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
|
volvo |
28.01.2009 1:56
Сообщение
#27
|
Гость |
Георгий, вот скажи честно, тебе нравится такая организация программы? А вот теперь смотри сюда: берем из аттача TPU-файл, занимающийся вычислением произвольной функции, и компилируем с его помощью программу:
uses parser;Заметь, ты можешь не имея никаких исходников этого модуля (я исходники тебе пока не покажу, они еще слишком сырые) поменять функцию, перекомпилировать и запустить программу, можешь переделать ввод, и ввести значение функции, тогда вообще все будет выполняться в рантайме. Можешь добавить в функцию переменных (до 26, все буквы латинского алфавита от A до Z, только прописные, а не строчные; строчные зарезервированы для функций). Правда пока доступны только арифметические операции (+ - * /), но добавить мат. функции, имея на руках модуль, корректно работающий с арифметикой - дело пары часов максимум. И не надо никаких тебе извращений с корректировкой исходного текста, и тому подобными вещами... Насколько ты видишь из приведенного кода, сначала функция готовится, а потом, при вызове eval, вычисляется, причем вычисляется она очень быстро... Итак, что выбираешь? Продолжать свою эпопею с TPC, или сделать нормальную программу? Кстати, если выберешь путь, предложенный мной - тему надо будет перенести в Задачи, она по-моему уже сейчас вышла за пределы Теории... Прикрепленные файлы PARSER.zip ( 2.16 килобайт ) Кол-во скачиваний: 177 |
Георгий |
28.01.2009 9:21
Сообщение
#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, я пока на счет твоего варианта не могу никак въехать мозга видимо не хватает у меня, я еще посижу подумаю мб догадаюсь и отпишу как это произойдет. мне сейчас хоть как бы сделать Добавлено через 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 это ты наверное в парсере обозначил формат типа ззаписи я предполагаю begin setFunction(s1, ls); это наверное ввод ф-ии setVariable('X', 3); это наврное ввод в ф-ию x writeln('result = ', eval(ls):8:3); это вывод ответа setVariable('X', 5); writeln('result = ', eval(ls):8:3); это снова в качестве примера наверное показываешь что можно обращаться с какими угодно переменными потом (кстате вот это и нужно мне было! ) 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 ? Сообщение отредактировано: Георгий - 28.01.2009 9:23 |
volvo |
28.01.2009 10:32
Сообщение
#29
|
Гость |
Цитата очевидно для меня что это ф-ии которые надо построить, но почему их две?? А для теста. Сначала обработал одну, потом поменял функцию на другую, обработал другую... Цитата setVariable('X', 5); Угу... Вот именно для этого я и написал этот модуль. В этом-то вся и суть: ты скрываешь детали реализации. Все, что надо знать для вычисления функции - это собственно сама функция, и значения переменных... Менять переменные можешь любым образом, хоть в цикле, хоть подставляя вручную - программе без разницы, как ты это делаешь...writeln('result = ', eval(ls):8:3); это снова в качестве примера наверное показываешь что можно обращаться с какими угодно переменными потом Цитата это походу пример что так можно и тут, только где setVariable('Y', 5); ммм а почему не совпадают числа после x? А почему они должны совпадать? Вот тут:setFunction(s2, ls);я вычисляю функцию f(X, Y) = 2.75*(3+4*X)*5-4*Y при X = 3, Y = 7, а вот тут: setVariable('X', 5);эта же функция вычисляется при X = 5, Y = 7 (значение Y не поменялось с прошлого вызова setVariable('Y', 7), оно по прежнему равно 7). setVariable же просто задает значение переменной... Тему все-таки переношу в Задачи. |
Георгий |
28.01.2009 13:21
Сообщение
#30
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
Фигасе! скачал другой паскаль и стало компилироваться и создаваться еxе! все работает!!! |
Георгий |
8.02.2009 9:29
Сообщение
#31
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
Volvo, сделал программу, но опять косяк, не могу понять почему такая глупая ошибка получается
суть в следующем: через прогу у меня запускаются 1 из 3х паскалевских проги. 1) run.bat долженкомпилировать и запускать прогу START.EXE
2) runtwo.bat долженкомпилировать и запускать прогу STARTTWO.EXE
3) runpol.bat долженкомпилировать и запускать прогу STARTPOL.EXE
1 и 2ой запускаются, а 3ий у меня дома работает а на др компах, при запуске, открывается батник, компилирует все нормально но не открывает скомпилированный эксешник. вот ссылка на прогу http://depositfiles.com/files/jxao0uzds да чтобы проверить 3 файл надо поставить галочку "параметрический вид" и нажать "построить график" ПОЖАЛУЙСТА ПОМОГИ! |
volvo |
8.02.2009 9:55
Сообщение
#32
|
Гость |
Цитата сделал программу, но опять косяк, не могу понять почему такая глупая ошибка получается А я тебе говорил, что не надо пользоваться бредовым алгоритмом... Ты опять за свое... Пойми раз и навсегда: чем больше файлов содержит проект - тем больше вероятности, что он не заработает... А ты вместо того, чтобы вкомпилировать все в один файл (с использованием того модуля, пусть и доработанного, что я предложил тебе выше), и ЗАБЫТЬ раз и навсегда о том, что надо делать какие-то BATники, таскать за собой компилятор, устанавливать это все мало того что на диск C: (еще не давая пользователю изменить путь к установке), так еще и в его корень (!!!) А я не работаю под Админским аккаунтом. Результат:Итог - такая программа дальше мусорки не проходит... Хочешь - помогу добавить в свой модуль ту функциональность, которая нужна тебе, и доработать твою программу, чтобы она делала абсолютно то же самое, что делает сейчас, но не сбоила, и работала одинаково ВЕЗДЕ. Но для этого мне надо 1) знать, какие именно функции ты будешь обрабатывать и 2) мне нужен полный исходник твоей программы... Не хочешь выкладывать в общий доступ - есть контактная информация в профиле... Больше ничем помочь не могу... |
Георгий |
8.02.2009 12:29
Сообщение
#33
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
мне хотелось бы чтобы ф-ию можно было вводить в делфи, те придется переделать весь код программы под делфи? (когда я начинал писать программу я еще не знал делфи.)
1200строк переделать в код под делфи с учетом того что с графикой в делфи я не работал еще вообще ни разу. как думаешь у меня получится? или всетаки проще разобраться почему батник не работает? слушай вот он компилируется, раз уж начал делать коряво надо бы и закончить коряво, просто переделывать все нормально... "игра не стоит свеч" тогда как запустить ексешный файл через делфи*? |
volvo |
8.02.2009 12:47
Сообщение
#34
|
Гость |
Цитата 1200строк переделать в код под делфи Уточняю: 1200 строк корявого кода перенести в Дельфи... А может, НЕкорявого будет в 2-3 раза меньше, как ты думаешь?Цитата как думаешь у меня получится? Я не телепат... Твой код не видел, как он написан - не знаю, как его можно упростить/сделать более эффективным - тоже не имею понятия... Цитата раз уж начал делать коряво надо бы и закончить коряво, просто переделывать все нормально... "игра не стоит свеч" До свидания... Это не для меня... Делай дальше эту корявую "поделку" сам, у меня больше нет никакого желания заходить в этот топик и помогать тебе на "сдать и забыть", а не "научиться делать правильно". Удачи... |
Георгий |
8.02.2009 12:49
Сообщение
#35
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
volvo, можешь подсказать похожие ф-ии в делфи
паскаль делфи cleardevice; ? ch:=readkey; ? if ch=char(пробел, ентер, ) then ? я то могу попробывать переделать просто это будет столько вопросов, кстате на счет корявого ты не прав, код сделан достаточно четко, чтобы проц как можно меньше грузить при вычислении, скажем у меня есть case of: на 300 строк тк алгорит построения сложный. при построении графика ф-ии программа не прочесывает все область значений а ищет значения в маленькой окрестности где график существует и выстраивает цыпочки графика. Сообщение отредактировано: Георгий - 8.02.2009 13:28 |
amega |
8.02.2009 13:09
Сообщение
#36
|
? Группа: Пользователи Сообщений: 283 Пол: Мужской Репутация: 4 |
Цитата можешь подсказать похожие ф-ии в делфи при прорамирование на делфи работа идет с компанентами, и вся работа ведется на форме ...похожие... функции и процедури проктическ одинаковы |
Георгий |
8.02.2009 13:54
Сообщение
#37
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
как очистить экран?
не помогает form1.Canvas.FillRect(Rect); |
volvo |
8.02.2009 14:09
Сообщение
#38
|
Гость |
Цитата как очистить экран? Не экран, а канву.. Это тебе не Паскаль, где у тебя была графика полноэкранная, здесь все в окне, на его канве.Вот так, если я не ошибаюсь: PatBlt(Form1.Canvas.Handle, 0, 0, |
Георгий |
8.02.2009 14:15
Сообщение
#39
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: 0 |
а что на счет readkey??
у меня в паскале был цикл: repeat как мне его рганизовать в делфи? Добавлено через 7 мин. ))) через hotkey наверное делфается??? Добавлено через 45 сек. только как на стрелочки сделать*?? |
volvo |
8.02.2009 14:25
Сообщение
#40
|
Гость |
Цитата как мне его рганизовать в делфи? А вот это уже твоя проблема... Ты исходники засекретил, ЧТО и КАК у тебя делается - знаешь только ты, советовать ничего не буду, скажешь одно, получится, что надо было совершенно другое... Думай сам...Добавлено через 3 мин. В общем, так... Чтобы не спрашивать, "а как сделать 2+3, а как с циклами", и т.д., почитай что-нибудь про язык программирования Дельфи. А потом будешь задавать вопросы, что останется непонятным... Нельзя вот так просто Copy+Paste-ом перенести программу с одной платформы (DOS) на другую (Windows)... Где-нибудь да нарвешься на неприятности... Так что сначала разберись, что такое событийное программирование (это про Дельфи), и как оно работает, а потом - продолжим... |
Текстовая версия | 29.09.2024 11:46 |