Como comparar os resultados de 2 "FOR"?

 

Eu estou passando por um problema em que preciso usar 2 FOR e com as informações deles comparar os valores.

void OnStart()
  {
//+------------------------------------------------------------------+
//|                      VARIáVEL GLOBAL                             |
//+------------------------------------------------------------------+
// Criar 3 variáveis globais referente a 3 magics (o valor "1" da variável global não importa muito pra esse caso)
   GlobalVariableSet("100", 1);
   GlobalVariableSet("200", 1);
   GlobalVariableSet("300", 1);

   string var_name;
   int total = GlobalVariablesTotal();
   for(int i=0; i<total; i++) // laço para pegar as variáveis
     {
      var_name = GlobalVariableName(i);
      Print("Nome das variáveis: "+var_name);
     }

//+------------------------------------------------------------------+
//|                        HISTÓRICO                                 |
//+------------------------------------------------------------------+
   ulong ticket, magic;
   int total_historico = HistoryDealsTotal();
   for(int i=total_historico-1; i>=0; i--)
     {
      ticket = HistoryDealGetTicket(i); // ticket de cada operação
      magic = HistoryDealGetInteger(ticket, DEAL_MAGIC);

      Print("magics encontrados no histórico: "+magic);
     }

   if(var_name != magic)
     {
      Print("Resulado variáveis não encontradas no histórico: "+var_name);
     }
  }

O primeiro 'for' tem como resultado:

Nome das variáveis: 100
Nome das variáveis: 200
Nome das variáveis: 300

O segunto 'for' tem como resultado:

magics encontrados no histórico: 100
magics encontrados no histórico: 100
magics encontrados no histórico: 100
magics encontrados no histórico: 100

OBS: Ou seja, todas as operações foram feitas com o mesmo magic.

Eu quero comparar os valores encontrados no primeiro for e ver qual é diferente do segundo. No caso são os valores 200 e 300.
Mas ao usar o if fora do for, ele não reconhece todos os resultados, só reconhece um resultado.

Resultado do if é:

Resulado variáveis não encontradas no histórico: 300

Obrigado desde já pra quem puder me ajudar.

 

Rapaz, vc está comparando c# com b#nda. A comparação tem que estar dentro dos dois FOR encadeados.


	          
 
Cesar Afif rezende Oaquim #:

Rapaz, vc está comparando c# com b#nda. A comparação tem que estar dentro dos dois FOR encadeados.

Se eu colocar um for dentro do outro, não dá certo. 

 
moslley #:

Se eu colocar um for dentro do outro, não dá certo. 

Armazena os valores do primeiro for em uma array, aí no segundo você olha dentro
dessa array se valor comparado é igual a um dos valores armazenados.

 
Alexandre Borela #:

Armazena os valores do primeiro for em uma array, aí no segundo você olha dentro
dessa array se valor comparado é igual a um dos valores armazenados.

Não entendi muito bem, pra pegar os valores dessa nova array que armazenei os valores do primeiro for, n precisaria novamente de outro for? Ai a gente volta pra mesma situação acima de precisar de 2 for e não conseguir se comunicar entre eles.

 
moslley #:

Não entendi muito bem, pra pegar os valores dessa nova array que armazenei os valores do primeiro for, n precisaria novamente de outro for? Ai a gente volta pra mesma situação acima de precisar de 2 for e não conseguir se comunicar entre eles.

Você tem que usar 2 ou mais "for" nesse caso, pois pensa bem, em cada ticket que você carrega do histórico,
o objetivo é saber se o magic number dele é um dos que você carregou das variaveis globais, e depois disso
verificar quais deles não foram encontrados.

Sempre que for planejar algum algorítimo mais complexo, use pseudo códigos assim você não vai se perder
na lógica, exemplo:

(loop1)
Carregue todos magics setados em variaveis globais em uma classe ou struct contendo o magic number e número de ordens

(loop2)
Para cada ticket carregado
  pegue o magic number dele
  verifique se ele é um dos magic setados nas variaveis globais que carregamos anteriormente
  se sim, some +1 ao número de ordens daquele magic number

(loop3)
Para cada magic number carregado
  verifique quais deles tem número de ordens < 1
 
Alexandre Borela #:

Você tem que usar 2 ou mais "for" nesse caso, pois pensa bem, em cada ticket que você carrega do histórico,
o objetivo é saber se o magic number dele é um dos que você carregou das variaveis globais, e depois disso
verificar quais deles não foram encontrados.

Sempre que for planejar algum algorítimo mais complexo, use pseudo códigos assim você não vai se perder
na lógica, exemplo:

Obrigado pela ajuda, eu nunca trabalhei com struct, vou estudar aqui.

 
moslley:

Eu estou passando por um problema em que preciso usar 2 FOR e com as informações deles comparar os valores.

O primeiro 'for' tem como resultado:

O segunto 'for' tem como resultado:

OBS: Ou seja, todas as operações foram feitas com o mesmo magic.

Eu quero comparar os valores encontrados no primeiro for e ver qual é diferente do segundo. No caso são os valores 200 e 300.
Mas ao usar o if fora do for, ele não reconhece todos os resultados, só reconhece um resultado.

Resultado do if é:

Obrigado desde já pra quem puder me ajudar.

A primeira coisa que deve perceber é que sua variável var_name terá o valor sobrescrito continuamente no seu for.

Transforme-a em um array de 3 posições, já que é o número de variáveis globais que esta carregando

Então, no seu primeiro for, utilize o i que esta incrementando para também adicionar os índices

Agora, tendo cada qual no seu quadrado, crie a lógica que desejar mas lembrando de comparar todo o histórico em cada posição da sua array