86 lines
2.2 KiB
Plaintext
86 lines
2.2 KiB
Plaintext
EnableExplicit
|
|
|
|
Structure farey_struc
|
|
complex.POINT
|
|
quotient.d
|
|
EndStructure
|
|
|
|
#MAXORDER=1000
|
|
Global NewList fareylist.farey_struc()
|
|
|
|
Define v_start.i,
|
|
v_end.i,
|
|
v_step.i,
|
|
order.i,
|
|
fractions.i,
|
|
check.b,
|
|
t$
|
|
|
|
Procedure farey(order)
|
|
NewList sequence.farey_struc()
|
|
Define quotient.d,
|
|
divisor.i,
|
|
dividend.i
|
|
|
|
For divisor=1 To order
|
|
For dividend=0 To divisor
|
|
quotient.d=dividend/divisor
|
|
AddElement(sequence())
|
|
sequence()\complex\x=dividend
|
|
sequence()\complex\y=divisor
|
|
sequence()\quotient=quotient
|
|
Next
|
|
Next
|
|
|
|
SortStructuredList(sequence(),#PB_Sort_Ascending,
|
|
OffsetOf(farey_struc\quotient),
|
|
TypeOf(farey_struc\quotient))
|
|
|
|
FirstElement(sequence())
|
|
quotient=sequence()\quotient
|
|
AddElement(fareylist())
|
|
fareylist()\complex\x=sequence()\complex\x
|
|
fareylist()\complex\y=sequence()\complex\y
|
|
fareylist()\quotient=sequence()\quotient
|
|
|
|
ForEach sequence()
|
|
If quotient=sequence()\quotient : Continue : EndIf
|
|
quotient=sequence()\quotient
|
|
AddElement(fareylist())
|
|
fareylist()\complex\x=sequence()\complex\x
|
|
fareylist()\complex\y=sequence()\complex\y
|
|
fareylist()\quotient=sequence()\quotient
|
|
Next
|
|
FreeList(sequence())
|
|
EndProcedure
|
|
|
|
OpenConsole("Farey sequence [Input exit = program end]")
|
|
Repeat
|
|
Print("Input-> start end step [start>=1; end<=1000; step>=1; (start<end)] : ")
|
|
t$=Input() : If Trim(LCase(t$))="exit" : End : EndIf
|
|
v_start=Val(StringField(t$,1," "))
|
|
v_end=Val(StringField(t$,2," "))
|
|
v_step=Val(StringField(t$,3," "))
|
|
check=Bool(v_start>=1 And v_end<=#MAXORDER And v_step>=1 And v_start<v_end)
|
|
Until check=#True
|
|
PrintN(~"\n"+LSet("-",80,"-"))
|
|
|
|
order=v_start
|
|
While order<=v_end
|
|
FreeList(fareylist()) : NewList fareylist()
|
|
farey(order)
|
|
fractions=ListSize(fareylist())
|
|
PrintN("Farey sequence for order "+Str(order)+" has "+Str(fractions)+" fractions.")
|
|
If fractions<100
|
|
ForEach fareylist()
|
|
If ListIndex(fareylist()) % 7 = 0 : PrintN("") : EndIf
|
|
Print(~"\t"+
|
|
RSet(Str(fareylist()\complex\x),2," ")+"/"+
|
|
RSet(Str(fareylist()\complex\y),2," "))
|
|
Next
|
|
EndIf
|
|
PrintN(~"\n"+LSet("=",80,"="))
|
|
order+v_step
|
|
Wend
|
|
Input()
|