Простая программа с процедурными типами не компилируется и не работает - Free Pascal

Узнай цену своей работы

Формулировка задачи:

uses Crt;
 Type
    Func = function(x,y: integer):integer;
 
    {$F+}
function Adds(x,y:integer):integer;
 begin Adds:= x + y; end;
 
function Multiplys(x,y:integer):integer;
 begin Multiplys:= x*y;end;
 
function Funny(x,y:integer):integer;
 begin funny:= (x+y)*(x-y);end;
   {$F-}
 
procedure PrintTable(w,h:integer;operation:func);
 var x,y: integer;
  begin
   for y:= 1 to h do begin
    for x:= 1 to w do
     write(operation(x,y):5);
     writeln;
   end;{End For y}
     writeln;
  end;{End PrintTable}
 
BEGIN ClrScr;
 
 PrintTable(10,10,Adds);
 PrintTable(10,10,Multiplys);
 PrintTable(10,10,Funny);
 
Writeln('This end program click any key');
Readkey;
END.
эта простая прога с процедурными типами не компилируется и не работает в Free Pascal если не поставить Free в совместимость с Turbo Pascal option -> compiler -> compiler mode поставил звезду напротив Turbo Pascal compatible возможна ли компиляция и выполнение этой программы если не снимать галочку с Free Pascal dialect ? т.е. не ставить ее ни в какую совместимость?
оказывается чтобы не ползать по option нужно Чтобы максимально приблизить FPC к Delphi7, используйте -Mdelphi в командной строке или вставляйте в исходники (перед Unit и Program ) такой код: {$IFDEF FPC} {$MODE DELPHI} {$ENDIF FPC} вставил перед program в представленной проге вот этот код(понравился он мне) {$MODE DELPHI} и прога заработала безо всяких переключений

Решение задачи: «Простая программа с процедурными типами не компилируется и не работает»

textual
Листинг программы
{$MODE ObjFPC}
uses Crt;
 Type
    Func = function(x,y: integer):integer;
 
function Adds(x,y:integer):integer;
 begin Adds:= x + y; end;
 
function Multiplys(x,y:integer):integer;
 begin Multiplys:= x*y;end;
 
function Funny(x,y:integer):integer;
 begin funny:= (x+y)*(x-y);end;
 
 
procedure PrintTable(w,h:integer;operation:func);
 var x,y: integer;
  begin
   for y:= 1 to h do begin
    for x:= 1 to w do
     write(operation(x,y):5);
     writeln;
   end;{End For y}
     writeln;
  end;{End PrintTable}
 
BEGIN ClrScr;
 
 PrintTable(10,10,@Adds); // Внимательно смотрим на синтаксис
 PrintTable(10,10,@Multiplys);
 PrintTable(10,10,@Funny);
 
Writeln('This end program click any key');
Readkey;
END.

Объяснение кода листинга программы

  1. Объявлены процедурные типы данных: Func, Proc
  2. Определены функции: Adds, Multiplys, Funny
  3. Определена процедура PrintTable
  4. В основной части программы вызываются функции и процедуры для вывода таблиц
  5. Завершается программа вызовом Readkey

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы