Другие языки программирования и технологии

Помогите составить программу на паскале

Корабль может двигаться только по четырем направлениям: на север, на запад, на юг и на восток. Вывести на экран курс корабля после получения приказа. Кораблю можно подавать приказы следующих типов: вперёд, назад, влево, вправо.
Пусть первоначальное направление корабля − на север.
Тогда при команде:
— вперёд, он начинает двигаться на север
— назад − на юг (задний ход)
— влево, он поварачивает на запад
— вправо − на восток

Исходя из вышеописанных условий, можем сказать, что нам потребуется:
— переменная для хранения скорости корабля (если число будет отрицательным, значит корабль движется задним ходом)
— переменная, отвечающая за направление носа корабля.

var
Speed : Integer; { скорость }
Turn : Byte; { направление: 0 - на север, 1 - на запад, 2 - на юг, 3 - на восток }
begin
Speed := 0; Turn := 0; { вначале стоим носом на север }

end.

В задании не сказано будут ли отданы все приказы одновременно или по очереди.
Предположим, что все приказы отданы одновременно.
Тогда нужно ввести их в строковую переменную, не забыв рассказать пользователю компьютера как их вводить:

var

Commands : String; { приказы }
begin

WriteLn('Кораблю можно отдавать следующие команды: ');
WriteLn(' F - вперёд');
WriteLn(' B - назад');
WriteLn(' L - влево');
WriteLn(' R - вправо');
WriteLn('Любые прочие команды будут игнорироваться. ');
WriteLn;
WriteLn('Введите последовательность команд кораблю: ');
ReadLn(Commands);

end.

Теперь мы сможем проанализировать введённые данные и изменить скорость и направление корабля:
begin

for i := 1 to Length(Commands) do
case Commands[ i ] of
'f', 'F' : { вперёд } Speed := Speed + 1;
'b', 'B' : { назад } Speed := Speed - 1;
'l', 'L' : { влево } Turn := (Turn + 1) mod 4;
'r', 'R' : { вправо } Turn := (Turn + 3) mod 4;
end;

end.
− Почему при повороте я использую получения остатка от деления? — Если к Turn=3 прибавить 1, мы должны снова получить 0.
− Почему при повороте вправо вместо уменьшения на 1 я добавляю 3? — Во первых значение переменной не может быть меньше 0. А во вторых три поворота влево − это один поворот вправо…

Теперь нам остаётся только вывести полученный результат.
Но корабль в результате может двигаться как вперёд, так и назад, да ещё и в одном из четырёх направлениях.
Вынесем направления в массив строковых констант:

const
Course : array [0..3] of String[9] = ('на север', 'на запад', 'на юг', 'на восток');

Выведем курс корабля пользователю программы:


begin

if Speed < 0 then
WriteLn('Корабль движется задним ходом ', Course[(Turn + 2) mod 4], ' со скоростью ', -Speed, ' узлов. ')
else
WriteLn('Курс корабля ', Course[Turn], ' со скоростью ', Speed, ' узлов. ');
end.

Запустим несколько раз программу:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Кораблю можно отдавать следующие команды:
F - вперёд
B - назад
L - влево
R - вправо
Любые прочие команды будут игнорироваться.

Введите последовательность команд кораблю:
FFLBLBLBRF
Курс корабля на юг со скоростью 0 узлов.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Кораблю можно отдавать следующие команды:
F - вперёд
B - назад
L - влево
R - вправо
Любые прочие команды будут игнорироваться.

Введите последовательность команд кораблю:
FFLBLBLBRFf
Курс корабля на юг со скоростью 1 узлов.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Кораблю можно отдавать следующие команды:
F - вперёд
B - назад
L - влево
R - вправо
Любые прочие команды будут игнорироваться.

Введите последовательность команд кораблю:
FFLBLBLBRFbb
Корабль движется задним ходом на север со скоростью 2 узлов.
МО
Мырзахан Отемис
68 597
Лучший ответ
if word =' вперед' then writeln (' север ');аналогично с остальными
Денис Юдин
Денис Юдин
95 932