回 帖 发 新 帖 刷新版面

主题:请教一个很简单的问题

我是Qbasic 入门学习者,今有一数学问题需要使用Qbasic解决,尝试了一下编了几行代码没有成功,请各位帮帮忙

我的题目:
a=2*d+e-b-c
a=e*(d^2-e^2/4)^0.5/b
a=(c^2-b^2)^0.5
未知数a,b,c,d,e
求解不定方程的正整数解

我设计的代码
for a = 100 to 1000
for b = 100 to 1000
for c = 100 to 1000
for d = 100 to 1000
a=2*d+e-b-c
a=e*(d^2-e^2/4)^0.5/b
a=(c^2-b^2)^0.5
print a,b,c,d,e
if a>1 and b>1 and c>1 and d>1 and e>1 then print a,b,c,d,e :end
next d,c,b,a
end


运算结果出现illegal function

请各位指点一下哪里的问题,并附带上正确的代码

万分感谢

回复列表 (共22个回复)

沙发

少了三个NEXT
for a = 100 to 1000
for b = 100 to 1000
for c = 100 to 1000
for d = 100 to 1000
a=2*d+e-b-c
a=e*(d^2-e^2/4)^0.5/b
a=(c^2-b^2)^0.5
print a,b,c,d,e
if a>1 and b>1 and c>1 and d>1 and e>1 then print a,b,c,d,e

next d,c,b,a
end

板凳

这样会有错吗?
运行错误吗?

3 楼

那e没有赋值过呀,e不就都等于0了吗?

4 楼

是这样,我如果选定e的范围,运算就无法运行,直接显示illegal function,我观察了一下它的运算过程,先是把b选定在100,然后从100到1000试A,完了我觉得应该试b
=101了,但是这时候就出现illegal function,我个人认为是因为在第三个方程中C^2必须>b^2,但是一旦试到B=101,c=100就出问题了,于是就停了,有没有一个参数能让程序忽略这种错误继续试呢?

楼上有没有解决这个题的完整方法呢?

谢谢

5 楼

有谁能不能给出一个类似题目完整的思路或者代码格式?

6 楼

是这样的,

1. 你一直都是在对 a 赋值,
   所以那一个for a = 100 to 1000 是无效的.

2. e 从来没有赋过值,也是无效的.

3. 你用了三句对 a 赋值的语句,
   而且计算对象的值也没有改变过,
   所以只有最后一句赋值语句才是有效的,
   前面两句 a= 有等于无.完全没用.

4. 最后一句 a=(c^2-d^2)^.5
   0.5次方就是开平方,
   负数是不能开平方的,
   当 c < d 的时候,括号里面的数就变成负数了,
   于是便出现对负数开平方的错误了.

7 楼

对于第四个问题我也是这么认为的,但是有什么好的解决办法吗?因为这5个值都是在100-1000范围内的。有没有类似的语句能不能让程序忽略类似的错误?

最好看看各位能不能用完整的代码给我表示出来

8 楼

这三个方程试我们自己倒出来的,其实不算是给它赋值,是联立起来。
原始方程是这样
a^2+b^2=c^2
a+b+c=2*d+e
a*b=e*(d^2+e^2/4)^0.5

9 楼

方程和编程语句的含义是不一样的,
你别乱搞.

你的取值范围没错吧?
既然你也懂得用数学的方法去解,
就应该用数学方法去解效率会更好,
还能锻炼你的思维能力,
在这方面计算机的好处就显示在穷举方面了.
当然可以用QB来算,但不应该是你那样做.

10 楼

取值范围没错的话,方程式是不会有错的.
本身就全是正数,用不着去管正不正解了.
只是5个for实在效率太低了,
直观一点的程序应该如下,高效一点的框架得请教fw先生,他很拿手.

for a=100 to 1000
  for b=100 to 1000
    for c=100 to 1000
      for d=100 to 1000
        for e=100 to 1000
if (a^2+b^2=c^2) and (a+b+c=2*d+e) and (a*b=e*(d^2+e^2/4)^0.5) then print a,b,c,d,e
next e,d,c,b,a

我来回复

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