BC(1) BC(1) НАЗВАНИЕ bc - арифметический язык для вычислений с произвольной точностью СИНТАКСИС |bc [-c] [-l] [файл ...] ОПИСАНИЕ Bc - интерактивный процессор для C-подобного языка, позволяющий оперировать числами неограниченной точнос- ти. Ввод производится из указанных файлов, а затем со стандартного ввода. На самом деле bc является препро- цессором к команде dc(1), которая вызывается автомати- чески, если только не указана опция -c. Смысл опций: -c Только компилировать. Результат направляется на стандартный вывод. -l Подключение математической библиотеки для операций произвольной точности. Ниже описывается синтаксис языка bc; L обозначает любую из букв [a-z], E - выражение, S - оператор. Комментарии заключаются между /* и */. Переменные простая переменная: L элемент массива: L [ E ] слова ibase, obase, scale. Другие операнды числа произвольной длины, возможно со знаком и де сятичной точкой; (E) sqrt(E) корень квадратный; length(E) количество значащих десятичных цифр; scale(E) количество десятичных цифр в дробной части; L(E,...,E) Операции |+ - * / % ^ (% - остаток, ^ - степень); |++ -- (префиксные и постфиксные, применяются к переменным); |== <= >= != <> |= =+ =- =* =/ =% =^ Операторы E {S;...;S} if (E) S while (E) S for (E; E; E) S пустой_оператор break quit Определения функций |define L (L,...,L) { | auto L,...,L | S;...;S | return (E) |} Функции, определенные в математической (-l) библиотеке: s(x) синус; c(x) косинус; e(x) экспонента; l(x) натуральный логарифм; a(x) арктангенс; j(n,x) функция Бесселя. Все аргументы функций передаются по значению. Значение оператора, являющегося выражением, печатается, если он не является оператором присваивания. Операторы могут разделяться как точками с запятой, так и перево- дами строк. Присваивание переменной scale определяет точность выполнения операций. Присваивание переменным ibase и obase определяет систему счисления для ввода и вывода соответственно. Одна и та же буква может быть одновременно использована как имя простой переменной, имя массива и имя функции. Все переменные являются глобальными. Автоматические пе- ременные (описанные как auto) размещаются в стеке при входе в функцию. При использовании массивов в качестве аргументов функций или автоматических переменных за именем массива должны следовать пустые квадратные скоб- ки. ПРИМЕР Выдать корень квадратный из целых чисел от 1 до 10. |/* Определяется точность вычислений */ | scale = 20 |/* Определяется функция */ | define r(a) { | auto x, y | y = a + 1 | x = y + 1 | while (y < x) { | x = y | y = 0.5 * (x + a / x) | } | return (x) | } |/* Вычисляется значение */ | for ( i = 1; i <= 10; i++ ) r(i) |/* Выход */ | quit В качестве примеров можно использовать определения стандартных функций, хранящиеся в файле /usr/lib/lib.b. ФАЙЛЫ /usr/lib/lib.b Библиотека математических функций. /usr/bin/dc Встроенный калькулятор. СМ. ТАКЖЕ dc(1). СЮРПРИЗЫ Не обрабатываются логические операции && и ||. Оператор for должен содержать все три выражения. Оператор quit интерпретируется при вводе, а не при вы- полнении.