<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Куда все подевались?]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Куда все подевались? форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sat, 09 May 2026 04:59:13 +0300</pubDate>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76094/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			подчистил пример тестов ранее:
====code====
<pre>local size = 1000000 local N=1023&nbsp;&nbsp;local F = {}

local function shiftArray(x)
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;3&#93; = F&#91;2&#93;&nbsp;&nbsp;&nbsp;&nbsp;F&#91;2&#93; = F&#91;1&#93;&nbsp;&nbsp;F&#91;1&#93; = x&nbsp;&nbsp;end
start = os.clock() for I=1,size do shiftArray(I) end time = 1000000*(os.clock()- start)/size
print("1. вариант 1(мкс):",time)

local index=0;
local function addElement(x) index=(index % 3)+1 F&#91;index&#93; = x end
start = os.clock()&nbsp;&nbsp;for I=1,size do addElement(I) end time = 1000000*(os.clock()- start)/size
print("2. вариант 1a(мкс):", time)

index=0;
local function addElement(x)
&nbsp;&nbsp;&nbsp;&nbsp;index=(index%3)+1 F&#91;index&#93;=x
&nbsp;&nbsp;&nbsp;&nbsp;local result = {}&nbsp;&nbsp;for i = 1,3 do&nbsp;&nbsp;result&#91;i&#93;=F&#91;(index-i+3)%3 + 1&#93;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return result
end
local index=0 start= os.clock() for I=1,size do&nbsp;&nbsp;addElement(I)&nbsp;&nbsp;end time = 1000000*(os.clock()- start)/size
print("3. вариант 2:(мкс):", time)

---- 3. Простой вариант с переменной currentIndex
local cIndex = 1
local function addElement(x) F&#91;cIndex&#93;=x cIndex=cIndex+1 if cIndex&#62;N then cIndex=1 end end
start = os.clock()&nbsp;&nbsp;for i= 1, size do&nbsp;&nbsp; addElement(i) end&nbsp;&nbsp;time = 1000000*(os.clock()- start)/size
print("4. вариант 3(мкс):", time)

local cIndex=1
local function addElementNK(x) F&#91;cIndex&#38;N&#93;=x cIndex=cIndex + 1 end
start=os.clock() for i = 1, size do&nbsp;&nbsp;&nbsp;&nbsp;addElementNK(i) end&nbsp;&nbsp;time = 1000000*(os.clock()- start)/size
print("5. вариант NK(мкс):", time)

local cIndex = 1
start=os.clock() for i = 1, size do F&#91;cIndex&#38;N&#93;=i;cIndex=cIndex+1 end time = 1000000*(os.clock()- start)/size
print("6. вариант NK без функции(мкс):", time)

</pre>
=============
результат Lua 5.4
====code====
<pre>1. вариант 1(мкс):&nbsp;&nbsp;&nbsp;0.047
2. вариант 1a(мкс):&nbsp;&nbsp;&nbsp;0.048
3. вариант 2:(мкс):&nbsp;&nbsp;&nbsp;0.721
4. вариант 3(мкс):&nbsp;&nbsp;&nbsp;0.045
5. вариант NK(мкс):&nbsp;&nbsp;&nbsp;0.04
6. вариант NK без функции(мкс):&nbsp;&nbsp;&nbsp;0.012
&#62;Exit code: 0
</pre>
============= <br />
			<i>13.07.2024 09:27:47, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76094/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76094/topic8686/</guid>
			<pubDate>Sat, 13 Jul 2024 09:27:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76091/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			VPM,<br />вот этот вариант можно &nbsp;сделать еще быстрее:<br />это ваш вариант
====code====
<pre>---- 3. Простой вариант с переменной currentIndex
local F = {} for i = 1, 1000 do&nbsp;&nbsp;F&#91;i&#93;=0 end
size=1000000
local N=1024
local currentIndex = 1
local function addElement(x) F&#91;currentIndex&#93;=x currentIndex=currentIndex+1 if currentIndex&#62;N then currentIndex=1 end return F end
local start_time = os.clock()
for i = 1, size do&nbsp;&nbsp; addElement(i) end -- повторяем 1 млн.
local end_time = os.clock()
print("4. Время выполнения для варианта 3:", end_time - start_time, "секунд")
</pre>
=============
это мой вариант:
====code====
<pre>local N=1024
local F = {} for i = 1,N do&nbsp;&nbsp;F&#91;i&#93;=0 end
size=1000000
local currentIndex = 1
local function addElementNK(x) F&#91;currentIndex&#38;(N-1)&#93;=x currentIndex=currentIndex + 1 return F end
local start_time = os.clock()
for i = 1, size do&nbsp;&nbsp;&nbsp;&nbsp;addElementNK(i) end -- повторяем 1 млн.
local end_time = os.clock()
print("5. Время выполнения для варианта NK:", end_time - start_time, "секунд")

</pre>
=============
это результат:
====code====
<pre>4. Время выполнения для варианта 3:&nbsp;&nbsp;&nbsp;0.046&nbsp;&nbsp;&nbsp;секунд
5. Время выполнения для варианта NK:&nbsp;&nbsp;&nbsp;0.043&nbsp;&nbsp;&nbsp;секунд

</pre>
=============
Пару слов без протокола.<br />В этих функциях лишним является оператор return F<br />т к нет смысла возвращать то, что изначально определено вне функции<br />тоже самое относится и к переменной currentIndex<br />нет смысла ее индексировать внутри функции, можно снаружи<br />в моем случае все можно записать &nbsp;так:
====code====
<pre>local N=1024
local F = {} for i = 1,N do&nbsp;&nbsp;F&#91;i&#93;=0 end
size=1000000
local currentIndex = 1
local start_time = os.clock()
for i = 1, size do&nbsp;&nbsp;&nbsp;&nbsp;F&#91;currentIndex&#38;(N-1)&#93;=i;currentIndex=currentIndex + 1 end -- повторяем 1 млн.
local end_time = os.clock()
print("6. Время выполнения для варианта NK без функции:", end_time - start_time, "секунд")
</pre>
=============
результат:
====code====
<pre>6. Время выполнения для варианта NK без функции:&nbsp;&nbsp;&nbsp;0.014&nbsp;&nbsp;&nbsp;секунд
</pre>
============= <br />
			<i>12.07.2024 18:00:01, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76091/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76091/topic8686/</guid>
			<pubDate>Fri, 12 Jul 2024 18:00:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76090/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			а это время вычисления для 1 млн.элементов для циклического массива в 1000 элементов<br />для стека указано время push pop<br />для очереди указано время записи и извлечения<br />Lua 5.4
====code====
<pre>Время выполнения стек 0(сек):&nbsp;&nbsp;&nbsp;0.048,0.051
Время выполнения очередь(сек):&nbsp;&nbsp;&nbsp;0.036,0.051
&#62;Exit code: 0

</pre>
=============
Luajit
====code====
<pre>Время выполнения стек 0(сек):&nbsp;&nbsp;&nbsp;0.003,0.001
Время выполнения очередь(сек):&nbsp;&nbsp;&nbsp;0,0.001
</pre>
============= <br />
			<i>12.07.2024 17:23:37, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76090/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76090/topic8686/</guid>
			<pubDate>Fri, 12 Jul 2024 17:23:37 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76089/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Если интересует производительность, то вот результат запуска скрипта, который выше, в lua 5.4 и luajit<br />------------- <br />lua5.4<br />
====code====
<pre>1. Время выполнения для варианта 1:&nbsp;&nbsp;&nbsp;0.005&nbsp;&nbsp;&nbsp;секунд
2. Время выполнения для варианта 1a:&nbsp;&nbsp;&nbsp;0.005&nbsp;&nbsp;&nbsp;секунд
3. Время выполнения для варианта 2:&nbsp;&nbsp;&nbsp;0.077&nbsp;&nbsp;&nbsp;секунд
4. Время выполнения для варианта 3:&nbsp;&nbsp;&nbsp;0.004&nbsp;&nbsp;&nbsp;секунд
&#62;Exit code: 0

</pre>
=============
luajit
====code====
<pre>1. Время выполнения для варианта 1:&nbsp;&nbsp;&nbsp;0.001&nbsp;&nbsp;&nbsp;секунд
2. Время выполнения для варианта 1a:&nbsp;&nbsp;&nbsp;0.001&nbsp;&nbsp;&nbsp;секунд
3. Время выполнения для варианта 2:&nbsp;&nbsp;&nbsp;0.015&nbsp;&nbsp;&nbsp;секунд
4. Время выполнения для варианта 3:&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;секунд
&#62;Exit code: 0
</pre>
============= <br />
			<i>12.07.2024 17:18:44, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76089/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76089/topic8686/</guid>
			<pubDate>Fri, 12 Jul 2024 17:18:44 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76074/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Примеры не равнозначны, т.к. в первой реализации функции addElement есть вывод элементов, т.е. цикл.<br /><br /><br />В общем случае алгоритм с единичным действием вставки элемента имеет константную сложность O(1), а тот, где есть сдвиги - О(n). Так что даже вопроса нет что быстрее.А скорость расчета индекса - это не то, что сильно повлияет на производительность в случае О(1). <br />
			<i>10.07.2024 15:12:29, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76074/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76074/topic8686/</guid>
			<pubDate>Wed, 10 Jul 2024 15:12:29 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76073/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_NoozWktw" href="/user/16015/" bx-tooltip-user-id="16015">funduk</a>, Не уверен что по этому, а что же тогда будет являться обсуждением? Но в одном Вы правы.<br />И прежде чем продолжить, должен принести свои извинения, за излишнею грубость и хамство. <a class="blog-p-user-name" id="bp_ktSMfZVE" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;извините.<br /><br />Касаемо предмета обсуждения, фактически представлена реализация 3 вариантов кольцевого буфера с разными методами исполнения, <br />не смотря на то что изменения не значительны, но они сильно влияют на производительность алгоритма. Не вооруженным глазом видно что вариант1 быстрее варианта2. <br />Здесь рассуждение простые, вариант1 это всегда вставка(1 элемент), в то время как вариант2 это вставка(n элемент буфера).<br />Видимо фактор производительности, явился решающим для включения разработчиками данного подхода в свои индикаторы, но для меня оно интуитивно смущало из-за не прозрачного расчета индексов. Решил проверить вариант с двухсвязной очередью, дописал вариант для проверки на производительность.<br />И каково было мое удивление, ну в общем судите сами, вот варианты.
====code====
<pre>local size = 100000 -- 3
 
do ---- 1.
--local F = {0, 0, 0}
local F = {}
for i = 1, size do
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;i&#93; = 0
end

local start_time = os.clock()
local function shiftArray(x)
&nbsp;&nbsp;&nbsp;&nbsp;-- Сдвигаем элементы массива
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;3&#93; = F&#91;2&#93;
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;2&#93; = F&#91;1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;1&#93; = x -- Записываем новый элемент в конец массива
&nbsp;&nbsp;&nbsp;&nbsp;return F -- Возвращаем массив целиком (или можете возвращать только F&#91;3&#93;, если нужно)
end
for I=1,size do
--print( shiftArray(I), F&#91;1&#93;, F&#91;2&#93;, F&#91;3&#93; )
shiftArray(I)
end
local end_time = os.clock()
print("1. Время выполнения для варианта 1:", end_time - start_time, "секунд")
end
do --local F = {0, 0, 0}
local F = {}
for i = 1, size do
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;i&#93; = 0
end

local start_time = os.clock()
local index = 0
local function addElement(x)
&nbsp;&nbsp;&nbsp;&nbsp;index = (index % 3) + 1
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;index&#93; = x
&nbsp;&nbsp;&nbsp;return F
end
for I=1,size do
--print(addElement(I), F&#91;1&#93;, F&#91;2&#93;, F&#91;3&#93; )
addElement(I)
end
local end_time = os.clock()
print("2. Время выполнения для варианта 1a:", end_time - start_time, "секунд")
end
do ---- 2.
--local F = {0, 0, 0}
local F = {}
for i = 1, size do
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;i&#93; = 0
end

local start_time = os.clock()
local index = 0
local function addElement(x)
&nbsp;&nbsp;&nbsp;&nbsp;-- Обновляем текущий индекс с учетом кольцевого буфера
&nbsp;&nbsp;&nbsp;&nbsp;index = (index % 3) + 1
&nbsp;&nbsp;&nbsp;&nbsp;-- Вставляем новый элемент в текущий индекс
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;index&#93; = x
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;-- Для наглядности выводим текущий массив
&nbsp;&nbsp;&nbsp;&nbsp;local result = {}
&nbsp;&nbsp;&nbsp;&nbsp;for i = 1, 3 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&#91;i&#93; = F&#91;(index - i + 3) % 3 + 1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return result
end
for I=1,size do
--print('*',addElement(I), F&#91;1&#93;, F&#91;2&#93;, F&#91;3&#93; )
addElement(I)
end
local end_time = os.clock()
print("3. Время выполнения для варианта 2:", end_time - start_time, "секунд")
end
do ---- 3. Простой вариант с переменной currentIndex
local F = {}
for i = 1, 1000 do
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;i&#93; = 0
end

local start_time = os.clock()
local currentIndex = 1
local function addElement(x)
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;currentIndex&#93; = x
&nbsp;&nbsp;&nbsp;&nbsp;currentIndex = currentIndex + 1
&nbsp;&nbsp;&nbsp;&nbsp;if currentIndex &#62; 1000 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentIndex = 1
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return F
end

for i = 1, 100000 do -- Повторяем операцию добавления 100000 раз
&nbsp;&nbsp;&nbsp;&nbsp;addElement(i)
end

local end_time = os.clock()
print("4. Время выполнения для варианта 3:", end_time - start_time, "секунд")
end
А вот ответы:
1. Время выполнения для варианта 1:&nbsp;&nbsp;&nbsp;0.009&nbsp;&nbsp;&nbsp;секунд
2. Время выполнения для варианта 1a:&nbsp;&nbsp;&nbsp;0.006&nbsp;&nbsp;&nbsp;секунд
3. Время выполнения для варианта 2:&nbsp;&nbsp;&nbsp;1.185&nbsp;&nbsp;&nbsp;секунд
4. Время выполнения для варианта 3:&nbsp;&nbsp;&nbsp;0.0050000000000001&nbsp;&nbsp;&nbsp;секунд
&#62;Exit code: 0&nbsp;&nbsp;&nbsp;&nbsp;Time: 1.768
</pre>
============= <br />
			<i>10.07.2024 13:33:11, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76073/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76073/topic8686/</guid>
			<pubDate>Wed, 10 Jul 2024 13:33:11 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76021/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Может быть, потому все и разбежались, что в любом топике море оффтопа :) <br />
			<i>04.07.2024 01:41:09, funduk.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76021/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76021/topic8686/</guid>
			<pubDate>Thu, 04 Jul 2024 01:41:09 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76018/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_N6GMPaKm" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;Извините за банальность, но так сравнивают только &quot;Х&quot; с пальцем. Если Вы хотите провести сравнительные тесты, то нужно определим критерии по которым будут сравнивать. А сравнивать нужно хотя бы эти варианты.<br />
====code====
<pre>1. Pешение с использованием кольцевого буфера

local F = {0, 0, 0}
local index = 0
local function addElement(x)
&nbsp;&nbsp;&nbsp;&nbsp;index = (index % 3) + 1
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;index&#93; = x
&nbsp;&nbsp; return F
end
for I=1,10 do
print(addElement(I), F&#91;1&#93;, F&#91;2&#93;, F&#91;3&#93; )
end

2. Вариант. Альтернативное решение
local F = {0, 0, 0}
local function shiftArray(x)
&nbsp;&nbsp;&nbsp;&nbsp;-- Сдвигаем элементы массива
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;3&#93; = F&#91;2&#93;
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;2&#93; = F&#91;1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;1&#93; = x -- Записываем новый элемент в конец массива
&nbsp;&nbsp;&nbsp;&nbsp;return F -- Возвращаем массив целиком (или можете возвращать только F&#91;1&#93;, если нужно)
end

for I=1,10 do
print(shiftArray(I), F&#91;1&#93;, F&#91;2&#93;, F&#91;3&#93; )
end</pre>
=============
А может подскажите, где я сказал, что какой то вариант лучше? <br />
			<i>03.07.2024 19:41:41, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76018/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76018/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 19:41:41 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76017/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_r3B1lttg" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex>, &nbsp;Когда Вы голову подымите чуть выше, заметите что я поправил Ваш вариант, и для сравнения выложил альтернативное решение с использованием кольцевого буфера, даже попробовал разный порядок хранения данных. &nbsp;Что лучше, почему лучше, когда какой применять, решает пользователь под свои задачи. А я лишь привожу пример про универсальный способ, и показываю его преимущества, относительно других. Но в любом случае их нужно погонять в условиях когда пропадают свечи, когда вызывается по нескольку раз на одном индексе алгоритмы и прочие радости жизни алгоритмов в квике. &nbsp;<br />=============<br />можете ответить кратко на мой вопрос.<br />Чем ваш конкретный вариант на 3 элемента лучше чем тот который я привел. Я просто написал вам то, что элементарно делается.<br />Так делают &nbsp;сортировку 3 элементов. &nbsp;<br />-----------------------<br />И так ответьте на вопросы:<br />Обсуждаем вот эти две функции:<br /><br />
====code====
<pre>local ChannelPDF={}
function ChannelPDF:FilterSmooth()
&nbsp;&nbsp;&nbsp;&nbsp;local F = {0, 0, 0}&nbsp;&nbsp;-- кольцевой буфер на 3 элемента
&nbsp;&nbsp;&nbsp;&nbsp;local index = 1
&nbsp;&nbsp;&nbsp;&nbsp;local start = true
&nbsp;&nbsp;&nbsp;&nbsp;return function(I, x)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if I == 1 or start then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F = {0, 0, 0} -- Инициализация значений
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index = 1 -- Инициализация индекса
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start = false
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F&#91;index&#93; = x -- Обновление (новое значение)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local y = F&#91;index&#93; + 2 * F&#91;(index - 1 - 1) % 3 + 1&#93; + F&#91;(index - 2 - 1) % 3 + 1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y = y and (y &#62;= 1 and 0.999 or y &#60;= -1 and -0.999 or x) or y
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index = index % 3 + 1 -- Обновление индекса
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return y
&nbsp;&nbsp;&nbsp;&nbsp;end
end


</pre>
=============

====code====
<pre>function&nbsp;&nbsp; shiftArray (x)&nbsp;&nbsp;local&nbsp;&nbsp;z = F&#91; 1 &#93; F&#91; 1 &#93; = F&#91; 2 &#93; F&#91; 2 &#93; = F&#91; 3 &#93; F&#91; 3 &#93; = x&nbsp;&nbsp; return&nbsp;&nbsp;z&nbsp;&nbsp;end</pre>
=============
Чем функция 1 лучше, чем функция 2.<br />Прошу Вас не отвлекаться и не рассказывать мне, где и что Вы раньше написали.<br />Напишите кратко и конкретно здесь <br />---------------<br />Мой ответ на мой вопрос такой:<br />Функция 1 сложнее, чем функция 2. <br />------------------<br />Ваш ответ? <br />
			<i>03.07.2024 19:20:31, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76017/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76017/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 19:20:31 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76016/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_rWrgjIES" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;Когда Вы голову подымите чуть выше, заметите что я поправил Ваш вариант, и для сравнения выложил альтернативное решение с использованием кольцевого буфера, даже попробовал разный порядок хранения данных. &nbsp;Что лучше, почему лучше, когда какой применять, решает пользователь под свои задачи. А я лишь привожу пример про универсальный способ, и показываю его преимущества, относительно других. Но в любом случае их нужно погонять в условиях когда пропадают свечи, когда вызывается по нескольку раз на одном индексе алгоритмы и прочие радости жизни алгоритмов в квике. &nbsp; <br />
			<i>03.07.2024 18:58:06, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76016/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76016/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 18:58:06 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76012/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_nw3Ke0u0" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br /><noindex><a href="/user/3132/" target="_blank" rel="nofollow">Nikolay</a></noindex>, &nbsp;Ну смотрите на моем примере выше при использовании двусвязной очереди, все Вами описанные задачи по сути сводятся к одному задать длину и метод извлечения, то есть ввести входные данные, которые можно менять динамически ведя дополнительные расчеты, или жестко установить. А вот что у меня получилось из примера <noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex>, я в кольцевом буфере попытался поменять порядок хранения данных. Ну в общем то и не получается поменять.<br /> 
====code====
<pre>&nbsp;&nbsp;&nbsp;&nbsp;</pre>
=============
 <br />=============<br />Давайте вернемся к Вашей функции циклического массива на 3 элемента.<br />Я исправил ошибку в своем варианте и он работает.<br />-----------------<br />Предлагаю не перескакивать с одной задачи на другую, Давайте сначала закончим с Вашим вариантом циклического массива на 3<br />потом перейдем к связанным или нет спискам. <br />-------------------<br />Повторю свой вопрос.<br />Чем Ваш вариант лучше по сравнению с указанным мною примером ( могу потом написать еще проще) но давайте закончим с этим.<br />Что не так у меня и что лучше у Вас?<br />прошу подробно объяснить именно про это. <br />
			<i>03.07.2024 18:21:08, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76012/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76012/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 18:21:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76011/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вот в этом варианте вроде работает, ну как то все сложно и сиюминутно
====code====
<pre>local F = {0, 0, 0}
local index = 0
local function addElement(x)
&nbsp;&nbsp;&nbsp;&nbsp;-- Обновляем текущий индекс с учетом кольцевого буфера
&nbsp;&nbsp;&nbsp;&nbsp;index = (index % 3) + 1
&nbsp;&nbsp;&nbsp;&nbsp;-- Вставляем новый элемент в текущий индекс
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;index&#93; = x
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;-- Для наглядности выводим текущий массив
&nbsp;&nbsp;&nbsp;&nbsp;local result = {}
&nbsp;&nbsp;&nbsp;&nbsp;for i = 1, 3 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&#91;i&#93; = F&#91;(index - i + 3) % 3 + 1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return result
end
</pre>
============= <br />
			<i>03.07.2024 18:20:18, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76011/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76011/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 18:20:18 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76010/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_3I1cwMu9" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> написал:<br />Мне непонятно, в чем его выгода и что же он делает. ------------------Полагаю, что есть другие вариант решения.<br />=============<br /> &nbsp;<br />====quote====<br /><noindex><a href="/user/16131/" target="_blank" rel="nofollow">VPM</a></noindex> написал:<br />Классический кольцевой буфер, также известный как циклический буфер или кольцевая очередь, используется для хранения фиксированного количества последних значений в массиве.<br />=============<br /> Наверняка есть, <noindex><a href="/user/13968/" target="_blank" rel="nofollow">Айдар</a></noindex>, &nbsp;выложил свой, я могу в виде класса выложить. <br />====quote====<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> написал:<br />Если я правильно Вас понял, то вот элементарное альтернативное решение:Кодlocal F={0,0,0} <br />local function shiftArray(x) local x=F&#91;1&#93; F&#91;1&#93;=F&#91;2&#93; F&#91;2&#93;=F&#91;3&#93; F&#91;3&#93;=x &nbsp;return x end<br /><br />Массив F имеет размер как у Вас. В нем хранится последние 3 элемента. При записи нового , первый выталкивается. Что не так? И в чем преимущество Вашего решения? &nbsp;<br />=============<br /> Если Вы загрузите в SciTe это пример он не будет работать. Вот я уже попробовал<br /> 
====code====
<pre>&nbsp;&nbsp; local&nbsp;&nbsp;F = { 0 , 0 , 0 } 
 local&nbsp;&nbsp; function&nbsp;&nbsp; shiftArray (x)&nbsp;&nbsp;local&nbsp;&nbsp;x = F&#91; 1 &#93; F&#91; 1 &#93; = F&#91; 2 &#93; F&#91; 2 &#93; = F&#91; 3 &#93; F&#91; 3 &#93; = x&nbsp;&nbsp; return&nbsp;&nbsp;x&nbsp;&nbsp;end 
 for&nbsp;&nbsp;I =&nbsp;&nbsp;1 , 10&nbsp;&nbsp; do 
 print (shiftArray(I), F&#91; 1 &#93;, F&#91; 2 &#93;, F&#91; 3 &#93; )
 end 
ответы:
 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0 
 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0 
 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0 
 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0 
 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0 
 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0 
 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0 
 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0 
 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0 
 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0 
 &#62; Exit code:&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp; Time:&nbsp;&nbsp;0.4064 
&nbsp;&nbsp;</pre>
=============
 <br />=============<br />Пардон, опечатка. <br />----------------<br />должно быть так:
====code====
<pre> local&nbsp;&nbsp; function&nbsp;&nbsp; shiftArray (x)&nbsp;&nbsp;local&nbsp;&nbsp;z = F&#91; 1 &#93; F&#91; 1 &#93; = F&#91; 2 &#93; F&#91; 2 &#93; = F&#91; 3 &#93; F&#91; 3 &#93; = x&nbsp;&nbsp; return&nbsp;&nbsp;z&nbsp;&nbsp;end 
---------------------------
 for&nbsp;&nbsp;I =&nbsp;&nbsp;1 , 10&nbsp;&nbsp; do&nbsp;&nbsp;print (shiftArray(I), F&#91; 1 &#93;, F&#91; 2 &#93;, F&#91; 3 &#93; )
 end 
-----------------------&nbsp;&nbsp;
результат:
0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;1
0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;2
0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;3
1&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;4
2&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;5
3&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;6
4&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;7
5&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;8
6&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;9
7&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;10
&#62;Exit code: 0












</pre>
============= <br />
			<i>03.07.2024 18:14:09, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76010/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76010/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 18:14:09 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76009/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_oriiWltV" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a>, &nbsp;Ну смотрите на моем примере выше при использовании двусвязной очереди, все Вами описанные задачи по сути сводятся к одному задать длину и метод извлечения, то есть ввести входные данные, которые можно менять динамически ведя дополнительные расчеты, или жестко установить. А вот что у меня получилось из примера <a class="blog-p-user-name" id="bp_yys4MOmu" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, я в кольцевом буфере попытался поменять порядок хранения данных. Ну в общем то и не получается поменять.<br />
====code====
<pre>
</pre>
============= <br />
			<i>03.07.2024 18:08:19, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76009/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76009/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 18:08:19 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76008/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_Q250MfAv" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />Ну хорошо если знаете алгоритм, приведите пример алгоритма &quot;самое быстрое решение это перезапись элемента и расчет очередного корректного индекса&quot; динамически меняющего индекс, длину и веса? &nbsp;<br />=============<br />Что это значит &quot;динамически меняющего индекс, длину и веса&quot;? Если речь про очередь, стек, то одна задача. Если речь про хранение в массиве определенного числа элементов, скажем 100 и не более, то это другая. <br />
			<i>03.07.2024 17:31:42, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76008/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76008/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 17:31:42 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76007/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_cakNUGdQ" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a> написал:<br />Так и нет ответа, зачем сдвиги, если самое быстрое решение это перезапись элемента и расчет очередного корректного индекса.<br />=============<br />А я не уверен что есть сдвиги, алгоритм помнит индексы, обновляет эти индексы.<br />Сам пример FilterSmooth(), подразумевает что можно менять длину и веса простыми способами. <br /><br />Ну хорошо если знаете алгоритм, приведите пример алгоритма &quot;самое быстрое решение это перезапись элемента и расчет очередного корректного индекса&quot; динамически меняющего индекс, длину и веса? &nbsp; <br />
			<i>03.07.2024 17:24:01, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76007/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76007/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 17:24:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76006/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_46CSONxM" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;Вот так работает <br />
====code====
<pre>local F = {0, 0, 0}
local function shiftArray(x)
&nbsp;&nbsp;&nbsp;&nbsp;-- Сдвигаем элементы массива
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;3&#93; = F&#91;2&#93;
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;2&#93; = F&#91;1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;1&#93; = x -- Записываем новый элемент в конец массива
&nbsp;&nbsp;&nbsp;&nbsp;return F -- Возвращаем массив целиком (или можете возвращать только F&#91;1&#93;, если нужно)
end

for I=1,10 do
print(shiftArray(I), F&#91;1&#93;, F&#91;2&#93;, F&#91;3&#93; )
end

table: 0000000002710d50&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0
table: 0000000002710d50&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;0
table: 0000000002710d50&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;1
table: 0000000002710d50&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;2
table: 0000000002710d50&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;3
table: 0000000002710d50&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;4
table: 0000000002710d50&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;5
table: 0000000002710d50&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;6
table: 0000000002710d50&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;7
table: 0000000002710d50&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;8
&#62;Exit code: 0&nbsp;&nbsp;&nbsp;&nbsp;Time: 0.3958

2. Альтернативное решение с использованием кольцевого буфера

local F = {0, 0, 0}
local index = 0
local function addElement(x)
&nbsp;&nbsp;&nbsp;&nbsp;index = (index % 3) + 1
&nbsp;&nbsp;&nbsp;&nbsp;F&#91;index&#93; = x
&nbsp;&nbsp;&nbsp;return F
end
for I=1,10 do
print(addElement(I), F&#91;1&#93;, F&#91;2&#93;, F&#91;3&#93; )
end

table: 00000000025a1150&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0
table: 00000000025a1150&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;0
table: 00000000025a1150&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;3
table: 00000000025a1150&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;3
table: 00000000025a1150&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;3
table: 00000000025a1150&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;6
table: 00000000025a1150&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;6
table: 00000000025a1150&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;6
table: 00000000025a1150&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;9
table: 00000000025a1150&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;9
</pre>
============= <br />
			<i>03.07.2024 17:09:43, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76006/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76006/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 17:09:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76005/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Так и нет ответа, зачем сдвиги, если самое быстрое решение это перезапись элемента и расчет очередного корректного индекса. <br />
			<i>03.07.2024 16:51:46, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76005/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76005/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 16:51:46 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76004/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_7ooR6R22" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br />Мне непонятно, в чем его выгода и что же он делает. ------------------Полагаю, что есть другие вариант решения.<br />=============<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_b4Tt1rnP" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />Классический кольцевой буфер, также известный как циклический буфер или кольцевая очередь, используется для хранения фиксированного количества последних значений в массиве.<br />=============<br />Наверняка есть, <a class="blog-p-user-name" id="bp_29pNRVN7" href="/user/13968/" bx-tooltip-user-id="13968">Айдар</a>, &nbsp;выложил свой, я могу в виде класса выложить.<br />====quote====<br /><a class="blog-p-user-name" id="bp_y50tKUlP" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br />Если я правильно Вас понял, то вот элементарное альтернативное решение:Кодlocal F={0,0,0} <br />local function shiftArray(x) local x=F&#91;1&#93; F&#91;1&#93;=F&#91;2&#93; F&#91;2&#93;=F&#91;3&#93; F&#91;3&#93;=x &nbsp;return x end<br /><br />Массив F имеет размер как у Вас. В нем хранится последние 3 элемента. При записи нового , первый выталкивается. Что не так? И в чем преимущество Вашего решения? &nbsp;<br />=============<br />Если Вы загрузите в SciTe это пример он не будет работать. Вот я уже попробовал<br />
====code====
<pre>local F={0,0,0} 
local function shiftArray(x) local x=F&#91;1&#93; F&#91;1&#93;=F&#91;2&#93; F&#91;2&#93;=F&#91;3&#93; F&#91;3&#93;=x&nbsp;&nbsp;return x end
for I=1,10 do
print(shiftArray(I), F&#91;1&#93;, F&#91;2&#93;, F&#91;3&#93; )
end
ответы:
0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0
0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0
0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0
0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0
0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0
0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0
0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0
0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0
0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0
0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0
&#62;Exit code: 0&nbsp;&nbsp;&nbsp;&nbsp;Time: 0.4064
</pre>
============= <br />
			<i>03.07.2024 16:45:29, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76004/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76004/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 16:45:29 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76002/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_ghCkuV1a" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a> написал:<br />Прежде чем кидать примеры, необходимо понимать зачем и как это будет использоваться.<br />=============<br />Так именно это я и отношу в не достаток такого подхода<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_e7RvHzFe" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />Я привел пример, с указанием на недостатки - для кольцевого буфера, извлечение данных зависит от конкретного сценария использования и потребностей, и указал на лучший подход<br />=============<br />По сложности не намного сложней описанного Вами подхода, класс удобен, в моем примере (посчитал) аж 5 экземпляров очередей, различного размера, размер легко меняется, как и направление то есть динамичен структуру можно менять в процессе эксплуатации , универсальность (действует принцип по образу и подобию создаются экземпляры)<br />Динамичность позволяет менять структуру в процессе эксплуатации, например при поиске оптимальных параметров. Универсальность один раз разобрался и забыл.<br />Да и потом я не настаиваю что это единственный подход, я говорю что это удобно. <br />
			<i>03.07.2024 16:28:41, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76002/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76002/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 16:28:41 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message76000/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_8C2bThKz" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />Судите сами вот тот же пример. Изменение класса Ehlers.ChannelPDF, чтобы использовать двусвязную очередь для кольцевого буфера. 
====code====
<pre>&nbsp;&nbsp;</pre>
=============
 Называть наверно следует, кольцевая очередь, используется для хранения фиксированного количества последних значений в массиве<br />=============<br />Вы правы, я не читаю форумы полностью.<br />Когда зашел, то и прочитал.<br />Спасибо, что написали примеры.<br />-------------------<br />Возможно не понял Ваши объяснения. <br />попробую задать вопросы снова, если не сложно расскажите свое понимание.<br />-------------------- <br />Возьмем для начала беседы ваш кольцевой буфер на три элемента. 
====code====
<pre>- Метод FilterSmooth
local ChannelPDF={}
function ChannelPDF:FilterSmooth()
&nbsp;&nbsp;&nbsp;&nbsp;local F = {0, 0, 0}&nbsp;&nbsp;-- кольцевой буфер на 3 элемента
&nbsp;&nbsp;&nbsp;&nbsp;local index = 1
&nbsp;&nbsp;&nbsp;&nbsp;local start = true
&nbsp;&nbsp;&nbsp;&nbsp;return function(I, x)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if I == 1 or start then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F = {0, 0, 0} -- Инициализация значений
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index = 1 -- Инициализация индекса
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start = false
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F&#91;index&#93; = x -- Обновление (новое значение)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local y = F&#91;index&#93; + 2 * F&#91;(index - 1 - 1) % 3 + 1&#93; + F&#91;(index - 2 - 1) % 3 + 1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y = y and (y &#62;= 1 and 0.999 or y &#60;= -1 and -0.999 or x) or y
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index = index % 3 + 1 -- Обновление индекса
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return y
&nbsp;&nbsp;&nbsp;&nbsp;end
end</pre>
=============
Мне непонятно, в чем его выгода и что же он делает. <br />------------------<br />Полагаю, что есть другие вариант решения.<br />============= &nbsp;<br />Если мы с Вами говорим об одном и том же, <br />то кольцевой буфер на три элемента позволяет нам получить лишь три последних элемента последовательности чисел. <br />---------------------------<br />Т е это буфер данных, но его глубина всего три элемента. Верно?<br />--------------------------<br />Т е это его недостаток, а за это Вы полагаете, получается экономия памяти . Верно?<br />===============<br />Если я правильно Вас понял, то вот элементарное альтернативное решение:
====code====
<pre>local F={0,0,0} 
local function shiftArray(x) local x=F&#91;1&#93; F&#91;1&#93;=F&#91;2&#93; F&#91;2&#93;=F&#91;3&#93; F&#91;3&#93;=x&nbsp;&nbsp;return x end

</pre>
=============
Массив F имеет размер как у Вас. <br />В нем хранится последние 3 элемента. При записи нового , первый выталкивается.<br /> Что не так? <br />И в чем преимущество Вашего решения? &nbsp; <br />
			<i>03.07.2024 15:55:22, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message76000/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message76000/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 15:55:22 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75998/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Прежде чем кидать примеры, необходимо понимать зачем и как это будет использоваться.<br />Для примера, простая задача оптимизации памяти, не требует никаких сложных конструкций. Например, так сделано в примера расчета индикаторов от ARQA.<br />Задача хранить в массиве не более 5 элементов. Решение - просто рассчитывать индекс массива через операцию %. Все.<br /><br />Для примера, массив на 5 элементов. Значит индекс 12 будет записан в элемент 12%5 = 2<br /><br />А методы сдвига, нужны если необходимы очереди, стеки. Которые прекрасно реализуются и без кольца. <br />
			<i>03.07.2024 14:57:18, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75998/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75998/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 14:57:18 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75996/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Судите сами вот тот же пример. Изменение класса Ehlers.ChannelPDF, чтобы использовать двусвязную очередь для кольцевого буфера.
====code====
<pre>local Queue = require("QueueClass")&nbsp;&nbsp;-- класс Queue сохранен в файле QueueClass.lua

Ehlers.ChannelPDF = {}
Ehlers.ChannelPDF.__index = Ehlers.ChannelPDF
function Ehlers.ChannelPDF.new(FSettings, ds)
&nbsp;&nbsp;&nbsp;&nbsp;local self = setmetatable({}, Ehlers.ChannelPDF)
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;self.FSettings = FSettings or {}
&nbsp;&nbsp;&nbsp;&nbsp;self.ds = ds
&nbsp;&nbsp;&nbsp;&nbsp;self.P = FSettings.period or 4
&nbsp;&nbsp;&nbsp;&nbsp;self.up = FSettings.up or 1.0
&nbsp;&nbsp;&nbsp;&nbsp;self.dw = FSettings.dw or -1.0
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;self.I1 = 0
&nbsp;&nbsp;&nbsp;&nbsp;self.hh, self.ll = 0, 0
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;self.Lead = Queue.new()
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;self:initialize()
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;return self
end
function Ehlers.ChannelPDF:initialize()
&nbsp;&nbsp;&nbsp;&nbsp;self.fTransformFisher = self:TransformFisher()
&nbsp;&nbsp;&nbsp;&nbsp;self.fTransformIFisher = self:TransformIFisher()
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;self.fFilterSmooth = self:FilterSmooth()
&nbsp;&nbsp;&nbsp;&nbsp;self.fFilterLead = self:FilterLead()
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;self.I1 = 0
&nbsp;&nbsp;&nbsp;&nbsp;self.Lead = Queue.new()
end

function Ehlers.ChannelPDF:FilterSmooth()
&nbsp;&nbsp;&nbsp;&nbsp;local F = Queue.new()
&nbsp;&nbsp;&nbsp;&nbsp;return function(I, x)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if I == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F = Queue.new()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for _ = 1, 3 do F:push_right(0) end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F:pop_left()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F:push_right(x)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local y = 2 * F&#91;1&#93; + F&#91;2&#93; - F&#91;3&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y = y and (y &#62;= 1 and 0.999 or y &#60;= -1 and -0.999 or x) or y
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return y
&nbsp;&nbsp;&nbsp;&nbsp;end
end

</pre>
=============
Называть наверно следует, кольцевая очередь, используется для хранения фиксированного количества последних значений в массиве <br />
			<i>03.07.2024 13:33:04, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75996/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75996/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 13:33:04 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75995/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_U5jbVIL4" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;Ну Вы в своем амплуа, целую повесть я тут написал<br />====quote====<br /><a class="blog-p-user-name" id="bp_hO37ltKR" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />Расписал подробно для общего понимания вопроса<br />=============<br />Это моя реализация (частный случай но показательный) как можно использовать<br />====quote====<br /><a class="blog-p-user-name" id="bp_qHBDC5kc" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />Классический кольцевой буфер, также известный как циклический буфер или кольцевая очередь, используется для хранения фиксированного количества последних значений в массиве.<br />=============<br /><a class="blog-p-user-name" id="bp_SDiXZ6Q6" href="/user/13968/" bx-tooltip-user-id="13968">Айдар</a>, &nbsp;попросил мой вариант <br />====quote====<br /><a class="blog-p-user-name" id="bp_kr5Ch172" href="/user/13968/" bx-tooltip-user-id="13968">Айдар</a> написал:<br />Выложи пожалуйста свой вариант кольцевого буфера, мне тоже он был нужен, вот что через gpt получилось (может кому-то нужно):<br />=============<br />Я привел пример, с указанием на недостатки - для кольцевого буфера, извлечение данных зависит от конкретного сценария использования и потребностей, и указал на лучший подход<br />====quote====<br /><a class="blog-p-user-name" id="bp_BhTlStoO" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />Но есть подход лучше - использовать двусвязную очередь для реализации кольцевого буфера!<br />=============<br /> двусвязную очередь мы ранее обсуждали этому вопросу посвящалась целая ветка. Могу сказать как использую, у меня это модуль - класс, подгрузил в начале алгоритма <br />local Queue = require(&quot;QueueClass&quot;) и делаешь необходимое количество экземпляров определенной длины, определённой направленности, такие как FIFO, LIFO, или извлечение по произвольному условию. В моем примере local ChannelPDF={} это три экземпляра разной длины массивы. И это удобно! А что нужно доказывать я не понимаю. Здесь на мой взгляд просто нужно пользуетесь, не нужно не пользуетесь. Повторюсь вот модуль
====code====
<pre>-- класс двусвязной очереди:

local Queue = {}
Queue.__index = Queue
function Queue.new()
&nbsp;&nbsp;&nbsp;&nbsp;return setmetatable({first = 0, last = -1}, Queue)
end
function Queue:push_left(value)
&nbsp;&nbsp;&nbsp;&nbsp;local first = self.first - 1
&nbsp;&nbsp;&nbsp;&nbsp;self.first = first
&nbsp;&nbsp;&nbsp;&nbsp;self&#91;first&#93; = value
end
function Queue:pop_left()
&nbsp;&nbsp;&nbsp;&nbsp;local first = self.first
&nbsp;&nbsp;&nbsp;&nbsp;if first &#62; self.last then error("queue is empty") end
&nbsp;&nbsp;&nbsp;&nbsp;local value = self&#91;first&#93;
&nbsp;&nbsp;&nbsp;&nbsp;self&#91;first&#93; = nil&nbsp;&nbsp;-- to allow garbage collection
&nbsp;&nbsp;&nbsp;&nbsp;self.first = first + 1
&nbsp;&nbsp;&nbsp;&nbsp;return value
end
function Queue:push_right(value)
&nbsp;&nbsp;&nbsp;&nbsp;local last = self.last + 1
&nbsp;&nbsp;&nbsp;&nbsp;self.last = last
&nbsp;&nbsp;&nbsp;&nbsp;self&#91;last&#93; = value
end
function Queue:pop_right()
&nbsp;&nbsp;&nbsp;&nbsp;local last = self.last
&nbsp;&nbsp;&nbsp;&nbsp;if self.first &#62; last then error("queue is empty") end
&nbsp;&nbsp;&nbsp;&nbsp;local value = self&#91;last&#93;
&nbsp;&nbsp;&nbsp;&nbsp;self&#91;last&#93; = nil&nbsp;&nbsp;-- to allow garbage collection
&nbsp;&nbsp;&nbsp;&nbsp;self.last = last - 1
&nbsp;&nbsp;&nbsp;&nbsp;return value
end
return Queue
</pre>
============= <br />
			<i>03.07.2024 13:04:04, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75995/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75995/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 13:04:04 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75994/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_jYo6DvU5" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />-- Метод FilterSmooth<br />local ChannelPDF={}<br />function ChannelPDF:FilterSmooth()<br /> &nbsp; &nbsp;local F = {0, 0, 0} &nbsp;-- кольцевой буфер на 3 элемента<br /> &nbsp; &nbsp;local index = 1<br /> &nbsp; &nbsp;local start = true<br /> &nbsp; &nbsp;return function(I, x)<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I == 1 or start then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;F = {0, 0, 0} -- Инициализация значений<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index = 1 -- Инициализация индекса<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;start = false<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;F&#91;index&#93; = x -- Обновление (новое значение)<br /> &nbsp; &nbsp; &nbsp; &nbsp;local y = F&#91;index&#93; + 2 * F&#91;(index - 1 - 1) % 3 + 1&#93; + F&#91;(index - 2 - 1) % 3 + 1&#93;<br /> &nbsp; &nbsp; &nbsp; &nbsp;y = y and (y &gt;= 1 and 0.999 or y &lt;= -1 and -0.999 or x) or y<br /> &nbsp; &nbsp; &nbsp; &nbsp;index = index % 3 + 1 -- Обновление индекса<br /> &nbsp; &nbsp; &nbsp; &nbsp;return y<br /> &nbsp; &nbsp;end<br />end<br />=============<br />хорошо бы еще пример с доказательством, <br />что это лучше чем , что? <br />
			<i>03.07.2024 12:29:28, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75994/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75994/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 12:29:28 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75993/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Классический кольцевой буфер, также известный как циклический буфер или кольцевая очередь, используется для хранения фиксированного количества последних значений в массиве. <br />Кольцевой буфер реализован в виде массива фиксированного размера (в данном случае из трех элементов) и индекса, который отслеживает текущее положение для записи нового значения. Когда индекс достигает конца массива, он обнуляется, что позволяет использовать массив циклически.<br />Инициализация: В начале работы буфер заполняется нулями, и индекс указывается на первый элемент.<br />Обновление:<br /> &nbsp; - При каждом вызове функции новое значение записывается в текущий индекс буфера.<br /> &nbsp; - После записи индекс обновляется. Если индекс достигает конца массива, он обнуляется (возвращается к началу массива)<br />Обработка данных: Для выполнения вычислений используются значения из буфера. <br />Именно здесь появляются не удобство применения классического кольцевого буфера! <br />То есть, значения записываются 1,2,3, и снова 1,2,3, ...<br /><br />Пример реализации методов с использованием кольцевого буфера:<br />Кольцевой буфер в классе `Ehlers.ChannelPDF` используется для хранения последних трех значений, которые обновляются при каждом новом баре. <br />Буфер работает по принципу FIFO, где новое значение заменяет самое старое значение, и обеспечивается циклический доступ к элементам массива<br />
====code====
<pre>-- Метод FilterSmooth
local ChannelPDF={}
function ChannelPDF:FilterSmooth()
&nbsp;&nbsp;&nbsp;&nbsp;local F = {0, 0, 0}&nbsp;&nbsp;-- кольцевой буфер на 3 элемента
&nbsp;&nbsp;&nbsp;&nbsp;local index = 1
&nbsp;&nbsp;&nbsp;&nbsp;local start = true
&nbsp;&nbsp;&nbsp;&nbsp;return function(I, x)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if I == 1 or start then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F = {0, 0, 0} -- Инициализация значений
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index = 1 -- Инициализация индекса
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start = false
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F&#91;index&#93; = x -- Обновление (новое значение)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local y = F&#91;index&#93; + 2 * F&#91;(index - 1 - 1) % 3 + 1&#93; + F&#91;(index - 2 - 1) % 3 + 1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y = y and (y &#62;= 1 and 0.999 or y &#60;= -1 and -0.999 or x) or y
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index = index % 3 + 1 -- Обновление индекса
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return y
&nbsp;&nbsp;&nbsp;&nbsp;end
end
</pre>
=============
Циклическая запись данных и последовательная индексация свечей, приводит к сложностям (по крайней мере для меня) при получении данных из буфера и их последующей обработкой в формулах.<br />Для небольших задач пойдет. Но есть подход лучше - использовать двусвязную очередь для реализации кольцевого буфера!<br />Расписал подробно для общего понимания вопроса. &nbsp; <br />
			<i>03.07.2024 12:04:14, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75993/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75993/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 12:04:14 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75992/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_5Ut3N3En" href="/user/13968/" bx-tooltip-user-id="13968">Айдар</a> написал:<br />gpt4, но это конечно же не с первого раза, долгое общение было с ним.<br />=============<br />Вопрос был не про модель, а про запрос. Впрочем, если это не с первого раза, то лучше руками писать. Хотя, возможно, это Lua - малопопулярный язык, выборка обучения мала. <br />
			<i>03.07.2024 10:08:20, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75992/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75992/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 10:08:20 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75991/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_VSdPhLXw" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/13968/" target="_blank" rel="nofollow">Айдар</a></noindex> написал:<br />вот что через gpt получилось (может кому-то нужно):<br />=============<br /> Интересно какой был prompt, что такой монстр вышел?<br />=============<br />gpt4, но это конечно же не с первого раза, долгое общение было с ним. <br />
			<i>03.07.2024 09:52:54, Айдар.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75991/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75991/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 09:52:54 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75990/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_difVMOzK" href="/user/13968/" bx-tooltip-user-id="13968">Айдар</a> написал:<br />вот что через gpt получилось (может кому-то нужно):<br />=============<br />Интересно какой был prompt, что такой монстр вышел? <br />
			<i>03.07.2024 09:45:25, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75990/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75990/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 09:45:25 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда все подевались?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75989/topic8686/">Куда все подевались?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_MmlfydTX" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />Но сколько копий сломано, пока разобрался с кольцевым буфером<br />=============<br />Выложи пожалуйста свой вариант кольцевого буфера, мне тоже он был нужен, вот что через gpt получилось (может кому-то нужно):
====code====
<pre>function CycleRowIndex(arr_input, operation)
&nbsp;&nbsp;&nbsp;-- Пример вызова, есть массив arr:
&nbsp;&nbsp;&nbsp;-- local currentRow = CycleRowIndex(arr, "current") выдаст текущую строку
&nbsp;&nbsp;&nbsp;-- local firstRow = CycleRowIndex(arr, "first") выдаст первую строку
&nbsp;&nbsp;&nbsp;-- local shiftRow = CycleRowIndex(arr, "shift") "сдвинет" строку
&nbsp;&nbsp;&nbsp;&nbsp;if #arr_input == 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nil -- если массив пуст, возвращаем nil
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;arr_input.currentRow = arr_input.currentRow or 0 -- используем строковый ключ
&nbsp;&nbsp;&nbsp;&nbsp;local arraySize = #arr_input
&nbsp;&nbsp;&nbsp;&nbsp;local currentRow

&nbsp;&nbsp;&nbsp;&nbsp;if operation == "first" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local lastRow = arr_input.currentRow
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if lastRow &#60;= arraySize then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRow = 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRow = ((lastRow) % arraySize) + 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;elseif operation == "current" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRow = (arr_input.currentRow) % arraySize
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if currentRow == 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if arr_input.currentRow &#62;= arraySize then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRow = arraySize
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRow = 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;elseif operation == "shift" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentRow = (arr_input.currentRow) % arraySize + 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr_input.currentRow = arr_input.currentRow + 1
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;return currentRow
end
</pre>
============= <br />
			<i>03.07.2024 09:37:39, Айдар.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75989/topic8686/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75989/topic8686/</guid>
			<pubDate>Wed, 03 Jul 2024 09:37:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
