《实时控制软件设计》第一个编程作业
2015-10-29 10:39
501 查看
C++编程是基本功训练,邹欣老师在教学中,第一个作业是
详见 http://www.cnblogs.com/xinz/p/3803035.html
在此基础上,进一步可以完成第二个作业,进行模块化编程,信息隐藏,接口设计,TDD等方面的训练。
详见 http://www.cnblogs.com/xinz/p/4421170.html
侯捷老师在他的C++课程中,则以复数的运算为例讲解面向对象编程的关键知识点。
本课程以OROCOS机器人软件为主要实战对象,整个OROCOS软件包比较大,但OROCOS里有大量的矩阵运算,是通过调用一个线性代数的开源库Eigen实现的,所以应用Eigen进行矩阵运算完成编程练习,一方面易于上手,另一方面也有利于理解OROCOS的代码。
Eigen的库用起来很容易,只要把源代码下载到本地的开发环境,写一个最简单的程序:
然后编译运行,就可以在命令行环境中看到输入结果了。
因为采用C++编程,所以开发环境也有多种选择,如Ubuntu Linux/vim/gcc、Windows/Visual Studio, 由于OROCOS是用gcc编译器编译的,我们优先选用Ubuntu Linux/vim/gcc,如果你对Linux环境不熟悉,可以采用Windows下的轻量级开发环境Dev-C++,该软件也是基于gcc编译器。Dev-C++开发环境的建立过程如下:
1)到Dev-C++的官网上下载Dev-C++安装包,目前版本号是5.11,大约40多M,地址为:
http://sourceforge.net/projects/orwelldevcpp/?source=directory
2)运行该安装文件,按提示完成安装过程。
3)打开Dev-C++软件,新建一个新项目,新建一个main.cpp文件,把上面的程序代码拷贝到main.cpp文件中。
为了使上述代码能够运行,我们还必须在开发环境中集成Eigen库,为此:
4)到Eigen官网下载Eigen库软件压缩包,官网地址为:http://eigen.tuxfamily.org/
5)对压缩包解压缩到刚才新建的项目目录下。
6)点击Dev-C++的菜单“项目->项目属性”,在弹出对话框中选择“文件/目录”选项卡下的“包含文件目录”。
7)把Eigen代码所在的根目录添加到“包含文件目录”列表中,如下图所示。
8)现在编译运行程序,就可以看到运行结果了,如图所示。
在此基础上,同学们可以着手应用Eigen库完成一个具体的功能。参照邹欣老师布置的作业,我们的第一个“软件”开发作业如下:
花二十分钟写一个能自动生成小学四则运算题目的命令行 “软件”,要求: a) 除了整数以外,还要支持真分数的四则运算。 (例如: 1/6 + 1/8 = 7/24) b) 让程序能接受用户输入答案,并判定对错。 最后给出总共 对/错 的数量。
详见 http://www.cnblogs.com/xinz/p/3803035.html
在此基础上,进一步可以完成第二个作业,进行模块化编程,信息隐藏,接口设计,TDD等方面的训练。
详见 http://www.cnblogs.com/xinz/p/4421170.html
侯捷老师在他的C++课程中,则以复数的运算为例讲解面向对象编程的关键知识点。
本课程以OROCOS机器人软件为主要实战对象,整个OROCOS软件包比较大,但OROCOS里有大量的矩阵运算,是通过调用一个线性代数的开源库Eigen实现的,所以应用Eigen进行矩阵运算完成编程练习,一方面易于上手,另一方面也有利于理解OROCOS的代码。
Eigen的库用起来很容易,只要把源代码下载到本地的开发环境,写一个最简单的程序:
#include <iostream> #include <Eigen/Dense> using Eigen::MatrixXd; int main() { MatrixXd m(2,2); m(0,0) = 3; m(1,0) = 2.5; m(0,1) = -1; m(1,1) = m(1,0) + m(0,1); std::cout << m << std::endl; }
然后编译运行,就可以在命令行环境中看到输入结果了。
因为采用C++编程,所以开发环境也有多种选择,如Ubuntu Linux/vim/gcc、Windows/Visual Studio, 由于OROCOS是用gcc编译器编译的,我们优先选用Ubuntu Linux/vim/gcc,如果你对Linux环境不熟悉,可以采用Windows下的轻量级开发环境Dev-C++,该软件也是基于gcc编译器。Dev-C++开发环境的建立过程如下:
1)到Dev-C++的官网上下载Dev-C++安装包,目前版本号是5.11,大约40多M,地址为:
http://sourceforge.net/projects/orwelldevcpp/?source=directory
2)运行该安装文件,按提示完成安装过程。
3)打开Dev-C++软件,新建一个新项目,新建一个main.cpp文件,把上面的程序代码拷贝到main.cpp文件中。
为了使上述代码能够运行,我们还必须在开发环境中集成Eigen库,为此:
4)到Eigen官网下载Eigen库软件压缩包,官网地址为:http://eigen.tuxfamily.org/
5)对压缩包解压缩到刚才新建的项目目录下。
6)点击Dev-C++的菜单“项目->项目属性”,在弹出对话框中选择“文件/目录”选项卡下的“包含文件目录”。
7)把Eigen代码所在的根目录添加到“包含文件目录”列表中,如下图所示。
8)现在编译运行程序,就可以看到运行结果了,如图所示。
在此基础上,同学们可以着手应用Eigen库完成一个具体的功能。参照邹欣老师布置的作业,我们的第一个“软件”开发作业如下:
第一步: 写一个根据输入坐标生成一个平面图形(点、线段和三角形)并能对该几何图形进行平移和旋转操作的命令行 “软件”,要求: a) 通过命令行输入图形的名称,端点数(1为点,2为线段,3为三角形)和端点坐标(x,y)。 如:输入一个点 p1 1 (2,5) 输入一个线段 l1 2 (3,5) (4,6) 输入一个三角形 t1 3 (1,1) (2,5) (-4,7) b) 输入一个计算指令,实现对上述图形的平移和绕原点旋转等操作,并输出该图形新的坐标值。 如:move l1 (3,6) 表示把线段l1沿x方向移动3,沿y方向移动6。 rotate t1 -30 表示把三角形t1绕原点逆时针旋转30度。 程序设计要求使用Eigen库函数,(如觉得有难度可先用自己编写的函数实现,但在实现第二步前必须修改成使用Eigen库函数),先在博客上提交代码,并附上运行结果截图。同学之间可相互阅读博客,比较一下各自程序的功能、实现方法的异同。 第二步, 在小组内每个同学在如下方向中选择一个,进行功能扩展: a) 实现更复杂的二维图形操作,如定义更复杂的图形(多边形),实现图形围绕任意点的旋转,图形相对于某一条线的镜像,并考虑扩展到三维空间。 b) 把图形数据保存到文件,并能从文件中恢复。 c) 实现简易GUI,通过GUI输入图形坐标和操作命令,并显示图形。 考虑如何把上述三个软件功能集成在一起,如何定义接口? 估计做好这个软件需要的时间,并且写出大概的设计步骤和实现算法。
相关文章推荐
- XSS跨站测试代码大全
- python列表
- C++11:lambda表达式
- php 代码重用
- python字符串
- python文件处理
- django.relatedField-关联域
- java之静态初始化块
- python流程控制
- 1032. 挖掘机技术哪家强(20)
- ASP.NET中使用FTP
- python反射
- python学习笔记
- python内置函数
- django.contrib.auth.backend-后台
- JVM执行Java程序的过程中管理的内存空间
- Java:类中代码的执行顺序
- Java实现常见的7种排序算法
- 首个 C++ 编译器诞生 30 周年了,来听听 C++ 之父畅谈 C++
- Java中用JXL导出Excel代码详解