Другие языки программирования и технологии
Помогите составить программу на паскале
Корабль может двигаться только по четырем направлениям: на север, на запад, на юг и на восток. Вывести на экран курс корабля после получения приказа. Кораблю можно подавать приказы следующих типов: вперёд, назад, влево, вправо.
Пусть первоначальное направление корабля − на север.
Тогда при команде:
— вперёд, он начинает двигаться на север
— назад − на юг (задний ход)
— влево, он поварачивает на запад
— вправо − на восток
Исходя из вышеописанных условий, можем сказать, что нам потребуется:
— переменная для хранения скорости корабля (если число будет отрицательным, значит корабль движется задним ходом)
— переменная, отвечающая за направление носа корабля.
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 узлов.
Тогда при команде:
— вперёд, он начинает двигаться на север
— назад − на юг (задний ход)
— влево, он поварачивает на запад
— вправо − на восток
Исходя из вышеописанных условий, можем сказать, что нам потребуется:
— переменная для хранения скорости корабля (если число будет отрицательным, значит корабль движется задним ходом)
— переменная, отвечающая за направление носа корабля.
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 узлов.
if word =' вперед' then writeln (' север ');аналогично с остальными
Похожие вопросы
- Помогите составить программу на паскале!
- помогите составить программу в паскаль, плиз
- помогите составить программу на паскале используя массив:
- помогите составить программу на паскале, срочно..
- Помогите составить программу в паскали..
- помогите пожалуйста составить программу в паскале
- найти все семизначные числа, которые делятся на 15 и записываются только цифрами 0 и 1. Составить программу на паскале
- Помогите пожалуйста составить программу на Паскале, используя оператор case
- Составить программу в паскаль
- помогите с программами в паскале