program 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.