nabbla (nabbla1) wrote,
nabbla
nabbla1

PhysUnitCalc v 0.3: два языка, переменные и еще больше величин

Продолжаю потихоньку мучать калькулятор, работающий с размерными величинами, вот ссылка на свежую версию.

Изменения:
- страшный глюк исправлен, м и М работают корректно.
[Подробнее]При этом наименования величин по-прежнему нечувствительны к регистру, т.е мА и ма - это одно и то же, миллиамперы, а МА и Ма - это мегаамперы.
Попутно убрал величину in (inches, дюймы), поскольку получалась неоднозначность - min могло означать как минуты, так и миллидюймы. Сами дюймы остались, но название надо вводить целиком: Inches.



- интерфейс на двух языках - русском и английском.
[Подробнее]При включении выставляется язык, заданный в настройках операционной системы, но на ходу можно его поменять. Единицы можно использовать совместно - и русские, и английские, от настроек языка лишь зависит, в каких будет выдаваться ответ, если это не оговорено четко. Скажем, 220 V * 10 A даст 2200 Вт на русском и 2200 W на английском. Конечно, всегда можно написать [W], тогда их и получим.

- адекватные сообщения об ошибках, более-менее приведенные к единому стилю и также на двух языках.
[Подробнее]
errors.png

english_errors.png

Здесь приведены почти все, которые могут встретиться пользователю, хотя есть еще несколько, касающихся "хранилища" единиц измерения, хотя пока оно не user-friendly, так, наткнувшись хоть на одну ошибку в текстовом файле, программа оставляет всякие попытки считать другие единицы.


- переменные. Может, это и перебор, но для "Михалыча" это была необходимая фича, почему бы не ввести и здесь? Оператор присваивания - в стиле C, т.е одинарное =, и можно писать вещи наподобие c=a+b=5, в таком выражении сначала переменной "b" присвоится значение 5, результатом (b=5) тоже будет 5, переменной c присвоится a+5, после чего значение c будет отображено в результате.
[Spoiler (click to open)]
variables.png

Как только переменной присвоено значение, ей можно пользоваться, до этого ругается. Переменные можно называть так же, как функции и единицы измерения, но если мы хотим размерную величину умножить на переменную, могут понадобиться скобки. Т.е 5 V*A - это всегда будут вольт-амперы, а вот (5 V)*A - это 5 вольт, умноженные на переменную А.

Переменная от функции различаются по контексту, если есть аргумент - это функция, иначе переменная.

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


- мелкие исправления с углами: функция arg возвращает аргумент комплексного числа в радианах, а не безразмерным, как раньше. Для ввода "градуса" можно написать \deg, он при разборе превратится в °.

- все единицы измерения теперь задаются не в коде, а в текстовых файлах, в папке data\PhysUnits, так что можно добавить своих величин "по вкусу", например, деньги, и перед каждым включением корректировать курс)
[Подробнее]
Файлы считываются в алфавитном порядке, в каждом из них могут лежать базовые единицы, производные единицы, а также физические константы, которые можно обезразмеривать.

Довольно хитро оно считывается. Сейчас, к примеру, первым загружается файл с единицами на английском языке, они все запоминаются, и если окажется, что других файлов нет, все будет штатно работать и с русской локализацией, 10 m * 20 m даст 200 m^2. Но если считается файл с русскими единицами, то базовые единицы СИ и именованные производные единицы СИ будут заменены на русские: кг,м,с и пр. Также есть "язык" any, в основном для разных символов.

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


- небольшая прибавка единиц измерения: °C или \degC и °F или \degF, чтобы не писать каждый раз Celsius или Fahrenheit, а еще появился целый Вебер (Wb), единица магнитного потока.

- толковой справки до сих пор нет, но хотя бы добавился перечень единиц массы, температуры и времени, в отдельных htm-файликах.

Очень надеюсь, что со всеми этими изменениями не добавились новые баги.
Tags: physunitcalc, математика, программки
Subscribe

  • Нахождение двух самых отдалённых точек

    Пока компьютер долго и упорно мучал симуляцию, я пытался написать на ассемблере алгоритм захвата на ближней дистанции. А сейчас на этом коде можно…

  • Слишком общительный счётчик

    Вчера я чуть поторопился отсинтезировать проект,параметры не поменял: RomWidth = 8 вместо 7, RamWidth = 9 вместо 8, и ещё EnableByteAccess=1, чтобы…

  • Балансируем конвейер QuatCore

    В пятницу у нас всё замечательно сработало на симуляции, первые 16 миллисекунд полёт нормальный. А вот прошить весь проект на ПЛИС и попробовать "в…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 2 comments