Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Как сравнить два массива корректно

Непрочитано 06.12.2010, 00:23  
begun
Гражданин KAZUS.RUN
 
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
begun на пути к лучшему
По умолчанию Как сравнить два массива корректно

друзья!
необходимо сравнить два массива e[15] и r[15] ( один из них записан в еепром, а другой в срам) на равенства и далее принять решение.
Я по своей неосведомленностью это делаю так:
if((e[0]==r[0])&&(e[1]==r[1])&&........(e[13]==r[13])&&(e[14]==r[14]))
PORTB.1=1;
как вы сами видите, такая запись занимает много програмного ресурса и наверно является некорректным, тем более ,если это нужно сделать во многих местах программы.
Подскажите пожалуйста, как можно все это написать лаконично и красиво.Мои старания не дали результата.
заранее благодарен.
Реклама:
begun вне форума  
Непрочитано 06.12.2010, 00:29  
_guardianangel
Почётный гражданин KAZUS.RUN
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,138
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: как сравнить два массива корректно

Можно написать функцию, которая проверяет равенство и вызывать её в теле программы. Функция может быть тупой как у Вас или не менее тупой с перебором и сравнением в цикле. Для ускорения можно при старте программы копировать массив из епрома в озу.
_guardianangel вне форума  
Сказали "Спасибо" _guardianangel
begun (06.12.2010)
Непрочитано 06.12.2010, 00:45  
alberio
Гражданин KAZUS.RUN
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 582
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
По умолчанию 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(iARRAY_SIZE)
 {
   if (!(arr1[i]==arr2[i]))
    return FALSE;
   i++;
 }
 return TRUE;
} 
функция возвращает 1 если массивы совпали, 0 если нет.
__________________
Sex, Druggs, Rock&Roll

Последний раз редактировалось alberio; 06.12.2010 в 00:48.
alberio вне форума  
Сказали "Спасибо" alberio
begun (06.12.2010)
Непрочитано 06.12.2010, 00:46  
Saadov
Почётный гражданин KAZUS.RUN
 
Аватар для Saadov
 
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,010
Сказал спасибо: 348
Сказали Спасибо 1,023 раз(а) в 551 сообщении(ях)
Saadov на пути к лучшему
По умолчанию 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.
}
Чуть опередили)))
Saadov вне форума  
Сказали "Спасибо" Saadov
begun (06.12.2010)
Непрочитано 06.12.2010, 00:51  
begun
Гражданин KAZUS.RUN
 
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: Как сравнить два массива корректно

Спасибо за оперативный ответ ,но как то у меня не получается в цикле сравнивать. Вот, присвоить значения вроде не трудно:
for (k=0;k,15;k++)
e[k]=r[k];
но как в цикле сравнить не могу понять,ведь это перебор .как же сравнить?
Спасибо.
begun вне форума  
Непрочитано 06.12.2010, 00:53  
Saadov
Почётный гражданин KAZUS.RUN
 
Аватар для Saadov
 
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,010
Сказал спасибо: 348
Сказали Спасибо 1,023 раз(а) в 551 сообщении(ях)
Saadov на пути к лучшему
По умолчанию Re: Как сравнить два массива корректно

Сообщение от begun Посмотреть сообщение
for (k=0;k15;k++)
e[k]==r[k];
= присвоение
== равно
Saadov вне форума  
Непрочитано 06.12.2010, 00:56  
begun
Гражданин KAZUS.RUN
 
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: Как сравнить два массива корректно

извиняюсь
alberio и saadov опередили мой ответ.
Сейчас Я разберус с вашими ответами и сообщу.
Спасибо.
begun вне форума  
Непрочитано 06.12.2010, 01:10  
begun
Гражданин KAZUS.RUN
 
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: Как сравнить два массива корректно

спасибо большое, вроде проясняется.
begun вне форума  
Непрочитано 06.12.2010, 18:34  
projects.org.ua
Заблокирован
 
Регистрация: 15.10.2010
Адрес: Kiev/Kharkov
Сообщений: 133
Сказал спасибо: 15
Сказали Спасибо 21 раз(а) в 21 сообщении(ях)
projects.org.ua на пути к лучшему
По умолчанию 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; }
}
projects.org.ua вне форума  
Непрочитано 07.12.2010, 09:48  
_Artem_
Прохожий
 
Регистрация: 22.09.2006
Сообщений: 2
Сказал спасибо: 190
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
_Artem_ на пути к лучшему
По умолчанию 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;
_Artem_ вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Глушилка громкой музыки у соседей VVK Отвлекитесь, эмбеддеры! 355 10.01.2019 20:09
[Решено] Как внедрялась АСУ chermnv Отвлекитесь, эмбеддеры! 743 14.02.2010 23:11
[Решено] Третье Послание Человечеству lelkanet Отвлекитесь, эмбеддеры! 201 06.01.2010 00:33


Часовой пояс GMT +4, время: 17:01.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.