BASIC — различия между версиями
EvilCat (обсуждение | вклад) (+выжимка из Википедии) |
EvilCat (обсуждение | вклад) (+пример программы, потом закончу.) |
||
Строка 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), поэтому при вводе программ для других моделей требовалась некоторая | + | На Бейсике того времени было написано много видеоигр, работавших в [[текстовый режим|текстовом режиме]]. В [[компьютерный журнал|компьютерных журналах]] публиковался исходный код игр (и просто полезных программ), который читатели могли вбить в свой компьютер и запустить игру. Программа такого формата занимала обычно до 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.
Бейсик был спроектирован так, чтобы студенты могли без затруднений писать программы, используя терминалы с разделением времени. Он предназначался для более «простых» пользователей, не столько заинтересованных в скорости исполнения программ, сколько просто в возможности использовать компьютер для решения своих задач, не имея специальной подготовки.
При проектировании языка использовались следующие восемь принципов. Новый язык должен был:
- быть простым в использовании для начинающих;
- быть языком программирования общего назначения;
- предоставлять возможность расширения функциональности, доступную опытным программистам;
- быть интерактивным;
- предоставлять ясные сообщения об ошибках;
- быстро работать на небольших программах;
- не требовать понимания работы аппаратного обеспечения;
- защищать пользователя от операционной системы.
Критика[править]
В пору своего расцвета (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]
В ответ на критику адепты Бейсика замечают, что критики приписывают языку те негативные стороны, которые следовало бы отнести к его неправильному применению. Недостатки Бейсика (если иметь в виду ранние диалекты) проявляются при попытке профессиональной разработки на нём сложных и крупных программ и при использовании его как базового языка для обучения программистов, но ни для одного их этих применений данный язык не предназначался; его основной задачей было предоставить студентам-непрограммистам возможность после минимального обучения самостоятельно писать простейшие программы для собственных нужд, чтобы не отвлекать на эту работу специалистов. Этой задаче язык вполне соответствует.
Примечания[править]
- ↑ Русскоязычное название, использовавшееся ещё в советских компьютерах.
- ↑ Команды Бейсика начинались с номера строки, который определял порядок выполнения, давал возможность перейти к строке по её номеру или заменить её в командной строке, введя новую строчку с тем же номером. Обычно строчки нумеровались кратными десяти, чтобы можно было вставлять новые строчки между ними, не меняя нумерацию остальной программы.
- ↑ How do we tell truths that might hurt?, The threats to computing science
Ссылки[править]
- Бейсик в Википедии
- BASIC Computer Games в библиотеке Atari Archives