rendered paste bodyprogram prog;
uses wincrt;
var
m1, m2, b1, b2: real;
x1, y1, x2, y2: real;
x3, y3, x4, y4: real;
x, y: real;
m1_inf, m2_inf: byte;
function readreal(s: string) : real;
var
temp: real;
begin
write('Enter ', s, ': ');
readln(temp);
readreal := temp;
end;
function getslope(x1, y1, x2, y2: real) : real;
begin
getslope := (y1 - y2) / (x1 - x2);
end;
function getintercept(x, y, m: real) : real;
begin
getintercept := y - (m*x);
end;
function gety(x, m, b: real) : real;
begin
gety := m1*x + b1;
end;
begin
m1_inf := 0;
m2_inf := 0;
m1 := 0;
m2 := 0;
x1 := readreal('x1');
y1 := readreal('y1');
x2 := readreal('x2');
y2 := readreal('y2');
x3 := readreal('x3');
y3 := readreal('y3');
x4 := readreal('x4');
y4 := readreal('y4');
if (x1 = x2) then begin
m1_inf := 1;
end
else begin
m1 := getslope(x1, y1, x2, y2);
b1 := getintercept(x1, y1, m1);
end;
if (x3 = x4) then begin
m2_inf := 1;
b2 := -1;
end
else begin
m2 := getslope(x3, y3, x4, y4);
b2 := getintercept(x3, y3, m2);
end;
if ((m1 = m2) and (b1 = b2)) or ((m1_inf = 1) and (m2_inf = 1) and (x1 = x3)) then begin
writeln('Infinite solutions');
end
else if (m1 = m2) or ((m1_inf = 1) and (m2_inf = 1)) then begin
writeln('No solution');
end
else begin
if (m1_inf = 1) then begin
x := x1;
m1 := m2;
b1 := b2;
end
else if (m2_inf = 1) then begin
x := x3;
end
else begin
x := (b2 - b1) / (m1 - m2);
end;
y := gety(x, m1, b1);
writeln('Intersection is at (', x:0:5, ', ', y:0:5, ')');
end;
end.