Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Олимпиадные задачи с решениями на Turbo Pascal


Служба Рассылок Subscribe.Ru
Олимпиадные задачи c решениями на Turbo Pascal

Олимпиадные задачи с решениями на Turbo Pascal


Рассылка проекта Sapisoft.By.Ru [#008]


Подписчиков на 30.01.2002 - 2245


Главная Программы Задачи Рассылки Гостевая книга Контакты

Здравствуйте!


  В пятом выпуске рассылки была опубликована задача "Площадь треугольника". В этом номере представляем более рациональное решение, присланое Алексеем Ильичёвым (alex_z77@mail.ru), а так же одну новую задачку.

Площадь треугольника  (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

Решение:
{$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.


Стрелки часов  (2 уровень)


Условие:
Циферблат механических часов имеет 12 часовых делений и 60 минутных. Вычислить угол между часовой и минутной стрелками часов, показывающих заданное время. Стрелки всегда показывают точно на деления циферблата, часовая стрелка передвигается на следующее деление через каждые 12 минут.

Технические условия:
Файл "input.txt" содержит время суток в виде hh:mm, где hh - часы, mm - минуты. Он не содерджит пробелов и пустых строк, часты и минуты задаются двумя десятичными знаками. Вывести в файл "output.txt" величину наименьшего угла между стрелками часов в градусах.

Примеры файлов:

Input.txt Output.txt
10:05 90

Решение:
var
f1,f2:text;
s:string;
h,m,code,c:integer;
hs,ms:string;
begin
assign(f1,'input.txt');
reset(f1);
read(f1,s);
close(f1);
hs:=s; delete(hs,3,3); val(hs,h,code);
ms:=s; delete(ms,1,3); val(ms,m,code);
h:=h*5+(m div 12);
if h-m>30 then c:=6*abs(60-h+m) else c:=6*abs(h-m);
if c>180 then c:=360-c;
assign(f2,'output.txt');
rewrite(f2);
write(f2,c);
close(f2);
end.


Рассылки проекта Sapisoft:


Новости проекта Sapisoft
Информация о выходе новых версий программ, и прочих обновлений на сайте.

Олимпиадные задачи с решениями на Turbo Pascal
Пишете программы на Turbo Pascal? Эта рассылка для Вас! Каждую неделю по одной новой задаче с олимпиад по информатике. Теория, методы решения задач, много полезной информации.

Уроки программирования на Turbo Pascal
Хотите стать Великим Программистом? Начните свой путь к вершине славы с изучения языка Turbo Pascal. Он как нельзя лучше подходит для начинающих программистов и в то же время используется для разработки сложных "профессиональных" программ.


Внимание! Полный список всех задач с решениями на Turbo Pascal доступен только на нашем сайте: http://sapisoft.by.ru.


Всегда рады видеть Вас на нашем сайте. Жду ваших предложений и замечаний, Шамис Алексей

Copyright © 2001-2002 by Shamis Alex.




http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное