Η συνάρτηση ProDiv$() χειρίζεται μεγάλο ακέραιο >=0 αριθμητή και κανονικό ακέραιο >0 παρονομαστή και δίνει σε επιστημονική γραφή όλα τα νούμερα, με επιλογή αν θέλουμε δεκαδικά επιπλέον. Επειδή στην επιστημονική γραφή, όλος ο αριθμός φαίνεται σαν δεκαδικός, όταν δίνουμε τον αριθμό δεκαδικών προσθέτει "0" όσα και τα νούμερα για τα δεκαδικά αλλά στο τέλος έχει κανονική ένδειξη Ε. Η εξαγωγή της είναι το αλφαριθμητικό με όλα τα νούμερα.
(ενημερώθηκε ο κώδικας)
Function ProDiv$ {
Read a$, b$, pp
Let v$="", gg=len(b$), p=pp, mm=0
{
s=len(b$)
c$=left$(a$,s)
if c$<b$ then s++: c$=left$(a$, s) : if s=len(b$) then exit
d1=val(c$) div val(b$)
if gg<s-1 then {
if v$="0" then mm=-s+gg
v$=v$+string$("0",s-1-gg)
}
v$=v$+str$(d1,"0")
r$=str$(val(c$)-val(b$)*d1,"0")
gg=len(r$)
a$ =r$+mid$(a$,s+1)
cc=false
if len(a$)=len(b$) then {
if a$>b$ then cc=true
} else cc=len(a$)>len(b$) and a$<>"0"
if cc else if p=0 then exit
if p>0 and not cc then {
mm=len(v$)+1
a$=a$+string$("0",p) : p=0
}
loop
}
\\ scientific notation
if mm<>0 then {
if mm>1 then {
=Left$(v$,1)+"."+mid$(v$,2,mm-2)+mid$(v$,mm+1)+"E+"+str$(mm-2,"00")
} else.if mm<0 then {
=Mid$(v$,-mm+1,1)+"."+Mid$(v$,-mm+2)+"E-"+str$(abs(mm),"00")
}
} else {
mm=len(v$)
if mm>1 then {
=Left$(v$,1)+"."+mid$(v$,2)+"E+"+str$(mm-1,"00")
} else =V$
}
}
Def ExpStr$(x)= str$(X,"0.00000000000000000E-00")
Form 80,50
a$="57645834674367349573945793457359374512154545412313137868768787874738942834756234896582946937658926582565"
b$="3224241711"
Report 2,"Calculation for "+a$+"/"+b$
Report 2, ExpStr$(val(a$)/val(b$))
Report "Expanded:"
Report 2, ProDiv$(a$, b$, 100)
a$="1"
b$="3224241711"
Report 2,"Calculation for "+a$+"/"+b$
Report 2, ExpStr$(val(a$)/val(b$))
Report "Expanded:"
Report 2, ProDiv$(a$, b$, 100)
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
You can feel free to write any suggestion, or idea on the subject.