프로그래밍 방법을 배울 수 있도록 도와주세요. - 페이지 2

 
Alexey Viktorov :

그런 예를 들어 주셔서 감사합니다.

나는 이런 식으로 모든 것을 배치하고 x를 쓰지 않는 것을 선호하는 유일한 사람이라고 생각했습니다.

xs - 러시아어로 번역 "알고 싶습니다" ... 나쁘게 생각하지 마십시오 ...

모든 종류의 긴 PositionGet 등을 전혀 작성하지 않으려면 표준 라이브러리의 클래스를 사용하는 것이 좋습니다.

 
Dmitry Fedoseev :
고맙습니다. 소화 중이야.
 
Alexey Viktorov :

그런 예를 들어 주셔서 감사합니다.

나는 이런 식으로 모든 것을 배치하고 x를 쓰지 않는 것을 선호하는 유일한 사람이라고 생각했습니다.

뭐가 문제 야?

" 코더 나치"로 간주하지 마십시오. 그러나 예를 들어, 그러한 구성은 저를 긴장시킵니다.

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

눈이 아파요. " x how "를 하지 않는 것이 더 낫지 않습니까? 하지만 다음과 같이 하십시오.

 int index = PositionsTotal ();

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

또는 이 "shitcode":

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

여기서 PositionsTotal ()   루프의 모든 반복에서 호출됩니다!

일반 인코더는 인덱스(약하게는 여기에 없음)로 위치를 반복하는 루프 본문에서 조작을 수행하지 않아 숫자가 변경됩니다. 이것은 문맹과 버그가 있는 코드의 곡예일 뿐입니다. 이와 같은 일이 예상되는 경우 좋은 방법으로 전체 주기를 다시 시작해야 합니다.

그리고 어떤 사람들은 다음과 같은 것을 좋아합니다.

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

초심자에게는 최적화를 위한 추가 프로세서 시간에 대해 걱정하지 않지만 BASIC의 학교 "프로그래밍" 수업에서 이러한 "if-otherwise-Everything" 구성이 더 이해하기 쉽습니다.

그리고 이 모든 것은 복사-붙여넣기 원칙에 따라 코드에서 코드로 복제 됩니다.

그래서 여기...

 
Tio Nisla :

...

또는 이 "shitcode":

여기서 PositionsTotal ()   루프의 모든 반복에서 호출됩니다!

...

확신하는? 똑똑하고 싶었지만 갤러쉬에 앉았다...

그리고 이것을 위해 특별히 등록 했습니까? 그래서 여기 있습니다 - 첫 번째 게시물에서 웅덩이로 ...

 
Dmitry Fedoseev :

확신하는? 똑똑하고 싶었지만 갤러쉬에 앉았다...

그리고 이것을 위해 특별히 등록 했습니까? 그래서 여기 있습니다 - 첫 번째 게시물에서 웅덩이로 ...

어, 자기. "재료 배우기", Alger와 Knut. 개성이 필요 없습니다.

알겠습니다. 설명하겠습니다.

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

그것이 분명합니까, 자기?

그렇지 않은 경우 [ctrl+f , "For Loop" 찾기]로 시작하는 https://learnc.info/c/loop.html을 신중하게 읽으십시오.

링크를 찾는 것도 게으르지 않습니다.

그리고 유능하고 아름답고 간결한 코드를 작성하는 법을 배웁니다. 어셈블러로 시작해야 하지만 모든 클록 주기와 바이트가 계산되는 마이크로 컨트롤러에서 시작해야 합니다.

추신

여기에서 나는 전문가에게 그의 "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 ; // это типа количество чего-то там, элементов массива например
}

그리고 이것은 실행의 결과입니다.

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

함수는 각 반복에서 호출될 뿐만 아니라 마지막에서 +1번까지 호출된다는 점에 유의하십시오.

여기 있습니다.

Циклы в Си. Циклы с постусловием, предусловием, Цикл 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 :

어, 자기. "재료 배우기", Alger와 Knut. 개성이 필요 없습니다.

알겠습니다. 설명하겠습니다.

그것이 분명합니까, 자기?

그렇지 않은 경우 [ctrl+f , "For Loop" 찾기]로 시작하는 https://learnc.info/c/loop.html을 신중하게 읽으십시오.

링크를 찾는 것도 게으르지 않습니다.

그리고 유능하고 아름답고 간결한 코드를 작성하는 법을 배웁니다. 어셈블러로 시작해야 하지만 모든 클록 주기와 바이트가 계산되는 마이크로 컨트롤러에서 시작해야 합니다.

추신

여기에서 나는 전문가에게 그의 "for" 루프의 간단한 예를 보여주기에는 너무 게으르지 않았습니다.

그리고 이것은 실행의 결과입니다.

함수는 각 반복에서 호출될 뿐만 아니라 마지막에서 +1번까지 호출된다는 점에 유의하십시오.

여기 있습니다.

나는 박수를! 계속하다...


 
Dmitry Fedoseev :

나는 박수를! 계속하다...


왜 이렇게 엉망이야? 예, 웹에도 게시되었습니다. 엄마가 꾸짖을거야!
 
일부 코드가 누군가를 귀찮게 하고 눈을 아프게 하면 세상에는 청소부, 로더, 청소부, 질서 있는 직업 등 많은 다른 직업이 있습니다.
 
Dmitry Fedoseev :

확신하는? 똑똑하고 싶었지만 갤러쉬에 앉았다...

그리고 이것을 위해 특별히 등록 했습니까? 그래서 여기 있습니다 - 첫 번째 게시물에서 웅덩이로 ...

흥미로운 대화))))

여러분, 개인은 개인이지만 진실을 알아보도록 합시다.

나는 이 예에서   총 포지션 ()   루프의 모든 반복에서 호출됩니다.

Dmitry는 컴파일러가 다르게 작동한다고 주장합니다. 난 이해가 안 돼요. 설명하다.

 //+------------------------------------------------------------------+
#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() вызывается на каждой итерации
  }
//+------------------------------------------------------------------+

그 기능을 말하고 싶다면   PositionsTotal ()은 매번 위치를 다시 계산하지 않고 단순히 열린 위치의 수가 기록된 변수의 값을 반환합니다. 그렇습니다. 맞습니다. 다른 변수를 선언할 의미가 없습니다. 컴파일러가 그것과 관련이 있습니까?

그리고 이 함수가 매번 열린 위치를 다시 계산하면 컴파일러는 이 함수의 값이 추가 계산에 영향을 미치는지 여부를 이해하고 이를 기반으로 함수나 변수를 대체해야 합니다.

뭔가 잘 되지 않습니다.

 
Aleksandr Slavskii :

흥미로운 대화)))

나는 somefunc() 함수가 무언가의 양을 반환하는 것 외에도 거래 매개 변수를 계산하는 것과 같은 다른 조작을 수행하면 이러한 사용이 미묘한 아티팩트를 생성하고 코드 작성자를 혼미: "어??? 4번은 어때??? O_o F$#@!!! 거기도 3번은 있어야지? 고문은 왜 나에게 거짓말을 하는거야?" 이것은 내가 "shitcode"라고 불렀던 것인데, 그의 머리카락 뿌리까지 전문가를 격분시켰습니다. 나는 분명히 초점을 맞추지 않았지만 당신은 나를 위해 그것을했습니다. 그러나 배열을 재초기화하지 않고 동적으로 계산되는 인덱스로 주소를 지정하는 것이 무엇인지는 고려하지 않았습니다. 베어 "sya"에서 이것은 일반적으로 예외 및 해당 핸들러에 대한 스마트 포인터 및 배열이 있는 "플러스"에서 GPF로 이어집니다. mql에서는 그 이유가 명확하지 않습니다.