Не смог быстро найти на форуме имеющиеся статьи по данному вопросу, поэтому пишу.
Подскажите, как можно сравнить значения массивов, не прибегая к помощи, написанным с помощью циклов ФБ?
Надеюсь вопрос понятен.
Вид для печати
Не смог быстро найти на форуме имеющиеся статьи по данному вопросу, поэтому пишу.
Подскажите, как можно сравнить значения массивов, не прибегая к помощи, написанным с помощью циклов ФБ?
Надеюсь вопрос понятен.
if sysmemcmp(adr(массив1),adr(массив2),sizeof(массив1 )) <> 0 then ... //не равны
Я больше всего на этом форуме не понимаю подобное трепло, вроде Вольда.
Если есть, что написать по вопросу пиши, а нет иди трепись с подобными себе "наоборотами".
Я же написал, что не используя циклы.
Я знаю как при их помощи это сделать, не недавно натолкнулся на интересные примеры с использованием POINTER TO ARRAY,
но не очень понял логику их работы, вот и решил послушать кто, что может подсказать.
Данная функция сравнивает их размеры а не данные.
Я имел ввиду не равенство данных внутри массива.
Именно проверяет равенство данных внутри массивов
Вложение 21319
Для сравнения длины массивов достаточно было бы просто сравнить их длину sizeof(массив1 ) и sizeof(массив2 )
Благодарю за ответ.
Всё работает. Спасибо.
Я долго пытался распарсить эту формулировку. Имеется в виду массив с ненулевой нижней границей? Но тогда что значит «не до конца»? Массивы всегда заполнены целиком по определению.Цитата:
массив заполненный не с начала и не до конца
Может, требуется определить A и B из arr: ARRAY[A..B] OF T? Но в языках 61131-3, во-первых, нет интроспекции; а во-вторых, A и B уже известны в любом контексте на этапе компиляции. Если проблема в том, что приходится указывать A и B несколько раз, сделайте их VAR CONSTANT.
Обнуляем некую переменную и переменную номер в структуре.
Циклически проверяем наличие в х,y,z нуля.
Если есть, увеличиваем некую переменную на один.
примерно так:
n:=0;
cn:=0;
FOR cN:= 0 TO 999 DO (*начинаем поиск*)
IF ARX[cN].Х=0 AND
ARX[cN].Y AND
ARX[cN].Z=0 THEN (*Если нашли,то*)
n:=N+1;
END_IF
cn:=cN+1;
END_FOR
Советую по возможности заранее считать данные при поступлении или удалении их из массива. Можно сэкономить уйму процессорного времени, т.к. не придётся проходить весь массив.