回 帖 发 新 帖 刷新版面

主题:菜鸟求救:一元一次方程的疑问

计算器的改良
[问题描述]
NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例:
4+3x=8
6a-5+1=2-2a
-5+12Y=0
ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及十、一、=这三个数学符号(当然,符号“一”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。
[问题求解]
编写程序,解输入的一元一次方程,将解方程的结果(精确至小数点后三位)输出至屏幕。你可假设对键入的方程的正确性的判断是由另一个程序员在做,或者说可认为键入的一元一次方程均为合法的,且有唯一实数解。
[输入样例]
6a-5+1=2-2a
[输出样例]
a=0.750


帮我分析一下。谢谢。

回复列表 (共6个回复)

沙发

首先提取那个小写字母,和它的系数。
注意,等号后面的全部要把系数乘以-1。
然后整理成ax=b的形式,最后x=b/a。

这个说起来容易,不过实现还是有些困难的。

简单的:
申请两个变量a, b,初值为0
提取方程的字母,用c记录。
先根据=,+,-把所有的项拆分出来,并随拆分随处理。
把拆分出来的项如样例的6a -5 +1 -2 --2a(等号后的要加-)带入一个过程。
过程中先记录并删除最后的字母,然后判断前面的符号+,-,--,-+等(用boolean的not判断-)。
最后用val把数字提取出来,并根据+-和有没有字母存到a,b之中
最后输出c,'=',a/b:0:3即可。

板凳

假设方程存在(fc:string);且方程最后以'@'结尾,总之是理想条件!只包含整数、小写字母及+、-、=这三个数学符号

Function solveEquation(fc:string):real;
var cs,xs,result:real;{常数,系数,先用Real其他精度在说}
    i,anew:integer;
    ch,wzs:char;
    numsign,zy:-1..1;{符号控制}
begin
 i:=1;  
 numsign:=1; 
 zy:=1;
 cs:=0; 
 xs:=0;
 wzs:=''; 
 anew:=0;

 while(i<=length(fc))do
  begin
   ch:=fc[i];
   case(ch)of
    '0'..'9':begin anew:=anew*10+ord(ch); end;
    '+':begin if(anew<>0)then cs:=cs+anew*numsign; numsign:=1*zy; anew:=0; end;
    '-':begin if(anew<>0)then cs:=cs+anew*numsign; numsign:=-1*zy; anew:=0; end;
    '=':begin if(anew<>0)then cs:=cs+anew*numsign; zy:=-1; numsign:=-1; anew:=0; end;
    '@':begin if(anew<>0)then cs:=cs+anew; anew:=0; end;
    'a'..'z':begin wzs:=ch; if(anew=0)then xs:=xs+1 else xs:=xs+anew; anew:=0; end;
   end;
  end;
  result:=-cs/xs;{xs当然不能为0,这只能要球方程格式无误且符合题目要球}
  writeln('方程',xs,wzs,'=',-cs,'的解为:'wzs,'=',result:1:3);
  
end;

3 楼

忘了最后还得加上 solveEquation:=result;

4 楼

严重失误 ch:=fc[i]; 后得加上 i:=i+1;

5 楼

'a'..'z':begin wzs:=ch; if(anew=0)then xs:=xs+1 else xs:=xs+anew; anew:=0; end;
应改为:
'a'..'z':begin wzs:=ch; if(anew=0)then xs:=xs+1 else xs:=xs+anew*numsign; numsign:=zy; anew:=0; end;

'0'..'9':begin anew:=anew*10+ord(ch); end;
应改为:
'0'..'9':begin anew:=anew*10+ord(ch)-Ord('0'); end;

6 楼

失误,我真不该一边解题还一边灌水!

我来回复

您尚未登录,请登录后再回复。点此登录或注册