有观点认为,非跨平台病毒在操作系统混合部署的环境中,其扩散速度比较低。这里要编写一个程式来模拟电脑病毒的扩散过程,直观地验证这个观点。这里将使用C 语言。为简单起见,仍然使用面向过程的编程方法,程式文档也只有一个。学习本例时,应着重理解用KDevelop编程的基本步骤。

  问题陈述

  假设有一个封闭的环境,其中有电脑N 台。这N 台电脑都能够选择安装A或B种操作系统。有一种非跨平台病毒病毒,能感染运行安装A操作系统的电脑。当染毒电脑和未染毒电脑交换时,此病毒将以概率pA 扩散。同理,设有另一种非跨平台病毒病毒,能感染运行安装B操作系统的电脑,扩散概率为pB 。把操作系统单一部署2条件下的病毒扩散情况和两种操作系统按比例r:1 混合部署时的{2即任何电脑都安装同一种操作系统}扩散情况进行比较。初始条件:设N=70, pA = pB =p=0.3, rO{0,1,2,3} ,r=0 对应单一部署,其他对应混合部署;单一部署时,有两台电脑已感染了病毒;混合部署时,每种操作系统的电脑各有一台电脑已感染了病毒。输出:用数值和图像来表示感染病毒的电脑总数和增量的变换情况。终止条件:当任何电脑都感染病毒时,停止模拟。

  设计

  首先,定义一个TComputer类型的数组,每个元素代表一台电脑。TComputer是用户自定义类型,其中记录电脑上的操作系统类型、连同是否感染了病毒等信息。应根据初始条件,对这个数组进行初始化。

  其次,定义一个模拟电脑交互的函数ComputerContact(),用以模拟任意两台电脑的交互。当这两台电脑的操作系统相同,并且其中一台已感染了病毒时,另一台电脑将以概率p感染病毒。为了方便,能够产生一个0 到9 范围内的随机数,当此随机数小于p*10时,就认为病毒扩散了。

  第三,能够产生两个小于N 的互不相等的随机数,来确定一次交互中的两台电脑。

  编写程式文档

  通过菜单操作【Project】→【New Project】启动新建工程向导程式,选择工程类型,并指定工程名称及其保存位置,如图所示。接下来一路点击Next即可完成工程的创建工作。



  向导程式会自动生成一个含有主函数的文档。以此文档是个模板,在他的基础上修改并添加代码,即可编写需要的程式。本例的源程式见linuxv-viruspread-0.0.1.tar.gz中的/src/viruspread.cpp。

  编译

  程式写好后,应该把文档保存起来,然后按照前面提到的步骤,生成源码结构、配置、编译,即依次执行如下菜单操作:

  【Build】→【Run automake&conf】
  【Build】→【Run configure】
  【Build】→【Compile File】

  每一个操作若能正常完成,在Messages 窗口中会出现Success的提示。假如没有Success 的提示,则表明相应的操作失败,应查明原因。一般来讲,生成源码结构和配置这两个操作都能顺利通过。假如编译连接是首次进行,则一般会失败,因为很少有人能一次写出没有任何语法错误的程式。查看Messages窗口中的提示信息,能够了解哪些地方出现了语法错误。单击某一条错误提示信息,KDevelop 会自动把光标定位到发生该错误的语句上。依据错误提示,修正程式中的语法错误,然后再次尝试编译,直到出现Success的提示。经常出现的一种情况是,程式上的一个语法错误会导致多条错误信息的出现。因此,应该把第一条错误信息认真处理好,再从随后的错误信息中随机选择几条加以处理,然后就再次尝试编译,看更有没有错误信息。如此反复多次,直到把任何的错误提示消除掉,编译就成功了。不要把任何错误信息都依次处理完再尝试编译,那样的效率比较低。

  生成可执行文档

  编译成功后,执行菜单操作【Build】→【Built Project】即可生成相应的生成可执行文档。本例的可执行文档见viruspread 。

  调试

  接下来,能够执行菜单操作【Build】→【Excecute program】试运行程式。这种运行是在KDevelop的控制下进行的。因此,假如出现“死循环”,能够执行菜单操作【Build】→【Stop】或按Esc 键即可中止程式的运行。假如在程式中存在逻辑错误,就得不到期望的结果。逻辑错误的排除比较困难。必须对程式进行仔细的分析才能找到错误的原因。

  一般的逻辑错误能够根据程式的运行表现加以判断。比较深层次的逻辑错误则需要借助调试工具。本章前面介绍的调试工具GNU gdb就是个很好的工具,能够用他对程式进行仔细分析,查找逻辑错误的根源。默认情况下,经过【Build】→【Built Project】操作之后,能够在工程目录下的/debug/src/中找到带源代码调试符号的可执行文档。发现逻辑错误后,就要修改程式,重新编译连接。然后再试运行。假如仍然得不到期望的结果,说明程式中更有逻辑错误,应再次进行分析。如此反复多次,直到消除全部的逻辑错误。

  发布可执行文档

  假如只想发布程式的可执行文档,能够先调整项目的编译连接选项,选择优化编译的方式。这样能够得到更小更快的可执行文档。能够通过菜单【Project】→【Build Configuration】修改编译连接选项。此菜单之下有三种选项,默认为Debug,生成的可执行文档中含有源程式调试符号;还能够选择 Default或Optimized。选择Optimized时,编译连接时将进行优化,生成的可执行文档更小,执行起来也更快。

  选择Debug时,可执行文档保存在工程目录下的/debug/src/中;选择Optimized时, 可执行文档保存在工程目录下的/optimized/src/中;选择Default时, 可执行文档保存在工程目录下的/src/中。对于本例,三种选择所生成的可执行文档的大小差别很大。选择Debug 时,93kb;选择Default时,42kb ;选择Optimized 时,只有8.8kb(见viruspread)。因此,假如要发布可执行文档,应该选择Optimized的方式进行编译连接。

  发布源程式

  把工程目录及其中的任何文档打包即可形成源程式包。linuxv-viruspread-0.0.1.tar.gz是本例的源程式包。用户得到这个源程式包并解压后,不必安装KDevelop 就能够按标准方法进行编译和安装,即支持configure,make,make install,make clean,make uninstall等命令。这个包也含有KDevelop的工程文档和其他相关的信息。因此,假如用户安装了KDevelop,能够直接打开该工程进行修改。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!