Меню сайта
Категории раздела
Мини-чат
Наш опрос
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Площадь треугольника
13.02.2012, 08:58
Условие: Три непараллельные прямые заданы коэффициентами a, b и c. Коэффициенты а и b не могут быть одновременно равны нулю. Определить площадь треугольника, образованного этими прямыми с точностью до трёх знаков после запятой. Технические условия: В файле "input.txt" находятся коэффициенты a,b и c для трёх прямых - потри в каждой строке. В файл "output.txt" нужно вывести единственное число - значение площади образованного треугольника. Примеры входных и выходных файлов: Input.txt 0 1 1 1 0 1 4 3 19 Output.txt 6.000 Input.txt 1 0 0 0 1 0 1 1 2 Output.txt 2.000 Input.txt 1 -1 0 1 0 6 1 -2 0 Output.txt 9.000 Input.txt -1 1 1 1 -2 -2 0 1 4 Output.txt 4.500 Input.txt 1 -1 -1 2 -1 -1 1 2 17 Output.txt 7.500 Решение: {by Алексей Ильичёв [alex_z77@mail.ru]} {$A+,B-,D+,E+,F-,G+,I-,L+,N+,O-,P-,Q-,R-,S-,T-,V+,X+,Y+} {$M 16384,0,655360} var a1, a2, a3, b1, b2, b3, c1, c2, c3 : double; x1, x2, x3, y1, y2, y3 : double; vx1, vy1, vx2, vy2 : double; delta : double; begin {Читаем входные данные: } assign(input, 'input.txt'); reset(input); read(a1, b1, c1, a2, b2, c2, a3, b3, c3); close(input); {Вычисляем координаты точек методом Крамера. Так как прямые не параллельны, delta не равняется нулю: } {Точка пересечения 1-й и 2-й прямой: } delta := a1*b2-a2*b1; x1 := (c1*b2-c2*b1)/delta; y1 := (a1*c2-a2*c1)/delta; {Точка пересечения 2-й и 3-й прямой: } delta := a2*b3-a3*b2; x2 := (c2*b3-c3*b2)/delta; y2 := (a2*c3-a3*c2)/delta; {Точка пересечения 1-й и 3-й прямой: } delta := a1*b3-a3*b1; x3 := (c1*b3-c3*b1)/delta; y3 := (a1*c3-a3*c1)/delta; {Считаем координаты векторов, идущих из 1-й во 2-ю и из 1-й в 3-ю точки: } vx1 := x2 - x1; vy1 := y2 - y1; vx2 := x3 - x1; vy2 := y3 - y1; {Теперь мы можем посчитать искомую площадь треугольника как модуль половины векторного произведения полученных векторов (ну и сразу выводим в файл): } assign(output, 'output.txt'); rewrite(output); writeln(abs((vx2*vy1 - vx1*vy2)/2):0:3); close(output); end.
Категория: Готовимся к олимпиаде по программированию (задачи взяты с сайта http://olimpiada.com.ru) | Добавил: admin
Просмотров: 914 | Загрузок: 0
| Рейтинг: 0.0 /0
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]
Форма входа
Поиск
Кнопка сайта
Одна кнопка
время жизни сайта
Новости образовани
Фраза дня
Раскрутка сайта