Классический BASIC

Классический BASIC

Ссылаясь в своих материалах на исходный учебный язык программирования BASIC, мы как-то упустили тот факт, что сейчас уже мало кто представляет себе, что же такое этот самый BASIC.

Для восполнения этого пробела приведём здесь некоторую информацию об этом языке программирования.

BASIC был разработан в 1964 году профессорами Дартмутского колледжа Томасом Курцем и Джоном Кемени.

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

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

При проектировании языка использовались следующие восемь принципов. Новый язык должен был:

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

Практически все эти задачи были решены.

Здесь мы приводим список всех операторов классической версии BASIC

  • LIST — Вывод на монитор текста программы в правильной последовательности строк. В зависимости от реализации команда поддерживала параметры — диапазон строк, который требуется вывести.
  • REM — Комментарий. Текст, находившийся после ключевого слова и до конца строки, на исполнение программы не влиял. Многие интерпретаторы также поддерживали в качестве знака начала комментария одиночную кавычку ‘.
  • INPUT "Приглашение: ", Переменная — Вывод на монитор текста «Приглашение: » и ожидание, пока пользователь не введёт значение и не нажмёт Enter. После этого в Переменную запишется введённое значение. В простейших реализациях приглашение в INPUT не поддерживалось и его нужно было выводить отдельным оператором PRINT (см. ниже).
  • PRINT «Текст»;Переменная;Переменная;«Текст» — Вывод на монитор последовательно перечисленных объектов (текста и значений переменных). В зависимости от реализации, по-разному воспринимались разделители: в одних случаях разделитель приводил к выводу хотя бы одного пробела, в других — значения выводились подряд и разделители нужно было добавлять вручную. Разделитель «;» выполнял также функцию подавления перевода на следующую строку.
  • CLS — Очистка экрана терминала. В зависимости от реализации, конструкции и режима работы терминала текстовый курсор переносился либо в верхний левый, либо в нижний левый угол.
  • LET — Присваивание (формат: LET Переменная = Значение). В абсолютном большинстве версий оператор LET поддерживался, но был факультативным — присваивания переменным значений записывались без LET).
  • DIM — Описание массива. В отличие от обычных переменных, массивы требовали описания. Максимальное число размерностей массива определялось только реализацией
  • DATA — Набор данных, размещаемых прямо в тексте программы (аналог константы или массива констант).
  • READ — Команда считывания из набора DATA.
  • GOTO Lbl — Команда безусловного перехода на метку Lbl.
  • ON… GOTO — Команда вычисляемого перехода — после ON должно было идти вычисляемое выражение или переменная, а после GOTO — набор меток через запятую. Значение выражения указывало номер метки, на которую нужно перейти.
  • IF … THEN … — Обычный оператор ветвления. После IF размещается логическое условие, после THEN — оператор, который должен быть выполнен при истинности этого условия. Для сокращения записи многие реализации поддерживали соглашение — если после THEN идёт число, то это — метка, на которую нужно перейти, то есть форма «IF … THEN 150» равнозначна «IF … THEN GOTO 150». Также могли поддерживаться формы «IF … GOTO…»
  • FOR ПеременнаяЦикла=НачальноеЗначение TO КонечноеЗначение STEP Шаг — Заголовок цикла с шагом. Инициирует цикл, в котором Переменная последовательно проходит ряд значений от НачальноеЗначение до КонечноеЗначение с шагом Шаг. Тело цикла ограничивается заголовком и ключевым словом NEXT. Часть STEP могла опускаться — в этом случае шаг был равен единице. Когда ПеременнаяЦикла выходит за указанные пределы, происходит переход за соответствующий оператор NEXT.
  • NEXT — Завершение тела цикла с шагом. Оператор показывает, что необходимо перейти на заголовок текущего исполняемого цикла FOR и продолжить работу. В более развитых реализациях NEXT мог содержать список переменных цикла через запятую — это означало, что в данной точке программы завершается тело не одного, а нескольких циклов. Применение NEXT с переменной также страховало от нарушения логики программы, так как вызывало ошибку времени выполнения, если при выполнении этой команды оказывалось, что активен цикл не по той переменной, имя которой указано.
  • WHILE Условие — Заголовок цикла с предусловием. Цикл завершался, если условие оказывалось ложно. В этом случае происходил переход за соответствующий заголовку оператор WEND.
  • WEND — Завершение тела цикла WHILE. Аналог NEXT но для цикла с предусловием.
  • GOSUB Метка — Переход к подпрограмме, начинающейся с Метки. Возврат происходит при достижении оператора RETURN. Рекурсивный вызов процедуры был, как правило, запрещён и приводил к ошибке времени выполнения.
  • RETURN — Оператор возврата из подпрограммы. Выполняется безусловный переход на оператор, следующий за командой GOSUB, которой был произведён переход к подпрограмме.
  • END — Завершение выполнения программы. Система выходит в интерпретатор и пользователю выдаётся приглашение на ввод команд.
  • CHAIN — Загрузка диапазона строк программы с внешнего носителя.
  • OPEN — Открытие файла данных на внешнем носителе.
  • CLOSE — Закрытие файла данных на внешнем носителе.
  • GET — Последовательное чтение значений указанных переменных из файла с перемещением файлового указателя за последний считанный символ.
  • PUT — Последовательная запись значений указанных переменных в файл с перемещением файлового указателя за последний записанный символ.
  • LIST — Вывод на монитор текста программы в правильной последовательности строк. В зависимости от реализации команда поддерживала параметры — диапазон строк, который требуется вывести.
  • LLIST — вывод на печатающее устройство. Иногда поддерживался этот вариант оператора.
  • RUN — Команда запуска текущей программы с оператора строки с самым маленьким номером. Мог поддерживаться параметр — номер строки, с которого нужно начинать исполнение.
  • DELETE — Команда интерактивного режима — удаление строки с указанным номером.
  • SAVE — Команда интерактивного режима — сохранение текущей программы в файле на внешнем носителе.
  • LOAD — Команда интерактивного режима — загрузка в память программы из файла на внешнем носителе. Как правило, по умолчанию она приводила к уничтожению ранее загруженной программы и данных.
  • RENUM — Команда интерактивного режима — перенумерация всех или заданного диапазона строк программы начиная с заданного числа с указанным шагом. По умолчанию — перенумеруются все строки программы с шагом 10.

Посмотрим, как выглядят программы на классическом языке BASIC.

В нижеследующей программе выполняется элементарная операция — ввод числа и вывод сообщения «Отрицательное число» или «Положительное число или ноль» в зависимости от его значения:

10 INPUT I
20 IF I >= 0 THEN PRINT "Positive number or null" : GOTO 40
30 PRINT "Negative number"
40 END

Типичная простая программа на Бейсике:

10 CLS 'Очистка экрана
20 PRINT "Добро пожаловать!" 'Заголовок в первой строке
30 'Цикл, выводящий линию под заголовком, на всю ширину экрана
40 FOR I=1 TO 80
50 PRINT "=";
60 NEXT I
65 'Ввод символьных данных от пользователя (комментарий добавлен после ввода нижних строк)
70 INPUT "Имя: ",N$
80 INPUT "Фамилия: ",S$
90 INPUT "Отчество: ",T$
95 'Вырезаем копию первых символов из имени и отчества
100 N2$=LEFT$(N$,1)
110 T2$=LEFT$(T$,1)
120 'Выводим результат
130 PRINT "Ваше имя кратко: ";S$;" ";N2$;". ";T2$;"."
140 INPUT "Повторить программу? (Y/N) ",U$
150 IF U$="Y" THEN GOTO 10
160 END

Поделиться: 

Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать rubasic.ru, вы соглашаетесь на использование файлов cookie.
Понятно