精华内容
下载资源
问答
  • 陕西国际商贸学院 Java程序设计集践 实训报告 二 级 学 院信息与工程学院 专 业 名 称计算机科学与技术 学 生 学 号 132703 学 生 姓 名李哲 指 导 教 师程瑶 二一五年六月 前 言 电脑已经深入到日常工作和生活的...
  • 实训报告 二 级 学 院信息与工程学院 专 业 名 称计算机科学与技术 学 生 学 号132703 学 生 姓 名李哲 指 导 教 师程瑶 二一五年六月 前 言 电脑已经深入到日常工作和生活的方方面面比如文字处理信息管理辅助设计...
  • 实验四MATLAB的图形操作(答案)MATLAB实验报告专业班级 电气1042姓 名 唐松学 号 18成 绩 评 定考 核内 容实验表现实验报告实验成果或答辩综合评定成绩成 绩电气与信息学院和谐 勤奋 求是 创新实验教学考核和成绩评定...

    实验四MATLAB的图形操作(答案)

    MATLAB实验报告

    专业班级 电气1042

    姓 名 唐松

    学 号 18

    成 绩 评 定

    考 核

    内 容实验

    表现实验

    报告实验成果

    或答辩综合评

    定成绩成 绩

    电气与信息学院

    和谐 勤奋 求是 创新

    实验教学考核和成绩评定办法

    课内实验考核成绩,严格按照该课程教学大纲中明确规定的比重执行。实验成绩不合格者,不能参加课程考试,待补做合格后方能参加考试。

    单独设立的实验课考核按百分制评分,考核内容应包括基本理论、实验原理和实验。

    实验考核内容包括:1)实验预习;2)实验过程(包括实验操作、实验记录和实验态度、表现);3)实验报告;权重分别为0.2 、0.4 、 0.4;原则上根据上述三个方面进行综合评定。学生未取得1)和2)项成绩时,第3)项成绩无效。

    实验指导教师应严格按照考核内容分项给出评定成绩,并及时批改实验报告,给出综合成绩,反馈实验中出现的问题。实验成绩在教师手册中有记载。

    实验报告主要内容

    一. 实验目的

    二. 实验仪器及设备

    三. 实验原理

    四. 实验步骤

    五. 实验记录及原始记录

    六. 数据处理及结论

    七. 思考题

    八. 实验体会(可选项)

    注:1. 为了节省纸张,保护环境,便于保管实验报告,统一采用A4纸,实验报告建议双面打印(正文采用宋体五号字)或手写,右侧装订。

    2. 实验类别指验证、演示、综合、设计、创新(研究)、操作六种类型实验。

    3. 验证性实验:是指为了使学生巩固课程基本理论知识而开设的强调演示和证明,注重实验结果(事实、概念或理论)的实验。

    4. 综合性实验:是指实验内容涉及本课程的综合知识或本课程相关的课程知识的实验。

    5. 设计性实验:是指给定实验目的、要求和实验条件,由学生自行设计实验方案并加以实现的实验。

    实验题目实验室实验时间 年 月 日 实验类别同组人数1.

    (1) 使用多组变量,绘制多重曲线图(如教材中例6-5、6-6,图形自选)。

    >> x=linspace(0,2*pi,100);

    >> plot(x,sin(x),x,2*sin(x),x,3*sin(x))

    >>

    (2) 绘制函数y=sin2tcos2t的极坐标图形。

    >> t=0:.01:2*pi;

    >> polar(t,sin(2*t).*cos(2*t),'--r')

    >>

    (3) 设置绘图线的线型、颜色、宽度、标记点的颜色及大小。

    >> t=0:.01:2*pi;

    >> polar(t,sin(2*t).*cos(2*t),'--r');

    >> Hold on;

    >> polar(t,sin(2*t).*cos(2*t),'-.gp');

    >>

    2.特殊图形

    (1)条形图

    绘制指定坐标x=[1 2 3 4 5];

    y=[2 5 8; 5 8 7;9 8 6; 6 2 9; 9 4 2]的条形图。

    >> x=[1 2 3 4 5];

    >> y=[2 5 8;5 8 7;9 8 6;6 2 9;9 4 2];

    >> bar(y)

    >>

    (2) 饼图

    x= [10 25 37 66 88],绘制饼图,并将第五个切块分离出来。

    >> x=[10 25 37 66 88];

    >> explode=[0 0 0 0 1];

    >> pie(x,explode)

    >>

    3. 三维图形

    (1) x=2sin(t),y=3cos(t),z=t3,t=[0:pi/100:10*pi]绘制x、y和z均为矢量时的三维曲线图。

    >> t=0:pi/200:10*pi;

    >> x=2*sin(t);

    >> y=3*cos(t);

    >> z=t.^3;

    >> plot3(x,y,z)

    >>

    (2) ,使用mesh、meshc、meshz和waterfall等函数绘制网格图。

    >> [x,y]=meshgrid(-8:0.5:8,-10:0.5:10);

    >> R=sqrt((x-10).^2+(y+10).^2);

    >> z=sin(R)./R;

    >> subplot(2,2,1)

    >> mesh(x,y,z)

    >> title('mesh')

    >>>> meshc(x,y,z)

    >> title('meshc')

    >> subplot(2,2,3)

    >> meshz(x,y,z)

    >> title('meshz')

    >> subplot(2,2,4)

    >> waterfall(x,y,z)

    >> title('waterfall')

    4. 视图与光照

    画一双峰曲面(peaks)图,加灯光light,改变光源的位置观察图形的

    展开全文
  • Java实训设计报告 电子信息工程学院 专业 软件技术 班级 1班 实训简单计算器 项目简介 项目名称 简单计算器 1使用图形用户界面一个文本框0-9数字按钮加 减乘除运算符等于符号复位按钮 2完成整数实数的四则运算加减...
  • java实训及实训报告

    2010-01-05 13:40:14
    题目经典,总和java实训全部内容。其中包括:java程序流程控制语句的掌握,Java面向对象编程,数组,字符串,Applet图形界面设计等内容。
  • 大学生Photoshop实训心得体会范文 在这个学期的期末我们进行了ps实训2周的时间里我们网页编辑方向的计算机专业毕业生进行了photoshopcs4的实战练习运用ps工具对图形进行精确选取设计简单的图形处理问题照片制作各种...
  • java实训报告总结1.docx

    2020-12-08 06:40:23
    0 环境 java实训报告总结1 一 实训目的 熟练掌握Java面向对象程序设讣的基础知识 熟练掌握Java中常用的Swing组件的使用方法 熟练掌握Java程序中图形用户界面设计的方法 熟练掌握使用JDBC操作数据库的方法 通过实训...
  • Photoshop 图像处理实训报告 制作游戏海报 系 别计算机信息系 专 业 班 级信息 331402 指导教师安爱芬 李改婵 组 长贺博 组 员张昊 王萍 张世华 吕泽龙 第 一 章 实 训 的 目 的 和 任 务 1.1 实训目的 通过实训使...
  • ----WORD文档下载后可编辑修改 ---- 下面是小编收集整理的范本 欢迎您借鉴参考阅读和下载 侵删您的努力 学习是为了更美好的未来 java 实训报告范文一 一实训目的 熟练掌握 Java 面向对象程序设计的基础知识 ...
  • java实训报告+源码.zip

    2020-06-16 12:18:18
    java实训报告-小游戏(推箱子),需要连接数据库,登录成功后才可进入游戏。 1.设计模式 (1)单例模式(2)观察者模式(3)代理模式 2.集合应用 设计一个案例,用集合解决实际问题 3.访问数据库 设计一个案例,连接数据库...
  • linux 实训报告

    2012-01-04 10:57:27
    它还包括带有多个窗口管理器的X-Windows图形用户界面,如同我们使用Windows NT一样,允许我们使用窗口、图标和菜单对系统进行操作。 Linux具有Unix的优点:稳定、可靠、安全,有强大的网络功能。在相关软件的支持下...
  • 中级实训总结报告

    2018-05-05 19:56:43
    大二中级实训总结 摘要:为期四周的软件工程中级实训也结束了,这次实训的内容是完成一个GridWrld。GridWorld案例提供了一个图形化环境用于可视化对象在二维网格中的交互。在这个案例中,你将设计和制造各种Actor的...

    大二中级实训总结

        摘要:为期四周的软件工程中级实训也结束了,这次实训的内容是完成一个GridWrld。GridWorld案例提供了一个图形化环境用于可视化对象在二维网格中的交互。在这个案例中,你将设计和制造各种Actor的对象,将它们添加到一个网格中,并且根据一定的规则决定Actor的行为。此外我们还增加了三个扩展任务,ImageReader、N-Puzzle(华容道)和MazeBug(迷宫)。

        回顾过去四周的内容,第一周主要是学习vim,java和ant以及junit的使用,同时理解了项目的大概内容,同时完成了sonar环境的配置,编写了第一个java的小程序并且使用junit和sonar进行了检测。

    vim,java,ant 和Junit 的学习报告:

    vim的学习报告:

      首先,不得不说,Vim是一个十分强大的编辑器工具。因为我一开始使用vim的时候我还拿他跟其他的文本编辑器或者程序编辑器进行了比较。因为我之前一直使用的是vscode和eclipse两款编辑器,当然这两款功能也很强大,导致我一开始觉得vim用起来反而没有什么。严格来说,vscode更接近于IDE,vim是在各大平台都能高效使用的编辑器,只要一个键盘基本能够完成各项任务,如移动光标、删除文本、插入文本、置换文本、搜索文本、执行外部命令等等简单的命令,用熟了估计效率会很高,当然我本人比较懒,小程序我可能练练vim,一旦涉及目录结构相对复杂的大项目我还是会倾向于回到vscode去编辑。在学习和掌握这一部分的时候更多的是在学习一种新的编辑方式,没有遇到很大的障碍,所以这一部分主要写的都是感想而已。

    java的学习报告:

    我大二上选修了web2.0的开发,并没有选择java的课程。所以这次算是第一次比较完整的去接触java语言。其实跟c++有区别,但不是很大,应该说在很多地方都比c++有了改进。更重要的是java的面向对象的编程思想基本上就是全方位覆盖的,c压根不谈面向对象,c++的时候接触了面向对象的编程,之后也陆陆续续接受了更多的时候,但相比较其java而言感觉c++的面向对象并不彻底。再者,没有了指针的java学起来不要太爽,大一疯狂的内存泄漏几乎就是一个令人崩溃的存在,基本上都是指针惹的祸。推荐一个学习很适合菜鸟的java学习网站:java学习网站

    ant的简单使用:

    首先介绍一下一般而言一个项目的格式

    MyProject |--lib --库目录

    |--classes --目的文件目录

    |--src --源文件目录

    |--doc --api文档目录

    |--build.xml (ant默认的执行文件)

    ant这个部分开始有了一些小问题的出现,因为之前是完全没有接触过ant的,所以连ant能做什么都不知道,看了ant的功能之后发现其实现在计算机并没有类似的做得很好的功能,上个实训我们接触过Makefile是第一个处理项目文件的小功能,这一次学习了ant之后也算是在这一块有了一些小认识。> 首先,Ant的核心就是配置文件build.xml,在build.xml文件中配置相关的任务后,使用ant命令调用功能即可自动执行。当然如果build.xml文件我们没有这么命名,那我们也可以通过在命令行操作的时候添加一些命令达到同样的效果。

    ant的元素有很多,并且因为功能的不同在使用方法和对象方面也有不同,这里主要总结最常见的几种还有我们编译和运行的两个元素。ant的构件文件都是XML格式的。每个构件文件包含一个project元素和至少一个target。一个 project 元素可以有多个 target 元素,一个 target 元素可以有多个 task。其中每个元素又有它自己的属性,刚入门ant想要记住这么多元素和属性是很困难的。多练多学。

    junit学习报告:

         JUnit是一个Java语言的单元测试框架。这部分最开始学习的时候有点迷,因为网上的教程比较散乱,由于自己本身也是完全的小白开始接触,所以连判断一个教程的好坏能力都没有,走了许多弯路。、首先,我们得知道他的功能和优点,众所周知,debug是很多程序员都很头疼的东西。通常我们写完代码想要测试这段代码的正确性,那么必须新建一个类,然后创建一个 main() 方法,然后编写测试代码。如果需要测试的代码很多呢?那么要么就会建很多main() 方法来测试,要么将其全部写在一个 main() 方法里面。这也会大大的增加测试的复杂度,降低程序员的测试积极性。而 Junit 能很好的解决这个问题,简化单元测试,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。在博客上发现了一个很不错的junit的教程,这也是让我快速找到运用方法的路径。博客本身很详细,我也不需要去重复里面扥内容,这里贴出来给大家分享一下好的资源优秀的juint教程至于我自己在使用junit这一块其实熟练度是远远不够的,我清除并且肯定junit 的强大功能,那么只能是我日后继续努力去更好的掌握这些很不多的东西,包括这里的junit,包括上面的vim和ant。


    第二周我们主要是完成GridWorld的主要部分的完成,

    这一部分分为Part2,part3,part4,part5.

    part2完成了Bug的四个拓展类CircleBugSpiralBugZBugDancingBug,

    CircleBug只是将Bug中的turn()由执行一次转化为执行两次。

    DancingBug会一次读进一个数组,并且按照数组中的数值转动固定的方向并且行走当数组读取完毕时候重新回到数组首个数值重新开始,从而能够实现不停地跳舞。

    ZBug是一个能走Z字型的Bug的拓展类,这个类实现比较容易,但要传入一个参数来决定Z的大小。

    SpiralBug螺旋类,按照螺旋从中心向外拓展,最好在无界网格中运行,效果更好。

    part3主要是实现一个jumper类拓展Actor类,并且做了相应的juint测试,这一部分可以自己规定自己的jumper类的动作行为,关键是juint的测试要写到位。

    Part4主要实现 ModifiedChameleonCritter、ChameleonKid、RockHound、BlusterCritter、QuickCrab、KingCrab,这一部分是拓展一个crriter的小动物类,并且这些小动物分别具有不同的功能。具体实现也比较容易。

    Part5主要是拓展Grid接口类,由于Grid接口有两个类,一个有界,一个无界。这一部分拓展了网格Grid类,并且实现了用哈希存储,动态数组拓展数组存储空间等功能。


    第三周和第四周我们要实现一些拓展功能,包括ImageReader、N-Puzzle(华容道)和MazeBug(迷宫)三部分。

    其中ImageReader要求实现二进制的读取图片并且实现色彩通道的一些改变从而实现图像的一些改变,还要能够利用java自带的API来写图片,还有写一个测试类。

    其中主要的是在二进制的读取过程花费了很多时间,因为要理解这部分还是需要花很多功夫,毕竟之前都没有接触过。

    其中读写重要部分的代码如下:

    /* 保存位图信息
     * 字节 #14-17    定义以下用来描述影像的区块(bitmapinfoheader)的大小。它的值是:40 - windows 3.2、95、nt、12 - os/2 1.x、240 - os/2 2.x
     * 字节 #18-21    保存位图宽度(以像素个数表示)。
     * 字节 #22-25    保存位图高度(以像素个数表示)。
     * 字节 #26-27    保存所用彩色位面的个数。不经常使用。
     * 字节 #28-29    保存每个像素的位数,它是图像的颜色深度。常用值是1、4、8(灰阶)和24(彩色)。
     * 字节 #30-33    定义所用的压缩算法。允许的值是0、1、2、3、4、5。
     *                     0 - 没有压缩(也用bi_rgb表示)
     *                     1 - 行程长度编码 8位/像素(也用bi_rle8表示)
     *                     2 - 行程长度编码4位/像素(也用bi_rle4表示)
     *                     3 - bit field(也用bi_bitfields表示)
     *                     4 - jpeg图像(也用bi_jpeg表示)
     *                     5 - png图像(也用bi_png表示)
     *                    然而,由于大多数位图文件都是不压缩的,所以最常用的值是0。
     * 字节 #34-37    保存图像大小。这是原始(:en:raw)位图数据的大小,不要与文件大小混淆。
     * 字节 #38-41    保存图像水平方向分辨率。
     * 字节 #42-45    保存图像竖值方向分辨率。
     * 字节 #46-49    保存所用颜色数目。
     * 字节 #50-53    保存所用重要颜色数目。当每个颜色都重要时这个值与颜色数目相等。
     **/
    
    public class myImageIO implements IImageIO{
        private static final int FILEHEADER = 14;
        private static final int INFOHEADER = 40;
        private static final int FOUR_BYTE = 4;
        private static final int MULTICOLOUR = 24;
        private static final int GRAY = 8;
        private static final int TWOFOUR = 24;
        private static final int EIGHT = 8;
        private static final int SIXTEEN = 16;
        private static final int ZERO = 0;
    
        private int bitCount;
    
    	public Image myRead(String filePath) throws IOException {
            try {
                FileInputStream file = new FileInputStream(filePath);
                byte bHead[] = new byte[FILEHEADER];
                byte bInfo[] = new byte[INFOHEADER];
                int width = 0 , height = 0, size = 0;
                //读取位图头
                file.read(bHead, ZERO, FILEHEADER);
                //读取位头信息
                file.read(bInfo, ZERO, INFOHEADER);
    
    
                // 图像宽度(像素点)
                width = ((bInfo[7] << TWOFOUR) & 0xff000000)| 
                        ((bInfo[6] << SIXTEEN) & 0x00ff0000)| 
                        ((bInfo[5] << EIGHT) & 0x0000ff00)| 
                        bInfo[4] & 0x000000ff;
    
                // 图像高度(像素点)
                height = ((bInfo[11] << TWOFOUR) & 0xff000000)|
                         ((bInfo[10] << SIXTEEN) & 0x00ff0000)| 
                         ((bInfo[9] << EIGHT) & 0x0000ff00)| 
                         bInfo[EIGHT] & 0x000000ff;
                
                // 图像位数1 4 8 24
                bitCount =  ((bInfo[15] << EIGHT) & 0x0000ff00) | (bInfo[14] & 0x000000ff);
    
                // 图像大小。原始(:en:raw)位图数据的大小,不要与文件大小混淆
                size = ((bInfo[23] << TWOFOUR) & 0xff000000)| 
                       ((bInfo[22] << SIXTEEN) & 0x00ff0000)| 
                       ((bInfo[21] << EIGHT) & 0x0000ff00)| 
                       bInfo[20] & 0x000000ff;
    
                int pixelSize =0;
                int npad = 0;
                byte originalRGB[];
                int RGBDate[];
                Image image = null;
                if (bitCount == MULTICOLOUR) {
                    // 计算空字节
                    npad = (size / height) - width * 3;
                    if (npad == FOUR_BYTE) {
                        npad = ZERO;
                    }
                    
                    // 计算 pixel 大小
                    pixelSize = (width + npad) * 3 * height;
    
                    if (npad != ZERO) {
                        originalRGB = new byte[pixelSize];
                    } else {
                        originalRGB = new byte[size];
                    }
    
                    // 读取所有RGB数据
                    file.read(originalRGB, ZERO, pixelSize);
                    RGBDate = new int[height * width];
    
                    int index = 0;
                    for (int j = 0; j < height; j++) {
                        for (int i = 0; i < width; i++) {
                            RGBDate[width * (height - j - 1) + i] =
                                (255 & 0xff) << TWOFOUR 
                                | (((int)originalRGB[index + 2] & 0xff) << SIXTEEN)  
                                | (((int)originalRGB[index + 1] & 0xff) << EIGHT)  
                                | (int)originalRGB[index] & 0xff;
                            index += 3;
                        }
                        index += npad;
                    }
    
                    image = Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(width, height, RGBDate, 0, width));
                }
    
                if (bitCount == GRAY) {
                    // 计算空字节
                    npad = (size / height) - width;
                    if (npad == FOUR_BYTE) {
                        npad = ZERO;
                    }
                    
                    // 计算 pixel 大小
                    pixelSize = (width + npad) * height;
    
                    if (npad != ZERO) {
                        originalRGB = new byte[pixelSize];
                    } else {
                        originalRGB = new byte[size];
                    }
    
                	originalRGB = new byte[pixelSize];
                	
                    // 读取所有RGB数据
                    file.read(originalRGB, ZERO, pixelSize);
                    RGBDate = new int[height * width];
    
                    int index =ZERO;
                    for (int j = ZERO; j < height; j++) {
                        for (int i = ZERO; i < width; i++) {
                            if (index >= pixelSize){
                                index = ZERO;
                            }
                            RGBDate[width * (height - j - 1) + i] =
                                (255 & 0xff) << TWOFOUR  
                                | (((int)originalRGB[index] & 0xff) << SIXTEEN)  
                                | (((int)originalRGB[index] & 0xff) << EIGHT)  
                                | (int)originalRGB[index] & 0xff;
                            index += 1;
                        }
                        index += npad;
                    }
    
                    image = Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(width, height, RGBDate, 0, width));
                }
                file.close();
                return image;
            } catch (Exception e) {
               ;
            }
            return (Image)null;
    	}
    
    	public Image myWrite(Image image, String file) throws IOException {
            try {
                int height = image.getHeight(null);
                int width = image.getWidth(null);
                int fileType;
    
                if (bitCount == MULTICOLOUR){
                    fileType = BufferedImage.TYPE_3BYTE_BGR;
                }
                else{
                    fileType = BufferedImage.TYPE_BYTE_GRAY;
                }
    
                // 创建图片
                BufferedImage bi = new BufferedImage(width, height, fileType);
                bi.getGraphics().drawImage(image, 0, 0, null);
                // 打开文件
                File iFile= new File(file + ".bmp");
                ImageIO.write(bi, "bmp", iFile);
            } catch (Exception e) {
                ;
            }
    
    		return image;
    	}
    }
    

    MazeBug类要求我们实现一个能用深度优先搜索的Bug类能够自动的寻找迷宫的寻找路径,并且在拓展部分增加方向参数能够选择更大可能性的方向行走。

    其中最重要的是一个结构的理解,

    public Stack<ArrayList<Location>> crossLocation = new Stack<ArrayList<Location>>();

    我本来是觉得应该使用Stack<Location>的,所以比较不理解为什么使用上面那样的一个结构,后来我看了一遍大概的代码和实现过程,发现原来这里用来存储分支路径,而不是存储单个Loction。


    还有一个最后的内容就是实现华容道,这里要求我们实现用广度优先搜索和A*算法来减少对不要要结点的访问,从而实现更快的找到目标节点,更少的访问不必要的结点。其中要求我们写的程序能够通过简单的测试:test.sh。

    这部分的代码如下:(我已经尽自己最大努力将无关结点的访问量降到最低了)

    /**
     * 在此类中填充算法,完成重拼图游戏(N-数码问题)
     */
    public class Solution extends Jigsaw {
    
        private Queue<JigsawNode> exploreList;	// 用以保存已发现但未访问的节点
        private Set<JigsawNode> visitedList;	// 用以保存已发现的节点
    
        private List<JigsawNode> solutionPath;// 解路径:用以保存从起始状态到达目标状态的移动路径中的每一个状态节点
        private int searchedNodesNum;
    
    	/**
    	 * 拼图构造函数
    	 */
    	public Solution() {
    
    	}
    
    	/**
    	 * 拼图构造函数
    	 * @param bNode - 初始状态节点
    	 * @param eNode - 目标状态节点
    	 */
    	public Solution(JigsawNode bNode, JigsawNode eNode) {
    		super(bNode, eNode);
    	}
    
    
    	/**
    	 *(实验一)广度优先搜索算法,求指定5*5拼图(24-数码问题)的最优解
         * 填充此函数,可在Solution类中添加其他函数,属性
    	 * @param bNode - 初始状态节点
         * @param eNode - 目标状态节点
    	 * @return 搜索成功时为true,失败为false
    	 */
    	public boolean BFSearch(JigsawNode bNode, JigsawNode eNode) {
    		/**
    		 * 初始化一些数值,
    		 * 选择具体的queue类型和hashset
    		 */
    		searchedNodesNum = 0;
            solutionPath = null;
    		beginJNode = new JigsawNode(bNode);
            endJNode = new JigsawNode(eNode);
            currentJNode = new JigsawNode(bNode);
    
            exploreList = new LinkedList<>();
            visitedList = new HashSet<>();
    
    		int flag = 0;
    		/**
    		 * 将第一个节点压入队列
    		 */
            exploreList.add(beginJNode);
    		/**
    		 * 如果exploreLis列表为空,则搜索失败,问题无解;否则重复以下步骤:
    		 * a. 访问exploreLis列表中的第一个节点v,若v为目标节点,则搜索成功,退出。
    		 * b. 从exploreLis列表中删除节点v,放入visitedList列表中。
    		 * c. 将所有与v邻接且未曾被访问的节点放入exploreLis列表中。
    		 */
            while (!exploreList.isEmpty()) {
    			//计算访问的节点数,节点数超过29000将放弃
                searchedNodesNum++;
    			if(searchedNodesNum>=29000){
    				flag = 1;
    				break;
    			}
    
    			//访问结点
                currentJNode = exploreList.poll();
    			//找到了结点就退出
                if (currentJNode.equals(endJNode)) {
                    getPath();
                    break;
                }
    
                JigsawNode[] nextNodes = new JigsawNode[] {
                        new JigsawNode(currentJNode), new JigsawNode(currentJNode),
                        new JigsawNode(currentJNode), new JigsawNode(currentJNode)
                };
    			/**
    			 * 邻接点并且未访问的结点
    			 */
                for (int i = 0; i < 4; i++) {
                    if (nextNodes[i].move(i) && !visitedList.contains(nextNodes[i])) {
                        exploreList.add(nextNodes[i]);
                        visitedList.add(nextNodes[i]);
                    }
                }
            }
    		if(flag == 1){
    			System.out.println("Jigsaw BFSearch Result:");
            	System.out.println("Begin state:" + this.getBeginJNode().toString());
            	System.out.println("End state:" + this.getEndJNode().toString());
    			System.out.println("The number of node is more than 29000! ");
    		}else{
    			System.out.println("Jigsaw BFSearch Result:");
            	System.out.println("Begin state:" + this.getBeginJNode().toString());
            	System.out.println("End state:" + this.getEndJNode().toString());
            //	System.out.println("Solution Path: ");
            //	System.out.println(this.getSolutionPath());
            	System.out.println("Total number of searched nodes:" + searchedNodesNum);
            	System.out.println("Depth of the current node is:" + this.getCurrentJNode().getNodeDepth());	
    		}
    		return this.isCompleted();
    	}
    
    
    	/**
    	 *(Demo+实验二)计算并修改状态节点jNode的代价估计值:f(n)
    	 * 如 f(n) = s(n). s(n)代表后续节点不正确的数码个数
         * 此函数会改变该节点的estimatedValue属性值
         * 修改此函数,可在Solution类中添加其他函数,属性
    	 * @param jNode - 要计算代价估计值的节点
    	 */
    
    	public void estimateValue(JigsawNode jNode) {
    		int s = 0;                   // 后续节点不正确的数码个数
    		int wrong_num = 0;           // 放错位的数码个数
    		int  mafuman_Distance = 0;   // 曼哈顿距离
    		//int squre_Distance = 0;
    		int dimension = JigsawNode.getDimension(); //我们测试的默认维数是5
    		//注意第一个是空白格的位置,最后一个理论上是0,如果已经完成的话
    		for(int index = 1; index < dimension*dimension; index++){
    			if(jNode.getNodesState()[index] + 1 != jNode.getNodesState()[index+1])
    				s++;
    		}
    
    		//判断放错位置的结点
    		for(int index = 1; index <= dimension*dimension; index++){
    			if(jNode.getNodesState()[index] != index)
    				wrong_num++;
    		}
    		//判断距离,这里使用哈夫曼距离
    		for(int index = 1; index <= dimension*dimension; index++){
    			int realNum = jNode.getNodesState()[index];
    			if (realNum != index && realNum != 0) {
    				int realX = (realNum - 1) % dimension;
    				int realY = (realNum - 1) / dimension;
    				int indexX = (index - 1) % dimension;
    				int indexY = (index - 1) / dimension;
    				int distance = Math.abs(realX - indexX) + Math.abs(realY - indexY);
    				//double distance1 = Math.sqrt(Math.pow(realX - indexX, 2) + Math.pow(realY - indexY , 2));
    				mafuman_Distance += distance;
    				//squre_Distance += distance1;
    			}	
    		}
    		jNode.setEstimatedValue( 15 * s +  wrong_num + 10 *  mafuman_Distance  + jNode.getNodeDepth()); 
    		return ;
    	}
    }

       最后的一点总结和心得体会:这次实训还是学到了蛮多东西的,对于linux上使用也更加熟悉了一点,加深了对深度优先算法和广度优先算法的理解,短期时间学会了一门编程语言java,学会简单实用ant进行简单的编译运行打包等功能,学会用juint对类功能进行测试,学会使用sonar对代码语言风格进行了匡正和规范。总而言之,对于需要知识的我们是很有用的。当然这四周很累,还是希望四周结束之后能够给自己放一个小假,我想出去踏青了。最后的最后,希望大家都能享受愉快的生活!

                                                                       中山大学数据科学与计算机学院

                                                                      软件工程大二学生的实训总结报告

                                                                           2018年5月5日19点56分

                                                                             

    展开全文
  • JAVA 程序设计课程实训报告 一实训目的 知识目标 1了解图形用户界面的编程思路及方法 2了解事件及事件处理机制 3掌握常用的图形用户界面组件 4掌握容器布局的设置方法及组件的添加方法 5掌握常见事件类型及事件处理...
  • 精品文档 精品文档 收集于网络如有侵权请联系管理员删除 收集于网络如有侵权请联系管理员删除 精品文档 收集于网络如有侵权请联系管理员删除 JAVA程序设计课程实训报告 一实训目的 知识目标 1了解图形用户界面的编程...
  • 杨辉三角实验报告杨辉三角需求分析逐行打印二项展开式 (a + b)i 的系数要求:输入杨辉三角的阶数n,在屏幕上显示数杨辉三角形。输入的值n以小于12为宜(图形漂亮)。概要设计1. 首先初始化一个队列,元素为1,然后根据...

    杨辉三角实验报告

    杨辉三角需求分析逐行打印二项展开式 (a + b)i 的系数

    要求:输入杨辉三角的阶数n,在屏幕上显示数杨辉三角形。输入的值n以小于12为宜(图形漂亮)。概要设计1. 首先初始化一个队列,元素为1,然后根据这个队列迭代生成任意行的二项式系数。2. 判断用户输入的行数,然后决定循环次数。这些循环中,程序根据杨辉三角的实际构造函数模拟构造过程。每次形成一个新的二项式系数序列,并将这个序列 保持在一个新的队列中。本次循环结束后,这个心构造的序列将作为下次循环来构造另一个二项式序列的参照序列。

    详细设计定义队列结点typedef struct QNode{ int data; struct QNode *next; }QNode ,*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; 基本操作函数原型 队列初始化void InitQueue(LinkQueue *Q) { Q->front =Q->rear = (QueuePtr)malloc(sizeof(QNode)); if(!Q->front) printf("OVERFLOW"); Q->front->next= NULL; } 插入元素e为新的队尾元素void EnQueue(LinkQueue *Q,int e) { QNode *p; p = (QueuePtr)malloc(sizeof(QNode)); if(!p) printf("OVERFLOW"); p->data = e; p->next = NULL; Q->rear->next = p; Q->rear = p; } void DeQueue(LinkQueue *Q){ QNode *p; if(Q->front == Q->rear) printf("ERROR"); Q->front->next = Q->front->next->next; }美化形状for(i = 1;i <= n; i++) { printf("\n"); c=i;for(b=1;b<=n-c;c++){printf(" ");}}根据上行系数求下行系数for (j=1;j<=i+2;j++) { t = q->front->next->data; DeQueue (q); EnQueue (q,s+t); s = t; if (j!=i+2) printf("%3d ",s); } 调试分析美化形状时,第一次的输出空格的个数和位置考虑的有瑕疵,导致图像歪歪曲曲的。当输入数字较大时(比如19),阶数太大导致“杨辉三角”的图像没有出来。用户手册本程序的运行环境是win7操作系统,执行文件为:task.exe。进入时界面如下:

    测试结果

    实验总结1. 本次实验历时4个小时(课外时间另算),主要练习线性表中的队列的应用,涉及队列的删除,插入,搜索操作,基本涵盖了队列的应用范围。 2.“%3d”对图形的美化起到了关键作用。(想同学请教学得)3.实验中还是有些内容需要翻书才能解决,这反映了对书本内容的生疏。需要加强。附录程序源代码:#include #include #include #include typedef struct QNode{ int data; struct QNode *next; }QNode ,*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; //基本操作函数原型 void InitQueue(LinkQueue *Q) { //队列初始化 Q->front =Q->rear = (QueuePtr)malloc(sizeof(QNode)); if(!Q->fr

    展开全文
  • 本章的主要内容是设计开发一个支持连续计算的简单计算器...通过该项目的开发,使读者仅一步了解基于图形用户界面的Windows应用程序的开发过程,并通过项目实训的扩展练习加深印象,为开发较为复杂的应用程序打下基础。
  • 一目标 通过 Java 程序开发实训使学生掌握面向对象程序设计 (Java) 课堂讲授的内容灵活运用到 Java 程序的开发与设计 中 二要求 按时参加 Java 程序开发实训训练不得迟到和早退独立 完成程序设计按要求撰写实践报告 ...
  • 这里面包含的课程有: 《信息安全技术》 《公益活动》 《实习》 《工程实训》 《数据挖掘》 《现代企业管理》 《网络工程师综合训练》 《网络程序设计》 《计算机图形学(方向3)》 《软件工程综合训练(数据库课设...
  • 包含的课程有:《信息安全技术》、《公益活动》、《实习》、《工程实训》、《数据挖掘》、《现代企业管理》、《网络工程师综合训练》、《网络程序设计》、《计算机图形学(方向3)》、《软件工程综合训练(数据库...

      蒟蒻已经把所有文件都上传到GitHub百度网盘(验证码:pcw2)上了,可以自行下载。包含的课程有:《信息安全技术》、《公益活动》、《实习》、《工程实训》、《数据挖掘》、《现代企业管理》、《网络工程师综合训练》、《网络程序设计》、《计算机图形学(方向3)》、《软件工程综合训练(数据库课设)》以及在2020年-2021年第一学期用到的一些文件等,具体如图1所示。



    图 1 GitHub截图



       初衷:希望給后来人一个有益的参考。

    展开全文
  •   《工程实训》   《数据挖掘》   《现代企业管理》   《网络工程师综合训练》   《网络程序设计》   《计算机图形学(方向3)》   《软件工程综合训练(数据库课设)》   在2020年-2021年第一学期...
  • 课程实训 实训课时2个月 3-5名学员组成一个项目小组,项目自选,项目小组提交项目报告,经审核同意后拨付项目经费,在项目指导教师指导下项目实施,项目完成应有成型产品,组织召开项目完成报告会,项目小组提交项目...

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

图形设计实训报告