Simple Qt Calculator

May 03, 2012 00:07

Меня бесит стандартный Microsoft calculator! Не знаю даже, с чего начать. Если выбран обычный вид, он и ведет себя как обычный калькулятор - не понимает порядка действий, просто выполняет последовательно одно за другим. В "инженерном" виде его функциональность внезапно меняется - он начинает соблюдать порядок действий, позволяет даже заключать выражения в скобки, но это все равно страшно неудобно, поскольку не видишь перед глазами выражения, не имеешь возможности проконтролировать, правильно ли оно введено. Если где-то допустил ошибку, не остается ничего другого, кроме как начать сначала. Кнопки на экране - отдельная песня. Кому они нужны, это так неудобно - щелкать мышкой! Да, цифры и 4 арифметические операции можно ввести и с клавиатуры, но остальное все равно придется щелкать.

Что самое обидное, многие "альтернативные" калькуляторы сделаны по тому же самому принципу - много кнопок на экране и окошко для результата. Может, считается, что для ученых/инженеров есть программы посерьезнее, наподобие matcad'а/matlab'a и иже с ними. Но это уже забивание гвоздей микроскопом - хочется, чтобы была предельно простая, маленькая и шустрая программка - именно калькулятор, для того, чтобы быстро что-нибудь посчитать.

Вот как я вижу "правильный" калькулятор:


Это моя первая (и пока последняя) программа, написанная в среде Qt :) Минималистичный дизайн, зато много возможностей.


Как можно понять из скриншота, надо просто написать выражение в строке "выражение", нажать Enter - и получить результат. Порядок действий соблюдается, можно менять его, расставляя скобки.

Самодельный парсер довольно умен. Он понимает, что одиноко стоящая буква e - это основание натурального логарифма, 2.71828..., но если слева от нее стоит число, а справа число или знак - то это научная запись числа, например 1.2e2 - это 1.2 на десять во второй, т.е 120.

Поддерживаемые операции:
^ - возведение в произвольную степень. Если показатель имеет знак "минус", надо его все-таки заключить в скобки.
Пример: 25^(-0.5)=0.2

ln(x) - натуральный логарифм
lg(x) - логарифм по основанию 2 (предложен Д. Кнутом, очень удобен для программистов)
db(x) - децибелы, db(x)=20*log10(x), т.е db(1)=0, db(2)=6, db(10)=20 и т.д.

sqr(x) - квадратный корень
log(x) - логарифм по основанию 10
exp(x) - экспонента
sin(x), cos(x), tan(x) - синус, косинус, тангенс от угла в радианах
deg(x) - пересчитать из радиан в градусы
rad(x) - из градусов в радианы
sinh(x),cosh(x),tanh(x) - гиперболические функции
asinh(x),acosh(x),atanh(x) - обратные гиперболические функции
asin(x),acos(x),atan(x) - обратные тригонометрические, ответ в радианах
sind(x),cosd(x),tand(x) - тригонометрические функции, в которых угол задается в градусах, а не в радианах
asind(x),acosd(x),atand(x) - обратные тригонометрические функции, ответ в градусах

pi, e - математические константы :)

Если где-то допущена ошибка, например, число открывающих скобок не равно числу закрывающих, написаны какие-то посторонние символы, или где-то вышло деление на ноль, корень от отрицательного числа и пр., выдается NaN.

Впрочем, это не очень информативно. В следующей версии думаю при ошибке писать в ответе, где именно она возникла и в чем заключается.

Окно программы можно растягивать по горизонтали, чтобы вместить длинное выражение.

Вот, вроде бы и все... Скачать для windows (со всеми необходимыми библиотеками) можно отсюда, исходные коды - отсюда .

Как обычно, если есть какие-то пожелания - пишите. Приятного пользования!

программки

Previous post Next post
Up