我写了加减乘的(没考虑小数),大家看看。
CLEAR
ACCEPT'请输入加数:'TO x
ACCEPT'请输入被加数:'TO Y
?mjia(x,y)
?mjian(x,y)
?mcheng(x,y)
FUNCTION cn
lPARAMETERS cc
RETURN VAL(cc)
ENDFUNC
FUNCTION jia
*******************************
**单位数加
*******************************
lPARAMETERS cn1,cn2
LOCAL he
he=ALLTRIM(STR(val(cn1)+val(cn2)))
IF LEN(he)=2 &&有进位
jw=.t.
he=RIGHT(he,1)
ENDIF
RETURN he
ENDFUNC
FUNCTION cheng
*******************************
**单位数乘
*******************************
lPARAMETERS cn1,cn2
LOCAL ji
ji=ALLTRIM(STR(val(cn1)*val(cn2)))
IF LEN(ji)=2 then&&有进位
jw=.t.
jws=LEFT(ji,1)
endif
RETURN right(ji,1)
ENDFUNC
FUNCTION mjia
***********************************
**模拟加法
***********************************
LPARAMETERS js1,js2 &&两个操作数
LOCAL he,p,i,j
jw=.f.
he="" &&存计算结果 和
jw=.f. &&进位标志
l1=LEN(js1)
l2=LEN(js2)
l=IIF(l1>=l2,l1,l2)
IF l1>l2 THEN
&&前面补0
js2=REPLICATE("0",l1-l2)+js2
ELSE
js1=REPLICATE("0",l2-l1)+js1
ENDIF
l1=l
p=1
FOR i= 1 TO l
w1=RIGHT(js1,1)
w2=RIGHT(js2,1)
IF jw then &&处理进位
IF w1="9" then
w1="0"
jw=.t.
ELSE
w1=jia(w1,"1")
jw=.f.
ENDIF
ENDIF
he=he+jia(w1,w2)
js1=LEFT(js1,l1-1)
js2=LEFT(js2,l1-1)
l1=l1-1
NEXT i
IF jw then
he=he+"1"
jw=.f.
endif
l=LEN(he)
kk=""
FOR i=l TO 1 STEP -1
kk=kk+SUBSTR(he,i,1)
NEXT i
RETURN kk
ENDFUNC
FUNCTION jian
*******************************
**单位数减
*******************************
lPARAMETERS cn1,cn2
s1=val(cn1)
s2=val(cn2)
IF s1<s2 then
s1=10+s1
jw=.t.
ENDIF
RETURN
ALLTRIM(STR( s1-s2 ))
ENDFUNC
FUNCTION mjian
***********************************
**模拟减法
***********************************
LPARAMETERS js1,js2 &&两个操作数
LOCAL cha,l,p,i,jwhs1,i,j,lss1,ss,s
cha="" &&存计算结果 和
jw=.f. &&进位标志
l1=LEN(js1)
l2=LEN(js2)
IF l2>l1 then
s=js1
js1=js2
js2=s
p=.t.
ELSE
IF l2=l1 then
IF js2>js1 then
s=js1
js1=js2
js2=s
p=.t.
ENDIF
ENDIF
ENDIF
l1=LEN(js1)
l2=LEN(js2)
js2=REPLICATE("0",l1-l2)+js2&&补齐位数
i=l1
DO WHILE i>=1
w1=SUBSTR(js1,i,1)
w2=SUBSTR(js2,i,1)
IF jw then &&处理借位
IF w1="0" THEN &&如果本位不够,继续向前借位
w1="9"
jw=.t.
ELSE
w1=jian(w1,"1") &&已处理,清借位标志
jw=.f.
ENDIF
ENDIF
cha=cha+jian(w1,w2)
i=i-1
ENDDO
l=LEN(cha)
kk=""
FOR i=l TO 1 STEP -1
kk=kk+SUBSTR(cha,i,1)
NEXT i
m=0
FOR i=1 TO l
c=SUBSTR(kk,i,1)
IF c="0" then
m=m+1
ELSE
EXIT for
ENDIF
NEXT i
cha=SUBSTR(kk,m+1)
IF p then
cha="-"+cha
ENDIF
RETURN cha
ENDFUNC
FUNCTION mcheng
***********************************
**模拟乘法
***********************************
LPARAMETERS cs1,cs2
LOCAL l1,l2,ji,ls,csw1,csw2,ws,i,j,zji,ws2
jw=.f.
jws=""
ws2=1
ws=1
ls=""
ji="0"
zji="0"
l1=LEN(cs1)
l2=LEN(cs2)
FOR i= l2 TO 1 STEP -1
csw2=SUBSTR(cs2,i,1)
FOR j=l1 TO 1 STEP -1
csw1=substr(cs1,j,1)
*?csw1+"*"+csw2+"="
ls=cheng(csw1,csw2)
IF jw then
ls=jws+ls
jws="0"
endif
ji=mjia(ji,ls+REPLICATE("0",ws-1))
ws=ws+1
* ?ji
NEXT j
zji=mjia(zji,ji+REPLICATE("0",ws2-1))
ji="0"
ws2=ws2+1
ws=1
NEXT i
RETURN zji
ENDfunc
******************
14:49修改了加法进位中出现两个9时计算错误的问题
[此贴子已经被作者于2017-3-30 16:50编辑过]