【软件构造】LAB1部分思路

1.Magic Squares

主要任务是判断矩阵是否为幻方。

1.1isLegalMagicSquare()

该部分大致分为以下几个步骤:

1.将文本读入,由此,我们可以得到行数row;
2.由于读入是按行读入的字符串,可以利用split()判断是否使用“\t”分割,以及得到列数,判断行列数是否相等;利用contains()判断是否有负数与小数;从而判断读入的矩阵是否合法;
3.利用循环,得出每行每列对角线之和,判断其是否相等,从而得出该矩阵是否为幻方

1.2generateMagicSquare()

首先,用户输入生成矩阵的宽度,若输入负数或偶数,则返回false;若是输入数据合法,则按照代码所示规则进行填写:

从第一行的中间开始向右上方填写,填写数字从1至n*n;填写到第一行后跳转到最后一行,填写到最后一列时跳转到第一列;每填写n个数向下移一行;直至填写完成;最后将生成的幻方写入文件并利用上一步的函数检测其是否为幻方。

出现如图所示的报错信息,第一个是数组越界,第二个是负数,因此出现错误;
报错信息
注释如图所示:
在这里插入图片描述
流程图如图所示:
在这里插入图片描述

2.Turtle Graphics

了解turtle中的一些函数,利用这些函数进行前进、旋转、涂色从而实现所需功能。

2.1 Problem 1: Clone and import

复制链接在浏览器中打开,克隆所需内容至本地并且移进本地仓库。本地仓库的建立则根据教程完成。

2.2 Problem 3: Turtle graphics and drawSquare

绘制一个正方形,代码比较简单,前进边长然后旋转90度,重复四次即可。

2.3 Problem 5: Drawing polygons

绘制多边形,该部分包含两个函数。

第一个函数是根据边数计算内角大小:所有正多边形外交和为360度,通过(360/边数),可以计算获得外角大小,再用(180-外角)即为所求内角大小。

第二个函数是根据内角大小求边数:与上述过程刚好相逆,先用(180-内角)求出外角大小,在用(360/外角)求出边数,这里需要注意的是,角度类型为double,所以所求边数需要先四舍五入,强制类型转换,转化为int型。

绘制多边形,首先通过边数求出旋转角度(即外角),前进边长然后进行旋转,重复边数次。

2.4 Problem 6: Calculating Bearings

第一个函数:通过反三角函数计算出该向量与y轴的角度,再减去初始角度即可。注意:这里说的角度是顺时针角度,其次,返回角度值大于等于0,小于360;

第二个函数:从第一个点到第二个点,默认初始角度为0,之后每一次循环的初始角度,都是之前所的角度的累加值,利用第一个函数进行循环,即可得出答案。

2.5 Problem 7: Convex Hulls

该部分为凸包问题,首先寻找到最左下方的点(一定在凸包上的点),之后依次遍历,寻找到偏转角最小的点,若偏转角度数相同,寻找最远的点。最后将这些点返回。

2.6 Problem 8: Personal art

我设计的图形如下:
在这里插入图片描述

2.7 Submitting

首先将所需文件复制到个人仓库中,利用git add ./git commit/git push等指令将文件上传到GitHub。

3.Social Network

利用点代表人,是否有边代表人与人是否认识,从而获取关系图,最后通过函数计算两点之间的最近距离。

3.1 设计/实现FriendshipGraph类

首先创建一个节点类,每个节点代表一个人,创建一个名字列表,存入所有人的名字;添加节点时,如果与已有名字重复则退出,否则新建一个节点,将这个人存入;添加边时,在person列表中找到对应的节点,然后插入链表中;在计算两个结点的路径中,将一个点设为起点,另一个点为终点,采用bfs 算法,将起点加入队列(distance为0),队列头出队列并将其相邻的点入队(distance值为出队点distance值+1),并且设为已访问,直至终点入队,从而得出结果。

3.2 设计/实现Person类

Person类比较简单,大概有四个功能:1.将节点添加至person类;2.返回节点的名字;3.添加好友;4.返回好友列表。

3.2 设计/实现客户端代码main()

首先创建四个对象,创建结点将其存入,加入无向图,最后求得两结点之间的距离。

3.4设计/实现测试用例

首先通过创建对象测试addVertextest();加入无向图边测试addEdgetest(),最后计算两结点之间的距离测试getDistancetest()。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值