Навигация по сайту
Реклама
Популярные статьи

Новости
{links1}
Хаменеи выдвинул условия ЕС для сохранения сделки по атому

Верховный лидер Ирана Али Хаменеи обозначил несколько условий для европейских стран, при выполнении которых Тегеран готов остаться в соглашении по иранской ядерной программе, сообщается на его ...

Коэн опроверг получение денег за содействие встрече Трампа с Порошенко

Адвокат президента США Майкл Коэн опроверг получение 400 тыс. за организацию переговоров американского лидера Дональда Трампа и украинского президента Петра Порошенко в июне 2017 года.

Посольство России прокомментировало видеообращение Юлии Скрипаль

Ранее Reuters обнародовало видеообращение и заявление Юлии Скрипаль.


{links2}
Счетчик

» » Глобальные массивы: функция SearchItem() Гид по интернет трейдингу форекс
Рекламный блок

Глобальные массивы: функция SearchItem() Гид по интернет трейдингу форекс Форекс

Поскольку мы используем глобальные массивы для хранения данных, то вполне вероятно, что нам понадобятся функции поиска элемента в массиве.

Технология поиска будет зависеть от того, упорядочен ли наш массив:

  • Если массив неупорядоченный, то самым очевидным методом найти какой-нибудь элемент будет простой перебор всех элементов массива.
  • Если массив упорядоченный, то наилучшим решением (наиболее оптимальным по скорости поиска) будет двоичный поиск.

Итак, напишем функцию SearchItem(), которая осуществляет поиск в массиве и возвращает:

  • индекс найденного элемента в массиве, если элемент найден; или
  • 0 - если элемента в массиве нет; или
  • -1 - если произошла какая-то ошибка.
//+--------------------------------------------------------------------------------------------------------+
//| Функция SearchItem()                                                                         |
//|                                                                                                        |
//| Ищет элемент в массиве. Возвращает индекс элемента или 0, если      |
//| элемент был не найден, и -1 - в случае ошибки                                  |
//|                                                                                                       |
//| Параметры:                                                                                      |
//|   array     - имя массива                                                                     |
//|   item      - новый элемент массива                                                     |
//|   is_sorted - флаг отсортированности массива (может быть изменен      |
//|               в процессе выполнения функции, если возникнут                  |
//|               ошибки при сортировке)                                                      |
//+--------------------------------------------------------------------------------------------------------+
int SearchItem(string array, double item, bool &is_sorted) 
  {
    // Залокировать критическую секцию
    string critical_section = array+"Lock";
    if (Lock(critical_section)!=0) return(-1); 
    // Количество элементов массива хранится в переменной с именем,
    // равным имя массива + "Count"
    string gv_count;
    gv_count = array+"Count";   
    int count, err;   
    // Если глобальная переменная не существует, то элементов нет
    if (!GlobalVariableCheck(gv_count))
      {
       err = GetLastError();
       if (err!=0)
        {
         // Разлокировать критическую секцию
         Unlock(critical_section);        
         // Вывести сообщение об ошибке и выйти
         Print("SearchItem()->GlobalVariableCheck(): ошибка ", err);
         return(-1);
        }
       else
         count = 0;
      }
    else
       // переменная существует, получим количество элементов
       count = GlobalVariableGet(gv_count);      
   // если массив пустой - вернуть 0
   if (count==0)
     {
      // Разлокировать критическую секцию
      Unlock(critical_section);     
      return(0);
     }
   // если массив неотсортированный, то найдем элемент перебором
   if (!is_sorted)
     {
      int i;
      for (i=1; i         if (item==GlobalVariableGet(array+DoubleToStr(i, 0)))
         {
          // Разлокировать критическую секцию
          Unlock(critical_section);
          return(i);
         }
     }
   else
     {
      // массив отсортированный, поэтому произведен двоичный поиск
      int pos1, pos2, mid;
      pos1 = 1;
      pos2 = count;     
      while (pos1+1         {        
         mid = (pos1+pos2)/2;        
         if (item>GlobalVariableGet(array+DoubleToStr(mid, 0)))
           pos1 = mid;
         else
           pos2 = mid;
        }       
      if (GlobalVariableGet(array+DoubleToStr(pos1, 0))==item)
        {
         // Разлокировать критическую секцию
         Unlock(critical_section);   
         return(pos1);
        }
      if (GlobalVariableGet(array+DoubleToStr(pos2, 0))==item)
        {
         // Разлокировать критическую секцию
         Unlock(critical_section);   
         return(pos2);
        }
     }   
   // Разлокировать критическую секцию
   Unlock(critical_section);   
   return(0);
  }
 
 
Постоянный адрес статьи: "Глобальные массивы: функция SearchItem()"
 
 

Ключевые теги:         ,      ,        , критическую, секцию, массив, элемент, массиве, будет, поиска, Разлокировать, элемента, массива,       , элементов, поиск, count,          , двоичный, Unlockcritical_section   
 
Другие новости по теме:

  • Глобальные массивы: технология поиска Гид по интернет трейдингу форекс
  • Глобальные массивы: функция DeleteItem() Гид по интернет трейдингу форекс
  • Глобальные массивы: функция AddItem() Гид по интернет трейдингу форекс
  • Исходный код функции сортировки методом пузырька Гид по интернет трейдинг ...
  • Глобальные массивы: функция GetItem() Гид по интернет трейдингу форекс
  • Глобальные массивы: функция Count() Гид по интернет трейдингу форекс
  • Как ограничить количество одновременно открытых позиций/отложенных ордеров ...
  • Пример ограничения числа одновременно открытых позиций Гид по интернет тр ...
  • Сортировка методом пузырька Гид по интернет трейдингу форекс
  • Пример работы функции Sort() - сортировки методом пузырька Гид по интерне ...


  • Добавление комментария
    Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Вставка ссылкиВставка защищенной ссылки Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера





    форекс начинающим | форекс обучение | видео форекс | книги форекс | уроки форекс | советники форекс | {links} Copyright © 2010 центовый форекс All Rights Reserved.