Скачать MetaTrader 5

ArrayBsearch

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нет компьютера под рукой? Переписывайся с друзьями с помощью телефона!
Vladislav Andruschenko
91871
Vladislav Andruschenko 2013.09.02 08:50 

Всем привет

не могу понять где ошибка.

есть код:

int ticket[15];
int start()
  {
//----
   
 //  ArrayResize(ticket,15);
 //  ArrayInitialize(ticket,-1);
   ticket[0]=1;
   ticket[1]=2;
   ticket[2]=3;
   ticket[3]=4;
   ticket[4]=5;
   ticket[5]=6;
   ticket[6]=7;
   ticket[7]=8;
   ticket[8]=9;
   ticket[9]=10;
   
   //ArraySort(ticket,WHOLE_ARRAY,0,MODE_DESCEND);
   //ArrayResize(ticket,ArrayBsearch(ticket,-1));
   
Comment(
ArrayBsearch(ticket,1)+"=="+ticket[ArrayBsearch(ticket,1)]+"==="+1+"\n"+
ArrayBsearch(ticket,NormalizeDouble(2,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(2,0))]+"==="+2+"\n"+
ArrayBsearch(ticket,NormalizeDouble(3,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(3,0))]+"==="+3+"\n"+
ArrayBsearch(ticket,NormalizeDouble(4,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(4,0))]+"==="+4+"\n"+
ArrayBsearch(ticket,NormalizeDouble(5,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(5,0))]+"==="+5+"\n"+
ArrayBsearch(ticket,NormalizeDouble(6,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(6,0))]+"==="+6+"\n"+
ArrayBsearch(ticket,NormalizeDouble(7,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(7,0))]+"==="+7+"\n"+
ArrayBsearch(ticket,NormalizeDouble(8,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(8,0))]+"==="+8+"\n"+
ArrayBsearch(ticket,NormalizeDouble(9,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(9,0))]+"==="+9+"\n"+
ArrayBsearch(ticket,NormalizeDouble(10,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(10,0))]+"==="+10

);
//----
   return(0);
  }

он выводит на график:

Т.е. 1 он нашел, а дальше нет, в чем проблема?

Vladislav Andruschenko
91871
Vladislav Andruschenko 2013.09.02 08:51  

если раскоментировал

то получилось:

ArraySort(ticket,WHOLE_ARRAY,0,MODE_DESCEND);
Vladislav Andruschenko
91871
Vladislav Andruschenko 2013.09.02 08:54  
перепробовал все. В чем может быть трабл?
Vladislav Andruschenko
91871
Vladislav Andruschenko 2013.09.02 09:02  

Если поставить так:

 ArraySort(ticket,WHOLE_ARRAY,0,MODE_DESCEND);
   

то показывается ерунда:

Если поставить так:

 ArraySort(ticket,WHOLE_ARRAY,0,MODE_ASCEND);

то более и менее получается то что мне нужно.

Dmitry Fedoseev
42905
Dmitry Fedoseev 2013.09.02 09:06  
Размер массива 15 элементов, заполнено 10, остальные 0. Т.е. массив не отсортированный.
Vladislav Andruschenko
91871
Vladislav Andruschenko 2013.09.02 09:11  
int ticket[10];
int start()
  {
//----
   
   ArrayResize(ticket,10);
   ArrayInitialize(ticket,-1);
   ticket[0]=NormalizeDouble(1,0);
   ticket[1]=NormalizeDouble(2,0);
   ticket[2]=NormalizeDouble(3,0);
   ticket[3]=NormalizeDouble(4,0);
   ticket[4]=NormalizeDouble(5,0);
   ticket[5]=NormalizeDouble(6,0);
   ticket[6]=NormalizeDouble(7,0);
   ticket[7]=NormalizeDouble(8,0);
   ticket[8]=NormalizeDouble(9,0);
   ticket[9]=NormalizeDouble(10,0);
   
   ArraySort(ticket,WHOLE_ARRAY,0,MODE_DESCEND);
   
Comment(
ArrayBsearch(ticket,1)+"=="+ticket[ArrayBsearch(ticket,1)]+"==="+1+"\n"+
ArrayBsearch(ticket,NormalizeDouble(2,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(2,0))]+"==="+2+"\n"+
ArrayBsearch(ticket,NormalizeDouble(3,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(3,0))]+"==="+3+"\n"+
ArrayBsearch(ticket,NormalizeDouble(4,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(4,0))]+"==="+4+"\n"+
ArrayBsearch(ticket,NormalizeDouble(5,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(5,0))]+"==="+5+"\n"+
ArrayBsearch(ticket,NormalizeDouble(6,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(6,0))]+"==="+6+"\n"+
ArrayBsearch(ticket,NormalizeDouble(7,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(7,0))]+"==="+7+"\n"+
ArrayBsearch(ticket,NormalizeDouble(8,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(8,0))]+"==="+8+"\n"+
ArrayBsearch(ticket,NormalizeDouble(9,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(9,0))]+"==="+9+"\n"+
ArrayBsearch(ticket,NormalizeDouble(10,0))+"=="+ticket[ArrayBsearch(ticket,NormalizeDouble(10,0))]+"==="+10
+"\n ticket="+ticket[0]+" = "+ticket[1]+" = "+ticket[2]+" = "+ticket[3]+" = "+" = "+ticket[4]+" = "+" = "+ticket[5]+" = "+" = "+ticket[6]+" = "+" = "+ticket[7]+" = "+" = "+ticket[8]+" = "+" = "+ticket[9]+" = "

);
//----
   return(0);
  }
//+------------------------------------------------------------------+

то же самое:

Dmitry Fedoseev
42905
Dmitry Fedoseev 2013.09.02 09:14  
Массив должен быть отсортирован по возрастанию.
Vladislav Andruschenko
91871
Vladislav Andruschenko 2013.09.02 09:19  
вот в том то и прикол, а я не понимаю почему только по возрастанию? если есть возможность по убыванию отсортировать?
Dmitry Fedoseev
42905
Dmitry Fedoseev 2013.09.02 09:25  
Vladon:
вот в том то и прикол, а я не понимаю почему только по возрастанию? если есть возможность по убыванию отсортировать?

Это же бинарный поиск. Выполняется путем последоваельного деления массива пополам. Ну так он устроен.
Комбинатор
15922
Комбинатор 2013.09.02 09:30  
Вообще бинарный поиск легко реализуется.
Vladislav Andruschenko
91871
Vladislav Andruschenko 2013.09.02 09:52  
Ладно буду думать как организовать поиск по своему рецепту. Ибо бинарный не удовлетворяет требованию клиента .(oops)
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий