《ACM程式設計與演算法》課程報告

2021-09-23 06:37:50 字數 2121 閱讀 7764

2010~2011學年第2學期《acm程式設計與演算法》課程報告

班級: 電氣0903 學號: 20095690 姓名: 劉星

格雷碼問題解題報告

一、研究報告(80分)

1. 題目描述(10分)

在數字系統中只能識別0和1,各種資料要轉換為二進位制**才能進行處理,格雷碼是一種無權碼,採用絕對編碼方式,典型格雷碼是一種具有反射特性和迴圈特性的單步自補碼,它的迴圈、單步特性消除了隨機取數時出現重大誤差的可能,它的反射、自補特性使得求反非常方便。格雷碼屬於可靠性編碼,是一種錯誤最小化的編碼方式,因為,自然二進位製碼可以直接由數/模轉換器轉換成模擬訊號,但某些情況,例如從十進位制的3轉換成4時二進位製碼的每一位都要變,使數位電路產生很大的尖峰電流脈衝。而格雷碼則沒有這一缺點,它是一種數字排序系統,其中的所有相鄰整數在它們的數字表示中只有乙個數字不同。

它在任意兩個相鄰的數之間轉換時,只有乙個數字發生變化。它大大地減少了由乙個狀態到下乙個狀態時邏輯的混淆。另外由於最大數與最小數之間也僅乙個數不同,故通常又叫雷反射碼或迴圈碼。

下表為幾種自然二進位製碼與格雷碼的對照表:

1、自然二進位製碼轉換成二進位制格雷碼.自然二進位製碼轉換成二進位制格雷碼,其法則是保留自然二進位製碼的最高位作為格雷碼的最高位,而次高位格雷碼為二進位製碼的高位與次高位相異或,而格雷碼其餘各位與次高位的求法相類似。

2、二進位制格雷碼轉換成自然二進位製碼。二進位制格雷碼轉換成自然二進位製碼,其法則是保留格雷碼的最高位作為自然二進位製碼的最高位,而次高位自然二進位製碼為高位自然二進位製碼與次高位格雷碼相異或,而自然二進位製碼的其餘各位與次高位自然二進位製碼的求法相類似。213

111011

2. 解題思路(20分)

如果按順序將格雷碼每四個分為一組,對於格雷碼的最後一位,具有摺疊反射特性,即:最後一位的順序為 01 10,01 10,.....如果按順序將格雷碼每8個分為一組,則其倒數第2為的順序為0011,1100,0011,1100.....

同樣,倒數第3為的順序為0001111,1111000.這樣就可以得出規律,用while迴圈來解決了。

3. 程式實現(20分)

#include

#include

int main()

k = 0;

while (n > 0)

printf("%d", b[k-1]);

for (i=k-2; i>=0; --i)

printf("\n");

}return 0;

}4. 程式測試及分析(10分)

十進位制格雷碼

1 02 1

310101111

-11-201

測量實際消耗的時間:1194

測量實際消耗空間:8

5. 總結(20分)

總結解題思路及相關內容,如程式設計中的關鍵問題、程式改進等。

對解acm題一般是先建模,找出數學模型,對於格雷碼這道題,就是找出十進位制與格雷碼間的規律,然後就用迴圈來解決問題了。

例如格雷碼:1010 要將它變為自然二進位制:

0 與第四位 1 進行異或結果為 1

上面結果1與第三位0異或結果為 1

上面結果1與第二位1異或結果為 0

上面結果0與第一位0異或結果為 0

因此最終結果為:1100 這就是二進位製碼即十進位制 12 。

二、課程學習總結(20分)

選擇這門課是因為在專業方面,感覺到不小的差距和壓力.尤其在基礎語言c上,入門語言沒怎麼學好,更談不上以後的飛翔.所以選擇了與c語言相關的這個acm程式設計課程,

聽了那麼多的課和學了點東西,覺得這acm比賽常用的c語言和數學的邏輯有很大的關聯,c最重要的是演算法,講究邏輯運算,使人的思維變得靈活性和邏輯性,這也是acm比賽的初衷吧,當然真正學好,那收益不只這一點點.通過8周的學習,雖然時間有點短,但對acm大賽有了一定的了解,對專業的影響真的很大.我們學的主要是c,以前被裡面的類,物件,父類,子類…繞來繞去,搞的頭都暈了.

現在看以前的書,覺得也就不過如此.還有這個學期一起的資料結構,開始上的時候,就覺得這跟演算法有很大相關,在acm上課的時候能學到相關的知識.資料結構的演算法剛接觸,這有點難度,還用c寫的。

這門課程共上了三次實驗課,16個學時的學習,很倉促,雖然沒學到好多什麼演算法的東西,但對解題思路上、建模上還是學到一點,雖然我不是學計算機的,但是多學一點還是沒有什麼壞處的。

演算法與程式設計實習報告

報告班級 姓名 李明 學號 12345678 第一題一 題目 一 題目 統計字母的使用頻率 二 目的與要求 1 目的 通過編寫程式統計字母的使用頻率,培養學生綜合利用c語言進行程式設計的能力,熟悉字串的操作方法,加強函式的運用,提高軟體系統分析能力和程式文件建立 歸納總結的能力。2 基本要求 1 要...

演算法與程式設計實習報告

第一題 統計字母的使用頻率 一 題目 統計字母的使用頻率 目的與要求 1.目的 通過編寫程式統計字母的使用頻率,培養學生綜合利用c語言進行程式設計的能力,熟悉字串的操作方法,加強函式的運用,提高軟體系統分析能力和程式文件建立 歸納總結的能力。2.基本要求 1 要求用c語言程式設計,在visual c...

演算法與程式設計實習報告

題1 統計字母的使用頻率 一 題目 統計字母的使用頻率 目的與要求 1.目的 通過編寫程式統計字母的使用頻率,培養學生綜合利用c語言進行程式設計的能力,熟悉字串的操作方法,加強函式的運用,提高軟體系統分析能力和程式文件建立 歸納總結的能力。2.基本要求 1 要求用c語言程式設計,在visual c ...