Ajude-me a aprender a programar. - página 2

 
Alexey Viktorov:

Obrigado por esse exemplo.

Pensei que eu era o único que preferia colocar as coisas dessa maneira, em vez de escrever com piça.

hz - traduzido para o russo como "Eu gostaria de saber"... não pense mal...

É melhor usar classes da biblioteca padrão para não ter que escrever todos aqueles longos PositionGet... etc.

 
Dmitry Fedoseev:
Obrigado. Digerindo.
 
Alexey Viktorov:

Obrigado por esse exemplo.

Pensei que eu era o único que preferia colocar as coisas dessa maneira em vez de escrevê-las de uma maneira idiota.

Qual é o problema?

Não tome isto comoum "codificador nazista", mas eu, por exemplo, acho tais construções perturbadoras:

for(int index=PositionsTotal()-1; index>=0; index--) { /* тело цикла */ }

É um incômodo para os olhos. Não seria melhor que não fosse"zaz como", mas assim:

int index = PositionsTotal();

while (index-- > 0) { /* тело цикла */ }

Ou este tipo de "shithcoddling":

for(int i=0;i<PositionsTotal();i++)

OndePositionsTotal()é chamado em cada iteração de loop!

Um codificador normal nunca manipularia o corpo do laço que passa pelas posições por seu índice (que, graças a Deus, está ausente aqui) levando a uma mudança de seu número. Este é apenas o auge do analfabetismo e do código de falhas. Você tem que, de uma boa maneira, reiniciar todo o loop se algo assim for suposto acontecer.

Também algumas pessoas gostam de algo como isto:

double Lot;

// где-то вычисляется значение Lot, финальная проверка и приведение к допустимым границам фееричны:
if(Lot > MaxLot) Lot = MaxLot;
if(Lot < MinLot) Lot = MinLot;

// а то и вовсе:
if(Lot > MaxLot) Lot = MaxLot;
  else
    if(Lot < MinLot) Lot = MinLot;

// а не проще ли сделать так?
Lot = MathMin(MathMax(Lot, MinLot), MaxLot);

Embora, para um iniciante e não preocupado com horas extras de tempo de CPU para otimização, tais construções de "se-outro-tudo" das aulas de "programação" da escola em BASIC, são mais claras.

E tudo isso éreplicado de código em código pelo princípio de copiar-colar.

Então, lá vai você...

 
Tio Nisla:

...

Ou este tipo de "shithcoding":

OndePositionsTotal()é chamado de iteração por loop!

...

Você tem certeza? Você queria ser inteligente, mas está em uma rotina...

E você se registrou para esse fim? Assim mesmo - desde o primeiro posto e se perder...

 
Dmitry Fedoseev:

Você tem certeza? Você estava tentando ser esperto, mas você se tornou um velhaco...

E você se registrou para isso de propósito? Assim, desde o primeiro posto, você está no banheiro...

Oh, querida. "Aprenda a matemática", Elger e Knut. Não se torne pessoal.

Tudo bem, vou explicar:

    for  (            int i=0            ;          i<PositionsTotal()            ;    i++     )    { }
    ^^^               ^^^^^^^                       ^^^^^^^^^^^^^^^^^^                 ^^^          ^^^
объявление   |   объявление переменной   | проверка условия выполнения цикла:     | инкремент  | тело цикла
  цикла      | типа "int", инициализация | 'i' < значения, возвращаемого функцией | переменной |
типа "for"   |       значением '0'       | которая вызывается на каждую итерацию  |

Isso está claro, querida?

Se não, leia atentamente https://learnc.info/c/loop.html começando em algum lugar de [ctrl+f , procure por "Cycle for"].

Aqui nem sequer é preguiçoso para encontrar o link.

E aprender a escrever um código alfabetizado, agradável e conciso. Você deveria ter começado com o assembler, com microcontroladores onde cada byte conta.

P.S.

Aqui eu era até preguiçoso demais para mostrar ao especialista um simples exemplo de seu laço "para".

int OnInit()
{
   for(int i=0;i<somefunc();i++) PrintFormat("array[%d]\n", i);
   return(INIT_SUCCEEDED);
}

int somefunc() {
   static int count = 0;
   PrintFormat("Туточки уже %d-й раз!\n", ++count);
   return 3; // это типа количество чего-то там, элементов массива например
}

E este é o resultado da amostragem:

2021.05.03 08:01:36.343 show_the_shitz EURJPY,H1: initialized
2021.05.03 08:01:36.343 show_the_shitz EURJPY,H1: Туточки уже 4-й раз!
2021.05.03 08:01:36.343 show_the_shitz EURJPY,H1: array[2]
2021.05.03 08:01:36.343 show_the_shitz EURJPY,H1: Туточки уже 3-й раз!
2021.05.03 08:01:36.343 show_the_shitz EURJPY,H1: array[1]
2021.05.03 08:01:36.343 show_the_shitz EURJPY,H1: Туточки уже 2-й раз!
2021.05.03 08:01:36.343 show_the_shitz EURJPY,H1: array[0]
2021.05.03 08:01:36.343 show_the_shitz EURJPY,H1: Туточки уже 1-й раз!

Você pode ver que a função não é chamada apenas a cada iteração, mas até mesmo +1 tempo no final.

Então, aí está.

Циклы в Си. Циклы с постусловием, предусловием, Цикл for со счётчиком.
Циклы в Си. Циклы с постусловием, предусловием, Цикл for со счётчиком.
  • 1989.04.14
  • Sypachev S.S. 1989-04-14 sypachev_s_s@mail.ru Stepan Sypachev
  • learnc.info
Циклы в Си: цикл while с предусловием, цикл do while с постусловием, цикл for со сщётчиком. Бесконечный цикл. Оператор break. Оператор continue. Примеры работы с циклами
 
Tio Nisla:

Eh, querida. "Aprenda sua matemática", Elger e Knut. Não se torne pessoal.

Tudo bem, vou explicar:

Isso está claro, querida?

Se não, leia atentamente https://learnc.info/c/loop.html começando em algum lugar de [ctrl+f , procure por "Cycle for"].

Aqui nem sequer é preguiçoso para encontrar o link.

E aprender a escrever um código alfabetizado, agradável e conciso. Você deveria ter começado com o assembler, com microcontroladores onde cada byte conta.

P.S.

Aqui eu era até preguiçoso demais para mostrar ao especialista um simples exemplo de seu laço "para".

E este é o resultado da amostragem:

Você pode ver que a função não é chamada apenas a cada iteração, mas até mesmo +1 tempo no final.

Então, aí está.

Eu aplaudo! Continuar...


 
Dmitry Fedoseev:

Eu aplaudo! Continuar...


Por que você fez tal confusão? E colocá-lo na Rede. Sua mãe vai repreendê-lo!
 
Se algum código é estressante, de fazer vista, há muitas outras profissões no mundo: zelador, carregador, limpador, trabalhador sanitário...
 
Dmitry Fedoseev:

Você tem certeza? Você estava tentando ser esperto, mas você se tornou um velhaco...

E você se registrou para isso de propósito? Assim mesmo - desde o primeiro posto até uma poça...

Queconversa interessante você está tendo)) ))

Senhores, as personalidades são personalidades, mas vamos descobrir a verdade.

Usando o exemplo, posso ver quePositionsTotal()é chamado em cada iteração de loop.

Mas Dimitri, pelo contrário, você está dizendo que o compilador o faz de uma maneira diferente - não entendo. Explicar.

//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
CTrade         m_trade;
CSymbolInfo    m_symbol;
//-------------------------------------------------------------------+
void OnInit()
  {
   m_symbol.Name(Symbol());
   m_symbol.RefreshRates();

   for(int i = 0; i < 10; i++)
     {
      m_trade.Buy(1, _Symbol, m_symbol.Ask() + i * 2 * _Point, 0, 0);
     }

//---закомментировать не нужное
   for(int i = 5; i < PositionsTotal(); i++) // так удаляются только 3 сделки
     {
      m_trade.PositionClose(_Symbol);
     }
//---закомментировать не нужное
   int index = PositionsTotal();
   for(int i = 5; i < index; i++) // так удаляются 5 сделок
     {
      m_trade.PositionClose(_Symbol);
     }

//вывод: PositionsTotal() вызывается на каждой итерации
  }
//+------------------------------------------------------------------+

Se você quer dizer que a funçãoPositionsTotal() não recalcula as posições cada vez, mas simplesmente retorna o valor de uma variável contendo o número de posições em aberto, então sim, você está certo, não faz sentido declarar mais uma variável, mas então o que o compilador tem a ver com isso?

E se esta função recalcula as posições em aberto toda vez, então acontece que o compilador tem que entender se o valor desta função afeta outros cálculos e usa ou uma função ou uma variável.

Algo não faz sentido para mim.

 
Aleksandr Slavskii:

Conversa interessante que você está tendo))))

Eu queria acrescentar mais cedo que se alguma função desempenha algumas outras manipulações além de devolver alguma quantidade ou algo, calcula parâmetros comerciais, por exemplo, tal uso causa artefatos difíceis de capturar e pode levar o autor de um código a um estupor: "Ht???? Por que 4 vezes??? O_o F$#@!!! Não deveria estar lá três vezes? Por que minha EA está mentindo para mim?". Isso é o que eu chamava de "shithcod", que um especialista ficou indignado com as raízes de seus cabelos. Eu não falei nisso, pois é óbvio, mas você o fez por mim. Mas você não levou em conta que o endereçamento por um índice calculado dinamicamente sem reinicialização de matriz é algo mais. No sistema nu, isto geralmente leva ao GPF, em plenos pulsos com indicadores e matrizes inteligentes para uma exceção e seu manipulador. Em mql não está claro a que leva.