Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ 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, представляешь, сколько придется с этим возиться? blink.gif
пока напишешь весь интерпретатор (полный), может уйти не один день. А так, гляди, и новый язык создадишь :D

на Фортране можно скомпоновать OBJ и через Паскаль вызывать.

Автор: BlackShadow 7.07.2004 15:44

Цитата
на Фортране можно скомпоновать OBJ и через Паскаль вызывать.

а можно и из Delphi и из C/C++...
Много откуда можно.

Вот тебе и .Net в плане кроссязычности smile.gif

Автор: 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 smile.gif

Автор: Altair 9.07.2004 19:23

Цитата
ну Пролог я знаю на уровне яселек.

А где здесь Пролог ?
NetAnton, какой пролог изучал?

Автор: NetAnton 10.07.2004 18:53

у меня Турбо Пролог 2.0 и еще какой-то Arity Prolog (но то не важно). изучал я только так - открывал .pro файл и смотрел на код. может в ВУЗе будем его детально изучать, не знаю.