Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2023, 14:17   #1
Student_Dead1nS1de
Пользователь
 
Регистрация: 12.01.2023
Сообщений: 19
По умолчанию FreePascal

Помогите, пожалуйста, переделать программу из PascalABC во ФриПаскаль.
uses Graph;

procedure RLine(x, y, x1, y1: real) := RLine(Round(x), Round(y), Round(x1), Round(y1));

function GetAngle(x, y, x2, y2: real): real;
begin
var angle := Abs(RadToDeg(ArcTan((y2 - y) / (x2 - x))));
if (x2 = x) and (y2 = y) then
Result := 0
else
if x2 > x then
if y2 > y then Result := angle else Result := 360 - angle
else
if y2 > y then Result := 180 - angle else Result := 180 + angle;
end;

function Distance(x, y, x1, y1: real) := Sqrt(Sqr(x1 - x) + Sqr(y1 - y));

var m: integer;
procedure Draw(x, y, x1, y1: real);
begin
var r := Distance(x, y, x1, y1);
if r < 4**m then
RLine(x, y, x1, y1)
else
begin
var angle := GetAngle(x, y, x1, y1);
var angleP := DegToRad(angle + 90);
var angleM := DegToRad(angle - 90);
r /= 4;
var dx := (x1 - x) / 4;
var dy := (y1 - y) / 4;
var xA := x + dx;
var yA := y + dy;
var xB := xA + dx;
var yB := yA + dy;
var xC := xB + dx;
var yC := yB + dy;
var x2 := xA + r * Cos(angleP);
var y2 := yA + r * Sin(angleP);
var x3 := xB + r * Cos(angleP);
var y3 := yB + r * Sin(angleP);
var x4 := xB + r * Cos(angleM);
var y4 := yB + r * Sin(angleM);
var x5 := xC + r * Cos(angleM);
var y5 := yC + r * Sin(angleM);
Draw(x, y, xA, yA);
Draw(xA, yA, x2, y2);
Draw(x2, y2, x3, y3);
Draw(x3, y3, xB, yB);
Draw(xB, yB, x4, y4);
Draw(x4, y4, x5, y5);
Draw(x5, y5, xC, yC);
Draw(xC, yC, x1, y1);
end;
end;
end.
Student_Dead1nS1de вне форума Ответить с цитированием
Старый 03.03.2023, 15:54   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Ну это задача посложнее чем из картофельного пюре приготовить картошку фри при отсутствии тегов [CODE][/CODE].

Код:
   uses Math, Graph;

   procedure RLine(x, y, x1, y1: real);
   begin
      RLine(Round(x), Round(y), Round(x1), Round(y1));
   end;

   function GetAngle(x, y, x2, y2: real): real;
   var angle: real;
   begin
      angle := Abs(RadToDeg(ArcTan((y2 - y) / (x2 - x)))); // Если x2 = x, тогда вы получите деление на 0. Это надо отдельно проверять.
      if (x2 = x) and (y2 = y) then
         Result := 0
      else
         if x2 > x then
            if y2 > y then Result := angle else Result := 360 - angle
         else
            if y2 > y then Result := 180 - angle else Result := 180 + angle;
   end;

   function Distance(x, y, x1, y1: real);
   begin
      Result := Sqrt(Sqr(x1 - x) + Sqr(y1 - y));
   end;

   var m: integer;

   procedure Draw(x, y, x1, y1: real);
   var
      r, angle, andleP, angleM, dx, dy, xA, yA, xB, yB, xC, yC, x2, y2, x3, y3, x4, y4, x5, y5: real;
   begin
      r := Distance(x, y, x1, y1);
      if r < Power(4, m)
         then RLine(x, y, x1, y1)
      else begin
         angle := GetAngle(x, y, x1, y1);
         angleP := DegToRad(angle + 90);
         angleM := DegToRad(angle - 90);
         r /= 4;
         dx := (x1 - x) / 4;
         dy := (y1 - y) / 4;
         xA := x + dx;
         yA := y + dy;
         xB := xA + dx;
         yB := yA + dy;
         xC := xB + dx;
         yC := yB + dy;
         x2 := xA + r * Cos(angleP);
         y2 := yA + r * Sin(angleP);
         x3 := xB + r * Cos(angleP);
         y3 := yB + r * Sin(angleP);
         x4 := xB + r * Cos(angleM);
         y4 := yB + r * Sin(angleM);
         x5 := xC + r * Cos(angleM);
         y5 := yC + r * Sin(angleM);
         Draw(x, y, xA, yA);
         Draw(xA, yA, x2, y2);
         Draw(x2, y2, x3, y3);
         Draw(x3, y3, xB, yB);
         Draw(xB, yB, x4, y4);
         Draw(x4, y4, x5, y5);
         Draw(x5, y5, xC, yC);
         Draw(xC, yC, x1, y1);
      end;
   end;
end.

Последний раз редактировалось macomics; 03.03.2023 в 16:37.
macomics вне форума Ответить с цитированием
Старый 04.03.2023, 20:37   #3
Student_Dead1nS1de
Пользователь
 
Регистрация: 12.01.2023
Сообщений: 19
По умолчанию

вот такую странную ошибку выдаёт (22,42) Fatal: Syntax error, ":" expected but ; found
Student_Dead1nS1de вне форума Ответить с цитированием
Старый 04.03.2023, 21:27   #4
Student_Dead1nS1de
Пользователь
 
Регистрация: 12.01.2023
Сообщений: 19
По умолчанию

macomics, вот такую странную ошибку выдаёт
(22,42) Fatal: Syntax error, ":" expected but ; found
Student_Dead1nS1de вне форума Ответить с цитированием
Старый 04.03.2023, 23:57   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
   function Distance(x, y, x1, y1: real): real;
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FreePascal Student_Dead1nS1de Помощь студентам 5 24.01.2023 17:24
FreePascal Student_Dead1nS1de Помощь студентам 4 13.01.2023 12:27
FreePascal Lazarus Liliya1993 Паскаль, Turbo Pascal, PascalABC.NET 6 10.12.2014 13:27
FreePascal Foxtrot_1 Паскаль, Turbo Pascal, PascalABC.NET 4 26.09.2009 20:01