确认下要不要买电影票
- 学习强国41分
- 10道OJ题
- 看两篇专利
- 学MATLAB RoboticTools
11 逆序输出1到4位正整数
问题描述 :
输入一个不多于4位的正整数,要求按逆序打印出各个位上的数字,例如原数为23,应输出32;如原数为8000,应输出0008;如原数为1,则输出1。应测试以下情况:输入的数为1位、2位、3位、4位正整数;此外,还应测试以下异常情况:输入负数或0,或输入的数超过4位。
输入说明 :
输入一个整数,可能为0,也可能为负数。
输出说明 :
输入1到4位的正整数时,输出该数的逆序,如果是其它整数,则输出“error!”。输出时,行首与行尾均无空格。
#include <cmath>
#include<cstring>
using namespace std;
int main()
{
string a;
cin>>a;
//cout<<a[0];代表输入字符串中第一位的东西
if (a[0] == '0' || a.length()>4||a[0]=='-')
{
printf("error!");
return 0;
}
for (int i = a.length() - 1; i >= 0; i--)//a.length()
{
cout << a[i];
}
cout << endl;
return 0;
}
12 简单加减乘除
问题描述 :
从键盘输入两个实数到变量a和b中,然后输入一个数字代表进行的运算,该数字为1则代表对a和b做加法,2代表减法,3代表乘法,4代表除法。
如果输入1 3 4,表示进行1/3的操作,结果为0.333333。输出时,保留两位小数,因此输出0.33。
注:可直接使用printf的控制格式实现保留两位小数的目的。
输入说明 :
输入两个实数,再输入一个1到4的整数,三个数字之间以空格分隔。
输出说明 :
输出计算结果,保留两位小数。如果做除法,但分母是0,则输出“error!”。输出时,行首与行尾均无空格。
#include <iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int main()
{
//cout<<"input 2 num and one operator(1:+ 2:- 3:* 4:/)"<<endl; oj系统的输入输出必须完全一样,不要自己加某句输入输出
float a,b,ans;
int op;
cin>>a>>b>>op;
switch (op){
case 1:
ans=a+b;
printf("%.2f",ans);break;
case 2:
ans=a-b;
printf("%.2f",ans);break;
case 3:
ans=a*b;
printf("%.2f",ans);break;
case 4:
if (b!=0){
ans=a/b;
printf("%.2f",ans);
}
else{
cout<<"error!"<<endl;
};
break;
}
//printf("%.2f",ans);
return 0;
}
13 字母的前趋或后继
问题描述 :
输入一个小写英文字母。如果这个字母是英文字母表的前13个字母中的一个(m字母及m以前的字母),则输出它的后一个字母;否则输出它的前一个字母。 比如输入a,则输出b,输入z,则输出y。
输入说明 :
输入一个小写字母,不需要考虑其它字符。在行首和行尾没有多余的空格。
输出说明 :
对应输入的小写字母,输出它对应的前趋或后继字母。行首和行尾不要输出多余的空格。
#include <iostream>
using namespace std;
int main()
{
char a;
cin>>a;
if ((int)a<=109){
cout<<(char)(a+1)<<endl;
}
else{
cout<<(char)(a-1)<<endl;
}
return 0;
}
14 门票价格计算
问题描述 :
某旅游景点门票价格为每人5元。但团体可以优惠,分为以下情况:
人数超过20,则所有人优惠10%;
人数超过40,则所有人优惠15%;
人数超过80,则所有人优惠20%;
人数超过120,则所有人优惠30%。
请跟据团体的人数,求出该团体的总门票价格。
输入说明 :
输入一个整数i(0≤i≤1,000),表示一个团体的总人数。在行首和行尾没有多余的空格。
输出说明 :
输出一个实数,即该团体需要支付的总票价,精确到小数点后2位。在行首和行尾不要输出多余的空格。
#include <iostream>
#include<cstdio>
using namespace std;
int main()
{
int num;
float total;
cin>>num;
if(num>120){
total=5*num*0.7;
}
else if(num>80){
total=5*num*0.8;
}
else if(num>40){
total=5*num*0.85;
}
else if(num>20){
total=5*num*0.9;
}
else{
total=5*num;
}
printf("%.2f",total);
return 0;
}
15 星期几问题
问题描述 :
根据一个范围在0至6的整数,用英文输出它对应的是星期几。(0对应Sunday,1对应Monday, 2对应Tuesday, 3对应Wednesday, 4对应Thursday, 5对应Friday, 6对应Saturday)
输入说明 :
输入一个整数n(0 ≤ n ≤ 6)。在行首和行尾没有多余的空格。
输出说明 :
输出一个字符串,即输入n对应的星期几的英文名称,请注意大小写。在行首和行尾不要输出多余的空格。
#include <iostream>
using namespace std;
int main()
{
int a;
cin>>a;
switch(a){
case 0:
cout<<"Sunday";break;
case 1:
cout<<"Monday";break;
case 2:
cout<<"Tuesday";break;
case 3:
cout<<"Wednesday";break;
case 4:
cout<<"Thursday";break;
case 5:
cout<<"Friday";break;
case 6:
cout<<"Saturday";break;
}
return 0;
}
16 时间相加
问题描述 :
输入两个时间A和B,分别都由3个整数组成,分别表示时分秒,比如,假设A为34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。
输出A+B即两个时间相加后的结果。
输入说明 :
输入数据由6个整数AH,AM,AS,BH,BM,BS组成,分别表示时间A和B所对应的时分秒。题目保证所有的数据合法。
输出说明 :
输出A+B,输出结果也由时分秒三部分组成,同时也要满足时间的规则(即:分和秒的取值范围在0~59),输出仅占一行,整数之间以一个空格分隔,行首与行尾无多余空格。
#include <iostream>
using namespace std;
int main()
{
int AH,AM,AS,BH,BM,BS;
int H,M,S;
cin>>AH>>AM>>AS>>BH>>BM>>BS;
S=(BS+AS)%60;
M=(BM+AM+(BS+AS)/60)%60;
H=AH+BH+(BM+AM+(BS+AS)/60)/60;
cout <<H<<" "<<M<<" "<<S<< endl;
return 0;
}
17 成绩转换
问题描述 :
输入一个百分制的成绩t,将其转换成对应的等级,具体转换规则如下:
90~100为A;
80~89为B;
70~79为C;
60~69为D;
0~59为E;
输入说明 :
输入一个整数。
输出说明 :
输出对应结果,占一行。如果输入数据不在0~100范围内,请输出一行:“Score is error!”。
注意:无多余空格。
#include <iostream>
using namespace std;
int main()
{
int t;
cin>>t;
switch(t/10){
case 10:
case 9:
cout<<"A";break;
case 8:
cout<<"B";break;
case 7:
cout<<"C";break;
case 6:
cout<<"D";break;
default:
cout<<"E";break;
}
return 0;
}
18 A+B
问题描述 :
计算两个数的和
输入说明 :
第一行为N 以下N行,每行两个数A,B
输出说明 :
输出N行 每行为A+B的值
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int n,a,b,c;
cin>>n;
while(n!=0)
{
cin>>a>>b;
c=a+b;
cout<<c<<endl;
n=n-1; //n--;
}
return 0;
}
19 字母的前趋或后继
问题描述 :
输入一个小写英文字母。如果这个字母是英文字母表的前13个字母中的一个(m字母及m以前的字母),则输出它的后一个字母;否则输出它的前一个字母。
输入说明 :
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据占一行,由一个小写字母组成。在行首和行尾没有多余的空格。
输出说明 :
对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的文本终端)依次输出一组对应的答案。对应每一个输入的小写字母,输出它对应的前趋或后继字母,每行一个。在所有数据前后不要输出多余的空行,两组数据之间也不要输出多余的空行。
19和20题,我写的代码可以通过oj系统,但是在单个逐行输入/输出这部分,我还没搞明白。。还要再改
#include <iostream>
#include<cstdio>
using namespace std;
int change(char a){
if ((int)a<=109){
cout<<(char)(a+1)<<endl;
}
else{
cout<<(char)(a-1)<<endl;
}
return 0;
}
int main()
{
char a;
while (scanf("%c\n",&a)!=EOF){
change(a);
};
return 0;
}
20 幼儿园分班问题
问题描述 :
某幼儿园只招收2至6岁的小孩。2、3岁入小班,4岁入中班,5、6岁入大班。给出一个孩子的年龄,请问他应该被分到什么班。
输入说明 :
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据占一行,其中只包含一个整数i(1≤i≤10),表示一个孩子的年龄。在行首和行尾没有多余的空格。
输出说明 :
对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的文本终端,例如你在Windows中启动该程序所用的命令行终端)依次输出一组对应的答案。每组答案占一行,其中包含这个孩子应该进入的班级。如果是小班,则输出“One.”;如果是中班,则输出:“Two.”;如果是大班,则输出:“Three.”;如果该孩子的年龄不能进入幼儿园,则输出:“No.”。在行首和行尾不要输出多余的空格;在所有数据前后不要输出多余的空行;两组数据之间也不要输出多余的空行。
#include <iostream>
#include<cstdio>
using namespace std;
int fenban(int age)
{
if(age>6){
cout<<"No."<<endl;
}
else if(age>4){
cout<<"Three."<<endl;
}
else if(age>3){
cout<<"Two."<<endl;
}
else if(age>1){
cout<<"One."<<endl;
}
else{
cout<<"No."<<endl;
}
return 0;}
int main()
{
int age;
while (scanf("%d\n",&age)!=EOF){
fenban(age);
};
return 0;
}
功能的实现:
1、 保留小数点后两位数
#include<iomanip>//要用到格式控制符,用来保留小数点后2位
……
cout<<fixed<<setprecision(2)<<Distance<<endl;;//这里Distance是个浮点型变量
//使用setprecision(n)可控制输出流显示浮点数的数字个数
//如果和fixed合用的话,可以控制小数点后面有几位
//没有fixed的话,控制的是浮点型总的输出个数(小数点前和后)
或者不用添加头文件,使用下列输出格式
printf("%.2lf0000",f);//%lf 输出长双精度型数据 .2 代表保留两位小数 0000代表输出4个0
2、 类型转换
char c;//小写转大写
cin>>c;
cout<<(char)(c-32)<<endl;
//这里的(char)是将字符型变量c与32相减后,得到的整型再转换为字符型,对应ASCII
//同理,(int)c 可将字符型转换为整型
3、向下取整——实现四舍五入到小数点后一位
total=floor(10.0*ave+0.5)/10*num;//floor()函数 向下取整
printf("%.2f",total);//输出浮点型数据,保留两位小数
例如,ave=4.67
4.67*10+0.5=47.2===>floor()=47.0===>/10=4.7
4、 cin ch等价于ch=getchar()
MATLAB RT
开启工具箱
startup_rvc
以下内容来自《机器人仿真与编程技术》杨辰光 李智军 许扬编著 清华大学出版社
侵权必删
围绕X轴做转角为180°的旋转变换:
R=rotx(pi)
如果直接用角度θ表示,可以分别用rotx(θ,‘deg’),roty(θ,‘deg’),rotz(θ,‘deg’)计算旋转矩阵。
R=rotx(180,'deg')
以上两种方式,都可以得到旋转矩阵。
函数trplot()可以用图形表示相应的体坐标系,函数tranimate()用动画展示世界坐标系旋转为体坐标系的过程。
trplot(R)
tranimate(R)
函数解析
1)获取旋转矩阵
(1)rotx():R=rotx(θ)是表示围绕X轴旋转弧度为θ得到的旋转矩阵,返回一个3X3的矩阵。
(2)roty():R=roty(θ)是表示围绕Y轴旋转弧度为θ得到的旋转矩阵,返回一个3X3的矩阵。
(3)rotx():R=rotz(θ)是表示围绕Z轴旋转弧度为θ得到的旋转矩阵,返回一个3X3的矩阵。
以上三个函数中,可选参数为“deg”,表示角度值,单位为度(degree)。
2)绘制坐标系
函数为:trplot()
(1)trplot®:绘制由旋转矩阵得到的坐标系,其中坐标系根据正交旋转矩阵围绕原矩阵得到,R为3X3的矩阵。
(2)trplot(T):绘制由骑次变换矩阵T表示的三维坐标系,其中T为4X4的矩阵。
还包含许多可选参数
参数 | 意义 | 参数 | 意义 |
---|---|---|---|
‘noaxes’ | 再绘图上不显示坐标轴 | ‘axis’,A | 将图形显示的轴尺寸设置为A,其中A=[xmin xmax ymin ymax z min z max] |
‘color’,C | 设置轴的颜色,C代表MATLAB图形内置的颜色类型 | ‘frame’,F | 将绘制出来的坐标系命名为F。并且X,Y,Z轴的下标含有F |
‘tetx_opts’,opt | 调整显示文本的字体大小等属性;例如{‘FontSize’,10,‘FontWeight’,‘blod’} | ‘view’,V | 设置绘图视图参数V=[az el]角度,或者对于坐标系的原点查看‘auto’ |
‘length’,s | 坐标轴的长度(默认值1) | ‘arrow’ | 设置坐标轴的末端为箭头,而不是线段 |
‘width’,w | 箭头宽度(默认为1) | ‘thick’,t | 线条粗细(默认0.5) |
‘3d’ | 在三维空间中使用浮雕图形绘制 | ‘anaglyph’,A | 将“3d”的浮雕颜色指定为左右两个字符(默认颜色为红色“rc”:选自红,绿,蓝,青,品红) |
‘dispar’,D | 3d显示差异(默认0.1) | ‘text’ | 启用在框架上显示X,Y,Z标签 |
‘labels’,L | 使用字符串L的第1个,第2个,第3个字符标记X,Y,Z轴 | ‘rgb’ | 以红色,绿色,蓝色分别显示X,Y,Z轴 |
3)动画展示
函数为:tranimate()。
(1)tranimate(x1,x2,options)展示3D坐标系从姿态x1变换到姿态x2的动画效果。其中,姿态x1和x2由三种表示方法:一个4X4的齐次矩阵,或一个3X3的旋转矩阵,或一个四元数。
(2)tranimate(x,options)展示了坐标系由上一个姿态变换到姿态x的动画效果。同样的,姿态x也有三种表示方法:一个4X4的齐次矩阵,或一个3X3的旋转矩阵,或一个四元数。
(3)tranimate(xseq,options)展示了移动一段轨迹的动画效果。xseq可以是一组4X4XN的齐次矩阵,或一组3X3XN的旋转矩阵,或是一组四元数向量(NX1)。
它包含的可选参数如下:
参数 | 意义 | 参数 | 意义 |
---|---|---|---|
‘fps’,fps | 每秒显示的帧数(默认为10) | ‘nsteps’,n | 沿路径的步数(默认为50) |
‘axis’,A | 设置三个轴的边界,A=[xmin xmax ymin ymax z min z max] | ‘movie’,M | 将帧保留位文件夹M中的文件,M为文件的路径 |
坐标变换
1平移坐标变换
函数transl()计算一段平移相对应平移变换矩阵。
2旋转坐标变换
trotx(),troty(),trotz()三个函数计算旋转变换矩阵,分别对应着X轴、Y轴和Z轴旋转一定的焦距,得到的是一个4X4的矩阵。
3齐次坐标变换
关于齐次变换矩阵 BAT ,机器人工具箱提供了函数t2r()可以提取旋转矩阵分量。而r2t()则可以将旋转矩阵转换成对应的齐次变换矩阵。
通过tranl()提取平移变换分量。
4本节函数解析
1)平移变换transl()
(1)使用transl()创建平移变换矩阵。
T=transl(x,y,z):表示能够获取一个分别沿着x,y,z轴平移一段距离得到的4x4齐次变换矩阵。
T=transl(p):表示经过矩阵(或向量)p=[x,y,z]的平移得到的齐次变换矩阵。如果p为(Mx3)的矩阵,则T为一组齐次变换矩阵(4x4xM),其中T(:,:,i)对应于p的第i行。
(2)使用transl()提取一个矩阵中的平移变换分量。
[x,y,z]=transl(T):x,y,z是齐次变换矩阵中的三个分量,是一个1
xM的向量。
p=transl(T):p是齐次变换矩阵中T的平移部分,是一个3xM的矩阵。
2)旋转坐标变换
(1)T=trotx(θ):表示围绕X轴旋转θ(弧度)得到的齐次变换矩阵(4x4)。
(2)T=troty(θ):表示围绕Y轴旋转θ(弧度)得到的齐次变换矩阵(4x4)。
(3)T=trotz(θ):表示围绕Z轴旋转θ(弧度)得到的齐次变换矩阵(4x4)。
以上3个函数中,可选参数为deg,表示角度值,单位为度(degree)。
3)t2r
R=t2r(T)获取齐次变换矩阵T中正交旋转矩阵分量。如果T是一个4x4的矩阵,则R是一个3x3的矩阵;如果T是一个3x3的矩阵,则R是一个2x2的矩阵。
4)r2t()
函数r2t()可将旋转矩阵转换为齐次变换矩阵。
T=r2t(R)获取一个正交旋转矩阵R等价的具有零平移分量的齐次变换矩阵。如果R是一个3x3的矩阵,则T是一个4x4的矩阵;如果R是一个2x2的矩阵,则T是一个3x3的矩阵。
专利看完更不知道机械臂在纺织上能怎么做,和老师谈后,提出要找到核心问题(行业难点或创新方法)。。。。。。抽象。要想想怎么下手了