PDP-11 , Электроника-60, СМ-1420 и им подобные
Главная | Каталог статей | Регистрация | Вход
Приветствую Вас Гость | RSS

Дорогие посетители.Убедительно просим Вас Загружать имеющуюся у Вас информацию (Файлы образов дисков, Исходники, Книги и т.д.) касающуюся ПЭВМ с архитектурой PDP-11.

Меню сайта
  • Создание сайтов в Усть-каменогорске
  • Люди на сайте
    Друзья Нравится
    Google
    Форма входа
    Категории раздела
    Contrib [88]
    Статьи, взятые из разных источников.
    My atticle [2]
    Статьи,написаные лично мною
    Forex [22]
    Всё о заработке на рынке FOREX
    Поиск
    Облако тэгов
    RT-11 LSI-11 PDP-11 Последняя версия RT-11 БК ДВК бк-0010 приставка Бортника сопроцессор Кроскомпилятор схема ANDOS БК-0011 КНГМД RADIX-50 Rtty БК0010 радиосвязь Сеть УКНЦ 11/70 11/83 11/93 RSX-11
    Прогноз Forex
    Котировки от Forex4You
    Открыть реальный счет
    Статистика
    Счетчик тИЦ, PR и обратных ссылок Resurs.kz: сайты Казахстана и раскрутка сайта
    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Поиск
    Главная » Статьи » Contrib

    Язык Фокал

    Фокал

    FOCAL (аббр. FOrmula CALculator) — интерпретируемый язык программирования высокого уровня, переработка языка JOSS.

    Фокал, в большой мере, разработка Ричарда Мерилла (Richard Merrill), оказал самое сильное влияние на компьютеры DEC PDP-8. Меррил написал изначальный (в 1968 году) и классический (FOCAL-69) интерпретаторы Фокала для PDP-8. Сама DEC позиционировала Фокал как «язык типа JOSS».

    Как и ранние версии Бейсика, интерпретатор Фокала сам обеспечивал все необходимое программное окружение и не нуждался в операционной системе.

    Фокал крайне нетребователен к ресурсам. Так, он работал на самых простых вариантах PDP-8 (в том числе на системах без устройств хранения). Многопользовательские варианты интерпретатора поддерживали одновременную работу до четырех пользователей на телетайпных терминалах. Позднее Фокал имел реализации для PDP-7/9 и PDP-11.

    Компания Coca-Cola использовала внутри фирмы доработанную версию Фокала, под названием COKE.

    Из отечественных компьютеров Фокал существовал на Электронике БК-0010/0011 и ДВК встроенный в ПЗУ (в поздних моделях БК — доступный на картридже). Были также доступны расширения Фокала для этих машин, написанные различными энтузиастами. Расширения содержали разнообразные дополнительные команды и функции для работы с графикой, звуком, запуска двоичных программ, обработки строк и пр.

    Существенно расширенная версия Фокал использовалась в качестве включающего языка в ДИАСП — Диалоговой Системе Проектирования — специализированной САПР, предназначенной для целей микроэлектроники.

    В 1990-е годы энтузиастами была предпринята попытка переноса Фокала на IBM PC (Turbo Focal), но она не вышла из стадии бета-версии, которая распространялась по каналам BBS.

    Работоспособность публично доступной в исходных текстах версии Focal-81 была успешно протестирована на следующих платформах и компиляторах:

    • Sun SPARC
      • gcc 2.6.3 (ANSI С) и Sun cc (K&R C), под SunOS 4.1.3
      • gcc 2.6.3 (ANSI С) и SunPro cc 2.0.1 (ANSI С), под Solaris 2.3
    • HP (9000 модель 720)
      • gcc 2.5.8 (ANSI C) и HP cc (ANSI C) под HPUX 8.05
    • x86
      • MS C (ANSI C) и LSI C-86 (близко к ANSI C) под MS-DOS
      • MS Visual C++ под Win32 (не тестировалась)

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

    В настоящее время Фокал не развивается и практически не используется, вышеупомянутые порты Focal-81 были проделаны энтузиастами в целях развлечения.

    Некоторые команды Фокала

    команда описание аналог в Бейсике
    COMMENT комментарий (текст следом за командой игнорируется) REM
    TYPE вывод на консоль значений констант и выражений PRINT
    QUIT штатное завершение выполнения программы END
    SET присваивание значения переменной (или элементу массива) LET
    ASK ввод значений с консоли INPUT
    GOТО безусловный переход GOTO
    DO вызов подпрограммы GOSUB
    RETURN возврат из подпрограммы RETURN
    IF ветвление по значению выражения частично соответствует IF

    Команды Фокала могут быть записаны в сокращенной форме, только первой буквой. Существовали также версии Фокала на европейских языках (поставляемые DEC).

    Примеры программ

    Стандартный пример Hello World

    1.05 C Программа выводит на экран тестовую строку
    1.10 T "Hello World !" !
    1.20 Q

    Решение квадратного уравнения вида ax² + bx + c = 0

    1.05 C **** Программа для решения квадратного уравнения вида ax^2 + bx + c = 0
    1.10 T "Введите коэффициенты a, b, c для уравнения ax^2 + bx + c = 0" !
    1.20 A "a = ", a ! "b = ", b ! "c = ", c
    1.30 T ! "Решаем уравнение (", a, ")x2 + (", b, ")x + (", c, ") = 0" !
    1.35 C **** Вычисляем дискриминант
    1.40 S d = b^2 - 4*a*c
    1.50 T ! "D = ", d !
    1.55 C **** Выясняем количество корней
    1.60 I (d) , 3, 4
    1.65 С **** первая метка пропущена, поэтому при значении D
    1.66 C **** меньшем нуля мы попадаем на следующую за IF строку

    2.05 С **** Отрицательный дискриминант - корней нет
    2.10 T "Уравнение не имеет действительных корней" !
    2.20 Q

    3.05 С **** Нулевой дискриминант - один корень
    3.10 T "Уравнение имеет один корень" !
    3.20 S s = 0
    3.30 D 5
    3.40 T "x = ", x !
    3.90 Q

    4.05 С **** Положительный дискриминант - два корня
    4.10 Т "Уравнение имеет два корня" !
    4.20 S s = FSQT(d)
    4.30 D 5
    4.40 T "x1 = ", x !
    4.50 S s = -s
    4.30 D 5
    4.40 T "x2 = ", x !
    4.90 Q

    5.05 C **** Подпрограмма вычисления корня, где s - корень дискриминанта со знаком
    5.10 S x = (s - b) / 2*a
    5.90 R

    Метки строк в Фокале имеют вид <номер_группы>.<номер_строки>. В командах GOTO, IF, DO может указываться как полная метка, так и номер группы без номера строки (вызывает переход на строку с наименьшим номером в данной группе).

    Восклицательный знак «!» в командах ASK и TYPE (ввод/вывод с консоли) является (наравне с «,») разделителем аргументов, и вызывает перевод строки, перед вводом или выводом следующего элемента списка.

    Команда IF вычисляет значение выражения и переходит по одной из трех меток, соответственно, при значении меньшем нуля, значении равном нулю и значении большем нуля. Если метка опущена, то управление передается на следующую за IF строку.

    Литература и публикации

    • В.А.Абрамов, А.В.Стрижков, А.Р.Федоров; «Диалоговый язык ФОКАЛ». М.«Высшая школа», 1991. Серия «Программное обеспечение МикроЭВМ», книга 4.
    • Г.И.Фролов, Г.А.Куправа, Ю.Г.Чаиров и др.; Под редакцией Л.Н.Преснухина; «Программирование на языке ФОКАЛ». М.Изд-МИЭТа, 1984
    • А.Н.Писаревский, Л.Г.Осетинский, М.Г.Осетинский; «ФОКАЛ - диалоговый язык для миниЭВМ». Л.«Машиностроение». Ленинградское отделение. 1985
    Категория: Contrib | Добавил: un7jks (20.10.2009)
    Просмотров: 32641 | Рейтинг: 5.0/1 |

    Хостинг от uCoz