| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Как сравнить два массива корректно
06.12.2010, 00:23
|
|
|
Гражданин KAZUS.RUN
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
|
Как сравнить два массива корректно
друзья!
необходимо сравнить два массива e[15] и r[15] ( один из них записан в еепром, а другой в срам) на равенства и далее принять решение.
Я по своей неосведомленностью это делаю так:
if((e[0]==r[0])&&(e[1]==r[1])&&........(e[13]==r[13])&&(e[14]==r[14]))
PORTB.1=1;
как вы сами видите, такая запись занимает много програмного ресурса и наверно является некорректным, тем более ,если это нужно сделать во многих местах программы.
Подскажите пожалуйста, как можно все это написать лаконично и красиво.Мои старания не дали результата.
заранее благодарен.
|
|
|
|
06.12.2010, 00:29
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,138
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: как сравнить два массива корректно
Можно написать функцию, которая проверяет равенство и вызывать её в теле программы. Функция может быть тупой как у Вас или не менее тупой с перебором и сравнением в цикле. Для ускорения можно при старте программы копировать массив из епрома в озу.
|
|
|
|
Сказали "Спасибо" _guardianangel
|
|
|
06.12.2010, 00:45
|
|
|
Гражданин KAZUS.RUN
Регистрация: 08.07.2006
Сообщений: 582
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
Re: Как сравнить два массива корректно
|
PHP код:
|
#define ARRAY_SIZE 15
#define FALSE 0
#define TRUE 1
unsigned char Array_Check(unsigned char *arr1, unsigned char *arr2)
{
unsigned int i=0;
while(i‹ARRAY_SIZE)
{
if (!(arr1[i]==arr2[i]))
return FALSE;
i++;
}
return TRUE;
}
|
функция возвращает 1 если массивы совпали, 0 если нет.
__________________
Sex, Druggs, Rock&Roll
Последний раз редактировалось alberio; 06.12.2010 в 00:48.
|
|
|
|
Сказали "Спасибо" alberio
|
|
|
06.12.2010, 00:46
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,010
Сказал спасибо: 348
Сказали Спасибо 1,023 раз(а) в 551 сообщении(ях)
|
Re: как сравнить два массива корректно
Я обычно делаю так, накатал на скорую руку, идея должна быть ясна
|
Код:
|
#define index 14 // кол-во элементов массива
char sravnenie(void)
{
char i,k = 0;
for (i=0;i‹index;i++){
if( r[i] != e[i]) {return 0; //если нашли
} else {k++; }; //не совпадающий, возращаем 0.
//иначе увеличиваем счетчик
if(k== index) return 1; // если все элементы совпадают, то возращаем 1.
} |
Чуть опередили)))
|
|
|
|
06.12.2010, 00:51
|
|
|
Гражданин KAZUS.RUN
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
|
Re: Как сравнить два массива корректно
Спасибо за оперативный ответ ,но как то у меня не получается в цикле сравнивать. Вот, присвоить значения вроде не трудно:
for (k=0;k,15;k++)
e[k]=r[k];
но как в цикле сравнить не могу понять,ведь это перебор .как же сравнить?
Спасибо.
|
|
|
|
06.12.2010, 00:53
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,010
Сказал спасибо: 348
Сказали Спасибо 1,023 раз(а) в 551 сообщении(ях)
|
Re: Как сравнить два массива корректно
Сообщение от begun
|
for (k=0;k‹15;k++)
e[k]==r[k];
|
= присвоение
== равно
|
|
|
|
06.12.2010, 00:56
|
|
|
Гражданин KAZUS.RUN
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
|
Re: Как сравнить два массива корректно
извиняюсь
alberio и saadov опередили мой ответ.
Сейчас Я разберус с вашими ответами и сообщу.
Спасибо.
|
|
|
|
06.12.2010, 01:10
|
|
|
Гражданин KAZUS.RUN
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
|
Re: Как сравнить два массива корректно
спасибо большое, вроде проясняется.
|
|
|
|
06.12.2010, 18:34
|
|
|
Заблокирован
Регистрация: 15.10.2010
Адрес: Kiev/Kharkov
Сообщений: 133
Сказал спасибо: 15
Сказали Спасибо 21 раз(а) в 21 сообщении(ях)
|
Re: Как сравнить два массива корректно
Сообщение от begun
|
друзья!
необходимо сравнить два массива e[15] и r[15] ( один из них записан в еепром, а другой в срам) на равенства и далее принять решение.
Я по своей неосведомленностью это делаю так:
|
наверно проще сделать в цикле на вычитание e[15] - r[15] и проверки флага Z в статус-регистре, быстрее и правильнее врядли придумаешь.
получится нечно типа
unsigned char i=0;
unsigned char stat=MCU_STATUS_REGISTER;
for (i=0; e[i]-r[i]; i++)
{
if ( FALSE != stat&Z_MASK )
{ return error; }
}
|
|
|
|
07.12.2010, 09:48
|
|
|
Прохожий
Регистрация: 22.09.2006
Сообщений: 2
Сказал спасибо: 190
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как сравнить два массива корректно
unsigned char ArrayCheck(unsigned char *arr1, unsigned char *arr2, unsigned int Size)
{
unsigned int i;
for( i=0; i‹Size; i++ )
{
if( arr1[i] != arr2[i]) return 0;
}
return 1;
}
// Или часть кода в одну строчку
for( i=0; i‹Size; i++ ) if( arr1[i] != arr2[i]) return 0;
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:01.
|
|