新しく発言する  EXIT  インデックスへ

論理演算や集合演算の計算して、その結果を...


  論理演算や集合演算の計算して、その結果を真理値表やベン図で表す 山中和義 2008/03/08 14:38:52  (修正1回)
  つづき(真理値表、ベン図) 山中和義 2008/03/08 14:41:15 
  │└つづき(式の評価eval) 山中和義 2008/03/08 14:43:25  (修正1回)
Re: つづき(真理値表、ベン図)  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/03/08 14:43:25 ** この記事は1回修正されてます
つづき(式の評価 eval)

!論理式の計算
FUNCTION propositional_expression(s$) !命題
LET v1=boolean_expression(s$)

LET t$=token$(s$)
DO WHILE t$="⇒" OR t$="⇔" !包含、同値
LET p=p+1 !eat it

CALL push(stack_Eval,sp_Eval, v1)

IF t$="⇒" THEN !計算する ※term$()でt$が破壊されるため
LET v2=boolean_expression(s$)

CALL pop(stack_Eval,sp_Eval, v1)

LET v1=BitOR(BitNOT(v1),v2) !A⇒B=¬A∪B=A'+B
ELSE
LET v2=boolean_expression(s$)

CALL pop(stack_Eval,sp_Eval, v1)

LET vv1=BitAND(BitNOT(v1),BitNOT(v2)) !v1=!(v1 xor v2)
LET vv2=BitAND(v1,v2)
LET v1=BitOR(vv1,vv2)
END IF

LET t$=token$(s$) !次へ
LOOP

LET propositional_expression=v1
END FUNCTION

FUNCTION boolean_expression(s$) !式
LET v1=term(s$)

LET t$=token$(s$)
DO WHILE t$="+" OR t$="∪" OR t$="∨" OR t$="-" OR t$="|" !和、差なら
LET p=p+1 !eat it

CALL push(stack_Eval,sp_Eval, v1)

IF t$="-" THEN !計算する ※term$()でt$が破壊されるため
LET v2=term(s$)

CALL pop(stack_Eval,sp_Eval, v1)

LET v2=BitNOT(v2) !A-B=A∩¬B=A*B'
LET v1=BitAND(v1,v2)
ELSE
LET v2=term(s$)

CALL pop(stack_Eval,sp_Eval, v1)

LET v1=BitOR(v1,v2) !v1=v1|v2
END IF

LET t$=token$(s$) !次へ
LOOP

LET boolean_expression=v1
END FUNCTION

FUNCTION term(s$) !項
LET v1=factor(s$)

LET t$=token$(s$)
DO WHILE t$="*" OR t$="・" OR t$="・" OR t$="∩" OR t$="∧" OR t$="&" !積なら
LET p=p+1 !eat it

CALL push(stack_Eval,sp_Eval, v1)

LET v2=factor(s$)

CALL pop(stack_Eval,sp_Eval, v1)

LET v1=BitAND(v1,v2) !v1=v1&v2

LET t$=token$(s$) !次へ
LOOP

LET term=v1
END FUNCTION
  │ └つづき 山中和義 2008/03/08 14:44:12  (修正1回)
  │  └つづき 山中和義 2008/03/08 14:44:53 
  │   └つづき(メイン) 山中和義 2008/03/08 14:46:11  (修正1回)
  真理値表(truthtable)から論理式(論理関... 山中和義 2008/03/10 10:55:33 
  !真理値表から多変数多項式をつくる 山中和義 2008/04/08 14:22:27 

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。