]]> ]]>
Править | Обсудить | История

bc

Создан под влиянием:
Повлиял на:
Парадигма:
Типизация:
Реализации и версии (свернуть все | развернуть все):
Язык программирования

bc (от bench calculator или basic calculator) — язык вычислений произвольной точности с C-подобным синтаксисом.

Часто используется в Unix-системах в качестве калькулятора с интерфейсом командной строки.

Элементы синтаксиса:

Комментарий до конца строки #
Комментарии, которые не могут быть вложенными /* ... */
Регистрозависимость да (только нижний регистр)
Регулярное выражение идентификатора переменной [a-z][_a-z0-9]*
Присваивание значения переменной =
Объявление переменной нет
Объявление переменной с присваиванием значения variable = value
Группировка выражений ( ... )
Блок { ... }
Равенство ==
Неравенство !=
Сравнение < > <= >=
Определение функции define f(p1, p2, ...) ...
Вызов функции f(a, b, ...)
Вызов функции без параметров f()
Если - то if (condition) ...
Если - то - иначе if (condition) ... else ...
Бесконечный цикл while (1) ...
Цикл с предусловием while (condition) ...
Цикл for - next для диапазона целых чисел с инкрементом на 1 for (i = 1; i <= 10; i++) ...
Цикл for - next для диапазона целых чисел с декрементом на 1 for (i = 10; i > 0; i--) ...

Примеры:

Факториал:

Пример для версий GNU bc 1.06

Используется рекурсивное определение факториала.

#! /usr/bin/env bc
define factorial(n) {
    if (n == 0) return(1);
    return(n * factorial(n - 1));
}

for (n = 0; n <= 16; n++) {
    print n; "! = "; factorial(n);
}
quit

Hello, World!:

Пример для версий GNU bc 1.06
print "Hello, World!\n";

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

Пример для версий GNU bc 1.06

Используется рекурсивное определение чисел Фибоначчи.

define fibonacci(n) {
    if (n <= 2) return(1);
    return(fibonacci(n-1)+fibonacci(n-2));
}
 
for (n = 1; n <= 16; n++) {
    print fibonacci(n); ", "
}
print "..."
quit

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

Пример для версий GNU bc 1.06

Используется формула Бине. Следует отметить, что bc — калькулятор произвольной точности, поэтому выводить числа приходится с округлением до целого. Для этого устанавливается точность 0 знаков после десятичной точки, и x округляется вручную (встроенной функции округления в bc нет).

for (n = 1; n <= 16; n++) {
    scale = 10
    x = (((1 + sqrt(5)) * .5) ^ n - ((1 - sqrt(5)) * .5) ^ n) / sqrt(5)
    scale = 0
    print (x+0.5)/1; ", "
}
print "..."

Комментарии

]]>

blog comments powered by Disqus

]]>

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