Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Кто такой DSystem? Проблема с прогой, подскажите!


Автор: LongInt 10.5.2007, 10:23
Я паскаль вообще не изучал. Возникла необходимость использовать. Есть прога, но не компилится (пробовал в Турбо Паскаль 7). Подскажите в чем проблема!!! Плиз. 
Сначало была проблема с библиотеками. Нашел в инете. Но выдает ошибку на строке:
Код

z : DSystem;

что это???????

сам листинг:
Код

{$N+}
Uses Crt, Fmm, Graph, Graphics;

Var
   OutFile : Text;
   p2, x2 : Float;

Type Matrix22 = Array[1..2, 1..2] of Float;

Const
     p1 : Float = 1.0;
     p3 : Float = 20.0;
     p4 : Float = 10.0;
     p5 : Float = 0.6;
     p6 : Float = -5.0;
     x1 : Float = 0.0;
     LIMIT = 1E-8;

Function GetX1(pX2 : Float) : Float;
Begin
     GetX1 := (p1*pX2+p5*pX2-p5*p6) / (p1*p4)
End;

Function GetPrNum(M : Matrix22; var L1 : Float; var l2 : Float) : Boolean;
Var
   D : Float;
   b, c : Float;
Begin
     b := M[1][1]+M[2][2];
     c := M[1][1]*M[2][2]-M[1][2]*M[2][1];
     D := b*b - 4*c;
     if D<0 then begin GetPrNum := FALSE; exit; end;
     L1 := (-b+sqrt(D))/2;
     L2 := (-b-sqrt(D))/2;
     GetPrNum := TRUE;
end;

Function TestResult(M : Matrix22) : Boolean;
Var
   L1, l2, e : Float;
Begin
     TestResult := FALSE;
     e := exp(x2/(1+x2/p3));
     L1 := -p1*x1+p2*(1-x1)*e;
     L2 := -p1*x2+p2*p4*(1-x1)*e-p5*(x2-p6);
     if ( (abs(L1)<LIMIT) or (abs(L2)<LIMIT) ) then TestResult:=TRUE;
End;

Function GetP2(pX1, pX2 : Float; var Povorot : Boolean) : Float;
Var
   a, b, Temp, Temp1, L1, L2 : Float;
   M : Matrix22;
Begin
     Povorot := FALSE;
     a := exp(pX2/(1+pX2/p3));
     b := sqr(1/(1+pX2/p3));
     Temp1 := -(sqr(p1)+p1*p5) / (p1*a-p1*p4*(1-pX1)*a*b+p5*a);
     M[1][1] := -p1-Temp1*a;
     M[1][2] := (1-pX1)*a;
     M[2][1] := -Temp1*p4*a;
     M[2][2] := p4*(1-pX1)*a;
     GetPrNum(M, L1, L2);
     if ( (abs(L1)<LIMIT) or (abs(L2)<LIMIT) ) then Povorot := TRUE;
     GetP2 := Temp1;
End;

{$F+}
Function Zeroin1(Param : Float) : Float;
Var
   a, b, pX1, pP2 : Float;
   PType : Boolean;
Begin
     a := exp(Param/(1+Param/p3));
     pX1 := GetX1(Param);
     pP2 := GetP2(pX1, Param, PType);
     Zeroin1 := -p1*pX1+pP2*(1-pX1)*a
End;
{$F-}

Procedure MakeMatrix(var M : Matrix22; p21: Float);
Begin
     M[1][1] := -p1-p21*exp(x2/(1+x2/p3));
     M[1][2] := exp(x2/(1+x2/p3))*sqr(1/(1+x2/p3))*p21*(1-x1);
     M[2][1] := -p21*p4*exp(x2/(1+x2/p3));
     M[2][2] := -p1+p21*p4*(1-x1)*exp(x2/(1+x2/p3))*sqr(1/(1+x2/p3))-p5;
End;

Procedure WriteRes(a, b : ShortInt);
Var
   PType : Boolean;
   e, d, L1, L2 : Float;
   Matr : Matrix22;
Begin
     x2 := Zeroin(a, b, 1E-8, @Zeroin1);
     x1 := GetX1(x2);
     p2 := GetP2(x1, x2, PType);
     e := exp(x2/(1+x2/p3));
     d := sqr(1/(1+x2/p3));

     MakeMatrix(Matr, p2);

     Write(OutFile, p2:0:8, x1:15:8, x2:15:8);
     if TestResult(Matr) = TRUE then Write(OutFile, 'Ok':11)
              else Write(OutFile, '!FAILED!':11);
     if PType = TRUE then Write(OutFile, 'P':14)
              else Write(OutFile, 'V':14);

     MakeMatrix(Matr, p2+1E-8);
     GetPrNum(Matr, L1, L2);
     if ((L1>0) or (L2>0)) then Write(OutFile, 'N->':10)
        else Write(OutFile, 'U->':10);
     WriteLn(L1:0:4, L2:10:4);

     MakeMatrix(Matr, p2-1E-8);
     GetPrNum(Matr, L1, L2);
     if ((L1>0) or (L2>0)) then WriteLn(OutFile, 'N')
        else WriteLn(OutFile, 'U');
End;

Var
   z : DSystem;
   Gd, Gm : Integer;
   e1, e2, a1 : Float;
   ddd : Boolean;

Begin
     ClrScr;
     Assign(OutFile, 'Points.txt');
     Rewrite(OutFile);

     WriteLn(OutFile, '    p2      |      x1      |      x2      | Error control | Point type');
     WriteLn(OutFile);

     WriteRes(-1, 0);
     WriteRes(2, 3);

     gd := detect;
     InitGraph(gd, gm , '');
     z.SetDefault;
     z.bkcolor:=white;
     z.linecolor:=black;
     z.fontcolor:=black;
     z.graphiccolor:=black;
     z.Initcoords(0, 0, 640, 480, -2, 4, -3, 3);
     z.DrawCoords(True);
     x2 := -2;
     While x2<4 do begin
           a1 := exp(x2/(1+x2/p3));
           x1 := GetX1(x2);
           p2 := GetP2(x1, x2, ddd);

           e1 := -p1*x1+p2*(1-x1)*a1;
           e2 := -p1*x2+p2*p4*(1-x1)*a1-p5*(x2-p6);
           z.PutOnCoords(x2, e2, False);
           z.PutOnCoords(x2, e1, False);
           x2 := x2 + 0.001;
     end;
     ReadLn;
     Close(OutFile);
End.


Вообще суть программы в нахождении точек бифуркации по опр. мат. модели.

Автор: ama_kid 10.5.2007, 11:29
Цитата(LongInt @  10.5.2007,  10:23 Найти цитируемый пост)
что это???????
Самое очевидное - необъявленный объектный тип DSystem. Есть подозрение, что под 
Цитата(LongInt @  10.5.2007,  10:23 Найти цитируемый пост)
была проблема с библиотеками
подразумевалась проблема с модулем Fmm.pas (ибо единственный нештатный) и в том варианте, который ты
Цитата(LongInt @  10.5.2007,  10:23 Найти цитируемый пост)
Нашел в инете.
он не объявлен (а был объявлен в изначальном fmm.pas)
Решение - искать тот модуль, где этот тип объявлен, либо объявлять его самому...

Автор: XupyprMV 10.5.2007, 12:21
Если мне не изменяет помять подключаемые библиотеки в паскале имеют расширение dcu и должны содержаться в папочке библиотек (там где другие dcu-файлы). 

Вопщем с твоей прогой должен быть ещё файлик ffm.dcu

Хотя если это библиотека пользователя...  smile 

Автор: volvo877 10.5.2007, 15:00
Цитата(XupyprMV @  10.5.2007,  12:21 Найти цитируемый пост)
Вопщем с твоей прогой должен быть ещё файлик ffm.dcu
При чем ЗДЕСЬ (в разделе Паскаль) файл с расширением DCU? Если уж на то пошло, то TPU...

Цитата(ama_kid @  10.5.2007,  11:29 Найти цитируемый пост)
подразумевалась проблема с модулем Fmm.pas (ибо единственный нештатный)
Graphics что, штатный? Тогда расскажи, в какой версии Паскаля... Когда уже научитесь смотреть на название раздела, прежде чем отвечать?


Автор: ama_kid 10.5.2007, 16:25
Цитата(volvo877 @  10.5.2007,  15:00 Найти цитируемый пост)
Graphics что, штатный? Тогда расскажи, в какой версии Паскаля...
У меня BP7... прикрепляю исходный код этого модуля, лежащий у меня в архиве с этим паскалем в домашнем storage... Не знаю, штатный он или нет, входит ли он именно в BP7 или пакет Turbo Vision к нему, но то, что не я его писал - это я могу гарантировать... Еще остается вариант, что это какой-то сторонний модуль (возможно, я его когда-то закачивал и сохранил в тот же архив)...

Автор: LongInt 10.5.2007, 17:51
вообще у меня есть fmm.tpu и fmm.pas. Он спрашивал fmm.tpu. Я его нашел и кинул в bin. А fmm.pas ему тоже нужен??? Он где тогда должен лежать в bin или в той же папке где и сам проект? Хотя я и то и то пробовал - не помогает, а вот graphics.pas у меня небыло! Где эти *.pas по науке лежать должны?

Попробуйте кто-нибудь у себя запустить! Плиз. Может у меня еще чего-нибудь не хватает (кроме знаний smile )!!!!!!

Автор: ama_kid 11.5.2007, 09:11
Цитата(LongInt @  10.5.2007,  17:51 Найти цитируемый пост)
 А fmm.pas ему тоже нужен???
Он нужен, если нет tpu... 
Цитата(LongInt @  10.5.2007,  17:51 Найти цитируемый пост)
Он где тогда должен лежать в bin или в той же папке где и сам проект?
Он может лежать в любой доступной компилятору папке (в т.ч. и в папке с проектом), но как правило, модули лежат в папке, описанной в Options->Directories->Units...
Цитата(LongInt @  10.5.2007,  17:51 Найти цитируемый пост)
Попробуйте кто-нибудь у себя запустить!
Как же нам запустить, если, к примеру, у меня нет твоего файла fmm.pas? Приаттачь целиком проект - посмотрим...

Автор: LongInt 11.5.2007, 09:43
Цитата(ama_kid @ 11.5.2007,  09:11)
Как же нам запустить, если, к примеру, у меня нет твоего файла fmm.pas? Приаттачь целиком проект - посмотрим...

вот

Автор: ama_kid 11.5.2007, 11:19
Мда, здесь вряд ли что-то сделаешь, ибо описания типа DSystem отстутствует. Либо должен быть дополнительный модуль, либо описание в теле программы... Ни того, ни другого не наблюдается, следовательно надо писать свой объект-заменитель с аналогчными свойствами и методами исходя из логики программы...

Автор: LongInt 11.5.2007, 11:23
блин....
судя по всему он графики рисует!?
не реально это написать не зная язык...
ладно буду думать.
Спасибо всем!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)