Версия для печати темы
Форум «Всё о Паскале» _ Задачи _ Cрочно! Помогите! Pascal<-fortran
Автор: Brayhead 7.07.2004 12:08
ООООчень срочно требуется!!!
Как вставить в программу на Паскале (Дельфи) вызов подпрограммы на Фортране?
Пожалуйста, приведите пример простейшей программы, из которой производится вызов считающей фортран-сабраутины!
Пришлите tortois@chel.tv
Мы горим синим пламенем, очень срочно!
Автор: virt 7.07.2004 12:32
а ты напиши интерпретатор фортрана ,и встрой его в свою прогу.
иначе никак нельзя.
Автор: NetAnton 7.07.2004 13:35
virt, представляешь, сколько придется с этим возиться?
пока напишешь весь интерпретатор (полный), может уйти не один день. А так, гляди, и новый язык создадишь :D
на Фортране можно скомпоновать OBJ и через Паскаль вызывать.
Автор: BlackShadow 7.07.2004 15:44
Цитата
на Фортране можно скомпоновать OBJ и через Паскаль вызывать.
а можно и из Delphi и из C/C++...
Много откуда можно.
Вот тебе и .Net в плане кроссязычности
Автор: GLuk 7.07.2004 22:42
Цитата(Brayhead @ 7.07.04 5:08)
ООООчень срочно требуется!!!
Как вставить в программу на Паскале (Дельфи) вызов подпрограммы на Фортране?
Пожалуйста, приведите пример простейшей программы, из которой производится вызов считающей фортран-сабраутины!
Пришлите tortois@chel.tv
Мы горим синим пламенем, очень срочно!
Можно воспользоваться фортрановским компилером для получения кода.
Автор: Brayhead 8.07.2004 14:11
Ребята, скажите СКОЛЬКО и КАК - я заплачу по любым расценкам!
Только пожалуйста!
Пришлите пример: вот программа на борланд-паскале:
Код
Program TRIANG;
var A, B, C, D, S, P: Real;
procedure fort(var D: real);
begin
fort(D);
Read(A,B,C);
WriteLn(A,B,C);
P:=(A+B+C)/2;
S:=(P*(P-A)*(P-B)*(P-C+D)/2);
WriteLn('S=',S:8:3)
end.
Вот сабраутина на фортране:
Цитата
subroutine fort
real d
d=15.0
stop
end
Как для tpc (7й TP) и fl32 получить результат??????
Автор: NetAnton 8.07.2004 14:57
ну Пролог я знаю на уровне яселек. там можно объявить функцию как public? тогда экспортируй ее в obj-модуль, а на Паскале:
Код
function fort; external;
{$L file.obj}
var p:integer;
begin
p:=fort; {или что-то в этом роде}
end;
Автор: BlackShadow 8.07.2004 17:44
Код
Program TRIANG;
var A, B, C, D, S, P: Real;
[b]procedure fort(var D: real); [/b]
begin
fort(D);
Read(A,B,C);
WriteLn(A,B,C);
P:=(A+B+C)/2;
S:=(P*(P-A)*(P-*(P-C+D)/2);
WriteLn('S=',S:8:3)
end.
Выделенную строчку надо заменить примерно так:
Код
Procedure Fort(Var d:Integer);External;
NetAnton, там же процедура, а не функция.
А в остальном
NetAnton прав. Надо скомпилировать двой модуль на фортране в .obj-файл (это что-то промежуточное между текстом и .exe), скопировать его для удобства в папку указанную в BP в опции Options->Derictories->OBJ's Derictory, а затем прилинковать к проге на BP при помощи дериктивы {$L MyPrologModule.obj}. Только имя в формать 8.3
Автор: Altair 9.07.2004 19:23
Цитата
ну Пролог я знаю на уровне яселек.
А где здесь Пролог ?
NetAnton, какой пролог изучал?
Автор: NetAnton 10.07.2004 18:53
у меня Турбо Пролог 2.0 и еще какой-то Arity Prolog (но то не важно). изучал я только так - открывал .pro файл и смотрел на код. может в ВУЗе будем его детально изучать, не знаю.