Arithmetic/Complex: Difference between revisions

Content added Content deleted
(Added solution for Action!)
Line 60: Line 60:
<lang Action!>INCLUDE "D2:REAL.ACT" ;from the Action! Tool Kit
<lang Action!>INCLUDE "D2:REAL.ACT" ;from the Action! Tool Kit


DEFINE R_="+0"
TYPE Complex=[CARD r,i] ;REAL POINTER
DEFINE I_="+6"
TYPE Complex=[CARD cr1,cr2,cr3,ci1,ci2,ci3]


BYTE FUNC Positive(REAL POINTER x)
BYTE FUNC Positive(REAL POINTER x)
Line 72: Line 74:


PROC PrintComplex(Complex POINTER x)
PROC PrintComplex(Complex POINTER x)
PrintR(x.r)
PrintR(x R_)
IF Positive(x.i) THEN
IF Positive(x I_) THEN
Put('+)
Put('+)
FI
FI
PrintR(x.i) Put('i)
PrintR(x I_) Put('i)
RETURN
RETURN


Line 95: Line 97:


PROC ComplexAdd(Complex POINTER x,y,res)
PROC ComplexAdd(Complex POINTER x,y,res)
RealAdd(x.r,y.r,res.r) ;res.r=x.r+y.r
RealAdd(x R_,y R_,res R_) ;res.r=x.r+y.r
RealAdd(x.i,y.i,res.i) ;res.i=x.i+y.i
RealAdd(x I_,y I_,res I_) ;res.i=x.i+y.i
RETURN
RETURN


PROC ComplexSub(Complex POINTER x,y,res)
PROC ComplexSub(Complex POINTER x,y,res)
RealSub(x.r,y.r,res.r) ;res.r=x.r-y.r
RealSub(x R_,y R_,res R_) ;res.r=x.r-y.r
RealSub(x.i,y.i,res.i) ;res.i=x.i-y.i
RealSub(x I_,y I_,res I_) ;res.i=x.i-y.i
RETURN
RETURN


Line 107: Line 109:
REAL tmp1,tmp2
REAL tmp1,tmp2


RealMult(x.r,y.r,tmp1) ;tmp1=x.r*y.r
RealMult(x R_,y R_,tmp1) ;tmp1=x.r*y.r
RealMult(x.i,y.i,tmp2) ;tmp2=x.i*y.i
RealMult(x I_,y I_,tmp2) ;tmp2=x.i*y.i
RealSub(tmp1,tmp2,res.r) ;res.r=x.r*y.r-x.i*y.i
RealSub(tmp1,tmp2,res R_) ;res.r=x.r*y.r-x.i*y.i


RealMult(x.r,y.i,tmp1) ;tmp1=x.r*y.i
RealMult(x R_,y I_,tmp1) ;tmp1=x.r*y.i
RealMult(x.i,y.r,tmp2) ;tmp2=x.i*y.r
RealMult(x I_,y R_,tmp2) ;tmp2=x.i*y.r
RealAdd(tmp1,tmp2,res.i) ;res.i=x.r*y.i+x.i*y.r
RealAdd(tmp1,tmp2,res I_) ;res.i=x.r*y.i+x.i*y.r
RETURN
RETURN


Line 119: Line 121:
REAL tmp1,tmp2,tmp3,tmp4
REAL tmp1,tmp2,tmp3,tmp4


RealMult(x.r,y.r,tmp1) ;tmp1=x.r*y.r
RealMult(x R_,y R_,tmp1) ;tmp1=x.r*y.r
RealMult(x.i,y.i,tmp2) ;tmp2=x.i*y.i
RealMult(x I_,y I_,tmp2) ;tmp2=x.i*y.i
RealAdd(tmp1,tmp2,tmp3) ;tmp3=x.r*y.r+x.i*y.i
RealAdd(tmp1,tmp2,tmp3) ;tmp3=x.r*y.r+x.i*y.i
RealMult(y.r,y.r,tmp1) ;tmp1=y.r^2
RealMult(y R_,y R_,tmp1) ;tmp1=y.r^2
RealMult(y.i,y.i,tmp2) ;tmp2=y.i^2
RealMult(y I_,y I_,tmp2) ;tmp2=y.i^2
RealAdd(tmp1,tmp2,tmp4) ;tmp4=y.r^2+y.i^2
RealAdd(tmp1,tmp2,tmp4) ;tmp4=y.r^2+y.i^2
RealDiv(tmp3,tmp4,res.r) ;res.r=(x.r*y.r+x.i*y.i)/(y.r^2+y.i^2)
RealDiv(tmp3,tmp4,res R_) ;res.r=(x.r*y.r+x.i*y.i)/(y.r^2+y.i^2)


RealMult(x.i,y.r,tmp1) ;tmp1=x.i*y.r
RealMult(x I_,y R_,tmp1) ;tmp1=x.i*y.r
RealMult(x.r,y.i,tmp2) ;tmp2=x.r*y.i
RealMult(x R_,y I_,tmp2) ;tmp2=x.r*y.i
RealSub(tmp1,tmp2,tmp3) ;tmp3=x.i*y.r-x.r*y.i
RealSub(tmp1,tmp2,tmp3) ;tmp3=x.i*y.r-x.r*y.i
RealDiv(tmp3,tmp4,res.i) ;res.i=(x.i*y.r-x.r*y.i)/(y.r^2+y.i^2)
RealDiv(tmp3,tmp4,res I_) ;res.i=(x.i*y.r-x.r*y.i)/(y.r^2+y.i^2)
RETURN
RETURN


Line 136: Line 138:
REAL neg
REAL neg


ValR("-1",neg) ;neg=-1
ValR("-1",neg) ;neg=-1
RealMult(x.r,neg,res.r) ;res.r=-x.r
RealMult(x R_,neg,res R_) ;res.r=-x.r
RealMult(x.i,neg,res.i) ;res.r=-x.r
RealMult(x I_,neg,res I_) ;res.r=-x.r
RETURN
RETURN


Line 144: Line 146:
REAL tmp1,tmp2,tmp3
REAL tmp1,tmp2,tmp3


RealMult(x.r,x.r,tmp1) ;tmp1=x.r^2
RealMult(x R_,x R_,tmp1) ;tmp1=x.r^2
RealMult(x.i,x.i,tmp2) ;tmp2=x.i^2
RealMult(x I_,x I_,tmp2) ;tmp2=x.i^2
RealAdd(tmp1,tmp2,tmp3) ;tmp3=x.r^2+x.i^2
RealAdd(tmp1,tmp2,tmp3) ;tmp3=x.r^2+x.i^2
RealDiv(x.r,tmp3,res.r) ;res.r=x.r/(x.r^2+x.i^2)
RealDiv(x R_,tmp3,res R_) ;res.r=x.r/(x.r^2+x.i^2)


ValR("-1",tmp1) ;tmp1=-1
ValR("-1",tmp1) ;tmp1=-1
RealMult(x.i,tmp1,tmp2) ;tmp2=-x.i
RealMult(x I_,tmp1,tmp2) ;tmp2=-x.i
RealDiv(tmp2,tmp3,res.i) ;res.i=-x.i/(x.r^2+x.i^2)
RealDiv(tmp2,tmp3,res I_) ;res.i=-x.i/(x.r^2+x.i^2)
RETURN
RETURN


Line 157: Line 159:
REAL neg
REAL neg


ValR("-1",neg) ;neg=-1
ValR("-1",neg) ;neg=-1
RealAssign(x.r,res.r) ;res.r=x.r
RealAssign(x R_,res R_) ;res.r=x.r
RealMult(x.i,neg,res.i) ;res.i=-x.i
RealMult(x I_,neg,res I_) ;res.i=-x.i
RETURN
RETURN


PROC Main()
PROC Main()
Complex x,y,res
Complex x,y,res
REAL xr,xi,yr,yi,resr,resi


IntToReal(5,x R_) IntToReal(3,x I_)
x.r=xr x.i=xi
IntToReal(4,y R_) ValR("-3",y I_)
y.r=yr y.i=yi
res.r=resr res.i=resi

IntToReal(5,x.r) IntToReal(3,x.i)
IntToReal(4,y.r) ValR("-3",y.i)


Put(125) PutE() ;clear screen
Put(125) PutE() ;clear screen