МЕНЮ-ОБОЛОЧКА ДЛЯ БЕЙСИК-ПРОГРАММ


Представим себе такую ситуацию: учитель с каким-то классом закончил прохождение очередного раздела курса информатики. Он подводит итоги своей работы: что-то ему удалось, что-то нет. Но впереди уже новая тема: "Решение задач на компьютере". К ней он хочет подготовиться так, чтобы на уроках не было беспорядка, ученики четко знали свое дело, а задачи не придумывались бы накануне урока. Иначе говоря, ему требуется распланировать свою работу и в смысле содержания уроков, и в смысле их организации. Он и раньше старался это делать, но сейчас удобный момент для новой попытки. Учитель верит со свойственной человеку надеждой на лучшее: что не сбылось вчера, должно случиться завтра, - и справедливо полагает, что залог успеха в тщательной подготовке.

Прежде всего ему надо определить, какие задачи и в какой форме будут рассмотрены. В этой ситуации есть два пути. Можно самому подбирать весь необходимый материал, основываясь на своем опыте либо использовать имеющиеся методические рекомендации (Информатика. Теория, методика, задачи/Сост. Н.Д.Угринович. МИПКРО, 1991 г.).

Выберем второй вариант. В указанной методичке рассматриваются шестнадцать задач, с решениями в виде программ на Бейсике. Все они разделены на четыре группы. Это математические и информационно-логические задачи, моделирование динамических процессов и имитация сложных систем.

Когда список задач определен, учителю следует подумать о способе организации занятий. Часть задач будет представлена ученикам для самостоятельной работы, а часть - в виде готовых программ, подлежащих совместному с учителем разбору. При этом возникает целый ряд проблем. Где будут храниться файлы с этими программами и каков будет порядок доступа к ним? Как отслеживать результат деятельности учеников? Возможно ли ускорить процесс написания программ за счет уменьшения времени на рутинную работу?

Решить эти вопросы поможет предлагаемая вниманию читателей газеты специальная программа - оболочка "Меню задач". Она функционирует в среде QBasic для IBM-совместимых компьютеров, но ее идею и реализацию можно перенести и на другую технику, поскольку в тексте почти не содержится специфических операторов. В частности, оболочка давно уже опробована автором в работе на компьютере Агат.

"Меню задач" выполняет следующие действия:

- выводит на экран монитора заставку со списком задач;

- позволяет с помощью клавиш-стрелок выбирать из этого списка нужную;

- запускает в работу программу для выбранной задачи;

- сообщает об отсутствии таковой, если она еще не написана;

- выдает на экран заготовку-шаблон для написания новой программы.

При его работе экран монитора выглядит следующим образом:


МЕНЮ ТИПОВ ЗАДАЧ

blank.bas- заготовка для новой программы

аlfa.bas - математические задачи

beta.bas - моделирование динамических процессов

gamma.bas - имитация сложных систем

delta.bas - информационно-логические задачи

Выбор - стрелки ВВЕРХ/ВНИЗ

Запуск - ENTER Выход - ESC


Для выбора предложены пять файлов - четыре подменю отдельных типов задач и заготовка-шаблон для новой программы. Если ученик захочет просмотреть список математических задач, он переведет указатель на третью строку и, нажав Enter, попадет в соответствующее подменю, из которого можно будет обратиться к конкретной задаче либо вернуться обратно в меню типов задач. Если же он собирается писать новую программу, то, оставаясь в первой строке, нажмет Enter и получит чистый бланк для работы.

Рассмотрим подробнее, как используется оболочка в классе. Для каждого ученика отводится своя область во внешней памяти компьютера, будь то отдельная дискета или отдельный каталог на винчестере, сетевом или автономном. В этой области находятся все файлы оболочки: это главное меню menu.bas, затем четыре файла подменю аlfa.bas, beta.bas, gamma.bas, delta.bas, и, наконец, файл с шаблоном blank.bas.

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

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


МАТЕМАТИЧЕСКИЕ ЗАДАЧИ (alfa)

menu.bas - возврат в главное меню

graph.bas - построение графика функции

half.bas - метод половинного деления

tangent.bas - метод касательных

integral.bas - численное интегрирование

monte.bas - метод Монте-Карло

Выбор - стрелки ВВЕРХ/ВНИЗ

Запуск - ENTER Выход - ESC


За каждой из задач закрепляется определенное название. Список всех запланированных задач, их количество и имена дисковых файлов, где будут храниться соответствующие им программы, легко могут быть изменены учителем, поскольку вся эта информация компактно расположена в блоке операторов data подменю. Тем самым оболочка может быть оперативно подстроена под конкретный класс и даже под конкретного ученика.

На очередном уроке ученику не требуется помнить, какие задачи он уже решил, а какие нет, а также в каких файлах хранятся его программы. Ему достаточно лишь запустить в работу оболочку, после чего все переходы от меню к подменю, а от него к конкретной задаче будут совершаться автоматически. Так, в рассматриваемом примере, когда будет выбрано численное интегрирование, то произойдет запуск соответствующей программы, при условии, что файл с указанным именем integral.bas присутствует на диске, либо в данном пункте подменю появится мигающая надпись "Этой программы еще нет!"

Если задача integral.bas уже решена и ее программа запущена в действие, с ней можно поступать по всем правилам среды программирования QBasic - остановить, просмотреть ее текст, отредактировать его, снова запустить в работу, отладить и т.д. и, наконец, выйти обратно в меню.

Если же файла integral.bas нет на диске (в данном каталоге) и появилась упомянутая выше мигающая надпись, то ученик может перейти к другому пункту или, вернувшись в главное меню, заказать себе чистый бланк-заготовку для написания новой программы (файл blank.bas). Получив бланк, он заполняет его своим текстом, запускает в действие, отлаживает, корректирует, снова запускает и вообще работает как обычно в среде QBasic. Когда работа будет закончена, готовая программа записывается учеником в текущий каталог под именем integral.bas и тем самым интегрируется в оболочку. Вся система будет наращиваться по мере увеличения числа наполняющих ее элементов. Для того чтобы можно было запускать оболочку в работу не из среды программирования QBasic, а прямо из Norton Commander следует настроить его на обработку файлов с расширением bas.

Для тех, кто не умеет этого делать, приводим рецепт - надо найти в каталоге NC текстовый файл nc.ext или создать его, если такового там нет, и вписать в него следующую строчку:

bas:c:\dos\qbasic.exe/run !.!

Заготовка-шаблон представляет собой чистый бланк, куда однако, уже вписаны операторы Бейсика, которые обычно требуются для стандартного действия в каждой задаче. К числу этих действий относятся:

- подготовка пользовательского экрана (screen, color, cls);

- структурирование текста посредством подпрограмм (gosub, return);

- внесение комментариев (rem);

- выход обратно в меню задач по окончании работы.

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

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

Написав и отладив программу, ученик записывает ее на диск под заранее оговоренным именем, при этом новая задача автоматически интегрируется в среду оболочки.

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

Подводя итог, можно сказать, что оболочка "Меню задач" дает учителю удобное средство организации учебного процесса по одному из разделов школьного курса информатики. Более того, сам принцип сведения Бейсик-программ в меню-оболочку может быть использован и при изучении других тем курса, связанных с программированием на этом языке.

В качестве приложения ниже приводятся программные тексты двух файлов: главного меню (menu.bas) - чтобы учитель мог представить себе, как можно настраивать меню на другие списки задач посредством редактирования блока операторов data, и шаблона-заготовки (blank.bas) - для демонстрации предложенного стиля программирования.

Листинг файла MENU.BAS


' Основная программа "Меню типов задач"

GOSUB 200 ` Подпрограмма ввода исходных данных о типах задач

GOSUB 300 ` Подпрограмма рисования заставки с указателем

100 : GOSUB 400 ` Подпрограмма определения кода нажатой клавиши

GOSUB 500 ` Подпрограмма перехода в выбранное подменю

GOSUB 600 ` Подпрограмма перемещения указателя

GOTO 100 ` Повторный выбор

END ` Конец основной программы

200 : ` Ввод данных о типах задач

n = 4: m = 1 `n - количество типов задач

FOR i = 1 TO n + 2: READ name$(i): NEXT `заголовки типов

FOR i = 1 TO n + 2: READ y(i): NEXT `места на экране

FOR i = 1 TO n + 2: READ file$(i): NEXT `файлы подменю

`заголовки типов (всего n+2 заголовка)

DATA blank.bas - заготовка для новой программы

DATA _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

DATA alfa.bas - математические задачи

DATA beta.bas - моделирование динамических процессов

DATA gamma.bas - имитация сложных систем

DATA delta.bas - информационно-логические задачи

`расположение заголовков на экране

DATA 6,8,10,12,14,16

`имена файлов с подменю для каждого типа задач

DATA BLANK,,ALFA,BETA,GAMMA,DELTA

RETURN

300 : ` Рисование заставки

SCREEN 0: COLOR 11, 5: CLS

LOCATE 3, 21: COLOR 15, 2: PRINT " М Е Н Ю Т И П О В З А Д А Ч "

COLOR 11, 5: FOR i = 1 TO n + 2: LOCATE y(i), 20: PRINT name$(i): NEXT

LOCATE y(m), 16: PRINT "==>"

LOCATE 23, 5: PRINT "Выбор - стрелки "; : COLOR 15, 2: PRINT " вверх ";

COLOR 11, 5: PRINT " / "; : COLOR 15, 2: PRINT " вниз ";

LOCATE 23, 41: COLOR 11, 5: PRINT "Запуск - ";

COLOR 15, 2: PRINT " ENTER ": COLOR 11, 5

LOCATE 23, 60: PRINT "Выход - "; : COLOR 15, 2: PRINT " ESC ": COLOR 11, 5

RETURN

400 : ` Определение кода нажатой клавиши

k$ = "": WHILE k$ = "": k$ = INKEY$: WEND

IF LEN(k$) > 1 THEN k = ASC(RIGHT$(k$, 1)) + 300 ELSE k = ASC(k$)

IF NOT (k = 372 OR k = 380 OR k = 13 OR k = 27) THEN GOTO 400

RETURN

500 : Переход в выбранное подменю

IF k = 27 THEN COLOR 7, 0: CLS : SYSTEM `выход из меню по Esc

IF k = 13 THEN RUN file$(m) + ".bas" `переход по Enter

RETURN

600 : ` Перемещение указателя

SELECT CASE k

CASE 372

m = m - 1: IF m = 2 OR m < 1 THEN m = 1

CASE 380

m = m + 1: IF m = 2 THEN m = 3

IF m > n + 2 THEN m = n + 2

END SELECT

FOR i = 1 TO n + 2: LOCATE y(i), 16: PRINT " ": NEXT

LOCATE y(m), 16: PRINT "==>"

RETURN

Листинг файла BLANK.BAS


' Главная программа " Чистый бланк "

GOSUB 200 'Подпрограмма начальных установок

GOSUB 300 'Подпрограмма

GOSUB 400 'Подпрограмма

GOSUB 500 'Подпрограмма

GOSUB 600 'Подпрограмма

GOSUB 700 'Подпрограмма

GOSUB 800 'Подпрограмма

GOTO 900 'Выбор режима работы с бланком

END ' Конец основной программы

200 : ' Начальные установки

SCREEN 0: COLOR 7, 0: CLS

RETURN

300 : '

RETURN

400 : '

RETURN

500 : '

RETURN

600 : '

RETURN

700 : '

RETURN

800 : '

RETURN

900 : 'Выбор режима работы

SCREEN 0: WIDTH 80: COLOR 7, 0: CLS

LOCATE 23, 5: PRINT "Новая программа - ";

COLOR 15, 2: PRINT " ПРОБЕЛ ": COLOR 7, 0

LOCATE 23, 33: PRINT "Возврат в меню - ";

COLOR 15, 2: PRINT " ENTER ": COLOR 7, 0

LOCATE 23, 60: PRINT "Выход - ";

COLOR 15, 2: PRINT " ESC ": COLOR 7, 0

DO: k$ = "": WHILE k$ = "": k$ = INKEY$: WEND: k = ASC(k$)

IF k = 32 THEN END

IF k = 27 THEN CLS : SYSTEM

IF k = 13 THEN RUN "menu.bas"

LOOP