Qualquer pergunta de um PROFI para um SUPER PROFI - 1. - página 7

 
sergeev:

Sim. Acho que, neste caso, podemos passar sem hash. Fui muito apressado com meus conselhos sobre haxixe. :)

Se esta opção for adequada a Vasily - simplesmente colocaremos todos os parâmetros em seqüência. A corda será o identificador da classe.


Mas está correto também. Afinal, neste caso, a proteção criptográfica não é de todo necessária. O mau, entretanto, é que você ainda precisa converter a seqüência de todos os parâmetros em um número único específico, de preferência 32 bits, e para isso você provavelmente precisará usar funções de hash.

Diabos, a MQL não tem operadores bitwise como inversão, offset, etc. Sim, é um pouco difícil fazer tudo isso em MQL.

 
sergeev:

Sim. Neste caso, podemos fazer sem haxixe.
Se esta variante se adequa ao Vasiliy, então nós simplesmente colocamos todos os parâmetros em cadeia. A corda será o identificador de classe.

Se você implementar o conjunto de hash java, será ainda mais interessante...
Como... hash correspondente -> conjunto ordenado -> elementos...
O principal é que uma lista ordenada é associada ao hash.
.
Então tudo também "voará" (embora, baixo e baixo...).
 
C-4:

Problema: você precisa identificar de forma única uma instância de uma classe por sua identificação única, de preferência de tipo longo. A identificação única deve ser formada considerando a singularidade dos valores das variáveis pertencentes à classe.

Caramba! Eu terei a mesma tarefa na segunda-feira )))).

Não poderei usar um fio, pois estou limitado pelo comprimento - precisarei nomear objetos com base nele.

Eu estava pensando... Você provavelmente pode usar dois algoritmos de hashing ao mesmo tempo - isso reduzirá muito a probabilidade de não-uniquidade... ou eu estou errado?

 
C-4:


Diabos, a MQL não tem operadores bitwise como inversão, offset, etc. Sim, vai ser difícil fazer tudo isso em MQL.

Por que não? Está tudo aí! https://docs.mql4.com/ru/basis/operations/bit

 
C-4:

Diabos, a MQL não tem operadores bitwise como inversão, offset, etc. Sim, seria difícil fazer tudo isso em MQL.

https://docs.mql4.com/ru/basis/operations/assign
Deslocar a representação binária de y para a direita por x bits y >>= x;
Desloque a representação binária de y para a esquerda por x bit y <<= x;
Bitwise AND operação das representações binárias de y e x y &= x;
Bitwise OR operação das representações binárias y e x y |= x;
Operação OR exclusiva Bitwise
das representações binárias y e x y ^= x;

Talvez y != x; funciona também

SZY: sobre a singularidade dos nomes, etc. - o problema, como sempre, se resume ao velho problema: como salvar a memória e não perder o desempenho

ou usar um conjunto de cordas com nomes únicos e assim aumentar a quantidade de dados, ou usar uma função que usará um algoritmo baseado nos dados de entrada para formar um nome único, reduzindo assim o desempenho, mas economizando memória

 
sergeev:

não está lá.

mas aqui https://docs.mql4.com/ru/basis/operations/bit


não lá! ;)

SZY: esta informação é a mesma, apenas o exemplo para ambas as tarefas e operações bitwise é o mesmo, porque meu link diz "operações bitwise são realizadas apenas com inteiros", se você quiser eu posso lhe dizer o link exato ;), eu acho que o C-4 entenderá onde e onde ler a Ajuda

 

Aqui está um exemplo de funcionamento da função hash Adler32:

//+------------------------------------------------------------------+
//|                                                Adler32_Sample.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   string a="mesage 1: Hello word";
   string b="message 2: It's simple code";
   string c="message 2: It's simple codes";
   Print(adler32(a));
   Print(adler32(b));
   Print(adler32(c));
  }
//+------------------------------------------------------------------+

ulong adler32(string buf)
  {
     ulong s1 = 1;
     ulong s2 = 0;
     uint buflength=StringLen(buf);
     uchar array[];
     ArrayResize(array, buflength,0);
     StringToCharArray(buf, array, 0, -1, CP_ACP);
     for (uint n=0; n<buflength; n++)
     {
        s1 = (s1 + array[n]) % 65521;
        s2 = (s2 + s1)     % 65521;
     }
     return ((s2 << 16) + s1);
  }

O código básico da função é retirado da wikipedia e ligeiramente modificado para MQL5. Aqui está o resultado do trabalho do roteiro:

2011.01.22 22:50:10 BitOperations (#MCD,MN1) 2333149633
2011.01.22 22:50:10 BitOperations (#MCD,MN1) 2169506126
2011.01.22 22:50:10 BitOperations (#MCD,MN1) 1202325230

Como você pode ver, todos os valores retornados por esta função são absolutamente diferentes, embora as cordas em si não sejam muito diferentes.

 
C-4:

Aqui está um exemplo de funcionamento da função hash Adler32:

O código básico da função é retirado da wikipedia e ligeiramente modificado para MQL5. Aqui está o resultado do trabalho do roteiro:

Como você pode ver, todos os valores retornados por esta função são absolutamente diferentes, embora as cordas em si não sejam muito diferentes.

ótimo.

se você puder (para não perdê-lo) deixá-lo cair na base de código MQL5.

 
sergeev:

ótimo.

se você puder (para não perdê-lo) deixá-lo cair na base de código MQL5.


Okie.
Razão: