• 沒有找到結果。

數位電路化簡自動化程式設計與製作

N/A
N/A
Protected

Academic year: 2021

Share "數位電路化簡自動化程式設計與製作"

Copied!
68
0
0

加載中.... (立即查看全文)

全文

(1)

逢 甲 大 學

資訊工程學系專題報告

數位電路化簡

自動化程式設計與製作

學 生:廖鴻銘(夜資四)

指導教授

:陳 德 生 老師

中華民國九十一年十一月

(2)

資 逢

工 甲

程 大

系 學

化數

程位

式電

設路

計化

與簡

製自

作動

91

(3)

目 錄

圖表目錄 ………..4 摘要 ……… ……..6 第一章 導論 ……….... 7 1-1 研究動機 ……….….. 7 1-2 研究目的 ……….…..11 1-3 研究過程 ……….…..14 第二章 理論基礎 ……….….15 第三章 程式製作 ……….…… 19 3-1 設計預設最少 IC 數的電路圖 ……….……… 19 3-2 產生最雜亂 IC 數的電路圖 ……….…….. 20 3-3 製作資料格式 ……….……. 21 3-4 使用決策方法 ……….………. 22 3-5 秀出電路圖 ………..…….. 23 3-6 結束程式計算結果 ……….….….. 23 第四章 程式執行與改進 ………..……. 24 4-1 (選取個數)參數的設立 ……….….….. 24 4-2 任意初始值的給予 ……….….….. 24

4-3 20 個邏輯閘程式執行說明 ………….….….. 25

4-4 16 個邏輯閘程式多次執行說明 ………….… 31

第五章 意外的收穫 ………..… 32 第六章 結論 ………..…35 6-1 心得感想 ………... 35 6-2 未來計畫 ……….…….35 第七章 程式碼 ……….…. 36

(4)

圖 表 目 錄

圖(1) ……… 7 圖(2-1) ……… 8 圖(2-2) ……… 8 圖(2-3) ……… 9 圖(2-4) ……….. 9 圖(3) ………10 圖(4) ………12 圖(5) ………13 圖(6-1) ………15 圖(6-2) ………16 圖(6-3) ………17 圖(6-4) ………18 圖(7) ………19 圖(8) ………20 表(1) ………..21 圖(9) ………22 圖(10) ……….23 圖(11-1) ……….25 圖(11-2) ……….26 圖(11-3) ……….27 圖(11-4) ……….28 圖(11-5) ……….29 圖(11-6) ……….30 表(2) ………. 31 圖(12-1) ……….32 圖(12-2) ……….32 圖(12-3) ……….32 圖(12-4) ……….32 圖(12-5) ……….32

(5)

圖(12-6) ……….32

圖(12-7) ……….33

圖(12-8) ……….33

圖(12-9) ……….33

(6)

摘 要

第一章 導論 說明研究動機, 研究目的以及研究過程. 第二章 理論基礎 說明狄摩根定理在程式之中的原理及應用. 第三章 程式製作 說明程式設計過程, 資料格式, 決策方法, 秀圖及結果. 第四章 程式執行與改進 說明重要參數的設計與影響 第五章 意外的收穫 程式結果的額外啟發. 第六章 結論 心得感想與未來計畫. 第七章 程式碼 Turbo C 程式碼

(7)

第一章 導論

1-1 研究動機

記得以前大二的時候,我上一門王益文老師的數位電路設計課程, 當時在實驗課的時候,老師第一次給我們一個邏輯函數,比方是 OUT=(AB+C'+D'+EF+G'+H')*(I'+J')KL+A 老師要我們用邏輯 IC 來實作出來.想當然,第一步便是化簡我們的 電路,我們用直覺來畫以上函數的電路圖,大概會是如(圖1)的景況: (圖 1) 在圖 1 裡面包含了: 5 個 2_AND gate 3 個 2_NAND gate 4 個 2_OR gate 而老師當初給我們的 IC 是 1 個 7400 IC (內含 4 個 2_NAND gate) 1 個 7402 IC (內含 4 個 2_NOR gate)

(8)

1 個 7404 IC (內含 6 個 INVERTER gate) 1 個 7408 IC (內含 4 個 2_AND gate) 換句話說我們初始設計的電路圖要用到: 1 顆 7400 IC , 因為有 3 個 2_NAND gate 2 顆 7408 IC , 因為有 5 個 2_AND gate 卻少了具有 2_OR gate 的 IC...

於是在課堂上,老師教我們手動化簡電路圖 OUT=AB+(CD)' (如下方圖 2-1) (圖 2-1) 在圖 2-1 裡包含了: 1 個 2_AND gate 1 個 2_NAND gate 1 個 2_OR gate

ABCD 為 input, (圓圈 1)為 CD AND 之後的反向, 使之成為 NAND.

(圖 2-2)

在圖 2-2 中:我們在連線中各自加入兩個圈圈,(圈圈 2)(圈圈 3)(圈圈 4)(圈圈 5).

(9)

其中(圈圈 4)(圈圈 5)互相抵銷, 負負得正, 而維持原函數的值正確.

(圖 2-3)

在圖 2-3 中: 我們把(圈圈 3)和(圈圈 5)向右邊(後級)移動, 使得 OR gate 變成 NAND gate, 也就是形成(圈圈 6).

(圖 2-4)

在圖 2-4 中: (圈圈 2)往左移動, 使得 AND gate 變成 NAND gate, (圈圈 1)和(圈圈 4)互相抵消. 最後變成: F=((AB)'CD)' =AB+(CD)' 我們使用了: 1 個 2_AND gate 2 個 2_NAND gate 很明顯的是,我們不必使用到 2_OR gate ! 於是,我們把這個方法,套用到當初老師所給的函數: OUT=(AB+C'+D'+EF+G'+H')*(I'+J')KL+A 將他變成圖3:

(10)

(圖 3) 我們用了: 1 個 7400 IC (使用其中 4 個 2_NAND gate) 1 個 7402 IC (使用其中 4 個 2_NOR gate) 1 個 7404 IC (使用其中 1 個 INVERTER gate) 1 個 7408 IC (使用其中 4 個 2_AND gate) 最後我們達成了 IC 限制下的任務 於是我覺得手工化簡電路圖是一種見仁見智的工作,或許經驗可 以給我們幫助,也或許光用眼睛就可以看出如何變動 IC 就可以得到最 好的解,但是這是一個僅有 12 個 GATE 的邏輯函數,如果今天是一個數 百個,數千的邏輯閘的電路圖呢?是否仍然能夠光憑眼睛就看出最佳解 呢?我想,那是不可能的! 既然如此,我們是否可以利用電腦函數的強大計算能力,來幫助我 們達到這個理想?於是我想設計一個程式,來幫助我們針對特定的邏輯 電路,加以變動其中的 gate,來達成我們的要求.

(11)

1-2 研究目的

在大三時,我們修習了陳德生老師的 VLSI 演算法課程,其中運用了 不少演算法來幫助我們化簡電路,減少邏輯閘,甚至是作 floorplan,繞 線等等工作.記得老師強調,在電子產業之中,降低成本一直是企業獲 利的第一要素. 一樣的一塊電路板,拉線少拉十公分,便是降低成本,少用一顆 IC 也是降低成本,甚至使用的 IC 種類越少,也是降低成本的方法.於是乎, 如果工程師在接到上級的製作規格書時,有著上述的限制,要他在幾種 IC 或者幾顆 IC 的限制下完成一個電路,那麼我們要如何作到呢? 所以我想完成一個程式,好比第一步驟之中,我將一個剛剛好 16 個 邏輯閘的電路,如圖 4 所示: 我刻意的將他的邏輯閘設計為: 4 個 2_AND gate 4 個 2_NAND gate 4 個 2_OR gate 4 個 2_NOR gate 而剛剛好使用到 4 種 IC

(12)

(圖4) 但是, 我將之轉換成較亂的電路圖如圖5 很明顯的是, 這裡我們用到了: 5 個 2_AND gate 2 個 2_NAND gate 6 個 2_OR gate 3 個 2_NOR gate

(13)

(圖 5)

於是必須要用到至少 6 顆 IC 才能實作這個電路, 我們給他的限 制是,我們要用最少的 IC 種類,來完成一樣的電路,畢竟 4 顆 IC 的製 作成本比起 6 顆 IC 的製作成本,足足省了 33 %,這便是我的研究所要 達成的目的.

(14)

1-3 研究過程

1 針對初步的 16 個邏輯閘電路預先設計最完美的解, 便是平均使 用到四種邏輯閘, 四種 IC. 2 打亂該電路邏輯閘的種類, 使他運用到的邏輯閘遠大於最少個 數. 3 研究手工化簡電路時, 我們會運用到的方法, 將理論基礎加以 整理. 4 將上述理論基礎實作成程式. 5 執行程式並找出錯誤加以更正. 6 達成最少 IC 數之後, 加以圖形化表達. 7 計算多次執行的情形下, 平均執行次數為何. 8 將 16 個邏輯閘的程式, 加以變更為 20 個邏輯閘的程式, 求證是 否能將該程式加以擴大到邏輯閘數量龐大的電路之上. 9 比較 16 個邏輯閘 和 20 個邏輯閘的差異. 10 將結果加以整合.

(15)

第二章理論基礎

狄摩根定律

AB = (A'+B')' (如圖 6-1)

故遇到 AND gate 則替換成 NOR gate 且前級的 gate 要加上 Inverter

(圖 6-1)

(AB)' = A'+B' (如圖 6-2)

故遇到 NAND gate 則替換成 OR gate 且前級的 gate 要加上 Inverter

(16)

(圖 6-2)

A+B = (A'B')' (如圖 6-3)

故遇到 OR gate 則替換成 NAND gate 且前級的 gate 要加上 Inverter

(17)

(圖 6-3)

(A+B)'= A'B' (如圖 6-4)

故遇到 NOR gate 則替換成 AND gate 且前級的 gate 要加上 Inverter

(18)
(19)

第三章程式製作

3-1 設計預設最少 IC 數的電路圖

在這個階段,我們把 16 個邏輯閘平均分為四種邏輯閘,便是: 4 個 2_AND gate,4 個 2_NAND gate,4 個 2_OR gate,4 個 2_NOR gate,這樣 便可以用恰恰好四種 IC 來實作,於是我們設計如下的電路圖(圖7)

(20)

3-2 產生最雜亂 IC 數的電路圖

我們運用(狄摩根定律),把原本的電路圖轉成以下電路圖(圖 8)

(21)

3-3 製作資料格式 為方便我們記憶以及程式的撰寫,我們以一個陣列來儲存所有邏 輯閘的資訊,包含欄位如(表 1): 欄位順序 資料型態 代表意義 出現數值 欄位 0 int 整數 前級上端 gate 編號 1 - 13 欄位 1 int 整數 前級下端 gate 編號 2 - 15 欄位 2 int 整數 前級上端 gate 節點編號 17 - 107 欄位 3 int 整數 前級下端 gate 節點編號 18 - 108 欄位 4 int 整數 本級上端節點編號 1 - 46 欄位 5 int 整數 本級下端節點編號 2 - 47 欄位 6 int 整數 本級邏輯閘種類 1 - 4 欄位 7 int 整數 本級輸出節點編號 17 - 48 欄位 8 int 整數 次級 gate 節點編號 25 - 126 欄位 9 int 整數 次級 gate 編號 9 - 16 (表 1)

(22)

3-4 使用決策方法 3-4-1 選取變動邏輯閘個數 首先,要變動邏輯閘之前,我先用亂數函數 random(); 來決定該 次要變動幾個 IC,為了不要變更輸入端的訊號源,所以我們將不變動那 些會造成訊號源正負值得邏輯閘.所以只會選取 gate: 9,10,11,12,13,14,16 如圖 9 (圖 9) 3-4-2 選取變動邏輯閘 依照上述選取個數,由亂數函數決定要挑哪一個邏輯閘加以變動, 原則採用前述(狄摩根定律),並將前級受影響邏輯閘加以修正. 3-4-3 計算變動後邏輯閘數量 依照變動後之各個邏輯閘的型態,計算各種邏輯閘的種類及數量.

(23)

3-4-4 計算變動後 IC 數量 依照邏輯閘的數量,每四個一組,推算出一共使用了幾種 IC. 3-4-5 與先前的結果作比較 比較該次 IC 數是否有減少?如果是,我們就將該次結果設為最佳結 果,反之,將丟棄該結果,並繼續維持上一次的結果. 3-5 秀出電路圖 在每一輪的執行之後,以 Turbo C 的繪圖函數畫出各種邏輯閘的 圖案,並依照電路圖的相對關係位置秀在螢幕上.如圖10 圖 10 3-6 結束程式計算結果 將最佳的解紀錄下來,並記下當時程式執行的次數,多次執行的結 果之後,計算平均執行幾次可以得到最佳解,以圖形的方式,將最佳解 的電路圖表達出來,秀在螢幕上.

(24)

第四章 程式執行與改進

4-1 (選取個數)參數的設立

當初一開始時,我的設計並沒有(選取個數)的參數,於是我發現程 式在沒有問題的情形之下,一樣的初始狀況,常常執行幾百次,甚至幾 千次,都很難得到最佳解,也就是一開始初始狀況的 IC 數為 6,而執行 了幾百次之後,仍然停留在 6,而最好的狀況也僅在於 5,就無法再下 降了,始終沒辦法找到 4 個 IC 的最佳解,原因何在 ? 這使我想到以前在作手工化簡時,往往要一次變動好幾個邏輯閘, 才能得到迥然不同的解,如果單單只是變動一個邏輯閘,就很難有大的 改變,更別說是最佳解了,於是才想到,如果每次選取變動 IC 個數,都給 他不一樣的量,是否會有改善? 結果是肯定的,在最後加入(選取個數)參數,使得程式能在較少的 執行次數下,便得到最佳解.

4-2 任意初始值的給予

在多次執行結果後,在在都能夠得到最佳解,便是 4 個 IC,於是我 再加以思考,如果我的初始狀況給他雜亂無章的數值,是否能夠給我們 最佳解?結果都能成功執行

(25)

4-3 20 個邏輯閘程式執行說明

首先我們啟動 20 個邏輯閘的程式,並且輸入 cycle=50 的

要求,表示我們要程式對該電路執行 50 次的邏輯閘變換.如下

(圖 11-1)

(26)

程式一開始便秀出初始狀態的電路圖,並且讓我們知道該

電路使用了

6 個 AND gate ,3 個 NAND gate,9 個 OR gate,2 個

NOR gate,而且換算出要使用到 7 個 IC .如下圖(圖 11-2)

(27)

程式在第一個 cycle 便把邏輯閘加以變動,產生新的電路,

並告知總

IC 數 下降到 6 個 IC,並把他加以保留.如(圖 11-3)

(28)

程式在第 22 個 cycle 時, 得到更小的總 IC 數=5,並把他加

以保留.如(圖 11-4)

(29)

程式結束時,秀出最佳解,也就是秀出 IC 數=5 時的電路,並

且告知我們是在第

22 cycle 時所得到的.如(圖 11-5)

(30)

最後程式結束時,並告知我們,在多次執行之下,平均跑了

18 個 cycle,便可以得到最佳解.如(圖 11-6)

(31)

4-4 16 個邏輯閘程式多次執行說明

針對 16 個邏輯閘,在多次執行之下,找出平均取得最佳解

cycle 數.統計如下(表 2)

Cycle 數

連續執行次數

取得最佳解

cycle 數

50 1

7.0000

50 5

4.6000

50 10

6.8000

50 15

6.8000

50 20

6.8000

50 25

4.8000

50 30

4.4666

50 35

4.3714

50 50

4.8500

50 100

3.9000

(表 2)

我們可以看出,當重複執行次數愈大,則平均取得最佳解的

cycle 數愈會下降.

(32)

第五章 意外的收穫

在下面的例子中,我將說明何謂意外的收穫,以我們一開始給的電 路為例,我們預設: 4 個 2_AND gate,4 個 2_NAND gate,4 個 2_OR gate,4 個 2_NOR gate,這樣便可以用恰恰好四種 IC 來實作,當然,程式最後可 以給我們這樣的答案. 但是,後來卻發現,一樣的最佳解 (指同樣在四個 IC 的限制之下), 他可以給我們一樣結果,卻是不同的電路,甚至是不一樣的 IC 組合,在 一次執行中,我發現以下的電路,都是一樣的結果,四個 IC,甚至只用三 種 IC 來完成,這是我當初所沒有料想到的結果 如(圖 12-1) --- (圖 12-9)是在一次執行中分別記錄下來的結果 (圖 12-1) (圖 12-2) (圖 12-3) (圖 12-4)

(33)

(圖 12-7) (圖 12-8)

(圖 12-9)

其中cycle=1,9,11,16,30,36,37,41,43 都找到了 IC 數=4 的最佳解 但是我發現 他提供了我至少九種電路的設計

(34)

圖片 11-1 11-2 11-3 11-4 11-5 11-6 11-7 11-8 11-9 Cycle 1 9 11 16 30 36 37 41 43 1 2 1 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 2 2 3 4 4 3 4 4 3 4 3 3 4 3 3 4 3 3 4 3 4 4 5 1 1 2 2 2 2 1 1 1 6 2 2 1 1 1 1 2 2 2 7 4 3 4 4 4 3 4 4 4 8 3 4 3 3 3 4 3 3 3 9 4 1 4 4 4 3 1 1 2 10 3 3 2 3 3 1 3 2 1 11 3 3 1 2 1 2 4 4 4 12 1 4 2 1 2 4 2 2 2 13 2 2 1 1 2 3 2 1 3 14 2 2 3 2 3 2 3 3 3 15 4 4 3 3 4 4 4 3 4 16 1 1 4 4 1 1 1 4 1 (表 3)

在(表 3)中 1234 分別代表各個 gate 的種類依序為 AND NAND OR NOR 回到當初我給的初始電路, 要不是有程式的幫助 我可能還自認為這是 唯一的最佳解呢!

(35)

第六章 結論

6-1 心得感想

這個程式是我當初大二修習數位電路設計時,常常想要解決的問 題,因為手工化簡邏輯閘,是一件很艱鉅的任務,而且要頭腦思緒非常 清晰的情形下,才能夠順利達成的,而且即使找到最少 IC 數的電路圖, 也不一定可以達到老師所給的限制. 比方說某一種 IC 老師不提供,而我偏偏一直找不出這種電路時, 偏偏手工化簡是一件見仁見智,或者說有一點點運氣成分在內的工作, 今天我既然可以完成這樣的小程式,想當初如果可以早點完成拿來使 用,該有多方便呀! 還可以在多種最佳解之中,找一個最棒的來用,實在是一大利器.

6-2 未來計畫

我所製作的這個小程式,套用在 16 個 gate 和 20 個 gate 的電路上 可以正常執行,這表示將來可以把程式加大,把 gate 數量的提升,並把 我們定義的 IC 種類增加,不只是 74XX 系列,還可以把其他的晶片或 IC 都丟進去,依照正確的邏輯來修改程式,或許真能夠讓將來的 IC 設 計多一點點幫助吧!

(36)

第七章 程式碼

#include<conio.h> #include<iostream.h> #include<stdlib.h> #include<stdio.h> #include<math.h> #include<dos.h> #include<graphics.h> void main(void) { int gdriver=DETECT; int gmode; initgraph(&gdriver,&gmode,"c:\\dos\\tc3\\bgi"); initgraph(&gdriver,&gmode,"C:\\DOS\\TC3\\BGI"); int sx,sy; int time; float totaltime=0; float average; clrscr(); int net[17][10]; int gnet[17][10]; int bnet[17][10]; int mini; int i,j,k,l,m; int getmini; int end;

printf("\nPlease insert the value of cycle :"); scanf("%d",&end);

printf("\nPlease insert the value of time :"); scanf("%d",&time);

(37)

for(m=1;m<=time;m++) {

net[0][0]=0; net[0][1]=0; net[0][2]=0; net[0][3]=0; net[0][4]=0; net[0][5]=0; net[0][6]=0; net[0][7]=0; net[0][8]=0; net[0][9]=0;

net[1][0]=0; net[1][1]=0; net[1][2]=101; net[1][3]=102; net[1][4]=1; net[1][5]=2; net[1][6]=2; net[1][7]=17; net[1][8]=25; net[1][9]=9;

net[2][0]=0; net[2][1]=0; net[2][2]=103; net[2][3]=104; net[2][4]=3; net[2][5]=4; net[2][6]=1; net[2][7]=18; net[2][8]=26; net[2][9]=9;

net[3][0]=0; net[3][1]=0; net[3][2]=105; net[3][3]=106; net[3][4]=5; net[3][5]=6; net[3][6]=3; net[3][7]=19; net[3][8]=27; net[3][9]=10;

net[4][0]=0; net[4][1]=0; net[4][2]=107; net[4][3]=108; net[4][4]=7; net[4][5]=8; net[4][6]=4; net[4][7]=20; net[4][8]=28; net[4][9]=10;

net[5][0]=0; net[5][1]=0; net[5][2]=103; net[5][3]=104; net[5][4]=9; net[5][5]=10; net[5][6]=2; net[5][7]=21; net[5][8]=29; net[5][9]=11;

net[6][0]=0; net[6][1]=0; net[6][2]=101; net[6][3]=102; net[6][4]=11; net[6][5]=12; net[6][6]=1; net[6][7]=22; net[6][8]=30; net[6][9]=11;

net[7][0]=0; net[7][1]=0; net[7][2]=107; net[7][3]=108; net[7][4]=13; net[7][5]=14; net[7][6]=3; net[7][7]=23; net[7][8]=31; net[7][9]=12;

net[8][0]=0; net[8][1]=0; net[8][2]=105; net[8][3]=106; net[8][4]=15; net[8][5]=16; net[8][6]=4; net[8][7]=24; net[8][8]=32; net[8][9]=12;

net[9][0]=1; net[9][1]=2; net[9][2]=17; net[9][3]=18; net[9][4]=25; net[9][5]=26; net[9][6]=3; net[9][7]=33;

(38)

net[9][8]=37; net[9][9]=13;

net[10][0]=3; net[10][1]=4; net[10][2]=19; net[10][3]=20; net[10][4]=27; net[10][5]=28; net[10][6]=1; net[10][7]=34; net[10][8]=38; net[10][9]=13;

net[11][0]=5; net[11][1]=6; net[11][2]=21; net[11][3]=22; net[11][4]=29; net[11][5]=30; net[11][6]=1; net[11][7]=35; net[11][8]=39; net[11][9]=14;

net[12][0]=7; net[12][1]=8; net[12][2]=23; net[12][3]=24; net[12][4]=31; net[12][5]=32; net[12][6]=3; net[12][7]=36; net[12][8]=40; net[12][9]=14;

net[13][0]=9; net[13][1]=10; net[13][2]=33; net[13][3]=34; net[13][4]=37; net[13][5]=38; net[13][6]=3; net[13][7]=41; net[13][8]=46; net[13][9]=16;

net[14][0]=11; net[14][1]=12; net[14][2]=35; net[14][3]=36; net[14][4]=39; net[14][5]=40; net[14][6]=3; net[14][7]=42; net[14][8]=43; net[14][9]=15;

net[15][0]=14; net[15][1]=0; net[15][2]=42; net[15][3]=101; net[15][4]=43; net[15][5]=44; net[15][6]=4; net[15][7]=45; net[15][8]=47; net[15][9]=16;

net[16][0]=13; net[16][1]=15; net[16][2]=41; net[16][3]=45; net[16][4]=46; net[16][5]=47; net[16][6]=1; net[16][7]=48; net[16][8]=126; net[16][9]=0; for(i=0;i<=16;i++) for(j=0;j<=9;j++) gnet[i][j]=net[i][j]; int andgate,nandgate,orgate,norgate; int gandgate,gnandgate,gorgate,gnorgate; int bandgate,bnandgate,borgate,bnorgate; int andic,nandic,oric,noric; int gandic,gnandic,goric,gnoric; int bandic,bnandic,boric,bnoric;

(39)

int totalic,gtotalic,btotalic;

gandgate=5; gnandgate=2; gorgate=6; gnorgate=3; gandic=2; gnandic=1; goric=2; gnoric=1; gtotalic=6;

andgate=5; nandgate=2; orgate=6; norgate=3; andic=2; nandic=1; oric=2; noric=1; totalic=6;

mini=6; clrscr();

printf(" The initial situation is : ");

printf(" AND_GATE=%2d

NAND_GATE=%2d OR_GATE=%2d NOR_GATE=%2d ",gandgate,gnandgate,gorgate,gnorgate);

printf(" AND___IC=%2d

NAND___IC=%2d OR___IC=%2d NOR___IC=%2d Total IC=%d ",gandic,gnandic,goric,gnoric,gtotalic); printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf("

(40)

"); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space

(41)

printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space for(i=1;i<=16;i++) { switch(i)

(42)

{

case 1: sx=10; sy=0; break; case 2: sx=10; sy=45; break; case 3: sx=10; sy=90; break; case 4: sx=10; sy=135; break; case 5: sx=10; sy=180; break; case 6: sx=10; sy=225; break; case 7: sx=10; sy=270; break; case 8: sx=10; sy=315; break; case 9: sx=100; sy=23; break; case 10: sx=100; sy=113; break; case 11: sx=100; sy=203; break; case 12: sx=100; sy=293; break; case 13: sx=190; sy=68; break; case 14: sx=190; sy=248; break; case 15: sx=280; sy=293; break; case 16: sx=370; sy=180; break; } switch(gnet[i][6]) { case 1: line(sx+5,sy+3,sx+5,sy+43); line(sx+1,sy+10,sx+5,sy+10); line(sx+1,sy+36,sx+5,sy+36); line(sx+45,sy+23,sx+60,sy+23); line(sx+5,sy+3,sx+26,sy+3); line(sx+5,sy+43,sx+26,sy+43); line(sx+27,sy+3,sx+32,sy+4); line(sx+32,sy+4,sx+37,sy+6); line(sx+37,sy+6,sx+41,sy+10); line(sx+41,sy+10,sx+43,sy+14); line(sx+43,sy+14,sx+44,sy+19);

(43)

line(sx+44,sy+19,sx+44,sy+27); line(sx+44,sy+27,sx+43,sy+32); line(sx+43,sy+32,sx+41,sy+36); line(sx+41,sy+36,sx+37,sy+40); line(sx+37,sy+40,sx+32,sy+42); line(sx+32,sy+42,sx+27,sy+43); break; case 2: line(sx+5,sy+3,sx+5,sy+43); line(sx+5,sy+3,sx+5,sy+43); line(sx+1,sy+10,sx+5,sy+10); line(sx+1,sy+36,sx+5,sy+36); line(sx+53,sy+23,sx+60,sy+23); line(sx+5,sy+3,sx+26,sy+3); line(sx+5,sy+43,sx+26,sy+43); line(sx+27,sy+3,sx+32,sy+4); line(sx+32,sy+4,sx+37,sy+6); line(sx+37,sy+6,sx+41,sy+10); line(sx+41,sy+10,sx+43,sy+14); line(sx+43,sy+14,sx+44,sy+19); line(sx+44,sy+19,sx+44,sy+27); line(sx+44,sy+27,sx+43,sy+32); line(sx+43,sy+32,sx+41,sy+36); line(sx+41,sy+36,sx+37,sy+40); line(sx+37,sy+40,sx+32,sy+42); line(sx+32,sy+42,sx+27,sy+43); outtextxy(sx+46,sy+19,"o"); break; case 3: line(sx+1,sy+10,sx+8,sy+10); line(sx+1,sy+36,sx+8,sy+36); line(sx+36,sy+23,sx+60,sy+23); line(sx+5,sy+3,sx+12,sy+4);

(44)

line(sx+12,sy+4,sx+18,sy+6); line(sx+18,sy+6,sx+24,sy+10); line(sx+24,sy+10,sx+28,sy+14); line(sx+28,sy+14,sx+32,sy+19); line(sx+32,sy+19,sx+35,sy+22); line(sx+35,sy+22,sx+32,sy+27); line(sx+32,sy+27,sx+28,sy+32); line(sx+28,sy+32,sx+24,sy+36); line(sx+24,sy+36,sx+18,sy+40); line(sx+18,sy+40,sx+12,sy+42); line(sx+12,sy+42,sx+5,sy+43); line(sx+5,sy+43,sx+8,sy+38); line(sx+8,sy+38,sx+10,sy+31); line(sx+10,sy+31,sx+11,sy+23); line(sx+11,sy+23,sx+10,sy+15); line(sx+10,sy+15,sx+8,sy+8); line(sx+8,sy+8,sx+5,sy+3); break; case 4: line(sx+1,sy+10,sx+8,sy+10); line(sx+1,sy+36,sx+8,sy+36); line(sx+42,sy+23,sx+60,sy+23); line(sx+5,sy+3,sx+12,sy+4); line(sx+12,sy+4,sx+18,sy+6); line(sx+18,sy+6,sx+24,sy+10); line(sx+24,sy+10,sx+28,sy+14); line(sx+28,sy+14,sx+32,sy+19); line(sx+32,sy+19,sx+35,sy+22); line(sx+35,sy+22,sx+32,sy+27); line(sx+32,sy+27,sx+28,sy+32); line(sx+28,sy+32,sx+24,sy+36); line(sx+24,sy+36,sx+18,sy+40);

(45)

line(sx+18,sy+40,sx+12,sy+42); line(sx+12,sy+42,sx+5,sy+43); line(sx+5,sy+43,sx+8,sy+38); line(sx+8,sy+38,sx+10,sy+31); line(sx+10,sy+31,sx+11,sy+23); line(sx+11,sy+23,sx+10,sy+15); line(sx+10,sy+15,sx+8,sy+8); line(sx+8,sy+8,sx+5,sy+3); outtextxy(sx+35,sy+19,"o"); break; } } //draw line line(71,23,100,33); line(71,68,100,59); line(71,113,100,123); line(71,158,100,149); line(71,203,100,213); line(71,248,100,239); line(71,293,100,303); line(71,338,100,329); line(161,46,190,78); line(161,136,190,104); line(161,226,190,258); line(161,316,190,284); line(251,271,280,303); line(11,396,280,329); line(251,91,370,190); line(341,316,370,216); line(431,203,440,203); outtextxy(0,6,"A");

(46)

outtextxy(0,32,"B"); outtextxy(0,51,"C"); outtextxy(0,77,"D"); outtextxy(0,96,"E"); outtextxy(0,122,"F"); outtextxy(0,141,"G"); outtextxy(0,167,"H"); outtextxy(0,186,"C"); outtextxy(0,212,"D"); outtextxy(0,231,"A"); outtextxy(0,257,"B"); outtextxy(0,276,"G"); outtextxy(0,302,"H"); outtextxy(0,321,"E"); outtextxy(0,347,"F"); outtextxy(0,392,"A"); outtextxy(441,199,"OUT"); // for(i=1;i<=16;i++) // for(j=0;j<=9;j++) // { printf("%4d",gnet[i][j]); // if(j==9) printf("\n"); // } int out=0; int cycle=0; int pickcount; int pick; int choice[17]; int done; int front1,front2; randomize(); //

(47)

//while start //

while(out==0) {

// set net from gnet for(i=0;i<=16;i++)

for(j=0;j<=9;j++) net[i][j]=gnet[i][j]; cycle++;

clrscr();

printf(" After cycle %3d ",cycle); pickcount=random(7)+1; for(k=0;k<=16;k++) choice[k]=0; // for 1 start // for(k=1;k<=pickcount;k++) { done=0; while(done==0) { pick=random(17); if((pick>=9)&(pick<=16)&&(pick!=15)) if(choice[pick]==0) { choice[pick]=1; done=1; } } // printf("pick=%d,",pick); } //for 1 end //

(48)

// printf("\npickcount=%d\n",pickcount); // for 2 start // for(k=9;k<=16;k++) { // if 1 start if(choice[k]==1) {

// step 1 change self gate type switch(net[k][6]) { case 1: net[k][6]=4; break; case 2: net[k][6]=3; break; case 3: net[k][6]=2; break; case 4: net[k][6]=1; break; default: break; }

// step 2 find 2 gate before the gate front1=net[k][0];

front2=net[k][1];

// step 3 change front1 gate type switch(net[front1][6]) { case 1: net[front1][6]=2; break; case 2: net[front1][6]=1; break;

(49)

case 3: net[front1][6]=4; break; case 4: net[front1][6]=3; break; default: break; }

// step 4 change front2 gate type // switch(net[front2][6]) { case 1: net[front2][6]=2; break; case 2: net[front2][6]=1; break; case 3: net[front2][6]=4; break; case 4: net[front2][6]=3; break; default: break; } }// if 1 end // }// for 2 end //

// clear each gate and ic

andgate=nandgate=orgate=norgate=andic=nandic=oric=noric=totalic=0; // step 5 count each kind gate number

for(i=1;i<=16;i++) {

(50)

{

case 1: andgate++;

if(andgate==1) andic=1;

else if((andgate-1)%4==0) andic++; break;

case 2: nandgate++;

if(nandgate==1) nandic=1;

else if((nandgate-1)%4==0) nandic++; break;

case 3: orgate++;

if(orgate==1) oric=1;

else if((orgate-1)%4==0) oric++; break;

case 4: norgate++;

if(norgate==1) noric=1;

else if((norgate-1)%4==0) noric++; break;

} }

totalic=andic+nandic+oric+noric; // deside if we will keep the result ?

// if the NO is "not small" than old one , we recover it from gnet. // if the NO is "small" than old one , we keep it .

// keep the best situation if(totalic<(mini)) { mini--; for(i=0;i<=16;i++) for(j=0;j<=9;j++) bnet[i][j]=net[i][j]; getmini=cycle; }

(51)

if(totalic>=gtotalic) {

// set net from gnet for(i=0;i<=16;i++) for(j=0;j<=9;j++) net[i][j]=gnet[i][j];

//re clear each gate and ic

andgate=nandgate=orgate=norgate=andic=nandic=oric=noric=totalic=0; //re count each kind gate number

for(l=1;l<=16;l++) { switch(net[l][6]) { case 1: andgate++; if(andgate==1) andic=1;

else if((andgate-1)%4==0) andic++; break;

case 2: nandgate++;

if(nandgate==1) nandic=1;

else if((nandgate-1)%4==0) nandic++; break;

case 3: orgate++;

if(orgate==1) oric=1;

else if((orgate-1)%4==0) oric++; break;

case 4: norgate++;

if(norgate==1) noric=1;

else if((norgate-1)%4==0) noric++; break;

(52)

} totalic=andic+nandic+oric+noric; } else { for(i=0;i<=16;i++) for(j=0;j<=9;j++) gnet[i][j]=net[i][j]; } printf(" AND_GATE=%2d NAND_GATE=%2d OR_GATE=%2d NOR_GATE=%2d",andgate,nandgate,orgate,norgate); printf(" AND___IC=%2d

NAND___IC=%2d OR___IC=%2d NOR___IC=%2d Total IC=%2d",andic,nandic,oric,noric,totalic); printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space

(53)

printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf("

(54)

"); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space for(i=1;i<=16;i++) { switch(i) {

case 1: sx=10; sy=0; break; case 2: sx=10; sy=45; break;

(55)

case 3: sx=10; sy=90; break; case 4: sx=10; sy=135; break; case 5: sx=10; sy=180; break; case 6: sx=10; sy=225; break; case 7: sx=10; sy=270; break; case 8: sx=10; sy=315; break; case 9: sx=100; sy=23; break; case 10: sx=100; sy=113; break; case 11: sx=100; sy=203; break; case 12: sx=100; sy=293; break; case 13: sx=190; sy=68; break; case 14: sx=190; sy=248; break; case 15: sx=280; sy=293; break; case 16: sx=370; sy=180; break; } switch(gnet[i][6]) { case 1: line(sx+5,sy+3,sx+5,sy+43); line(sx+1,sy+10,sx+5,sy+10); line(sx+1,sy+36,sx+5,sy+36); line(sx+45,sy+23,sx+60,sy+23); line(sx+5,sy+3,sx+26,sy+3); line(sx+5,sy+43,sx+26,sy+43); line(sx+27,sy+3,sx+32,sy+4); line(sx+32,sy+4,sx+37,sy+6); line(sx+37,sy+6,sx+41,sy+10); line(sx+41,sy+10,sx+43,sy+14); line(sx+43,sy+14,sx+44,sy+19); line(sx+44,sy+19,sx+44,sy+27); line(sx+44,sy+27,sx+43,sy+32); line(sx+43,sy+32,sx+41,sy+36);

(56)

line(sx+41,sy+36,sx+37,sy+40); line(sx+37,sy+40,sx+32,sy+42); line(sx+32,sy+42,sx+27,sy+43); break; case 2: line(sx+5,sy+3,sx+5,sy+43); line(sx+5,sy+3,sx+5,sy+43); line(sx+1,sy+10,sx+5,sy+10); line(sx+1,sy+36,sx+5,sy+36); line(sx+53,sy+23,sx+60,sy+23); line(sx+5,sy+3,sx+26,sy+3); line(sx+5,sy+43,sx+26,sy+43); line(sx+27,sy+3,sx+32,sy+4); line(sx+32,sy+4,sx+37,sy+6); line(sx+37,sy+6,sx+41,sy+10); line(sx+41,sy+10,sx+43,sy+14); line(sx+43,sy+14,sx+44,sy+19); line(sx+44,sy+19,sx+44,sy+27); line(sx+44,sy+27,sx+43,sy+32); line(sx+43,sy+32,sx+41,sy+36); line(sx+41,sy+36,sx+37,sy+40); line(sx+37,sy+40,sx+32,sy+42); line(sx+32,sy+42,sx+27,sy+43); outtextxy(sx+46,sy+19,"o"); break; case 3: line(sx+1,sy+10,sx+8,sy+10); line(sx+1,sy+36,sx+8,sy+36); line(sx+36,sy+23,sx+60,sy+23); line(sx+5,sy+3,sx+12,sy+4); line(sx+12,sy+4,sx+18,sy+6); line(sx+18,sy+6,sx+24,sy+10); line(sx+24,sy+10,sx+28,sy+14);

(57)

line(sx+28,sy+14,sx+32,sy+19); line(sx+32,sy+19,sx+35,sy+22); line(sx+35,sy+22,sx+32,sy+27); line(sx+32,sy+27,sx+28,sy+32); line(sx+28,sy+32,sx+24,sy+36); line(sx+24,sy+36,sx+18,sy+40); line(sx+18,sy+40,sx+12,sy+42); line(sx+12,sy+42,sx+5,sy+43); line(sx+5,sy+43,sx+8,sy+38); line(sx+8,sy+38,sx+10,sy+31); line(sx+10,sy+31,sx+11,sy+23); line(sx+11,sy+23,sx+10,sy+15); line(sx+10,sy+15,sx+8,sy+8); line(sx+8,sy+8,sx+5,sy+3); break; case 4: line(sx+1,sy+10,sx+8,sy+10); line(sx+1,sy+36,sx+8,sy+36); line(sx+42,sy+23,sx+60,sy+23); line(sx+5,sy+3,sx+12,sy+4); line(sx+12,sy+4,sx+18,sy+6); line(sx+18,sy+6,sx+24,sy+10); line(sx+24,sy+10,sx+28,sy+14); line(sx+28,sy+14,sx+32,sy+19); line(sx+32,sy+19,sx+35,sy+22); line(sx+35,sy+22,sx+32,sy+27); line(sx+32,sy+27,sx+28,sy+32); line(sx+28,sy+32,sx+24,sy+36); line(sx+24,sy+36,sx+18,sy+40); line(sx+18,sy+40,sx+12,sy+42); line(sx+12,sy+42,sx+5,sy+43); line(sx+5,sy+43,sx+8,sy+38);

(58)

line(sx+8,sy+38,sx+10,sy+31); line(sx+10,sy+31,sx+11,sy+23); line(sx+11,sy+23,sx+10,sy+15); line(sx+10,sy+15,sx+8,sy+8); line(sx+8,sy+8,sx+5,sy+3); outtextxy(sx+35,sy+19,"o"); break; } } //draw line line(71,23,100,33); line(71,68,100,59); line(71,113,100,123); line(71,158,100,149); line(71,203,100,213); line(71,248,100,239); line(71,293,100,303); line(71,338,100,329); line(161,46,190,78); line(161,136,190,104); line(161,226,190,258); line(161,316,190,284); line(251,271,280,303); line(11,396,280,329); line(251,91,370,190); line(341,316,370,216); line(431,203,440,203); outtextxy(0,6,"A"); outtextxy(0,32,"B"); outtextxy(0,51,"C"); outtextxy(0,77,"D");

(59)

outtextxy(0,96,"E"); outtextxy(0,122,"F"); outtextxy(0,141,"G"); outtextxy(0,167,"H"); outtextxy(0,186,"C"); outtextxy(0,212,"D"); outtextxy(0,231,"A"); outtextxy(0,257,"B"); outtextxy(0,276,"G"); outtextxy(0,302,"H"); outtextxy(0,321,"E"); outtextxy(0,347,"F"); outtextxy(0,392,"A"); outtextxy(441,199,"OUT"); if(cycle==end) out=1; }//while end //

//count best situation //

//re clear each gate and ic

bandgate=bnandgate=borgate=bnorgate=bandic=bnandic=boric=bnoric=bt otalic=0;

//re count each kind gate number for(l=1;l<=16;l++) { switch(bnet[l][6]) { case 1: bandgate++; if(bandgate==1) bandic=1;

(60)

break;

case 2: bnandgate++;

if(bnandgate==1) bnandic=1;

else if((bnandgate-1)%4==0) bnandic++; break;

case 3: borgate++;

if(borgate==1) boric=1;

else if((borgate-1)%4==0) boric++; break;

case 4: bnorgate++;

if(bnorgate==1) bnoric=1;

else if((bnorgate-1)%4==0) bnoric++; break;

} }

btotalic=bandic+bnandic+boric+bnoric; //

// printf best situation totaltime=totaltime+getmini; clrscr();

printf(" The best situation : (get cycle is %3d) ",getmini);

printf(" AND_GATE=%2d

NAND_GATE=%2d OR_GATE=%2d NOR_GATE=%2d",bandgate,bnandgate,borgate,bnorgate);

printf(" AND___IC=%2d

NAND___IC=%2d OR___IC=%2d NOR___IC=%2d Total IC=%2d",bandic,bnandic,boric,bnoric,btotalic);

printf(" "); // 30 space

(61)

"); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space

(62)

printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf(" "); // 30 space printf("

(63)

"); // 30 space printf(" "); // 30 space printf(" "); // 30 space for(i=1;i<=16;i++) { switch(i) {

case 1: sx=10; sy=0; break; case 2: sx=10; sy=45; break; case 3: sx=10; sy=90; break; case 4: sx=10; sy=135; break; case 5: sx=10; sy=180; break; case 6: sx=10; sy=225; break; case 7: sx=10; sy=270; break; case 8: sx=10; sy=315; break; case 9: sx=100; sy=23; break; case 10: sx=100; sy=113; break; case 11: sx=100; sy=203; break; case 12: sx=100; sy=293; break; case 13: sx=190; sy=68; break; case 14: sx=190; sy=248; break; case 15: sx=280; sy=293; break; case 16: sx=370; sy=180; break; } switch(bnet[i][6]) { case 1: line(sx+5,sy+3,sx+5,sy+43); line(sx+1,sy+10,sx+5,sy+10);

(64)

line(sx+1,sy+36,sx+5,sy+36); line(sx+45,sy+23,sx+60,sy+23); line(sx+5,sy+3,sx+26,sy+3); line(sx+5,sy+43,sx+26,sy+43); line(sx+27,sy+3,sx+32,sy+4); line(sx+32,sy+4,sx+37,sy+6); line(sx+37,sy+6,sx+41,sy+10); line(sx+41,sy+10,sx+43,sy+14); line(sx+43,sy+14,sx+44,sy+19); line(sx+44,sy+19,sx+44,sy+27); line(sx+44,sy+27,sx+43,sy+32); line(sx+43,sy+32,sx+41,sy+36); line(sx+41,sy+36,sx+37,sy+40); line(sx+37,sy+40,sx+32,sy+42); line(sx+32,sy+42,sx+27,sy+43); break; case 2: line(sx+5,sy+3,sx+5,sy+43); line(sx+5,sy+3,sx+5,sy+43); line(sx+1,sy+10,sx+5,sy+10); line(sx+1,sy+36,sx+5,sy+36); line(sx+53,sy+23,sx+60,sy+23); line(sx+5,sy+3,sx+26,sy+3); line(sx+5,sy+43,sx+26,sy+43); line(sx+27,sy+3,sx+32,sy+4); line(sx+32,sy+4,sx+37,sy+6); line(sx+37,sy+6,sx+41,sy+10); line(sx+41,sy+10,sx+43,sy+14); line(sx+43,sy+14,sx+44,sy+19); line(sx+44,sy+19,sx+44,sy+27); line(sx+44,sy+27,sx+43,sy+32);

(65)

line(sx+43,sy+32,sx+41,sy+36); line(sx+41,sy+36,sx+37,sy+40); line(sx+37,sy+40,sx+32,sy+42); line(sx+32,sy+42,sx+27,sy+43); outtextxy(sx+46,sy+19,"o"); break; case 3: line(sx+1,sy+10,sx+8,sy+10); line(sx+1,sy+36,sx+8,sy+36); line(sx+36,sy+23,sx+60,sy+23); line(sx+5,sy+3,sx+12,sy+4); line(sx+12,sy+4,sx+18,sy+6); line(sx+18,sy+6,sx+24,sy+10); line(sx+24,sy+10,sx+28,sy+14); line(sx+28,sy+14,sx+32,sy+19); line(sx+32,sy+19,sx+35,sy+22); line(sx+35,sy+22,sx+32,sy+27); line(sx+32,sy+27,sx+28,sy+32); line(sx+28,sy+32,sx+24,sy+36); line(sx+24,sy+36,sx+18,sy+40); line(sx+18,sy+40,sx+12,sy+42); line(sx+12,sy+42,sx+5,sy+43); line(sx+5,sy+43,sx+8,sy+38); line(sx+8,sy+38,sx+10,sy+31); line(sx+10,sy+31,sx+11,sy+23); line(sx+11,sy+23,sx+10,sy+15); line(sx+10,sy+15,sx+8,sy+8); line(sx+8,sy+8,sx+5,sy+3); break; case 4: line(sx+1,sy+10,sx+8,sy+10);

(66)

line(sx+1,sy+36,sx+8,sy+36); line(sx+42,sy+23,sx+60,sy+23); line(sx+5,sy+3,sx+12,sy+4); line(sx+12,sy+4,sx+18,sy+6); line(sx+18,sy+6,sx+24,sy+10); line(sx+24,sy+10,sx+28,sy+14); line(sx+28,sy+14,sx+32,sy+19); line(sx+32,sy+19,sx+35,sy+22); line(sx+35,sy+22,sx+32,sy+27); line(sx+32,sy+27,sx+28,sy+32); line(sx+28,sy+32,sx+24,sy+36); line(sx+24,sy+36,sx+18,sy+40); line(sx+18,sy+40,sx+12,sy+42); line(sx+12,sy+42,sx+5,sy+43); line(sx+5,sy+43,sx+8,sy+38); line(sx+8,sy+38,sx+10,sy+31); line(sx+10,sy+31,sx+11,sy+23); line(sx+11,sy+23,sx+10,sy+15); line(sx+10,sy+15,sx+8,sy+8); line(sx+8,sy+8,sx+5,sy+3); outtextxy(sx+35,sy+19,"o"); break; } //draw line line(71,23,100,33); line(71,68,100,59); line(71,113,100,123); line(71,158,100,149); line(71,203,100,213); line(71,248,100,239); line(71,293,100,303);

(67)

line(71,338,100,329); line(161,46,190,78); line(161,136,190,104); line(161,226,190,258); line(161,316,190,284); line(251,271,280,303); line(11,396,280,329); line(251,91,370,190); line(341,316,370,216); line(431,203,440,203); outtextxy(0,6,"A"); outtextxy(0,32,"B"); outtextxy(0,51,"C"); outtextxy(0,77,"D"); outtextxy(0,96,"E"); outtextxy(0,122,"F"); outtextxy(0,141,"G"); outtextxy(0,167,"H"); outtextxy(0,186,"C"); outtextxy(0,212,"D"); outtextxy(0,231,"A"); outtextxy(0,257,"B"); outtextxy(0,276,"G"); outtextxy(0,302,"H"); outtextxy(0,321,"E"); outtextxy(0,347,"F"); outtextxy(0,392,"A"); outtextxy(441,199,"OUT"); } } average=totaltime/time;

(68)

printf("\nWe can get the best situation in %f time in average !",average); getch();

getch();

closegraph(); }

參考文獻

相關文件

機器人、餐飲服務、花藝、雲端運算、網路安全、3D 數位遊戲藝術、旅 館接待、行動應用開發、展示設計、數位建設

設計了正立方體框架的組合,在計算方塊個數與框架的差異性可透過等差數列的概念作 結合;而作品「腳踏實地」

配合小學數學科課程的推行,與參與的學校 協作研究及發展 推動 STEM

第四章: 中學報稅的設計 第五章: 初中諒程主建議 第六章: 高中諒我建議,..

高等電腦輔助設計與製造 (Advanced Computer Aided Design and Manufacturing).

微算機原理與應用 第6

應用閉合電路原理解決生活問題 (常識) 應用設計循環進行設計及改良作品 (常識) 以小數加法及乘法計算成本 (數學).

配合小學數學科課程的推行,與參與的學校 協作研究及發展 推動 STEM