2.1
IFmxm<m10mTHENmIF m
xm<m5 mTHEN
xm=m5mELS
E
PRINTmxm E
NDmIF
ELSE
DO
IFmxm<m50mEXIT
xm=mx m-
m5mENDmDO
ENDmIF
2.2
Step m1:mStart
Step m2:mInitializemsummandmcountmto mzero
mStep m3:mExamine mtop mcard.
Step m4:mIf mitmsaysm“endmofmdata”mproceedmto mstepm9;motherwise,mproceedmto mnextmstep.
mStep m5:mAdd mvalue mfrom mtop mcard mto msum.
Step m6:mIncreasemcountmbym1
.mStep m7:mDiscardmtop mcard m
Step m8:mReturn mto mStep m3.
Step m9:mIsmthemcountm greatermthan mzero?
If myes,mproceedmtomstepm10.
mIf mno, mproceedmto mstep m11
.
Step m10:mCalculate maveragem=msum/count
Step m11:mEnd
2.3
start
summ=m0
countm=m
0
m m T
countm>m
INPUT 0
value
F
averagem=msum/coun
t
valuem=m“ T
end mofmdata”
F end
summ=msumm+mval
uemcountm=mcoun
t + 1
,2.4
Studentsmcould mimplementmthemsubprogram min many mnumbermof mlanguages.mThemfollowingm For
tran m90 mprogrammismonemexample.mItmshould mbemnoted mthatmthemavailability mof mcomplex mvariab
lesmin mFortran m90,mwould mallowmthismsubroutine mto mbemmademeven mmoremconcise.m However,m
wemdid mnotmexploitmthismfeature,min mordermto mmakemthemcodemmoremcompatible mwith mVisualmB
ASIC,mMATLAB,metc.
PROGRAM mRootfind mI
MPLICIT mNONE mINTEG
ER::ier
REAL::a, mb, mc, mr1, mi1, mr2, mi2
DATAma,b,c/1.,5.,2./
CALLmRoots(a,mb, mc, mier,mr1,mi1,mr2, mi2) mIF m(
ier m.EQ. m0) mTHEN
PRINT m*, mr1,i1," mi"
PRINT m*, mr2,i2," mi" mEL
SE
PRINT m*, m"No mroots" mEN
D mIF
END
SUBROUTINE mRoots(a, mb, mc, mier, mr1, mi1, mr2,mi2) mIMPLICI
T mNONE
INTEGER::ier
REAL::a, mb,mc, md, mr1, mi1, mr2, mi2 mr1
=0.
r2=0.
mi1=0
. mi2=
0.
IF m(a m.EQ. m0.) mTHEN mIF m
(b m<> m0) mTHEN
r1m= m-
c/b mELSE
ier m= m1 mEN
D mIF
ELSE
d m= mb**2 m-
m4.*a*c mIF m(d m>= m0) m
THEN
r1 m= m(-b m+ mSQRT(d))/(2*a)
r2 m= m(-b m-
mSQRT(d))/(2*a) mELSE
r1m= m-
b/(2*a) mr2 m= mr
1
i1 m= mSQRT(ABS(d))/(2*a)
i2m= m-
i1 mEND mIF
END mIF mEN
D
Them answersm form them 3 m testm casesm are:m (a)m −0.438,m -4.56;m (b)m 0.5;m (c)m −1.25m +m 2.33i;m −1.25 m −
2.33i.
Severalmfeaturesmof mthismsubroutine mbearmmention:
• Themsubroutine mdoesmnotminvolveminputmormoutput.mRather,minformation mismpassed min mand m
outmviamthemarguments.mThismismoften mthempreferred mstyle,mbecausemthemI/Omismleftmto mthem
discretion mof mthemprogrammermwithin mthemcallingmprogram.
• Notemthatman merrormcodemismpassed m(IERm=m1)mformthemcasemwhere mno mrootsmarempossible.
,2.5 mThemdevelopmentmofmthemalgorithmmhingesmonmrecognizingmthatmthemseriesmapproximation mofmthe
msine mcan mbe mrepresented mconcisely mby mthe msummation,
n 2i m−1
(2ix − 1)!
m
i=1 m
m
m m
wherem im =m them orderm ofm them approximation.m Them followingm algorithmm implementsm thism
summation:
Step m1:mStart
Step m2:mInputmvaluemto mbemevaluatedmxmand mmaximummordermnm
Step m3:mSetmorderm(i)mequalmto mone
Step m4:mSetmaccumulatormformapproximationm(approx)mto mzero m
Step m5:mSetmaccumulatormformfactorialmproductm(fact)mequalmto mo
nemStep m6:mCalculate mtruemvalue mof msin(x)
Step m7:mIf mordermismgreatermthanmn mthenmproceed mtomstepm13 mOther
wise,mproceed mto mnextmstep
Step m8:mCalculate mthemapproximation mwith mthemformula
x2i-
approxm =mapproxm +m(−1 i-1
) 1 m fact
or
Step m9:mDetermine mthemerror
truem−mapproxm
%errorm= 100
true
%m
Step m10:mIncrementmthemordermby mone
Step m11:mDetermine mthemfactorialmformthemnextmiteration
factorm =m factorm •m(2m•mim −m2)m•m(2m•mim −m1)
Step m12:mReturn mto mstep m7
Step m13:mEnd
, 2.6
Pseudocode:
SUBROUTINEmSincomp(n,x)m
im=m1
truem=mSIN(x)map
proxm=m0
factorm=m1mD
O
IFmim>mnmEXIT
approxm=mapproxm+m(-1)i-1•x2•i-
1m
/mfactormerrorm=mAbs(truem-
mapprox)m/mtrue)m*m100mPRINTmi,mtrue,mapprox,m
error
im=mim+m1
factorm=mfactor•(2•i-2)•(2•i-
1)mENDmDO
END