INFOpudding - ИТ в образовании и не только
Вторник, 20.04.2021, 22:56
» Меню сайта
» Категории раздела
Учителю [1]
Разное [2]
Интересные факты [2]
Web-разработка [2]
Программное обеспечение [5]
Олимпиадные задания [6]
Сетевые технологии [1]
Программирование [2]
Здоровье [0]
» Статистика

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

» Форма входа
Главная » Статьи » Разное

Робот (решение задачи на Pascal)
Задание. Исполнитель робот перемещается по квадратному полю размером 50 на 50 клеток. Робот может выполнить следующие действия:
  • сделать шаг влево на одну клетку;
  • сделать шаг вправо на одну клетку;
  • сделать шаг вверх на одну клетку;
  • закрасить клетку.
Изначально робот находится в клетке с координатами (1;1). Необходимо написать программу, определяющую за какое минимальное число шагов робот закрасит заданные клетки. Число и координаты закрашиваемых клеток вводятся из файла Robot.in, результат записывается в файл Robot.out.
robot.in
robot.out
4
1 1
10 2
1 3
10 4
30
1
1 1
0
Решение:
Алгоритм решения задачи:
1) чтение данных из файла, задание начальных значений;
2)
проверяем есть ли не закрашенные клетки - если клеток нет переходим к п.7;
3)находим наименьшее y в котором есть клетка для закраски и перемещаемся роботом вертикально до y;
4) для данного у находим минимальный и максимальный х, соответствующие клеткам которые необходимо закрасить. Если в данной строке клетка для закрашивания одна, то максимальный и минимальный х совпадут.
5) находим наименьшее расстояние от текущей клетки до крайней левой и правой, закрашиваемой клетки, в данной строке. Идем сначала до ближайшей клетки, потом идем к дальней;
6) переходим к п 2;
7) вывод результата

Запись на языке программирования:
program robot;
var xmin,xmax,ymin:integer;
    x,y,h,i,k,n:integer;
    kx,ky:array[1..50] of integer;
    ft:text;
BEGIN
Assign(ft,'Robot.in');
Reset(ft);
Readln(ft,n);
for i:=1 to n do
begin
Read(ft,kx[i]);
Readln(ft,ky[i]);
end;
close(ft);
x:=1;y:=0;ymin:=50;h:=-1;k:=0;

while k<n do
begin
ymin:=50;
for i:=1 to n do  if (ky[i]<ymin) and (ky[i]>y) then ymin:=ky[i];
h:=h+abs(y-ymin);
y:=ymin;

xmin:=50;xmax:=1;
for i:=1 to n do
if ky[i]=y then
   begin
   k:=k+1;
   if kx[i]<=xmin then xmin:=kx[i];
   if kx[i]>=xmax then xmax:=kx[i];
   end;

if xmin=xmax then
   begin
   h:=h+abs(xmin-x);
   x:=xmin;
   end
             else
   if abs(xmin-x)>abs(xmax-x) then
      begin
      h:=h+abs(xmin-x)+2*abs(xmax-x);
      x:=xmin;
      end
   else
      begin
      h:=h+abs(xmax-x)+2*abs(xmin-x);
      x:=xmax;
      end;

end;
writeln('h=',h);
Assign(ft,'Robot.out');
Rewrite(ft);
writeln(ft,h);
close(ft);

END.



Категория: Разное | Добавил: anna (03.09.2011) | Автор: anna
Просмотров: 3506 | Комментарии: 3 | Рейтинг: 0.0/0
Всего комментариев: 1
0
1 алла   [Материал]
ширина прямоугольного участка земли 440 м , а длинна на 60 м больше.найдите площадь участка и выразите её в гиктарах.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
» Поиск
» Учебные заведения
Брянский государственный университет академика И.Г. Петровского Брянская государственная инженерно-технологическая академия
Copyright MyCorp © 2021|Бесплатный конструктор сайтов - uCoz