• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите найти литературу FreePascal

PowerOfGods

Ученик
Регистрация
5 Июн 2014
Сообщения
4
Реакции
0
Баллы
0
Помогите найти литературу FreePascal

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

Lazarus — свободная среда разработки программного обеспечения на языке Object Pascal для компилятора Free Pascal (часто используется сокращение FPC — Free Pascal Compiler, свободно распространяемый компилятор языка программирования Pascal).
 
переписал на 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, я имел ввиду преподавателя). poiu Огромное спасибо за программу, буду разбираться...
 
Хотя мои познания тоже крайне малы...
 
poiu, ваша программа выдает мне ошибку. Говорит файл библиотеки содержит ошибку или не может работать под виндой, а в паскале ошибка 303.
 
А почему бы вам для начала не обратиться на форум разработчиков этой среды программирования? Уж там то вам стопудово правильно напишут, ведь это их детище.

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

странно, но под виндой я и писал. и оно работает. а среда была fpc-2.6.4.i386-win32.
 
Значит, так. Насчет 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.
 
тогда по сути это получается не библиотека как таковая (dll), а всего лишь модуль (unit).
я конечно поверю Владимиру, ввиду его опыта. просто мое понятие библиотека не важется с модулями.
 
тогда по сути это получается не библиотека как таковая (dll), а всего лишь модуль (unit).
Ну не знаю, может быть Вы и правы. По мне так это вопрос лингвистически-терминологический, не более того. Я считаю, что "библиотека" - это некое автономное хранилище информации, к каковой (информации) можно при необходимости получить доступ. Но если "безграмотный" преподаватель имеет в виду создание средствами Free Pascal именно системных библиотек, то - умолкаю и прошу прощения за выступление не по делу. Просто не в курсе таких возможностей. За ненадобностью.
 
Назад
Сверху