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

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

BASIC-256. Главы 4 и 5

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

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

Где взять BASIC-256



Глава 4: Мыслить как программист

Одна из самых трудных вещей — научиться думать как программист. Программистом не станешь, просто читая книги или посещая занятия, нужно приложить собственные усилия.

Чтобы быть хорошим программистом, необходимо испытывать страсть к технологиям, самообучению, логическому мышлению, а также стремление творить и исследовать.

Вы подобны великим исследователям: Христофору Колумбу (открывшему Америку), Нейлу Армстронгу (сделавшему первый шаг на Луне) и Юрию Гагарину (первому космонавту). Перед вами — заключенная в компьютере бесконечная вселенная для исследования и творчества, где ограничить вас могут лишь ваши собственные творческие способности и готовность познавать новое.

Программа для разработки игры или какое-нибудь интересное приложение часто содержит более тысячи строк программного кода. Это может быстро вымотать даже самого опытного программиста. Обычно программисты, разбираясь со сложной задачей, используют систему «трех шагов», что-то вроде:

  1. Поразмышлять над задачей.
  2. Разбить задачу на части и формально описать каждую из них.
  3. Преобразовать эти части в код на языке программирования, который вы используете.

Псевдокод

Псевдокод — причудливое слово, которое используется для описания, шаг за шагом, того, что должна делать ваша программа. Слово псевдокод происходит от греческой приставки «псевдо» (pseudo), что в переводе означает «подделка» и слова «код» (code), обозначающего фактические операторы программы. Псевдокод создается не для компьютера, а для того, чтобы помочь вам осознать сложность задачи и разбить ее на смысловые части.

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

Давайте напишем простую программу, рисующую школьный автобус (как на рисунке 11).

автобус
Рисунок 11. Школьный автобус

Разобьем эту задачу на две части:

  • нарисовать колеса
  • нарисовать корпус

Теперь разобьем эти части на более мелкие и напишем наш псевдокод:

Выбрать черный цвет.
Нарисовать колеса.
Выбрать желтый цвет.
Нарисовать кузов автобуса.
Нарисовать переднюю часть автобуса.

Таблица 3. Школьный автобус — псевдокод

Чтобы наша программа заработала, все, что осталось сделать – это записать ее:

Выбрать черный цвет. color black
Нарисовать колеса. circle 50,120,20
circle 200,120,20
Выбрать желтый цвет. color yellow
Нарисовать кузов автобуса. rect 50,0,200,100
Нарисовать переднюю часть автобуса. rect 0,50,50,50

Таблица 4. Школьный автобус — псевдокод и команды BASIC-256

Полная программа рисования школьного автобуса (программа 22) приведена ниже. Взгляните на окончательный вариант программы, и вы увидите комментарии, предназначенные для того, чтобы помочь программисту вспомнить части, на которые была разделена задача в момент первоначального осмысления.


1 # schoolbus.kbs — школьный автобус
2 clg
3 # рисуем колеса
4 color black
5 circle 50,120,20
6 circle 200,120,20
7 # рисуем корпус автобуса
8 color yellow
9 rect 50,0,200,100
10 rect 0,50,50,50

Программа 22: Школьный автобус

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

Запомните одну очень важную вещь, НЕ СУЩЕСТВУЕТ ЕДИНСТВЕННО ВЕРНОГО СПОСОБА РЕШЕНИЯ ЗАДАЧИ. Некоторые способы лучше других (меньше инструкций, проще читать…), но главное, чтобы задача была вами решена.

Попробуйте свои силы в написании псевдокода. Как бы вы попросили BASIC-256 нарисовать посох деда Мороза или жезл волшебника?

Блок-схемы

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

Это краткое введение в блок-схемы охватит только небольшую часть того, что можно с ними делать, однако уже с несколькими простыми элементами и соединителями вы сможете моделировать очень сложные процессы. Эта технология может хорошо послужить не только в программировании, но и в решении многих других задач, с которыми вы столкнетесь. Вот несколько основных элементов:

Элемент Имя и описание
поток Поток – стрелка представляет движение от одного элемента или шага в процессе к другому. Вы должны следовать направлению стрелки.
пуск-останов Пуск-останов – этот элемент подскажет вам где начало и конец блок-схемы. Каждая блок-схема должна иметь начало и конец.
Процесс Процесс — этот элемент представляет собой деятельность или действия, которые должны произойти в программе. Только один поток (стрелка) может выходить из процесса.
ввод-вывод Ввод-вывод (I / O) — этот элемент представляет данные, которые читаются или записываются в системе. Примером может служить сохранение или загрузка файлов.
Решение Решение — элемент в форме ромба содержит простой (да/нет, верно/неверно) вопрос. Должно быть два потока (стрелки), которые выходят из элемента «решение». В зависимости от ответа мы будем следовать одним из двух путей.

Таблица 5. Основные элементы блок-схем

Лучший способ научиться блок-схемам — это взглянуть на примеры и попробовать изобразить что-то своими руками.

Блок-схема, пример первый

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

Блоксхема "завтрак"
Рисунок 12. Завтрак — блок-схема

Взгляните на рисунок 12 (выше) и проследите за всеми стрелками. Вы видите, как эта схема представляет собой сценарий?

Блок-схема, пример второй
Еще один пример, связанный с едой. Вы очень хотите пить и намереваетесь купить газировку в торговом автомате. Посмотрите на рисунок 13 (ниже).
Блоксхема "торговый автомат"
Рисунок 13. Автомат с газировкой — блок-схема

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

Испытайте себя в составлении простых блок-схем. Попробуйте составить блок-схему, описывающую как чистить зубы или как переходить улицу.


Глава 5: Программа задает вам вопросы

Эта глава представляет новый тип переменных (строковые переменные) и рассказывает о том, как получать числовые и текстовые ответы от пользователей.

Новый тип переменной — строковая переменная

В главе 3 вы познакомились с числовыми переменными, которые могут хранить только целые или десятичные числа. Иногда вам может понадобиться сохранить в компьютерной памяти строку, – текст, заключенный в двойные кавычки (""). Для этого мы будем использовать новый тип переменной, который называется строковая переменная. Строковая переменная обозначается добавлением знака доллара $ в конце её имени.

Вы можете сохранять и извлекать значения из строковой переменной так же, как и при использовании числовых переменных. Помните, правила назначения имен, чувствительность к регистру и правила зарезервированных слов одинаковы как для строковых, так и для числовых переменных.


1 # ilikejim.kbs
2 name$ = "Сережа"
3 firstmessage$ = name$ + " мой друг."
4 secondmessage$ = "Мне нравится " + name$ + "."
5 print firstmessage$
6 say firstmessage$
7 print secondmessage$
8 say secondmessage$

Программа 23: Мне нравится Сережа


Сережа мой друг.
Мне нравится Сережа.

Вывод программы 23: Мне нравится Сережа

Строковые переменные
Строковая переменная позволяет дать название области в оперативной памяти компьютера. Вы можете хранить и извлекать текст и символьные значения из строковой переменной в вашей программе. Имя строковой переменной должно начинаться с буквы, может содержать буквы и цифры, чувствительно к регистру, должно заканчиваться знаком доллара – $.

Вы также не можете использовать зарезервированные BASIC-256 слова (смотри Приложение I). Примеры правильных имен строковых переменных: d$, c7$, book$, X$ и barnYard$.

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

Input – получение текста или чисел от пользователя

До сих пор в коде самой программы содержалась вся необходимая информация для ее выполнения. А теперь представляем следующий оператор – input. Он запоминает строку или число, которое пользователь набирает в окне ввода-вывод текста и сохраняет это значение в переменной.

Давайте обратимся к программе 23 и изменим её таким образом, что она сначала спросит ваше имя, а потом скажет, что вы её друг и нравитесь ей.

1 # ilikeinput.kbs
2 input "Как вас зовут? ", name$
3 firstmessage$ = name$ + " мой друг."
4 secondmessage$ = "Мне нравится " + name$ + "."
5 print firstmessage$
6 say firstmessage$
7 print secondmessage$
8 say secondmessage$

Программа 24: Мне нравится — кто?

Как вас зовут? Володя
Володя мой друг.
Мне нравится Володя.

Вывод программы 24: Мне нравится — кто?

input "подсказка", имя_строковой_переменной$

input "подсказка" имя_числовой_переменной

input имя_строковой_переменной$

input имя_числовой_переменной

Оператор input получает строку или число, которое пользователь вводит в окне ввода-вывода текста. Результат сохраняется в переменной (имя_строковой_переменной$ или имя_числовой_переменной), которая затем может быть использована в программе. Подсказка, если она указана, будет отображаться в окне вывода текста, а курсор будет стоять непосредственно после неё. Если нужно получить число (в операторе указано имя числовой переменной), а пользователь вводит строку, то есть символы, которые не могут быть преобразованы в число, input устанавливает значение переменной равное нулю (0).

Программа «Волшебная математика» показывает как использовать оператор input с числовыми переменными.

1 # mathwiz.kbs
2 input "a? ", a
3 input "b? ", b
4 print a + "+" + b + "=" + (a+b)
5 print a + "-" + b + "=" + (a-b)
6 print b + "-" + a + "=" + (b-a)
7 print a + "*" + b + "=" + (a*b)
8 print a + "/" + b + "=" + (a/b)
9 print b + "/" + a + "=" + (b/a)

Программа 25: Волшебная математика

a? 7
b? 56
7+56=63
7-56=-49
56-7=49
7*56=392
7/56=0.125
56/7=8

Пример вывода программы 25: Волшебная математика

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


1 # sayname.kbs
2 input "Как вас зовут? ", name$
3 input "Сколько вам лет? ", age
4 greeting$ = "Рад познакомиться, "+name$+"."
5 print greeting$
6 say greeting$
7 greeting$ = "Через 8 лет вам будет "+(age+8)+". Однако, немало!"
8 print greeting$
9 say greeting$

Программа 26: Причуда — назови имя


Как вас зовут? Оля
Сколько вам лет? 13
Рад познакомиться, Оля.
Через 8 лет вам будет 21. Однако, немало!

Пример вывода программы 26: Причуда — назови имя


1 # sillystory.kbs
2
3 print "Глупая история."
4
5 input "Существительное? ", noun1$
6 input "Глагол? ", verb1$
7 input "Название комнаты в доме? ", room1$
8 input "Глагол? ", verb2$
9 input "Существительное? ", noun2$
10 input "Прилагательное? ", adj1$
11 input "Глагол? ", verb3$
12 input "Существительное? ", noun3$
13 input "Как вас зовут? ", name$
14
15 sentence$ = "Глупая история, автор " + name$ + "."
16 print sentence$
17 say sentence$
18
19 sentence$ = "Как-то, совсем недавно, я увидел, что " + noun1$ + " собирается " + verb1$ + " вниз по лестнице."
20 print sentence$
21 say sentence$
22
23 sentence$ = "Я подумал, что " + room1$ + " станет мне укрытием, чтобы " + verb2$ + " там, пока не получится " + noun2$ + "."
24 print sentence$
25 say sentence$
26
27 sentence$ = "Вдруг " + noun1$ + " сделался " + adj1$ + ", из-за того, что я начал " + verb3$ + " в " + noun3$ + "."
28 print sentence$
29 say sentence$
30
31 sentence$ = "Конец."
32 print sentence$
33 say sentence$

Программа 27: Генератор глупых историй


Глупая история.
Существительное? кот
Глагол? идти
Название комнаты в доме? кухня
Глагол? рисовать
Существительное? колбаса
Прилагательное? зеленый
Глагол? играть
Существительное? карандаш
Как вас зовут? Сергей
Глупая история, автор Сергей.
Как-то, совсем недавно, я увидел, что кот собирается идти вниз по лестнице.
Я понял, что его целью стала моя кухня, чтобы рисовать там до тех пор, пока не получится колбаса.
Вдруг кот сделался зеленый, из-за того, что я начал играть в карандаш.
Конец.

Пример вывода программы 27: Генератор глупых историй
============================

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

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

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

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

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

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

  1. I want to thank you again for all of the hard work you are doing to translate this into Russian. It is looking great,
    Jim Reneau

  2. Владимир Черный говорит:
    Декабрь 28, 2010, 11:19 дп

    Many thanks to you Jim. This work was Impossible without you book! Basic is one of favorite programming languages in Russian schools (another one is Pascal). BASIC-256 is simple, stable and work fine under Linux. It’s wery usefull for pupils of 12-15 years old.
    Me and all readers of this blog wish you a happy New Year!
    Vladimir Cherny

  3. Аркадий говорит:
    Февраль 10, 2011, 2:25 пп

    Помогите разобраться! При использовании Input c числовыми переменными дает ошибку, с символьными — работает!
    С QBasic’ок дружу с детства!

  4. Владимир Черный говорит:
    Февраль 10, 2011, 2:34 пп

    Аркадий, Приведите пример кода, вызывающего ошибку и заодно укажите версию BASIC-256 которой вы пользуетесь.

  5. Спасибо! Главное на openSUSE 11.3 и Mandriva 2010.2 работает!

  6. Татьяна говорит:
    Январь 13, 2013, 2:00 пп

    ответ для Аркадия
    Могу предположить два варианта:
    1) input x,y заменить на два оператора input x, input y
    2) иногда требуется задать первоначальное значение переменной (при использовании цикла for), например:
    x=0
    for i=0 to 10
    input x

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