Хочу написать калькулятор ионов для солей - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.615 из 5
Похожие ответы