C++大作业个人报告.docx

上传人:b****5 文档编号:10172403 上传时间:2023-02-09 格式:DOCX 页数:12 大小:146.15KB
下载 相关 举报
C++大作业个人报告.docx_第1页
第1页 / 共12页
C++大作业个人报告.docx_第2页
第2页 / 共12页
C++大作业个人报告.docx_第3页
第3页 / 共12页
C++大作业个人报告.docx_第4页
第4页 / 共12页
C++大作业个人报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C++大作业个人报告.docx

《C++大作业个人报告.docx》由会员分享,可在线阅读,更多相关《C++大作业个人报告.docx(12页珍藏版)》请在冰豆网上搜索。

C++大作业个人报告.docx

C++大作业个人报告

C++大作业个人工作总结

1.个人分工

(1)编写地图类CFixedMap和AGV类CAGV;

(2)编写类CPathPlan中将地图转换为有向图的成员函数MaptoGraph();

(3)编写类CPathPlan中的Putpath函数的文件输出部分;

(4)程序后期优化;

(5)答辩PPT制作;

大作业项目报告制作。

2.心得体会

不得不说,这次的大作业比起上次的有着天壤之别。

上次所做的一个小程序,完全不涉及到任何插件,我一个人也没写多久就完成了。

而这次所做的大作业,我们小组3个人一起做了许多努力,但最终实际上并没有达到预期目标。

对我个人来说,本次大作业让我理解到团队合作的重要性,项目规划的必要性。

由于小组几人一开始都各自独立写代码,负责整合的我实在大伤脑筋。

花了很大力气,才最终完成。

虽然我负责的部分比较简单,但我因此帮助小组其他成员做了许多工作。

例如,与文件流有关的工作全部是由我完成的;相关文件大都由我完成。

可以说这些工作比较繁重,但是最后能够看到成果,还是很让人欣慰的。

3.所做工作

(1)文本文档读入地图信息

在最初的设计中,为了方便调试与信息录入,地图文本做的粗糙不堪,但这确实为程序编写提供了许多便利。

如图,优化前的地图文件:

可以看出,全都是由数字组成,如果不了解程序,就不知道文件包含了什么,应该怎样修改。

在优化时,加入了大量提示信息,由此也出现了问题。

由于文件流输入无法判断输入的信息类型,造成了将提示信息录入而无法得到正确信息的错误。

为解决这一问题,我使用了一个简单的手段,即将提示信息与地图信息分隔,并分别录入,然后不再处理提示信息。

改进后的地图文本如下:

(2)采用C++和easyX软件显示地图。

这一部分相对比较简单,只需要稍微学习一下easyx插件就能完成。

地图显示分为了两个部分。

第一步是画点并标注点的标号,第二部分是连线。

值得一提的是,要将连通点的编号转化为相应的坐标看似简单,但我直接使用for循环和if语句却总是无法实现,最后只好写了两个函数getx和gety来解决这个问题。

几幅地图:

(3)编写将地图转换为有向图的成员函数MaptoGraph();

这个函数含有邻接矩阵的内容,本来认为比较难,但实际上也就一般。

函数分为两个部分,其一是初始化矩阵,两点间如果有连线距离就初始化为0,否则初始化为dMax。

第二部分是连通点间的距离向矩阵的输入,由于矩阵是对称的,因此一次可以录入两个值。

以下是调试时输出的矩阵:

(4)后期优化与尝试增加AGV台数

优化时改进了主程序的执行,增加了许多量的初始化,以实现自动完成参数设置;此外将各个部分的代码进行格式修正和精简。

虽然尝试增加AGV台数,也能轻松地添加路径,但是用sleep实现的动态显示部分实在无法改进。

而又已经没有足够的时间来改写计时器,因此两台AGV未能实现。

以下是一些测试截图

4.代码(约170行)

#include

#include

#include

#include

#include

#include

#include

#defineMAX100

#definemaxD99999

classCFixedMap

{

public:

structCoordinate

{

intx;

inty;

intnum;

};//记录点的结构体

structCombname

{

intnum1;

intnum2;

};//连通点名

structcombp

{

intx1,y1;

intx2,y2;

};//连通点坐标

intmVexNum;//顶点数

intmEdgNum;//边数

CoordinatemVexs[MAX];//顶点集合

doublemMatrix[MAX][MAX];//邻接矩阵

Combnamecomb[MAX];//连通点名

combpcp[MAX];//连通点坐标

//以文件方式输入地图信息

voidInput()

{

intpanju;

charfname[10]={"map2.txt"};

cout<<"是否载入默认地图?

(1:

是,2:

否)";

cin>>panju;

if(panju==2)

{

cout<<"请输入地图信息文件名:

";

cin>>fname;

}

ifstreamfile(fname);

charuse1[100];

charuse2[100];

charuse3[100];

charuse4[100];

file>>use1;

file>>mVexNum;

file>>use2;

file>>mEdgNum;

file>>use3;

for(inti=0;i

{

file>>mVexs[i].num>>mVexs[i].x>>mVexs[i].y;

}

file>>use4;

for(i=0;i

{

file>>comb[i].num1>>comb[i].num2;

}

file.close();

}

intgetx(intn1)

{

intx=0;

for(inti=0;i

if(n1==mVexs[i].num)

x=mVexs[i].x;

returnx;

}

intgety(intn2)

{

inty=0;

for(inti=0;i

if(n2==mVexs[i].num)

y=mVexs[i].y;

returny;

}

//easyx显示地图

voidShowMap()

{

initgraph(800,600,SHOWCONSOLE|NOCLOSE);//初始化绘图环境

setbkcolor(WHITE);//设置背景色

cleardevice();//用背景色清空屏幕

setfillcolor(BLACK);//设置填充色

//画顶点

for(inti=0;i

{

fillcircle(mVexs[i].x,mVexs[i].y,5);

settextcolor(BLACK);

chars[MAX];

sprintf(s,"%d",i+1);

outtextxy(mVexs[i].x-10,mVexs[i].y-20,s);

}

//给实际连通的顶点连线

setlinecolor(RGB(0,0,0));

setlinestyle(PS_SOLID,6,NULL,0);

for(i=0;i

{

cp[i].x1=getx(comb[i].num1);

cp[i].y1=gety(comb[i].num1);

cp[i].x2=getx(comb[i].num2);

cp[i].y2=gety(comb[i].num2);

line(cp[i].x1,cp[i].y1,cp[i].x2,cp[i].y2);

}

}

};

classCPathPlan:

publicCFixedMap

{

public:

intpath[MAX];

intpath2[MAX];//存放最后一个点

doubledist[MAX];

doubledist2[MAX];//存放路径距离

intv0;

intv1;//起始点

introute[40];

introute2[40];//路径

intrnum;

intrnum2;//路径顶点数

Coordinaterpoints[MAX];

Coordinaterpoints2[MAX];//路径点集

voidMaptoGraph()

{

rnum=0;

rnum2=0;

inta,b,x,y;

for(inti=0;i

{

for(intj=0;j

{

if(i==j)

{

mMatrix[i][j]=0;

}

else

{

mMatrix[i][j]=maxD;

}

}

}

for(i=0;i

{

if(comb[i].num1)

{

a=comb[i].num1-1;

b=comb[i].num2-1;

x=mVexs[a].x-mVexs[b].x;

y=mVexs[a].y-mVexs[b].y;

mMatrix[a][b]=sqrt(x*x+y*y);

mMatrix[b][a]=sqrt(x*x+y*y);

}

}

}

voidmain(void)

{

CAGVShowa;

a.Input();

a.MaptoGraph();

intpanju;

cout<<"多次演示?

(1:

是,2:

否)";

cin>>panju;

if(panju==1)

{

for(inti=0;i<20;i++)

{

a.ShowMap();

a.Dijstra();

a.Putpath();

if(a.anum==2)

{

a.Dijstra2();

a.Putpath2();

}

a.show();

}

}

else

{

a.ShowMap();

a.Dijstra();

a.Putpath();

if(a.anum==2)

{

a.Dijstra2();

a.Putpath2();

}

a.show();

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1