2012年07月07日投稿 / 投稿者 : Uxtuno_ / タグ : 投稿プログラム QRコード サンプル ツール インタプリタ
プチコンの「SAMPLE2」を改造して自由に計算式を入れられるようにしました。 プチコンで使用可能な演算子は大体使えると思います。 関数には対応してません。
ちょっと計算している雰囲気を出すためにあえてウエイトをかけています。
’┌─────────────────┐ ’│SAMPLE2(カイソ゛ウ) │ ’└─────────────────┘ VISIBLE 1,1,0,0,0,0 CLS:COLOR 0:CLEAR GOSUB @UX_GYP_INIT PRINT”┌───────────────────────────┐” PRINT”│ケイサンCOMPUTER(ス-ハ゜-ニコチャンлЖк)│” PRINT”└───────────────────────────┘” PRINT”Ж:コンニチハ ニコチャンテ゛ス” PRINT”Ж:ホ゛クノシツモンニ コタエテネ” ’--- @LOOP PRINT COLOR 9 INPUT”Ж:ケイサンシキ ヲ ニュウリョクシテネ”;S$ F2=TRUE GOSUB @UX_GYP ’--- @MARK COLOR 0 PRINT”Ж:ケイサンチュウ テ゛ス” WAIT 60 COLOR 0 IF !ER THEN PRINT”Ж:オコタエシマス・・・” ’--- IF ER THEN GOTO @SKIP COLOR 7 ?R$ GOTO @LOOP @SKIP BEEP 4 PRINT”Ё:ワカリマセン・・” PRINT GOTO @LOOP ’--- @PLUS PRINT NO1;”+”;NO2;”=”;NO1+NO2 GOTO @LOOP ’--- @MINUS PRINT NO1;”-”;NO2;”=”;NO1-NO2 GOTO @LOOP ’--- @DIV PRINT NO1;”/”;NO2;”=”;NO1/NO2 GOTO @LOOP ’--- @MOD PRINT NO1;”%”;NO2;”=”;NO1%NO2 GOTO @LOOP ’--- @MUL PRINT NO1;”x”;NO2;”=”;NO1*NO2 GOTO @LOOP CLEAR:ACLS GOSUB @UX_GYP_INIT UX_VAR_NAME$(0)=”V1” UX_VAR_NAME$(1)=”V2” UX_VAR$(0)=”30” UX_VAR$(1)=”23” UX_VAR$(2)=”2” FOR I=0 TO 1 I=0 F1=TRUE INPUT ”ケイサンシキ”;S$ GOSUB @UX_GYP NEXT @UX_GYP_INIT ’---エンサ゛ンシ UX_OPMAX=12 DIM UX_GYP_OP$(UX_OPMAX) DIM UX_GYP_OP_PRIO(UX_OPMAX) RESTORE @UX_GYP_INIT FOR UX_I=0 TO UX_OPMAX-1 READ UX_GYP_OP$(UX_I),UX_GYP_OP_PRIO(UX_I) NEXT ’---ヘンスウ UX_VARMAX=200 DIM UX_VAR$(UX_VARMAX),UX_VAR_NAME$(UX_VARMAX) FOR UX_I=0 TO UX_VARMAX-1 READ UX_A$ IF UX_A$==”” THEN UX_I=999:ELSE UX_VAR_NAME$(UX_I)=UX_A$ NEXT ’---スタック DIM ST$(2,64) DIM SP(2) RETURN DATA ==,1 DATA !=,2 DATA <=,3 DATA >=,4 DATA <,5 DATA >,6 DATA +,10 DATA -,11 DATA *,20 DATA /,21 DATA %,22 DATA ^,25 DATA ’N=ツカウ スタック ’S2$=イレルモシ゛ @UX_STACK_PUSH ST$(N,SP(N))=S2$ SP(N)=SP(N)+1 RETURN ’N=ツカウ スタック ’-モト゛リ ’R$=トリタ゛シタモシ゛ @UX_STACK_POP IF SP(N)==0 THEN R$=””:RETURN SP(N)=SP(N)-1 R$=ST$(N,SP(N)) ST$(N,SP(N))=”” RETURN ’---キ゛ャクホ゜-ラント゛ ヘンカン ’ST$(0,)=ヘンカン ケッカ @UX_GYP_CALC IF UX_C$==”” THEN GOSUB @ALLPUSH:RETURN IF UX_N5==1 THEN N=0:S2$=UX_C$:GOSUB @UX_STACK_PUSH:GOTO @SL IF UX_N5==4 THEN :GOSUB @UX_GYP_POP:GOTO @SL IF UX_N5==3 THEN N=1:S2$=UX_C$:GOSUB @UX_STACK_PUSH:GOTO @SL @L IF SP(1)==0 THEN N=1:S2$=UX_C$:GOSUB @UX_STACK_PUSH:GOTO @SL: C$=UX_C$ GOSUB @UX_GYP_EZ A1=UX_R C$=ST$(1,SP(1)-1) GOSUB @UX_GYP_EZ A2=UX_R IF A1<A2 THEN N=1:GOSUB @UX_STACK_POP:N=0:S2$=R$:GOSUB @UX_STACK_PUSH:GOTO @L N=1 S2$=UX_C$ GOSUB @UX_STACK_PUSH @SL UX_TKS=UX_TKS+1:UX_BC$=UX_C$ UX_C$=”” RETURN @DISP_GYP FOR UX_J=0 TO SP(0)-1 ?ST$(0,UX_J);” ”; NEXT ? RETURN @ALLPUSH IF SP(1)==0 THEN IF F1 THEN GOSUB @DISP_GYP IF SP(1)==0 THEN UX_P=0:GOSUB @UX_GYP_ENZAN:RETURN N=1:GOSUB @UX_STACK_POP N=0:S2$=R$ GOSUB @UX_STACK_PUSH GOTO @ALLPUSH @UX_GYP_ENZAN IF UX_P==SP(0) THEN SP(0)=0:N=1:S2$=STR$(R):GOSUB @UX_STACK_PUSH IF SP(0)==0 THEN N=1:GOSUB @UX_STACK_POP:RETURN N=0 R$=ST$(0,UX_P) UX_P=UX_P+1 UX_N4=0 IF MID$(R$,LEN(R$)-1,1)>=”0”AND MID$(R$,LEN(R$)-1,1)<=”9” THEN UX_N4=1: IF !UX_N4 THEN UX_N4=2 R2$=R$ IF UX_N4==1 THEN N=1:S2$=R$:GOSUB @UX_STACK_PUSH:’?R$ ’?SP(1) IF UX_N4==2 THEN N=1:GOSUB @UX_STACK_POP:A1$=R$ IF UX_N4==2 THEN N=1:GOSUB @UX_STACK_POP:A2$=R$ A1=VAL(A2$) A2=VAL(A1$) IF R2$==”+” THEN GOSUB @EZ1 IF R2$==”-” THEN GOSUB @EZ2 IF R2$==”*” THEN GOSUB @EZ3 IF R2$==”/” THEN GOSUB @EZ4 IF R2$==”==” THEN GOSUB @EZ5 IF R2$==”!=” THEN GOSUB @EZ6 IF R2$==”<” THEN GOSUB @EZ7 IF R2$==”>” THEN GOSUB @EZ8 IF R2$==”<=” THEN GOSUB @EZ9 IF R2$==”>=” THEN GOSUB @EZ10 IF R2$==”%” THEN GOSUB @EZ11 IF R2$==”^” THEN GOSUB @EZ12 IF UX_N4==2 THEN IF F1 THEN ?A1,A2,R2$ ’IF ST$(1,0)==S$ THEN N=1:S2$=S$:GOSUB @UX_STACK_PUSH:R=VAL(S$) IF UX_N4==2 THEN N=1:S2$=STR$(R):GOSUB @UX_STACK_PUSH COLOR 13 ’?ST$(1,0) COLOR 0 GOTO @UX_GYP_ENZAN @EZ1 R=A1+A2 RETURN @EZ2 R=A1-A2 RETURN @EZ3 R=A1*A2 RETURN @EZ4 R=A1/A2 RETURN @EZ5 R=A1==A2 RETURN @EZ6 R=A1!=A2 RETURN @EZ7 R=A1<A2 RETURN @EZ8 R=A1>A2 RETURN @EZ9 R=A1<=A2 RETURN @EZ10 R=A1>=A2 RETURN @EZ11 R=A1%A2 RETURN @EZ12 R=POW(A1,A2) RETURN @UX_GYP_EZ FOR UX_J=0 TO UX_OPMAX-1 IF C$==UX_GYP_OP$(UX_J) THEN UX_R=UX_GYP_OP_PRIO(UX_J) NEXT RETURN @UX_GYP_POP IF SP(1)==0 THEN RETURN N=1 GOSUB @UX_STACK_POP IF R$!=”(” THEN N=0:S2$=R$:GOSUB @UX_STACK_PUSH:GOTO @UX_GYP_POP RETURN ’---キ゛ャクホ゜-ラント゛ ヘンカン @UX_GYP ER=0 ERM$=””:ERM2$=”” R=0 R$=”0” SP(0)=0:SP(1)=0 UX_ON5=0 ’IF F1 THEN ?S$ ’カッコ ノ カス゛ UX_KN=0 ’ヨミコンタ゛ト-クンノ カス゛ UX_TKS=0 UX_G$=S$:UX_N5=0 UX_N=0:UX_N2=0:UX_C$=”” FOR UX_I=0 TO LEN(UX_G$) UX_OA$=UX_A$ UX_A$=MID$(UX_G$,UX_I,1) UX_B$=MID$(UX_G$,UX_I+1,1) IF UX_N2==0 THEN UX_N=1:ELSE UX_N=0 IF UX_N THEN GOSUB @UX_TOKEN2 UX_ON=UX_N2 IF UX_N2 THEN GOSUB @UX_TOKEN3 IF UX_N3 THEN GOSUB @UX_TOKEN4 NEXT UX_BC$=MID$(UX_BC$,LEN(UX_BC$)-1,1) UX_N4=0 IF UX_BC$>=”0” AND UX_BC$<=”9” THEN UX_N4=1 IF UX_BC$==”)” THEN UX_N4=1 IF !F2 THEN IF UX_N4==0 THEN COLOR 13:?”ケイサンテ゛キマセンテ゛シタ”:BEEP 2:COLOR 0:STOP IF F2 THEN IF UX_N4==0 THEN ER=TRUE:ERM2$=ERM$ ERM$=”カッコニ タイシテ トシ゛カッコカ゛スクナイテ゛ス” IF !F2 THEN IF UX_KN>0 THEN COLOR 13:?”ケイサンテ゛キマセンテ゛シタ”:?ERM$:BEEP 2:COLOR 0:STOP IF F2 THEN IF UX_KN>0 THEN ER=TRUE:ERM2$=ERM$ ERM$=”カッコ カ゛ナイノニ トシ゛カッコカ゛アリマス” IF !F2 THEN IF UX_KN<0 THEN COLOR 13:?”ケイサンテ゛キマセンテ゛シタ”:?ERM$:BEEP 2:COLOR 0:STOP IF F2 THEN IF UX_KN<0 THEN ER=TRUE:ERM2$=ERM$ GOSUB @UX_GYP_CALC IF UX_TKS==1 THEN A1$=ST$(0,0):R=VAL(A1$):ST$(0,0)=”” COLOR 7 IF !ER THEN IF F1 THEN ?R COLOR 0 R$=STR$(R) IF ER THEN R$=ERM2$:IF F1 THEN ?ERM2$: F1=0 F2=0 RETURN ’---サイショノ モシ゛カラ シュルイ ハンヘ゛ツ @UX_TOKEN2 IF UX_A$==”” THEN RETURN IF UX_A$==” ” THEN RETURN IF ASC(UX_A$)>=ASC(”0”)AND ASC(UX_A$)<=ASC(”9”) THEN UX_N2=1 IF ASC(UX_A$)>=ASC(”A”)AND ASC(UX_A$)<=ASC(”Z”) THEN UX_N2=2 IF ASC(UX_A$)>=ASC(”a”)AND ASC(UX_A$)<=ASC(”z”) THEN UX_N2=2 FOR UX_J=0 TO UX_OPMAX-1 IF UX_A$==MID$(UX_GYP_OP$(UX_J),0,1) THEN UX_N2=3 NEXT IF UX_A$==”(” THEN UX_N2=4:UX_KN=UX_KN+1 IF UX_A$==”)” THEN UX_N2=5:UX_KN=UX_KN-1 IF UX_ON!=3 AND UX_ON!=0 AND UX_ON!=4 THEN RETURN IF UX_A$==”-” AND (UX_B$>=”A” AND UX_B$<=”Z”) THEN UX_N2=6 IF UX_A$==”-” AND (UX_B$>=”a” AND UX_B$<=”z”) THEN UX_N2=6 IF UX_A$==”-” AND (UX_B$>=”0” AND UX_B$<=”9”) THEN UX_N2=7 IF UX_A$==”*” AND (UX_B$>=”A” AND UX_B$<=”Z”) THEN UX_N2=8 IF UX_A$==”*” AND (UX_B$>=”a” AND UX_B$<=”z”) THEN UX_N2=8 IF UX_A$==”*” AND (UX_B$>=”0” AND UX_B$<=”9”) THEN UX_N2=9 RETURN ’UX_N5=1 スウチ、2 エンサ゛ンシ 3 (、4 ) ’---ソレソ゛レノシュルイコ゛トニ ワケル @UX_TOKEN3 UX_N5=0 IF UX_N2==1 THEN UX_N5=1 IF UX_N2==2 THEN UX_N5=1 IF UX_N2==3 THEN UX_N5=2 IF UX_N2==4 THEN UX_N5=3 IF UX_N2==5 THEN UX_N5=4 UX_N6=UX_N2 IF UX_N2==6 THEN UX_N5=1:UX_N6=2 IF UX_N2==7 THEN UX_N5=1: IF UX_N2==8 THEN UX_N5=1:UX_N6=2 IF UX_N2==9 THEN UX_N5=1: IF UX_B$==”” THEN UX_N3=TRUE:UX_N2=0: IF UX_B$==” ” THEN UX_N3=TRUE:UX_N2=0: IF UX_N2==1 THEN GOSUB @UX_TOKEN3_1 IF UX_N2==2 THEN GOSUB @UX_TOKEN3_2 IF UX_N2==3 THEN GOSUB @UX_TOKEN3_3 IF UX_N2==4 THEN UX_N3=1:UX_N2=0 IF UX_N2==5 THEN UX_N3=1:UX_N2=0 IF UX_N2==7 THEN GOSUB @UX_TOKEN3_1 IF UX_N2==6 THEN GOSUB @UX_TOKEN3_2 IF UX_N2==9 THEN GOSUB @UX_TOKEN3_1 IF UX_N2==8 THEN GOSUB @UX_TOKEN3_2 UX_C$=UX_C$+UX_A$ RETURN ’---1モシ゛サキカ゛ スウシ゛テ゛ハナカッタラ ’---UX_N3=TRUE @UX_TOKEN3_1 IF ASC(UX_B$)>=ASC(”0”)AND ASC(UX_B$)<=ASC(”9”) THEN ELSE UX_N2=0:UX_N3=TRUE RETURN ’---1モシ゛サキカ゛ アルファヘ゛ット テ゛ハナカッタラ ’---UX_N3=TRUE @UX_TOKEN3_2 UX_N4=0 IF ASC(UX_B$)>=ASC(”0”)AND ASC(UX_B$)<=ASC(”9”) THEN UX_N4=TRUE IF ASC(UX_B$)>=ASC(”A”)AND ASC(UX_B$)<=ASC(”Z”) THEN UX_N4=TRUE IF ASC(UX_B$)>=ASC(”a”)AND ASC(UX_B$)<=ASC(”z”) THEN UX_N4=TRUE IF ASC(UX_B$)==ASC(”$”) THEN UX_N4=TRUE IF UX_N4 THEN ELSE UX_N2=0:UX_N3=TRUE RETURN ’---1モシ゛サキカ゛エンサ゛ンシ テ゛ハナカッタラ ’---UX_N3=TRUE @UX_TOKEN3_3 UX_N4=0 FOR UX_J=0 TO UX_OPMAX-1 FOR UX_K=0 TO 1 IF UX_B$==MID$(UX_GYP_OP$(UX_J),UX_K,1) THEN UX_N4=TRUE IF UX_B$==”-” THEN UX_N4=0 IF UX_B$==”*” THEN UX_N4=0 NEXT NEXT IF UX_N4 THEN ELSE UX_N2=0:UX_N3=TRUE RETURN @UX_ER COLOR 13:?”ケイサンテ゛キマセンテ゛シタ”:?ERM$ BEEP 2:COLOR 0:STOP RETURN ’---エラ- ハンヘ゛ツ、ヘンスウヘンカン コ゛ ケイサン ヘ @UX_TOKEN4 ERM$=”スウシ゛ マタハ エンサ゛ンシ カ゛ツツ゛ケテ カカレテイル カノウセイカ゛アリマス” IF !F2 THEN IF UX_N5==UX_ON5 THEN IF UX_N5<3 THEN IF F2 THEN IF UX_N5==UX_ON5 THEN IF UX_N5<3 THEN ER=TRUE:ERM2$=ERM$:RETURN ERM$=”” IF !F2 THEN IF UX_N5==3 AND UX_ON5==1 THEN GOSUB @UX_ER IF F2 THEN IF UX_N5==3 AND UX_ON5==1 THEN ER=TRUE:ERM2$=ERM$:RETURN IF !F2 THEN IF UX_N5==1 AND UX_ON5==4 THEN GOSUB @UX_ER IF F2 THEN IF UX_N5==1 AND UX_ON5==4 THEN ER=TRUE:ERM2$=ERM$:RETURN IF !F2 THEN IF UX_N5==3 AND UX_ON5==4 THEN GOSUB @UX_ER IF F2 THEN IF UX_N5==3 AND UX_ON5==4 THEN ER=TRUE:ERM2$=ERM$:RETURN ERM$=”エンサ゛ンシ ノ イチカ゛オカシイ テ゛ス” IF !F2 THEN IF UX_N5==2 AND UX_ON5==0 THEN GOSUB @UX_ER IF F2 THEN IF UX_N5==2 AND UX_ON5==0 THEN ER=TRUE:ERM2$=ERM$:RETURN UX_N4=0 ERM$=”ソンサ゛イシナイ エンサ゛ンシカ゛カカレテイル カノウセイカ゛アリマス” IF UX_N6==3 THEN FOR UX_J=0 TO UX_OPMAX-1 IF UX_N6==3 THEN IF UX_C$==UX_GYP_OP$(UX_J) THEN UX_N4=TRUE IF UX_N6==3 THEN NEXT: IF !F2 THEN IF UX_N6==3 THEN IF UX_N4==0 THEN GOSUB @UX_ER IF F2 THEN IF UX_N6==3 THEN IF UX_N4==0 THEN ER=TRUE:ERM2$=ERM$:RETURN ’---アト゛レス ヲ スウチヘ ’?” ”;UX_C$ IF UX_N6==9 THEN UX_C$=STR$(VAL(UX_VAR$(VAL(MID$(UX_C$,1,255))))) UX_M2=FALSE:’マイナス UX_M3=FALSE:’* IF UX_N6==2 THEN GOSUB @UX_VAR IF UX_M2 THEN UX_C$=STR$(-1*VAL(UX_C$)) IF UX_M3 THEN UX_C$=UX_VAR$(VAL(UX_C$)) UX_ON5=UX_N5 GOSUB @UX_GYP_CALC UX_N3=0 UX_C$=”” RETURN ’---ヘンスウ ヲ スウチニ ヘンカン @UX_VAR UX_M=FALSE IF MID$(UX_C$,LEN(UX_C$)-1,1)==”$” THEN UX_M=TRUE IF MID$(UX_C$,0,1)==”-” THEN UX_M2=TRUE:UX_C$=MID$(UX_C$,1,256) IF MID$(UX_C$,0,1)==”*” THEN UX_M3=TRUE:UX_C$=MID$(UX_C$,1,256) FOR UX_J=0 TO UX_VARMAX-1 IF UX_M THEN IF MID$(UX_C$,0,LEN(UX_C$)-1)==UX_VAR_NAME$(UX_J) THEN UX_C$=UX_VAR$(UX_J):RETURN IF !UX_M THEN IF UX_C$==UX_VAR_NAME$(UX_J) THEN UX_C$=STR$(VAL(UX_VAR$(UX_J))):UX_J=999:NEXT:RETURN NEXT IF UX_M THEN UX_C$=”” IF !UX_M THEN UX_C$=STR$(0) RETURN