Меню сайта

Категории раздела
Готовимся к олимпиаде по программированию (задачи взяты с сайта http://olimpiada.com.ru) [36]
Решение олимпиадных задач по программированию
Готовимся к олимпиаде по математике [3]
Решение олимпиадных задач по математике

Мини-чат

Наш опрос
Уважаемый посетитель сайта, к какой категории вы себя относите?
Всего ответов: 5525

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Главная

Регистрация

Вход
Вы вошли как Гость | Группа "Гости" | RSS


Личный сайт учителя математики и информатики

Фоновой Натальи Леонидовны



Пятница, 29.03.2024, 15:20
Главная » Файлы » Внеурочная деятельность » Готовимся к олимпиаде по программированию (задачи взяты с сайта http://olimpiada.com.ru)

Площадь треугольника
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
Просмотров: 880 | Загрузок: 0 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Поиск

Кнопка сайта

Одна кнопка

время жизни сайта

Сайт участвует
конкурс сайтов 

Новости образовани

Фраза дня

Web-мастеру

OperaFirefoxGoogle ChromeDownload Master
QIPSkypeµTorrentTeamViewer
Dr.Web CureITAvira AntiVirTotal CommanderCDBurnerXP
PicasaIrfanViewCheMaxDAEMON Tools
AIMPKMPlayerBSplayerK-Lite Codec Pack

Установить себе такой Блок
Скрипты и HTML для uCOz

Раскрутка сайта
Graffiti Decorations(R) Studio (TM) Site Promoter

Copyright MyCorp © 2024
/td>