Площадь треугольника - [3] уровень |
Условие :Три непараллельные прямые заданы коэффициентами a, b и c. Коэффициенты а и b не могут быть одновременно равны нулю. Определить площадь треугольника, образованного этими прямыми с точностью до трёх знаков после запятой. Технические условия: В файле "input.txt" находятся коэффициенты a,b и c для трёх прямых - потри в каждой строке. В файл "output.txt" нужно вывести единственное число - значение площади образованного треугольника. Примеры входных и выходных данных: Input.txt Output.txt 0 1 1 1 0 1 4 3 19 6.000 1 0 0 0 1 0 1 1 2 2.000 1 -1 0 1 0 6 1 -2 0 9.000 -1 1 1 1 -2 -2 0 1 4 4.500 1 -1 -1 2 -1 -1 1 2 17 7.500
Решение :var a1,a2,a3:integer; b1,b2,b3:integer; c1,c2,c3:integer; x1,x2,x3:real; y1,y2,y3:real; s,d1,d2,d3,p:real; f:text; begin assign(f,'input.txt'); reset(f); read(f,a1,b1,c1); read(f,a2,b2,c2); read(f,a3,b3,c3); close(f); {Находим координаты пересечения прямых 1 и 2 в общем и частных случаях} if (a1<>0) and (b1<>0) and (a2<>0) and (b2<>0) then begin y1:=(c2*a1-a2*c1)/(a1*b2-a2*b1);x1:=(c1-b1*y1)/a1;end; if (a1=0) and (b1<>0) and (a2<>0) and (b2<>0) then begin y1:=c1/b1;x1:=(c2*b1-b2*c1)/(a2*b1);end; if (a1<>0) and (b1=0) and (a2<>0) and (b2<>0) then begin x1:=c1/a1;y1:=(a1*c2-a2*c1)/(a1*b2);end; if (a1<>0) and (b1<>0) and (a2=0) and (b2<>0) then begin y1:=c2/b2;x1:=(b2*c1-b1*c2)/(a1*b2);end; if (a1<>0) and (b1<>0) and (a2<>0) and (b2=0) then begin x1:=c2/a2;y1:=(a2*c1-a1*c2)/(a2*b1);end; if (a1=0) and (b1<>0) and (a2<>0) and (b2=0) then begin y1:=c1/b1;x1:=c2/a2;end; if (a1<>0) and (b1=0) and (a2=0) and (b2<>0) then begin y1:=c2/b2;x1:=c1/a1;end; {Находим координаты пересечения прямых 2 и 3 в общем и частных случаях} if (a2<>0) and (b2<>0) and (a3<>0) and (b3<>0) then begin y2:=(c3*a2-a3*c2)/(a2*b3-a3*b2);x2:=(c2-b2*y2)/a2;end; if (a2=0) and (b2<>0) and (a3<>0) and (b3<>0) then begin y2:=c2/b2;x2:=(c3*b2-b3*c2)/(a3*b2);end; if (a2<>0) and (b2=0) and (a3<>0) and (b3<>0) then begin x2:=c2/a2;y2:=(a2*c3-a3*c2)/(a2*b3);end; if (a2<>0) and (b2<>0) and (a3=0) and (b3<>0) then begin y2:=c3/b3;x2:=(b3*c2-b2*c3)/(a2*b3);end; if (a2<>0) and (b2<>0) and (a3<>0) and (b3=0) then begin x2:=c3/a3;y2:=(a3*c2-a2*c3)/(a3*b2);end; if (a2=0) and (b2<>0) and (a3<>0) and (b3=0) then begin y2:=c2/b2;x2:=c3/a3;end; if (a2<>0) and (b2=0) and (a3=0) and (b3<>0) then begin y2:=c3/b3;x2:=c2/a2;end; {Находим координаты пересечения прямых 1 и 3 в общем и частных случаях} if (a1<>0) and (b1<>0) and (a3<>0) and (b3<>0) then begin y3:=(c1*a3-a1*c3)/(a3*b1-a1*b3);x3:=(c3-b3*y3)/a3;end; if (a1=0) and (b1<>0) and (a3<>0) and (b3<>0) then begin y3:=c1/b1;x3:=(c3*b1-b3*c1)/(a3*b1);end; if (a1<>0) and (b1=0) and (a3<>0) and (b3<>0) then begin x3:=c1/a1;y3:=(a1*c3-a3*c1)/(a1*b3);end; if (a1<>0) and (b1<>0) and (a3=0) and (b3<>0) then begin y3:=c3/b3;x3:=(b3*c1-b1*c3)/(a1*b3);end; if (a1<>0) and (b1<>0) and (a3<>0) and (b3=0) then begin x3:=c3/a3;y3:=(a3*c1-a1*c3)/(a3*b1);end; if (a1=0) and (b1<>0) and (a3<>0) and (b3=0) then begin y3:=c1/b1;x3:=c3/a3;end; if (a1<>0) and (b1=0) and (a3=0) and (b3<>0) then begin y3:=c3/b3;x3:=c1/a1;end; {Вычисляем длины трёх сторон треугольника} d1:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); d2:=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)); d3:=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)); {Находим полупериметр} p:=(d1+d2+d3)/2; {По формуле Герона вычисляем площадь} S:=sqrt(p*(p-d1)*(p-d2)*(p-d3)); assign(f,'output.txt'); rewrite(f); writeln(f,s:0:3); close(f); end. |