- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
-
程序源代码的相似性
一、课题内容和要求
对于两个C++语言的源程序代码,用哈希表的方法分别统计两个程序中使用C++语言关键字的情况,并最终按定量的计算结果,得出两份程序的相似性。 ? 基本要求:建立C++语言关键字的哈希表,统计在每个源程序中C++关键字出现的频度, 得到两个向量X1和X2,通过计算向量X1和X2的相对距离来判断两个源程序的相似性。
例如: ? ? 关键字 Void Int For Char if else while do break class
程序1关键字频度 4 3 0 4 3 0 7 0 0 2程序2关键字频度 4 2 0 5 4 0 5 2 0 1 X1=[4,3,0,4,3,0,7,0,0,2]
X2=[4,2,0,5,4,0,5,2,0,1]? 设s是向量X1和X2的相对距离,s=sqrt( ∑(xi1-xi2) 2 ),当X1=X2时,s=0, 反映出可能是同一个程序;s值越大,则两个程序的差别可能也越大。
测试数据: 选择若干组编译和运行都无误的C++程序,程序之间有相近的和差别大的,用上述方法求s, 对比两个程序的相似性。
二、课题需求分析
1.需求分析
软件的基本功能、输入/输出形式、测试数据要求。
该软件能够比较两个源程序代码的相似度。需要用户输入两个源代码的文件名,系统会自动计算出两个程序中关键字的个数,并进行对比,而且计算出两个程序的相似度并输出,用户可以根据,系统输出相似度的大小,来估计两个程序相似的概率。 ?
2.概要设计
抽象数据类型、主程序流程及模块调用关系。
该程序用到的数据结构主要是哈希表,其次是顺序表:哈希表的功能是统计文件里出现的关键字的个数,通过++模式,该程序主要统计了C++的十个常用关键字break,char,class,do,else,for,if,int,void,while出现的频度,在Hash类里定义了一个哈希表,哈希表的大小为十个整形数据,哈希表里的十个数据是与已知的十个关键字一一对应的,顺序表用于存放处理后的数据。
主程序流程:图2.1
图2.1 主程序流程
3.详细设计
实现概要设计的数据类型、主程序以及其它模块的算法描述。
数据类型有哈希表,顺序表。
ADT 类 class Hash如图2.2:
图2.2 ADT类class Hash
这个程序主要包括三个函数
(1)主函数 int main() 负责调用其他的函数
(2)文件处理函数 count fileProcessed(char sourceData[],count)对文件进行处理
(3)相似度计算函数double possibality(Hash hash1,Hash hash2)根据已有的公式计算相似度。
三、课题相关数据结构及算法设计
1 主要数据结构
主程序为:
int main()
{
char operation;
cout 其他键开始比较 E 程序结束:endl ;
cinoperation;
while(operation != E)
{
int count1 = 1; //1,2用于判断第一个文件或者第二个文件
int count2 = 2;//定义两个字符数组,用于存放经过处理后的文件的字符///////
char sourceData1[M];///////第一个字符数组///////////////
char sourceData2[M];///////第二个字符数组///////////////
count1 = fileProcessed(sourceData1,count1); //数组赋值并返回字符个数
count2 = fileProcessed(sourceData2,count2);
Hash hash1(sourceData1,count1); //定义第一个哈希表
Hash hash2(sourceData2,count2); //定义第二个
hash1.calcuNum(); //计算1中每个关键字的频度
hash2.calcuNum();
coutbreak char class do else for if int void whileendl;
hash1.Display(); //输出第一个哈希表中关键字的个数
hash2.Display(); //输出第二个
cout相似度为: possibality(hash1,hash2)endl;
cino
您可能关注的文档
- 小学英语单词趣味游戏-动物类-Animals-Hidden.ppt
- 某县地块拆迁安置房工程.doc
- 《兼并与重组》案例分析报告.doc
- 广乐高速施工组织设计7(1新).doc
- 柔版印刷网纹辊.pptx
- 我国商业银行个人理财业务中的风险及其防范文献综述.docx
- 2018年学习【新修订纪律处分条例】心得体会.docx
- 三亚生态建设与环境保护.doc
- 食品政策与法规.docx
- 党支部整改提升方案 (1).doc
- 中考英语单项选择百题分类训练:专题27 情景交际100题 .pdf
- 中考英语复习资料:3.易错易混淆短语及习题-2024年中考复习常用短语.docx
- 中考英语单项选择百题分类训练:专题08 形容词100题 .pdf
- 中考英语单项选择百题分类训练:专题07 代词100题 (1).pdf
- 中考英语复习资料:专题03 完形填空(10空题)-5年(2019-2023)中考1年模拟英语真题分项汇编(全国通用)(解析版).pdf
- 中考英语复习资料:七年级下册Unit 7-9 复习课件 2024届九年级中考人教版英语一轮复习.pptx
- 中考英语复习资料:专题05 阅读理解之记叙文-5年(2019-2023)中考1年模拟英语真题分项汇编(全国通用)(原卷版).pdf
- 中考英语复习资料:1.含有不定式和动名词的短语-2024年中考复习常用短语.docx
- 中考英语复习资料:专题05 阅读理解之记叙文-5年(2019-2023)中考1年模拟英语真题分项汇编(全国通用)(解析版).pdf
- 中考英语复习资料:专题02 完形填空(1-5空题)-5年(2019-2023)中考1年模拟英语真题分项汇编(全国通用)(原卷版).pdf
最近下载
- 2023年广东省中考道德与法治试卷真题.docx
- 2024年中国银行春季校园招聘1万余人笔试备考题库及答案解析.docx
- 2021年高考历史真题试卷(广东卷)含答案.docx VIP
- 心理咨询师案例分析真题与答案及心理咨询师案例教程.docx
- 2024年南阳职业学院辅导员招聘考试笔试题库及答案解析.docx
- Q_320684FUM01-2019水溶性建筑胶粘剂.pdf
- 《工业机器人操作与编程》课堂革命典型案例.docx VIP
- “红旗杯”竞赛总题库-5班组长团队管理能力考试题库(附答案).pdf VIP
- 2021年美国大学生数学建模竞赛题目B--扑灭野火范文五篇(含Matlab源码).pdf
- 2024年南阳农业职业学院教师招聘考试笔试模拟试题及答案解析.docx
文档评论(0)