当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: ——C++样例一 前篇说明了函数的部分实现方式,但并没有说明函数这个语法的语义,即函数有什么用及为什么被使用。
 

 

 ·windowsdna与.net    »显示摘要«
    摘要:可复用软件不是一个新概念。八年来,人们一直在使用各种形式的组件对象模型(com)。事实证明,它是最为成功的可复用软件模型。com引进了“组件”的概念——它是可复用的代码块,可以将多个独立函数的功能进行组合,从而扩充成诸如microsoft word这样的应用程序。大多数开发人员使用ole时深刻体验了com功能。ole是基于com形成的一组功能,使得用户能将一种文档嵌入到另一种文档中。这个功能本身似乎不太引人入胜,但它的作用却不同凡响:当用户将一个excel......
    摘要:我 们 可 以 将 许 多 不 同 的 控 件, 例 如 文 本 框 控 件, 添 加 到visual basic 的 窗 体 上。 在 设 计 期 间, 可 以 调 整 控 件 的 大 小 和 位 置。 文 本 介 绍 如 何 从 一 个visual basic 应 用 程 序 中, 在 运 行 时 刻 修 改 这 些 控 件 的 尺 寸。 运 行 时 刻 重 设 控 件 的 尺 寸 ---- 当 设 计visual basic 应 用 程 序 时, 可......


C++从零开始(八)——C++样例一
c++从零开始(八)

    前篇说明了函数的部分实现方式,但并没有说明函数这个语法的语义,即函数有什么用及为什么被使用。对于此,本篇及后续会零散提到一些,在«c++从零开始(十二)»中再较详细地说明。本文只是就程序员的基本要求——拿得出算法,给得出代码——给出一些样例,以说明如何从算法编写出c++代码,并说明多个基础且重要的编程概念(即独立于编程语言而存在的概念)。 【相关文章:Linux多网卡配置

——c++样例一 【扩展阅读:2004.7.15 [C#学习记录]使用

【扩展信息:linux经典问题==网络篇【绝对转载】

由算法得出代码

    本系列一开头就说明了何谓程序,并说明由于cpu的世界与人们存在的客观物理世界的不兼容而导致根本不能将人编写的程序(也就是算法)翻译成cpu指令,但为了能够翻译,就必须让人觉得cpu世界中的某些东西是人以为的算法所描述的某些东西。如电脑屏幕上显示的图片,通过显示器对不同象素显示不同颜色而让人以为那是一幅图片,而电脑只知道那是一系列数字,每个数字代表了一个象素的颜色值而已。

    为了实现上面的“让人觉得是”,得到算法后要做的的第一步就是找出算法中要操作的资源。前面已经说过,任何程序都是描述如何操作资源的,而c++语言本身只能操作内存的值这一种资源,因此编程要做的第一步就是将算法中操作的东西映射成内存的值。由于内存单元的值以及内存单元地址的连续性都可以通过二进制数表示出来,因此要做的第一步就是把算法中操作的东西用数字表示出来。

    上面做的第一步就相当于数学建模——用数学语言将问题表述出来,而这里只不过是用数字把被操作的资源表述出来罢了(应注意数字与数的区别,数字在c++中是一种操作符,其有相关的类型,由于最后对它进行计算得到的还是二进制数故使用数字进行表示而不是二进制数,以增强语义)。接着第二步就是将算法中对资源的所有操作都映射成语句或函数。

    用数学语言对算法进行表述时,比如将每10分钟到车站等车的人的数量映射为一随机变量,也就前述的第一步。随后定此随机变量服从泊松分布,也就是上面的第二步。到站等车的人的数量是被操作的资源,而给出的算法是每隔10分种改变这个资源,将它的值变成按给定参数的泊松函数分布的一随机值。

    在c++中,前面已经将资源映射成了数字,接着就要将对资源的操作映射成对数字的操作。c++中能操作数字的就只有操作符,也就是将算法中对资源的所有操作都映射成表达式语句。

    当上面都完成了,则算法中剩下的就只有执行顺序了,而执行顺序在c++中就是从上朝下书写,而当需要逻辑判断的介入而改变执行顺序时,就使用前面的if与goto语句(不过后者也可以通过if后接的语句来实现,这样可以减少goto语句的使用,因为goto的语义是跳转而不是“所以就”),并可考虑是否能够使用循环语句以简化代码。即第三步为将执行流程用语句表示出来。

    而前面第二步之所以还说可映射成函数,即可能某个操作比较复杂,还带有逻辑的意味,不能直接找到对应的操作符,这时就只好利用万能的函数操作符,对这个操作重复刚才上面的三个步骤以将此操作映射成多条语句(通过if等语句将逻辑信息表现出来),而将这些语句定义为一函数,供函数操作符使用以表示那个操作。

    上面如果未明不要紧,后面有两个例子,都将分别说明各自是如何进行上述步骤的。

排序

    给出三张卡片,上面随便写了三个整数。有三个盒子,分别标号为1、2与3。将三张卡片随机放到1、2、3这三个盒子中,现在要求排序以使得1、2、3三个盒子中装的整数是由小到大的顺序。

    给出一最简单的算法:称1、2、3盒子中放的卡片上的整数分别为第一、二、三个数,则先将第一个数与第二个数比较,如果前者大则两个盒子内的卡片交换;再将第一个与第三个比较,如果前者大则交换,这样就保证第一个数是最小的。然后将第二个数与第三个数比较,如果前者大则交换,至此排序完成。

    第一步:算法中操作的资源是装在盒子中的卡片,为了将此卡片映射成数字,就注意算法中的卡片与卡片之前有什么不同。算法中区分不同卡片的唯一方法就是卡片上写的整数,因此在这里就使用一个long类型的数字来表示一个卡片。

    算法中有三张卡片,故用三个数字来表示。前面已经说过,数字是装在内存中的,不是变量中的,变量只不过是映射地址而已。在这里需要三个long类型数字,可以借用定义变量时编译器自动在栈上分配的内存来记录这些数字,故可以如此定义三个变量long a1, a2, a3;来记录三个数字,也就相当于装三张卡片的三个盒子。

    第二步:算法中的操作就是对卡片上的整数的比较与交换。前者很简单,使用逻辑操作符就可以实现(因为正好将卡片上的整数映射成变量a1、a2与a3中记录的数字)。后者是交换两个盒子中的卡片,可以先将一卡片从一盒子中取出来,放在桌子上或其他地方。然后将另一盒子中的卡片取出来放在刚才空出来的盒子。最后将先取出来的卡片放进刚空出来的盒子。前面说的“桌子上或其他地方”是用来存放取出的卡片,c++中只有内存能够存放数字,因此上面就必须再分配一临时内存来临时记录取出的数字。


...   下一页
    摘要:如果您曾想过构建自己的超级计算机,但却对用 c 语言进行并行编程望而生畏,那么伪远程线程可以帮您解决这一问题。这种获奖的 java 编程模型极大地简化了集群上的并行编程,并使超级计算走出实验室,使每一位 java 程序员都能使用它。在过去的三年里,并行集群已在改变着超级计算的面貌。一旦价值数百万美元的单体机占了主导,并行集群很快就会成为超级计算机的选择。可以想像得到,开放源码圈内的高涨热情已导致产生了数百 -- 如果不是数千的话 -- 并行集群项目。第一个......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE