2012年01月29日投稿 / タグ : 投稿プログラム QRコード
論理式を入力すると真理値表、加法標準形と乗法標準形を出力するプログラムです。
十字キーの下で真理値表をスクロールしますが、ゆっくり表示させたい場合はBボタンでどうぞ。
中置記法なので、逆ポーランド記法で入力する必要はありません。
演算子は+がOR、^がXOR、*がAND、!がNOTに対応しており、変数名には大文字アルファベットと数字が使用出来ます。
(ただし、変数名の最初の文字に数字は使えません。)
真は1、偽は0に対応しており、式の中で使用することも可能です。
() > ! > * > ^ > +
!は右結合、それ以外は左結合
スクリーンショットや動画はありません。
- ’ショキカ
- CLEAR
- DIM POW2(16)
- POW2(0)=1
- FOR I=1 TO 15
- POW2(I)=2*POW2(I−1)
- NEXT
- ’ニュウリョク カノウモシ゛
- ALP$=”ABCDEFGHIJKLMNOPQRSTUVWXYZ”
- VARCHR$=ALP$+”0123456789”
- INPUT”ロンリシキ”;EXPR$
- ’ヘンスウシ゛ョウホウ
- DIM VAR$(16)
- FOR P=0 TO LEN(EXPR$)−1
- FOR I=1 TO 1
- I=INSTR(ALP$,MID$(EXPR$,P,1))+1
- P=P+1
- NEXT
- P=P−1
- GOSUB @GETN
- J=N
- FOR I=0 TO N
- IF S$==VAR$(I) THEN J=I:N=N−1
- NEXT
- VAR$(J)=S$
- N=N+1
- NEXT
- SORT 0,N,VAR$
- ’ヘンスウノ ヒョウカチ
- L=POW2((ABS(N−4)+N−4)/2)
- DIM TBL(N,L),STK(128,L)
- FOR I=0 TO 3
- IF I<N THEN READ TBL(I,0)
- FOR J=1 TO L−1
- TBL(I,J)=TBL(I,0)
- NEXT
- NEXT
- FOR I=4 TO N−1
- FOR J=0 TO L−1
- Q=J AND POW2(I−4)
- TBL(I,J)=(Q==0)−1
- NEXT
- NEXT
- P=0
- GOSUB @EVAL
- ’ヘンスウメイノ ヒョウシ゛
- FOR I=1 TO N
- PRINT VAR$(N−I);” ”;
- NEXT
- PRINT”│”
- ’シ゛クノヒョウシ゛
- FOR I=0 TO N−1
- FOR J=0 TO LEN(VAR$(I))
- PRINT”─”;
- NEXT
- NEXT
- PRINT”┼──”
- ’シンリチヒョウノ ヒョウシ゛
- FOR I=0 TO POW2(N)−1
- FOR J=1 TO N
- PRINT(POW2(N−J)AND I)!=0;
- FOR K=1 TO LEN(VAR$(N−J))
- PRINT” ”;
- NEXT
- NEXT
- Q=STK(SP,I/16)AND POW2(I%16)
- PRINT”│”;Q!=0
- FOR J=0 TO 1
- J=2AND BUTTON()
- IF 32AND NOT BUTTON() THEN WAIT 5
- NEXT
- NEXT
- ’カホウヒョウシ゛ュンケイノ ヒョウシ゛
- FIRST=TRUE
- FOR I=0 TO POW2(N)−1
- FOR J=NOT STK(SP,I/16)AND POW2(I%16) TO 0
- IF FIRST==FALSE THEN PRINT ”+”;
- FIRST=FALSE
- FOR J=0 TO N−1
- IF NOT I AND POW2(J) THEN PRINT”!”;
- PRINT VAR$(J);
- IF J!=N−1 THEN PRINT”*”;
- NEXT
- NEXT
- NEXT
- PRINT””
- ’シ゛ョウホウヒョウシ゛ュンケイノ ヒョウシ゛
- FIRST=TRUE
- FOR I=0 TO POW2(N)−1
- FOR J=STK(SP,I/16)AND POW2(I%16) TO 0
- IF FIRST==FALSE THEN PRINT ”*”;
- FIRST=FALSE
- PRINT”(”;
- FOR J=0 TO N−1
- IF I AND POW2(J) THEN PRINT”!”;
- PRINT VAR$(J);
- IF J!=N−1 THEN PRINT”+”;
- NEXT
- PRINT”)”;
- NEXT
- NEXT
- END
- DATA &HAAAA,&HCCCC,&HF0F0,&HFF00
- ’−−−ORエンサ゛ン
- @EVAL
- SP=SP+1
- GOSUB @LOW
- @ORLOOP
- GOSUB @FACT1
- FOR I=0 TO L−1
- STK(SP−1,I)=STK(SP−1,I)OR STK(SP,I)
- NEXT
- C$=MID$(EXPR$,P,1)
- IF C$==”+” THEN P=P+1:GOTO @ORLOOP
- SP=SP−1
- RETURN
- ’−−−XORエンサ゛ン
- @FACT1
- SP=SP+1
- GOSUB @LOW
- @XORLOOP
- GOSUB @FACT2
- FOR I=0 TO L−1
- STK(SP−1,I)=STK(SP−1,I)XOR STK(SP,I)
- NEXT
- C$=MID$(EXPR$,P,1)
- IF C$==”^” THEN P=P+1:GOTO @XORLOOP
- SP=SP−1
- RETURN
- ’−−−ANDエンサ゛ン
- @FACT2
- SP=SP+1
- GOSUB @HIGH
- @ANDLOOP
- GOSUB @TERM
- FOR I=0 TO L−1
- STK(SP−1,I)=STK(SP−1,I)AND STK(SP,I)
- NEXT
- C$=MID$(EXPR$,P,1)
- IF C$==”*” THEN P=P+1:GOTO @ANDLOOP
- SP=SP−1
- RETURN
- ’−−−ニコウエンサ゛ンシイカ゛イ
- @TERM
- SP=SP+1
- GOSUB @SKIP
- ’ヘンスウノヒョウカ
- FOR I=!(INSTR(ALP$,MID$(EXPR$,P,1))+1) TO 0
- GOSUB @GETN
- FOR I=0 TO N−1
- IF VAR$(I)==S$ THEN J=I
- NEXT
- FOR I=0 TO L−1
- STK(SP−1,I)=TBL(J,I)
- NEXT
- NEXT
- ’NOTエンサ゛ン
- FOR I=C$!=”!” TO 0
- P=P+1
- GOSUB @TERM
- FOR I=0 TO L−1
- STK(SP−1,I)=NOT STK(SP,I)
- NEXT
- NEXT
- IF C$==”0” THEN P=P+1:GOSUB @LOW
- IF C$==”1” THEN P=P+1:GOSUB @HIGH
- ’カッコノヒョウカ
- FOR I=C$!=”(” TO 0
- P=P+1
- SP=SP−1
- GOSUB @EVAL
- SP=SP+1
- P=P+1
- NEXT
- GOSUB @SKIP
- SP=SP−1
- RETURN
- ’−−−ヘンスウメイノ シュトク
- @GETN
- Q=P
- FOR I=1 TO 1
- C$=MID$(EXPR$,P,1)
- FOR J=!(INSTR(VARCHR$,C$)+1)OR C$==”” TO 0
- P=P+1
- I=0
- NEXT
- NEXT
- S$=MID$(EXPR$,Q,P−Q)
- RETURN
-
- ’−−−スヘ゛テノケタニ1
- @HIGH
- FOR I=0 TO L−1
- STK(SP−1,I)=−1
- NEXT
- RETURN
- ’−−−スヘ゛テノケタニ0
- @LOW
- FOR I=0 TO L−1
- STK(SP−1,I)=0
- NEXT
- RETURN
- ’−−−クウハクヲ トハ゛ス
- @SKIP
- C$=MID$(EXPR$,P,1)
- IF C$==” ” THEN P=P+1:GOTO @SKIP
- RETURN
この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.109 秒 | このページの最終更新 : 2022/09/20 (火) 12:44:20 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30