RosettaCodeData/Task/Aliquot-sequence-classifica.../FutureBasic/aliquot-sequence-classifica...

96 lines
1.9 KiB
Plaintext

begin globals
short n
long arr(17)
bool gStop = _False
end globals
local fn sumFactors(nx as long) as long
long i, sumFactor
sumFactor = 0
for i = 1 to fix(nx / 2)
if (nx) mod i = 0 then sumFactor = sumFactor + i
next
end fn = sumFactor
void local fn printSeries(arrx as short, size as short, type as str255)
short i = 0
print
print "Integer" + str$(arrx) + ", Type: " + type + ", Series: ";
for i=0 to size - 2
print str$(arr(i)) + " ";
next i
end fn
local fn Aliquot(nx as long)
short i, j
str255 type
type = "Sociable"
arr(0) = nx
for i = 1 to 15
arr(i) = fn sumFactors(arr(i-1))
if (arr(i)=0 || arr(i)=nx || (arr(i) = arr(i-1)) && arr(i)<>nx)
if arr(i) = 0
type = "Terminating"
else
if arr(i) = nx && i = 1
type = "Perfect"
else
if arr(i) = nx && i = 2
type = "Amicable"
else
if arr(i) = arr(i-1) && arr(i)<>nx
type = "Aspiring"
end if
end if
end if
end if
fn printSeries(arr(0),i+1,type)
if type = "Terminating"
print " 0"
else
print
end if
exit fn
end if
for j = 1 to i-1
if arr(j) = arr(i)
fn printSeries(arr(0),i+1,"Cyclic")
print
exit fn
end if
next j
next i
fn printSeries(arr(i),i+1,"Non-Terminating")
print
end fn
local fn DoAliquot
// declare and assign c-type array
long dataArray(30) = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 28, 496, 220, 1184,¬
12496, 1264460, 790, 909, 562, 1064, 1488, 0}
short i
for i = 0 to 24
if dataArray(i) = 0 then gStop = _True:exit fn
fn Aliquot(dataArray(i))
next i
end fn = gStop
window 1,@"Aliquot sequence classifications",fn CGRectMake(0, 0, 1150, 700)
windowcenter(1)
fn AppSetTimer( .000001, @Fn DoAliquot, _true )
handleevents