数字逻辑电路设计及应用(格雷码).doc_第1页
数字逻辑电路设计及应用(格雷码).doc_第2页
数字逻辑电路设计及应用(格雷码).doc_第3页
数字逻辑电路设计及应用(格雷码).doc_第4页
数字逻辑电路设计及应用(格雷码).doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字逻辑电路设计及应用C程序设计报告(2)问题:设计一个C程序产生110阶的任意格雷码。思路:在课上学习到了两种格雷码的产生方法:1. 由对应的二进制码转换。其规则是:从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变(相当于左边是0)。1这种办法并不设用于产生任意阶的格雷码,因为在这个问题中,并没有待转换的普通二进制码。2. 镜像法,其规则是:任意阶都是上一阶格雷码与其镜像构成两个子矩阵,然后再在第一列前一半行加上0,后一半行加上1。而1阶格雷码毫无疑问是0,1,所以整个推导过程类似于数学上的归纳法。这种办法可以产生任意阶的格雷码,其算法思路是,要求规定n(0n11)阶的格雷码,先求1阶的格雷码,再求2阶,依此类推。为了避免建立动态数组的麻烦,可以直接定义一个2*210大小的矩阵(10阶格雷码的大小),在程序一开始就建立,之后只需提取出相应的子矩阵就是所需的格雷码。然而这种办法在计算空间上消耗太大(需要2*210的连续空间),并不是输出格雷码的最好办法。在课上提到,格雷码最重要的一个性质是每一次都与上一个格雷码相比只改变一位。所以,我想到只要定义一个初始格雷码(方便起见全定义为0),然后每次只需要改变其中一位,共改变2n次就可以达到输出n阶格雷码的目的。现在需要做的就是设计一种改变位的规则来使格雷码的产生不重不漏。我在网上搜到如下信息:由於Gray Code相鄰兩數間只改變一個位元,所以可觀察Gray Code從1變0或從0變1時的位置。假設有4位元的Gray Code如下:0000 0001 0011 0010 0110 0111 0101 01001100 1101 1111 1110 1010 1011 1001 1000觀察奇數項的下個數變化時,發現無論是第幾個奇數項Gray Code,下個數永遠只改變最右邊的位元。如果是1就改為0,如果是0就改為1。例如第一項0000變為0001,第三項0011變為0010,第五項0110變為0111,依此類推。觀察偶數項的下個數變化時,發現所改變的位元,是由右邊算來首個1的左邊位元。例如第二項0001下個數變為0011,第四項0010下個變為0110,第六項0111變為0101,依此類推。这样要产生n阶的格雷码,只需建立一个长度为10的数组(10阶格雷码的长度),每次只改变其中一位,共改变2n次即可。相比镜像法,在计算空间和算法设计上都要简单许多。流程:程序:/*/* this is a program to generate a grey code with in 10 orders/* Huang Bohao/* 2013.3.9*/#include #include void GenerateGrey(int grey10, int n); /产生所需阶格雷码的函数void PrintNumberStr(int grey10, int n); /输出指定长度的数组void main() int n,grey10; /需要的格雷码的阶数或二进制码 printf(please enter the order of the grey code you wantn); scanf(%d,&n); GenerateGrey(grey, n);/*/* function name: GenerateGrey/* input parameter: int grey, int n/* output parameter: void*/void GenerateGrey(int grey10, int n) int i,m; m = (int)pow(2, n); for(i = 0; i n; i+ ) greyi = 0; PrintNumberStr(grey, n); for(i = 2; i = 0; j- ) if(greyj = 1)break; greyj-1 = (1-greyj-1); PrintNumberStr(grey,n); /*/* function name: PrintNumberStr/* input parameter: int grey, int n/* output parameter: void*/void PrintNumberStr(int grey10, int n) int k; for(k = 0; k n; k+) printf(%d,greyk); printf(n);运行结果:产生3阶格雷码产生8阶格雷码:后面的太长了打不下了1:来自百度百科: /view/358724.htm2:来自网友caterpillar的个人网

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论