BASIC — различия между версиями

Материал из Ролевая энциклопедии
Перейти к: навигация, поиск
(+выжимка из Википедии)
(+пример программы, потом закончу.)
 
Строка 1: Строка 1:
 
{{контекст|видеоигры}}
 
{{контекст|видеоигры}}
'''BASIC''' ('''B'''eginner’s '''A'''ll-purpose '''S'''ymbolic '''I'''nstruction '''C'''ode — универсальный код символических инструкций для начинающих) — семейство высокоуровневых языков программирования. Был распространён на персональных микрокомпьютерах, таких как [[Commodore 64]] и [[Sinclair ZX81]], и часто запускался вместе со средой. Например, клавиши [[Sinclair ZX Spectrum]] были подписаны командами Бейсика для облегчения ввода. Бейсик позволял домашним пользователям и другим не-специалистам самим писать программы для микрокомпьютеров, в отличие от использовавшихся ранее языков программирования, предназначенных для математиков и учёных.
+
'''BASIC''' ('''B'''eginner’s '''A'''ll-purpose '''S'''ymbolic '''I'''nstruction '''C'''ode — универсальный код символических инструкций для начинающих), или Бейсик<ref>Русскоязычное название, использовавшееся ещё в [[советские компьютеры|советских компьютерах]].</ref> — семейство высокоуровневых языков программирования. Был распространён на персональных микрокомпьютерах, таких как [[Commodore 64]] и [[Sinclair ZX81]], и часто запускался вместе со средой. Например, клавиши [[Sinclair ZX Spectrum]] были подписаны командами Бейсика для облегчения ввода. Бейсик позволял домашним пользователям и другим не-специалистам самим писать программы для микрокомпьютеров, в отличие от использовавшихся ранее языков программирования, предназначенных для математиков и учёных.
  
На Бейсике того времени было написано много видеоигр, работавших в [[текстовый режим|текстовом режиме]]. В [[компьютерный журнал|компьютерных журналах]] публиковался исходный код игр (и просто полезных программ), который читатели могли вбить в свой компьютер и запустить игру. Программа такого формата занимала обычно до 150 строчек, так как должна была уместиться в ограниченную оперативную память (в некоторых конфигурациях — всего килобайт). Каждая марка компьютеров имела свой диалект Бейсика и свои особенности (отличия были даже между такими моделями как [[ZX80]] и ZX81), поэтому при вводе программ для других моделей требовалась некоторая адаптация. Само изложение программ в журналах также рекомендовало различные модификации, например, для увеличения или уменьшения [[сложность (видеоигры)|сложности]] — как с конкретными инструкциями, так и в виде идей, реализацию которых пользователь волен проработать сам. Таким образом многие видеоигр на Бейсике ходили в различных версиях как подлинно народное творчество. В ту эпоху обзоры компьютерных игр часто указывали язык программирования, на котором создавалась игра, что обычно было «Бейсик» или «машинный код». Некоторые игры, такие как «[[3D Monster Maze]]», пополам состояли из того и другого.
+
На Бейсике того времени было написано много видеоигр, работавших в [[текстовый режим|текстовом режиме]]. В [[компьютерный журнал|компьютерных журналах]] публиковался исходный код игр (и просто полезных программ), который читатели могли вбить в свой компьютер и запустить игру. Программа такого формата занимала обычно до 150 строчек, так как должна была уместиться в ограниченную оперативную память (в некоторых конфигурациях — всего килобайт). Каждая марка компьютеров имела свой диалект Бейсика и свои особенности (отличия были даже между такими моделями как [[ZX80]] и ZX81), поэтому при вводе программ для других моделей от пользователя требовалась некоторая адаптация — [[портирование]]. Различные рекомендации по портированию программ распространялись в журналах и внутри сообщества. Само изложение программ в журналах также рекомендовало различные модификации, например, для увеличения или уменьшения [[сложность (видеоигры)|сложности]] — как с конкретными инструкциями, так и в виде идей, реализацию которых пользователь волен проработать сам. Таким образом многие видеоигр на Бейсике ходили в различных версиях как подлинно народное творчество. В ту эпоху обзоры компьютерных игр часто указывали язык программирования, на котором создавалась игра, что обычно было «Бейсик» или «машинный код». Некоторые игры, такие как «[[3D Monster Maze]]», пополам состояли из того и другого.
  
 
Множество популярных видеоигр на Бейсике было собрано Дэвидом Алем и издано в книге «[[BASIC Computer Games]]». Одной из самых популярных игр на Бейсике была «{{нет статьи|[[:wikipedia:ru:Star Trek (текстовая игра)|см.]]|Star Trek (текстовая игра)|Star Trek}}», известности которой способствовала популярность «[[Звёздный путь|Звёздного пути]]» среди компьютерщиков. Из-за этого игра ходила во многих модифицированных версиях, самая распространённая из которых называлась «Super Star Trek».
 
Множество популярных видеоигр на Бейсике было собрано Дэвидом Алем и издано в книге «[[BASIC Computer Games]]». Одной из самых популярных игр на Бейсике была «{{нет статьи|[[:wikipedia:ru:Star Trek (текстовая игра)|см.]]|Star Trek (текстовая игра)|Star Trek}}», известности которой способствовала популярность «[[Звёздный путь|Звёздного пути]]» среди компьютерщиков. Из-за этого игра ходила во многих модифицированных версиях, самая распространённая из которых называлась «Super Star Trek».
 +
 +
== Пример игры: Animal ==
 +
Классическая игра «Угадай животное» вошла в сборник «BASIC Computer Games» и была распространена как в США и Великобритании, так и в СССР, и в постсоветской России. В той или иной реализации эта игра приводится как пример во многих учебниках по Бейсику. Это реализация из «BASIC Computer Games».
 +
{| class=standard
 +
! Строчка !! Объяснение
 +
|-
 +
| 10<ref>Команды Бейсика начинались с номера строки, который определял порядок выполнения, давал возможность перейти к строке по её номеру или заменить её в командной строке, введя новую строчку с тем же номером. Обычно строчки нумеровались кратными десяти, чтобы можно было вставлять новые строчки между ними, не меняя нумерацию остальной программы.</ref> <nowiki>PRINT TAB(32);"ANIMAL"</nowiki> || Первая строчка программы. Печатает название игры после отступа.
 +
|-
 +
| <nowiki>20 TAB(15);"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY"</nowiki> || Печатает название и адрес автора (по крайней мере данной версии) после меньшего отступа.
 +
|-
 +
| 30 PRINT: PRINT: PRINT || Три раза печатает перенос строки.
 +
|-
 +
| <nowiki>40 PRINT "PLAY `GUESS THE ANIMAL`"</nowiki> || Печатает «Сыграем в „Угадай животное“».
 +
|-
 +
| <nowiki>50 PRINT "THINK OF AN ANIMAL AND THE COMPUTER WILL TRY TO GUESS IT"</nowiki> || Печатает «Задумайте животное, а компьютер постарается угадать».
 +
|-
 +
| 60 PRINT || Печатает перенос строки.
 +
|-
 +
| 70 DIM A$(200) || Создаёт пустой массив данных A$ для 201 строк (поскольку нумерация элементов начинается с нуля).
 +
|-
 +
| 80 FOR I=0 TO 3 || Следующий после этой строчки блок команд будет повторён четыре раза.
 +
|-
 +
| 90 READ A$(I) || Считывает начальные данные для массива A$ (данные расположены в строчке 530).
 +
|-
 +
| 100 NEXT I || Закрывает блок, нуждающийся в повторении.
 +
|-
 +
| 110 N=VAL(A$(0)) || В переменную N записывается числовое значение первого элемента массива — номер следующего пустого элемента масива.
 +
|-
 +
| <nowiki>120 REM          MAIN CONTROL SECTION</nowiki> || Примечание для программиста «Основная часть программы».
 +
|-
 +
| <nowiki>130 INPUT "ARE YOU THINKING OF AN ANIMAL";A$</nowiki> || Спрашивает «Вы задумали животное?» и записывает ответ в переменную A$ (не следует путать с массивом A$).
 +
|-
 +
| <nowiki>140 IF A$="LIST" THEN 600</nowiki> || Если пользователь ответил «перечень», перейти на строчку 600, где начинается подпрограмма, перечисляющая известных компьютеру животных.
 +
|-
 +
| <nowiki>150 IF LEFT$(A$,1)<>"Y" THEN 120</nowiki> || Если пользователь ответил не «перечень» и не «да» (точнее, любое слово на Д), тогда вернуться на строчку 120, чтобы спросить снова.
 +
|-
 +
| 160 K=1 || В переменной K хранится рассматриваемый индекс массива данных. Догадки начинаются индекса № 1.
 +
|-
 +
| 170 GOSUB 390 || Перейти к подпрограмме догадок на строчке 290. Поскольку используется GOSUB, подпрограмма, закончив, сможет вернуться в то самое место, которое её вызвала.
 +
|-
 +
| 180 IF LEN(A$(K))=0 THEN 999 || Когда подпрограмма закончила, если последний рассматриваемый элемент массива пуст, то перейти к 999 (где расположен конец программы).
 +
|-
 +
| <nowiki>190 IF LEFT$(A$(K),2)="\Q" THEN 170</nowiki> || Если рассматриваемый элемент массива начинается на «\Q», то это вопрос, и нужно продолжить догадки — перейти к строчке 170, которая запускает подпрограмму догадок.
 +
|-
 +
| 200 PRINT "IS IT A ";RIGHT$(A$(K),LEN(A$(K))-2); || Печатает «Это (предполагаемое животное)?». Название животного берётся как рассматриваемый элемент массива, минус первые два символа («\A»).
 +
|}
 +
<pre><nowiki>
 +
210 INPUT A$
 +
220 A$=LEFT$(A$,1)
 +
230 IF LEFT$(A$,1)="Y" THEN PRINT "WHY NOT TRY ANOTHER ANIMAL?": GOTO 120
 +
240 INPUT "THE ANIMAL YOU WERE THINKING OF WAS A ";V$
 +
250 PRINT "PLEASE TYPE IN A QUESTION THAT WOULD DISTINGUISH A"
 +
260 PRINT V$;" FROM A ";RIGHT$(A$(K),LEN(A$(K))-2)
 +
270 INPUT X$
 +
280 PRINT "FOR A ";V$;" THE ANSWER WOULD BE ";
 +
290 INPUT A$
 +
300 A$=LEFT$(A$,1): IF A$<>"Y" AND A$<>"N" THEN 280
 +
310 IF A$="Y" THEN B$="N"
 +
320 IF A$="N" THEN B$="Y"
 +
330 Z1=VAL(A$(0))
 +
340 A$(0)=STR$(Z1+2)
 +
350 A$(Z1)=A$(K)
 +
360 A$(Z1+1)="\A"+V$
 +
370 A$(K)="\Q"+X$+"\"+A$+STR$(Z1+1)+"\"+B$+STR$(Z1)+"\"
 +
380 GOTO 120
 +
390 REM    SUBROUTINE TO PRINT QUESTIONS
 +
400 Q$=A$(K)
 +
410 FOR Z=3 TO LEN(Q$)
 +
415 IF MID$(Q$,Z,1)<>"\" THEN PRINT MID$(Q$,Z,1);: NEXT Z
 +
420 INPUT C$
 +
430 C$=LEFT$(C$,1)
 +
440 IF C$<>"Y" AND C$<>"N" THEN 410
 +
450 T$="\"+C$
 +
455 FOR X=3 TO LEN(Q$)-1
 +
460 IF MID$(Q$,X,2)=T$ THEN 480
 +
470 NEXT X
 +
475 STOP
 +
480 FOR Y=X+1 TO LEN(Q$)
 +
490 IF MID$(Q$,Y,1)="\" THEN 510
 +
500 NEXT Y
 +
505 STOP
 +
510 K=VAL(MID$(Q$,X+2,Y-X-2))
 +
520 RETURN
 +
530 DATA "4","\QDOES IT SWIM\Y2\N3\","\AFISH","\ABIRD"
 +
600 PRINT:PRINT "ANIMALS I ALREADY KNOW ARE:"
 +
605 X=0
 +
610 FOR I=1 TO 200
 +
620 IF LEFT$(A$(I),2)<>"\A" THEN 650
 +
624 PRINT TAB(15*X);
 +
630 FOR Z=3 TO LEN(A$(I))
 +
640 IF MID$(A$(I),Z,1)<>"\" THEN PRINT MID$(A$(I),Z,1);: NEXT Z
 +
645 X=X+1: IF X=4 THEN X=0: PRINT
 +
650 NEXT I
 +
660 PRINT
 +
670 PRINT
 +
680 GOTO 120
 +
999 END
 +
</nowiki></pre>
  
 
== История ==
 
== История ==

Текущая версия на 12:41, 11 октября 2015

Контекст:

BASIC (Beginner’s All-purpose Symbolic Instruction Code — универсальный код символических инструкций для начинающих), или Бейсик[1] — семейство высокоуровневых языков программирования. Был распространён на персональных микрокомпьютерах, таких как Commodore 64 и Sinclair ZX81, и часто запускался вместе со средой. Например, клавиши Sinclair ZX Spectrum были подписаны командами Бейсика для облегчения ввода. Бейсик позволял домашним пользователям и другим не-специалистам самим писать программы для микрокомпьютеров, в отличие от использовавшихся ранее языков программирования, предназначенных для математиков и учёных.

На Бейсике того времени было написано много видеоигр, работавших в текстовом режиме. В компьютерных журналах публиковался исходный код игр (и просто полезных программ), который читатели могли вбить в свой компьютер и запустить игру. Программа такого формата занимала обычно до 150 строчек, так как должна была уместиться в ограниченную оперативную память (в некоторых конфигурациях — всего килобайт). Каждая марка компьютеров имела свой диалект Бейсика и свои особенности (отличия были даже между такими моделями как ZX80 и ZX81), поэтому при вводе программ для других моделей от пользователя требовалась некоторая адаптация — портирование. Различные рекомендации по портированию программ распространялись в журналах и внутри сообщества. Само изложение программ в журналах также рекомендовало различные модификации, например, для увеличения или уменьшения сложности — как с конкретными инструкциями, так и в виде идей, реализацию которых пользователь волен проработать сам. Таким образом многие видеоигр на Бейсике ходили в различных версиях как подлинно народное творчество. В ту эпоху обзоры компьютерных игр часто указывали язык программирования, на котором создавалась игра, что обычно было «Бейсик» или «машинный код». Некоторые игры, такие как «3D Monster Maze», пополам состояли из того и другого.

Множество популярных видеоигр на Бейсике было собрано Дэвидом Алем и издано в книге «BASIC Computer Games». Одной из самых популярных игр на Бейсике была «Star Trekсм.», известности которой способствовала популярность «Звёздного пути» среди компьютерщиков. Из-за этого игра ходила во многих модифицированных версиях, самая распространённая из которых называлась «Super Star Trek».

Пример игры: Animal[править]

Классическая игра «Угадай животное» вошла в сборник «BASIC Computer Games» и была распространена как в США и Великобритании, так и в СССР, и в постсоветской России. В той или иной реализации эта игра приводится как пример во многих учебниках по Бейсику. Это реализация из «BASIC Computer Games».

Строчка Объяснение
10[2] PRINT TAB(32);"ANIMAL" Первая строчка программы. Печатает название игры после отступа.
20 TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" Печатает название и адрес автора (по крайней мере данной версии) после меньшего отступа.
30 PRINT: PRINT: PRINT Три раза печатает перенос строки.
40 PRINT "PLAY `GUESS THE ANIMAL`" Печатает «Сыграем в „Угадай животное“».
50 PRINT "THINK OF AN ANIMAL AND THE COMPUTER WILL TRY TO GUESS IT" Печатает «Задумайте животное, а компьютер постарается угадать».
60 PRINT Печатает перенос строки.
70 DIM A$(200) Создаёт пустой массив данных A$ для 201 строк (поскольку нумерация элементов начинается с нуля).
80 FOR I=0 TO 3 Следующий после этой строчки блок команд будет повторён четыре раза.
90 READ A$(I) Считывает начальные данные для массива A$ (данные расположены в строчке 530).
100 NEXT I Закрывает блок, нуждающийся в повторении.
110 N=VAL(A$(0)) В переменную N записывается числовое значение первого элемента массива — номер следующего пустого элемента масива.
120 REM MAIN CONTROL SECTION Примечание для программиста «Основная часть программы».
130 INPUT "ARE YOU THINKING OF AN ANIMAL";A$ Спрашивает «Вы задумали животное?» и записывает ответ в переменную A$ (не следует путать с массивом A$).
140 IF A$="LIST" THEN 600 Если пользователь ответил «перечень», перейти на строчку 600, где начинается подпрограмма, перечисляющая известных компьютеру животных.
150 IF LEFT$(A$,1)<>"Y" THEN 120 Если пользователь ответил не «перечень» и не «да» (точнее, любое слово на Д), тогда вернуться на строчку 120, чтобы спросить снова.
160 K=1 В переменной K хранится рассматриваемый индекс массива данных. Догадки начинаются индекса № 1.
170 GOSUB 390 Перейти к подпрограмме догадок на строчке 290. Поскольку используется GOSUB, подпрограмма, закончив, сможет вернуться в то самое место, которое её вызвала.
180 IF LEN(A$(K))=0 THEN 999 Когда подпрограмма закончила, если последний рассматриваемый элемент массива пуст, то перейти к 999 (где расположен конец программы).
190 IF LEFT$(A$(K),2)="\Q" THEN 170 Если рассматриваемый элемент массива начинается на «\Q», то это вопрос, и нужно продолжить догадки — перейти к строчке 170, которая запускает подпрограмму догадок.
200 PRINT "IS IT A ";RIGHT$(A$(K),LEN(A$(K))-2); Печатает «Это (предполагаемое животное)?». Название животного берётся как рассматриваемый элемент массива, минус первые два символа («\A»).
210 INPUT A$
220 A$=LEFT$(A$,1)
230 IF LEFT$(A$,1)="Y" THEN PRINT "WHY NOT TRY ANOTHER ANIMAL?": GOTO 120
240 INPUT "THE ANIMAL YOU WERE THINKING OF WAS A ";V$
250 PRINT "PLEASE TYPE IN A QUESTION THAT WOULD DISTINGUISH A"
260 PRINT V$;" FROM A ";RIGHT$(A$(K),LEN(A$(K))-2)
270 INPUT X$
280 PRINT "FOR A ";V$;" THE ANSWER WOULD BE ";
290 INPUT A$
300 A$=LEFT$(A$,1): IF A$<>"Y" AND A$<>"N" THEN 280
310 IF A$="Y" THEN B$="N"
320 IF A$="N" THEN B$="Y"
330 Z1=VAL(A$(0))
340 A$(0)=STR$(Z1+2)
350 A$(Z1)=A$(K)
360 A$(Z1+1)="\A"+V$
370 A$(K)="\Q"+X$+"\"+A$+STR$(Z1+1)+"\"+B$+STR$(Z1)+"\"
380 GOTO 120
390 REM     SUBROUTINE TO PRINT QUESTIONS
400 Q$=A$(K)
410 FOR Z=3 TO LEN(Q$)
415 IF MID$(Q$,Z,1)<>"\" THEN PRINT MID$(Q$,Z,1);: NEXT Z
420 INPUT C$
430 C$=LEFT$(C$,1)
440 IF C$<>"Y" AND C$<>"N" THEN 410
450 T$="\"+C$
455 FOR X=3 TO LEN(Q$)-1
460 IF MID$(Q$,X,2)=T$ THEN 480
470 NEXT X
475 STOP
480 FOR Y=X+1 TO LEN(Q$)
490 IF MID$(Q$,Y,1)="\" THEN 510
500 NEXT Y
505 STOP
510 K=VAL(MID$(Q$,X+2,Y-X-2))
520 RETURN
530 DATA "4","\QDOES IT SWIM\Y2\N3\","\AFISH","\ABIRD"
600 PRINT:PRINT "ANIMALS I ALREADY KNOW ARE:"
605 X=0
610 FOR I=1 TO 200
620 IF LEFT$(A$(I),2)<>"\A" THEN 650
624 PRINT TAB(15*X);
630 FOR Z=3 TO LEN(A$(I))
640 IF MID$(A$(I),Z,1)<>"\" THEN PRINT MID$(A$(I),Z,1);: NEXT Z
645 X=X+1: IF X=4 THEN X=0: PRINT
650 NEXT I
660 PRINT
670 PRINT
680 GOTO 120
999 END

История[править]

Бейсик был придуман в 1964 году преподавателями Дартмутского Колледжа Джоном Кемени и Томасом Курцем, и под их руководством был реализован командой студентов колледжа. Язык был основан частично на Фортране II и частично на Алголе 60. Со временем, когда стали появляться другие диалекты, изначальную реализацию стали называть Dartmouth BASIC.

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

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

  1. быть простым в использовании для начинающих;
  2. быть языком программирования общего назначения;
  3. предоставлять возможность расширения функциональности, доступную опытным программистам;
  4. быть интерактивным;
  5. предоставлять ясные сообщения об ошибках;
  6. быстро работать на небольших программах;
  7. не требовать понимания работы аппаратного обеспечения;
  8. защищать пользователя от операционной системы.

Критика[править]

В пору своего расцвета (1970—1980 годы) Бейсик подвергся жёсткой критике. Помимо констатации очевидных недостатков языка, связанных с синтаксической бедностью ранних вариантов и отсутствием многих признанных и удобных конструкций и механизмов, Бейсик критиковали за то, что его простота и бесструктурность поощряют применение порочных методик разработки и способствуют выработке опасных привычек программирования, которые иногда могут быть уместны при быстром создании малых программ для текущих нужд, но способны привести к краху крупных проектов.

Резко критиковалось повсеместно распространённое начальное обучение программированию, базирующееся на Бейсике. Одной из «визитных карточек» Эдсгера Дейкстры стало высказывание: «It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration». («Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они умственно изувечены без надежды на восстановление».)[3]

В ответ на критику адепты Бейсика замечают, что критики приписывают языку те негативные стороны, которые следовало бы отнести к его неправильному применению. Недостатки Бейсика (если иметь в виду ранние диалекты) проявляются при попытке профессиональной разработки на нём сложных и крупных программ и при использовании его как базового языка для обучения программистов, но ни для одного их этих применений данный язык не предназначался; его основной задачей было предоставить студентам-непрограммистам возможность после минимального обучения самостоятельно писать простейшие программы для собственных нужд, чтобы не отвлекать на эту работу специалистов. Этой задаче язык вполне соответствует.

Примечания[править]

  1. Русскоязычное название, использовавшееся ещё в советских компьютерах.
  2. Команды Бейсика начинались с номера строки, который определял порядок выполнения, давал возможность перейти к строке по её номеру или заменить её в командной строке, введя новую строчку с тем же номером. Обычно строчки нумеровались кратными десяти, чтобы можно было вставлять новые строчки между ними, не меняя нумерацию остальной программы.
  3. How do we tell truths that might hurt?, The threats to computing science

Ссылки[править]