MOOS-ivp 实验五 MOOS编程进阶(2)
MOOS-ivp 实验五 MOOS编程进阶(2)
今天继续我的实验,感觉每个实验都要被卡住,这种感觉真的好难受,但是如果把问题成功的解决掉,又会给人以非常大的成就感。今天写这篇博客,希望我可以相对顺利的把自己想做的内容做出来。
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- MOOS-ivp 实验五 MOOS编程进阶(2)
- 前言
- 四、C++STL内容补充
- 五、质因数分解程序
- 1.算法原理
- 2.迁移到MOOS系统中来
- 3.最后结果
- 总结
前言
最后还是被C++的使用所卡住了,主要感觉自己还是算法使用方法的掌握不足,没办法实现最后的功能。这个我在此做一个记号,如果以后学习到了足够的知识再回过头来解决它,卡住钻牛角尖浪费时间无疑是一个相对比较愚蠢的行为
提示:以下是本篇文章正文内容,下面案例可供参考
四、C++STL内容补充
在编写程序过程中使用到了两个STL库中的list和vector下面把其大概用法列举一下:
vector
list
示例:使用list添加和删除元素
添加元素:
1 #include <list>
2 #include <string>
3
4 list<string> my_strings;
5 my_strings.push_back("apples");
6 my_strings.push_back("watermelons");
7 my_strings.push_back("pears");
8 my_strings.push_back("blackberry");
9
10 list<string>::iterator p;
11 for(p=my_strings.begin(); p!=my_strings.end(); p++) {12 string str = *p;
13 if(str.length() > 6)
14 cout << "Long fruit name: " << str << endl;
15 }
16 cout << "List size: " << my_strings.size() << endl;
运行后可以得到结果:
Long fruit name: watermelons
Long fruit name: blackberry
List size: 4
删除元素:
1 #include <list>
2 #include <string>
3
4 list<string> my_strings;
5 my_strings.push_back("apples");
6 my_strings.push_back("watermelons");
7 my_strings.push_back("pears");
8 my_strings.push_back("blackberry");9
9
10 list<string>::iterator p;
11 for(p=my_strings.begin(); p!=my_strings.end(); ) {12 string str = *p;
13 if(str.length() > 6) {14 cout << "Removing long fruit: " << str << endl;
15 p = my_strings.erase(p);
16 }
17 else
18 ++p;
29 }
20 cout << "List size: " << my_strings.size() << endl;
运行后可以得到结果:
Removing long fruit: watermelons
Removing long fruit: blackberry
List size: 2
五、质因数分解程序
1.算法原理
算法原理非常简单,主要是使用循环不断的对原数据进行取余运算,将质因数单独记录下来然后进行发布
代码如下(示例):
// CPP.cpp : 定义控制台应用程序的入口点。
//#include<iostream>
#include<cstdlib>
#include<cmath>using namespace std;int main()
{int n, i;cout << "Please input a integer\n";cin >> n;if (n <= 0){cout << "Your input is not larger than 0.\n";exit(-1);}cout << n << "=";while (n % 2 == 0 && n != 2){cout << "2*";n /= 2;}int val = sqrt(n);for (i = 3; i <= val; i += 2){while (val >= i){if (n % i == 0){cout << i << '*';n /= i;val = sqrt(n);}elsebreak;}}cout << n << endl;return 0;
}
2.迁移到MOOS系统中来
代码如下(示例):
/************************************************************/
/* NAME: Pitt Gao */
/* ORGN: MIT */
/* FILE: PrimeFactor.cpp */
/* DATE: */
/************************************************************/#include <iterator>
#include "MBUtils.h"
#include "PrimeFactor.h"
#include <cstdlib>
#include <sstream>
#include <cmath>
using namespace std;//---------------------------------------------------------
// ConstructorPrimeFactor::PrimeFactor()
{m_iterations = 0;m_timewarp = 1;m_value = 0;m_str = "";
}//---------------------------------------------------------
// DestructorPrimeFactor::~PrimeFactor()
{}//---------------------------------------------------------
// Procedure: OnNewMailbool PrimeFactor::OnNewMail(MOOSMSG_LIST &NewMail)
{MOOSMSG_LIST::iterator p;for(p=NewMail.begin(); p!=NewMail.end(); p++) {CMOOSMsg &msg = *p;#if 0 // Keep these around just for templatestring key = msg.GetKey();string comm = msg.GetCommunity();double dval = msg.GetDouble();string sval = msg.GetString();string msrc = msg.GetSource();double mtime = msg.GetTime();bool mdbl = msg.IsDouble();bool mstr = msg.IsString();
#endifstring key = msg.GetKey();if(key == "NUM_VALUE"){string m_str = msg.GetString();m_stringslist.push_back(m_str);}}return(true);
}//---------------------------------------------------------
// Procedure: OnConnectToServerbool PrimeFactor::OnConnectToServer()
{// register for variables here// possibly look at the mission file?// m_MissionReader.GetConfigurationParam("Name", <string>);// m_Comms.Register("VARNAME", 0);RegisterVariables();return(true);
}//---------------------------------------------------------
// Procedure: Iterate()
// happens AppTick times per secondbool PrimeFactor::Iterate()
{m_iterations++;list<string>::iterator p;string str ="";for(p=m_stringslist.begin(); p!=m_stringslist.end();p++ ) {string str = *p;string str_answer = str+"=";m_value = strtoul(str.c_str(), NULL, 0);while (m_value % 2 == 0 && m_value != 2){str_answer = str_answer +"2:";m_value /= 2;}unsigned long int val = sqrt(m_value);unsigned long int i;for (i = 3; i <= val; i += 2){while (val >= i){if (m_value % i == 0){stringstream ss;ss << i;string str1 = ss.str();str_answer = str_answer +str1+":";m_value /= i;val = sqrt(m_value);}elsebreak;}}stringstream ss;ss << m_value;string str1 = ss.str();str_answer = str_answer +str1;Notify("NUM_RESULT", str_answer);p = m_stringslist.erase(p);return(true);
}//---------------------------------------------------------
// Procedure: OnStartUp()
// happens before connection is openbool PrimeFactor::OnStartUp()
{list<string> sParams;m_MissionReader.EnableVerbatimQuoting(false);if(m_MissionReader.GetConfiguration(GetAppName(), sParams)) {list<string>::iterator p;for(p=sParams.begin(); p!=sParams.end(); p++) {string original_line = *p;string param = stripBlankEnds(toupper(biteString(*p, '=')));string value = stripBlankEnds(*p);if(param == "FOO") {//handled}else if(param == "BAR") {//handled}}}m_timewarp = GetMOOSTimeWarp();RegisterVariables();return(true);
}//---------------------------------------------------------
// Procedure: RegisterVariablesvoid PrimeFactor::RegisterVariables()
{// m_Comms.Register("FOOBAR", 0);Register("NUM_VALUE", 0);
}
3.最后结果
质因数成功被分解,但是以我目前的知识水平还是不能够做到去实现小位数的数据不被大位数的数据所中断。这个需要额外的一些内容,我们需要不仅能存储原始的整数,还能存储到目前为止找到的素数列表,以及先前工作停止的一些指示。这个应该可以用vector来实现,但是我还是没有想出来该如何编写,最后附上教程中发布的一个头文件,它希望我们自己添加上相应的程序文件,来实现我所说的功能。
// File: PrimeEntry.h
#include <string>
#include <vector>
#include <cstdint>
#ifndef PRIME_ENTRY_HEADER
#define PRIME_ENTRY_HEADER
class PrimeEntry
{public:
PrimeEntry();
~PrimeEntry() {};
void setOriginalVal(unsigned long int v);
void setReceivedIndex(unsigned int v) {m_received_index=v;};
void setCalculatedIndex(unsigned int v) {m_calculated_index=v;};
void setDone(bool v) {m_done=v;};
bool done() {return(m_done);};
bool factor(unsigned long int max_steps);
std::string getReport();
protected:
uint64_t m_start_index;
uint64_t m_orig;
bool m_done;
unsigned int m_received_index;
unsigned int m_calculated_index;
std::vector<uint64_t> m_factors;
};
#endif
总结
在这里耗时大约已有三天,虽然深感自己C++所学不足,但是归根结底学习MOOS是主要目的。对于C++的深入学习在以后也希望可以补足上来,将代码的最后一部分进行完善。
MOOS-ivp 实验五 MOOS编程进阶(2)相关推荐
- MOOS-ivp 实验五 MOOS编程进阶(3)
MOOS-ivp 实验五 MOOS编程进阶(3) 经过近日的学习与摸索,我来重新完善以下实验五的相关内容,上次做到三分之二的内容放弃了,主要原因还是因为C++功底不够深厚,需要更多的学习和积累.经过我 ...
- java 网络实验_Java实验五网络编程与安全
实验五 网络编程与安全 实验准备 活动一 两人一组结对编程: 0. 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 1. 结对实现中缀表达式 ...
- 20165201 实验五 网络编程与安全
##20165201 实验五 网络编程与安全 网络编程与安全-1 实验目的与要求: 两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.html#S ...
- 2017-2018-2 20165329 实验五 网络编程与安全
2017-2018-2 20165329 实验五 网络编程与安全 实验报告封面 课程:Java程序设计 班级:1653班 姓名:何佳伟 学号:20165329 指导教师:娄嘉鹏 实验日期:2018年5 ...
- #20175201 实验五 网络编程与安全
一.实验五 网络编程与安全-1 1.实验要求: 两人一组结对编程: (1)参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA : (2)结对实现 ...
- 实验五 网络编程与安全-----实验报告
一.实验五 网络编程与安全-1 1.实验要求: 两人一组结对编程: (1)参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA : (2)结对实现 ...
- java小球碰撞实验报告_20155317 《Java程序设计》实验五网络编程与安全实验报告...
20155317 <Java程序设计>实验五网络编程与安全实验报告 遇到问题 在刚开始启动客户端或者服务端时,出现了一系列的错误情况,总是提示异常信息 后来经过询问同学,反应将端口号修改一 ...
- 2016-2017-2 20155322 实验五 网络编程与安全
2016-2017-2 20155322 实验五 网络编程与安全 目录 1. 目录 1.1 实践一 1.2 实践二 1.3 实践二 1.4 实践二 1.5 实践二 2.实验心得与体会 3.PSP(Pe ...
- 实验五 网络编程与安全
一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:高君天 学号:20165319 指导教师:娄嘉鹏 实验日期:2018年5月28日 实验时间:13:45 - 3:25 实验序号:实验五 ...
最新文章
- C++编程进阶1(对于单纯的常量,用const替换#define、operator[]与const)
- Crawler:基于urllib+requests库+伪装浏览器实现爬取国内知名招聘网站,上海地区与机器学习有关的招聘信息(2018.4.30之前)并保存在csv文件内
- 阿里宣布成立云原生技术委员会,释放哪些趋势信息?
- linux终端使用python3,3 个 Python 命令行工具 | Linux 中国
- 网口扫盲二:Mac与Phy组成原理的简单分析(转)
- 飞腾 linux 内核,FT2004-Xenomai
- k2p 官方固件_继斐讯K2P之后,红米AC2100也将成一代路由器神机?
- PHP 父类静态方法中调用子类静态方法
- Android实践--监測网络状态
- VMware Player 4.0.2 英文官方原版
- Fritzing软件绘制Arduino面包板接线图传感器模块库文件186
- 还不知道切图吗,工作实战手把手教你PS切图,0基础轻松掌握
- matlab矩阵处理实验报告,MATLAB矩阵实验报告.doc
- java——MP3转wav
- arm-linux-gcc踩坑1
- 医疗器械A类B类C类物料区分
- Java如何爬虫奥运奖牌榜数据,恭喜中国获得东京奥运会首金!
- 网页学习小技巧哈哈哈
- 最新:亚马逊运营思路
- 如何确定试管婴儿胚胎质量