欢迎来到一句话经典语录网
我要投稿 投诉建议
当前位置:一句话经典语录 > 心得体会 > 编译原理心得体会总结

编译原理心得体会总结

时间:2015-04-07 17:37

求四路智能竞赛抢答器的设计电路

简易抢答器1、设计目的抢答器方案很多,有用专用芯片设计的、有用复杂可编程逻辑的、有用单片机设计制作的、也有用可编程控制器完成的,但由于专用电路芯片通常是厂家特殊设计开发的,一般不易买到或价格较高,用其它方式设计的需要设计者具有相应的理论知识,并要通过仿真器、应用软件、计算机等辅助设备才能验证完成,不利于设计者的设计和制作。

而有些实际竞赛的场合,只要满足显示抢答有效和有效组别即可,故我打算不用所给的参考电路,而用一片(8位的数据锁存器)来实现此简易抢答器的功能。

这是一个显示方式简单、价格低廉、经济实用的抢答器。

在要求不高的场合,能完全符合需要。

2、设计要求(1)、抢答器分为8组,每组序号分别为1、2、3、4、5、6、7、8,按键SB0-SB7分别对应8组,抢答者按动本组按键,组号立即在上显示,同时封锁其他组的按键信号。

(2)、系统外设清除键,按动清除键,自动清零灭灯。

(3)、数字抢答器定时为30s,通过控制键启动抢答器后,要求30s定时器开始工作,点亮。

(4)、抢答者在30s内进行抢答,则抢答有效,如果30s定时到时,无抢答者,则本次抢答无效,系统短暂报警。

(5)、抢答者违规显示。

3、设计原理3.1 抢答器总体原理框图 如图1所示为总体原理框图。

其工作原理为:接通电源后,主持人将开关FW拨到清零状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置;开始状态,宣布开始抢答器工作。

定时器开始倒计时。

选手在规定的30s定时时间内抢答时,抢答器完成:优先判断、编号显示、扬声器提示,倒计时显示。

当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。

如果再次抢答必须由主持人再次操作清除和开始状态开关。

图1 抢答器原理框图3.2 单元3.2.1 抢答器电路设计电路如图2所示。

电路选用1片8位数据锁存器,8只组别按键开关KEY_1—KEY_8,8组别抢答有效的状态显示发光二极管LED_1—LED8,一个复位按键FW等组成。

该电路主要完成两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号,对应的LED亮;二是禁止其他选手按键,其按键操作无效。

图2 抢答器电路图表1为的逻辑状态表。

图3为MOTOROLA公司的74LS373的封装形式。

表1 74LS373逻辑状态表图3 74LS373的封装形式工作过程:该8路竞赛抢答器,每组受控于一个抢答按键开关,高电平表示抢答有效;设置主持人控制FW用于控制整个系统清0和抢答有效开始控制的启动。

每按下一次复位键FW时,使8D锁存器的控制端G为高电平,若组别按键开关KEY_1—KEY_8中任何一个都没按下,即对应8D锁存器的输入端D均为低电平,则此时8个输出端均为低电平,对应的发光二极管均不点亮,表示抢答者正在准备状态;按下复位键FW时,8D锁存器的控制端G为高电平,若组别按键开关KEY_1—KEY_8中存在一个或几个处于按下状态,即与之对应的8D锁存器的输入端D为高电平,此时与之对应的8D锁存器的输出端立即为高电平,对应的发光二极管被点亮,表示抢答者违规了;只有每按下一次复位键FW,并在复位键FW抬起后,抢答才是有效的。

系统具有第一抢答信号鉴别何锁存的功能。

在主持人将系统复位并使抢答有效开始后,第一抢答者按下抢答按钮,对应的输入引脚接高电平1。

或门电路使三极管VT1基极得到高电位,将8D锁存器的输入信号锁存在了输入端,输入端的信号变化将不再影响输出端。

对应点亮的发光二极管指示出第一抢答者的组别。

在显示有效的组别的同时,也可同时采用蜂鸣器警示。

3.2.2 30s定时电路在30秒内,首先按动序号开关的组号立即被锁存到上,与此同时,8D锁存器禁止工作,封锁其他组的按键信号。

若定时时间30秒已到而无抢答者,锁定编码器,抢答按键信号无效,同时定时器输出信号,是报警电路发出短暂报警信号,说明本次抢答无效,发光二极管熄灭。

30秒定时电路采用图4所示电路,图中当主持人按下开关时,为30秒计数器送入置数信号,计数器完成置数。

当释放开关后,计数器进行递减计数,当计数器为零时,封锁秒脉冲,计数器停止计数,并且封锁74LS373 是按键信号不能再进入,使抢答无效。

图4 定时电路 我又输出了两路BO信号,分别为两个74LS192的借位脉冲信号。

通过仿真来观察进位脉冲,以便于外围电路的扩展。

30秒定时电路使用的元件:74LS192、与非门、开关。

如下所示:表2为74LS192逻辑状态表(功能表)。

74LS192是十进制同步加法\\\/减法计数器。

表2 74LS192逻辑状态表3.2.3 秒脉冲产生电路秒需要产生一定精度和幅度的矩形波信号。

实现这样矩形波的方法很多,可以由非门和石英振荡器构成,可以由单稳态电路构成,可以由施密特触发器构成,也可以由构成等等。

不同的的电路对矩形波频率的精度要求不同,由此可以选用不同电路结构的。

本设计中由于秒脉冲信号作为计时器的计时脉冲,其精度直接影响计数器的精度,因此要求秒脉冲信号有比较高的精度。

一般情况下,要作出一个精度比较高、频率很低的振荡器有一定的难度,工程上解决这一问题的办法是先做一个频率比较高的矩形波振荡器,然后将其输出信号通过计数器进行多极分频,就可以得到频率比较低、精度比较高的,其精度取决于振荡器的精度和分频级数。

按照这样的思路设计出图5所示的秒。

图5 秒脉冲信号发生器3.2.4 报警电路报警电路采用如图6所示电路,由和三极管构成。

其中555构成,振荡频率fo=1。

43\\\/[(RI+2R2)C],其输出信号经三极管推动扬声器。

PR为控制信号,当PR为高电平时,工作,反之,电路停振。

图6 报警电路4、 设计步骤4.1用Quartus II v7.1软件仿真4.1.1抢答器部分仿真用Quartus II v7.1先创建一个工程文件,在工程文件下建立一个原理图文件,取名为qiang.bdf。

画出抢答器部分原理图如图7所示。

将电阻、三极管等模拟元器件按其逻辑关系转换为逻辑门电路在Quartus II中实现。

图7 抢答器原理图从Processing\\\/Start Compilation进行编译,如图8所示编译成功。

编译完成显示30 warmings,30个警告可以忽略,继续下一步骤。

图8 抢答器原理图编译成功通过原理图编译后,建立波形文件,装载入输入\\\/输出信息并设置输入信号,对各INPUT输入端输入相应的信号,进行仿真Processing\\\/Start Simulation,如图9所示抢答器波形图仿真通过。

图9 抢答器波形图仿真成功抢答仿真结果如图10所示:图10 抢答器功能仿真【说明】仿真抢答过程,假设由任一组别先按下抢答键,其余几组分别在之后任一时刻按下。

KEY_1在第一时刻输入高电平“1”表示1组先按下,其余各组分别在之后抢答。

由仿真结果可以看出LED_1一直保持高电平“1”不变,表示1组别对应的LED灯点亮,获得抢答权。

由此可见,此电路实现了抢答的基本功能。

4.1.2 30s定时电路部分仿真用Quartus II v7.1软件以同样的方法,画出30s定时电路如图11所示:图11 30s定时电路同样,经过原理图编译、仿真,如图12所示:图12 定时电路编译 图13 定时电路仿真定时电路仿真结果如下图14所示:图14 定时电路仿真【说明】此电路主要芯片为2片74LS192,是十进制同步加法\\\/减法计数器,所以需要同步时序脉冲的控制,所以输入为1Hz的秒脉冲,以及主持人控制开关FW输入为高电平“1”,使定时电路计数有效,观察输出信号H、L信号(已经大包),分别为高位的4位输出、低位的4位输出,打包成16进制输出,我们可以从仿真电路图中直接看出结果:30-29-28-27-26………………………………01、00并且高位借位信号BO1从高电平“1” 低电平“0”,实现了30s定时的功能,输出的借位脉冲可以给报警电路,使蜂鸣器报警。

4.2用Multisim 10软件仿真图15 抢答器原理图仿真从仿真图中可以直观地看出当2号组别键按下时,对应的2号LED发光,再当主持人按下复位键J1时,LED灯熄灭,当复位键弹起时,即可以开始抢答。

4.3 用Protel 99se画抢答器部分原理图如图16所示为用Protel 99se软件画出了抢答器部分电路的原理图。

图17为抢答器电路板图16 Protel 99se原理图图16 抢答器电路板5、设计总结此简易抢答器的设计通过Quartus II和Multisim 10软件的仿真,证实了其在实际中的运用的正确性和可靠性。

完全可以实现任务的要求。

并且还有一个独特的功能,就是能够识别出违规抢答的组别,增加了其实用性。

6、心得体会通过这次课程设计,我学到了很多书本上没有的实际的知识,熟悉了一些元器件、芯片在工程中的灵活运用。

在设计及制作过程中,遇到过一些困难。

通过上网和去图书馆查资料解决之。

并且在网上搜集到了一些元器件及电路的相关资料对以后的学习及工作是很有帮助的。

最重要的是我学会了自学的方法,这将使我今后离开学校,踏上社会是相当有帮助的。

其次是进一步熟练地掌握和运用了相关的专业软件,提高了我们自身的专业素质。

这也是我们工科学生所必须掌握的基础技能。

同时也深深的体会到,我们书本上所学的知识和实际的东西相差甚远,我们所不懂的知识还有很多,因此今后我们要更加注重实际方面的锻炼和运用。

jsp跟.net各自的优越性,对于电子商务jsp有什么优越性,毕业论文要用,急啊.

当然可以,这个不分年龄的给你个C语言学习的网站吧百度百科,了解C语言(这个要注册)*(这个是学习教程)(视频网站)(C语言学习心得)一些C语言的教材1、《计算机组成原理》(熟悉)2、《数据结构》(掌握)3、《操作系统》(了解->熟悉)4、《The C language》(掌握)5、《编译原理》(了解原理)6、《汇编语言》(了解)7、《计算机网络》(了解)8、《软件工程》(了解)9、《关系数据库》(熟悉)10、《The C++Languege 》(掌握)11、《面向对象设计》(掌握;结合C++学习)C Primer Plus(第五版)中文版《程序员》推荐C++ 图书三人谈 主持人:熊节(透明),《程序员》杂志编辑,C-View成员 嘉 宾:孟岩(梦魇),联想公司掌上设备事业部应用开发处任职,C-View成员。

与侯捷先生合译《C++ Standard Library》一书 金尹(恶魔),上海天宇公司CTO,在《程序员》连载有“自由与繁荣的国度”系列文章 透明:“学C++用哪本书入门”,这是被问得最多的一个问题。

但是哪一本书是最好的入门书

似乎很难找到答案。

《C++ Primer》太厚,《Effective C++》对读者要求比较高,《Essential C++》又常常被批评为“太浅”。

其实说穿了:no silver bullet。

想从一本书学会C++,那是不可能的。

有朋友问我如何学C++,我会建议他先去找本数据结构书,把里面的习题全部用C++做一遍,然后再去看《Effective C++》。

myan经常说“要在学习初期养成好习惯”,我对此颇不以为然。

个人认为,《Essential C++》适合作教材,《C++ Primer》适合作参考书,《Effective C++》适合作课外读物。

恶魔:很后悔当初买了《C++ Primer》。

因为从我个人角度来看,它的功能效用基本是和《The C++ Programming Language》重合。

当然对于入门来说,它还是很不错的。

但是《C++ Primer》太厚,一来导致看书极其不方便,二来系统学习需要花比较长的时间。

对于目前这个越来越快餐化的时代来说,的确有很多不适合的地方,不过可以作为初学者的参考书。

现在我以一块K3 CPU的代价把它借给了别人,希望我那位同事能够从中得到一些益处。

如果已经具备了C基础,我建议看国内的书,例如钱能的《 C++大学教程(第二版) 》。

(如果没有C的基础还是看谭浩强的C语言)。

这本书对C讲得还算比较清晰,有很多习题值得一做,特别是最后的struct和union两个部分。

其中的一些算法比较拖沓和繁琐(比如树和链表的遍历算法),读者可以尝试修改这些例子,作为最后对C语言的一些总结测试。

梦魇:这个问题让我想起四五年前的情形。

今天对于C++有一点认识的人,多半是从那几年就开始学C++了。

那时根本没有品牌观念。

从书店里找一本C++书,如果看着还算明白,就买下来。

我记得那时候宛延闿、张国锋、麦中凡教授的书都受到很高的赞誉。

我个人最早的一本C++书是Greg Perry的一本书,今天想起来,其实是一本打着C++旗号的C语言教程。

对我作用最大的一本书是国防科技出版社出版的一本书,书名记不得了,作者叫斯蒂芬·布莱哈。

透明:还记得以前曾批评过一本C++书,是北航出的,整本书就没有出现过class关键字。

那本书,说穿了其实只是介绍了C语言和iostream库的用法,根本不能算C++。

而当时我常常推荐的一本书是电子科技大学张松梅老师的C++教程。

那本书,直到今天来看也没有太大的问题,唯一的缺憾就是由于年代久远,许多东西已经过时了。

而对于一本技术书籍来说,“过时”是最不可接受的。

总体来说,那时使用C++的人真是在“盲人摸象”。

不过这也有好处,就是对C++的很多细节能搞清楚,以后看到经典好书时比较容易理解;当然坏处就是概念不清,甚至都不知道C++和Visual C++、Borland C++到底有什么不一样。

梦魇:整个90年代,其实大部分人对于C++的认识都似是而非。

一开始是等同于Borland C++,后来是等同于Visual C++和MFC。

所以一般来说,打着BC和VC旗号的书卖得很好,人们觉得这就是C++。

而我比较幸运,布莱哈的那本书虽然从现在的眼光来看谈不上高超,但基本路子是对的。

可能是因为原书是给UNIX程序员的培训教材,所以没有让我一开始就形成“C++ == VC++”的认识。

其实一直到1996年,我们那里搞计算机的都是唯Borland C++马首是瞻的,到了VC 4.0出来,一下子格局全变了。

1997年VC5推出之后,书店里MFC书铺天盖地,学MFC的人,头抬得都比别人高一些。

不过现在看来,那时候大部分的MFC书都是三流货色。

我曾经有一段时间认为,那一批程序员中间有不少被误导了。

根本原因就是相对的封闭。

透明:我觉得一本书的价值有两方面:第一,教给你实用的技术;第二,促使你去思考。

对于一本介绍VC(或者说MFC)使用方法的书,我根本不希望它能促使我有什么思考,所以我就一定要求它在技术上精益求精完美无瑕。

我刚开始用VC的时候,买的第一本书就是潘爱民老师翻译的《VC技术内幕》(第四版),没有受到那些“三流货色”的误导,应该说是很幸运的。

梦魇:1999年机械工业出版社开始出版“计算机科学丛书”,其中的《Thinking in C++》第一版受到了广泛的欢迎。

其实我一直不认为这本书很出色,虽然拿过一次大奖。

然而我们都得承认,这本书在C++书籍领域里第一次建立了品牌观念,很多初学者开始知道,不是随便买哪一本都一样的。

再往后就是2000年的《 深入浅出MFC(第二版) 》第二版,以及侯先生在《程序员》上发表的那一篇《C++\\\/OOP大系》,加上整个大环境的变化,品牌观念深入人心,C++书籍市场终于开始逐渐与世界同步。

回想往事,我的感觉是,那个需要战战兢兢选择入门书的时代已经过去,今天的C++初学者,大可以放心地买口碑好、自己读起来思路顺畅的书,入门不再是太大的问题。

还有一些程序员已经学了几年C++,但看到今天出版的一些新书,感觉比较陌生,这也不是什么问题。

侯先生经常说“凡走过必留下足迹”,所谓“走弯路”,未必不是一件好事。

至于具体的推荐表,就不好一概而论了。

总之在我的印象里,《Essential C++》、《C++ Primer》、钱能教授的C++教程,都不错。

甚至有人一上来就看Bjarne Stroustrup的《The C++ Programming Language》,只要他喜欢,也没什么不可以。

透明:我同意你的观点。

不管怎么说,编程是门实践性非常强的学问。

要想对C++对象模型有深入的了解,最好的办法就是写一串程序去看结果;要想学会OOP,也只能从项目中学。

对于初学者,最好的学习方法就是不停地写程序,写真正有用的程序,写到有问题的时候就去查书,于是自然就会知道哪本书好哪本书不好。

不过我们的教育制度能不能让大学里的学生们有这样的学习机会,我表示怀疑。

以我的经验,学C++有两个门槛:入门和使用。

完全看不懂C++,这是一个门槛,但是只要有一本合适的入门书,很快就能跨过。

要想真正用上C++,却不是件很容易的事情。

尤其对于学生来说,接触到的东西多是“玩具”,很难有实战的机会。

所以经常看见有人问“C++到底能做什么”,这是C++学习中一个比较麻烦的问题。

我们都是做了相当长时间的C++程序之后才看到一些真正经典的书,也正是因为走了相当长的弯路之后才知道这些书的经典之所在。

所谓弯路,我想也是一种必须的积累。

就算一开始就看《Essential C++》和《C++ Primer》,没有两三年的时间恐怕还是难有所得。

恶魔:有两句十分有道理的话,一是我大学的C语言老师说的“写程序不如说是抄程序”,另一句是一网友说的“好的设计来自借鉴,天才的设计来自剽窃”。

对于我这个理性批判主义者来说,这两句话的确不太适合。

但是无论从哪个角度来讲,对于初学者来说,剽窃大师的作品是通向成功的最快捷径。

我个人认为,对于C++的初学者来说,首先要确定自己专业领域内主要使用的特性的方向。

因为C++的特性如此众多,初学者想贪多基本是不可能成功的。

C++的编程范式基本可以分为ADT+PP、GP和OO三个方向。

对于ADT+PP范式来说,初学者的主要问题不是学习C++,而是学习C的使用。

对于这样的初学者,国内的几本书还是写得比较清楚,符合中国人的习惯,比如谭浩强的《C语言教程》、钱能的《C++语言大学教程》。

这两本书我首推第一本,因为这一本我潜心研究了一年,这本书当中很多程序是可以剽窃的,而且可以对这些程序进行加工和提升。

比如结构这一章中,它所给出的用struct来实现链表、二叉树的算法是相当蹩脚的。

学习ADT+PP的初学者将这本书揣摩透以后可以尝试修改这两个程序。

另外这本书的第二版稍微涉及了一些关于“类”的内容。

学习ADT+PP的初学者,可以不被OO中的一些专有特性扰乱自己的思路,对于类层次扁平、无继承、无多态的程序编写是有很大好处的。

透明:你好象比较推崇国内教授写的书。

现在社会上有种不好的风气:一捧就捧上天,一贬就贬下地。

就好象对待谭教授的书,前几年是奉为经典,这几年又有很多人使劲批评。

学C++更是有点“崇洋媚外”,总是觉得初学就应该看《Essential C++》。

我看这种观点也是片面的。

恶魔:当然《Essential C++》也值得看看。

但是我个人觉得这本书没有谭浩强的《C语言教程》来得好。

主要原因是:第一,C++的所有特性都点到了,但是不深,看了以后会三心二意没有方向;第二,可以抄袭借鉴的例子太少。

《C语言教程》中有很多有趣的问题,比如猴子吃桃、汉诺塔等等,这些例子对于刚刚涉及C\\\/C++语言编程的人来说是学习编程很好的例子。

《Essential C++》只能是前两本书看透以后,作为学习C++特性的一个过渡性的书籍。

让读者真正领略到什么是C++的编程、和C编程的不同点在哪里。

透明:我发现一个很有趣的现象:初学者往往喜欢问“哪本书比较好”,这让我很是不解。

这有点像一个刚学打篮球的人问“王治郅和科比谁比较厉害”。

当然科比更厉害一些。

但如果你是想学打篮球,这两个人都非常非常有资格教你,你跟谁学都能学得很强——关键不是在于你选哪个老师,而是在于你自己用多少功夫去学。

透明:回到原来话题。

学会了C++的语法,能看懂C++代码之后,必须有些书来指导进阶(或者叫指点迷津)。

我觉得《设计模式》很好,能够让读者看到一些精妙的用法。

不过正如我经常说的,模式带来的麻烦和好处一样多,甚至麻烦还要更多。

而且,C++本身的问题使得在C++中使用GoF模式愈加麻烦。

梦魇:《Design Patterns》这本书绝对是不可以没有的,而且中英文版都不可少。

最初我看中文版,说实话看不懂,但是也不觉得人家翻译得不好,所以就想,大概是原文就很难懂,加上自己水平有限。

于是总是想着再找几本patterns的书来看。

后来找到几本书,口碑还不错,不过水平高下,一比就出来了,还是那本《Design Patterns》最经典,最耐看。

英文版出来之后,两个版本对照看,明白多了。

现在觉得,其实就设计模式来讲,把这本看明白了就很不错了,不用再花费很多心思找其他的书。

我现在的包里始终夹着这本书,随身携带,有备无患。

至于说设计模式的副作用,和可能带来的弊端,我的体会也挺多。

不过是这样,我们想一想,究竟什么情况下设计模式可以用得很好呢

一种是有经验丰富的人引导,比如要是Robert Martin带队,你在某个地方用错了设计模式,他就会指出来,说这里不对,将来会产生什么样的弊端。

对于他来说,丰富的实践经验足以支持他进行“预测型”设计。

但是大部分人没这个能力,因此我们只好走第二条路和第三条路,就是“试探型”设计和“重构型”设计。

遇到一个问题,你觉得用某种模式挺合适的,就大胆地用了,成功是积累经验,发现不好,出了问题了,只好改回来,那也是积累教训。

这叫做“试探型”。

至于重构,应该算是最有组织、成功率最高的工程化方法。

先把问题“quick and dirty”地解决了,所有的暗礁都暴露出来,然后再根据实际情况采用合适的模式优化设计。

现在XP和UP都高度重视refactory,UP在Elaboration和Construction阶段都鼓励抽出专门的iterations进行重构。

所以说如果组织快速的软件开发,当然比较倾向于这条路——打成功率嘛。

透明:讲到重构,我顺便说说《Refactoring》这本书的影响。

从工程本身的角度来说,你所谓的“重构型设计”是没有什么问题的。

但中国的开发者(也包括我在内)往往比较冲动,比较容易相信银弹的存在。

曾经有那么一段时间,我在Java中尝试过了重构的方法之后,又拿到C++中去尝试。

结果发现,在Java中速度非常快的重构过程,到C++中就被减慢了。

究其原因,就是因为C++和Java的约束条件不同。

拿着Java中成功的案例直接套C++,不失败才怪。

所以,我必须说:《Refactoring》这本书很有价值。

但对于C++程序员来说,它的价值是让你思考,思考这种方法的可行性。

如果一个C++程序员没有打算迁移到Java,那么我必须告诉他:《Refactoring》这本书不是让你照着它用的,甚至不是让你去相信它的。

对于C++程序员,《Refactoring》全书可以放心相信的只有第13章,其他的部分,都必须非常谨慎地对待。

梦魇:我还要就“试探型”的方法多说两句,我觉得对于个人发展来讲,“试探”也是必不可少的,撞墙不可怕,高水平的人不都是撞出来的吗

你失败了一次,就知道这个模式有什么潜在的问题,下次再用,就会多看几步,像下棋似的。

撞的多了,路数就出来了。

我不知道你们是否有这个感觉:用错了模式,吃了亏,再回过头去翻翻《Design Patterns》,看到人家早就指出来这个问题,不过就是那么几句话,原来看上去干巴巴的,现在觉得句句都讲到心坎上,GoF的形象马上就高大起来,还带着光环,感觉是既兴奋又懊悔。

透明:现在回头来看,我更欣赏myan推荐给我的《Designing Object-Oriented C++ Applications Using Booch Method》。

这本书能够帮助C++程序员理清思路培养习惯,可惜国内没有引进。

相比后来商业味浓厚的UML系列书籍,我觉得这本书对于面向对象的阐释精辟独到,至今未有能出其右者。

梦魇:刚才我们两人都说到Robert Martin,他可是我的榜样。

那本1995年的《Designing Object Oriented C++ Application》,我觉得是每一个C++软件工程师都应该反复研读的书。

可惜不仅国内没有引进,在国外的名气也不大。

如果你觉得面向对象的那些道理你好像都明白,可就是一遇到实际问题就使不上劲,那这本书就是你的最佳导师。

提到理清思路,还有一本书不得不提,就是Andrew Koenig的《Ruminations On C++》。

每个人都应该问自己,我学了这么多年的C++,究竟什么是C++最基本的设计理念

遇到问题我第一个直觉是什么

第一个试探型的解决方案应该具有那些特点

如果你不能给出明确的答案,就应该认真地去读这本书,读完了你就有了“主心骨”。

透明:插一句话,谈谈“推荐书”的问题。

入门书基本上是放之四海而皆准的,所以推荐的意义也不大。

而入门后的发展方向,每个人不同,这个时候就需要“高人”的指点。

举个例子:我学C++的时候,myan还不认识我,所以也没有给我推荐书,我还是学过来了,所以即使你当时向我推荐了《Essential C++》或者《C++ Primer》,我也不会太感谢你;但在我认真研究OO的时候,你推荐Robert Martin那本书给我,对我帮助就特别大,而且我从别的地方也很难找到类似的推荐,所以我就很感谢你。

一个程序员,必须有framework的意识,要学会用framework,还要主动去分析framework(在这方面,《Design Patterns》能有一定的帮助)。

但是,真正高质量、成气候的framework的书恐怕也就只有针对MFC的。

从这个角度来说,MFC纵有千般不是,C++程序员都非常有必要先去用它、熟悉它、研究它,甚至借助《深入浅出MFC》这样的书来剖析它。

不然,很难有framework的意识和感觉。

当然,另一个framework也很好,那就是STL。

不管用不用MFC、STL,对这两个东西的掌握和理解都是极有帮助的。

最近我又在看《深入浅出MFC》,虽然已经不用MFC编程了,但帮助是一定有的。

梦魇:MFC和STL方面,我还是比较推崇侯先生的两本书《深入浅出MFC》和《STL源码解析》。

《深入浅出MFC》这本书,名气自然是大得不得了,不过也有不少人批评。

其实书也没有十全十美的,批评当然是少不了的,不过有的时候我看到有人评论这本书,把它跟Inside VC相比,真的是牛头不对马嘴。

你刚才其实说得很对,程序员应该有一点framework意识。

而这本《深入浅出MFC》与其说是在讲MFC编程,不如说通篇是在拿MFC为例分析Application Framework的架构和脉络。

所以无论你对于MFC本身是什么态度,这本书对每一个C++程序员都有很大的益处。

透明:是的。

《VC技术内幕》会告诉你“DYNAMIC_CREATE这个宏怎么用”,《深入浅出MFC》则告诉你“DYNAMIC_CREATE这个宏是怎么实现的”。

所以,如果你只需要在VC下写一些小应用程序,《深入浅出MFC》的价值并不太大;但是,如果你需要设计一个稍微大一点的东西(不一定是framework),MFC的设计思想就会有所帮助。

梦魇:另外,我觉得对于MFC也应该有一个公允的评价。

过去是吹捧得天上有地下无,书店里铺天盖地都是MFC的书,搞得大家只知有MFC,不知有C++,甚至直到现在还有人问:“我是学MFC呢,还是学C++

VC++是不是比C++更高级的语言

”MFC成了一尊神像,阻碍了人们的视线。

所以得把它从神坛上拉下来。

这就是过去一两年有很多人,包括我在内批评MFC的一个目的。

可是现在大家视野开阔了,.NET也出来了,MFC不再是神像了,少数人就开始以贬损MFC为乐了。

我觉得这种态度是不对的。

什么叫好的框架

我觉得在十几年的时间能够象MFC这样保持稳定并且不断进步的框架就是好的框架。

可能我们在一些具体的设计问题上有不同看法,觉得“这个地方这么设计不是更漂亮吗

”很多时候是的,但是这不重要,重要的是MFC成熟稳定、有十几年的成功经验,这是最了不起的东西。

另外一点,MFC中间包括着学习Win32 API编程的最佳资料。

这是除了其framework方面之外的另一个亮点。

我现在使用Win32 API开发,但是经常参考MFC的源代码,收获很大。

透明:STL方面,我对于剖析它的源代码兴趣并不大,毕竟里面源代码多是算法问题。

所以,《STL源码剖析》我也只是随便翻翻就束之高阁了。

我觉得这本书用来做计算机系的数据结构和算法教材不错,不知道有没有老师乐意这样做。

对于STL,我的态度一向都是“应用至上”。

不过,我一直认为SGI STL本身就是一本精彩的书,一本数据结构和算法的经典参考书,同时也是泛型技术的参考书。

想知道一个算法是如何实现的,看看STL源代码就行;想知道如何使用type traits,STL源代码里面也有例子。

看别人写的书,总觉得隔着一层纱,有点挠不到痒处的感觉。

SGI STL的代码写得非常漂亮,一个C++程序员如果不看看这本书,实在是可惜。

梦魇:至于STL,除了《STL源码解析》之外,我举贤不避亲,强烈推荐侯先生与我合译的那本《The C++ Standard Library》。

这本书质量之高是无需怀疑的。

我现在手边常备此书,随时查阅,对我帮助很大。

透明:C++和Java相比,最大的优势就是它没有一个专门的公司来管它,最大的弱点也是它没有一个专门的公司来管它。

Java程序员在学会简单的语法之后,立刻进入SUN提供的framework,一边用这个现成的framework做实际开发,一边在开发过程中继续学习Java一些幽深的特性。

而这个时候,C++程序员恐怕还在问“VC和BCB哪个好”呢。

这无疑是浪费时间。

梦魇:刚才你说Java和C++的优劣,这个话题已经成了我们这个年代永不消失的声波了。

我也不想再谈这个。

不过有一点我得说清楚:现在我们很多用C++的人吃了不少苦头,探过脖子去看看Java,觉得它真是太可爱了,这种印象是不准确的。

另外,Java也不简单,而且会越来越庞大复杂。

在很多场合,Java还不具有竞争力。

至于将来如何,我看有些Java爱好者也过分乐观了,似乎计算机科学界几十年解决不了的问题都可以借着Java的东风解决掉,恐怕没那么容易。

透明:那当然。

我再次强调:No Silver Bullet。

读书很重要,但古人说“行万里路,读万卷书”,还是把“行路”放在“读书”前面。

尤其对于技术书籍,如果它不能帮我解决问题、不能给我带来非常实际的利益,那么我是不会去读它的。

恶魔说得对,我们这个社会很快餐,我们这个行业尤其很快餐,我们也只能努力适应它。

如果,我想当一名程序员,如何从零开始

1、 程序员意味着要编程序。

(如果你仅仅想得到一份高薪水的工作,喝喝咖啡就等老板发薪水,我奉劝你还是另找一份更合适的工作,譬如练摊,真的,兄弟,这份工作不适合你)2、你是学文的还是学理的,编程序也许需要浪漫,但更需要逻辑和严谨。

(说坦白点就是,在你没有找到乐趣以前,它很枯燥)3、你有对新技术追求的热情吗

你有刨根问底的探索精神吗

(热情绝对是最重要的

你仔细思考一下自己的性格适合当程序员吗

)4、当程序员决不是什么好差事,时刻需要学习,需要思考。

(直到你成为那个可以引导别人去学习和思考的人,你才可以偷偷的嘿嘿笑,又一群傻蛋)5、程序员的未来很迷茫。

(但我认为关键看你自己

我希望你是一个有追求的人,不仅仅是混碗饭吃。

因为真正的乐趣在于创造;如果你能改变软件业的历史,那才是英雄;不想成为Bill Gates,不想成为Dennis Ritchie和 Bjarne Stroustrup,我会说你没有追求。

有个关于程序员未来的笑话,也许你还没听过,你该听一听,摘抄如下:一个程序员对自己的未来很迷茫,于是去问上帝。

“万能的上帝呀,请你告诉我,我的未来会怎样

”上帝说“我的孩子,你去问Lippman,他现在领导的程序员的队伍可能是地球上最大的”于是他去问Lippman。

Lippman说“程序员的未来就是驾驭程序员”这个程序员对这个未来不满意,于是他又去问上帝。

“万能的上帝呀,请你告诉我,我的未来会怎样

”上帝说“我的孩子,你去问Gates,他现在所拥有的财产可能是地球上最多的”于是他去问Gates。

Gates说“程序员的未来就是榨取程序员”这个程序员对这个未来不满意,于是他又去问上帝。

“万能的上帝呀,请你告诉我,我的未来会怎样

”上帝说“我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的”于是他去问侯捷。

侯捷说“程序员的未来就是诱惑程序员”这个程序员对这个未来不满意,于是他又去问上帝。

“万能的上帝呀,请你告诉我,我的未来会怎样

”上帝摇摇头“唉,我的孩子,你还是别当程序员了”)6、当程序员还是很有乐趣的。

(当你学到新知识时,当你有新的思想见解时,当你有新的产品问世时,和知己探讨你的成果时…我问你,觉得这些是乐趣吗

)7、当程序员不易也不难。

(世间事有难易乎

为之…;不为…。

你有决心和信心吗

)8、你真的要当程序员

是你自己的想法

9、你舍得花钱买书吗

(读好书绝对是学习编程的最佳捷径。

你一定会说,现在电脑书籍真他XX的贵,没法子,谁让知识和技术在人家的脑袋,在人家的书里呢;等你写书时可以把价格定低一点,记着还有好多没钱但想买书的兄弟很困难呀。

要舍得买书,买好书,不好的的书不如不读,其害大于其益,关于买什么书,你可以问高手或看候捷的书评;准备一个小本子记录你想买的书的名字,逛书店时看看,如果好就买下,记住要读,别光买不看。

) 10、我告诉你,程序就是:任何有目的的、预想好的动作序列,它是一种软件。

11、编程序就是编写程序。

12、你想好了吗

(如果你想好了还是决定要当程序员,可以继续往下读;否则,你可以继续寻找别的出路了。

)(三) 一个程序员应该具备的基础知识和概念1、计算机是有什么组成的,CPU是什么东西,其工作原理是什么。

(对于这些以及下面将要提到的概念我不会告诉你什么答案,你可以看相应的教材,关于教材我会在下一部分详述,记住理解最重要

)2、机器语言和微指令集的概念。

3、程序的概念。

4、汇编语言是低级语言但不是机器语言。

5、高级语言主要有那些

(C,C++,Basic,Pascal,Fortran,C#,Java等等;如果你是中国软件业的英雄,你也写一门语言,最好不用英语) 6、编译程序和解释程序的概念和其原理。

(编译器是高手和专家编写的)7、HTML、XML等是标识性语言。

8、Prolog是人工智能语言。

9、操作系统OS的概念和原理。

(Windows98,Windows2000,Windows NT,UNIX,Linux,等等都是OS,还有一些实时OS,嵌入OS,编这些的绝对是高手)10、Windows编程说白了就是Windows API的调用。

(中国的程序员很多只是会编windows程序,用的是VB,我的建议是这些程序员顶多只是低级编码员,我称其是coder)11、VC++、VB、BC、BCB、Delphi、VF等都只是编程的工具和环境,不是编程语言。

12、面向结构的设计概念。

13、面向对象的概念。

(好好理解,兄弟,这个东西还是很重要的)14、软件工程的概念和原理。

(如果你想当老总就需要好好研究了,系统分析员比编码员要高一个等级,薪水也高哟)15、数据库的概念。

(要熟悉一些著名的数据库系统和语言的名字,如Orcle,SQL,DB2,DyBase等)16、了解网络概念。

17、了解多媒体概念。

18、熟悉和掌握数据结构和基本算法。

19、是不是要求太高了,别着急慢慢来,进步在不知不觉之中。

(一旦开始学习,一个月以后你就会有一个基本的概念;两个月以后你就会感觉自己有了全面的基础知识;当你知道编程序是怎么回事时,说明你已经入门了。

也有很多人编了很多年程序还没有入门呢,你不会希望自己步其后尘吧。

要有信心和耐心。

沉不住气怎么能成大事

)(四) 教材推荐――-推荐的教材主要还是针对概念来的,最好选用名校的教学用书。

1、《计算机组成原理》(熟悉)2、《数据结构》(掌握)3、《操作系统》(了解->熟悉)4、《The C language》(掌握)5、《编译原理》(了解原理)6、《汇编语言》(了解)7、《计算机网络》(了解)8、《软件工程》(了解)9、《关系数据库》(熟悉)10、《The C++Languege 》(掌握)11、《面向对象设计》(掌握;结合C++学习)(五)一些经验和体会1、真正的程序员用C++;(一位专家说的)2、动手去编程序;3、动脑去思考;4、要有良好的编程风格;5、读书,读好书,尽量读原版书

(我反复强调这一点,读书要有选择,坚持读好书,名家出的经典书,不要浪费实践在一些粗制滥造的书上面;坚持博览群书)6、有自己的学习计划;7、总结自己的经验教训;(准备一个笔记本,记录错误和心得)8、不要怕学新东西;9、要有软件工程的思想;10、善于发现问题,然后去寻找答案;11、向高手请教;(要虚心直到你成为高手)12、和同行交流;(不善于交流肯定不行)13、懂得软件的实质,不要被千变万化的表象所迷惑;14、真正要学习用的是编程语言和方法,不是什么库,什么类,什么工具;(学用那些什么库都比较简单,但光会这些库,我觉得还远远不够)15、学习wiodows编程主要是学习windows OS和win32 API;16、有空了解一下嵌入式开发;17、有空了解一下PDA软件开发;18、了解一下.NET框架和C#语言,也许它是你新的衣食父母;19、要有耐心,不要作浮躁的人; 20、对程序加注释,并保留你的老程序;21、学到的东西越多,了解的越多,你就越接近专家;22、有空去逛逛CSDN,那里有你很多知己;23、要有信心成为一个优秀的程序;(六)一些好书的推荐1、《The C Programming language》 (Keinighan & Dennis Ritchie 1988)2、《The C++ Programming Languague》(Bjarne Stroustrup 1997)3、《Inside The C++ Object Model》 (lippmans)4、《Effective C++》 (同上)5、《More Effective C++》 (同上)6、《Exceptional c++》7、《C++面向对象高效编程》8、《设计模式》9、《Thinking In C++》10、《The Standard C++ Bible》(一般推荐)11、《The Art of Computer Programming 》12、《Programming Windows》 (Charles Petzold)13、《VC++5.0技术内幕》14、《MFC 深入浅出》15、《软件需求》16、《Advanced Windows》17、《C++ primer》18、《win32程序员参考手册》19、《用TCP\\\/IP进行网际互连》20、《COM 本质论》(七)学习计划――-这个学习计划是我个人定的,也共享给大家参考一下,共同进步吧。

1、《计算机组成原理》2、《操作系统》3、《数据结构》4、《汇编语言》5、《 C 》6、《 C++ 》7、《VC 技术内幕》8、《Programming Windows》9、《深入浅出MFC》10、《Advanced Windows》11、《Inside The C++ Object Model》12、《Thinking in C++》13、《Effective C++》14、数据库15、网络16、嵌入式OS和编程17、硬件单片机18、.NET和C#19、软件工程20、UNIX和Linux

电脑编程有什么书能自己自学入门的

1、《计算机组成原理》(熟悉) 2、《数据结构》(掌握) 3、《操作系统》(了解->熟悉) 4、《The C language》(掌握) 5、《编译原理》(了解原理) 6、《汇编语言》(了解) 7、《计算机网络》(了解) 8、《软件工程》(了解) 9、《关系数据库》(熟悉) 10、《The C++Languege 》(掌握) 11、《面向对象设计》(掌握;结合C++学习) (五)一些经验和体会 1、真正的程序员用C++;(一位专家说的) 2、动手去编程序; 3、动脑去思考; 4、要有良好的编程风格; 5、读书,读好书,尽量读原版书

(我反复强调这一点,读书要有选择,坚持读好书,名家出的经典书,不要浪费实践在一些粗制滥造的书上面;坚持博览群书) 6、有自己的学习计划; 7、总结自己的经验教训;(准备一个笔记本,记录错误和心得) 8、不要怕学新东西; 9、要有软件工程的思想; 10、善于发现问题,然后去寻找答案; 11、向高手请教;(要虚心直到你成为高手) 12、和同行交流;(不善于交流肯定不行) 13、懂得软件的实质,不要被千变万化的表象所迷惑; 14、真正要学习用的是编程语言和方法,不是什么库,什么类,什么工具;(学用那些什么库都比较简单,但光会这些库,我觉得还远远不够) 15、学习wiodows编程主要是学习windows OS和win32 API; 16、有空了解一下嵌入式开发; 17、有空了解一下PDA软件开发; 18、了解一下.NET框架和C#语言,也许它是你新的衣食父母; 19、要有耐心,不要作浮躁的人; 20、对程序加注释,并保留你的老程序; 21、学到的东西越多,了解的越多,你就越接近专家; 22、有空去逛逛CSDN,那里有你很多知己; 23、要有信心成为一个优秀的程序员;(六)一些好书的推荐 1、《The C Programming language》 (Keinighan & Dennis Ritchie 1988) * 2、《The C++ Programming Languague》(Bjarne Stroustrup 1997) * 3、《Inside The C++ Object Model》 (lippmans) 4、《Effective C++》 (同上) * 5、《More Effective C++》 (同上) * 6、《Exceptional c++》 7、《C++面向对象高效编程》 8、《设计模式》 9、《Thinking In C++》 * 10、《The Standard C++ Bible》(一般推荐) 11、《The Art of Computer Programming 》 12、《Programming Windows》 (Charles Petzold) 13、《VC++5.0技术内幕》 14、《MFC 深入浅出》 15、《软件需求》 16、《Advanced Windows》 17、《C++ primer》 18、《win32程序员参考手册》 19、《用TCP\\\/IP进行网际互连》 20、《COM 本质论》(七)学习计划 D―-这个学习计划是我个人定的,也共享给大家参考一下,共同进步吧。

1、《计算机组成原理》 2、《操作系统》 3、《数据结构》 4、《汇编语言》 5、《 C 》 6、《 C++ 》 7、《VC 技术内幕》 8、《Programming Windows》 9、《深入浅出MFC》 10、《Advanced Windows》 11、《Inside The C++ Object Model》 12、《Thinking in C++》 13、《Effective C++》 14、数据库 15、网络 16、嵌入式OS和编程 17、硬件单片机 18、.NET和C# 19、软件工程 20、UNIX和Linux

编译原理实验报告

#includevoid main(){int m=0,n=0,n1=0,n2=0,n3=0,zg,fzg,flag;int bz[7]=;\\\/*状态改变控制,1 表示可以改变状态zt值,0 表示不可以*\\\/int zt[7]=;\\\/*状态值,2表示未定状态,1表示 是,0表示 否*\\\/char temp[100]=\\\\0;\\\/*用于求first集*\\\/char z[7];\\\/*非总结符*\\\/char z1[7];\\\/*总结符*\\\/char z2[7]=\\\\0;\\\/*gs[]文法中出现的标记个数的辅助字符 01234*\\\/char gs[100]=\\\\0;\\\/*文法,按顺序排成字符串*\\\/printf(请依次输入非终结符(不超过7个):);gets(z);while(z[m]!='\\\\0')fzg=m;\\\/\\\/zg是非终结符个数while(nAB S-->bC A-->k A-->b\\\ );printf(输入:0SAB0SbC1Ak1Ab\\\ );printf( (注:数字01234表示第一二三四个非终结符)\\\ );gets(gs);fflush(stdin);printf(您输入了:);puts(gs);m=0;\\\/\\\/对于输入文法字符串的转换,将每个文法式左部去除while(gs[m]!='\\\\0'){n=m;if(gs[m]>='0'&&gs[m]<='9'){m++;while(gs[m]!='\\\\0'){gs[m]=gs[m+1];m++;}\\\/\\\/gs[m-1]='\\\\0';}m=++n;}m=0;\\\/\\\/puts(gs);\\\/*情况一,直接判定是 形如: (A-->k) *\\\/while(gs[m]!='\\\\0'){if(gs[m]=='k'){zt[gs[m-1]-48]=1;bz[gs[m-1]-48]=0;}m++;}\\\/*情况二,直接判定--否 形如: (D-->aS ,D-->c) *\\\/for(n=0;n=z1[0]&&gs[m+1]<=z1[n1-1])zt[n]=0;else \\\/\\\/gs[m+1] 是非终结符n2做标记} \\\/\\\/跳出循环,无法解决该情况,推到下面情况三m++;}if(n2!=99) \\\/\\\/完成所有扫描,未出现非终结符,得出结论zt[n]=0.bz[n]=0不允许再改变zt[n]}}\\\/*情况三,最终判定*\\\/do{flag=0;for(n=0;n='A'&&gs[m]<='Z') {n1=0;for(n2=0;n2='0'&&gs[n]<='9'){for(;m'9') {if(n1==0) \\\/\\\/如果是第一个直接保存\\\/\\\/不是第一个,先与字符数组中其它字符比较,没相同的才保存else if(gs[n]>='a'&&gs[n]<='z'&&gs[n+1]>='A'&&gs[n+1]<='Z') \\\/\\\/gs[n]是终结符 且 gs[n+1]是非终结符;\\\/\\\/什么也不做,程序继续n++,扫描下一个gs[n]else {for(n3=0;n3<=n1;n3++){if(temp[m*13+n3]==gs[n+1])break;}if(n3>n1) \\\/\\\/for循环结束是因为n3而不是break}n++;}break; \\\/\\\/break位于if(gs[n]==z2[m]),对于gs[n]已找到z2[m]完成任务跳出for循环}}n2=m; \\\/\\\/存放该for循环中m的值n++;}\\\/\\\/进一步处理集除去非终结符m=0;n=0;n1=0;n2=0;for(m=0;m='A'&&temp[m*13+n1]<='Z') \\\/\\\/搜索非终结符{for(n=0;n=n1) \\\/\\\/for循环结束是因为n3而不是break,即无相同字符else n2++;}n1=0;n2=0;}n1++;}flag=m; \\\/\\\/存放该for循环中m的值}\\\/\\\/非终结符的first集输出m=0;n1=0;for(m=0;m

声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。联系xxxxxxxx.com

Copyright©2020 一句话经典语录 www.yiyyy.com 版权所有

友情链接

心理测试 图片大全 壁纸图片