Форум «Всё о Паскале» _ Задачи _ Задача с роботом.
Автор: DarkWishmaster 1.02.2011 23:06
Привет. Вот задача: Школьники играют с роботом, они хотят что-бы он заблудился, помогите роботу найти путь обратно максимум из 2 ходов: Например: N4 V2 E3 S6 N2 (Направления( Север, Запад, Восток. Юг)) ответ: что-бы найти путь обратно надо пойти: E1; ну вот что мне удалось сделать.
Program Robot; uses crt; var c:string; n,e,s,v,Sn,Se,Ss,Sv:integer; begin clrscr; writeln('INSTRUCTION'); writeln('Write STOP for cancel '); while c<>'STOP' do begin
Проблема в том что когда читаем данные то получаеться так: N 4 S 6 а надо что-бы всё в линию N4 S6 V2 и.т И ещё можете предложить более простой алгоритм. V Спасибо за ранее. 2 и.т
Автор: volvo 2.02.2011 1:02
Цитата
ответ: что-бы найти путь обратно надо пойти: E1;
Ответ неверный. Чтобы вернуться в исходную точку, надо пойти на запад, а не на восток. После всех описанных движений робот и так находится восточнее (восток - это вправо, запад - влево, возьми лист бумаги и начерти путь робота...), если он пойдет еще E1 - будет на 2 шага восточнее исходной позиции.
Цитата
И ещё можете предложить более простой алгоритм.
Более простой алгоритм - не заводить 4 переменные, а завести 2, и увеличивать/уменьшать их в зависимости от прочитанных данных. В результате получишь смещение по NS (север - юг), и по EW (восток - запад). Если NS < 0 - значит идти на N. Сколько шагов? Правильно, Abs(от_полученной величины_NS). То же самое касается и EW...
...(Показать/Скрыть)
Program Robot; uses crt;
const NorS: array[boolean] of char = ('S', 'N'); EorW: array[boolean] of char = ('W', 'E');
var c: char; ns, ew: integer; x: integer;
begin clrscr;
while true do begin writeln('INSTRUCTION'); writeln('Write STOP for cancel ');
ns := 0; ew := 0; while not eoln do begin read( c ); if c <> ' ' then begin {$I-} read(X); {$I+} if ioresult <> 0 then begin readln; exit; end;