Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 06.06.2014, 09:43   #11 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Значит, так. Насчет 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.
Vladimir_S вне форума   Ответить с цитированием

Старый 06.06.2014, 09:43
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Эти темы могут вам помочь

Помогите найти ДПТ
Freepascal, метод Цезаря с лозунгом, работа с файлами приложение
Подскажите литературу
Помогите найти песню

Старый 06.06.2014, 10:06   #12 (permalink)
poiu
Member
 
Регистрация: 05.03.2014
Сообщений: 200
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 834
По умолчанию

тогда по сути это получается не библиотека как таковая (dll), а всего лишь модуль (unit).
я конечно поверю Владимиру, ввиду его опыта. просто мое понятие библиотека не важется с модулями.
poiu вне форума   Ответить с цитированием
Старый 06.06.2014, 10:32   #13 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

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

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.