Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите найти литературу FreePascal (http://www.tehnari.ru/f41/t96776/)

Vladimir_S 06.06.2014 09:43

Значит, так. Насчет Lazarus'а ничего сказать не могу, а вот в Turbo и Free Pascal библиотеки создаются на базе модулей (Unit). Сам понаписал кучу библиотек, нужных для работы. В качестве примера могу привести модуль, расширяющий набор математических (и не только) функций языка:
Код:

unit Func;

interface


function RadGr(X:Extended):Extended;
function GrRad(X:Extended):Extended;
function Tan(X:Extended):Extended;
function ArcSin(X:Extended):Extended;
function ArcCos(X:Extended):Extended;
function Ch(X:Extended):Extended;
function Sh(X:Extended):Extended;
function Th(X:Extended):Extended;
function ArCh(X:Extended):Extended;
function ArSh(X:Extended):Extended;
function ArTh(X:Extended):Extended;
function Lg(X:Extended):Extended;
function X2Yp(X, Y:Extended):Extended;
function X2np(X:Extended; n:WORD):Extended;
function Int2Str(L:LongInt): string;
procedure Escape;
procedure Alg(X1,X2,X3,Y1,Y2,Y3,XA:Extended;VAR YA:Extended);
function Nfact(n:LongInt):Extended;
function NfactDBL(n:LongInt):Extended;

implementation

uses Crt;

function RadGr(X:Extended):Extended;
BEGIN
    RadGr:=(X/Pi)*180;
END;

function GrRad(X:Extended):Extended;
BEGIN
    GrRad:=(X/180)*Pi;
END;

function Tan(X:Extended):Extended;
BEGIN
  Tan:=Sin(X)/Cos(X);
END;

function ArcSin(X:Extended):Extended;
BEGIN
    IF ROUND(X*10000000)=10000000 THEN ArcSin:=Pi/2 ELSE
    IF ROUND(X*10000000)=-10000000 THEN ArcSin:=-Pi/2 ELSE
    ArcSin:=ArcTan(X/SQRT(1-X*X));
END;

function ArcCos(X:Extended):Extended;
BEGIN
    IF ROUND(X*10000000)=10000000 THEN ArcCos:=0 ELSE
    IF ROUND(X*10000000)=-10000000 THEN ArcCos:=Pi ELSE
    ArcCos:=(Pi/2)-ArcTan(X/SQRT(1-X*X));
END;

function Ch(X:Extended):Extended;
BEGIN
    Ch:=(Exp(X)+Exp(-X))/2;
END;

function Sh(X:Extended):Extended;
BEGIN
    Sh:=(Exp(X)-Exp(-X))/2;
END;

function Th(X:Extended):Extended;
BEGIN
    Th:=(Exp(X)-Exp(-X))/(Exp(X)+Exp(-X));
END;

function ArCh(X:Extended):Extended;
BEGIN
    ArCh:=Ln(X+SQRT(X*X-1));
END;

function ArSh(X:Extended):Extended;
BEGIN
    ArSh:=Ln(X+SQRT(X*X+1));
END;

function ArTh(X:Extended):Extended;
BEGIN
    ArTh:=(1/2)*Ln((X+1)/(1-X));
END;

function Lg(X:Extended):Extended;
BEGIN
    Lg:=Ln(X)/Ln(10);
END;

function X2Yp(X, Y:Extended):Extended;
BEGIN
  X2Yp:=Exp(Y*Ln(X));
END;

function X2np(X:Extended; n:WORD):Extended;
Var i:WORD;
    Y:Extended;
BEGIN
  IF n=0 THEN X2np:=1 ELSE
  IF n=1 THEN X2np:=X ELSE
  BEGIN
    Y:=X;
    FOR i:=2 TO n DO Y:=Y*X;
    X2np:=Y;
  END;
END;

function Int2Str(L : LongInt) : string;
var
  S : string;
begin
  Str(L, S);
  Int2Str := S;
end; { Int2Str }

procedure Escape;
VAR
  Chr : char;
BEGIN
  IF KeyPressed THEN
    BEGIN
      Chr :=ReadKey;
      if Chr = #0 then chr := readkey;
      if Chr = #27 then  Halt(0);
    END;
END; { Escape }

procedure Alg(X1,X2,X3,Y1,Y2,Y3,XA:Extended;VAR YA:Extended);
VAR
  det, AA, BA, CA:Extended;
begin
  det:=(X1-X2)*(X2-X3)*(X1-X3);
  AA:=(Y1*(X2-X3)+Y2*(X3-X1)+Y3*(X1-X2))/det;
  BA:=(Y1*(X3*X3-X2*X2)+Y2*(X1*X1-X3*X3)+Y3*(X2*X2-X1*X1))/det;
  CA:=(Y1*X2*X3*(X2-X3)+Y2*X1*X3*(X3-X1)+Y3*X1*X2*(X1-X2))/det;
  YA:=AA*XA*XA+BA*XA+CA;
end; { Alg }

function Nfact(n:LongInt):Extended;
VAR
  i:LongInt;
  fact:Extended;
BEGIN
  IF n=0 THEN fact:=1 ELSE
    BEGIN
      fact:=1;
      FOR i:=1 TO n DO
        fact:=fact*i;
    END;
  Nfact:=fact;
END;

function NfactDBL(n:LongInt):Extended;
VAR
  i:LongInt;
  fact:Extended;
BEGIN
  fact:=1;
  i:=n;
  REPEAT
    fact:=fact*i;
    DEC(i, 2);
  UNTIL i<=1;
  NfactDBL:=fact;
END;

END.


poiu 06.06.2014 10:06

тогда по сути это получается не библиотека как таковая (dll), а всего лишь модуль (unit).
я конечно поверю Владимиру, ввиду его опыта. просто мое понятие библиотека не важется с модулями.

Vladimir_S 06.06.2014 10:32

Цитата:

Сообщение от poiu (Сообщение 1038295)
тогда по сути это получается не библиотека как таковая (dll), а всего лишь модуль (unit).

Ну не знаю, может быть Вы и правы. По мне так это вопрос лингвистически-терминологический, не более того. Я считаю, что "библиотека" - это некое автономное хранилище информации, к каковой (информации) можно при необходимости получить доступ. Но если "безграмотный" преподаватель имеет в виду создание средствами Free Pascal именно системных библиотек, то - умолкаю и прошу прощения за выступление не по делу. Просто не в курсе таких возможностей. За ненадобностью.


Часовой пояс GMT +4, время: 03:08.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.