齐心协力 共同抗疫——C++疫情模拟程序

[日期:2021-03-09] 作者:信息技术 次浏览 [字体: ]

2022届12 黄能运 指导教师:旷勇

疫情之下,处处不得安宁。多灾多难的2020年,人类遭到了罕见的病毒侵袭,全世界都知道了它的名字:新冠病毒(2019-nCoV)。很难想象,人类在如此发达的信息时代,竟会因为一种极微小的生物而不得安宁,在全世界引起轩然大波。新冠病毒的传播速度极快,且变化多端,不可捉摸,甚至治好了的人还会留下后遗症。针对新冠的传播,我决定做一个能“看得见”,跃然“纸”上的C++疫情模拟程序。

    首先,程序需要开头,因为没有做过关于此类程序的开头,所以我在网上对c++程序怎么开头,需要什么语句,经典或高端的进行了搜索并借鉴。因为自己程序设计水平还没有达到,只能设计文本的界面。费了几番周折做出来之后就发现了问题,首先需要if语句判断是否开始运行,否则在调试中每次都要完整的过一遍,显得冗余繁杂。其次是由于计算机速度实在是太快了,每次闪的一下就运行了开头了,没有留下足够的时间去观赏开头,所以需要一个语句进行停顿一定的时间——sleep()函数,这个函数需要进行相应的头文件声明:#include <windows.h>,sleep(1000)其中参数单位是毫秒,所以在这里1000代表的就是一秒。

    其次是程序的主体。浮现在我脑海里的,是国内程序高手做出的,计算机模拟疫情期间开学场景,他根据不同的情况,诸如戴不戴口罩,做不做疫情防护等,用动画的形式,为大家形象地展现出疫情传播的恐怖速度,其核心是通过参数的调整来修改接触时的传播率。我就思考,我能否也做一个像他那样的程序。同样因为自己技术不支持,只能无奈放弃动画效果转而使用文本形式体现。但是我依然可以展现程序的核心——传播率。我运用了权威专家分析的病毒传播特点以及传播率的意义,结合程序中rand()函数的使用,将感染人数除以总人数得到感染人数的比例,再运用传播率乘以随机数以体现传播的不确定性。然后,我假设一个人传染给另一个人的几率是m,并且每个人每天有n次接触机会,被感染过的人在潜伏期就能感染其他人,其中多次运用到循环for语句。我们发现感染人数会以滚雪球的方式增长十分恐怖。

在调试中,我遇到了极多的困难。其中有语句的语法错误、有数据类型不正确、有如何展现数据变化、有数据的不形象……可让我吃尽了苦头。其实编一个程序很简单,但调试和完善程序的过程却是困难重重,一个极小的差错,可能导致整个程序的错误。因为计算机不像人一样,它不能明白人在想什么,它只能执行人编写的程序。

将程序的核心部分代码调试无误后就是优化的过程。为了展现疫情中防护措施对疫情控制的效果,我设置了不同的防护措施,包括戴不戴口罩、是否进行隔离、隔离的范围和时间……再针对不同的防护措施设定相应的保护效果,并相应调整感染率的参数。从模拟程序的运行的结果可以看出,做好个人防护措施对于抗疫具有十分显著的效果。

为了便于观察数据我加上了适合的停顿。那么我又想,既然有对众人的测试,能否有对个人的测试呢。所以我加入了“自己能否感染”,其核心仍然和群体防疫程序代码一样。为了程序不单调,我又加入了第二部分“疫情小测试”,题选用的是网上的。测试完成后会自动公布答案、有分数、有解析。在开始想的时候花了我最多时间的是关于文字问题的呈现方式。因为题目呈现的原理相同,理所当然地想到for循环,并运用char型变量,但是怎么试皆无果,只能老老实实地逐一输入了……

 

面对这没有硝烟的战役,经过全国上下的齐心协力,特别是医务人员巨大贡献,我国抗击新冠疫情取得了举世瞩目的成效。但是国际形势不容乐观,现在还存在零星的输入性病例,抗疫注定是一场持久战。我们决不能麻痹大意放松警惕,一定要将个人防护坚持不懈一丝不苟的落实到位,这场抗击疫情的战役才能取得最终的胜利。同时,此次的程序设计也让我体会到了其中的艰辛与不易,在面对一个个看似不能无法跨过的荆棘前,我辗转反侧,凭借着对c++程序设计纯粹的热爱,我坚持了下来,相信在以后的学习中,我一定能做的更好。