Хочу написать калькулятор ионов для солей - VB
Формулировка задачи:
Ребята, все привет. Нужна помощь, хочу написать калькулятор ионов для солей. Он такой есть вот тут. Но мне нужен на VB. Смысл такой, в текстовое окно вводим формулу например KH2PO4 как разложить эту строку на атомы, что сложить все атомы например K=39+(H=1*2)+P=30+(O=16*4)=139? Там если посмотреть исходный код есть строки такие:
Я так понимаю это объявляются переменные?
А это что массив? Нифига не понимаю. Это Ява скрипт.
И вот это еще, для чего? Для поиска в строке этих Символов?
Спасибо за редактирование, смысл уловил.
Думаю сформулировал сложно вопрос. Тогда вот так спрошу, вот есть Textbox вводится строка KH2PO4, как ее разложить, то есть распознать что это именно K, Н2, P, O4.
Решение задачи: «Хочу написать калькулятор ионов для солей»
textual
Листинг программы
Option Explicit
Option Compare Binary
Private Type t_El
N As String
M As Double
End Type
Dim a(0 To 92) As t_El
Dim EM() As Byte
Sub main()
a(1).N = "H": a(1).M = 1.008: a(2).N = "He": a(2).M = 4.003: a(3).N = "Li": a(3).M = 6.941: a(4).N = "Be": a(4).M = 9.0122
a(5).N = "B": a(5).M = 10.811: a(6).N = "C": a(6).M = 12.011: a(7).N = "N": a(7).M = 14.007: a(8).N = "O": a(8).M = 15.999
a(9).N = "F": a(9).M = 18.998: a(10).N = "Ne": a(10).M = 20.18: a(11).N = "Na": a(11).M = 22.99: a(12).N = "Mg": a(12).M = 24.305
a(13).N = "Al": a(13).M = 26.982: a(14).N = "Si": a(14).M = 28.086: a(15).N = "P": a(15).M = 30.974: a(16).N = "S": a(16).M = 32.066
a(17).N = "Cl": a(17).M = 35.453: a(18).N = "Ar": a(18).M = 39.948: a(19).N = "K": a(19).M = 39.098: a(20).N = "Ca": a(20).M = 40.078
a(21).N = "Sc": a(21).M = 44.956: a(22).N = "Ti": a(22).M = 47.88: a(23).N = "V": a(23).M = 50.942: a(24).N = "Cr": a(24).M = 51.996
a(25).N = "Mn": a(25).M = 54.938: a(26).N = "Fe": a(26).M = 55.847: a(27).N = "Co": a(27).M = 58.933: a(28).N = "Ni": a(28).M = 58.69
a(29).N = "Cu": a(29).M = 63.546: a(30).N = "Zn": a(30).M = 65.39: a(31).N = "Ga": a(31).M = 69.723: a(32).N = "Ge": a(32).M = 72.61
a(33).N = "As": a(33).M = 74.922: a(34).N = "Se": a(34).M = 78.96: a(35).N = "Br": a(35).M = 79.904: a(36).N = "Kr": a(36).M = 83.8
a(37).N = "Rb": a(37).M = 85.468: a(38).N = "Sr": a(38).M = 87.62: a(39).N = "Y": a(39).M = 88.906: a(40).N = "Zr": a(40).M = 91.224
a(41).N = "Nb": a(41).M = 92.906: a(42).N = "Mo": a(42).M = 95.94: a(43).N = "Tc": a(43).M = 98: a(44).N = "Ru": a(44).M = 101.07
a(45).N = "Rh": a(45).M = 102.91: a(46).N = "Pd": a(46).M = 106.42: a(47).N = "Ag": a(47).M = 107.87: a(48).N = "Cd": a(48).M = 112.41
a(49).N = "In": a(49).M = 114.82: a(50).N = "Sn": a(50).M = 118.71: a(51).N = "Sb": a(51).M = 121.75: a(52).N = "Te": a(52).M = 127.6
a(53).N = "I": a(53).M = 126.9: a(54).N = "Xe": a(54).M = 131.29: a(55).N = "Cs": a(55).M = 132.91: a(56).N = "Ba": a(56).M = 137.33
a(57).N = "La": a(57).M = 138.9: a(58).N = "Ce": a(58).M = 140.1: a(59).N = "Pr": a(59).M = 140.9: a(60).N = "Nd": a(60).M = 144.2
a(61).N = "Pm": a(61).M = 145: a(62).N = "Sm": a(62).M = 150.4: a(63).N = "Eu": a(63).M = 152: a(64).N = "Gd": a(64).M = 157.3
a(65).N = "Tb": a(65).M = 158.9: a(66).N = "Dy": a(66).M = 162.5: a(67).N = "Ho": a(67).M = 164.9: a(68).N = "Er": a(68).M = 167.3
a(69).N = "Tm": a(69).M = 168.9: a(70).N = "Yb": a(70).M = 173: a(71).N = "Lu": a(71).M = 174.97: a(72).N = "Hf": a(72).M = 178.49
a(73).N = "Ta": a(73).M = 180.95: a(74).N = "W": a(74).M = 183.85: a(75).N = "Re": a(75).M = 186.21: a(76).N = "Os": a(76).M = 190.2
a(77).N = "Ir": a(77).M = 192.22: a(78).N = "Pt": a(78).M = 195.08: a(79).N = "Au": a(79).M = 196.97: a(80).N = "Hg": a(80).M = 200.59
a(81).N = "Tl": a(81).M = 204.38: a(82).N = "Pb": a(82).M = 207.2: a(83).N = "Bi": a(83).M = 208.98: a(84).N = "Po": a(84).M = 209
a(85).N = "At": a(85).M = 210: a(86).N = "Rn": a(86).M = 222: a(87).N = "Fr": a(87).M = 223: a(88).N = "Ra": a(88).M = 226
a(89).N = "Ac": a(89).M = 227: a(90).N = "Th": a(90).M = 232.04: a(91).N = "Pa": a(91).M = 213.04: a(92).N = "U": a(92).M = 238.03
Dim f As String, ff() As String, M As Double, i As Byte
Dim msg1$, msg2$
ReDim EM(1 To UBound(a)) '
f = InputBox("Введите формулу молекулы", "Калькулятор молекулярной массы", "FeSO4.7H2O")
ff = Split(f, ".")
For i = 0 To UBound(ff)
mas ff(i)
Next i
For i = 1 To UBound(a)
If EM(i) Then
M = M + a(i).M * EM(i)
msg1 = msg1 & a(i).N & EM(i)
msg2 = msg2 & a(i).N & " " & a(i).M & " x " & EM(i) & " = " & a(i).M * EM(i) & vbCrLf
End If
Next i
MsgBox msg1 & vbCrLf & msg2 & "Молекулярная масса: " & M, , f
End Sub
Sub mas(ByVal f As String)
Dim i As Byte, j As Byte, c1 As Byte, c2 As Byte
c1 = Val(f)
If c1 = 0 Then
c1 = 1
Else
f = VBA.Mid$(f, Len(CStr(c1)) + 1)
End If
While f <> ""
j = 0
For i = 1 To 92
If a(i).N = VBA.Left$(f, Len(a(i).N)) Then
If Len(a(j).N) < Len(a(i).N) Then j = i
End If
Next i
If j = 0 Then MsgBox f & " - нет такого элемента!": Exit Sub
f = VBA.Mid$(f, Len(a(j).N) + 1)
c2 = Val(f)
If c2 = 0 Then
c2 = 1
Else
f = VBA.Mid$(f, Len(CStr(c2)) + 1)
End If
EM(j) = EM(j) + c1 * c2
Wend
End Sub