Хочу написать калькулятор ионов для солей - VB
Формулировка задачи:
Ребята, все привет. Нужна помощь, хочу написать калькулятор ионов для солей. Он такой есть вот тут. Но мне нужен на VB. Смысл такой, в текстовое окно вводим формулу например KH2PO4 как разложить эту строку на атомы, что сложить все атомы например K=39+(H=1*2)+P=30+(O=16*4)=139? Там если посмотреть исходный код есть строки такие:
Я так понимаю это объявляются переменные?
А это что массив? Нифига не понимаю. Это Ява скрипт.
Листинг программы
- var atomString = "";
- var badData=false
- NumAtoms=new Array(0,0,0,0,0,0,0,0,0,0)
- ANofAtom=new Array(0,0,0,0,0,0,0,0,0,0)
- var MolarMass=0
- var printS=""
- var formula=""
- var numEls=""
Листинг программы
- NumAtoms=new Array(0,0,0,0,0,0,0,0,0,0)
- ANofAtom=new Array(0,0,0,0,0,0,0,0,0,0)
И вот это еще, для чего? Для поиска в строке этих Символов?
Листинг программы
- a = new makeArray(92)
- a[1] = new atomArray("H",1.008);
- a[2] = new atomArray("He",4.003);
- a[3] = new atomArray("Li",6.941);
- a[4] = new atomArray("Be",9.0122);
- ......
- a[92] = new atomArray("B",10.811);
Спасибо за редактирование, смысл уловил.
Думаю сформулировал сложно вопрос. Тогда вот так спрошу, вот есть 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д