Var
  X1, Y1, X2, Y2, X3, Y3, X4, Y4, D, D1: Real;
function F(X, Y, X1, Y1, X2, Y2: Real): Real;
begin
  F := (X-X1)*(Y2-Y1)-(Y-Y1)*(X2-X1);
end;
begin
  Repeat
    Write('Введите координаты начальной и конечной точек пути:');
    ReadLn(X1, Y1, X2, Y2);
    Write('Введите координаты концов стены:');
    ReadLn(X3, Y3, X4, Y4);
    D := F(X3, Y3, X1, Y1, X2, Y2);
    D1 := F(X4, Y4, X1, Y1, X2, Y2);
    if (D=0)and(D1=0) then
      WriteLn('Точки лежат на одной прямой. Повторите.');
  until (D<>0)or(D1<>0);
  if D*D1>0 then
    WriteLn('Можно идти по прямой.')
   else
    begin
      D := F(X1, Y1, X3, Y3, X4, Y4);
      D1 := F(X2, Y2, X3, Y3, X4, Y4);
      if D*D1=0 then
        WriteLn('Начальная или конечная точка пути на стене.')
       else
        if D*D1>0 then
          WriteLn('Можно идти по прямой.')
         else
          WriteLn('Надо обходить стену.');
    end;
end.