Вот упрощённый кусок кода:
На функции не обращайте внимание я их наугад сократил.
x=#()
y=#()
x1=#()
y1=#()
for fi=1 to 800 do
(
x[fi]=cos(fi)
y[fi]=sin(fi)
x1[fi]=cos(fi-1)
y1[fi]=sin(fi-1)
if x[fi]==x1[fi] then
if y[fi]==y1[fi] then
Circle radius:4 pos:[x2[fi],y2[fi],0] isSelected😮n
)
По каким то причинам условие “if” выполняется только один раз соответственно указывая на появлением круга на первом пересечении кривых, но множество пересечений остаётся «не обнаружинными».
Когда я пишу вывод данных в файл, то нахожу в блокноте только одну запись элемента x[1] т.е. в запись идёт только первый элемент из всех x[fi] и на этом всё останавливается.
fs=createFile "c:\\nn.txt"
format "%" x[fi] to:fs
close fs
Почему условие “if” выполняется только один раз, а не 800 ?
Как я понимаю все элементы x[fi] по окончанию 800 циклов сохраняются в оперативной памяти, но иксу присваивается только текущее значение на определённом шаге.
Т.е. как в этом случае можно обратиться к отдельному элементу массива, когда я пишу x[5] например то выскакивает ошибка?
Основной вопрос: Как сравнить все скажем x[fi] 800 элементов с каждым из восьмиста x1[fi] элементом ?
AllexScriptКогда я пишу вывод данных в файл, то нахожу в блокноте только одну запись элемента x[1] т.е. в запись идёт только первый элемент из всех x[fi] и на этом всё останавливается.
Если у тебя этот кусок кода стоит внутри цикла, то файл просто перзаписвается каждый раз. Нужно открывать и закравать файл вне тела цикла.
AllexScriptКак я понимаю все элементы x[fi] по окончанию 800 циклов сохраняются в оперативной памяти, но иксу присваивается только текущее значение на определённом шаге.
Т.е. как в этом случае можно обратиться к отдельному элементу массива, когда я пишу x[5] например то выскакивает ошибка?
Да все верно, возможно это переменная у тебя локальная для проверки после цикла поставь print x[5] и смотри результат в листеноре
AllexScriptОсновной вопрос: Как сравнить все скажем x[fi] 800 элементов с каждым из восьмиста x1[fi] элементом ?
Это нужно уже делать уже после заполнения массивов, в отдельном вложенном цикле. Тоесть у тебя должен быть цикл в цикле, чтобы ты смог сравнить каждый x==x1[j] (где i,j = 1..800).
Также советую учесть погрешность при сравнении чисел с плавающей точкой на пример 3.000 не будет равна 3.0001, погрешность при этом будет равна eps = 0.001
Проверка с учетом прогрешности будет выглядеть:
if abc(x - x1[j]) < eps then
Начал сравнивать элементы массива, но обнаружил проблемы в строчке с “kx”, после обработки выходит ошибка о несовместимости каких то типов и значение первого элемента массива “Incompatible types:0.499924 ,and undefined”….. в общем я не знаю как найти kx другим образом….
кусок кода:
If fi>=499 then
(
For p=1 to 500 do
(
for d=1 to 500 do
(
kx=abs(x2[p]-px2[d]) /*здесь ошибка*/
)
)
)
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
AllexScript
На функции не обращайте внимание я их наугад сократил.
x=#()
y=#()
x1=#()
y1=#()
for fi=1 to 800 do
(
x[fi]=cos(fi)
y[fi]=sin(fi)
x1[fi]=cos(fi-1)
y1[fi]=sin(fi-1)
if x[fi]==x1[fi] then
if y[fi]==y1[fi] then
Circle radius:4 pos:[x2[fi],y2[fi],0] isSelected😮n
)
По каким то причинам условие “if” выполняется только один раз соответственно указывая на появлением круга на первом пересечении кривых, но множество пересечений остаётся «не обнаружинными».
Когда я пишу вывод данных в файл, то нахожу в блокноте только одну запись элемента x[1] т.е. в запись идёт только первый элемент из всех x[fi] и на этом всё останавливается.
fs=createFile "c:\\nn.txt"
format "%" x[fi] to:fs
close fs
Почему условие “if” выполняется только один раз, а не 800 ?
Как я понимаю все элементы x[fi] по окончанию 800 циклов сохраняются в оперативной памяти, но иксу присваивается только текущее значение на определённом шаге.
Т.е. как в этом случае можно обратиться к отдельному элементу массива, когда я пишу x[5] например то выскакивает ошибка?
Основной вопрос: Как сравнить все скажем x[fi] 800 элементов с каждым из восьмиста x1[fi] элементом ?
Заранее благодарен 🙂)
Savin Denis
Да все верно, возможно это переменная у тебя локальная для проверки после цикла поставь print x[5] и смотри результат в листеноре
Это нужно уже делать уже после заполнения массивов, в отдельном вложенном цикле. Тоесть у тебя должен быть цикл в цикле, чтобы ты смог сравнить каждый x==x1[j] (где i,j = 1..800).
Также советую учесть погрешность при сравнении чисел с плавающей точкой на пример 3.000 не будет равна 3.0001, погрешность при этом будет равна eps = 0.001
Проверка с учетом прогрешности будет выглядеть:
if abc(x - x1[j]) < eps then
AllexScript
Нужно попробовать...
AllexScript
кусок кода:
If fi>=499 then
(
For p=1 to 500 do
(
for d=1 to 500 do
(
kx=abs(x2[p]-px2[d]) /*здесь ошибка*/
)
)
)
Savin Denis
либо делай проверку на такие значения. Либо вышел за пределы массива
Protactinium
Savin Denis
Protactinium