回 帖 发 新 帖 刷新版面

主题:让你呕吐三天的题

输入一个表达式(关系,逻辑,计算)
输出它的值
例:
input:(3+(4>5 or 5<=6))*23-(1>2)
output :46

回复列表 (共31个回复)

21 楼

SUB peach
    DIM istack1(32) AS INTEGER
    DIM istack1point AS INTEGER
    DIM i AS INTEGER 
    DIM j AS INTEGER 
    DIM k AS INTEGER
    DIM l AS INTEGER
    i = 1
    DO
        l = i
        j = 0
        WHILE ASC(MID$(tree1(l), 2, 1)) <> 0
            j = j + 1
            l = ASC(MID$(tree1(l), 2, 1)) 
        WEND
        PRINT SPACE$(j * 4);
        SELECT CASE ASC(MID$(tree1(i), 5, 1))
        CASE 1 
            PRINT "%" + STR$(CVI(RIGHT$(tree1(i), LEN(tree1(i)) - 5)))
        CASE 2 
            PRINT "&" + STR$(CVL(RIGHT$(tree1(i), 4)))
        CASE 5 
            PRINT "$" + RIGHT$(tree1(i), LEN(tree1(i)) - 5)
        CASE 6 
            SELECT CASE ASC(MID$(tree1(i), 6, 1))
            CASE 1
                PRINT "^"
            CASE 2
                PRINT "*"
            CASE 3
                PRINT "/"
            CASE 4
                PRINT "\"
            CASE 5
                PRINT "mod"
            CASE 6
                PRINT "+"
            CASE 7
                PRINT "-"
            CASE 8
                PRINT "and"
            CASE 9
                PRINT "not"
            CASE 10
                PRINT "or"
            CASE 17
                PRINT "xor"
            CASE 11
                PRINT ">"
            CASE 12
                PRINT "<"
            CASE 13
                PRINT "="
            CASE 14
                PRINT ">="
            CASE 15
                PRINT "<="
            CASE 16
                PRINT "<>"
            END SELECT
        CASE 7
            PRINT "@" + RIGHT$(tree1(i), LEN(tree1(i)) - 5)
        CASE 255
            PRINT "?" + RIGHT$(tree1(i), LEN(tree1(i)) - 5)
        END SELECT
        k = ASC(MID$(tree1(i), 4, 1))
        IF k <> 0 THEN 
            istack1point = istack1point + 1
            istack1(istack1point) = k
        END IF
        k = ASC(MID$(tree1(i), 3, 1))
        IF k <> 0 THEN 
            i = k
        ELSE
            IF istack1point <> 0 THEN
                i = istack1(istack1point)
                istack1point = istack1point - 1
            ELSE
                EXIT DO
            END IF
        END IF
    LOOP 
END SUB

22 楼

FUNCTION pear$ (expr1 AS STRING)
    DIM expression AS STRING
    DIM flag AS INTEGER
    DIM i AS INTEGER
    DIM j AS INTEGER
    DIM k AS INTEGER
    DIM l AS INTEGER
    DIM m AS INTEGER
    DIM f AS STRING
    DIM pearpoint AS INTEGER
    DIM peartype AS INTEGER
    expression = apple$(expr1)
    j = 0 
    k = 0
    FOR i = 1 TO LEN(expression)
        f = MID$(expression, i, 1)
        IF f = "(" THEN j = j + 1
        IF f = ")" THEN j = j - 1
        IF f = CHR$(34) THEN k = k + 1
        IF j = 0 AND (k MOD 2 = 0) THEN
            SELECT CASE f
            CASE "^"
                pearpoint = i
                peartype = 1
            END SELECT
        END IF
    NEXT
    j = 0 
    k = 0
    FOR i = 1 TO LEN(expression)
        f = MID$(expression, i, 1)
        IF f = "(" THEN j = j + 1
        IF f = ")" THEN j = j - 1
        IF f = CHR$(34) THEN k = k + 1
        IF j = 0 AND (k MOD 2 = 0) THEN
            SELECT CASE UCASE$(f)
            CASE "*"
                pearpoint = i
                peartype = 2
            CASE "/"
                pearpoint = i
                peartype = 3
            CASE "\"
                pearpoint = i
                peartype = 4
            CASE "M"
                IF i + 4 > LEN(expression) THEN 
                    IF UCASE$(MID$(expression, i - 1, 5)) = " MOD " THEN
                        pearpoint = i
                        peartype = 5
                    END IF
                END IF
            END SELECT
        END IF
    NEXT
    j = 0 
    k = 0
    flag = 0
    FOR i = 1 TO LEN(expression)
        f = MID$(expression, i, 1)
        IF f = "(" THEN j = j + 1
        IF f = ")" THEN j = j - 1
        IF f = CHR$(34) THEN k = k + 1
        IF j = 0 AND (k MOD 2 = 0) THEN
            SELECT CASE f  
            CASE "+"
                IF i <> 1 THEN 
                    pearpoint = i
                    peartype = 6
                END IF
            CASE "-"
                IF i <> 1 THEN
                    pearpoint = i
                    peartype = 7
                END IF
            END SELECT
        END IF
    NEXT

23 楼

j = 0 
    k = 0
    FOR i = 1 TO LEN(expression)
        f = MID$(expression, i, 1)
        IF f = "(" THEN j = j + 1
        IF f = ")" THEN j = j - 1
        IF f = CHR$(34) THEN k = k + 1
        IF j = 0 AND (k MOD 2 = 0) THEN
            SELECT CASE f
            CASE "="
                pearpoint = i
                peartype = 13
            CASE ">"  
                pearpoint = i
                peartype = 11
                IF i + 1 < LEN(expression) THEN     
                    IF MID$(expression, i + 1) = "=" THEN
                        pearpoint = i
                        peartype = 14
                        i = i + 1
                    END IF
                END IF
            CASE "<"
                pearpoint = i
                peartype = 12
                IF i + 1 < LEN(expression) THEN     
                    IF MID$(expression, i + 1, 1) = "=" THEN
                        pearpoint = i
                        peartype = 15
                        i = i + 1
                    ELSEIF MID$(expression, i + 1, 1) = ">" THEN
                        pearpoint = i
                        peartype = 16
                        i = i + 1
                    END IF
                END IF
            END SELECT
        END IF
    NEXT
    j = 0 
    k = 0
    FOR i = 1 TO LEN(expression)
        f = MID$(expression, i, 1)
        IF f = "(" THEN j = j + 1
        IF f = ")" THEN j = j - 1
        IF f = CHR$(34) THEN k = k + 1
        IF j = 0 AND i + 4 <= LEN(expression) AND (i <> 1) AND (k MOD 2 = 0) THEN
            SELECT CASE UCASE$(f)
            CASE "A"
                IF UCASE$(MID$(expression, i - 1, 5)) = " AND " THEN
                    pearpoint = i
                    peartype = 8
                END IF
            CASE "N"
                IF UCASE$(MID$(expression, i, 4)) = "NOT " THEN
                    pearpoint = i
                    peartype = 8
                END IF
            CASE "O"
                IF UCASE$(MID$(expression, i - 1, 4)) = " OR " THEN
                    pearpoint = i
                    peartype = 10
                END IF
            CASE "X"
                IF UCASE$(MID$(expression, i - 1, 5)) = " XOR " THEN
                    pearpoint = i
                    peartype = 17
                END IF
            END SELECT
        END IF
    NEXT
    f = CHR$(pearpoint) + CHR$(peartype)
    pear$ = f
END FUNCTION

24 楼

SUB strawberry
    DIM i AS INTEGER
    DIM j AS INTEGER
    DIM k AS INTEGER
    DIM l AS INTEGER
    DIM f AS STRING
    DIM f0 AS STRING
    i = 0
    DO
        i = i + 1
        IF ASC(MID$(tree1(i), 5, 1)) = 255 THEN 
            f = pear$(MID$(tree1(i), 6, LEN(tree1(i)) - 5))
            k = ASC(MID$(f, 2, 1))
            j = ASC(MID$(f, 1, 1))
            f = apple$(MID$(tree1(i), 6, LEN(tree1(i)) - 5))
            SELECT CASE k
            CASE 0  
                f0 = orange$(f)
                IF f0 = "H" THEN 
                ELSE
                    tree1(i) = LEFT$(tree1(i), 4) + f0
                END IF
            CASE 1, 2, 3, 4, 6, 7, 11, 12, 13
                tree1bound = tree1bound + 1
                tree1(i) = LEFT$(tree1(i), 2) + CHR$(tree1bound) + MID$(tree1(i), 4, 1) + CHR$(6) + CHR$(k)
                f0 = LTRIM$(RTRIM$(LEFT$(f, j - 1)))
                tree1(tree1bound) = CHR$(2) + CHR$(i) + CHR$(0) + CHR$(tree1bound + 1) + CHR$(255) + f0
                tree1bound = tree1bound + 1
                f0 = LTRIM$(RTRIM$(MID$(f, j + 1, LEN(f) - j)))
                tree1(tree1bound) = CHR$(0) + CHR$(i) + CHR$(0) + CHR$(0) + CHR$(255) + f0
            CASE 10, 14, 15, 16
                tree1bound = tree1bound + 1
                tree1(i) = LEFT$(tree1(i), 2) + CHR$(tree1bound) + MID$(tree1(i), 4, 1) + CHR$(6) + CHR$(k)
                f0 = LTRIM$(RTRIM$(LEFT$(f, j - 1)))
                tree1(tree1bound) = CHR$(2) + CHR$(i) + CHR$(0) + CHR$(tree1bound + 1) + CHR$(255) + f0
                tree1bound = tree1bound + 1
                f0 = LTRIM$(RTRIM$(MID$(f, j + 2, LEN(f) - j)))
                tree1(tree1bound) = CHR$(0) + CHR$(i) + CHR$(0) + CHR$(0) + CHR$(255) + f0
            CASE 5, 8, 11
                tree1bound = tree1bound + 1
                tree1(i) = LEFT$(tree1(i), 2) + CHR$(tree1bound) + MID$(tree1(i), 4, 1) + CHR$(6) + CHR$(k)
                f0 = LTRIM$(RTRIM$(LEFT$(f, j - 1)))
                tree1(tree1bound) = CHR$(2) + CHR$(i) + CHR$(0) + CHR$(tree1bound + 1) + CHR$(255) + f0
                tree1bound = tree1bound + 1
                f0 = LTRIM$(RTRIM$(MID$(f, j + 3, LEN(f) - j)))
                tree1(tree1bound) = CHR$(0) + CHR$(i) + CHR$(0) + CHR$(0) + CHR$(255) + f0
            CASE 9
                tree1bound = tree1bound + 1
                tree1(i) = LEFT$(tree1(i), 2) + CHR$(tree1bound) + MID$(tree1(i), 4, 1) + CHR$(6) + CHR$(k)
                f0 = LTRIM$(RTRIM$(RIGHT$(f, LEN(f) - 4)))
                tree1(tree1bound) = CHR$(2) + CHR$(i) + CHR$(0) + CHR$(0) + CHR$(255) + f0
            END SELECT
        END IF
    LOOP UNTIL i = tree1bound
END SUB

25 楼

把从
'2.bas
'copyright (c) 2007 Lingluo.Z
'all rights received
开始到上面结束的代码复制到2.bas就可以了
调用eval%("表达式字符串") 返回的就是表达式的值了
(代码 兼容qb和freebasic)

26 楼

终于传好了  ->   这些东西我写了两个月 (业余时间,现在我要高三了) 
昨天特地整理了一下 debug了一个错误
恩 看不懂不要问我 里面有些代码是什么意思其实我也忘记了:P

雨中飞燕 :x  我的传了你的也应该传一下把

27 楼

要我发我的并没有问题,只不过是VB下写的代码,
不记得是什么时候写的了,貌似是高一时候的东西

我那个代码所支持的符号及函数:
+, -, *, /, \, mod, ^, <, >, =, <=, >=, <>, and, or, xor, eqv, imp, (, ), [, ], {, }, abs, sgn, fix, int, not, sqr, exp, lg, ln, log, sin, cos, tg, tan, cot, ctg, sec, csc, arcsin, arccos, arctan, arcctg, arcsec, arccsc, sinh, cosh, tanh, arcsinh, arccosh, arctanh, pi, π, x, y, z (参变量x,y,z)

28 楼

软件下载地址:
[url]http://upload.programfan.com/upfile/200708301924542.rar[/url]

29 楼

lz27:
你的程序中过程和函数都是用水果命名的,让人家根本不知道你这过程和函数是什么意思。

希望说清楚点。

30 楼

刚刚看了一下lz27的代码,490行。。。。。。
我自己的代码,620行。。。
还好,代码量相差不是很多。。。

我来回复

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