• 《实时控制软件设计》第一个编程作业


    C++编程是基本功训练,邹欣老师在教学中,第一个作业是

     花二十分钟写一个能自动生成小学四则运算题目的命令行 “软件”,要求:
     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输入图形坐标和操作命令,并显示图形。
     
     考虑如何把上述三个软件功能集成在一起,如何定义接口?
    
     估计做好这个软件需要的时间,并且写出大概的设计步骤和实现算法。
  • 相关阅读:
    从零开始编写网络游戏 --- 基础篇
    分治算法
    arm-linux-gcc-4.5.1安装方法
    linux双显卡解决方案
    Mac快捷键整理(随时更新)
    MacBook连接蓝牙鼠标、蓝牙键盘失败的解决方案
    IDEA for Mac 快捷键整理
    禁用win10笔记本自带键盘
    写给自己的博客初心:博客选择,为什么写博客?怎么写?写什么?
    Hexo框架的微博搭建
  • 原文地址:https://www.cnblogs.com/bingc/p/4919692.html
Copyright © 2020-2023  润新知