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

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

BASIC-256 Глава 6

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

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

Где взять BASIC-256

Глава 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
Если оба выражения истинны, тогда и результат будет истинным, в противном случае он будет ложным

AND выражение2
ИСТИНА ЛОЖЬ
выражение2 ИСТИНА ИСТИНА ЛОЖЬ
ЛОЖЬ ЛОЖЬ ЛОЖЬ
OR Логическое Или
выражение1 OR выражение2
Если выражение1 или выражение2 истинны, то результат будет истинным, если оба ложны — ложным.

OR выражение2
ИСТИНА ЛОЖЬ
выражение2 ИСТИНА ИСТИНА ИСТИНА
ЛОЖЬ ИСТИНА ЛОЖЬ
XOR Логическое исключающее Или
выражение1 XOR выражение2
Только если оба выражения истинны, результат будет истинным, в противном случае — ложь. Оператор XOR действует подобно союзу «или» в естественном языке — «нельзя иметь и то, и другое».

XOR выражение2
ИСТИНА ЛОЖЬ
выражение2 ИСТИНА ЛОЖЬ ИСТИНА
ЛОЖЬ ИСТИНА ЛОЖЬ
NOT Логическое отрицание
NOT выражение1
Возвращает противоположное значение. Если выражение1 истинно, результат будет ложь, если ложно — истина.

NOT
выражение1 ИСТИНА ЛОЖЬ
ЛОЖЬ ИСТИНА

Таблица 7. Логические операторы

and or xor not
Четыре логических оператора: логические и (and), логическое или (or), исключающее или (xor) и и логическое отрицание (not) позволяют соединять или изменять выражения сравнения. Вы также можете использовать скобки для группировки операций.

Оператор выбора в более сложной форме — If/End If:

Когда мы пишем программы, иногда возникает необходимость выполнить несколько операторов, если условие истинно. Это можно сделать, используя альтернативный формат оператора if. В этом случае вы не размещаете операторы на одной строке с if … then, а помещаете их ниже — на следующей, один или несколько (по одному в каждой строке), закрывая блок конструкцией end 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 условие then
    оператор(ы) # выполняем, если условие истинно
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

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

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

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

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

  1. Пашковская Юлия говорит:
    Апрель 19, 2011, 12:14 пп

    Я преподаю в 6-х классах Бейсик. В этом году перешли на Линукс. Установили Basic-256, версия 9.6 (9.2 часто зависала). Сейчас дошли до изучения условных операторов. Выяснилось, что работает только неполное ветвление и только если в блоке один оператор. Строка с end if игнорируется, и следующие после первого оператора выполняются, даже если условие ложно. Почему так? Может, версия 9.6 подразумевает другой синтаксис Бейсика?

  2. Приведите пример программы.
    Я попробовал:
    a = 5
    if a = 5 then
    print a
    print a+a
    end if

    выводится:
    5
    10

    а если ставлю a =6, то окно вывода остается пустым.

  3. Пашковская Юлия говорит:
    Апрель 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?

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