Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 732

 
Vitalie Postolache:
E se, após a classificação, mudar a ordem de indexação usando o ArraySetAsSeries?
O ArraySetAsSeries não se aplica a matrizes multidimensionais.
 
Alexey Viktorov:
O ArraySetAsSeries não se aplica a matrizes multidimensionais.

Sim, não se aplica. E quem sabe o que se aplica, por favor responda.

 
Vitaly Muzichenko:

Sim, não se aplica. E quem sabe o que se aplica, por favor responda.

Por vezes utilizo a separação de bolhas numa matriz bidimensional. Pode seleccionar a direcção e a dimensão pela qual pretende ordenar
 
Artyom Trishkin:
Por vezes utilizo a separação de bolhas numa matriz bidimensional. Pode escolher a direcção e a dimensão com a qual pretende ordenar

Venha a sua casa para o código, ou afixe-o, se não se importa)

Acrescentado: Como é que consome recursos?, mais vale inverter o ciclo, o que não quero fazer.

 
Vitaly Muzichenko:
Venha a sua casa buscar o código, ou afixe-o se não se importar)
Bem, tome uma cerveja e venha fazer uma visita ;)

Só não me lembro que dimensão da matriz que escreveu - talvez não precise dela, e eu empurro ...

//+------------------------------------------------------------------+
//| Пузырьковая сортировка двумерного массива                        |
//+------------------------------------------------------------------+
template<typename T>
void ArraySortBubbleTwoDims(T& array[][TWO_DIM], int sort_dimension=0, int sort_direction=0) {
   T     t=0;
   int   k=ArrayRange(array,1);    // Количество колонок
   int   n=ArrayRange(array,0);    // Количество строк
  
   //---
   if(sort_dimension<0) sort_dimension=0;
   if(sort_dimension>k) sort_dimension=k;
   //---
   for(int i=n-1; i>0; i--) {
      for(int j=0; j<i; j++) {
         //--- по возрастанию
         if(sort_direction==0) {
            if(array[j][sort_dimension]>array[j+1][sort_dimension]) {
               for(int e=0; e<k; e++) {
                  t=array[j][e];
                  array[j][e]=array[j+1][e];
                  array[j+1][e]=t;
                  }
               }
            }
         //--- по убыванию
         else {
            if(array[j][sort_dimension]<array[j+1][sort_dimension]) {
               for(int e=0; e<k; e++) {
                  t=array[j][e];
                  array[j][e]=array[j+1][e];
                  array[j+1][e]=t;
                  }
               }
            }
         }
      }
}
//+------------------------------------------------------------------+
Retirei-o do esconderijo, e mudei-o rapidamente para um modelo. Posso ter cometido um erro à pressa...
 
Artyom Trishkin:
Bem, pegue uma cerveja e venha visitar ;)

Só não me lembro que dimensão da matriz que escreveu - talvez não precise dela, e vou colocá-la aqui ...

É Inverno, mas os esquis não vão

void Func()
{
double m[][3];

if(условия)
  {
   // много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
  }
BySort(m); // передаём в функцию "BySort"
}

void BySort(double &mas[][3])
{
// Сортируем по размеру лота от большего к меньшему
  ArraySort(mas);
  ArraySetAsSeries(mas,true); // при такой записи mql5 ругается, в mql4 работает

... здесь работа с уже сортированным массивом и основной код
}

Erro: "'m' - conversão de parâmetros não permitida e.mq5 2076 20"

 
Vitaly Muzichenko:

É Inverno, mas os esquis não vão

void Func()
{
double m[][3];

if(условия)
  {
   // много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
  }
BySort(m); // передаём в функцию "BySort"
}

void BySort(double &mas[][3])
{
// Сортируем по размеру лота от большего к меньшему
  ArraySort(mas);
  ArraySetAsSeries(mas,true); // при такой записи mql5 ругается, в mql4 работает

... здесь работа с уже сортированным массивом и основной код
}

Erro: "'m' - conversão de parâmetros não permitida e.mq5 2076 20"

Está escrito na ajuda:

Nota

A bandeira AS_SERIES não pode ser colocada para matrizes multidimensionais e para matrizes estáticas (ou seja, matrizes cujo tamanho entre parênteses rectos já está especificado no momento da compilação).

E o que o impede de o ordenar com a função que eu sugiro?

 
Artyom Trishkin:
Está escrito na ajuda:

Nota

A bandeira AS_SERIES não pode ser colocada para matrizes multidimensionais e estáticas (ou seja, matrizes cujo tamanho entre parênteses rectos é especificado em tempo de compilação).

Mas o que é que o impede de o ordenar utilizando a função que sugiro?

Exactamente o mesmo erro quando o passa para a função
 
Vitaly Muzichenko:
Exactamente o mesmo erro ao transferir para uma função
Qual deles?
 
Artyom Trishkin:
Qual deles?

Aos vossos"ArraySortBubbleBubbleTwoDims".

De qualquer modo, expandi o laço e o problema está resolvido. Mas ainda gostaria de ver uma solução normal sob a forma de uma função padrão