Aiutami a imparare a programmare. - pagina 2

 
Alexey Viktorov:

Grazie per questo esempio.

Credevo di essere l'unico che preferiva mettere tutto in chiaro in quel modo, piuttosto che scrivere in modo cazzuto.

hz - tradotto in russo come "vorrei sapere"... non pensare male...

È meglio usare classi della libreria standard per non dover scrivere tutte quelle lunghe PositionGet... ecc.

 
Dmitry Fedoseev:
Grazie. Digerire.
 
Alexey Viktorov:

Grazie per questo esempio.

Credevo di essere l'unico a preferire che le cose venissero esposte in quel modo invece di scriverle in modo scemo.

Qual è il problema?

Non prendetelo comeun "nazista del codice", ma io, per esempio, trovo tali costruzioni inquietanti:

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

È un fastidio per l'occhio. Non sarebbe meglio fare così invece di"non sai come fare"?

int index = PositionsTotal();

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

O questo tipo di "shithcoddling":

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

DovePositionsTotal()è chiamato ad ogni iterazione del ciclo!

Un codificatore normale non manipolerebbe mai il corpo del ciclo che passa attraverso le posizioni per il loro indice (che, grazie a Dio, è assente qui) portando a un cambiamento del loro numero. Questo è solo il massimo dell'analfabetismo e del codice glitch. Bisogna, in senso buono, riavviare l'intero ciclo se qualcosa del genere deve accadere.

Inoltre ad alcune persone piace qualcosa del genere:

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);

Anche se, per un principiante e non preoccupato di ore extra di tempo di CPU per l'ottimizzazione, tali costruzioni "if-then-otherwise-all" dalle lezioni scolastiche di "programmazione" in BASIC, sono più chiare.

E tutto questo vienereplicato da codice a codice per il principio del copia-incolla.

Quindi ci siamo...

 
Tio Nisla:

...

O questo tipo di "shithcoding":

DovePositionsTotal()è chiamato per ogni iterazione del ciclo!

...

Sei sicuro? Volevi essere intelligente, ma sei in un vicolo cieco...

E vi siete registrati per questo scopo? Proprio così - dal primo post e perdersi...

 
Dmitry Fedoseev:

Sei sicuro? Stavi cercando di essere intelligente, ma sei diventato una canaglia...

E ti sei registrato apposta per questo? Così, dal primo post, sei nel cesso...

Oh, cielo. "Imparate la matematica", Elger e Knut. Non andare sul personale.

Va bene, vi spiegherò:

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

È chiaro, cara?

In caso contrario, leggete attentamente https://learnc.info/c/loop.html partendo da qualche parte da [ctrl+f , cercare "Cycle for"].

Qui non è nemmeno pigro trovare il link.

E imparate a scrivere codice letterale, bello e conciso. Avresti dovuto iniziare con l'assembler, con i microcontrollori dove ogni byte conta.

P.S.

Qui ero anche troppo pigro per mostrare all'esperto un semplice esempio del suo ciclo "for".

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 questo è il risultato dell'esecuzione del campione:

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-й раз!

Potete vedere che la funzione non viene chiamata solo ad ogni iterazione, ma anche +1 volta alla fine.

Quindi ci siamo.

Циклы в Си. Циклы с постусловием, предусловием, Цикл 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, tesoro. "Impara la matematica", Elger e Knut. Non andare sul personale.

Va bene, vi spiegherò:

È chiaro, caro?

In caso contrario, leggete attentamente https://learnc.info/c/loop.html partendo da qualche parte da [ctrl+f , cercare "Cycle for"].

Qui non è nemmeno pigro trovare il link.

E imparate a scrivere codice letterale, bello e conciso. Avresti dovuto iniziare con l'assembler, con i microcontrollori dove ogni byte conta.

P.S.

Qui ero anche troppo pigro per mostrare all'esperto un semplice esempio del suo ciclo "for".

E questo è il risultato dell'esecuzione del campione:

Potete vedere che la funzione non viene chiamata solo ad ogni iterazione, ma anche +1 volta alla fine.

Quindi ci siamo.

Io applaudo! Continuate...


 
Dmitry Fedoseev:

Io applaudo! Continua...


Perché hai fatto un tale casino? E metterlo in rete. Tua madre ti sgriderà!
 
Se qualche codice è stressante, da far girare gli occhi, ci sono molte altre professioni al mondo: bidello, caricatore, pulitore, operatore sanitario...
 
Dmitry Fedoseev:

Sei sicuro? Stavi cercando di essere intelligente, ma sei diventato una canaglia...

E ti sei registrato apposta per questo? Proprio così - dal primo post e in una pozzanghera...

Cheinteressante conversazione state facendo) ))

Signori, le personalità sono personalità, ma scopriamo la verità.

Usando l'esempio, posso vedere chePositionsTotal()viene chiamata ad ogni iterazione del ciclo.

Ma Dimitri, al contrario, stai dicendo che il compilatore lo fa in un modo diverso - non lo capisco. Spiegare.

//+------------------------------------------------------------------+
#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 volete dire che la funzionePositionsTotal() non ricalcola le posizioni ogni volta, ma semplicemente restituisce il valore di una variabile contenente il numero di posizioni aperte, allora sì, avete ragione, non ha senso dichiarare una variabile in più, ma allora cosa c'entra il compilatore?

E se questa funzione ricalcola le posizioni aperte ogni volta, allora risulta che il compilatore deve capire se il valore di questa funzione influisce su ulteriori calcoli e usa o una funzione o una variabile.

C'è qualcosa che non mi torna.

 
Aleksandr Slavskii:

Interessante conversazione che state avendo)))

Volevo aggiungere prima che se la funzione somefunc() esegue altre manipolazioni oltre a restituire una certa quantità o qualcosa, calcola parametri commerciali, per esempio, tale uso causa artefatti difficili da catturare e può portare l'autore del codice in un torpore: "Ht?? Come mai 4 volte? O_o F$#@!!! Non dovrebbe essere lì tre volte? Perché la mia EA mi sta mentendo?". Questo è quello che ho chiamato "shithcod", che un esperto era indignato fino alle radici dei suoi capelli. Non l'ho tirato fuori io, perché è ovvio, ma tu l'hai fatto per me. Ma non hai tenuto conto che l'indirizzamento tramite un indice calcolato dinamicamente senza reinizializzazione dell'array è un'altra cosa. In sys nudo questo di solito porta a GPF, in plus con puntatori intelligenti e array a un'eccezione e al suo gestore. In mql non è chiaro a cosa porti.
Motivazione: