论文部分内容阅读
水文与水资源工程专业以高等数学、数理统计和水力学等为基础理论,运用水文学和有关学科的理论和方法,研究各种实际水文问题的解决途径和方法,为水利、电力、交通、城市发展和环境保护等工程建设提供水文计算成果;为农业、林业和国土整治规划提供水文依据。繁复的数学计算是该类课程的特点。以往的教学只偏重理论和方法的讲述,而在计算内容上由于涉及繁杂的数据处理和大量的计算,往往是被忽视的环节。在掌握传统手算方法和步骤的基础上,如何将计算机编程技术引入本科教学中,是一项新的探索。本文以“水库运行调度”课程为例,探索了编程计算方法在教学中的实现过程。
1 选定编程语言
由于水文计算主要是通过程序来实现,而对界面设计几乎没有要求,因此,这里选用目前广泛应用的结构化语言C来进行编程。当然,根据课程的需要,也可以选用其他编程语言,如Fortran、Matlab、Basic等等。
2 对课程教学的内容进行整编和提炼
在水文与水资源工程专业的专业课中,有许多分析计算的过程,如洪水演算、设计枯水年的选择、调度图的绘制等等,但并不是所有的内容都适合于编程,有些内容可能用Excel等工具更容易实现。因此,需要对教学的具体内容进行提炼,整理出适合编程的题目。在“水库运行调度”这门课程中,制定了两个编程题目:一个是“年调节水库上、下基本调度线的绘制”;另一个是“应用动态规划来求解年调节水库的优化调度线”。
3 对程序内容进行分解
由于机时有限,而学生在编程方面的能力又各不相同,多数学生对专项课题的程序实现没有经验,要在相对较少的时间内让大多数学生完成作业,有一定难度。因此,需要对大型程序进行分解,将其分成若干容易实现的程序块。以“年调节水库上、下基本调度线的绘制”为例,分解成以下几个程序块。
3.1 求单一时段内的初水位
这是一个基本程序块,要求学生在已知时段末水位、该时段保证出力的条件下,推求时段初水位,其程序框图如图1所示。由于时段初水位是通过试算得来,因此需要一个无最高循环次数限定的循环语句来实现,这里选择C语言中的do-while循环语句。通过该阶段的实践,可以使学生熟悉C语言程序实现的基本过程,并对程序调试有基本的认识。
3.2 求调度期内各时段的初水位
在这个阶段,把单一时段初水位的计算扩展到整个调度期,看似仅仅增加了一个循环过程,但其中涉及到前后时段间参数的衔接问题,以及数组的定义及使用等概念,能进一步提高学生对程序的理解和调试能力。
4 插值函数的调用
在前面的程序中,为了简化编程,“水位-库容”、“下游水位-流量”等关系曲线均没有用插值函数,而使用了拟合曲线。为了进一步训练学生的编程能力,可以在这一阶段将拟合曲线替换成插值函数,使学生对子程序的调用、指针的使用等方面的知识有更深入的理解。
5 结果输出
将计算结果打印到屏幕,或进一步输出到文件,从而使学生掌握文件读写的操作。有条件的话还可以将结果以图形的形式进行输出,但在C语言中这样做有一定难度,一般是输出数据,再将其拷贝到其他绘图工具中进行绘图。
以上为编程实践的基本过程,在实际教学过程中,根据学生的具体情况,教师可以进行灵活处理:比如给出程序的主体结构,由学生完成关键语句的填写,并独立完成程序的调试,或输出几个中间变量以跟踪计算过程,还可以要求学生根据具体问题对程序进行局部修改,等等。这些练习的目的都是为了让学生更好地掌握水文模型的结构、流程和运行结果。另外,可以设计一些具有启发性的培养学生综合能力的作业,如“用动态规划求解最优调度线”。这类作业的特点是物理过程相对简单,计算流程明晰,计算结果方便验证,通过学生的独立思考和反复试验修改,能够完成正确的程序设计。此外,为了防止学生中的抄袭现象,可以给每个学生设定不同的参数和设计典型年,并要求每个学生在实验报告中必须对编程过程和结果进行分析说明。
6 结语
本文以“水库运行调度”中“上、下基本调度线的绘制”的程序实现为例,分析了在水文与水资源工程专业课程中训练学生编程能力的基本过程。实践表明,这不仅使学生牢固掌握了专业课程的基本原理和计算方法,还让学生掌握了一项实用性广泛的编程技能。通过编程训练,学生对该课程的学习兴趣也有较大提高,编程能力有了显著增强。
参考文献
[1] 李鸿雁.编程训练在水文与水资源工程专业教学中的探索[J].吉林教育,2011(5):14.
1 选定编程语言
由于水文计算主要是通过程序来实现,而对界面设计几乎没有要求,因此,这里选用目前广泛应用的结构化语言C来进行编程。当然,根据课程的需要,也可以选用其他编程语言,如Fortran、Matlab、Basic等等。
2 对课程教学的内容进行整编和提炼
在水文与水资源工程专业的专业课中,有许多分析计算的过程,如洪水演算、设计枯水年的选择、调度图的绘制等等,但并不是所有的内容都适合于编程,有些内容可能用Excel等工具更容易实现。因此,需要对教学的具体内容进行提炼,整理出适合编程的题目。在“水库运行调度”这门课程中,制定了两个编程题目:一个是“年调节水库上、下基本调度线的绘制”;另一个是“应用动态规划来求解年调节水库的优化调度线”。
3 对程序内容进行分解
由于机时有限,而学生在编程方面的能力又各不相同,多数学生对专项课题的程序实现没有经验,要在相对较少的时间内让大多数学生完成作业,有一定难度。因此,需要对大型程序进行分解,将其分成若干容易实现的程序块。以“年调节水库上、下基本调度线的绘制”为例,分解成以下几个程序块。
3.1 求单一时段内的初水位
这是一个基本程序块,要求学生在已知时段末水位、该时段保证出力的条件下,推求时段初水位,其程序框图如图1所示。由于时段初水位是通过试算得来,因此需要一个无最高循环次数限定的循环语句来实现,这里选择C语言中的do-while循环语句。通过该阶段的实践,可以使学生熟悉C语言程序实现的基本过程,并对程序调试有基本的认识。
3.2 求调度期内各时段的初水位
在这个阶段,把单一时段初水位的计算扩展到整个调度期,看似仅仅增加了一个循环过程,但其中涉及到前后时段间参数的衔接问题,以及数组的定义及使用等概念,能进一步提高学生对程序的理解和调试能力。
4 插值函数的调用
在前面的程序中,为了简化编程,“水位-库容”、“下游水位-流量”等关系曲线均没有用插值函数,而使用了拟合曲线。为了进一步训练学生的编程能力,可以在这一阶段将拟合曲线替换成插值函数,使学生对子程序的调用、指针的使用等方面的知识有更深入的理解。
5 结果输出
将计算结果打印到屏幕,或进一步输出到文件,从而使学生掌握文件读写的操作。有条件的话还可以将结果以图形的形式进行输出,但在C语言中这样做有一定难度,一般是输出数据,再将其拷贝到其他绘图工具中进行绘图。
以上为编程实践的基本过程,在实际教学过程中,根据学生的具体情况,教师可以进行灵活处理:比如给出程序的主体结构,由学生完成关键语句的填写,并独立完成程序的调试,或输出几个中间变量以跟踪计算过程,还可以要求学生根据具体问题对程序进行局部修改,等等。这些练习的目的都是为了让学生更好地掌握水文模型的结构、流程和运行结果。另外,可以设计一些具有启发性的培养学生综合能力的作业,如“用动态规划求解最优调度线”。这类作业的特点是物理过程相对简单,计算流程明晰,计算结果方便验证,通过学生的独立思考和反复试验修改,能够完成正确的程序设计。此外,为了防止学生中的抄袭现象,可以给每个学生设定不同的参数和设计典型年,并要求每个学生在实验报告中必须对编程过程和结果进行分析说明。
6 结语
本文以“水库运行调度”中“上、下基本调度线的绘制”的程序实现为例,分析了在水文与水资源工程专业课程中训练学生编程能力的基本过程。实践表明,这不仅使学生牢固掌握了专业课程的基本原理和计算方法,还让学生掌握了一项实用性广泛的编程技能。通过编程训练,学生对该课程的学习兴趣也有较大提高,编程能力有了显著增强。
参考文献
[1] 李鸿雁.编程训练在水文与水资源工程专业教学中的探索[J].吉林教育,2011(5):14.