SOGO論壇
  登入   註冊   找回密碼
查看: 906|回覆: 2
列印 上一主題 下一主題

[問題求助] 邏輯電路 [複製連結]

Rank: 4

狀態︰ 離線
跳轉到指定樓層
1
發表於 2011-10-27 10:24:18 |只看該作者 |倒序瀏覽
本帖最後由 sgsr71 於 2011-10-27 10:26 編輯

0000000101111111
卡諾圖算出來是AC+AB+AD+BCD?
化減後是A(B+C+D)+BCD?

以上2個問題
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

Rank: 5Rank: 5

數位硬體勳章

狀態︰ 離線
2
發表於 2011-10-27 10:44:38 |只看該作者
本帖最後由 Jackchen00 於 2011-10-27 11:03 編輯

你的題目的意思應該是這樣吧

以卡諾圖化簡後確實如你所列出的
AB+AC+AD+BCD
這應該是最簡了
沒必要再改成
A(B+C+D)+BCD
邏輯的式子有分成"積之和"及"和之積"兩種
一般較常用的是"積之和"
也就是所謂的AOI(AND-OR-INVERSE)
目前市面上的PLD都是以這種架構為基礎設計的
已有 1 人評分威望 收起 理由
紅塵孤鳥 + 2 感謝您熱心幫助會員解決問題,論壇需要您的.

總評分: 威望 + 2   查看全部評分

Rank: 11Rank: 11Rank: 11Rank: 11

熱心參予論壇活動及用心回覆主題勳章 數位硬體勳章

狀態︰ 離線
3
發表於 2012-6-20 23:59:49 |只看該作者
A(B+C+D)+BCD
一個算術式是由運算元(Operands)、運算子(Operators)和間隔符號(Delimiters)等三者所組成。
1.括號內先處理。
2.優先權較高的運算原先執行(例如:先乘除後加減)
3.同優先權者,則尤其結合性,來決定是由左而右,或由右至左。
以下為常見運算子優先權。
常用的算術式運算表示法
一般在電腦中,常用的四則運算法有下列三種表示法:
(1)中序法(infix)    :<運算元> <運算子> <運算元>,如A+B。
(2)前序法(prefix)  :<運算子> <運算元> <運算元>,知+AB。
(3)後序法(postfix):<運算元> <運算元> <運算子>,如AB+。

       而我們一般日常生活中所用的表示法都是中序法。但是中序法有運算符號的優先權結合性問題,再加上複雜的括號困擾,對於編譯器處理上很傷腦筋。解決之道是將它換成後序法(較常用)或前序法。

        因為後序法只需一個堆疊暫存器(而前序法需要2個),所以計算機中多半使用後序法。我們在這節所關心的重點就是在中序、後序及前序三種之間的轉換。在我們還未進入主題前,先來了解在計算機中算術式的運作定義。在許多高階的程式語言中,我們常看到指定敘述如下

                                                            X=A+B*C-(D+E/F)

        在等號右邊的式子稱為算術運算式(arithmetic expression)。一個算術運算式是由運算元(operand)和運算子(operator)組成的。運算子簡單地區分則包括括號算術運算子,前置運算子,關係運算子,邏輯運算子等。一個算術運算式在運算時,按照運算子的優先次序(priority)一一加以運算。例如上式共有ABCDEF6個運算元和+、-、*、/、()、六個運算子。運算過程為:如果A=4、B=2、C=3、D=5、E=6、F=3。

                                                         X=4+2*3-(5+6/3)
                                                            =4+2*3-(5+2)
                                                            =4+2*3-7
                                                            =4+6-7
                                                            =10-7
                                                            =3
        這個答案是大家公認的正確答案。因為運算子的優先順序在程式語言中都有排定。再上一單元運算式的運算原則中有介紹。


        中序法是我們最常見的表示法,而後序式記法又稱為逆波蘭記法(Reverse Polish Notation,RPN),是計算機科學極為常用的表示法。如何將中序法轉成後序法呢?

有關中序轉成前序或後序的方法,一共有三種
(1)二元樹法:可以建立相對應的二元樹,利用二元樹前序追蹤及後序追蹤的方法求得前序式及後序式(樹狀結構時會再詳談)。

(2)括號法:
1.中序 > 後序(infix > postfix)
a.將算術式根據先後次序完全括號起來。 A+B*C -> A+(B*C) -> (A+(B*C))
  對*號
  對+號


b.移動所有運算子來取代所有的右括號,以最近為原則。

(A(BC*+)

c.去掉所有左括號。

ABC*+

2.中序 > 前序(infix > prefix)
a.將算術式根據先後次序括號起來。

A+B*C -> A+(B*C) -> (A+(B*C))
  對*號
  對+號

b.移動所有運算子來取代所有的左括號,以最近為原則。

+A*BC))

c.去掉所有右括號。

+A*BC

(3)堆疊法:
1.中序 > 後序
在中序轉換成後序的過程,我們將以下列的步驟運作:
ISP(堆疊內優先權):In Stack Priority
ICP(輸入優先權):In Coming Priority
a.由左至右讀入單一字元。
b.輸入為運算元,則直接輸出。
c."("在堆疊中比任何運算子都小,不過如果在堆疊外,卻比任何運算子優先權都高。
d.ISP>=ICP則將堆疊的運算子pop出來,否則就push到堆疊內。
e.若遇")",彈出堆疊內的運算子直到彈出一個"("為止。

其中運算子堆疊的規則是:
◎碰到在括號"(",一律push。
◎碰到右括號")",則一直件pop輸出至後序式,直到遇見左括號,一同抵銷。
◎運算子在堆疊中只能優先序大的壓優先序小的,也就是當運算子在進入堆疊之前和堆疊頂端的運算子比較優先序。如果外面的優先序大,則PUSH。否則就一直做pop,直到遇見優先序較小的運算子或堆疊為空。 值得注意的是:左括號在堆疊中優先序最小,亦即,任何運算子都可以壓它。

2.中序 > 前序
中序轉換成前序的過程,我們將以下列的步驟運作:
a.由右至左讀入單一字元。
b.")"在堆疊中比任何運算子都小,不過在堆疊外卻是優先權最高者。
c.若遇"(",彈出堆疊內的運算子直到彈出遇到")"為止。
d.ISP>=ICP則將堆疊的運算子POP出來,否則就push到堆疊內。
e.輸入為運算元則直接輸出。
按著我們要來研究的是「反向」運用的問題。也就是如何將已知的後序與前序表示法轉換為中序表示法。這也有二種方法,我們說明如下:
(1)括號法
A.後序 > 中序
1.適當的以"運算元十運算子"方式括號。
2.每個運算子取代前方的左括號。
3.去掉右括號。
如下例:將ABC**/DE*+AC*-轉為中序法

結果是A/B**C+D*E-A*E

B.前序 > 中序
1.適當的以"運算子十運算元"方式括號。
2.由內而外,每個運算子取代後方右括號。
3.去左括號。
如下例:將-+/A**BC*DE*AC轉為中序法。
結果是A/B**C+D*E-A*C

(2)堆疊法
反向運算的作法和前面所陳述的堆疊法是不同的。方法如下:
A.後序 > 中序
1.由左至右讀入符號。
2.若讀入的是運算元,則放入堆疊中。
3.若是運算子,則從堆疊中取出兩個運算元,組成(opl運算子op2)放入堆疊中。
4.在後序 > 中序的堆疊轉換中,堆疊內的運算順序為
結果是(A*B-(C+D))/A。

B.前序今中序
1.由右至左讀入符號。
2.若讀入的是運算元,則放入堆疊中。
3.若是運算子,則從堆疊中取出兩個運算元組成(op2運算子op1)。
4.在前序 > 中序的堆疊轉換中,堆疊內的運算順序為

使用堆疊法表示-+/A**BC*DE*AC轉為中序法的過程
結果是A/B**C+D*E-A*C
已有 1 人評分威望 收起 理由
又靜 + 2 感謝您熱心幫助會員解決問題,論壇需要您的.

總評分: 威望 + 2   查看全部評分

請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-5-9 21:58

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部