Объединить два цикла for в один на Pascal

программирование pascal модель лифта

procedure level_up;
begin
if key=true then
motors:=true;
Randomize;
level_need:=Random(level_all+1);
writeln('Лифт движется на ', level_need, ' этаж');
for level_now:=level_now+1 to level_need do
begin
delay(1000); {ожидание}
write(level_now, ' ');
end;

end;

procedure level_down;
begin
if key=true then
motors:=true;
Randomize;
level_need:=Random(level_all);
writeln('Лифт движется на , level_need, ' этаж');
for level_now:=level_now-1 downto level_need do
begin
delay(1000);
write(level_now, ' ');
end;

end;

Это кусок моей скромной модели лифта. Вводится кол-во этажей, случайно выбирается один и лифт направляется туда.
Цикл for пишет, на каком этаже находится лифт в данный момент. Теоретически лифт должен двигаться вверх и вниз, на экране должно появляться что-то вроде "1 2 3 4" и " 4 3 2 1", поэтому я использую for ... TO ... do и for... DOWNTO ...do. Просто я не знаю, как ещё можно изменять счётчик.
Ответы:
Имхо, проще всего заменить for на while, введя дополнительную переменную для указания направления движения. То есть, что нибудь типа такого:
dir:= Sign(level_need - level_now);      // 1 — для движения вверх, -1 — вниз. (не помню, является ли Sign() стандартной функцией, или надо подключать модуль math)
while level_now <> level_need do
begin
  level_now := level_now + dir;  
  ...
  end;
type
 TDir = -1..1;
const
 drUp := 1;
 drDown := -1;


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

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

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.