сравнение массивов

Anton
Offline
Зарегистрирован: 24.05.2011

Есть какая нибудь возможность сравнить два массива не перелистывая по каждому элементу? такой код не катит:

if(a[]==b[]){
// какое то действие
}

 

Adessit
Adessit аватар
Offline
Зарегистрирован: 12.04.2011

Можно вычислить точное среднее число массива, c запятой даже, и сравнить с другим таким средним числом другого массива) Типа проверка CRC;) А там будет и видно какой массив по этому среднему больше но это примитивизм, по хорошему напишите вашу задачу

Anton
Offline
Зарегистрирован: 24.05.2011

Задача проста. Как мужик на рыбалке с поплавком сидит. Ждет пока поплавок дернется ... так же и у меня программа должна ждать клева :)

loop() постоянно опрашивает дата порт от сдвигового регистра и заносит данные в массив.

Далее стоит проверка если массив изменился то совершать какие то действия если не изменился то продолжать опрашивать.

int Button[];
int Button_old[];

void loop(){

digitalWrite(IN_KEY, 0);
digitalWrite(IN_KEY, 1); 
 for(int i=0; i<=(7); i++){ 
 digitalWrite(IN_CLK, 0); 
  Button[i] = digitalRead(IN_DATA);
 digitalWrite(IN_CLK, 1);  
 }

if (Button[]!=Button_old[]){
// совершаем действия с массивом
Button_old[]=Button[];
}
}

А поподробнее можно про то как узнать среднее число массива?

И еще напрашивается вопрос приравняет ли один масив к другому через оператор "="? как у меня в коде?

Modular
Offline
Зарегистрирован: 05.03.2011

 Вы неправильно мыслите. Для экономии процессорного времени, да и по простой логиге, если уж у Вас есть цикл в котором считываются данные и заполняется массив, почему бы в этом же цикле не сравнивать значения с сохраненным массивом.

Button[]!=Button_old[] - такого сравнения нет, есть извращение типа if( memcmp(array1, array2,ARRAY_SIZE) == 0), но внутри процессора это будет еще один цикл.

А на самом деле Вам вообще не нужно два массива. Просто сравниваете новое значение с сохраненным в цикле и смотрите изменилось ли. Если изменилось выставляете флажок. И заносите новое значение в массив.

int Button_old[];
int newData;
boolean differs = false;

void loop(){

digitalWrite(IN_KEY, 0);
digitalWrite(IN_KEY, 1); 
 for(int i=0; i<=(7); i++){ 
   digitalWrite(IN_CLK, 0); 
   newData = digitalRead(IN_DATA);
   if ( Button[i]!=newData){
     differs = true;
     Button[i] = newData;
   }
   digitalWrite(IN_CLK, 1);  
 }

 if (differs){
  // совершаем действия с массивом
  differs = false;
 }
}
Anton
Offline
Зарегистрирован: 24.05.2011

Точно! Спасибо. И как сам не догадался :(