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.06print "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
]]>