化学方程式和离子反应方程式的配平
比如输入"MnO2+HCl=MnCl2+Cl2+H2O",根据质量守衡,需要输出成"MnO2+4HCl=MnCl2+Cl2+2H2O","Fe2+ + Cl2 =Fe3+ + Cl-"需要输出为"2Fe2+ + Cl2 =2Fe3+ + 2Cl-"
谢谢
比如输入"MnO2+HCl=MnCl2+Cl2+H2O",根据质量守衡,需要输出成"MnO2+4HCl=MnCl2+Cl2+2H2O","Fe2+ + Cl2 =Fe3+ + Cl-"需要输出为"2Fe2+ + Cl2 =2Fe3+ + 2Cl-"
谢谢
Private Type MyUnit
name As String
num As Integer
End Type
Dim unit左 As MyUnit
Dim unit右 As MyUnitDim 元素列表(3) As String '列出所有元素,这是为了避免不必要的文本分析过程
Private Sub Command1_Click()
Dim str1() As String
Dim str左() As String
Dim str右() As String
str1 = Split(Text1.Text, "=")
str左 = Split(str1(0), "+")
str右 = Split(str1(1), "+")
'解析左右表达式,把元素和质量数填入unit左右结构中
'配平,使用递归算法,多次计算和配平,知道unit左右两个结构中元素num都相同
End SubPrivate Sub Form_Load()
Text1.Text = "MnO2+HCl=MnCl2+Cl2+H2O"
元素列表(0) = "Mn"
元素列表(1) = "O"
元素列表(2) = "H"
元素列表(3) = "Cl"
End Sub
对于简单的配平可以试用这种步骤
1.定义一个元素符号的基础表,以正确分解将来的化学方程式
2.定义动态数组,最好是二维并且元素一个,数量一个,左边一组,右边一组,第零项不用,做为配平数
3.包括对输入的化学方程式逐个字符分解
如果是加号新起一个\如果是数字放入数量中\如果元素不符合基础表中则取前面(N和Na的区分)放入元素中
4.开始配平
取第一个元素看左右的数量,再取最小公倍数填在数量中,再取下一个
……
纸上谈兵,对你没什么帮助,不过这么重要的算法网上应该有详细的介绍吧
,这样,二价化合价可以用FeFe表示,len("FeFe")就是它的化合价了。
当左边n*len("FeFe")+...=右边的时候,输出就可以了。
输出时将所有的字符长度大于二的取左二位,然后替换#为""。
OK,问题解决了吗?
http://biosoft.im.ac.cn/chem.html
下载相关软件
两个高中生写的带PASCAL源码
江苏省苏州中学高二(2)班
Dick·邵 或 DARYL·吴 收
邮政编码:215000 D&D Studio
97-10-10