DS博客作业01--日期抽象数据类型设计与实现

本文分享了数据结构的学习体会,强调了利用网络资源的重要性,并详细介绍了使用C++实现日期抽象数据类型(ADT)的过程,包括设计、封装及具体实现方法。

1.本章学习总结

1.1思维导图

1474718-20190310191252484-1259388163.png

1.2 本章学习体会

新学期,开始学数据结构,一开始并不能理解数据结构到底是干什么的,可能是在上学期程序设计语言的基础上学得更深吧,后来通过预习,差不多知道数据结构是干什么的,通俗点就是学程序小作文呗……
学习确实比较吃力,一定原因是上学期C语言肯可能学得不扎实吧,另一方面,乍一开始使用C++,确实不顺手,不过多亏了晓淞在博客里给了一个神奇的网站,对于使用C++特别有帮助
感觉大学学习中,很重要的一点是,好好利用百度。

2.大作业

2.1设计日期的ADT类型

ADT Date
{
数据对象:
D={year,month,day|year,month,day都属于int类型}
数据关系:
R={<year,montn>,<month,day>}
数据操作:
status InitDate(Date &date,int year,int month,int day);
//操作结果:构造一个三元组date,year,month,day被赋予值

status DestroyDate(Date &date);
//操作结果:销毁三元组
 
string PrintDate(Date date);
//初始条件:date存在
//操作结果:以1900/01/01的形式返回string

status IsLeap(Date date);
//初始条件:date存在
//操作结果,判断是不是闰年,是闰年返回TURE,不是闰年返回FALSE

string Aweekday(Date date);
//初始条件:date存在
//操作结果:判断这天是星期几,并以“星期几”的形式返回string

string Amonth(Date date);
//操作条件:date存在
//操作结果:以该月份的英文返回string
 

}ADT Date

2.2.数据抽象:头文件

1474718-20190310192435649-358738834.png

2.3数据封装说明

(1)构造三元组

将从文件中读取的数组传入函数,构造三元组。
1474718-20190310192636082-656432858.png

(2)输出日期

挺简单不解释
1474718-20190310193152757-1573532939.png

(3)判断闰年

之前也做过,不解释

1474718-20190310193135697-1175965189.png

(4)判断星期几

在优快云上搜的,一个公式
1474718-20190310193239770-1670096065.png

(5)返回月份的英文

1474718-20190310193310839-1039972479.png

(6)判断日期大小

比较粗暴的一个方法,就是相当于都转化成天:年366+月31+日

比较粗暴。

1474718-20190310205533426-806483262.png

(7)加日期

这个是最难的函数,没有之一。
把单独的日和要加的日期加在一起,然后判断够不够一个月,够不够一年,逐级加,注意要判断闰年。
1474718-20190310205948240-2068192070.png

(8)主函数

1474718-20190310210010507-1378096410.png

1474718-20190310210017517-1998545014.png

2.3测试数据

1474718-20190310210300889-1831273728.png

1474718-20190310210307650-1141262934.png

1474718-20190310210319175-1097936964.png

2.4测试中遇到的问题

1.不熟悉C++的代码,一些算法也不清楚,看了晓淞推荐的网站,对C++基础的cin,cout有了一定了解,算法和文件函数的运用则查优快云和博客园,

总之,代码写的好,优快云不可少。

2.在判断星期几的时候,一开始没有定义year,month,day来临时存储数据,而是直接改了三元组的数据,然后就出BUG了,想了好久(大佬不要嘲笑我),睡了一觉,哦,我明白了

好好写代码吧,写完之后有神奇的事情发生,亲测。

转载于:https://www.cnblogs.com/qsls8643/p/10507196.html

先展示下效果 https://pan.quark.cn/s/a4b39357ea24 遗传算法 - 简书 遗传算法的理论是根据达尔文进化论而设计出来的算法: 人是朝着好的方向(最优解)进化,进化过程中,会自动选择优良基因,淘汰劣等基因。 遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。 进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择、杂交等。 搜索算法的共同特征为: 首先组成一组候选解 依据某些适应性条件测算这些候选解的适应度 根据适应度保留某些候选解,放弃其他候选解 对保留的候选解进行某些操作,生成新的候选解 遗传算法流程 遗传算法的一般步骤 my_fitness函数 评估每条染色体所对应个体的适应度 升序排列适应度评估值,选出 前 parent_number 个 个体作为 待选 parent 种群(适应度函数的值越小越好) 从 待选 parent 种群 中随机选择 2 个个体作为父方和母方。 抽取父母双方的染色体,进行交叉,产生 2 个子代。 (交叉概率) 对子代(parent + 生成的 child)的染色体进行变异。 (变异概率) 重复3,4,5步骤,直到新种群(parentnumber + childnumber)的产生。 循环以上步骤直至找到满意的解。 名词解释 交叉概率:两个个体进行交配的概率。 例如,交配概率为0.8,则80%的“夫妻”会生育后代。 变异概率:所有的基因中发生变异的占总体的比例。 GA函数 适应度函数 适应度函数由解决的问题决定。 举一个平方和的例子。 简单的平方和问题 求函数的最小值,其中每个变量的取值区间都是 [-1, ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值