program LinRec; uses Graph; var x1, y1, x2, y2, x3, y3, x4, y4: integer;{Координаты} gd, gm, ec: integer;{Графика} k, b: real;{Коэффициенты уравнения} i: integer;{Счетчик цикла} vertical: Boolean;{Отрезок лежит на вертикальной линии} include: Boolean;{Попадание точки в область прямоугольника} begin {Ввод данных} WriteLn('...:::Прямоуголник и отрезок:::...'); WriteLn('Задайте фигуры'); WriteLn('Прямоугольник:'); WriteLn('Левый верхний угол:'); Write('x='); ReadLn(x1); Write('y='); ReadLn(y1); WriteLn('Правый нижний угол:'); Write('x='); ReadLn(x2); Write('y='); ReadLn(y2); WriteLn('Отрезок:'); WriteLn('Начало:'); Write('x='); ReadLn(x3); Write('y='); ReadLn(y3); WriteLn('Конец:'); Write('x='); ReadLn(x4); Write('y='); ReadLn(y4); {Расчеты} if x4 - x3 = 0 then begin k:= 0; b:= y3 - k*x3; vertical:= true; end else begin k:= (y4 - y3)/(x4 - x3); b:= y3 - k*x3; vertical:= false; end; {Инициализация графики} gd:= Detect; InitGraph(gd, gm, ' '); ec:= GraphResult; if ec <> grOk then begin WriteLn('Ошибка инициализации', GraphErrorMsg(ec)); Halt; end; {Рисование} SetColor(red); MoveTo(x3, y3); if not vertical then for i:= x3 to x4 do begin include:= ((i <= x2) and (i >= x1) and ((i*k + b) <= y2) and ((i*k + b) >= y1)); if include then MoveTo(i, round(k*i + b)) else LineTo(i, round(k*i + b)); end; if vertical and ((x3 >= x1) and (x3 <= x2)) then for i:= y3 to y4 do begin include:= (i <= y2) and (i >= y1); if not include then LineTo(x3, i) else MoveTo(x3, i); end; SetColor(blue); Rectangle(x1, y1, x2, y2); ReadLn; CloseGraph; end.