﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-WHy so serious?-随笔分类-course</title><link>http://www.cppblog.com/tabmood/category/9740.html</link><description>太阳下早已没有新鲜事</description><language>zh-cn</language><lastBuildDate>Sat, 15 Aug 2009 17:39:16 GMT</lastBuildDate><pubDate>Sat, 15 Aug 2009 17:39:16 GMT</pubDate><ttl>60</ttl><item><title>sicp 练习1.25</title><link>http://www.cppblog.com/tabmood/archive/2009/07/27/91380.html</link><dc:creator>Eleven</dc:creator><author>Eleven</author><pubDate>Mon, 27 Jul 2009 12:14:00 GMT</pubDate><guid>http://www.cppblog.com/tabmood/archive/2009/07/27/91380.html</guid><wfw:comment>http://www.cppblog.com/tabmood/comments/91380.html</wfw:comment><comments>http://www.cppblog.com/tabmood/archive/2009/07/27/91380.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tabmood/comments/commentRss/91380.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tabmood/services/trackbacks/91380.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 10pt"><font color=#008b8b>from:<font color=#000000>http://dev.csdn.net/develop/article/64/64485.shtm</font><br><br>; ======================================================================<br>;<br>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Structure and Interpretation of Computer Programs<br>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (trial answer to excercises)<br>;<br>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 计算机程序的构造和解释(习题试解)<br>;<br>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; created: code17 02/28/05<br>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modified:<br>; (保持内容完整不变前提下，可以任意转载)<br>; ======================================================================<br><br>;; SICP No.1.25<br>;; 本题为理解题<br></font><br></span><span style="FONT-SIZE: 10pt">;; 直接定义(expmod base exp m)为base^exp基于m的模(modulo)<br>;; (define (expmod base exp m)<br>;;&nbsp;&nbsp; (remainder (fast-expt base exp) m))<br>;; 在理想情况下是正确的，在语义上与原定义是等价的，甚至递归层数<br>;; 都是一样的，而且更加直观。<br>;;<br>;; 但在实践中，这样的定义是不可行的，这也是为什么我们要采用原文中的定义<br>;; 的原因：因为base^exp很可能是一个非常大的数。比如，当我们取第二个<br>;; 测试例子中的n=1000000时，base是[1,999999]区间中的任意<br>;; 随机数，它的平均取值为50000，而exp=1000000。50000^1000000是一个大得<br>;; 惊人的数，无论是fast-expt的层层函数调用计算，还是用remainder对其取模，<br>;; 计算量都是很大的。<br>;;<br>;; 而相反，原始的expmod函数<br>;; (define (expmod base exp m)<br>;;&nbsp;&nbsp; (cond ((= exp 0) 1)<br>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((even? exp)<br>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (remainder (square (expmod base (/ exp 2) m))<br>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m))<br>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (remainder (* base (expmod base (- exp 1) m))<br>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m))))<br>;; 通过分解(a*b mod n) 为 ((a mod n) * (b mod n) mod n)，使得每层递归<br>;; 调用的计算参数和返回值总是小于n (x mod n &lt; n)，即便是计算过程中出现<br>;; 的最大数(a mod n) * (b mod n) 也依然是要小于n^2, 相对于前者n^n的数<br>;; 量级，实在是小得多，这样就避免了大数的计算问题。<br>;;<br>;; 比如经测试，在使用新的expmod的情况下，1009的验证需要1.2ms的时间，<br>;; 1000003的验证需要 93680ms，远高于原来的expmod函数。<br>;;<br>;; 这也同时印证了我们在1.24题中的分析，同样的操作在不同字长的数字上的<br>;; 代价是不同的。1000000的验证时间现在是1000的8000多倍，远不再是2倍左右<br>;; 的关系。在1.24中的，因为expmod算法的控制，操作数最多是n^2级的，字长<br>;; 所引起的差距并不明显，只在10^6-10^12间产生了一点点阶跃；而这里的算法<br>;; 中, 操作数可以达到n^n级，当n=1000时，1000^1000的字长大约在10000位(二<br>;; 进制数)左右，而n=1000000时1000000^1000000的字长则达到在20000000位(二<br>;; 进制数)左右，这字长的巨大差距导致了我们在1.24中已经发现的问题更加明显。</span>
<img src ="http://www.cppblog.com/tabmood/aggbug/91380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tabmood/" target="_blank">Eleven</a> 2009-07-27 20:14 <a href="http://www.cppblog.com/tabmood/archive/2009/07/27/91380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>课程设计总结</title><link>http://www.cppblog.com/tabmood/archive/2009/06/26/88581.html</link><dc:creator>Eleven</dc:creator><author>Eleven</author><pubDate>Fri, 26 Jun 2009 08:08:00 GMT</pubDate><guid>http://www.cppblog.com/tabmood/archive/2009/06/26/88581.html</guid><wfw:comment>http://www.cppblog.com/tabmood/comments/88581.html</wfw:comment><comments>http://www.cppblog.com/tabmood/archive/2009/06/26/88581.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tabmood/comments/commentRss/88581.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tabmood/services/trackbacks/88581.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 10pt"></span><span style="FONT-SIZE: 12pt">dota到精疲力竭，感觉没啥事情干，就总结下课程设计吧。嗯，我们组的最终设计结果基本上达到了预期的目的了。编译器的几个基本模块基本上都实现了其功能。现在回想下上个星期，有几天还为实现过程而晃晃的，现在都过去了。对于我们的课程设计，个人感觉很满足的。过程中自己解决了不少设计问题和编码的具体问题。在此感谢SY同学和一直烦我的CJ。在讨论过程中有几次感觉还是很迷茫的，不过最终在你们的建议下还是一步步的过来了。<br>现在想想我们的内核，呵呵，我感觉还是蛮不错的。最后虽然有些问题没有解决，我想并不是我们没有注意到，因为时间也就这么些，平时在小浪费下，呃，感觉已经不错了。</span> 
<img src ="http://www.cppblog.com/tabmood/aggbug/88581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tabmood/" target="_blank">Eleven</a> 2009-06-26 16:08 <a href="http://www.cppblog.com/tabmood/archive/2009/06/26/88581.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>课程设计中期小结</title><link>http://www.cppblog.com/tabmood/archive/2009/06/20/88182.html</link><dc:creator>Eleven</dc:creator><author>Eleven</author><pubDate>Sat, 20 Jun 2009 09:41:00 GMT</pubDate><guid>http://www.cppblog.com/tabmood/archive/2009/06/20/88182.html</guid><wfw:comment>http://www.cppblog.com/tabmood/comments/88182.html</wfw:comment><comments>http://www.cppblog.com/tabmood/archive/2009/06/20/88182.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tabmood/comments/commentRss/88182.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tabmood/services/trackbacks/88182.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt">一周已经过去，下周就要有个结果了，在此记录一下课程设计的前期的进程。<br><font face=#ce_temp_font#>基本的sql和ddl、dml已经写完了词法分析和语法分析，晚上要进行这几个模块的调试工作。<br>嗯，这也就基本上是第一个阶段了。<br>简单记录下工作过程：<br>星期一、二主要在考虑设计问题，界面和分析器的连接问题，还有分析器的设计。开始的时候没有仔细考虑分析器的设计问题。因为比较简单，所以认为顺序读取，然后直接进行判断就行了。先按这个思路做了一些吧，然后发现没有词法分析直接根据字符串来判断的话要选择的条件太多，而且不符合逻辑习惯，很容易出错。<br>然后周三否决的前面的分析器设计模式，重新词法分析。中间参照了《LeX与Yacc》的SQL分析一章。<br>周四进行了语法分析的编写，然后周五周六就这样过来了。<br>感觉从明天开始进度要稍微加快些。周二之前要处理好界面之外的工作，嗯，要着重看下文件的存取。感觉老师给的数据结构还不够完善。总之，加油吧！</font></p>
<img src ="http://www.cppblog.com/tabmood/aggbug/88182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tabmood/" target="_blank">Eleven</a> 2009-06-20 17:41 <a href="http://www.cppblog.com/tabmood/archive/2009/06/20/88182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Embedded Lab2-3</title><link>http://www.cppblog.com/tabmood/archive/2009/03/20/77315.html</link><dc:creator>Eleven</dc:creator><author>Eleven</author><pubDate>Fri, 20 Mar 2009 07:09:00 GMT</pubDate><guid>http://www.cppblog.com/tabmood/archive/2009/03/20/77315.html</guid><wfw:comment>http://www.cppblog.com/tabmood/comments/77315.html</wfw:comment><comments>http://www.cppblog.com/tabmood/archive/2009/03/20/77315.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tabmood/comments/commentRss/77315.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tabmood/services/trackbacks/77315.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 10pt">第二个实验可谓是多灾多难，重复了好几次，今天终于把它搞定了，心里也很舒畅。<br>这个实验的主要内容也就是通过bootp为目标机分配ip地址，然后用tftp传送内核与文件。<br>具体的过程和很多参考资料上的差不多，就是利用minicom工具，<br>先minicom -s进入界面设置一下串口的信息（波特率、数据位、奇偶校验、停止位、数据流控制）<br>然后save as dfl -&gt;exit.<br>下面就要设置/etc/bootptab文件了：<br>Xsbase270:\<br>&nbsp;&nbsp; ht=1:\<br>&nbsp;&nbsp; ha=0x123456789a00:\<br>&nbsp;&nbsp; ip=192.168.0.50:\<br>&nbsp;&nbsp; sm=255.255.255.0<br>这里有几点要说明的，ha是目标机的mac地址，我们先设置了这个地址，然后在启动目标机以后把目标机的mac地址改成这个。因为目标机向主机申请ip的过程中以广播的形式发送请求信号，主机在收到了信号之后会在bootptab中查询匹配的目标机，然后将其中的信息发回给目标机，也就是说 bootptab中的信息就是主机发给目标机的。书上说还要设置/etc/xinetd.d/bootp文件，因为这个已经设置好了，这步就没有做。<br>按理说一切的过程很简单，但就这东西一直failed。主机一直收不到目标机的请求。后来老师来看了一下，原来是主机的ip都没有设置<br>用ifconfig eth0设置一下就OK了。<br>后面就是用tftp传文件，既然已经连接上了，后面就没什么了。</span>
<img src ="http://www.cppblog.com/tabmood/aggbug/77315.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tabmood/" target="_blank">Eleven</a> 2009-03-20 15:09 <a href="http://www.cppblog.com/tabmood/archive/2009/03/20/77315.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Embedded Lab1</title><link>http://www.cppblog.com/tabmood/archive/2009/03/07/75815.html</link><dc:creator>Eleven</dc:creator><author>Eleven</author><pubDate>Sat, 07 Mar 2009 05:24:00 GMT</pubDate><guid>http://www.cppblog.com/tabmood/archive/2009/03/07/75815.html</guid><wfw:comment>http://www.cppblog.com/tabmood/comments/75815.html</wfw:comment><comments>http://www.cppblog.com/tabmood/archive/2009/03/07/75815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tabmood/comments/commentRss/75815.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tabmood/services/trackbacks/75815.html</trackback:ping><description><![CDATA[<font style="FONT-SIZE: 10pt" face=#ce_temp_font#>第一次的实验比较简单，也就是熟悉一下环境，在linux下打些命令，烧写一下Boot Loader。老时鉴于我们大多数对于linux了解有限，哎，串口通信都没怎么弄，以至于后面的交叉编译也就没让我们做，估计要等到下次吧。<br>实验之前觉得arm板蛮神秘的，别人说它还满贵的呢，所以n多人做实验也只能分开来做了。<br>基本上就和书上的差不多，先tar解压缩JTAG的程序包，然后make一下，把生成的boot文件cp到/home/JTAG/Jflash-XSBase270下面。<br>最后运行一下boot就开始烧写了。<br>还是蛮简单的。</font>
<img src ="http://www.cppblog.com/tabmood/aggbug/75815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tabmood/" target="_blank">Eleven</a> 2009-03-07 13:24 <a href="http://www.cppblog.com/tabmood/archive/2009/03/07/75815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>