dc

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

dc (desk calculator) — пакунок для арифметичних обчислень із довільною точністю в UNIX-системах. Зазвичай він оперує в десятковій системі числення з цілими числами, однак можна задати системи числення для введення і виведення, а також точність обчислень. Загальна структура dc — стековий калькулятор, який використовує зворотний польський запис.

Синтаксис виклику:

dc  [файл]

Якщо аргумент вказано, то спочатку введення виконується з файлу, а потім зі стандартного вхідного потоку.

Допустимі операції[ред. | ред. код]

dc розпізнає такі конструкції:

число Значення числа поміщається в стек. Число — неперервний ланцюжок цифр 0-9 або букв A-F (шістнадцяткові цифри). На початку може стояти знак підкреслення _ для введення від'ємного числа. Число може містити десяткову крапку.
+ — / * % ^ ~ Верхні два числа стека додаються (+), віднімаються (-), множаться (*), ділятися (/), береться остача (%), виконується піднесення до степеня (^) або відбувається ділення з остачею (~).

^: обидва операнди добуваються зі стека і результат поміщається назад у стек. Дробова частина показника степеня нехтується.

~: обидва операнди добуваються зі стека, другий ділиться на перший, результат і остача від ділення поміщається в стек (операція SdSn lnld/ LnLd% дає такий самий результат).

sx, Sx Добувається вершина стека і поміщається в регістр з назвою x, де x — будь-який символ ASCII. Якщо конструкція має вигляд Sx, то x розглядається як стек, у який і поміщається добуте значення.
lx, Lx Значення, що зберігається в регістрі x, поміщається в стек. Регістр x не змінюється. Спочатку всі регістри ініціалізуються нулем. Якщо конструкція має вигляд Lx, то x розглядається як стек, його вершина добувається і поміщається в головний стек.
d Вершина стека подвоюється.
p Виводиться вершина стека (без видалення зі стека).
P Якщо вершина стека — ланцюжок символів, то вона друкується і видаляється зі стека. Якщо вершина стека є числом, то воно друкується як послідовність байтів і видаляється зі стека.
f Виводяться всі елементи стека (без видалення). Зручно для налагодження програм.
q Завершує роботу програми. При виконанні ланцюжка символів рівень рекурсії зменшується на два.
Q Завершує роботу програми. Вершина стека добувається і рівень рекурсії зменшується на отримане значення.
x Вершина стека трактується як ланцюжок символів, що містить команди dc, і виконується.
X Вершина стека замінюється кількістю цифр у її дробовій частини.
[..] Ланцюжок символів, взятий у дужки, поміщається у вершину стека.
=x Два верхні елементи стека добуваються і порівнюються. Якщо вони задовольняють зазначеній умові, то вміст регістра x розглядається як команда dc і виконується. Можна використовувати також знаки порівняння < і > та їх заперечення !< і !>.
v Верхній елемент стека замінюється квадратним коренем з нього. Якщо він мав дробову частину, то вона враховується; в іншому випадку точність обчислень (див.команду k) нехтується.
! Залишок рядка інтерпретується як команда shell.
c Очищення стека.
i Вершина стека добувається і використовується як основа системи числення при введенні. Команда I поміщає використану при введенні основу системи числення у вершину стека.
o Вершина стека добувається і використовується як основа системи числення при виведенні. Команда o поміщає використану при виведенні основу системи числення у вершину стека.
k Добувається вершина стека; вона використовується для задання точності обчислень — кількості знаків у дробовій частині при виведенні і при виконанні множення, ділення і піднесення до степеня.
z У стек поміщається кількість його елементів.
Z Число у вершині стека замінюється його довжиною (без урахування десяткової крапки, знака мінус і провідних нулів, навіть якщо вони після десяткової крапки).
? Зі стандартного вхідного потоку вводиться один рядок і виконується.
;: Використовуються для операцій із масивами.

Приклад використання[ред. | ред. код]

Вивести факторіали перших 10 натуральних чисел:

[la1+dsa*pla10>y]sy
0sa1
lyx

Квайн (програма, яка виводить саму себе):

[91Pn[dx]93Pn]dx
[91PP93P[dx]P]dx

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]

  • dc(1) – сторінка довідки man про користувацькі команди GNU/Linux (англ.)