回 帖 发 新 帖 刷新版面

主题:求助,怎样设计除法的竖式程序

我这个程序利用命令行参数计算加减乘除(单步),并以竖式形式显示结果.其中除法的竖式有错误(加粗的那一行).请大家帮助.

' $DYNAMIC
OPTION BASE 1

DIM a AS STRING, b AS STRING, result AS LONG, resMod AS LONG

DIM i AS LONG
DIM c AS STRING
c = COMMAND$
CLS
i = INSTR(c, "+")
IF i > 1 THEN
        a = LEFT$(c, i - 1): b = MID$(c, i + 1)
        result = VAL(a) + VAL(b)
        PRINT STRING$(LEN(STR$(result)) + 1 - LEN(a), " ") + a
        PRINT "+" + STRING$(LEN(STR$(result)) - LEN(b), " ") + b
        PRINT STRING$(LEN(STR$(result)) + 1, "-")
        PRINT " " + STR$(result)
END IF
i = INSTR(c, "-")
IF i > 1 THEN
        a = LEFT$(c, i - 1): b = MID$(c, i + 1)
        result = VAL(a) - VAL(b)
        PRINT " " + a
        PRINT "-" + STRING$(LEN(a) - LEN(b), " ") + b
        PRINT STRING$(LEN(a) + 1, "-")
        PRINT STRING$(LEN(a) - LEN(STR$(result)) + 1, " ") + STR$(result)
END IF
i = INSTR(c, "*")
IF i > 1 THEN
        a = LEFT$(c, i - 1): b = MID$(c, i + 1)
        result = VAL(a) * VAL(b)
        
        DIM r(LEN(b)) AS LONG
        PRINT STRING$(LEN(STR$(result)) + 1 - LEN(a), " ") + a
        PRINT "x" + STRING$(LEN(STR$(result)) - LEN(b), " ") + b
        PRINT STRING$(LEN(STR$(result)) + 1, "-")
        IF LEN(b) >= 2 THEN
                FOR i = 1 TO LEN(b)
                        r(i) = VAL(a) * VAL(MID$(b, LEN(b) - i + 1, 1))
                        IF (r(i)) <> 0 THEN
                                PRINT STRING$(LEN(STR$(result)) + 2 - LEN(STR$(r(i))) - i, " ") + STR$(r(i))
                        END IF
                NEXT
                PRINT STRING$(LEN(STR$(result)) + 1, "-")
        END IF
        PRINT " " + STR$(result)
END IF
i = INSTR(c, "/")
IF i > 1 THEN
        a = LEFT$(c, i - 1): b = MID$(c, i + 1)
        result = VAL(a) / VAL(b)
        resMod = VAL(a) MOD VAL(b)
        PRINT STRING$(LEN(a) + LEN(b) + 1 - LEN(STR$(result)), " ") + STR$(result)
        PRINT STRING$(LEN(b) + 1, " ") + STRING$(LEN(a), "_")
        PRINT b; ")"; a
        FOR i = 2 TO LEN(STR$(result))
                j = VAL(MID$(STR$(result), i, 1))
                j = j * VAL(b)
                PRINT STRING$(LEN(b) + i - 2, " ") + STR$(j)
                PRINT STRING$(LEN(b) + 1, " ") + STRING$(LEN(a), "-")
                
                [b]PRINT STRING$(LEN(b) + 2, " ") + STR$(VAL(a) - j)[/b]
        NEXT
END IF

回复列表 (共5个回复)

沙发

~{<S4V5DR;PPSPNJLb~},~{3LPrC{N*~}calc,~{5wSCPNJ=N*~}
calc 34+5

板凳

在QB里 string$( ) 不是 str$( )

还有几个问题,我只提出来,就不帮你解决了。

1. 出错的那行,j应该要乘以十的倍数来减才对吧?
2. 还是出错的那行,假如得数首位为0,位置就不对了。
3. 出错的上两行,假如得数为0里,就和平时我们做的竖式不一样了,多了重复行。例如 18009/9
4. 有些相同的函数,在程序中多次使用的时候,我们应该使用一个中间变量来保存它的值,例如你程序中的len(b),每个出现的地方它的值都是相同的,那我们可以使用一个新的变量来保存它的值,用的时候直接使用变量就可以了,省得每次需要这个数的时候,都调用一次函数。当然,在你的这个小程序里相差微乎其微。但到了大程序或循环次数巨大的时候,差别就放大了。

3 楼

求你能不能帮助我改了啊.现在已经头大了.

4 楼

当你提问时,要像向1年级的小学生来阐述问题那样尽量详细!如果能让1年级的小学生能明白你的问题,那么你的问题就能更好更快更高更强地得到回复!

5 楼

文章内容:请高手指点51单片机定时器THO和TLO中的数值除以74历程具体如何写,多谢!

我来回复

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