Сообщество Engee

Химический калькулятор

Автор
avatar-maximsidorovmaximsidorov
Notebook

Химический калькулятор

Этот пример показывает реализацию химического калькулятора на языке Julia, который позволяет вычислять молярную массу химических соединений по их формулам.

Введение

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

Основная часть

Здесь определяются молярные массы химических элементов в виде констант

const H = 1.008
const He = 4.002602
const Li = 6.94
const Be = 9.0121831
const B =  10.81
const C =  12.011
const N =  14.007
const O =  15.999
const F =  18.998403163
const Ne = 20.1797
const Na = 22.98976928
const Mg = 24.305
const Al = 26.9815385
const Si = 28.085
const P =  30.973761998
const S =  32.06
const Cl = 35.45
const Ar = 39.948
const K =  39.0983
const Ca = 40.078
const Sc = 44.955908
const Ti = 47.867
const V =  50.9415
const Cr = 51.9961
const Mn = 54.938044
const Fe = 55.845
const Co = 58.933194
const Ni = 58.6934
const Cu = 63.546
const Zn = 65.38
const Ga = 69.723
const Ge = 72.630
const As = 74.921595
const Se = 78.971
const Br = 79.904
const Kr = 83.798
const Rb = 85.4678
const Sr = 87.62
const Y =  88.90584
const Zr = 91.224
const Nb = 92.90637
const Mo = 95.95
const Ru = 101.07
const Rh = 102.90550
const Pd = 106.42
const Ag = 107.8682
const Cd = 112.414
const Ind = 114.818
const Sn = 118.710
const Sb = 121.760
const Te = 127.60
const I =  126.90447
const Xe = 131.293
const Cs = 132.90545196
const Ba = 137.327
const La = 138.90547
const Ce = 140.116
const Pr = 140.90766
const Nd = 144.242
const Pm = 145
const Sm = 150.36
const Eu = 151.964
const Gd = 157.25
const Tb = 158.92535
const Dy = 162.500
const Ho = 164.93033
const Er = 167.259
const Tm = 168.93422
const Yb = 173.054
const Lu = 174.9668
const Hf = 178.49
const Ta = 180.94788
const W =  183.84
const Re = 186.207
const Os = 190.23
const Ir = 192.217
const Pt = 195.084
const Au = 196.966569
const Hg = 200.592
const Tl = 204.38
const Pb = 207.2
const Bi = 208.98040
const Po = 209
const At = 210
const Rn = 222
const Fr = 223
const Ra = 226
const Ac = 227
const Th = 232.0377
const Pa = 231.03588
const U =  238.02891
const Np = 237
const Pu = 244
const Am = 243
const Cm = 247
const Bk = 247
const Cf = 251
const Es = 252
const Fm = 257
257

Функция для вычисления молярной массы

Основная функция, которая принимает строку с химической формулой и возвращает молярную массу

function molar_mass(s)
    # Заменяем числа в строке на '*' и число (например, H2 -> H*2)
    s = replace(s, r"(\d+)" => (x) -> "*$x")
    
    # Заменяем элементы и открывающие скобки на '+' и элемент/скобку 
    # (например, H -> +H, Na -> +Na, ( -> +( )
    s = replace(s, r"[A-Z][a-z]{0,2}|\(" => (x) -> "+$x")
    
    # Преобразуем строку в выражение Julia и вычисляем его
    eval(Meta.parse(s))
end
molar_mass (generic function with 1 method)

Пример расчёта молярной массы органического соединения:

molar_mass("C2H5OH")
46.069

Тесты для проверки корректности работы

Тесты для проверки работы функции

@assert 1.008 == molar_mass("H")                # Водород
@assert 2.016 == molar_mass("H2")               # Молекула водорода
@assert 18.015 == molar_mass("H2O")             # Вода
@assert 142.03553856000002 == molar_mass("Na2SO4")  # Сульфат натрия
@assert 84.162 == molar_mass("C6H12")           # Циклогексан
@assert 186.29500000000002 == molar_mass("COOH(C(CH3)2)3CH3")  # Сложное органическое соединение

Заключение

В этом примере мы рассмотрели реализацию химического калькулятора на языке Julia. Мы создали набор констант с молярными массами химических элементов и написали функцию, которая анализирует химическую формулу и вычисляет её молярную массу. Программа успешно проходит тесты для различных типов химических формул, включая простые молекулы, ионные соединения и сложные органические молекулы со скобками. Это может быть полезным инструментом для химических расчетов в научных и образовательных целях.

Пример разработан с использованием материалов Rosetta Code