天天看點

《C語言程式設計:問題與求解方法》——0.1節理想廚房系統

本節書摘來自華章社群《c語言程式設計:問題與求解方法》一書中的第0章,第0.1節理想廚房系統,作者:何 勤,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

0.1 理想廚房系統

理想廚房系統是一個通過順序執行菜單中的各個加工步驟,把原材料加工成菜肴的系統。它由硬體和軟體(菜單)組成。

1)軟體部分:菜單是理想廚房系統中的一個無重量、無體積、不會損壞但可以經常更換的極為重要的“軟體”部件。菜單由一個個加工步驟順序組成。

每個加工步驟指令理想廚房系統完成一個基本操作(比如,炒、蒸、煮、輸入一種原材料等)。

注意:為了簡潔起見,在以下叙述中,我們經常把菜單中的一個“加工步驟”稱為一條“指令”。因為一個加工步驟就是一條指導理想廚房如何工作的指令。

2)硬體部分:理想廚房系統主要由以下四個“硬體”(即實物)部件構成——理想廚房、自動冰箱、輸入輸出裝置(即配菜員和傳菜生)和三條傳送帶。

理想廚房系統的構成簡圖如圖0-1所示。需要注意的是,理想廚房隻是理想廚房系統中的一個重要組成部分。

1.自動冰箱

自動冰箱負責臨時儲存菜單、原材料和菜肴。它由非常多的(比如幾百個)大小一樣的格子組成,每個格子都有一個唯一的固定編号,這個編号稱為位址。位址是從0開始遞增的。在菜單中,位址用來定位要存取冰箱中的哪一個格子中的物品。每份原材料和菜單中的每個加工步驟,都占據冰箱中的一個格子。

2.理想廚房

理想廚房負責根據從冰箱的菜單中取到的加工步驟,進行炒菜以及相關的控制工作。理想廚房主要由廚房管理者、廚師、炊具和一些碟子組成,參見圖0-1。

理想廚房中有一些起着重要作用的碟子:

1)一個pc碟(又稱為指令位址存放碟):此碟中存放一個非負整數值,這個值是一個位址。它指明将要執行的指令,位于自動冰箱的哪一格中。

2)一個ir碟(又稱為指令存放碟):用來存放剛剛從冰箱中取過來的一個(立即要執行的)指令。

《C語言程式設計:問題與求解方法》——0.1節理想廚房系統

3)一個狀态資訊存放碟:此碟用來随時自動記錄一些加工狀态資訊。比如某個炊具的溫度等。

4)若幹個通用臨時存放碟(圖0-1中标有名稱r0、r1、r2的碟):用來臨時存放從冰箱中取來的原材料或經過加工了的半成品或成品。這是因為到冰箱格子中存取物品,要比到通用臨時存放碟慢得多。

3.指令執行的全過程

理想廚房執行指令的流程完全是周期性的,即任意一條指令都是按照“取指令—閱讀分析指令—執行指令”這三個階段進行的。理想廚房每次隻能按順序執行菜單中的一條指令。

廚房管理者首先根據pc碟中的值,通過三條傳送帶的協調工作(三條傳送帶如何協調工作的細節,請參見下一節),到自動冰箱的指定格中取菜單中的一條指令。取到理想廚房并把它存放到ir碟中後,pc碟中的值将會加上1—這是為取下一條指令做好準備。

然後,廚房管理者閱讀并分析ir碟中剛取到的這一條指令,根據該指令的訓示做以下七類工作中的一種:

1)取物品:通過三條傳送帶,指令自動冰箱把指定位址格子中的(炒菜加工步驟馬上要用到的)原材料(通過材料傳送帶)傳送到理想廚房中來。

2)加工:指令廚師按照指令的要求,對原材料進行基本加工操作(即“炒”、“蒸”、“煮”等基本操作步驟中的某一個動作)。

3)存物品:通過三條傳送帶向自動冰箱發指令,把某個碟子或炊具中的成品(或半成品)送回到冰箱指定的格子中存放。

4)在廚房内部進行物品傳送:在廚房的各個碟子和炊具之間傳送原料或半成品。

5)跳轉:根據這種指令中給出的位址,将這個位址重新存放到pc碟中。這樣一來,理想廚房就可以跳轉到冰箱的别處去(順序往下)執行指令。

舉例來說,第19格中的跳轉指令中給出的位址是36,執行這條跳轉指令前pc碟中的值是20,但跳轉指令會将這個值改變為36,于是,下一條要執行的指令位于位址為36的格子中,而不再位于位址為20的格子中。這是無條件跳轉指令。

還有一類是有條件跳轉指令。有條件跳轉指令是在某個條件成立時才修改pc碟中的原來值,條件不成立時就不修改pc碟中的原來值(因而不會發生跳轉),而這些條件是存放在狀态資訊存放碟中的。

6)輸入:指令配菜員為某道菜臨時配備原材料(在本章不做讨論)。

7)輸出:指令傳菜生将炒好的菜送給顧客(在本章不做讨論)。

一條指令執行完後,理想廚房立即自動進行下一個完全類似的、新的 “取指令—閱讀分析指令—執行指令”的工作。

下面我們通過一個執行個體來講述理想廚房系統的工作機制。這是本章的重點,因為計算機的工作原理與之極其相似。

繼續閱讀