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

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

BASIC-256 Глава 7

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

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

Где взять BASIC-256

Глава 7: Циклы и счетчики — повторяем снова и снова

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

Цикл For

Наиболее распространенный вид оператора цикла — это for. Цикл for повторяет блок операторов указанное число раз, отслеживая значение счетчика. Счетчик цикла может начинаться с любого значения и завершаться любым значением, шаг приращения счетчика также может быть любым. Программа 33 — простой пример использования цикла for, печатает и проговаривает цифры от 1 до 10 (включительно). Программа 34 считает по 2, начиная с нуля и заканчивая 10.


1 # for.kbs
2 for t = 1 to 10
3     print t
4     say t
5 next t

Программа 33: Оператор for


1
2
3
4
5
6
7
8
9
10

Вывод программы 33: Оператор for


1 # forstep2.kbs
2 for t = 1 to 10 step 2
3     print t
4     say t
5 next t

Программа 34: Оператор for вместе с step


0
2
4
6
8
10

Вывод программы 43: Оператор for вместе с step

for счетчик = выражение1 to выражение2 [step выражение3]
    оператор(ы)
next счетчик

Выполняет определенный блок кода указанное число раз. Переменная счетчик начинает со значения выражение1. После каждого выполнения блока операторовсчетчик увеличивается на значение выражение3 (или на единицу, если шаг — так переводится английское слово step — не указан). Цикл прекращается, когда значение счетчика превысит значение выражение2.

Используя цикл, можно легко рисовать очень интересные картинки. Программа 35 рисует муаровый узор1. Это действительно интересное изображение возникает потому, что компьютер не в состоянии нарисовать абсолютно прямую линию2. Поскольку рисование происходит по точкам (пикселям), линия под наклоном выглядит как лесенка. И если вы внимательно посмотрите на линии, которые мы нарисовали, то увидите, что они на самом деле зубчатые.


1 # moire.kbs
2 clg
3 color black
4 for t = 1 to 300 step 3
5     line 0,0,300,t
6     line 0,0,t,300
7 next t

Программа 35: Муаровый узор

Муаровый узор
Вывод программы 35: Муаровый узор

Какие ещё муаровые узоры вы можете нарисовать? Начните с центра, используйте различные значения шага, накладывайте одно на другое, пробуйте разные цвета — развлекайтесь!

Оператор for может быть также использован и для счета в обратном направлении. Для этого укажите после step отрицательное число.


1 # forstepneg1.kbs
2 for t = 10 to 0 step -1
3     print t
4     pause 1.0
5 next t

Программа 36: Оператор for – счет в обратном направлении


10
9
8
7
5
4
3
2
1
0

Вывод программы 36: Оператор for — счет в обратном направлении

pause секунды

Оператор pause говорит BASIC-256 приостановить выполнение текущей программы на указанное число секунд. Количество секунд может быть задано десятичной дробью, если необходима пауза меньше секунды.

Делай, пока я не скажу остановиться

Следующий тип цикла — do/until — повторяет блок кода один или несколько раз. После каждого повтора проверяется логическое условие. Цикл повторяется до тех пор, пока условие ложно (false). Программа 37 использует цикл do/until, для проверки корректности ввода пользователем данных. Цикл будет повторяться до тех пор, пока пользователь не введет число от 1 до 10.

1 # dountil.kbs
2 do
3     input "введите число от 1 до 10?",n
4 until n>=1 and n<=10
5 print "вы ввели " + n

Программа 37: Введите число от 1 до 10

введите число от 1 до 10?66
введите число от 1 до 10?-56
введите число от 1 до 10?3
вы ввели 3

Пример вывода программы 37: Введите число от 1 до 10

do
    оператор(ы)
until условие
Выполняет блок операторов снова и снова, пока условие ложно. Оператор(ы) будут выполнены один или несколько раз.

Программа 38 использует do/until для счета от 1 до 10 подобно программе 33, которая использовала для того же цикл for.


1 # dountilfor.kbs
2 t = 1
3 do
4     print t
5     t = t + 1
6 until t >= 11

Программа 38: Do/Until считает до 10


1
2
3
4
5
6
7
8
9
10

Вывод программы 38: Do/Until считает до 10

Делай, пока я говорю делать

Третий тип цикла — while/end while — проверяет условие перед выполнением каждого повтора, и если результат проверки условия принимает значение истина (true), то выполняется код в цикле. Цикл while/end while может выполнить внутренний код несколько раз или не выполнить ни разу.

Иногда нам нужна программа с бесконечным циклом, пока сам пользователь не остановит её. Это может быть легко сделано с помощью логической константы true (истина) (см. программу 39).

1 # whiletrue.kbs
2 while true
3     print "больше никогда";
4 end while

Программа 39: Вечный цикл

больше никогда
больше никогда
больше никогда
больше никогда
больше никогда
… выполняется пока вы её не остановите

Пример вывода программы 39: Вечный цикл3

while условие
    оператор(ы)
end while

Выполняет оператор(ы) в теле цикла снова и снова, пока условие истинно. Оператор(ы) будет выполнены нуль (0) или несколько раз.

Программа 40 использует while/end while для счета от 1 до 10 подобно программе 33, которая использовала для того же цикл for.

1 # whilefor.kbs
2 t = 1
3 while t <= 10
4     print t
5     t = t + 1
6 end while

Программа 40: While считает до 10


1
2
3
4
5
6
7
8
9
10

Вывод программы 40: While считает до 10

Быстрая графика

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

fastgraphics
refresh

Команда fastgraphics включает режим «быстрой графики». В этом режиме окно для вывода графики будет обновляться только по команде refresh. Включив «быструю графику» во время выполнения программы, вы не сможете вернуться в стандартный (медленный) режим4.


1  # kalidescope.kbs
2  clg
3  fastgraphics
4  for t = 1 to 100
5      r = int(rand * 256)
6      g = int(rand * 256)
7      b = int(rand * 256)
8      x = int(rand * 300)
9      y = int(rand * 300)
10     h = int(rand * 100)
11     w = int(rand * 100)
12     color rgb(r,g,b)
13     rect x,y,w,h
14     rect 300-x-w,y,w,h
15     rect x,300-y-h,w,h
16     rect 300-x-w,300-y-h,w,h
17 next t
18 refresh

Программа 41: Калейдоскоп

Калейдаскоп
Пример вывода программы 41: Калейдоскоп

Запустите программу 41, предварительно удалив или закомментировав строку номер 3, с командой fastgraphics. Вы видите разницу?
В «Большой программе» этой главы мы будем использовать цикл while для анимации подпрыгивающего мяча в окне для вывода графики.


1  # bouncingball.kbs
2  fastgraphics
3  clg
4
5  # начальная позиция мяча
6  x = rand * 300
7  y = rand * 300
8  # size of ball
9  r = 10
10 # скорость по направлениям х и y
11 dx = rand * r + 2
12 dy = rand * r + 2
13
14 color green
15 rect 0,0,300,300
16
17 while true
18 # стираем старый мяч
19     color white
20     circle x,y,r
21 # вычисляем новую позицию
22     x = x + dx
23     y = y + dy
24 # столкновение с левой и правой границей
25     if x < 0 or x > 300 then
26         dx = dx * -1
27         sound 1000,50
28     end if
29 # столкновение с верхней и нижней границей
30     if y < 0 or y > 300 then
31         dy = dy * -1
32         sound 1500,50
33     end if
34 # рисуем новый мяч
35     color red
36     circle x,y,r
37 # обновляем окно графики
38     refresh
39 end while

Программа 42: Большая программа — прыгающий мяч

Прыгающий мяч
Пример вывода программы 42: Большая программа — прыгающий мяч

—————————
1 Узор, возникающий при наложении двух периодических сетчатых рисунков. Явление обусловлено тем, что повторяющиеся элементы двух рисунков следуют с немного разной частотой и то накладываются друг на друга, то образуют промежутки (прим. разработчика).

2 Разумеется, если только она не строго вертикальная или горизонтальная (прим. разработчика).

3 У автора используется слово «nevermore» — намек на стихотворение Эдгара Алана По «Ворон», в котором есть строчка: Quoth the Raven, “Nevermore.” — Каркнул: «Больше никогда!»(прим. редактора).

4 После завершения выполнения программы режим «быстрой графики» выключается автоматически (прим. разработчика).

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

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

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

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

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

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

Комментарии (4) к “BASIC-256 Глава 7”

  1. Подскажите пожалуйста, как заставить работать оператор SAY в AltLinux 5.0.1 School Юниор (gnome)
    1. Установили basic-256 0.9.6.53
    2. Установили espeak 1.44.05 (синтезатор english-речи)
    3. Установили ru-tss и ru_tss-lexicon (синетзатор русской речи)

  2. Пока, к сожалению, никак. Проблема в libportaudio, которая (на 5 платформе) не взаимодействует с espeak. Однако майнтейнер espeak в настоящий момент занимается решением этой проблемы. Нужно просто подождать. В 4й платформе (4.0, 4.1) espeak (и соответственно оператор say) «разговаривает» без проблем. А ru-tss или как там ещё — тут вообще не при чем.

  3. Понятно. В Бейсик есть есть чем заниматься, подождем.
    p.s. ru-tss ставили на всякий случай :)

  4. Кстати, рекомендую скачать обновленный в p5 пакет BASIC-256, в нем проверена и исправлена подсветка ключевых слов и появились кнопки навигации (вперед-назад-домой) в окне справки — http://ftp.altlinux.org/pub/distributions/ALTLinux/p5/branch/files/i586/RPMS/basic256-0.9.6-alt4.M50P.1.i586.rpm

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