45 lines
1.1 KiB
Plaintext
45 lines
1.1 KiB
Plaintext
DIM N%(3) : N%() = -42, 0, -12, 1
|
|
DIM D%(3) : D%() = -3, 1, 0, 0
|
|
DIM q%(3), r%(3)
|
|
PROC_poly_long_div(N%(), D%(), q%(), r%())
|
|
PRINT "Quotient = "; FNcoeff(q%(2)) "x^2" FNcoeff(q%(1)) "x" FNcoeff(q%(0))
|
|
PRINT "Remainder = " ; r%(0)
|
|
END
|
|
|
|
DEF PROC_poly_long_div(N%(), D%(), q%(), r%())
|
|
LOCAL d%(), i%, s%
|
|
DIM d%(DIM(N%(),1))
|
|
s% = FNdegree(N%()) - FNdegree(D%())
|
|
IF s% >= 0 THEN
|
|
q%() = 0
|
|
WHILE s% >= 0
|
|
FOR i% = 0 TO DIM(d%(),1) - s%
|
|
d%(i%+s%) = D%(i%)
|
|
NEXT
|
|
q%(s%) = N%(FNdegree(N%())) DIV d%(FNdegree(d%()))
|
|
d%() = d%() * q%(s%)
|
|
N%() -= d%()
|
|
s% = FNdegree(N%()) - FNdegree(D%())
|
|
ENDWHILE
|
|
r%() = N%()
|
|
ELSE
|
|
q%() = 0
|
|
r%() = N%()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
DEF FNdegree(a%())
|
|
LOCAL i%
|
|
i% = DIM(a%(),1)
|
|
WHILE a%(i%)=0
|
|
i% -= 1
|
|
IF i%<0 EXIT WHILE
|
|
ENDWHILE
|
|
= i%
|
|
|
|
DEF FNcoeff(n%)
|
|
IF n%=0 THEN = ""
|
|
IF n%<0 THEN = " - " + STR$(-n%)
|
|
IF n%=1 THEN = " + "
|
|
= " + " + STR$(n%)
|