我的程序,今天只是学习如何编写计算器,没有给我任何回应,而是“完成”
PROGRAM:FACTORS
:ClrHome
:Input "A=", A
:Input "B=", B
:Input "C=", C
:For(D,1,100,1)
:For(E,1,100,1)
:If (D*E)=C and (D+E)=B
:Stop
:End:End:End
:Disp D
:Disp E
我的程序,今天只是学习如何编写计算器,没有给我任何回应,而是“完成”
PROGRAM:FACTORS
:ClrHome
:Input "A=", A
:Input "B=", B
:Input "C=", C
:For(D,1,100,1)
:For(E,1,100,1)
:If (D*E)=C and (D+E)=B
:Stop
:End:End:End
:Disp D
:Disp E
两个问题:
1: 所有的 ":end" 都在同一行。为每个做一个不同的
2:这可能是最大的问题:“停止”命令。“停止”用于完全结束程序,并返回正常功能。我假设你想要做的是让它停止循环一次 D*E=C 和一次 D+E=B。在这种情况下,您可以做以下两件事之一:将突破代码写入重复循环;例如
:ClrHome
:Input "A=", A
:Input "B=", B
:Input "C=", C
:For(D,1,100,1)
:For(E,1,100,1)
:Repeat (D*E)=C and (D+E)=B
:End
:End
:End
:Disp D
:Disp E
或者,您可以使用 Goto 命令
:If (D*E)=C and (D+E)=B
:Goto Lbl A
在您的代码中再往下,您可以将“Lbl A”放在您希望它显示变量的位置上方
您遇到的问题是 stop 完全结束程序,而不仅仅是中断循环。要解决此问题,您可以使用重复循环代替或使用 For 循环:
:1→D
:Repeat (D*E=C and D+E=B) or D=100
::1→E
::Repeat (D*E=C and D+E=B) or E=100
:::E+1→E
::End
::1+D→D
:End
您可以忽略额外的冒号,它们只是为了清晰起见,但如果您离开它们,代码仍然可以工作,因为它们的功能与换行符相同。
满足条件时,重复循环将自行中断D*E=C and D+E=B
,但您必须自己处理变量的初始化和E
递增D
。
另请注意,如果A
不等于 1,您的因式分解算法可能会失败。考虑将B
和C
除以A
,然后A
作为常数因子输出。
你的代码的另一个错误是你有太多的End
语句,但修复它不会修复程序,它仍然会在Stop
. If
没有 aThen
不需要 a ,但如果End
条件为真,则只会运行一行。例如:
:If <condition>
:<one statement>
或者
:If <condition>
:Then
:<statement 1>
:<statement 2>
:<statement ...>
:<statement n>
:End