Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2010, 02:19   #1
Bezo
Пользователь
 
Регистрация: 12.06.2010
Сообщений: 16
Вопрос какой именно участок кода в Delphi отвечает за связь с Fortran

Народ для вас это должно быть неочень сложно!!!
Подскажите по программе а именно:

1)какой именно участок кода в Делфи отвечает за связь с Фортраном
2)Описать некоторые фрагменты кода что за что отвечает
3)представьте, что посторонний человек запускает эту программу -
что ему делать, по пунктам, и что при этом должно происходить на
экране (и, желательно, что при этом делается внутри программы)

ВОТ ЛИСТИНГ ПРОГРАММЫ:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series, Grids;

const
   arraynumt = 2000;
   arraynumy = 1000;
type
    emf=array[0..arraynumt] of double;      //новый тип - массив по времени
    TEps=array[1..9] of double;     //массив для эпсилон
 TForm1 = class(TForm)
    Chart1: TChart;                         //эта компонента - для рисования
    Series1: TFastLineSeries;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label3: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    GroupBox3: TGroupBox;
    StringGrid1: TStringGrid;
    GroupBox2: TGroupBox;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;

    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure getDataFromForm();
    procedure checkData();
    procedure putDataToForm();

  private
    { Private declarations }
  public
    { Public declarations }
  end;
  procedure getimpprop(E0,delta,omega,dt,ymax,sig:double; eps,EpsTh:TEps; e:emf); stdcall;

var                                            //переменные
  Form1: TForm1;
  E0,delta,omega,str,dt,ymax,sig:double;
  e:emf;
  eps,EpsTh:TEps;
  i,j:integer;
  PersCount,zu:double;
  flWrongData:boolean;

implementation

{$R *.dfm}
//процедура, импортируемая из динамической библиотеки georadar.dll
procedure getimpprop(E0,delta,omega,dt,ymax,sig :double; eps,EpsTh:TEps;
                   e:emf);
external 'georadar1.dll';
//конструктор
procedure TForm1.FormCreate(Sender: TObject);
begin

  StringGrid1.Cells[1,0] := 'Эпсилон';
  StringGrid1.Cells[2,0] := 'Толщина в %';
  for i:=1 to 9 do
  begin
    StringGrid1.Cells[0,i]:=FloatToStr(i);
    StringGrid1.Cells[1,i]:=FloatToStr(0);
    StringGrid1.Cells[2,i]:=FloatToStr(0);
  end;
  StringGrid1.Cells[1,1]:=FloatToStr(6);
  StringGrid1.Cells[2,1]:=FloatToStr(1);
  StringGrid1.Cells[1,2]:=FloatToStr(13);
  StringGrid1.Cells[2,2]:=FloatToStr(1);
  getDataFromForm();
end;

procedure TForm1.getDataFromForm();
begin
  E0:=StrToFloat(Edit1.Text);
  omega:=StrToFloat(Edit2.Text);
  delta:=StrToFloat(Edit3.Text);
  dt:=StrToFloat(Edit4.Text);
  ymax:=StrToFloat(Edit5.Text);
  sig:=StrToFloat(Edit6.Text);
end;

procedure TForm1.checkData();
begin
  if delta<0 then
  begin
    showmessage('delta must be > 0');
    flWrongData:=true;
  end;
  if omega<0 then
  begin
    showmessage('delta must be < 0');
    flWrongData:=true;
  end;

  i:=1; PersCount:=0;
  while ((TryStrToFloat(StringGrid1.Cells[2,i],zu)) or (i<10)) do
  begin
    PersCount:=PersCount+zu;
    i:=i+1;
  end;
  if (PersCount<>100) then
  begin
    for j:=1 to i do
    begin
      TryStrToFloat(StringGrid1.Cells[2,j],zu);
      StringGrid1.Cells[2,j]:=FloatToStr(zu*100/PersCount);
    end;
  end;
  for i:=1 to 9 do
  begin
    TryStrToFloat(StringGrid1.Cells[1,i],zu);
    eps[i]:=zu;
    TryStrToFloat(StringGrid1.Cells[2,i],zu);
    EpsTh[i]:=zu;
  end;
end;

procedure TForm1.putDataToForm();
begin
  Chart1.Series[0].Clear;
  Chart1.Series[0].AddArray(e);
end;
//при нажатии на кнопку
procedure TForm1.Button1Click(Sender: TObject);
begin
  getDataFromForm();
  checkData();
  if flWrongData then exit;
//передаем параметры в динамическую библиотеку и считаем поле
  getimpprop(E0,delta,omega,dt,ymax,sig,eps,EpsTh,e);
  putDataToForm();

//  StringGrid1.RowCount := 100;

//рисуем то, что получилось

end;
end.
Bezo вне форума Ответить с цитированием
Старый 25.06.2010, 09:02   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Код:
procedure getimpprop(E0,delta,omega,dt,ymax,sig :double; eps,EpsTh:TEps;
                   e:emf);
external 'georadar1.dll';
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 25.06.2010, 13:52   #3
Bezo
Пользователь
 
Регистрация: 12.06.2010
Сообщений: 16
По умолчанию

спасибо за помощь
Bezo вне форума Ответить с цитированием
Старый 25.06.2010, 13:56   #4
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

Только не понятно при чем тут сам Фортран.
Процедура-то храниться в динамически подключаемой библиотеке. А чем она скомпиллирована - только автор знает
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab

Последний раз редактировалось ex.cluz; 25.06.2010 в 14:01.
ex.cluz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открыть файл как Hex найти там некий участок кода, заменить его и сохранить AstraZak Общие вопросы C/C++ 10 05.03.2010 18:58
Как используя Delphi найти процесс, который отвечает за определенное действие Minvay Общие вопросы Delphi 10 19.03.2009 12:41
Перевод кода с Fortran-77 на Delphi unhide Помощь студентам 3 20.05.2008 14:27