化学方程式和离子反应方程式的配平
    比如输入"MnO2+HCl=MnCl2+Cl2+H2O",根据质量守衡,需要输出成"MnO2+4HCl=MnCl2+Cl2+2H2O","Fe2+ + Cl2 =Fe3+ + Cl-"需要输出为"2Fe2+ + Cl2 =2Fe3+ + 2Cl-"
谢谢

解决方案 »

  1.   

    示例,没时间都完成,给个简单提示吧
    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
      

  2.   

    更关键的是化学方程式配平的基本技巧都忘了
    对于简单的配平可以试用这种步骤
    1.定义一个元素符号的基础表,以正确分解将来的化学方程式
    2.定义动态数组,最好是二维并且元素一个,数量一个,左边一组,右边一组,第零项不用,做为配平数
    3.包括对输入的化学方程式逐个字符分解
      如果是加号新起一个\如果是数字放入数量中\如果元素不符合基础表中则取前面(N和Na的区分)放入元素中
    4.开始配平
      取第一个元素看左右的数量,再取最小公倍数填在数量中,再取下一个
    ……
    纸上谈兵,对你没什么帮助,不过这么重要的算法网上应该有详细的介绍吧
      

  3.   

    将元素种类赋值进字符串数组,所有的元素名称补足二位,如:Fe不变,H变为H#
    ,这样,二价化合价可以用FeFe表示,len("FeFe")就是它的化合价了。
    当左边n*len("FeFe")+...=右边的时候,输出就可以了。
    输出时将所有的字符长度大于二的取左二位,然后替换#为""。
    OK,问题解决了吗?
      

  4.   


    http://biosoft.im.ac.cn/chem.html
    下载相关软件
    两个高中生写的带PASCAL源码
                          江苏省苏州中学高二(2)班
                          Dick·邵  或  DARYL·吴 收
                            邮政编码:215000                                                         D&D Studio
                                                               97-10-10
      

  5.   

    有一定难度,boybluesky(boybluesky) 的思路有创意