LINUX.ORG.RU

Странное поведение bwbasic

 


0

1

Недавно мне попалась старинная книга по BASIC. Я чисто для развлечения начал писать небольшие программы, но обнаружил, что интерпретатор bwbasic на Linux работает не так, как написано. Вот пример:

10 DIM A(1,2)
20 GOTO 50
30 DATA 5, 6
40 READ A(1,1), A(1,2)
50 DATA 7, 8
60 READ A(1,1), A(1,2)
70 PRINT A(1,1), A(1,2)
80 END

выдает

5 6
вместо положенных
7 8

При этом, если ввести

10 DIM A(1,2)
20 GOTO 50
30 REM ASD
40 REM IOP
50 DATA 7, 8
60 READ A(1,1), A(1,2)
70 PRINT A(1,1), A(1,2)
80 END

выдает

7 8

, как и должен.

В чём ошибка?

★★★★★

Последнее исправление: Vsevolod-linuxoid (всего исправлений: 2)

Десять раз читал говнокод и так ничего не понял. И это дерьмо использовали как язык для начального обучения программированию?? TurboPascal это просто C# и VisualStudio про сравнению с этим уебищем.

anonymous
()

DATA - единый файл данных внутри программы, READ читает этот файл с начала, если правильно помню.
BasicA, GWBasic, QBasic тоже имели различия в части того, что исполняемый оператор, а что только декларация (в т.ч. DEFxxx и т.п.).

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 1)

QBasic ведёт себя точно также:

10 GOTO 40
20 DATA 1,2
30 READ a,b
40 DATA 3,4
50 READ a,b
60 ? a,b
1              2
На самом деле, DATA не обязан появляться до READ, может быть и вовсе в самом конце. Для возобновления чтения с отдельной строки есть RESTORE [строка].

bormant ★★★★★
()
Ответ на: Не работает от Vsevolod-linuxoid

Что выдаст:

10 RESTORE 120
20 READ a,b
30 PRINT a,b
40 END
110 DATA 1,2
120 DATA 3,4
Qbasic дает ожидаемые 3 и 4.

Если bwbasic дает что-то другое, можно 1) забить, 2) использовать другой интерпретатор, 3) поправить в исходниках bwbasic.

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.