fork download
  1. program ideone;
  2. // Перед вами - WEB-среда разработки PascalABC.NET (версия 1.0, апрель 2011 г.).
  3. // Она основана на современном языке PascalABC.NET, совместимом с Turbo Pascal
  4. // и Delphi Pascal. Программа запускается на сервере, ввод-вывод передается по сети.
  5. // Программу можно опубликовать и ссылаться на нее в Интернете в виде
  6. // http://p...content-available-to-author-only...c.net/WDE/?file=имя_опубликованного_файла.pas
  7. // Зарегистрированные пользователи получают дополнительные возможности:
  8. // долговременное хранение своих программ, возможность работы с папками
  9. var
  10. c,d:integer;
  11.  
  12. procedure P(x,y:integer);
  13. begin
  14. y:=x+1;
  15. end;
  16.  
  17. procedure Q(x:integer; var y:integer);
  18. begin
  19. y:=x+1;
  20. end;
  21.  
  22. // procedure R(var x,y:integer);
  23. // begin
  24. // y:=x+1;
  25. // end;
  26.  
  27. begin
  28. c:=2; d:=0; P(sqr(c)+c,d); writeln(d);
  29. //c:=2; d:=0; Q(sqr(c)+c,d); writeln(d);
  30. //c:=2; d:=0; R(sqr(c)+c,d); writeln(d);
  31. end.
Success #stdin #stdout 0s 5316KB
stdin
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin, ExtCtrls, Buttons, Math;

type
  TFit = class(TForm)
    SX0: TShape;
    SY0: TShape;
    SPoint: TShape;
    SECoordX: TSpinEdit;
    SECoordY: TSpinEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    LResult: TLabel;
    BBExit: TBitBtn;
    procedure SECoordXChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    function PointInTriangle(px, py, x1, y1, x2, y2, x3, y3: Integer): Boolean;
  public
    { Public declarations }
  end;

var
  Fit: TFit;

implementation

{$R *.dfm}

function TFit.PointInTriangle(px, py, x1, y1, x2, y2, x3, y3: Integer): Boolean;
var
  area, area1, area2, area3: Double;
begin
  // Вычисляем площадь основного треугольника
  area := Abs((x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)) / 2;
  
  // Вычисляем площади трех подтреугольников
  area1 := Abs((x1 - px) * (y2 - py) - (x2 - px) * (y1 - py)) / 2;
  area2 := Abs((x2 - px) * (y3 - py) - (x3 - px) * (y2 - py)) / 2;
  area3 := Abs((x3 - px) * (y1 - py) - (x1 - px) * (y3 - py)) / 2;
  
  // Точка внутри треугольника если сумма площадей подтреугольников равна площади основного
  Result := Abs(area - (area1 + area2 + area3)) < 0.0001;
end;

procedure TFit.SECoordXChange(Sender: TObject);
var
  X, Y: Integer;
begin
  // Получаем координаты из SpinEdit
  X := SECoordX.Value;
  Y := SECoordY.Value;

  // Проверяем попадание в фигуру варианта 21
  // Центральный квадрат (10,10)-(15,15)
  if (X >= 10) and (X <= 15) and (Y >= 10) and (Y <= 15) then
  begin
    LResult.Font.Color := clGreen;
    LResult.Caption := 'Попала';
  end
  // Верхний левый треугольник (обычный) - вершины: (5,5), (10,5), (5,10)
  else if PointInTriangle(X, Y, 5, 5, 10, 5, 5, 10) then
  begin
    LResult.Font.Color := clGreen;
    LResult.Caption := 'Попала';
  end
  // Верхний правый треугольник (скругленный) - окружность в квадрате (15,5)-(20,10)
  else if (X >= 15) and (X <= 20) and (Y >= 5) and (Y <= 10) and
          (Sqr(X - 15) + Sqr(Y - 10) <= 25) then
  begin
    LResult.Font.Color := clGreen;
    LResult.Caption := 'Попала';
  end
  // Нижний левый треугольник (скругленный) - окружность в квадрате (5,15)-(10,20)
  else if (X >= 5) and (X <= 10) and (Y >= 15) and (Y <= 20) and
          (Sqr(X - 10) + Sqr(Y - 15) <= 25) then
  begin
    LResult.Font.Color := clGreen;
    LResult.Caption := 'Попала';
  end
  // Нижний правый треугольник (обычный) - вершины: (15,15), (20,15), (20,20)
  else if PointInTriangle(X, Y, 15, 15, 20, 15, 20, 20) then
  begin
    LResult.Font.Color := clGreen;
    LResult.Caption := 'Попала';
  end
  else
  begin
    LResult.Font.Color := clRed;
    LResult.Caption := 'Не попала';
  end;

  // Перемещаем точку на координатную плоскость
  SPoint.Left := SX0.Left + Round(X * (260 / 25)) - (SPoint.Width div 2);
  SPoint.Top := SY0.Top - Round(Y * (250 / 25)) - (SPoint.Height div 2);
end;

procedure TFit.FormCreate(Sender: TObject);
begin
  // Начальные настройки
  Caption := 'Попадание точки в фигуру (Вариант 21)';
  
  // Настройка координатных осей
  SX0.Left := 50;
  SX0.Top := 250;
  SX0.Width := 260;
  SX0.Height := 1;
  SX0.Brush.Color := clBlack;
  SX0.Pen.Color := clBlack;
  
  SY0.Left := 50;
  SY0.Top := 2;
  SY0.Width := 1;
  SY0.Height := 250;
  SY0.Brush.Color := clBlack;
  SY0.Pen.Color := clBlack;
  
  // Настройка точки
  SPoint.Width := 10;
  SPoint.Height := 10;
  SPoint.Shape := stCircle;
  SPoint.Brush.Color := clRed;
  SPoint.Pen.Color := clRed;
  
  // Начальное положение точки
  SECoordX.Value := 0;
  SECoordY.Value := 0;
  
  // Настройка SpinEdit
  SECoordX.MinValue := 0;
  SECoordX.MaxValue := 25;
  SECoordX.Increment := 1;
  
  SECoordY.MinValue := 0;
  SECoordY.MaxValue := 25;
  SECoordY.Increment := 1;
  
  // Настройка кнопки выхода
  BBExit.Kind := bkClose;
  BBExit.Caption := 'Выход';
  
  // Начальный результат
  LResult.Font.Color := clRed;
  LResult.Caption := 'Не попала';
end;

end.
stdout
0