Научная статья на тему 'Разработка программы составления временной сетки расписания на ЭВМ «Минск-1»'

Разработка программы составления временной сетки расписания на ЭВМ «Минск-1» Текст научной статьи по специальности «Математика»

CC BY
128
10
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Разработка программы составления временной сетки расписания на ЭВМ «Минск-1»»

ИЗВЕСТИЯ

ТОМСКОГО ОРДЕНА ОКТЯБРЬСКОЙ РЕВОЛЮЦИИ И ОРДЕНА ТРУДОВОГО КРАСНОГО ЗНАМЕНИ ПОЛИТЕХНИЧЕСКОГО ИНСТИТУТА имени С. М. КИРОВА

Том 187 1974

РАЗРАБОТКА ПРОГРАММЫ СОСТАВЛЕНИЯ ВРЕМЕННОЙ СЕТКИ РАСПИСАНИЯ НА ЭВМ «МИНСК !»

Н. М. БЫЛИНО

(Представлена научным семинаром вычислительной лаборатории)

В настоящей работе дается описание методики кодирования исходной информации о расписании учебных занятий и программы составления временной сетки расписания на машине «Минск-1» согласно алгоритму, описанному в статье [1].

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

Для компактного заполнения памяти машины «Минск-1» лучше всего под каждый элемент отвести одну ячейку. Ячейка состоит из 31 разряда. В институте около 1200 преподавателей. Так как

210 — 1024 < 1200<2048 = 211,

то под код преподавателя нужно 11 двоичных разрядов. Из оставшихся 20 разрядов один используется для того, чтобы отмечать, с данной группой занят один преподаватель или два; один разряд — служебный, он используется в программе; 18 разрядов отводятся под группы. В ячейке, для удобства кодирования и перфорирования, разряды распределяются следующим образом: нулевой (знаковый)—для того чтобы отмечать, один преподаватель ведет занятие (тогда в знаковом- будет плюс) или вдвоем (тогда первый элемент кодируется положительным, а второй обязательно отрицательным, но с той же группой); разряды 1 —18 отводятся под группы; 19-й разряд — служебный, и 20—30 — под код преподавателя. Если кодируется занятие одной группы, то в элементе в разрядах 1 —18 будет одна единица в разряде, соответствующем взятой группе. Если же кодируется поточная лекция, то в разрядах 1 —18 будет столько единиц, сколько групп входит в данный поток. Если занятие во взятый период встречается несколько раз, то оно записывается одним и тем же выражением столько же раз. Такой способ кодировки позволяет записать в память машины учебную нагрузку для 18 групп.

Нагрузка записывается в том же порядке, как делается в бюро расписания: сначала кодируются все лекцш^ для всех .18 групп, затем все

лабораторные занятия и по иностранному языку для всех групп, а потом уже все практические занятия. При кодировании и записи на бланк машины код преподавателя сразу записывается в 8-ричной системе счисления (четыре восьмеричных цифры в колонке Аг), а группы легче всего записать в 2-ричной системе счисления, а потом 18 разрядов, разбив потриадно, записать шестью восьмеричными цифрами в колонках КОП и А{. Полученная информация в кодированной форме имеет следующий вид:

А коп А, А2

к+1 60 0177 0001

к + 2 17 7400 0007

к+3 40 0000 0016

к+4 —40 0000 0017

к+5 40 0000 0016

к + 6 —40 0000 0017

В ячейке к+1 закодирована лекция преподавателя с кодом 0001 для 1, 2, 12, 13, 14, 15, 16, 17, 18 из рассматриваемых 18 групп. В ячейках к + 3—к + 6 записаны два лабораторных занятия для 1-й группы. Задача сводится к тому, чтобы из данного множества {<х£} сформировать подмножества, называемые блоками, в которых коды групп и .коды преподавателей были бы совместны. Это значит, что коды групп не должны накладываться и коды всех преподавателей должны быть различными. Блок, в который вошли все 18 групп, называется полным. В противном случае блок называется неполным.

После того, как множество разбито на блоки, все блоки нужно разнести по временной сетке. Временная сетка состоит из 36 узлов. Расписание составлялось для групп дневного обучения, у них чаще всего по 3 пары часов в день, и на две недели. Отсюда

3 X 6 X 2=36.

Если групп больше, чем 18 (в институте их 441), то задача решается по частям. Решение второй части задачи, т.е. распределение пр временной сетке, усложняется, потому что при этом нужно учитывать занятость преподавателей в предыдущих группах.

В программе вопросы разбиения множества на блоки и распределения их по временной сетке решаются одновременно, т. е. формируется блок и сразу же заносится в одну из «временных ячеек», затем формируется новый блок и снова заносится в другую «временную ячейку» и т.д. (рис. 1).

Из-за ограниченной памяти машины занятия для 18 групп и «временные ячейки», куда заносятся коды всех преподавателей во всем институте, занятых в данное время, записываются на магнитную ленту в разные зоны. При решении задачи на одно и то же место в МОЗУ с магнитной ленты считываются, по мере надобности, то занятия (при формировании блока), то «временные ячейки» (при разнесении блоков по временной сетке).

В программе есть рабочая ячейка, в которой в 1—18 разрядах накапливаются группы элементов, входящих в блок, и рабочие ячейки, где запоминаются коды преподавателей, ведущих эти занятия. В каждом элементе есть служебный разряд 19-й, в котором отмечается, вошел элемент в один из блоков или нет.

Для формирования блока перебираются, начиная с первого, элементы, не входящие в другие блоки. В найденном элементе выделяются груп-

пы и код преподавателя и сравниваются с содержимым соответствующих рабочих ячеек. Если группы или коды преподавателей оказались совместны, то элемент остается свободным. Переходим к новому элементу. Если же группы и коды преподавателей несовместны, то группа и код преподавателя данного элемента присоединяются к группам и кодам преподавателей рабочих ячеек и отмечается, что элемент вошел в блок, т.е. в его 19-м разряде записывается «1», а сам элемент печатается. Переходят к следующему свободному элементу. И так до тех пор, пока в 1—18 разрядах соответствующей рабочей ячейки не будут стоять все единицы, т. е. пока не будет блок полным.

^Считывание Элементоб с ленты

да

Отыскание

свободного

элемента

/со*

X

Элемент {совместен с форм\ рующипся &лриом?

Элемент V

±

Печать элемента

<

БлоХ

ПОЛНЫЙ ?

Тдо

Запись элементов но ленту

1

Считыйание Временных ячееи с _ ленты

временная ячейЖз\ нся^одУО дит // 5ло*!у?/

ТЭа

6лом! V Временная ячейка ячейка

Запись Времен ныл ячее*! на ленту \

Печать Времени занятий

ИнтерВал

1. Краткая блок-схема программы

После этого все множество занятий записывается на магнитную ленту, а на это место в МОЗУ с магнитной ленты считываются те «временные ячейки», в соответствующие часы которых данные группы не заняты. Коды преподавателей считанной «временной ячейки» сравниваются со всеми кодами преподавателей вновь сформированного блока до тех пор, пока не найдется «временная ячейка», в которую можно записать данные коды преподавателей. «Временные ячейки» располагаются в следующем порядке: сначала все ячейки с 9 часов во все дни двух недель, потом все ячейки с 11 часов во все дни двух недель и т. д. Вся «временная ячейка» с вновь прибавленными кодами преподавателей записывается на магнитную ленту, а ее признак, означающий день и час занятий, печатается. И весь процесс начинает повторяться сначала.

Получается, что на печать выдаются все занятия блока, в конце всех занятий печатается «временная ячейка», в которую вошел блок. Блоки друг от друга отделяются интервалами. Результаты, отпечатанные на машине, имеют следующий вид:

6001770001 1774000007

А

0002000024 —0002000025 0000000011 6001770001

1776000000 0000000021 6001770007

1776000001 0000000012 6000000003 1776000001 0001770013 0000000022

Если блок неполный, это значит, что у недостающих групп в это время или окно, или же занятия на данный день кончились. Может случиться, что ни одна из «временных ячеек» к сформированному блоку не подходит: заняты или группы, или преподаватели. Тогда в конце блока печатается «0». Чтобы избежать этого, можно расширить временную-сетку, сделать ее не из 36, а из 48 узлов, т. е. по 4 пары занятий в день.. Все расписание составить заново для 48 «временных ячеек».

Видно, что эта задача требует большого объема памяти. Вся перерабатываемая информация записывается на магнитную ленту (650ю 31-разрядных ячеек для занятий одного факультета). Коды преподавателей, занятых в процессе обучения, записываются тоже на магнитную ленту (15360т 31-разрядных ячеек для 48 «временных ячеек»). Сама программа занимает 390ю ячеек. Из-за малого объема оперативной памяти машины «Минск-1» обращаться к ленте приходится очень часто (не менее 4 раз для одного блока). Скорость движения ленты мала по сравнению со скоростью работы машины. Поэтому брался самый простой случай — составлялось расписание для одного факультета, т. е. считалось, что преподаватели все свободны, на других факультетах не заняты. При этих условиях расписание для всех пяти курсов на машине составлялось около трех часов.

Для следующего факультета решение осложняется, потому что часть преподавателей будет занята на предыдущем факультете и время выбора подходящей «временной ячейки» для каждого нового блока увеличивается. Следовательно,, растет время решения и всей задачи. Если в институте 10 факультетов, то потребуется 35—40 часов непрерывной работы машины, чтобы составить расписание занятий только для групп дневного обучения.

Отсюда ясно, что эту задачу решать на машине «Минск-1» невыгодно. Решать задачу лучше на машине с большей оперативной памятью, чтобы как можно реже обращаться к магнитной ленте.

ЛИТЕРАТУРА

1. И. Э. Н а а ц. Вопросы алгоритмизации составления временной сетки расписав ния учебных занятий. (Настоящий сборник).

i Надоели баннеры? Вы всегда можете отключить рекламу.