СПЕКТРУМ В ШКОЛЕ
ОРГАНИЗАЦИЯ СТРУКТУР ДАННЫХ В УЧЕБНЫХ ПРОГРАММАХ
Одна из задач, с которыми сталкивается программист, пишущий обучающие или экзаменующие программа состоит в том, чтобы включить в программу рисунки, схемы; чертежи, поясняющие учебный материал. Это может быть сделано разными способами. Можно, например, нарисовать нужные иллюстрации в графическом редакторе типа ARTSTUDIO ИЛИ ARTIST, сохранить их на ленте вместе с программой, загружать вместе с ней в отведенные участки памяти (LOAD ""CODE адрес, длина) и вызывать по мере необходимости. Но поскольку в "СПЕКТРУМе" каждый цветной экран занимает 6912 байтов, а черно-белый - 6144 байта, то такой подход довольно расточителен. Можно готовую картинку компрессировать с помощью специальной процедуры (одна из возможных приведена в этом номере), что дает возможность еще в 2-3 раза увеличить количество рисунков, находящихся в памяти компьютера, но предел все равно близок.
Очень часто фирмы, выпускающие программное обеспечение применяют следующий прием. Они отводят под изображение верхнюю треть экрана (восемь строк). Тогда рисунок, даже и не компрессированный, занимает лишь 2046 байтов в черно - белом варианте или 2304 в цветном, это уже лучше, и этим методом пользуются, если есть необходимость в большом количестве картинок с высоким разрешением, как например в игровых программах.
Другой способ исполнения несложных поясняющих схем на экране состоит в использовании графики пользователя (UDG). Правда, графические символы, задаваемые пользователем, могут быть вами уже заняты, например для изображения русских букв. Тогда вводят дополнительные банки UDG и переключают их по мере необходимости. Мы об этом еще будем писать в последующих выпусках.
Простейший и наиболее экономичный способ рисования несложных схем состоит в использовании операторов БЕЙСИКа:
PLOT - для изображения точек;
DRAW - для изображения линия и дуг окружностей;
CIRCLE- рисование окружностей;
PRINT - для печати текста на схемах.
Однако, если Вы, скажем, готовите экзаменационные билеты по физике и Вам их надо, например, 99 штук, каждый со своим рисунком, то можно представить, во что превратится программа. Это будет бесконечная путаница из PLOT, DRAW, . . . А если завтра Вам надо будет подготовить пакет билетов по химии, то всю программу придется переписывать сначала?
Вот здесь Вам и могут пригодиться наши предложения по организации структур данных, которые позволят хранить изображение в строке DATA очень рациональным использованием памяти. Более того, создавая новый пакет билетов по другому материалу, Вам придется менять в основном только строки DATA, остальная же часть программы остается без существенных изменений.
Предположим, Вам надо ввести следующую схему для расчета сопротивления цепи:
На базе такой схемы Вы можете организовать целую серию вопросов, меняя данные при R1 - R4 и анализируя ответ ученика.
Допустим, что в Вашей программе 99 разных схем и пусть для их хранения отведены строки, начиная с 8000, пусть приведенная схема имеет номер n=73. Тогда фрагмент программы будет выглядеть так: 1 DIM a(3)
996 LET n=73
997 RESTORE 8000+n*10
998 GO SUB 2000
999 STOP
Мы здесь поставили "заглушку". Вы же сможете организовать логику, как Вам надо.
2000 REM
Эта подпрограмма анализирует строку DATA, на которую указал оператор RESTORE и вызывает рисующие подпрограммы. Свою работу подпрограмма заканчивает, когда встретит символ "/", который должен быть последним в строке DATA. Переменная datnum указывает сколько числовых параметров должно быть введено. Например для оператора PLOT m, n -их два, а для CIRCLE m, n, r - три. 2010 CLS 2020 READ a$
2100 IF а$ <> "p" THEN GO TO 2200 2110 LET datnum=2 2120 GO SUB 3000
2200 IF a$ <> "l" THEN GO TO 2300 2210 LET datnum=2 2220 GO SUB 4000
2300 IF a$ <> "c" THEN GO TO 2400 2310 LET datnum=3 2320 GO SUB 5000
2400 IF a$ <> "d" THEN GO TO 2500 2410 LET datnum=3 2420 GO SUB 6000
2500 IF a$ <> "t" THEN GO TO 2600
2510 GO SUB 7000
2600 IF a$ = "/" THEN RETURN
Возврат в вызывающую программу, если нарисован весь рисунок.
2610 GO TO 2020
Возврат к изображению очередного элемента.
2700 REM подпрограмма вводит числовые параметры для операторов PLOT, DRAW, CIRCLE, PRINT AT.
2710 FOR i=1 TO datnum
2720 READ a(i)
2730 NEXT i
2740 RETURN
3000 REM изображается точка 3020 GO SUB 2700 3020 LET m=a(1) 3030 LET n=a(2) 3040 PLOT m, n
Подпрограмма напечатает точку в позиции экрана с координатами m,n, где m-координата по горизонтали (от 0 до 255), а n-координата по вертикали от 0 до 175.
3050 RETURN
4000 REM изображение линии
4010 GO SUB 2700
4020 LET m=а(1)
4030 LET n=а(2)
4040 DRAW m,n
4050 RETURN
5000 REM изображение окружностей
5010 GO SUB 2700
5020 LET m=a(l)
5030 LET n=a(2)
5040 LET r=a(3)
5050 CIRCLE m, n, r
RETURN
REM изображение дуг GO SUB 2700 LET m=a(1) LET n=a(2) LET alfa=a(3) DRAW m,n,alfa RETURN
REM Печать текста на экране, начиная с заданной позиции m, n, где m - номер строки от 0
до 21, а n - номер столбца от 0 до 31. GO SUB 2700 READ t$ LET m=a(1) LET n=a(2) PRINT AT m,n; t$ RETURN
REM здесь в строках DATA хранятся схемы, чертежи и рисунки для Вашей программы. DATA .......................
DATA "p",0,119, "l",30,0, "l",0,80, "l",20,0, "l",0,6, "l",32,0, "l",0,-12, "l",-32,0, "l",0,6
DATA "p",62,139, "l",40,0,"l",0,6, "l",32,0, "l",0, -12, "1", -32,0, "l",0,6 DATA "p",154,139, "l",20,0, "l",0,-20, "l",20,0, "l",0,6, "l",32,0, "l",0,-12, "l",-32,0,"1",0,6
DATA "p",226,119, "l",20,0, "p",30,119, "l",0,-20, "l",50,0, "l",0,6, "l",32,0, "l",0,-
12, "l",-32, 0, "l",0, 6, "p",112,99, "l",68,0, "l",0,20 DATA "t",2,7, "R1", "t",2,16, "R2", "t",5,25, "R3", "t",7,11, "R4", "t",14,6, "R1=...", "t",14,16, "R2=...", "t",16,6, "R3=...", "t",16,16, "R4=...", "t",16,11, "Rsum=?",
Тот подход к организации данных, который мы Вам здесь продемонстрировали, может пока показаться не очень удобным, но его преимущества раскроются, когда Вам надо будет ввести в программу другой рисунок и организовать на его базе серию учебных задач.
Предположим теперь что Вам надо проиллюстрировать задачу о бросании камня. Пусть рисунок к ней имеет номер n=74. Поменяйте в строке 996 значение n, а далее вся переделка сведется к тому, чтобы ввести несколько новых строк DATA.
8740 DATA "p",0,80, "l",255,0, "p",30,60, "l",180,0,-2, "p",120,30, "l",0,49, "p", 119, 127,
"p",121,127, "p",119,62, "Р",12,1,62, "p",50,80, "d",-10,13,1,2, "p",20,90, "l",20,20
8741 DATA "p",36,109, "p",39,108, "p",30,60, "1",0,-32, "р",210,80, "l",0,-32, "p", 30,50,
"l",160,0, "p",33,51, "p", 32,49, "p",208,51, "p",208,49
8742 DATA "Г,8,16,"Н=?", "t",14,14,"L=?", "t",10,7,"alfa=...", "t", 6, 0, "V=...", "/"
B строках с 1000 по 2000 Вы можете организовать ввод ответов от ученика, проверку их правильности и принятие решения. Решений может быть несколько. Если ответ верен, то либо дать поощрение, либо перейти к очередному вопросу, либо и то и другое вместе. Если неверен, то либо дать подсказку, например показать расчетную формулу, либо дать порицание. Все подсказки и пр. сообщения тоже должны храниться где-то в строках DATA и вызывать их надо с использованием оператора RESTORE перед READ.
Например:
RESTORE 9000+n*10+q
здесь n- номер билета, а q -флажок, который зависит от правильности ответа.
q=0 - ответ верен, поощрить.
q=1 - ответ неверен, дать вторую попытку и пожурить.
q=2 - ответ опять неверен, дать подсказку.
q=3 - ученик просто не знает материала, сделать вывод.
Организовать в таком духе диалог ученика и компьютера Вы сможете всего за несколько дней. Не ставьте для начала сверхзадач, и Вы увидите, что компьютер станет прекрасным инструментом в школе.
Мы не сомневаемся, что Вы сумеете найти новые более эффективные решения по структурированию данных. Мы специально ограничились не самыми головоломными примерами, чтобы разбудить Вашу творческую мысль, и если нам это удалось, то значит наша цель достигнута.
5060 6000 6010 6020 6030 6040 6050 6060 7000
7010 7020 7030 7040 7050 7060 6000 6010
6730
6731
6732
8733
8734