]]> ]]>

QuickBASIC

Реализация языка программирования Basic

Microsoft QuickBASIC (сокращение QBasic некорректно, это совершенно другая реализация) — компилятор и интегрированная среда разработки для языка BASIC, который разрабатывался корпорацией Microsoft. QuickBasic создавался ориентированным на DOS, однако недолгое время существовала версия для Mac OS. QuickBASIC основан на GW-BASIC, но включает некоторые улучшения и расширения: добавлены пользовательские типы данных, улучшены структуры программирования, усовершенствована работа с графикой и работа с диском. Microsoft распространяла QuickBASIC как первую профессиональную систему разработки программ на BASIC.

QuickBASIC 1.0 была выпущена 18 августа 1985 и распространялась на одном пятидюймовом диске. С версии QuickBASIC 2.0 была включена среда разработки, и пользователи могли редактировать программу непосредственно в текстовом редакторе.

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

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

QuickBASIC 4.5 — последняя версия, выпущенная в 1988 году, однако разработка профессиональной системы разработки (PDS) продолжалась до появления последней версии 7.1 в октябре 1990. Версия IDE BASIC PDS 7.x была названа QuickBASIC Extended (QBX) и исполнялась только под DOS. Преемником QuickBASIC и Basic PDS стал Visual Basic для MS-DOS 1.0. Более поздние версии Visual Basic не включали версии для DOS, так как Microsoft ориентировалась на приложениях для Windows.

Подмножество QuickBASIC 4.5 было названо QBasic. QBasic включался в поставку MS-DOS 5 и в более поздних версиях, который заменил GW-BASIC. QBasic по сравнению с QuickBASIC имел ряд ограничений: включал только интерпретатор, существовало ограничение в его функциональности, создание программ ограничивалось определенным размером и т.д. Поскольку он не содержал компилятора, то не было возможности создавать исполняемые файлы, но программы, написанные на QBasic, могли компилироваться при помощи QuickBASIC 4.5, BASIC PDS 7.x, VBDOS 1.0.

Для ОС Macintosh QuickBASIC 1.0 был выпущен в 1988. Он работал только на System 6 и System 7 (версии ОС) и требовал наличие ОЗУ объемом большим 1 Мб.

Вид QuickBASIC 4.5
Вид QuickBASIC 4.5

Примеры:

Hello, World!:

Пример для версий QBasic 1.1, QuickBasic 4.50, bwBASIC 2.50
PRINT "Hello, World!"

Числа Фибоначчи:

Пример для версий QBasic 1.1, QuickBasic 4.50

Используется рекурсивное определение чисел Фибоначчи. Каждый вызов команды PRINT выводит аргументы в отдельную строку и добавляет пробел перед и после выводимого числа. В результате вывод программы имеет следующий вид:

1 ,
1 ,
2 ,
3 ,
5 ,
8 ,
13 ,
21 ,
34 ,
55 ,
89 ,
144 ,
233 ,
377 ,
610 ,
987 ,

DECLARE FUNCTION fibonacci (n)

FOR i = 1 TO 16:
    PRINT fibonacci(i); ", "
NEXT i
PRINT "..."

FUNCTION fibonacci (n)
    IF (n <= 2) THEN
        fibonacci = 1
    ELSE
        fibonacci = fibonacci(n - 1) + fibonacci(n - 2)
    END IF
END FUNCTION

Числа Фибоначчи:

Пример для версий QBasic 1.1, QuickBasic 4.50

Уже вычисленные числа хранятся в массиве F и извлекаются оттуда для вычисления следующих. Для получения вывода программы в нужном формате числа в массиве конкатенируются в одну строку с нужными разделителями. Функция STR$ преобразует число в строку.

DIM F(16)
F(1) = 1
F(2) = 1
FOR i = 3 TO 16:
    F(i) = F(i - 1) + F(i - 2)
NEXT i
DIM S AS STRING
S = ""
FOR i = 1 TO 16:
    S = S + STR$(F(i)) + ", "
NEXT i
S = S + "..."
PRINT S

Числа Фибоначчи:

Пример для версий QBasic 1.1, QuickBasic 4.50

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

DECLARE FUNCTION FIBONACCI (n)

DIM S AS STRING
S = ""
FOR i = 1 TO 16:
    S = S + STR$(INT(FIBONACCI(i) + .1)) + ","
NEXT i
S = S + "..."
PRINT S

FUNCTION FIBONACCI (n)
    p1 = ((1 + SQR(5)) * .5) ^ n
    p2 = ((1 - SQR(5)) * .5) ^ n
    FIBONACCI = (p1 - p2) / SQR(5)
END FUNCTION

Факториал:

Пример для версий QBasic 1.1, QuickBasic 4.50

По умолчанию для вычислений используется вещественный тип данных. Вывод программы имеет следующий вид:
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
11! = 3.99168Е+07
12! = 4.790016Е+08
13! = 6.227021Е+09
14! = 8.717829Е+10
15! = 1.307674Е+12
16! = 2.092279Е+13

DECLARE FUNCTION factorial (n)

FOR i = 0 TO 16:
    PRINT STR$(i) + "! =" + STR$(factorial(i))
NEXT i
END

FUNCTION factorial (n)
    IF n = 0 THEN
        factorial = 1
    ELSE
        factorial = n * factorial(n - 1)
    END IF
END FUNCTION

Квадратное уравнение:

Пример для версий QuickBasic 4.50
PRINT "A = "
INPUT A
IF (A = 0) THEN
    PRINT "Not a quadratic equation."
ELSE
    PRINT "B = "
    INPUT B
    PRINT "C = "
    INPUT C
    D = B * B - 4 * A * C
    IF (D = 0) THEN
        PRINT "x = " + STR$(-B / 2! / A)
    ELSE
        IF (D > 0) THEN
            PRINT "x1 = " + STR$((-B + SQR(D)) / 2! / A)
            PRINT "x2 = " + STR$((-B - SQR(D)) / 2! / A)
        ELSE
            PRINT "x1 = (" + STR$(-B / 2! / A) + "," + STR$(SQR(-D) / 2! / A) + ")"
            PRINT "x2 = (" + STR$(-B / 2! / A) + "," + STR$(-SQR(-D) / 2! / A) + ")"
        END IF
    END IF
END IF

Факториал:

Пример для версий QBasic 1.1, QuickBasic 4.50

Используется итеративное определение факториала. При вычислении 13! возникает арифметическое переполнение, и здесь поведение разных реализаций отличается: QBasic сообщает о переполнении, а QuickBasic просто выводит отрицательные значения. Кроме того, команда PRINT по умолчанию выводит по одному пробелу перед числом и после него.

DIM f AS LONG
f = 1
PRINT " 0 ! ="; f
FOR i = 1 TO 16:
    f = f * i:
    PRINT i; "! ="; f
NEXT i
END

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам