宇贝教育
首页 / 信息技术

自己编的程序(quickbasic通过)

物理大腕2010-07-27 18:31:09 +0800 #1
一、超长位数加法(add.bas)

DIM x AS STRING, y AS STRING  'x和y是加数
DIM lenx AS INTEGER, leny AS INTEGER    'lenx和leny是x和y的长度
DIM i AS INTEGER, bit AS INTEGER '循环变量和当前位
DIM k AS STRING, tempK AS INTEGER 'k是当前位计算结果,tempK是进位
DIM result AS STRING   '计算结果
INPUT "x="; x
INPUT "y="; y
lenx = LEN(x): leny = LEN(y)
tempK = 0
'以下显示竖式,并且保存较长加数的长度
IF lenx < leny THEN
        PRINT STRING$(leny - lenx + 1, " "); x
        PRINT "+"; y
        PRINT STRING$(leny + 1, "-")
        x = STRING$(leny - lenx, "0") + x
        lenx = leny
ELSE
        PRINT " "; x
        PRINT "+"; STRING$(lenx - leny, " "); y
        PRINT STRING$(lenx + 1, "-")
        y = STRING$(lenx - leny, "0") + y
END IF
'以下逐位计算x+y
FOR i = 1 TO lenx
        bit = lenx - i + 1 '当前计算位
        k = STR$(tempK + VAL(MID$(x, bit, 1)) + VAL(MID$(y, bit, 1))) '当前位结果
        result = RIGHT$(k, 1) + result
        '向前进位
        IF LEN(k) = 3 THEN '两位数含前面所空的正号是3位
                tempK = 1 '置进位标志
        ELSE
                tempK = 0 '清进位标志
        END IF
NEXT
'处理最高位进位并显示结果
IF tempK = 1 THEN
        result="1" + result
PRINT result
ELSE
PRINT " " ; result
END IF

吾爱吾师,吾更爱真理。
为尊者讳,为长者讳,为能者讳,是很重要的,但是最重要的是为死者讳。
欢迎光临我的博客: blog.163.com/axiang_1975
辞职ed
物理大腕2010-07-27 18:31:09 +0800 #2
二、超长位数*1位数(mul.bas)

DIM x AS STRING, y AS STRING
DIM k AS INTEGER, tempK AS INTEGER
DIM result AS STRING
DIM i AS INTEGER
DIM lenx AS INTEGER
INPUT "x="; x '多位整数
INPUT "y="; y '一位整数
lenx = LEN(x)
PRINT " "; x
PRINT "*"; STRING$(lenx - 1, " "); y
PRINT STRING$(lenx + 1, "-")
FOR i = 1 TO lenx
        k = tempK + VAL(y) * VAL(MID$(x, lenx - i + 1, 1))
'处理进位
        IF k >= 10 THEN
                tempK = k \ 10
        ELSE
                tempK = 0
        END IF
'合并结果
        result = RIGHT$(STR$(k), 1) + result
NEXT
'处理最高位进位
IF k >= 10 THEN
        result = RIGHT$(STR$(k \ 10), 1) + result
        PRINT result
ELSE
        PRINT " "; result
END IF

吾爱吾师,吾更爱真理。
为尊者讳,为长者讳,为能者讳,是很重要的,但是最重要的是为死者讳。
欢迎光临我的博客: blog.163.com/axiang_1975
辞职ed
物理大腕2010-07-27 18:31:09 +0800 #3
三、超长位数连加法(adds.bas)

DECLARE FUNCTION add$ (x AS STRING, y AS STRING)
DIM n AS INTEGER, i AS INTEGER, lenX AS INTEGER 'n为加数的个数,lenX为加数长度
DIM result AS STRING, lenR AS INTEGER 'result为结果,lenR为结果长度
INPUT "n="; n
DIM x(1 TO n) AS STRING
result = ""
FOR i = 1 TO n
        PRINT "x("; i; ")=";
        INPUT x(i)
NEXT
FOR i = 1 TO n     '累计结果
        result = add$(result, x(i))
NEXT
lenR = LEN(result)    '显示计算结果
FOR i = 1 TO n - 1
        lenX = LEN(x(i))
        PRINT STRING$(lenR - lenX + 1, " "); x(i)
        IF lenX = lenR THEN flag = 1
NEXT
PRINT "+"; STRING$(lenR - LEN(x(n)), " "); x(n)
PRINT STRING$(lenR + 1, "-")
PRINT " "; result
FUNCTION add$ (x AS STRING, y AS STRING) '加法计算子函数
DIM lenX AS INTEGER, leny AS INTEGER
DIM i AS INTEGER, tempResult AS STRING  'tempResult为中间结果
DIM k AS STRING, tempK AS INTEGER, bit AS INTEGER
lenX = LEN(x): leny = LEN(y)
tempK = 0
IF lenX < leny THEN
        x = STRING$(leny - lenX, " ") + x
        lenX = leny
ELSE
        y = STRING$(lenX - leny, " ") + y
END IF
FOR i = 1 TO lenX    '逐位相加
        bit = lenX - i + 1
        k = STR$(tempK + VAL(MID$(x, bit, 1)) + VAL(MID$(y, bit, 1)))
        tempResult = RIGHT$(k, 1) + tempResult
        IF LEN(k) = 3 THEN   '处理中间进位
                tempK = 1
        ELSE
                tempK = 0
        END IF
NEXT
IF tempK = 0 THEN    '处理最高位进位
        add$ = tempResult
ELSE
        tempResult = "1" + tempResult
        add$ = tempResult
END IF
END FUNCTION

吾爱吾师,吾更爱真理。
为尊者讳,为长者讳,为能者讳,是很重要的,但是最重要的是为死者讳。
欢迎光临我的博客: blog.163.com/axiang_1975
辞职ed
物理大腕2010-07-27 18:31:09 +0800 #4
四、超长位数*超长位数(muls.bas)

DECLARE FUNCTION mulA$ (x AS STRING, y AS STRING)
DECLARE FUNCTION add$ (x AS STRING, y AS STRING)

REM $DYNAMIC
DIM x AS STRING, y AS STRING
DIM i AS INTEGER, n AS INTEGER
DIM tempResult AS STRING, result AS STRING
DIM lenR AS INTEGER

n = 1
DIM r$(1 TO n), tempY  AS STRING

INPUT "x="; x
INPUT "y="; y
n = LEN(y)
REDIM r$(LEN(y))
FOR i = n TO 1 STEP -1
        tempY = MID$(y, i, 1)
        tempResult = mulA$(x, tempY)
        r$(i) = tempResult + STRING$(n - i, " ")
NEXT
'得到最终结果
FOR i = 1 TO n
        result = add$(r$(i), result)
NEXT
DO
        IF LEFT$(result, 1) = "0" THEN
                result = RIGHT$(result, LEN(result) - 1)
        ELSE
                EXIT DO
        END IF
LOOP
'显示竖式
lenR = LEN(result)
PRINT STRING$(lenR - LEN(x) + 1, " "); x
PRINT "*"; STRING$(lenR - LEN(y), " "); y
PRINT STRING$(lenR + 1, "-")
IF LEN(y) > 1 THEN
        FOR i = n TO 1 STEP -1
                PRINT STRING$(lenR - LEN(r$(i)) + 1, " "); r$(i)
        NEXT
        PRINT STRING$(lenR + 1, "-")
END IF
PRINT " "; result

FUNCTION add$ (x AS STRING, y AS STRING)        '连加
        DIM lenx AS INTEGER, leny AS INTEGER
        DIM i AS INTEGER, tempResult AS STRING
        DIM k AS STRING, tempK AS INTEGER, bit AS INTEGER
        lenx = LEN(x): leny = LEN(y)
        tempK = 0
        IF lenx < leny THEN
                x = STRING$(leny - lenx, " ") + x
                lenx = leny
        ELSE
                y = STRING$(lenx - leny, " ") + y
        END IF
        FOR i = 1 TO lenx
                bit = lenx - i + 1
                k = STR$(tempK + VAL(MID$(x, bit, 1)) + VAL(MID$(y, bit, 1)))
                tempResult = RIGHT$(k, 1) + tempResult
                IF LEN(k) = 3 THEN
                        tempK = 1
                ELSE
                        tempK = 0
                END IF
        NEXT
        IF tempK = 0 THEN
                add$ = tempResult
        ELSE
                tempResult = "1" + tempResult
                add$ = tempResult
        END IF
END FUNCTION

FUNCTION mulA$ (x AS STRING, y AS STRING)        '多位乘1位
        DIM k AS INTEGER, tempK AS INTEGER
        DIM result AS STRING
        DIM i AS INTEGER
        DIM lenx AS INTEGER
        IF y = "0" THEN mulA$ = " "
        lenx = LEN(x)
        FOR i = 1 TO lenx
                k = tempK + VAL(y) * VAL(MID$(x, lenx - i + 1, 1))
                IF k >= 10 THEN
                        tempK = k \ 10
                ELSE
                        tempK = 0
                END IF
                result = RIGHT$(STR$(k), 1) + result
        NEXT

        IF k >= 10 THEN
                result = RIGHT$(STR$(k \ 10), 1) + result
        END IF
        mulA$ = result
END FUNCTION

吾爱吾师,吾更爱真理。
为尊者讳,为长者讳,为能者讳,是很重要的,但是最重要的是为死者讳。
欢迎光临我的博客: blog.163.com/axiang_1975
辞职ed
平地三尺浪2010-07-27 18:31:09 +0800 #5
只能看明白一点,学习了。

生命在于运动!
笨巧果2010-07-27 18:31:09 +0800 #6
使用数组是否好一些?
物理大腕2010-07-27 18:31:09 +0800 #7
回头我弄一下,现在主要是对减法和除法没有弄好,特别是除法,竖式超难度!

另外我还在想这些问题:计算四则运算(最好能包括简单的一些函数,还包括乘方),以及解一元二次方程智能解题过程(可以根据不同参数配方、分解因式,得到分数或者无理数形式的解)、二元一次方程组智能解法(如加减法消元、代入消元),求多项式值(用户通过键盘输入一个关于x的表达式,然后输入x的值,得到结果),如果我都能做到多好。

吾爱吾师,吾更爱真理。
为尊者讳,为长者讳,为能者讳,是很重要的,但是最重要的是为死者讳。
欢迎光临我的博客: blog.163.com/axiang_1975
辞职ed
篮铯锝情调2010-07-27 18:31:09 +0800 #8
过来看看
笨巧果2010-07-27 18:31:09 +0800 #9
都能做。就是难度不小。
想起了几何画板里面的函数功能。
胡人2010-07-27 18:31:09 +0800 #10
如果几何画板有某个动态链接库文件包含有相关函数,可考虑调用一下。

wowinning2010-07-27 18:31:09 +0800 #11
没学过看不懂!~~

技术世界: www.js4j.comwww.js4j.com
亚羚生2010-07-27 18:31:09 +0800 #12
提示: 作者被禁止或删除 内容自动屏蔽

回复

你的名字:
内容:


当前分类的其他帖子