Шрифт:
– Ограничитель – объект, заполняющий пространство между построенными блоками
Отображается символами
Каждый объект имеет свой статус. Точнее два статуса – для строки и для столбца. Ведь статусы строки и столбца могут не совпадать.
Например, на строке блок может быть построен, и тогда все его '*' имеют здесь статус 'сделан'. Если теперь посмотреть на столбцы, которые пересекают эти 'сделанные' '*', то они могут быть частью построенных или недостроенных блоков и значит иметь другой статус.
При инициализации все пустые клетки имеют статус 'старый'.
В памяти объекты представляют собой три массива одного размера.
Один массив – изображение, два других – статусы строк и столбцов.
Размер массивов: количество столбцов, умноженное на количество строк.
Программа пробегает линии, пытаясь нарисовать в ней объекты. Если это удалось, соответствующий объект изменяет свой статус строки и столбца. Вновь появившиеся объекты принимают статус 'новый'.
Перпендикулярная линия, получившая новый объект, изменяет статус
'старый' на 'активный'. Обрабатываются только линии со статусом
'активная'. Обработка заканчивается при возникновении ошибки или при отсутствии линий со статусом 'активная'.
Какие ошибки видит программа. во входных данных:
– введено не число на строке? ХХ, поз.? ХХ
– отсутствуют начальные записи "строк ХХ" или "столбцов ХХ"
– задано нулевое число строк/столбцов
– сумма размеров блоков для линии превышает ее размер
– число считанных строк/столбцов не соответствует указанному в начальных записях "строк ХХ/столбцов ХХ" при обработке:
– программа пытается поставить '*' на позицию, где стоит '-' и наоборот.
Есть ошибки, которые программа не видит. Если Вы измените любую цифру в меньшую сторону или вовсе опустите ее. Например:
Длина линии: 30
Вместо: 3,1,1,6.
Вы введете: 2,1,1,6 или 3,1,6 и это будет принято к обработке.
О статусах объектов.
'нитка' – в этот статус переходит ограничитель из статуса 'новый'.
Больше у ограничителя нет статусов. Сразу поставить 'нитку' невозможно, так как в этом случае линия не получит статус 'активная' и не будет обработана.
У блока есть несколько статусов:
'сделан_*' – означает, что блок построен. То есть имеет с обеих сторон ограничитель или начало/конец линии. По размеру и порядку в списке блоков точно соответствует конкретному блоку. Звездочка соответствует порядковому номеру блока в списке.
'фрагмент' – означает фрагмент, который может принадлежать любым блокам. Не имеет ограничителей или имеет его с одной стороны.
'условный_*_*' – Закрытый с обеих сторон блок. Но точно указать его принадлежность пока невозможно, так как в обрабатываемой линии есть другие блоки такого же размера. Звездочки соответствуют порядковым номерам, на которые похож блок. Как условные превращаются в 'сделан_*'? Например, если имеем список: 2,4,1,2,9,1,9 и в результате первичной обработки получили:
'условный_5_7', 'условный_5_7', то они преобразуются в 'сделан_5' и 'сделан_7'.
Другой пример: имеем список: 1,2,2,1,1,2
Пусть в результате обработки получено: 'условный_2_3',
'условный_2_3_6' они преобразуются в 'сделан_2' и 'условный_3_6'
'неизвестный' – ограниченный с обеих сторон блок. Он получен в результате обработки не текущей линии, а предыдущих обработок перпендикулярных линий и требует рассмотрения на предмет отнесения его к статусу 'условный_*_*' или 'сделан_*'.
'визуальный_*' – фрагмент, точно принадлежащий некому блоку. Не имеет ограничителей или имеет его с одной стороны. В отличие от
'фрагмента', 'визуальный_*' можно попробовать удлинить в одну или другую сторону или объединить несколько 'визуальных_*' с одинаковым номером в один.
Кроме обычного режима работы программы лучше предусмотреть еще два: пошаговый и отладочный.
В пошаговом режиме предварительно можно задать номер линии и номер прохода, на котором намечается остановить программу. Проход – это один полный цикл просмотра всех активных линий.
Пошаговый режим показывает картинку текущей линии со статусом каждой клетки до обработки и после нее.
Отладочный режим служит для того, чтобы задать конкретную длину линии, список блоков, расставить на линии любые объекты и посмотреть, как реагируют Ваши подпрограммы на конкретную ситуацию.
Рассказы о Ленине. Ленин и MS DOS.
Загружал однажды Ильич MS DOS. Грузит, грузит. Никак загрузить не может. Кликнул Кржижановского, главного по электричеству в стране
Советов.