当然,是没有现成的16个变量的四则运算法则,不过,可以象这样来考虑。
可以认为你是要生成一个多项式库,
我可以给你一个大概的算法:
先定义这样一个结构来表达最简多项式的形式:
type SimpleM=Array of Record
Num1:Integer; //代表多项式的分子,减关系用负号
Num2:Integer; //代表多项式的分母
VarN:Array [0..16-1] of Integer;//表示1到16个变量的次幂,倒数用负数次幂
end;
用文件或Array of SimpleM来保存多项式库
设化简多项式的函数定义为:SimpleMProc(S:String):SimpleM;
基本算法:
1:依次搜索S中被'+'或'-'号分隔开的子字符串ss,并将每找到一个ss用2的方法分析;
2:依次搜索ss中被'*'或'/'号分隔开的字符串s3,并将每找到一个s3用3的方法分析;
3:如果是变量(A~?)将其入VarN中;如果是数字信息则入Num1或Num2.
而将SimpleM转化成最简多项式无疑是非常方便的。
现在,来写主程序算法:
将字段一和三组合成一个字段四(包括:A...?,1...??)
因为必须有字段一的东西,
根据交换律,可以将它调整到最前面,但前面必须可以带-,或/号,为方便,
默认+,-,/可以作为单操作符号,法则: +A=A; -A=0-A; /A=1/A,用+,-,/生成新字段五
但到最用SimpleM转化出,这样,字段二需要有两个标记(指针)
1.初始化
2.如果字符串为空,则赋予下一个字段五和字段一的组合值,
否则,追加字段二和字段四的下一个值。
3.用SimpleMProc化简字符,并在多项式库中查找。
4.如果找不到则将其加入多项式库。
5.判断个指针情况并进行调整。
6.根据条件判断是跳到 2 还是向下。(如有长度条件也在此判断)
7.根据多项式库给出最后结果。
根据该算法,不难写出程序。