ilyachalov (ilyachalov) wrote,
ilyachalov
ilyachalov

Category:

Разбор симулятора системы из 4-х лифтов

Я уже писал два поста по программе-симулятору работы системы из нескольких лифтов (в примере их было 4) в многоэтажном здании (в примере — 20 этажей), приведенной в 13-й главе учебника Лафоре:

1. Ошибка в программе симуляции работы лифтов.
2. Разбор упражнения с лифтами.

В первом из этих постов я разобрал ошибку в тексте программы, приведенном в учебнике. Во втором — я разобрал задание учебника по улучшению алгоритма работы лифтов симулятора. Теперь же, в упражнении (проекте) 2 к 16-й главе учебника предлагается вернуться к этой программе-симулятору и составить по ее описанию из учебника (не заглядывая в код программы) диаграмму прецедентов и диаграмму классов, а затем на их основе написать заголовочный файл с описаниями классов.

Как обычно, в учебнике даны две отвратительнейшие иллюстрации, на этот раз бережно скопированные из оригинала. В данном случае это не помогло, в оригинале они тоже отвратительны: вносят путаницу в понимание читателем работы симулятора.

Вот первая из них, иллюстрирующая начальный экран программы:


Должно быть хотя бы что-то вроде такого:


А вот тут я выделил красной линией и номерами разные зоны экрана, имеющие значение при работе программы-симулятора:


(Ниже упоминаются коды символов, при этом имеется в виду Юникод.)

1. Зона диалога пользователя с программой-симулятором. В высоту она составляет 4 строки: первая строка сверху — пустая строка (отступ вниз от первого этажа симуляции), далее — 3 строки, в которых и идет диалог;

2. Зона номеров этажей;

3. Зона кнопок вызова лифта с конкретного этажа.

Тут нужно отметить, что лифты бывают разные. Лифтовая система попроще подразумевает одну кнопку, с помощью которой пассажир, находящийся на этом этаже, просто сообщает лифтовой системе, что на этом этаже ожидает клиент (клиенты).

Лифтовая система посложнее (наш случай) подразумевает две кнопки вызова лифта на этаже: «вверх» (на экране отображается символом «▲» с кодом U+25B2) и вниз (на экране отображается символом «▼» с кодом U+25BC). Эти кнопки не могут быть нажаты одновременно, можно нажать только какую-нибудь одну из них, сообщая лифтовой системе, что клиент с этого этажа собирается ехать либо вниз, либо вверх.

Вот как эти кнопки могут выглядеть в реальности:



На экране один из указанных символов отображается в зоне справа от номера соответствующего этажа. Этот символ («▲» или «▼») появляется после того, как клиент с этого этажа нажал соответствующую кнопку и стирается после того, как лифтовая кабина забрала клиентов с этого этажа.

4. Шахты лифтов. В этих зонах вверх и вниз двигаются кабины лифтов, перевозящие пассажиров (клиентов). Высота каждой шахты в строках равна количеству этажей в здании (в примере из учебника — 20 этажей). Ширина каждой шахты равна 5 позициям. Ширина кабины лифта равна 3 позициям.

Кабина лифта может отображаться на экране в трех вариантах:

███ — кабина лифта с закрытой дверью (три символа с кодом U+2588);
█ █ — кабина лифта с открытой дверью (U+2588, пробел, U+2588);
█○█ — кабина лифта с пассажирами в ней, приготовившимися к заказу этажей назначения (U+2588, U+263A, U+2588).

(Вообще-то, символ U+263A — незакрашенное улыбающееся лицо, но в ЖЖ данный символ отображается по-уродски: ☺, поэтому пришлось изобразить его кружком.)

Пустые позиции слева и справа от каждой лифтовой кабины оставлены для символа U+263A (незакрашенное улыбающееся лицо), обозначающего пассажиров (клиентов):

○███ — лифтовая кабина прибыла на этаж, с которого ее вызвали, пассажиры готовы к погрузке (незакрашенное улыбающееся лицо — слева от лифтовой кабины; 5 символов: U+263A, U+2588, U+2588, U+2588, пробел);

█ █○ — лифтовая кабина прибыла на этаж назначения, пассажиры выгружаются (незакрашенное улыбающееся лицо — справа от лифтовой кабины; 5 символов: пробел, U+2588, пробел, U+2588, U+263A).

5. Узкие зоны, каждая из которых относится к своей лифтовой кабине. Эти зоны представляют собой панели кнопок с номерами этажей, расположенные в лифтовых кабинах. С помощью этих панелей кнопок пассажиры выбирают этажи назначения. Вроде такого:



После погрузки пассажиров в лифтовую кабину программа запрашивает номера этажей назначения (их можно задать одновременно несколько, максимум — столько же, сколько и этажей в здании, за исключением этажа, на котором лифт находится сейчас). После окончания заказа этажей назначения напротив номера каждого из этажей назначения в указанной узкой зоне появляется значок — «■» (символ с кодом U+25A0) и лифтовая кабина начинает движение, исполняя заказы. Как только лифтовая кабина выгружает пассажиров на одном из этажей назначения, указанный значок напротив этого этажа стирается, а лифтовая кабина отправляется к следующему этажу назначения.
Tags: Образование, Программирование
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments