BASIC-256 Глава 6
Методические материалыАвтор: Владимир Черный
Продолжаем публиковать перевод книги Джеймса Рено. Эту главу перевел Сергей Ирюпин.
Оглавление:
- Глава 1: Знакомство с BASIC-256 – cкажи «Привет»
- Глава 2: Рисуем основные фигуры
- Глава 3: Звуки и музыка
- Глава 4: Мыслить как программист
- Глава 5: Программа задает вам вопросы
Глава 6: Сравнения, сравнения, сравнения
Компьютер великолепно сравнивает выражения. В этой главе мы изучим как сравнивать два выражения, как работать с комбинированными условиями и как выполнять те или иные операторы в зависимости от результатов сравнения. Мы также научимся генерировать случайные числа.
Истина и ложь
Язык BASIC-256 имеет еще один специальный вид данных, который может храниться в числовых переменных. Это булевый (логический) тип. Результатом сравнения или логических операций являются логические значения истина или ложь. Для облегчения работы, в выражениях можно использовать две логические константы: true (истина) и false (ложь).
true false Две булевы (логические) константы true и false могут быть использованы в любом числовом или логическом выражении, но, как правило, являются результатом сравнения или логических операций. В действительности, константа true хранится в виде числа один (1), а false – в виде числа ноль (0). |
Операторы сравнения
Ранее мы обсудили основные арифметические операции, а сейчас пришло время взглянуть на некоторые дополнительные операторы. Нам часто требуется сравнить два значения в программе, чтобы решить что делать дальше. Оператор сравнения работает с двумя значениями и возвращает истину или ложь в зависимости от результата сравнения.
Оператор | Операция |
< |
Меньше выражение1 < выражение2 Возвращает истину, если выражение1 меньше выражения2 и ложь в противном случае |
<= |
Меньше или равно выражение1 <= выражение2 Возвращает истину, если выражение1 меньше или равно выражению2 и ложь в противном случае |
> |
Больше выражение1 > выражение2 Возвращает истину, если выражение1 больше выражения2 и ложь в противном случае |
>= |
Больше или равно выражение1 >= выражение2 Возвращает истину, если выражение1 больше или равно выражению2 и ложь в противном случае |
= |
Равно выражение1 = выражение2 Возвращает истину, если выражение1 равно выражению2 и ложь в противном случае |
<> |
Не равно выражение1 <> выражение2 Возвращает истину, если выражение1 не равно выражению2 и ложь в противном случае |
Таблица 6. Операторы сравнения
< <= > >= = <> Шесть операций сравнения, это: меньше (<), меньше или равно (<=), больше (>), больше или равна (>=), равно (=), не равно (<>). Они используются для сравнения чисел и строк. Строки сравниваются по алфавиту слева направо. Вы также можете использовать скобки для группировки операций. |
Простой выбор – оператор if
Оператор if (если) может использовать результат сравнения для выборочного выполнения оператора или блока операторов. Первая программа этой главы (программа 28) использует три оператора if, чтобы показать являетесь ли вы старше, одного возраста или моложе своего друга.
1 # compareages.kbs – сравним два возраста
2 input "сколько вам лет? ", yourage
3 input "сколько лет вашему другу? ", friendage
4
5 print "Вы ";
6 if yourage < friendage then print "младше своего друга."
7 if yourage = friendage then print "одного с ним возраста."
8 if yourage > friendage then print "старше своего друга."
Программа 28: Сравним два возраста
сколько вам лет? 13
сколько лет вашему другу? 12
Вы старше своего друга.
Пример вывода программы 28: Сравним два возраста
Рисунок 14. Сравним два возраста – блок-схема
if условие then оператор Если условие истинно, то выполняется оператор, следующий за словом then. |
Случайные числа
Когда мы разрабатываем игры и симуляторы, может возникнуть необходимость имитировать игральные кости, работу рулетки в казино и другие случайные события. BASIC-256 имеет встроенный генератор случайных чисел, который сделает это для нас.
rand Оператор rand возвращает случайное число, которое можно использовать в выражении. Полученное число будет в диапазоне от нуля до единицы, но никогда не будет равным единице (0≤n<1). Если вы хотите генерировать случайные целые числа от 1 до r, используйте следующее выражение n = int(rand * r) + 1
|
1 # coinflip.kbs — бросаем монетку
2 coin = rand
3 if coin < .5 then print "Орёл."
4 if coin >= .5 then print "Решка."
Программа 29: Бросаем монетку
Решка.
Пример вывода программы 29: Бросаем монетку
В программе 29 у вас, возможно, был соблазн использовать rand дважды, внутри каждого if. Это создало бы то, что называют «логическая ошибка». Запомните, что каждый раз, когда выполняется rand, он возвращает разные случайные числа. |
Логические операторы:
Иногда необходимо соединить вместе несколько простых условий. Это может быть сделано с помощью четырех логических операторов: and (и), or (или), xor (исключающее или) и not (отрицание). Логические операторы действуют подобно союзам в естественном языке, только or (или) используется в значении «одно событие, или другое, или оба вместе».
Оператор | Операция | |||||||||||||
AND |
Логическое И выражение1 AND выражение2 Если оба выражения истинны, тогда и результат будет истинным, в противном случае он будет ложным
|
|||||||||||||
OR |
Логическое Или выражение1 OR выражение2 Если выражение1 или выражение2 истинны, то результат будет истинным, если оба ложны — ложным.
|
|||||||||||||
XOR |
Логическое исключающее Или выражение1 XOR выражение2 Только если оба выражения истинны, результат будет истинным, в противном случае — ложь. Оператор XOR действует подобно союзу «или» в естественном языке — «нельзя иметь и то, и другое».
|
|||||||||||||
NOT |
Логическое отрицание NOT выражение1 Возвращает противоположное значение. Если выражение1 истинно, результат будет ложь, если ложно — истина.
|
Таблица 7. Логические операторы
and or xor not Четыре логических оператора: логические и (and), логическое или (or), исключающее или (xor) и и логическое отрицание (not) позволяют соединять или изменять выражения сравнения. Вы также можете использовать скобки для группировки операций. |
Оператор выбора в более сложной форме — If/End If:
Когда мы пишем программы, иногда возникает необходимость выполнить несколько операторов, если условие истинно. Это можно сделать, используя альтернативный формат оператора if. В этом случае вы не размещаете операторы на одной строке с if … then, а помещаете их ниже — на следующей, один или несколько (по одному в каждой строке), закрывая блок конструкцией end if.
Оператор if/end if позволяет создать блок программного кода, который выполняется, если условие истинно. Как правило, операторы внутри такого блока пишутся с некоторым отступом, чтобы было удобнее читать код. |
1 # dice.kbs – бросаем (игральные) кости
2 die1 = int(rand * 6) + 1
3 die2 = int(rand * 6) + 1
4 total = die1 + die2
5
6 print "кость 1 = " + die1
7 print " кость 2 = " + die2
8 print "у вас выпало " + total
9 say "у вас выпало " + total
10
11 if total = 2 then
12 print "глаза змеи!"
13 say "глаза змеи!"
14 end if
15 if total = 12 then
16 print "полночь!"
17 say "полночь!"
18 end if
19 if die1 = die2 then
20 print "дубль – бросай снова!"
21 say "дубль – бросай снова!"
22 end if
Программа 30: Бросаем (игральные) кости
кость 1 = 6
кость 2 = 6
у вас выпало 12
полночь!
дубль – бросай снова!
Пример вывода программы 30: Бросаем кости
«Правка» → «Красивый код» в меню Пункт «Красивый код» в меню «Правка» отформатирует вашу программу, сделав её более удобной для чтения. Будут удалены пробелы в начале и конце строк и сделаны отступы для блоков кода (как в операторе if/end if). |
Оператор выбора в полной форме — If/Else/End If
Третья и последняя форма оператора if – это if/else/end if. Эта полная форма, которая позволяет создать один блок кода, который будет выполнен, если условие истинно, и другой блок кода, который будет выполнен, если условие ложно.
Операторы If, else и end if позволяют определить два блока программного кода. Первый блок, после слова then, выполняется, если условие истинно, а второй блок, после слова else, выполняется, если условие ложно. |
Программа 31 — переписанная программа 29 с использованием else.
1 # coinflip2 – бросаем монетку, используя else
2 coin = rand
3 if coin < .5 then
4 print "Орёл."
5 say "Орёл."
6 else
7 print "Решка."
8 say "Решка."
9 end if
Программа 31: Бросаем монетку с использованием else
Орёл.
Пример вывода программы 31: Бросаем монетку с использованием else
Вложенные операторы выбора
И последнее. Операторы if/end if и if/else/end if можно вкладывать друг в друга. Возможно, звучит сложновато, но в последующих главах вы увидите как это происходит.
«Большая программа» этой главы — программа, «бросающая» шестигранный кубик и рисующая его «выпавшую» сторону с определенным количеством точек. |
1 # dieroll.kbs — «бросаем кубик» и рисуем его
2 # hw – высота и ширина точки
3 hw = 70
4 # расстояние между точками
5 # 1/4 оставшегося места, после того, как нарисуем 3 точки
6 margin = (300 - (3 * hw)) / 4
7 # z1 – x,y левой верхней точки
8 z1 = margin
9 # z2 – x,y средней точки
10 z2 = z1 + hw + margin
11 # z3 – x,y правой нижней точки
12 z3 = z2 + hw + margin
13
14 # получаем значение
15 roll = int(rand * 6) + 1
16 print roll
17
18 color black
19 rect 0,0,300,300
20
21 color white
22 # верхний ряд точек
23 if roll <> 1 then rect z1,z1,hw,hw
24 if roll = 6 then rect z2,z1,hw,hw
25 if roll >= 4 and roll <= 6 then rect z3,z1,hw,hw
26 # средний ряд
27 if roll = 1 or roll = 3 or roll = 5 then rect z2,z2,hw,hw
28 # нижний ряд
29 if roll >= 4 and roll <= 6 then rect z1,z3,hw,hw
30 if roll = 6 then rect z2,z3,hw,hw
31 if roll <> 1 then rect z3,z3,hw,hw
32
33 say "у вас выпало " + roll
Программа 32: Большая программа – «Бросаем» кубик и рисуем его
Пример вывода программы 32: Большая программа – «Бросаем» кубик и рисуем его
Где скачать BASIC-256:
Для дистрибутивов ALT Linux
- ветка 4.0 basic256-0.9.6-alt0.M40.1.i586.rpm
- ветка 4.1 basic256-0.9.6-alt0.M41.1.i586.rpm
- ветка p5 basic256-0.9.6-alt0.M50P.1.i586.rpm
- ветка 5.1 basic256-0.9.6-alt0.M51.1.i586.rpm
Windows версия
http://basic256.org (http://www.sourceforge.net/projects/kidbasic)
Как установить BASIC-256 в Linux
Для Альт Линукс: настроить репозиторий и обновить/установить пакет через synaptic или apt
Для rpm-based дистрибутивов: rpm -Uvh <имя_пакета>.rpm
Апрель 19, 2011, 12:14 пп
Я преподаю в 6-х классах Бейсик. В этом году перешли на Линукс. Установили Basic-256, версия 9.6 (9.2 часто зависала). Сейчас дошли до изучения условных операторов. Выяснилось, что работает только неполное ветвление и только если в блоке один оператор. Строка с end if игнорируется, и следующие после первого оператора выполняются, даже если условие ложно. Почему так? Может, версия 9.6 подразумевает другой синтаксис Бейсика?
Апрель 19, 2011, 2:41 пп
Приведите пример программы.
Я попробовал:
a = 5
if a = 5 then
print a
print a+a
end if
выводится:
5
10
а если ставлю a =6, то окно вывода остается пустым.
Апрель 25, 2011, 10:19 дп
Здравствуйте, Сергей! Извините, только сейчас увидела, что есть ответ. Думала, что на почту придёт извещение.
Методом проб и ошибок выяснилось: для того чтобы после if выполнялся не один, а несколько операторов, нужно их соединять двоеточием. При этом end if можно и не писать.
x=1
y=2
if x<y then print x: print y
if x=y then print "!!"
Выдаёт
1
2
На else, вообще, программа выдаёт ошибку. Может, всё дело в версии 9.6?