#LoanCalc.bas # for HotPaw Basic 1.4.5 8/2005 # example version 4.0 # # example equation to solve : # loan amortisazion example # e$="paymnt = fn pmt(price-down, rate/1200, 12*years)" # # provide realistic initial values : price = 250000 down = 50000 rate = 10 years = 30 # # solver program setup # dim vn$(10), vv(10), vf(10) draw -1 # show equation form fld 6,20,130,24,e$,1 vf(0) = fn formindex() top: form btn 140,20, 18,12,"OK",1 a$ = input$(1) # get equation e1$=s$(0) : e$=e1$ e2$=e$ form fld 0,vf(0),0,0,e2$,1 # get list of variables in equation v$=fn getvarlist(e1$) c$="," for ii=1 to 9 vn$(ii)=field$(v$,ii,c$) if vn$(ii)="" then exit for : else nn=ii next ii # # create solver form # q$="solve" for ii=1 to nn vv(ii)=eval(vn$(ii)) y=32+16*ii form fld 52,y,58,12, (str$(vv(ii))+" "),1 vf(ii) = fn formindex() form btn 120,y,32,12,q$,1 fn setformkey(fn formindex(), 48+ii) next ii form btn 0,160,0,0,"Done",1 # draw variable names for ii=1 to nn y=32+16*ii draw vn$(ii), 16,y next ii # # wait for input # while 1 a$ = input$(1) if asc(a$)=3 then end if asc(a$)<32 form reset 0,0,0,0,t$,-1 :' clear it form fld 6,20,130,24,s$(0),1 goto top: endif # get button number tt = val(a$) for i=1 to nn vv(i)=val(s$(i)) fn assign2var(vn$(i), vv(i)) f$=str$(vv(i))+" " form fld 0,vf(i),0,0,f$,1 next i # clear unknown form fld 0,vf(tt),0,0," ",1 # attempt to solve x3=fn solve1(e2$,vn$(tt),vv(tt)) x3=fn solve1(e2$,vn$(tt),x3) vv(tt)=x3 fn assign2var(vn$(tt), x3) # display results d$="+#.##" for i=1 to nn f$=fn format$(vv(i),d$) if i>3 then f$=str$(vv(i)) form fld 0,vf(i),0,0,f$,1 next i # check for amount of error # max error allowed ermax = 0.001 # check solution i=instr(e$,"=") if i>0 er$=mid$(e$,1,i-1)+" - " er$=er$+mid$(e$, i+1) else er$=e$ endif # warn if solution didn't converge if ermax > 0 er = eval(er$) if (abs(er) > ermax) err$="ERROR = " + fn format$( er, "#.#E##") err$=err$+" " draw err$, 50, 147, 1 erflag=1 else err$=" " draw err$, 50, 147, 1 draw err$, 95, 147, 1 endif endif # go back to input loop wend end # # Copyright 2004 rhn @ HotPaw #