VC++开发演算稿式计算语言-可编程绘图的计算器

刚工作时自学VC++,开发了一个演算稿式计算语言,用于日常的设计计算说明书的编写及算法程序的收集整理。

当时不知道matlab,不然就不会费这么大的劲了。

源代码见:https://download.csdn.net/download/lijil168/10915472

其主要代码为windows界面程序及计算语言解释程序。

主程序见:https://download.csdn.net/download/lijil168/10915678

 

计算整车动力性示例:

做功率平衡图示例:

软件使用说明如下:

  • compute简介

本语言属于解释性计算机语言。用本语言编程不需要定义数据类型,所有的变量和数组都是双精度数据类型。但是数组要先定义大小,再使用。数组最大为两维,对应于matlab的矩阵。本语言做好了与matlab语言(以!为标志) 和Proe(以$为标志)的接口,用本语言编程不需要另做接口便可以直接调用matlab的命令,并可以直接编程控制Proe模型的参数,从而达到控制Proe模型的目的。本语言还提供了友好的Windows编程界面,编程和输出、打印数据和图样都很方便。

(一)运算符:

+   加

-    减

*    乘

/     除

^    乘方

#    开方

%  求余数

sqrt   求平方根

fabs  求绝对值

floor 取整

exp       求以自然数为底的指数运算

lg   求以10为底的对数运算

ln   求以自然数为底的对数运算

sin  cos  tan  atan  asin  acos 三角及反三角运算

cosh  sinh  tanh

 

!=  不等于

== 等于

>  大于

<   小于

>=  大于等于

<=  小于等于

 

&& 逻辑与

||    逻辑或

 

(二)变量:

所有不含有运算符、小括号和中括号的字符串均可以做变量名,所有的变量都是双精度数据类型,如果想用按钮“显示结果”显示变量的值,在变量名前加?

例如:要把2赋给变量y,可这样写

y=2

如果想用按钮“显示结果”显示y的值,可这样写

?y=2

 

(三)数组:

所有不含有运算符、小括号和中括号的字符串均可以做数组名,所有的数组都是双精度数据类型,数组最大为2维,对应于matlab的矩阵,数组先定义大小,再使用,且不能重复定义。

例如:

a[3][2]=[1,2\21\,32]

定义二维数组,数组名为a,对应于matlab中的矩阵a 3行2列,每行以\分隔,未赋值的数组的值为0

a[3]=[]

定义二维数组,数组名为a,对应于matlab中的矩阵a 3行1列,相当于a[3][1]=[]

a[0]=1 相当于a[0][0]=1

?b=a[0] 相当于?b=a[0][0]

 

(四)求一元函数极小值的函数(用最小二乘法求):

Fmin(一元函数表达式,自变量的范围,精度)

自变量的范围的格式为:起始值<=自变量<=终点值

精度默认为0.0001

注意两求极值函数不能在一起运算

例如:要求函数f(x)=x^2在-1<=x<=1范围内的极小值,再把极小值赋给变量y,可这样写

y=Fmin(x^2, -1<=x<=1,0.0001)

如果想用按钮“显示结果”显示y的值,可这样写

?y=Fmin(x^2, -1<=x<=1,0.0001)

如果想用按钮“显示结果”显示y和x的值,可这样写

?y=Fmin(x^2, -1<=?x<=1,0.0001)

 

(五)自定义函数:

用本语言编程,用户可以先自定义函数,以后使用。后定义的函数体可以包含前面定义的函数。如果后定义的函数与前面定义的函数同名,则后面定义的函数覆盖前面定义的函数。但是应防止循环调用

 

例如:要求函数f(x)=x^2在x=0时的值并赋给变量y1, 在x=10时的值并赋给变量y2,可这样写

f(x)=x^2

y1=f(0) y2=f(10)

但不能 y1=f(f(0))即不能循环调用!

如果函数w(x,y)是函数f(x)的两倍再加上y,可这样写

w(x,y)=2*f(x)+y

如果要求函数w(x,y)在x=0,y=1时的值并赋给变量y1, 在x=1,y=10时的值并赋给变量y2,可这样写

y1=w(0,1) y2=w(1,10)

 

(六)“Output1”按钮会调用的绘图函数:

1map(v1,v2,v3,v4)本函数用来设置画图比例

v1

绘图区左上角的横坐标

v2

绘图区左上角的纵坐标

v3

绘图区右下角的横坐标

v4

为绘图区右下角的纵坐标

自变量的个数只能等于4个。但自变量可以为空表示采用当前的默认值。

初始A4纸的左上角坐标为(-0.1,1.2, 右下角坐标为(1.052,-0.32

初始绘图区的左上角坐标为(0,1, 右下角坐标为(1,0map(v1,v2,v3,v4)目的就是使绘图区左上角的坐标变为(v1,v2),右下角的坐标变为(v3,v4),从而确实绘图的比例。

 

2、pen(v1,v2,R,G,B)本函数用来选择画图的线条类型

v1

线条类型01长虚2短虚3点划4双点划5

v2

线条宽度1~2

R

红色值0~255

G

绿色值0~255

B

蓝色值0~255

使用本函数时,自变量的个数可以少于或等于5个。如:pen(1,)表示线条的类型改为1,第二个自变量为空表示线条宽度不变仍为当前的默认值,第三到五个自变量没有表示线条颜色不变,仍为当前的默认值。

 

3font(,,,,...)本函数用来选择画图字体类型,自变量的个数可以少于或等于14个,同VC++的字体构造函数。

 

4move(v1,v2) move-(w1,w2)自变量的个数只能等于2个。

v1

当前绘图点沿横坐标方向平移的量

v2

当前绘图点沿纵坐标方向平移的量

move(v1,v2)表示把当前绘图点相对平移(v1,v2)个单位

w1

把当前绘图点平移至点的横坐标。

w2

把当前绘图点平移至点的纵坐标。

move-(w1,w2)表示把当前绘图点平移至(w1,w2)点

 

5line(v1,v2) line-(w1,w2)自变量的个数只能等于2个。

v1

绘线始点的横坐标

v2

绘线始点的纵坐标

 

w1

绘线终点的横坐标

w2

绘线终点的纵坐标

 

可以连续画线。如:line(0,1)-(0.5,0.3)-(1,1)

 

6rect(v1,v2,v3,v4)本函数用来画矩形,

 

v1

矩形左上角的横坐标

v2

矩形左上角的纵坐标

v3

矩形右下角的横坐标

v4

矩形右下角的纵坐标

 

使用本函数时,自变量的个数只能等于4个。但自变量可以为空表示采用当前的默认值。

 

7ellipse(v1,v2,v3,v4,)本函数用来画椭圆形,

v1

椭圆外切矩形左上角的横坐标

v2

椭圆外切矩形左上角的纵坐标

v3

椭圆外切矩形右下角的横坐标

v4

椭圆外切矩形右下角的纵坐标

使用本函数时,自变量的个数只能等于4个。但自变量可以为空表示采用当前的默认值。

 

8draw(v1,v2,v3)本函数用来画函数图形,

v1

一元函数的函数名

v2

自变量的起始坐标

v3

函数自变量的终止坐标

使用本函数时,自变量的个数只能等于3个。且自变量不可以为空。

 

9print(,,,,...)本函数用来输出显示变量的值或字符串,自变量的个数不定,与VC++的格式化打印函数sprint(..)函数相似。如: y=2.555 print("x=%4.2f;qq=%s",x,yes) 结果为 x=2.56;qq=yes

print(x)结果为 x=2.56;

但是应注意:在点击“显示结果”按钮时,print(到回车符都会被过滤掉,故在print()函数后不要给变量赋值。print()函数完成后绘图点自动回车换行所以下一个print()显示的结果会与前一个对齐。

!!注意:绘图函数不要放到第一行头,否则会被过滤掉。

 

(七)命令:任何程序都是由一条条的命令组成,用本语言编程使用的命令如下:

  1. 赋值命令

如:x=2+4 为把2+4的结果6赋给变量x

f(x)=x^2; y=f(3) 为把f(x)当自变量为3时的函数值赋给y

a[2]=1 为把1赋给数组a[2]

  1. 数组定义命令

如:a[3][2]=[1,2\21\,32]

定义二维数组,数组名为a,对应于matlab中的矩阵a 3行2列,每行以\分隔,未赋值的数组的值为0

a[3]=[]

定义二维数组,数组名为a,对应于matlab中的矩阵a 3行1列,相当于a[3][1]=[]

 

  1. 函数自定义命令

如:f(x)=x^2

       定义一个函数,函数名为f,自变量为x,函数体为x^2

 

  1. 条件转移命令

if(表达式)    

{运算体1 } 

else

{运算体2 }

当表达式成立时则运算运算体1,否则转到运算体2

  1. 条件循环命令

while(表达式)

{循环体}

当表达式成立时则循环运算循环体

  1. 绘图命令

由“Output1”按钮会调用的9个绘图函数组成。

 

☆☆注意:

1.本语言是这样对源程序进行逐条解释的:从头至尾扫描,空格、换行符'\n'、或者起始位置与第一个'='(前有'>''<''!'或前后有'='不算)间的字符为待求值的变量名,空格、回车符'\r'、或者末尾位置与上一个'='(前有'>''<''!' 或前后有'='不算)间的字符为待求值的算术表达式。待求值的变量名与待求值的算术表达式应一一对应。如: a=2+5=7 相当于 a=7

2.     在要显示的变量的前面加上?号。

3.     变量名最多长20字节,表达式最多长200字节。程序最大字符9300,最大变量数500,用?显示的最        大变量数100,最大函数数50,函数最大自变量数50

4.     该运算为顺序运算,分支和循环运算。

5.运算结果均为双精度型。

if()     后面若有非‘ ’‘{’回车符且非注示的字符则出错!

{ }      后面若有非‘ ’回车符且非注示的字符则表示后面没有else

else     后面若有非‘ ’‘{’回车符且非注示的字符则出错!

{}

while()  后面若有非‘ ’‘{’回车符且非注示的字符则出错!

{}

分隔符号:空、;、}、{、

 

************以下为“Output1”按钮会调用的绘图函数********

 

*********与matlab有关的关键字***************

a[3][2]=[1,2\21\,32]

定义二维数组,数组名为a,对应于matlab中的矩阵a 3行2列,每行以\分隔,未赋值的数组的值为0

a[3]=[]

定义二维数组,数组名为a,对应于matlab中的矩阵a 3行1列,相当于a[3][1]=[]

a[0]=1 相当于a[0][0]=1

?b=a[0] 相当于?b=a[0][0]

!=clear 把!=后面的clear传给matlab engine进行运算

!a=a+1  把!后面的a=a+1传给matlab engine进行运算,运算完成后a矩阵的值再赋给数组a

!!注意在调用matlab engine运算前会把已定义的数组传给matlab矩阵,矩阵名与数组名相同!!!!

a=!a 把矩阵a的值赋给数组a,注意行列应对应。

*********与Proe有关的关键字***************

a[0]=$a0x 把Proe模型中的参数a0x赋给数组a[0]并建立参数a0x到数组a[0]的映射。故a[0]的变化就是a0x的变化。!!注意一个参数的映射只能建立一次。故不能一个参数映射多个变量或数组。!!

$a0x=1 相当于a0x=$a0x a0x=1 定义变量a0x与参数a0x映射,并改变其值为1。

$=0    把已建立映射的参数的值赋给模型,并再生模型。

$=1    用于调试程序,暂停程序的运行,以对话框的形式显示带?的变量,并可以在matlab windows中检查各个矩阵的值。

 

 

如果要在proe中调用matlab的命令,需要安装matalab6.5和proe worldfire

例如:

在matlab的work目录下考入[工程计算文]目录下的rssr,rrss文件(解决rssr和rrss空间四杆机构运动坐标的函数)。

运行proeworldfire

打开转向模型:proe模型目录下的asm0001.asm.3

打开proe菜单:工具下的辅助运用程序,用ch7_protk文件完成辅助运用程序(CH7\Example7\Release\Example7.dll)的注册。在proe菜单上会新增加一个菜单,点击此菜单,再点击再生按钮,在出现的对话框中拷贝入 [工程计算文]目录下的四杆机构分析.lijil文件中的最后一条记录:temp2-proe2-转向四杆。(可以先执行compute\Debug\Compute.exe再打开[工程计算文]目录下的四杆机构分析.lijil。再选到最后一条记录)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值