计算机导论实验六可视化编程.docx
《计算机导论实验六可视化编程.docx》由会员分享,可在线阅读,更多相关《计算机导论实验六可视化编程.docx(12页珍藏版)》请在冰点文库上搜索。
计算机导论实验六可视化编程
深圳大学实验报告
课程名称:
计算机导论
项目名称:
实验六可视化编程基础
学院:
**学院专业:
********************
报告人:
某某某学号:
201*******班级:
***01
同组人:
无
指导教师:
王小民
实验时间:
2016.12.6提交时间:
2016.12.10
声明:
本次实验内容由报告人和同组人独立完成,所有涉及到他人的工作均已说明。
报告人和同组人均同意教师及学校为教学活动而引用本实验的内容,且无需事先征得同意和特别说明。
教务处制
一、实验目的
1.加深对算法设计和流程图的认识和理解
2.掌握算法设计工具Raptor的基本工作环境
3.掌握顺序结构、选择结构和循环结构的设计方法
4.掌握Raptor的子图和子程序设计方法
5.学会自己提出问题,并得出解决问题的方法
二、实验说明和实验环境
1.实验说明:
本实验以熟悉可视化编程工具Raptor为主,Raptor为程序和算法设计的基础课程的教学提供了实验环境。
使用Raptor设计的程序和算法可以直接转换为C++/C#/Java等高级程序语言。
2.实验环境:
硬件环境:
PC
软件环境:
Windows10中文企业版、Raptor4.0汉化版
三、实验分析设计
Raptor专门用于解决非可视化的环境的句法困难和缺点。
Raptor允许我们用连接基本流程图符号来创建算法,然后可以在其环境下直接调试和运行算法,包括单步执行或连续执行的模式。
该环境可以直观地显示当前执行符号所在的位置,以及所有变量的内容。
由于Raptor是一种基于流程图的可视化程序设计环境。
而流程图是一系列相互连接的图形符号的集合,其中每个符号代表要执行的特定类型的指令。
符号之间的连接决定了指令的执行顺序。
由于流程图是计算机基础课程首先引入的与程序、算法表达有关的基础概念,所以一旦开始使用Raptor解决问题,这些原本抽象的理念将会变得更加清晰。
四、主要实验过程(或核心代码说明)
1.安装Raptor程序设计软件。
2.熟悉Raptor程序设计软件各项功能。
3.选中主界面左端的各项符号并熟悉其意义。
(1)赋值语句:
应用各类运算来更改变量的值。
(2)调用语句:
用于调用子程序、自定义函数或Raptor过程。
(3)返回语句:
开始和结束的符号。
(4)输入语句:
允许用户输入数据,并将数据赋值给一个变量。
(5)输出语句:
显示变量的值或保存到文件中。
(6)选择语句:
经过条件判断后选择两种路径之一继续执行。
(7)循环语句:
允许重复执行一个或多个语句,直到某些条件为真值。
4.新建.rap文件
(1)打开上方的“文件”
(2)点击“新建”,新建一个.rap文件并命名
5.插入符号以及输入语句
(1)选中左方的语句。
(2)在每个箭头之间插入所需符号。
(3)输入语句,双击符号栏,输入所需要的内容。
6.增加子图或者子程序
在main函数窗口右键单击,可以看到弹出菜单可供选择,分别有增加一个子图、增加一个子程序、删除、重命名等。
子图相当于从程序中截取一部分放到另外一个地方,而在原来的主函数中使用调用语句进行调用,子图调用时无须提供参数,因为所有的Raptor子图共享所有的变量。
而子程序相当于Raptor内置过程,必须提供完成任务所需要的数据,也就是所谓的参数。
在我的理解中,子程序类似于高级语言,比如C语言的函数调用,调用的时候传递相关参数,在子程序中进行处理。
7.模式选择
点击菜单栏的模式,可以看到Raptor提供了初级、高级、面向对象三种模式。
在经过实验之后,可以发现初级模式中的调用语句可以调用Raptor内置过程和子图,而中级模式中的调用语句可以调用Raptor内置过程、子图和子程序。
面向对象的模式,目前不是很了解,大学计算机实验指导这本书中也没有提及相关的操作,比如对象的创建,构造函数等。
五、实验结果与数据分析
1.练习1
结果截图:
数据分析:
本程序先获得a,b,c的三个值,然后判断其是否满足三角形三边大小关系,若满足,则计算三角形的面积,依据的理论基础是海伦公式,运行结果见第一次运行。
当用户输入的三角形三条边不满足“任意两边之和大于第三边的”的时候,程序输出“inputerror!
!
!
”后结束。
本程序使用到了选择分支结构。
2.练习2
结果截图:
数据分析:
本程序先获得a,b,c的三个值,然后判断b^2-4*a*c是否大于等于0,若满足,则根据韦达定理,计算出二次方程的两个根并输出结果见上图2。
若b^2-4*a*c小于0,则告诉用户输入错误,结束程序。
本程序与第一题一样,使用到了选择分支结构。
3.练习3
结果截图:
数据分析:
本程序通过用户输入一个数据,然后程序调用is_Prime()子程序,判断该数是否是素数,是的话,flag置为1,否则flag置为0.在主程序中,若得到flag的值为1,输出Yes,否则输出No。
在子程序中,用到了循环结构和选择分支结构,判断素数的时候只需要从i=0到sqrt(n)即可。
4.练习4
结果截图:
数据分析:
本练习采用数组存储一组数据,在main程序中,通过循环结构输入n个待排序的数,然后调用子程序sort_arr(),进行降序排列,子程序中排序方法采用选择排序法,程序的运行次数受输入数据的影响,可以看到同样是5个数,只是先后顺序不同,运算的次数也就不同了。
本练习涉及数组存储数据的方法,与前面几个练习稍有不同,但是也是使用到了循环结构和选择分支结构进行可视化的编程。
5.练习5
结果截图:
数据分析:
第五题是求斐波那契数列第N项的值,采用的是递归的方法,根据斐波那契数列中数字的特点,第N个数等于第N-1个数与第N-2个数之和(N>2),而第1个数和第2个数都为1,因此我们可以递归调用我们自己写的Fibonacci()函数,很容易就可以求出我们的数列第N项的值。
本程序采用递归方法,当然我们也可以将其改为非递归算法。
由于题目中要求递归求解,因此实验截图以递归方法呈现。
本程序设计选择分支结构与递归,没有用到循环结构。
6.练习6(汉诺塔,选做题)
结果截图:
数据分析:
汉诺塔问题是经典的递归问题,当n逐渐增大时,移动的次数是以指数级形式增长的,从程序结果来看,移动的次数是2的n次方-1,本程序中,老师给的示例是面向对象的解法,我觉得有点复杂化了,因此我采用的是面向过程的方法,在主程序中输入盘子的数量,然后调用honio(n)子程序。
着重分析子程序,n=1时,我们直接将盘子从x移动到z,当有多个盘子时候,我考虑将上面n-1个盘子先移动到y,然后将剩下的一个盘子从x移动到z,再将之前的n-1个盘子从y移动到z,此过程递归调用honio()子程序,便能够实现。
7.练习8(选做题,自己描述问题,解决思路)
问题描述:
编写程序,输入任意10个整数,分别统计其中的奇数个数,偶数个数,所有数的累加和,然后显示结果。
知识要点:
循环结构/分类思想
解决思路:
每输入一个数,判断奇偶数,分别累计,每次累计总和,输入10个数后循环退出。
结果截图:
六、总结与评价
本次实验收获颇大,第一次使用可视化编程工具进行编程,第一次接触,刚开始碰到了不少问题,在做两数交换练习的时候,出现了“未将对象引用设置到对象的实例”的情况。
当时我有点困惑,因为我根本没有设置什么对象,后来才知道是模式的问题,模式我默认选了面向对象,改成中级模式之后就没有问题了。
另外,在做求三个数最大值问题的时候,我也犯了错误,一直出现“变量notfound”情况。
后来仔细研究,才发现是子程序名与变量同名了,导致找不到变量的情况。
此次可视化编程的实验,我发现可视化编程里面,数组的下标是从1开始,这与我们之前学的C语言不一样,老师一直强调说数组下标从0开始,因此我理所当然地以为在Raptor里面也是一样,所以在做数组练习的时候就遇到了问题。
另外,子程序参数的传递,也可以像C语言一样,如果你想让结果带出子程序,可以将参数设置为输入输出。
这样也类似于C语言中的指针,在主程序中通过子程序传递形参,在子程序中带出结果。
总之,此次可视化编程实验,遇到的问题不少,但到最后都一一解决了,也能够独立完成老师所布置的作业,收获很大,相信会对我接下来学习其他的编程语言带来一定的作用。
自我评价:
98
七、参考资料
无
(可附页)