Какие только идеи не придут в голову вечером. Вчера это была идея посчитать числа Фибоначчи. Гугл вывалил массу алгоритмов подсчета и часть жалоб на ошибки при вычислении БОЛЬШИХ чисел. Некоторые языки использовали экзотические типы переменных, но это не наши методы. После пары проб и ошибок получилась программа, которая пишет в файл значения чисел. Беглая сверка показала, что подсчет совпадает с таблицами.
;f(200)=280571172992510140037611932413038677189525
Procedure.l max(a,b)
m=a
If b>a
m=b
EndIf
ProcedureReturn m
EndProcedure
w1.s="1"
w2.s="1"
CreateFile(0,"fibo.txt")
WriteStringN(0,"1")
WriteStringN(0,"1")
For k=3 To 200
r$=""
m=0
l=max(Len(w1),Len(w2))
For i=1 To l
If i<=Len(w1)
d1=Val(Mid(w1,i,1))
Else
d1=0
EndIf
If i<=Len(w2)
d2=Val(Mid(w2,i,1))
Else
d2=0
EndIf
n=(d1+d2+m)%10
r$=Str(n)+r$
m=Int((d1+d2+m)/10)
Next i
If m
r$=Str(m)+r$
EndIf
w1=w2
w2=ReverseString(r$)
Debug r$
WriteStringN(0,r$)
Next k
CloseFile(0)
Procedure.l max(a,b)
m=a
If b>a
m=b
EndIf
ProcedureReturn m
EndProcedure
w1.s="1"
w2.s="1"
CreateFile(0,"fibo.txt")
WriteStringN(0,"1")
WriteStringN(0,"1")
For k=3 To 200
r$=""
m=0
l=max(Len(w1),Len(w2))
For i=1 To l
If i<=Len(w1)
d1=Val(Mid(w1,i,1))
Else
d1=0
EndIf
If i<=Len(w2)
d2=Val(Mid(w2,i,1))
Else
d2=0
EndIf
n=(d1+d2+m)%10
r$=Str(n)+r$
m=Int((d1+d2+m)/10)
Next i
If m
r$=Str(m)+r$
EndIf
w1=w2
w2=ReverseString(r$)
Debug r$
WriteStringN(0,r$)
Next k
CloseFile(0)
Дополнение 02-12-23 Версия для ZX
Комментарии
Отправить комментарий