SClab1

目录
1
实验目标概述 ........................................................................................................................ 1
2
实验环境配置 ........................................................................................................................ 1
3
实验过程 ................................................................................................................................ 1
3.1 Magic Squares.................................................................................................................. 1
3.1.1
isLegalMagicSquare() ...................................................................................... 1
3.1.2
generateMagicSquare() ....................................................................................3
3.2 Turtle Graphics................................................................................................................. 4
3.2.1 Problem 1: Clone and import.....................................................................................5
3.2.2 Problem 3: Turtle graphics and drawSquare ...........................................................5
3.2.3 Problem 5: Drawing polygons................................................................................... 5
3.2.4 Problem 6: Calculating Bearings............................................................................... 6
3.2.5 Problem 7: Convex Hulls...........................................................................................6
3.2.6 Problem 8: Personal art..............................................................................................7
3.2.7 Submitting..................................................................................................................7
3.3 Social Network................................................................................................................. 7
3.3.1
设计 / 实现 FriendshipGraph .......................................................................... 7
3.3.2
设计 / 实现 Person ............................................................................................ 10
3.3.3
设计 / 实现客户端代码 main() ............................................................................. 10
3.3.4
设计 / 实现测试用例 ............................................................................................... 11
4
实验进度记录 ...................................................................................................................... 14
5
实验过程中遇到的困难与解决途径 .................................................................................. 14
6
实验过程中收获的经验、教训、感想 .............................................................................. 14
6.1
实验过程中收获的经验和教训 ................................................................................... 14
6.2
针对以下方面的感受 ................................................................................................... 14 软件构造课程实验报告
实验 1 Java 基础编程与测试
1
1 实验目标概述
本次实验通过求解三个问题,训练基本
Java 编程技能,能够利用 Java OO
发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够
为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确
性。
另一方面 ,利用 Git 作为代码配置管理的工具,学会 Git 的基本使用方法。
基本的 Java OO 编程
基于
Eclipse IDE 进行 Java 编程
基于
JUnit 的测试
基于
Git 的代码配置管理
2 实验环境配置
简要陈述你配置本次实验所需开发、测试、运行环境的过程,必要时可以给
出屏幕截图。
特别是要记录配置过程中遇到的问题和困难,以及如何解决的。
3 实验过程
请仔细对照实验手册,针对四个问题中的每一项任务,在下面各节中记录你
的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码
加以说明(但无需把你的源代码全部粘贴过来!)。
为了条理清晰,可根据需要在各节增加三级标题。
3.1 Magic Squares
幻方是一种每行和、每列和以及对角线和均位同一常数的 n*n 矩阵。
3.1.1 isLegalMagicSquare()
1.根据文件名访问并读取对应文件:
1)已知文件存储在项目的\ src \ P1 \ txt \文件夹下,可利用相对路径访问文件并
创建 file 对象; 软件构造课程实验报告
实验 1 Java 基础编程与测试
2
2)通过 file 对象读取文件大小 filelongth ,新建对应大小的 byte []数组
filecontent 存储文件内容;
3)将读取的文件内容转化为" UTF -8"编码的字符串存储在 content 字符串中;
2. 对文件内容进行分割得到数据
1)利用"\n"对字符串 content 进行分割,从而得到各行数据以及矩阵行数;
2)对数据进行处理,判断矩阵数据的合法性并分离出各数据的值同时得到各
行各列以及对角线的和
3)通过各行各列以及对角线的和判断矩阵是否为 MagicSquare
Main 函数: 软件构造课程实验报告
实验 1 Java 基础编程与测试
3
3.1.2 generateMagicSquare()
首先从初始位置 (0,n/2) 开始,赋值为 1 ,之后每次取当前位置右上的位置,
当前数值 +1 填入下一个位置。当前在第一行时,下一个位置在第 n 行;当前位
置在第 n 列时,下一个位置在第 1 列。如此循环 n*n 次后,填满整个 n*n 的矩阵,
且经过验证,这样的矩阵满足幻方的定义。 软件构造课程实验报告
实验 1 Java 基础编程与测试
4
3.2 Turtle Graphics
根据代码注释提示补全代码从而实现一个绘制工具 Turtle Graphics
1 、从 Github 上获取任务的源代码,在本地创建 git 仓库,使用 git 管理本地开发
2 、画出正四边形。
3 、完成正多边形内角和外角的计算 软件构造课程实验报告
实验 1 Java 基础编程与测试
5
4 、计算向量之间的夹角
5 、计算凸包
6 、绘制自己的图形。
3.2.1 Problem 1: Clone and import
github 上获取代码:网页 download 。从本地创建 git 仓库: 1 git init 初始
化本地仓库 2 git add remote 添加远程库源 3 、在远程仓库创建 master 分支 4
git pull origin master 将远程仓库同步到本地 5 git add * ->git commit -m “” ->git
push 将本地文件加入到本地仓库,将本地仓库同步到远程仓库。
3.2.2 Problem 3: Turtle graphics and drawSquare
1、首先发现 forward turn 函数的功能是实现给定参数的前进和转向
2、我们通过四次循环,每次前进并转 90°就可以得到我们想要的正方形
3.2.3 Problem 5: Drawing polygons
1、利用公式:正多边形的每个内角=180°*(sides -2)/sides 补全
calculateRegularPolygonAngle
2 由上述公式可以逆推出:正多边形边数=360°/(180°-angle),由此可以补全
calculatePolygonSidesFromAngle
3 、补全 drawRegularPolygon 软件构造课程实验报告
实验 1 Java 基础编程与测试
6
3.2.4 Problem 6: Calculating Bearings
利用 atan2 函数计算前进方向与 x 轴正向夹角,之后把该角度转换成和 y 正
向的夹角。若出现负数要加上 360°。
3.2.5 Problem 7: Convex Hulls
运用 Gift wrapping algorithm 算法,每次选择转向角最小且距离最长的点加入
集合。 软件构造课程实验报告
实验 1 Java 基础编程与测试
7
3.2.6
Problem 8: Personal art
3.2.7
Submitting
git add *->git commit -m “” ->git push 提交到 Lab1 仓库
3.3 Social Network
利用各种数据结构,实现一张人际关系网络。写一个计算人际关系 距离
函数
3.3.1 设计 / 实现 FriendshipGraph
建立两个 List 分别储存人物和姓名。其中 List name 用来检测人名是否重复。 软件构造课程实验报告
实验 1 Java 基础编程与测试
8
检测输入人名是否重复,不重复则列入两表中,表示改人物已被录入。
Person1 Person2 认识, Person2 出现在 Person1 fiend 列表(即邻接表)
中。 软件构造课程实验报告
实验 1 Java 基础编程与测试
9
若二人认识,函数返回关系网中二人的最短路径,否则将返回 -1 表示二者不
可能认识。 软件构造课程实验报告
实验 1 Java 基础编程与测试
10
3.3.2 设计 / 实现 Person
Person 类中储存了任务的姓名以及其直接认识的人。
3.3.3 设计 / 实现客户端代码 main()
直接使用实验手册中提供的 main 函数。 软件构造课程实验报告
实验 1 Java 基础编程与测试
11
结果为:
3.3.4 设计 / 实现测试用例
测试 addVertex 软件构造课程实验报告
实验 1 Java 基础编程与测试
12
测试 addEdge
测试 getDistance
建立一个这样的社交网络: 软件构造课程实验报告
实验 1 Java 基础编程与测试
13
结果如下: 软件构造课程实验报告
实验 1 Java 基础编程与测试
14
4 实验进度记录
请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。
日期
时间段
任务
实际完成情况
2021-05-18
22:00-24:00
1
isLegalMagicSquare
函数并进
行测试
按计划完成
2021-05-20
22:00-24:00
完成 p1 以及 turtle 的初步调试
按计划完成
2021-05-21
15:30-20:00
完成 p2
遇到困难,未完
2021-05-22
10:00-13:00
完成 p2
按计划完成
2021-05-22
19:00-22:00
完成 p3 主体程序
按计划完成
2021-05-23
10:00-14:00
完成测试用例的编写
按计划完成
5 实验过程中遇到的困难与解决途径
遇到的难点
解决途径
不知道如何进行文件操作
在网络上查找资料学习
不知道如何对 Set 中元素
进行操作
在网络上查找资料学习
6 实验过程中收获的经验、教训、感想
6.1
实验过程中收获的经验和教训
6.2
针对以下方面的感受
(1) Java 编程语言是否对你的口味?
Java 作为一种面向对象的编程语言,提供了比面向过程的 C 语言更加丰
富的数据结构,对不同的场景能够提供 软件构造课程实验报告
实验 1 Java 基础编程与测试
15
(2)
关于 Eclipse IDE
IDE 的功能繁多,刚上手会对 eclipse 的使用有些懵。
(3)
关于 Git GitHub
Git 的入门上手较为简单,尤其是版本控制功能尤为好用。 Github 可以用
来与他人共享自己的成果
(4)
关于 CMU MIT 的作业
作业难度不大。
(5)
关于本实验的工作量、难度、 deadline
工作量适中,难度也不是很大, deadline 很宽松,有充足的时间来做实
验。
(6) 关于初接触“软件构造”课程
开始两周所学的课程基本上都属于概念层面,初步了解了课程对软件质
量的注重。
OFDM(正交频分复用)是一种高效的多载波通信技术,它将高速数据流拆分为多个低速子流,并通过多个并行的低带宽子载波传输。这种技术具有高频谱效率、强抗多径衰落能力和灵活的带宽分配优势。 OFDM系统利用大量正交子载波传输数据,子载波间的正交性可有效避免码间干扰(ISI)。其数学表达为多个离散子载波信号的线性组合,调制和解调过程通过FFT(快速傅立叶变换)和IFFT(逆快速傅立叶变换)实现。其关键流程包括:数据符号映射到子载波、IFFT转换为时域信号、添加循环前缀以减少ISI、信道传输、接收端FFT恢复子载波数据和解调原始数据。 Matlab是一种广泛应用于科研、工程和数据分析的高级编程语言和交互式环境。在OFDM系统设计中,首先需掌握Matlab基础,包括编程语法、函数库和工具箱。接着,根据OFDM原理构建系统模型,实现IFFT/FFT变换、循环前缀处理和信道建模等关键算法,并通过改变参数(如信噪比、调制方式)评估系统性能。最后,利用Matlab的绘图功能展示仿真结果,如误码率(BER)曲线等。 无线通信中主要考虑加性高斯白噪声(AWGN),其在频带上均匀分布且统计独立。通过仿真OFDM系统,可在不同信噪比下测量并绘制BER曲线。分析重点包括:不同调制方式(如BPSK、QPSK)对BER的影响、循环前缀长度选择对性能的影响以及信道估计误差对BER的影响。 OFDM技术广泛应用于多个领域,如数字音频广播(DAB)、地面数字电视广播(DVB-T)、无线局域网(WLAN)以及4G/LTE和5G移动通信,是这些通信标准中的核心技术之一。 深入研究基于Matlab的OFDM系统设计与仿真,有助于加深对OFDM技术的理解,并提升解决实际通信问题的能力。仿真得到的关键性能指标(如BER曲线)对评估系统可靠性至关重要。未来可进一步探索复杂信道条件下的OFDM性能及系统优化,以适应不同应用场景
51单片机是电子工程领域常用的入门级微控制器,广泛应用于小型电子设备,例如电子时钟。本项目将介绍如何利用51单片机设计一款简单的电子时钟,并通过Keil软件进行程序开发,同时借助Proteus仿真工具进行电路模拟,帮助初学者掌握51单片机的基础应用。 51单片机基于Intel 8051内核,集成了CPU、RAM、ROM、定时器/计数器和I/O端口等功能模块,具有易于编程和性价比高的优势。在电子时钟项目中,主要利用其定时器实现时间的精确计算。Keil μVision是51单片机的常用开发环境,支持C语言和汇编语言编程。开发时,需编写代码以控制单片机显示和更新时间,包括初始化时钟硬件、设置定时器中断、编写中断服务程序以及与LCD显示屏交互等步骤。关键环节如下:一是初始化,配置时钟源(如外部晶振)设定工作频率;二是定时器设置,选择合适模式(如模式1或模式2),设置计数初值以获得所需时间分辨率;三是中断服务,编写定时器中断服务程序,定时器溢出时更新时间并触发中断;四是显示控制,通过I/O端口驱动LCD显示屏显示当前时间。 Proteus是一款虚拟原型设计软件,可用于模拟硬件电路,帮助开发者在编程前验证电路设计。在Proteus中,可搭建51单片机、LCD模块、晶振及电阻、电容等元件,形成电子时钟电路模型。运行仿真后,可观察程序在实际电路中的运行情况,及时发现并解决问题。 实际项目中,51单片机电子时钟还涉及以下知识点:一是时钟信号产生,定时器通过计数外部时钟脉冲实现时间累计,可通过调整晶振频率和定时器初始值设置不同时间间隔;二是LCD接口,需理解LCD的命令和数据传输协议,以及如何控制背光、显示模式、行列地址等;三是中断系统,了解中断概念、中断向量及程序中中断的启用和禁用方法;四是数码管显示,若使用数码管而非LCD,需了解其显示原理及段选、位选的驱动方式。 本项目融合了单片机基础、
在机器人技术领域,机械臂的避障路径规划是一项关键任务,而本压缩包中的资源专注于利用蚁群算法解决三维空间中的路径规划问题。蚁群算法(Ant Colony Optimization,ACO)是一种仿生优化算法,其灵感来源于蚂蚁在寻找食物时的信息素沉积行为,能够有效找到全局最优解,尤其适合复杂路径规划。 蚁群算法由Marco Dorigo等人提出,模拟蚂蚁寻找食物路径时释放信息素的过程。在算法中,每条可能路径被视作“虚拟”蚂蚁的路径,蚂蚁在移动时会留下信息素。信息素浓度会随时间蒸发,同时被新经过的蚂蚁加强。通过迭代,算法优化路径选择,强化高效路径,最终找到全局最优解。 在机械臂避障路径规划中,三维空间路径规划尤为重要。为此,通常将三维空间划分为网格,每个小格子代表一种状态,如无障碍、障碍或未知。通过判断每个格子的状态,确定机械臂的可行移动区域,即“可视区域”。蚁群算法应用于该三维网格,寻找从起点到终点的最佳路径。每只蚂蚁在网格上随机移动时,会考虑信息素浓度和距离因素。高浓度信息素路径更易被选择,短距离路径更具吸引力。经过多次迭代,信息素逐渐积累在最优路径上,从而得出避开障碍物的最短路径。 实际应用中,机械臂路径规划需考虑运动学限制,如关节角度范围、速度限制等,同时实时性也至关重要,算法需快速生成新路径以适应动态环境。因此,蚁群算法常与其他优化方法结合,如遗传算法或粒子群优化,以提升计算效率和路径质量。 压缩包内文件可能包含算法源代码、数据结构定义、模拟环境设定及结果可视化等内容。通过这些资源,学习者可深入了解蚁群算法在机械臂避障路径规划中的实现,并直观理解三维路径规划。该应用涉及机器人学、计算机科学、控制理论等多学科交叉,通过仿真项目,既能加深对算法的理解,又能培养解决实际问题的能力。无论是学术研究还是工业应用,掌握这种路径规划方法都极具价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值