СПО в российских школах

Команда ALT Linux рассказывает о внедрении свободного программного обеспечения в школах России
Декабрь 31, 2010

BASIC-256 Глава 9

Методические материалы
Автор: Владимир Черный

Продолжаем публиковать перевод книги Джеймса Рено. Эту главу перевел Сергей Ирюпин.
Оглавление:

Где взять BASIC-256

Глава 9: Подпрограммы — повторное использование кода

В это граве мы рассмотрим создание специальных меток в коде и переход к этим меткам. Это позволит программе выполнять код в более сложном порядке. Мы также познакомимся с подпрограммами. Обращение к подпрограмме, gosub, действует подобно переходу к метке, но при этом с возможностью вернуться назад.

Метки и оператор goto

В седьмой главе мы видели, как использовать конструкции языка BASIC-256 для организации циклов. В программе 49 показан пример бесконечного цикла, с использованием метки и оператора goto.

1 # gotodemo.kbs
2 top:
3 print "Ку-ку"
4 goto top

Программа 49: Goto с меткой

Ку-ку
Ку-ку
Ку-ку
… повторяет бесконечно

Пример вывода программы 49: Goto с меткой

метка:
Метка позволяет вам дать название определенному месту в программе для того, чтобы вы смогли туда перейти во время выполнения программы. Меток в программе может быть много.
Имя метки должно заканчиваться двоеточием (:), в строке с меткой не должно быть других операторов, имя метки должно начинаться с буквы и содержать латинские буквы и цифры с учетом регистра букв. Кроме того, нельзя использовать зарезервированные слова BASIC-256 или используемые имена переменных (см. приложение I).
Примеры правильных имен меток: top:, far999:, About:.
goto метка
Оператор goto осуществляет переход к оператору, следующему непосредственно за меткой.

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

Давайте рассмотрим другой пример использования метки и оператора goto. В программе 50 мы создадим красочные
часы.


1 # textclock.kbs
2 fastgraphics
3 font "Tahoma", 20, 100
4 color blue
5 rect 0, 0, 300, 300
6 color yellow
7 text 0, 0, "Мои часы:"
8 showtime:
9 color blue
10 rect 100, 100, 200, 100
11 color yellow
12 text 100, 100, hour + ":" + minute + ":" + second
13 refresh
14 pause 1.0
15 goto showtime

Программа 50: Цифровые часы

Пример вывода программы 50: Цифровые часы (фрагмент)

hour или hour()
minute или minute()
second или second()
month или month()
day или day()
year или year()
Функции year, month, day, hour, minute и second возвращают соответствующие значения системных часов. Они позволят вашей программе сказать который час.

year Возвращает 4 цифры текущего года.
month Возвращает номер месяца от 0 до 11. 0 — январь, 1 — февраль … 11 — декабрь.
day Возвращает текущий день от 1 до 28, 29, 30 или 31.
hour Возвращает текущий час от 0 до 24 в 24 часовом формате
minute Возвращает минуты от 0 до 59 текущего часа.
second Возвращает секунды от 0 до 59 текущей минуты.

Повторное использование кода — оператор Gosub

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

Программа 51 показывает пример подпрограммы, которая вызывается три раза.


1 # gosubdemo.kbs
2 gosub showline
3 print "Привет"
4 gosub showline
5 print "всем"
6 gosub showline
7 end
8
9 showline:
10 print "------------------"
11 return

Программа 51: Подпрограмма


------------------
Привет
------------------
всем
------------------

Вывод программы 51: Подпрограмма

gosub метка
Оператор gosub обеспечивает переход к подпрограмме, обозначенной меткой.
return
Выполнение оператора return в подпрограмме передает управление обратно — туда, откуда была вызвана подпрограмма.
end
Прекращение выполнения программы (стоп).

Теперь, когда мы увидели подпрограммы в действии, давайте напишем новую программу цифровых часов, используя подпрограмму для лучшего форматирования времени и даты (программа 52).

1 # textclockimproved.kbs
2
3 fastgraphics
4
5 while true
6 color blue
7 rect 0, 0, graphwidth, graphheight
8 color white
9 font "Times New Roman", 40, 100
10
11 line$ = ""
12 n = month + 1
13 gosub addtoline
14 line$ = line$ + "/"
15 n = day
16 gosub addtoline
17 line$ = line$ + "/"
18 line$ = line$ + year
19 text 50,100, line$
20
21 line$ = ""
22 n = hour
23 gosub addtoline
24 line$ = line$ + ":"
25 n = minute
26 gosub addtoline
27 line$ = line$ + ":"
28 n = second
29 gosub addtoline
30 text 50,150, line$
31 refresh
32 end while
33
34 addtoline:
35 # добавляем два цифры в строку line$
36 if n < 10 then line$ = line$ + "0"
37 line$ = line$ + n
38 return

Программа 52: Цифровые часы — усовершенствованные

Пример вывода программы 52: Цифровые часы — усовершенствованные (фрагмент)

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


1 # roll2dice.kbs
2 clg
3 total = 0
4
5 x = 30
6 y = 30
7 roll = int(rand * 6) + 1
8 total = total + roll
9 gosub drawdie
10
11 x = 130
12 y = 130
13 roll = int(rand * 6) + 1
14 total = total + roll
15 gosub drawdie
16
17 print "вы выбросили " + total + " очков."
18 end
19
20 drawdie:
21 # используем: x,y — левый верхний угол, roll — число очков
22 # рисуем куб 70x70 с точками 10x10 пикселей
23 color black
24 rect x,y,70,70
25 color white
26 # верхний ряд
27 if roll <> 1 then rect x + 10, y + 10, 10, 10
28 if roll = 6 then rect x + 30, y + 10, 10, 10
29 if roll >= 4 and roll <= 6 then rect x + 50, y + 10, 10, 10
30 # средний ряд
31 if roll = 1 or roll = 3 or roll = 5 then rect x + 30, y + 30, 10, 10
32 # нижний ряд
33 if roll >= 4 and roll <= 6 then rect x + 10, y + 50, 10, 10
34 if roll = 6 then rect x + 30, y + 50, 10, 10
35 if roll <> 1 then rect x + 50, y + 50, 10, 10
36 return

Программа 53: Большая программа — бросаем два кубика

Примера вывода программы 53: Большая программа — Бросаем два кубика

============================

Где скачать BASIC-256:

Для дистрибутивов ALT Linux

Windows версия
http://basic256.org (http://www.sourceforge.net/projects/kidbasic)

Как установить BASIC-256 в Linux

Для Альт Линукс: настроить репозиторий и обновить/установить пакет через synaptic или apt
Для rpm-based дистрибутивов: rpm -Uvh <имя_пакета>.rpm

Оставьте комментарий