Хочу написать калькулятор ионов для солей - VB

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Хочу написать калькулятор ионов для солей»

textual
Листинг программы
  1. Option Explicit
  2. Option Compare Binary
  3. Private Type t_El
  4.   N As String
  5.   M As Double
  6. End Type
  7. Dim a(0 To 92) As t_El
  8. Dim EM() As Byte
  9.  
  10. Sub main()
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. Dim f As String, ff() As String, M As Double, i As Byte
  35. Dim msg1$, msg2$
  36. ReDim EM(1 To UBound(a)) '
  37. f = InputBox("Введите формулу молекулы", "Калькулятор молекулярной массы", "FeSO4.7H2O")
  38. ff = Split(f, ".")
  39. For i = 0 To UBound(ff)
  40.   mas ff(i)
  41. Next i
  42. For i = 1 To UBound(a)
  43.   If EM(i) Then
  44.     M = M + a(i).M * EM(i)
  45.     msg1 = msg1 & a(i).N & EM(i)
  46.     msg2 = msg2 & a(i).N & " " & a(i).M & " x " & EM(i) & " = " & a(i).M * EM(i) & vbCrLf
  47.   End If
  48. Next i
  49. MsgBox msg1 & vbCrLf & msg2 & "Молекулярная масса: " & M, , f
  50. End Sub
  51.  
  52. Sub mas(ByVal f As String)
  53. Dim i As Byte, j As Byte, c1 As Byte, c2 As Byte
  54. c1 = Val(f)
  55. If c1 = 0 Then
  56.   c1 = 1
  57. Else
  58.   f = VBA.Mid$(f, Len(CStr(c1)) + 1)
  59. End If
  60. While f <> ""
  61.   j = 0
  62.   For i = 1 To 92
  63.     If a(i).N = VBA.Left$(f, Len(a(i).N)) Then
  64.       If Len(a(j).N) < Len(a(i).N) Then j = i
  65.     End If
  66.   Next i
  67.   If j = 0 Then MsgBox f & " - нет такого элемента!": Exit Sub
  68.   f = VBA.Mid$(f, Len(a(j).N) + 1)
  69.   c2 = Val(f)
  70.   If c2 = 0 Then
  71.     c2 = 1
  72.   Else
  73.     f = VBA.Mid$(f, Len(CStr(c2)) + 1)
  74.   End If
  75.   EM(j) = EM(j) + c1 * c2
  76. Wend
  77. End Sub

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


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

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

13   голосов , оценка 3.615 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы