PRINT PRINT "< 式入力による四則演算 >" PRINT "   入力例: (5*6/(-2-1)-7)*(-3+8/4)" PRINT LET K=1 OPTION BASE 0 DIM W$(60),WW(60) INPUT PROMPT "数式を入れてください → ":Q$ LET QQ$=Q$ IF Q$(1:1)="-" THEN LET Q$="0"&Q$ END IF LET P=LEN(Q$) FOR i=P*2 TO 1 STEP -1 IF Q$(i:i)="(" THEN FOR j=i TO P*2 IF Q$(j:j)=")" THEN EXIT FOR END IF NEXT j LET W$(K)=Q$(i+1:j-1) LET WW(K)=KEISAN(W$(K)) LET Q$=Q$(1:i-1)&STR$(WW(K))&Q$(j+1:P) FOR j=1 TO LEN(Q$)-1 IF Q$(j:j)="+" AND Q$(j+1:j+1)="-" THEN LET Q$(j:j)="" EXIT FOR END IF IF Q$(j:j)="-" AND Q$(j+1:j+1)="-" THEN LET Q$(j:j)="+" LET Q$(j+1:j+1)="" EXIT FOR END IF NEXT j LET K=K+1 END IF NEXT i PRINT PRINT " 正解は  ";KEISAN(Q$) PRINT END EXTERNAL FUNCTION KEISAN(S$) DIM M$(30),KIG(30),SS(30),G(30) MAT KIG=ZER IF S$(1:1)="-" THEN LET S$="0"&S$ END IF LET C=1 LET F=0 FOR i=1 TO LEN(S$) IF S$(i:i)="-" OR S$(i:i)="+" THEN IF S$(i-1:i-1)="/" OR S$(i-1:i-1)="*" THEN GOTO 10 IF S$(i+1:i+1)="/" OR S$(i+1:i+1)="*" THEN GOTO 10 IF S$(i:i)="-" THEN LET KIG(C)=1 LET M$(C)=S$(1:i-1) LET S$=S$(i+1:LEN(S$)-F) LET H1=LEN(S$)-F LET C=C+1 LET F=F-i LET i=1 END IF 10 NEXT i IF S$(1:1)="-" THEN LET S$=S$(2:H1) LET G(C-1)=1 END IF LET M$(C)=S$ FOR i=1 TO C LET SS(i)=KAKEWARI(M$(i)) NEXT i LET X=SS(1) FOR i=1 TO C IF KIG(i)=1 THEN LET X=X-SS(i+1) ELSE LET X=X+SS(i+1) END IF NEXT i IF G(C)=1 THEN LET X=X-2*SS(C+1) END IF LET KEISAN=X END FUNCTION EXTERNAL FUNCTION KAKEWARI(S$) DIM M$(30),KIG(30),G(30) MAT KIG=ZER MAT G=ZER LET R=0 LET C=1 LET F=0 FOR i=1 TO LEN(S$) IF S$(i:i)="/" OR S$(i:i)="*" THEN IF S$(i:i)="/" THEN LET KIG(C)=1 LET M$(C)=S$(1:i-1) IF M$(C)(1:1)="-" THEN LET M$(C)=M$(C)(2:i-1) LET G(C)=1 END IF LET S$=S$(i+1:LEN(S$)-F) LET H2=LEN(S$)-F LET C=C+1 LET F=F-i LET i=1 END IF NEXT i IF C=1 THEN IF S$(1:1)="-" THEN LET S$=S$(2:LEN(S$)) LET G(1)=1 END IF ELSE IF S$(1:1)="-" THEN LET S$=S$(2:H2) LET G(C-1)=1 END IF END IF LET M$(C)=S$ LET Z=VAL(M$(1)) FOR i=1 TO C-1 IF KIG(i)=1 THEN IF G(i)=1 THEN IF VAL(M$(i+1))=0 THEN PRINT "「 0 では割れません。」" BREAK END IF LET Z=-1*Z/VAL(M$(i+1)) ELSE IF VAL(M$(i+1))=0 THEN PRINT "「 0 では割れません。」" break END IF LET Z=Z/VAL(M$(i+1)) END IF ELSE IF G(i)=1 THEN LET Z=-1*Z*VAL(M$(i+1)) ELSE LET Z=Z*VAL(M$(i+1)) END IF END IF NEXT i LET KAKEWARI=Z 10 END FUNCTION