Научная статья на тему 'Алгоритм решения «Задачи о зачислении»'

Алгоритм решения «Задачи о зачислении» Текст научной статьи по специальности «Математика»

CC BY
259
28
i Надоели баннеры? Вы всегда можете отключить рекламу.
Область наук
Ключевые слова
ГРУППА ВСТУПИТЕЛЬНЫХ ИСПЫТАНИЙ / КАНДИДАТ ЗАЧИСЛЕНИЯ НА СПЕЦИАЛЬНОСТЬ / ПРЕТЕНДЕНТ ЗАЧИСЛЕНИЯ НА СПЕЦИАЛЬНОСТЬ / GROUP OF INTRODUCTORY TESTS / THE CANDIDATE OF TRANSFER ON A SPECIALITY / THE APPLICANT OF TRANSFER FOR A SPECIALITY

Аннотация научной статьи по математике, автор научной работы — Григорчук Сергей Евгеньевич

Рассматривается алгоритм задачи о зачислении в высшее учебное заведение по результатам Единого Государственного Экзамена с учетом различных групп вступительных испытаний, приоритетов поступления на специальность, минимальных проходных баллов по предметам групп вступительных испытаний и контрольным цифрам приема в вуз. Алгоритм реализован на основе базы данных Mirosoft Excel и языка программирования Visual Basic for Applications.

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

Algorithm of a «problem about transfer»

The algorithm of a problem about transfer in a higher educational institution by results of Uniform Graduation Examination in view of various groups of introductory tests, priorities of receipt on a speciality, the minimal lowest passing scores in subjects of groups of introductory tests and estimated figures of reception in high school is considered. The algorithm is realized on the basis of database Mirosoft Excel and programming language Visual Basic for Applications.

Текст научной работы на тему «Алгоритм решения «Задачи о зачислении»»

Алгоритм решения «задачи о зачислении»

С.Е. Григорчук

Постановка задачи о «зачислении» возникла в связи с проблемой зачисления абитуриентов в высшее учебное заведение (ВУЗ) на основании результатов единого государственного экзамена (ЕГЭ) по общеобразовательным предметам на различные направления подготовки (специальности). Согласно правилам приема в ВУЗ абитуриент имеет право подавать результаты ЕГЭ на несколько направлений подготовки (специальностей), причем направлениям подготовки (специальностям) могут соответствовать различные группы вступительных испытаний (ГВИ) и разное количество бюджетных мест, ограниченных контрольными цифрами приема.

Например, в 2013 году абитуриент мог подавать результаты ЕГЭ в Ростовский государственный строительный университет (РГСУ) на любые 3 направления подготовки (специальности) из 23 имеющихся, причем в предыдущие годы таких специальностей могло быть 5 или 9 из 48 доступных специальностей. Направления подготовки (специальности) делятся на группы вступительных испытаний по общеобразовательным предметам. Например, одним специальностям соответствует группа испытаний Русский язык, Математика, Физика (РМФ), другим - Русский язык, Математика, Обществознание (РМО), третьим - Русский язык, Математика, Информатика (РМИ), четвертым - Русский язык, Литература, Обществознание (РЛО), пятым - Русский язык, Математика, Профессиональный экзамен (РМП). Кроме того, надо учитывать право на прием без вступительных испытаний (победители или призеры олимпиад), на прием вне конкурса при условии успешного прохождения вступительных испытаний, свой конкурс на места целевого приема на специальность, причем не прошедшие целевой прием могут поступать на другие специальности.

При формировании суммарного балла для каждой группы вступительных испытаний учитывается, что количество баллов по общеобразовательному предмету или дополнительному вступительному испытанию (профессиональный экзамен) не может быть меньше минимального количества баллов, установленных ВУЗом или Федеральной службой по надзору в сфере образования и науки.

Исходными данными программы является база данных (таблица Microsoft Excel) с полями фамилия, имя, отчество, баллами ЕГЭ по общеобразовательным предметам и профессиональному экзамену, полями признаков вне конкурса, целевой прием, оригиналы документов, а также полями приоритетов специальностей поступления, в которых указано сокращенное название специальности данного приоритета. Количество приоритетов специальностей как говорилось выше, может быть 3 или выше в зависимости от правил поступления. Приоритеты специальностей заполняются последовательно, начиная со специальности 1 приоритета и возможно до специальности с последним приоритетом. Кроме того, исходными данными программы являются контрольные цифры приема на направления подготовки (специальности), включая количество мест целевого приема, и минимальные проходные баллы по общеобразовательным предметам и профессиональному экзамену.

До запуска основного алгоритма программы в базе данных должны быть образованы поля суммарного балла для всех групп вступительных испытаний (например, РМФ, РМИ, РМО, РЛО, РМП). Для каждого абитуриента подсчитываются только суммарные баллы групп вступительных испытаний согласно специальностей приоритетов, причем такая сумма подсчитывается, если балл каждого вступительного испытания группы не меньше минимального проходного балла по этому испытанию.

Для формирования отчета о зачислении алгоритм программы должен заносить результаты обработки в поля базы: приоритет в таблице зачисления на специальность, №таблицы зачисления на специальность, №строки в

таблице зачисления, №таблицы зачисления и строки для кандидата на зачисление по приоритету в таблице зачисления по количеству возможных приоритетов.

В начале алгоритма применяется для отчета о зачислении цикл заполнения мест по специальностям вне конкурса и целевого набора. Затем идет цикл формирования рабочих листов для каждой специальности с полями «Фамилия», «Имя», «Отчество», «балл профильного предмета специальности», «Оригинал документов», «суммарный балл группы вступительных испытаний», поля приоритетов специальностей, включая приоритет данной специальности. Эти поля выбираются из базы с помощью автофильтров только для записей, имеющих в одном из полей приоритетов специальностей данную специальность, не пустой суммарный балл группы вступительных испытаний специальности, исключая зачисленных вне конкурса и по целевому набору. Результаты отбора помещаются на лист специальности и сортируются по суммарному баллу группы вступительных испытаний специальности по убыванию, затем по баллу профильного предмета специальности по убыванию и по фамилии по возрастанию. Также добавляются новые поля результатов работы алгоритма: «приоритет зачисления на специальность», «№строки в таблице зачисления на специальность», «приоритет кандидата зачисления на специальность». Следующий шаг алгоритма цикл зачисления на каждую специальность с 1 приоритетом, исключая последнее место.

Далее идет цикл зачисления на оставшиеся места специальностей. Перебор специальностей осуществляется до тех пор, пока есть места на специальности и претенденты на них. В этом цикле применяется процедура обработки специальности, код которой на языке VBA (Visual Basic for Applications) приведен ниже. Кандидатами к зачислению на специальность назовем абитуриентов с одинаковыми суммарными баллами группы вступительных испытаний специальности и одинаковыми баллами профильного предмета специальности, претендующие на последнее место

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

Public xlРезультаты As Excel.Workbook 'файл с результатами экзаменов

Public ОстМест^) As Integer 'кол-во оставшихся мест по специальностям

Public НачНомТаб^) As Integer 'номер строки таблицы специальностей (1-

N), с которой начинается добавление данных

Public КолЗач As Integer 'кол-во зачисленных

Dim КолСтрСп^) As Integer 'кол-во строк специальности

Dim ТекСтрСп^) As Integer 'текущая строка специальности

Dim КолПрет^) As Integer 'кол-во мест претендентов по специальности

Dim НеПонСпец^) As Integer 'пока не понятно на счет зачисления текущего

претендента - 1, не исследована - 0 (1-N)

Dim Проход As Integer

'обработка специальности по приоритету

Sub ОбрСпец(Спец As String, n As Integer, ByVal pr As Integer)

Dim i As Integer, j As Integer, k As Integer, num As Integer, РезПоиск As Integer,

№тр As Integer, СпецПр As String

Dim wf As Excel.Worksheet 'рабочий лист специальности Dim wr As Excel.Worksheet 'рабочий лист не зачисляемой специальности Dim Фам As String, Имя As String, Отч As String, Орг As String, z As String Dim ТекФам As String, ТекИмя As String, ТекОтч As String Set wf = xlРезультаты.Worksheets(Спец) For i = ТекСтрСп^) To КолСтрСп(п) 'есть претенденты 1: If ОстМест^) = 0 Then Exit Sub z = wf.Cells(i, 10)

If z = "" Then 'рассмотреть на зачисление

СпецПр = wf.Cells(i, pr + 5).Value 'чтение специальности приоритета If СпецПр = Спец Then 'зачислить на эту специальность If ОстМест^) > 1 Then 'больше 1 места

2: Фам=wf.CeUs(Ц): Имя=wf.Cells(i,2): Dra^CeUs^, 3): Ор^^^^) If Орг = "" Then КолПрет^) = КолПрет(n) + 1 'увеличение претендентов wf.Cells(i, 10).Value = pr: wf.Cells(i, 11).Value = НачНомТаб^) НачНомТаб(n) = НачНомТаб(n) + 1: НеПонСпец^) = 0 ОстМест(n) = ОстМест^) - 1 'на одно место меньше ТекСтрСп^) = ТекСтрСп^) + 1: КолЗач = КолЗач + 1 For j = pr + 1 To 3 СпецПр = wf.Cells(i, j + 5).Value If СпецПр = "" Then Exit For 'j

'исключаем из рассмотрения на другую специальность за ней num = NumSpec(СпецПр): НеПонСпец(num) = 0 Set wr = xlРезультаты.Worksheets(СпецПр) For k = 2 To КолСтрСп(num) ТекФам=wr.Cells(k,1):ТекИмя = wr.Cells(k,2):ТекОтч = wr.Cells(k,3) If ТекФам = Фам And ТекИмя = Имя And ТекОтч = Отч Then

wr.Cells(k, 10) = 0: wr.Cells(k, 12) = pr: Exit For 'k End If Next k Next j

Else 'последнее место Select Case ФормКанд(Спец, n) 'есть кандидаты на специальность Case 0 'не было кандидатов на специальность GoTo 2 'зачислять последнего Case 1 'кандидаты на специальность ниже последнего зачисляемого ОстМест^) = 0

ТекСтрСп^) = ТекСтрСп^) + 1

If pr < 3 Then pr = pr + 1 Else Exit Sub

СпецПр = wf.Cells(i, pr + 5).Value 'чтение специальности

'следующего приоритета

If СпецПр = "" Then Exit Sub

Спец = СпецПр: n = NumSpec(СпецПр): НеПонСпец^) = 0: Exit Sub Case 2 'кандидаты на специальность выше последнего зачисляемого ОстМест^) = 0: ТекСтрСп^) = ТекСтрСп^) + 1 If Спец = "" Then Exit Sub: n = NumSpec(^^: Exit Sub Case 3 'возможны кандидаты на специальность If n<23 Then n=n + 1 Else n=1 'переход на следующую специальность Спец = ИмяСпец^): НеПонСпец(n) = 0: Exit Sub End Select End If 'конец последнего места Else 'другая специальность num = NumSpec(СпецПр)

If ОстМест(num) = 0 Then 'нельзя зачислить - нет мест 3: If pr < 3 Then

pr = pr + 1: GoTo 1 End If 'pr

Else 'есть места на другую специальность Фам = wf.Cells(i, 1): Имя = wf.Cells(i, 2): Отч = wf.Cells(i, 3) 'попадает ли в область зачисления 4: РезПоиск = ПоискМестаСпец(СпецПр, num, Фам, Имя, Отч, №тр) Select Case РезПоиск

Case 0 'не найден на специальности или не может быть зачислен на 'другую специальность Проход = 0: GoTo 3 Case 1 'на текущую специальность не зачислять НеПонСпец^) = 0 For j = pr + 1 To 3 СпецПр = wf.Cells(i, j + 5).Value If СпецПр = "" Then Exit For 'j

'исключаем из рассмотрения на другую специальность за ней num = NumSpec(СпецПр)

Set wr = xlРезультаты.Worksheets(СпецПр) For k = 2 To КолСтрСп(num)

ТекФам=wr.Cells(k,1): ТекИмя=wr.Cells(k,2): ТекОтч=wr.Cells(k,3) If ТекФам = Фам And ТекИмя = Имя And ТекОтч = Отч Then

wr.Cells(k, 10) = 0: wr.Cells(k, 12) = pr: Exit For 'k End If Next k Next j

ТекСтрСп^) = ТекСтрСп(n) + 1: Проход = 0 Case 2 'пока не попадает

НеПонСпец^) = 1: Проход = 0

ТекСтрСп^) = i: Спец = СпецПр: n = NumSpec(СпецПр) Exit For 'i Case 3 'до зачислить If Проход = 0 Then 'до зачислить на специальность ДоЗачис СпецПр, num, №тр - 1 GoTo 4 End If

НеПонСпец^) = 1: Проход = 0: Exit Sub End Select End If End If pr = 1

Else '0 - не зачислять, 1-3 - зачислен с приоритетом 1-3

ТекСтрСп^) = ТекСтрСп^) + 1 End If Next i End Sub

функция формирования кандидатов на место специальности

Function ФормКанд(Спец As String, n As Integer) As Integer возвращает 0 -нет кандидатов, 1 - есть ниже последнего зачисляемого, 2 - есть выше последнего зачисляемого, 3 - все кандидаты ниже под вопросом Function ПоискМестаСпец(Спец As String, n As Integer, Фам As String, Имя As String, Отч As String, ByRef №тр As Integer) As Integer возвращает 0 - не может быть зачислен, 1 - будет зачислен на эту специальность, 2 - не понятно,3 -пока неизвестно может ли быть зачислен на эту специальность (могут отпасть выше его по списку).

Литература:

1. Вирт Н. Алгоритмы и структуры данных [Текст] // М.: Мир, 1989. - 360 с.

2. Уокенбах, Джон. Excel 2010: профессиональное программирование на VBA.: [Текст] // М.: ООО "И.Д. Вильямс", 2012. — 944 с.

3. Кашаев С.М. Программирование в Microsoft Excel на примерах. [Текст] // СПб.: БХВ-Петербург, 2007. - 320 с.

4. Чернов А.В., Паращенко И.Г. Классификация моделей надежности программного обеспечения [Электронный ресурс] //«Инженерный вестник Дона», 2012, №4. - Режим доступа: http://www.ivdon.ru/magazine/archive/n4p2y2012/1319 (доступ свободный)

- Загл. с экрана. - Яз. рус.

5. Ильичева О.А. Технология логического моделирования и анализа сложных систем [Электронный ресурс] //«Инженерный вестник Дона», 2012, №4. - Режим доступа:

http://www.ivdon.ru/magazine/archive/n4p2y2012/1234 (доступ свободный)

- Загл. с экрана. - Яз. рус.

6. Good I.J., Crook J.F. The enumeration of arrays and a generalization related to contingency tables. [Текст] // Discrete Math.-1977-v.19, № 1.-P.23-45

7. М. Холл Комбинаторика [Текст] // М.: Мир, 1970. - 419 с.

8. Shooman M.L. Operational Testing and Software Reliability Estimation During Program Developments - IEEE Computer Society, 1973.

9. Мартин Р. Чистый код: создание, анализ и рефакторинг. [Текст] //Библиотека программиста. - СПб: Питер, 2010. - 464 с.

10. Levitin A. Introduction to The Design & Analysis of Algorithms [Текст] // Addison-Wesley, 2003. - p. 576.

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