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

Дистанционное обучение

  Все выпуски  

Уроки и методика преподавания информатики для учителей задача про клад www.thl.narod.ru


Клад
Найти закопанный пиратами клад просто: всё, что для этого нужно - это карта. Как известно, пираты обычно рисуют карты от руки и описывают алгоритм нахождения клада так: "Встаньте около одинокой пальмы. Пройдите тридцать шагов в сторону леса, потом семнадцать шагов в сторону озера, …, наконец десять шагов в сторону большого булыжника. Клад находится под ним". Большая часть таких указаний просто сводится к прохождению какого-то количества шагов в одном из восьми направлений (1 - север, 2 - северо-восток, 3
- восток, 4 - юго-восток, 5 - юг, 6 - юго-запад, 7 - запад, 8 - северо-запад). Длина шага в любом направлении равна 1.
Путешествие по такому пути обычно является прекрасным способом посмотреть окрестности, однако в наше время постоянной спешки ни у кого нет времени на это. Поэтому кладоискатели хотят идти напрямую в точку, где зарыт клад.
Вам необходимо написать программу, которая по указаниям пиратов определяет точку, где зарыт клад.
Формат входных данных.Первая строка входного файла содержит число N - число указаний (140). Последующие N строк содержат сами указания - номер направления (целое число от 1 до 8) и количество шагов (целое число от 1 до 1000). Числа разделены пробелами.
Формат выходных данных.В выходной файл выведите координаты X и Y точки (два вещественных числа, разделённые пробелом), где зарыт клад, считая, что ось Ox направлена на восток, а ось Oy - на север. В начале кладоискатель должен стоять в начале координат. Координаты необходимо вывести с погрешностью не более 0.001.

Например:
input.txt
6
1 3
3 1
1 1
3 3
5 2
7 1
output.txt
3.000 2.000 input.txt
1
8 10
output.txt
-7.071 7.071

решение:

var i,a,b,n:longint; x,y,sq:real;
begin
assign(input,'input.txt'); reset(input);
readln(n); sq:=sqrt(2); x:=0; y:=0;
for i:=1 to n do
begin
readln(a,b);
case a of
1 : y:=y+b;
2 : begin x:=x+b/sq; y:=y+b/sq end;
3 : x:=x+b;
4 : begin x:=x+b/sq; y:=y-b/sq end;
5 : y:=y-b;
6 : begin x:=x-b/sq; y:=y-b/sq end;
7 : x:=x-b;
8 : begin x:=x-b/sq; y:=y+b/sq end;
end;
end;
assign(output,'output.txt'); rewrite(output);
writeln(x:0:3,' ',y:0:3); close(input); close (output);
end.

В избранное