PDA

Просмотр полной версии : Работа с массивами



Андрей007
14.12.2015, 14:50
Не смог быстро найти на форуме имеющиеся статьи по данному вопросу, поэтому пишу.
Подскажите, как можно сравнить значения массивов, не прибегая к помощи, написанным с помощью циклов ФБ?
Надеюсь вопрос понятен.

Вольд
14.12.2015, 15:03
Не смог быстро найти на форуме имеющиеся статьи по данному вопросу, поэтому пишу.
Подскажите, как можно сравнить значения массивов, не прибегая к помощи, написанным с помощью циклов ФБ?
Надеюсь вопрос понятен.

Кто ясно мыслит, тот ясно излагает и наоборот ? У тебя, по моему, наоборот.

Валенок
14.12.2015, 16:04
if sysmemcmp(adr(массив1),adr(массив2),sizeof(массив1 )) <> 0 then ... //не равны

Андрей007
14.12.2015, 16:07
Я больше всего на этом форуме не понимаю подобное трепло, вроде Вольда.
Если есть, что написать по вопросу пиши, а нет иди трепись с подобными себе "наоборотами".

Я же написал, что не используя циклы.
Я знаю как при их помощи это сделать, не недавно натолкнулся на интересные примеры с использованием POINTER TO ARRAY,
но не очень понял логику их работы, вот и решил послушать кто, что может подсказать.

Андрей007
14.12.2015, 16:08
if sysmemcmp(adr(массив1),adr(массив2),sizeof(массив1 )) <> 0 then ... //не равны
А это какая библеотека?
Или это встроенная функция?

Андрей007
14.12.2015, 16:17
Данная функция сравнивает их размеры а не данные.
Я имел ввиду не равенство данных внутри массива.

petera
14.12.2015, 16:47
Данная функция сравнивает их размеры а не данные.
Я имел ввиду не равенство данных внутри массива.
Именно проверяет равенство данных внутри массивов
21319
Для сравнения длины массивов достаточно было бы просто сравнить их длину sizeof(массив1 ) и sizeof(массив2 )

Андрей007
14.12.2015, 16:59
Благодарю за ответ.
Всё работает. Спасибо.

Yegor
03.01.2016, 16:30
массив заполненный не с начала и не до концаЯ долго пытался распарсить эту формулировку. Имеется в виду массив с ненулевой нижней границей? Но тогда что значит «не до конца»? Массивы всегда заполнены целиком по определению.

Может, требуется определить A и B из arr: ARRAY[A..B] OF T? Но в языках 61131-3, во-первых, нет интроспекции; а во-вторых, A и B уже известны в любом контексте на этапе компиляции. Если проблема в том, что приходится указывать A и B несколько раз, сделайте их VAR CONSTANT.

lara197a
03.01.2016, 18:59
Обнуляем некую переменную и переменную номер в структуре.
Циклически проверяем наличие в х,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

Yegor
03.01.2016, 19:39
Советую по возможности заранее считать данные при поступлении или удалении их из массива. Можно сэкономить уйму процессорного времени, т.к. не придётся проходить весь массив.