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

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

PowerOfGods 05.06.2014 06:50

Помогите найти литературу FreePascal
 
Необходима информация о том как делать библиотеки на языке FreePascal, самостоятельный поиск в интернете не дал результатов... Мною была получена задача написать библиотеку с функцией для вычисления n факториала, однако лекционный материал преподавателем выдан небыл, по причине полной безграмотности в предмете. Прошу помощи с поисками материала для самоизучения.

poiu 05.06.2014 10:31

если можно на Lazarus, то покажу ибо

Цитата:

Lazarus — свободная среда разработки программного обеспечения на языке Object Pascal для компилятора Free Pascal (часто используется сокращение FPC — Free Pascal Compiler, свободно распространяемый компилятор языка программирования Pascal).

poiu 05.06.2014 10:46

переписал на FP

библиотека
Код:

library faktorial;


function fak(n: integer): longint; stdcall; export;
var
 i: integer;
 f: longint;
begin
f:= 1;
 for i:= 0 to n-1 do f:= f*(i+1);
 fak:= f;
end;

exports fak;

begin
end.

прога
Код:

program f;

function fak(n: integer): longint; stdcall; external 'fak.dll';

var
 k: integer;
begin
writeln('Input n:');
readln(k);
writeln('Faktorial = ', fak(k));
readln;
end.


AlexZir 05.06.2014 10:47

Цитата:

Сообщение от PowerOfGods (Сообщение 1037869)
однако лекционный материал преподавателем выдан небыл, по причине полной безграмотности в предмете

Не совсем понятно, кто именно из вас двоих обладатель полной безграмотности в предмете - вы или преподаватель?

PowerOfGods 05.06.2014 18:28

Уважаемый AlexZir, я имел ввиду преподавателя). poiu Огромное спасибо за программу, буду разбираться...

PowerOfGods 05.06.2014 18:29

Хотя мои познания тоже крайне малы...

poiu 05.06.2014 22:04

Цитата:

Сообщение от PowerOfGods (Сообщение 1038083)
Хотя мои познания тоже крайне малы...

мои знания в free pascal тоже, но интернет спасает =).

PowerOfGods 06.06.2014 02:54

poiu, ваша программа выдает мне ошибку. Говорит файл библиотеки содержит ошибку или не может работать под виндой, а в паскале ошибка 303.

AlexZir 06.06.2014 03:18

А почему бы вам для начала не обратиться на форум разработчиков этой среды программирования? Уж там то вам стопудово правильно напишут, ведь это их детище.

З.Ы. Определение уровня знаний препоодавателя - не в рамках компетенции студента, это решает только ученый совет. Раз человек работает, значит, он (или она) имеет на это допуск.

poiu 06.06.2014 09:20

Цитата:

Сообщение от PowerOfGods (Сообщение 1038270)
poiu, ваша программа выдает мне ошибку. Говорит файл библиотеки содержит ошибку или не может работать под виндой, а в паскале ошибка 303.

странно, но под виндой я и писал. и оно работает. а среда была fpc-2.6.4.i386-win32.

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, время: 00:13.

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