오류, 버그, 질문 - 페이지 1440

 

MT 4. OnTick() 내부의 난수 생성기 MathRand(). Owl을 테스트할 때 동일한 설정에서 다시 실행하면 다른 결과가 나타납니다. 생성된 숫자가 알고리즘에 영향을 미치는 경우 이는 자연스러운 현상입니다.

어떤 이유로 최적화 할 때 동일한 설정으로 다시 시작할 때 동일한 결과가 나타납니다. 그래서 MathRand()가 최적화 모드에서 작동하지 않습니까?

 
Сергей Таболин :

두 번째로(여기서 나는 실수를 할까봐 두렵습니다. Alexander Puzanov 가 수정해주기를 바랍니다.) 프로그래머가 어떤 이유로 인덱스가 20인 요소를 동적 배열 에 추가하기로 결정하면 나쁜 일은 일어나지 않을 것입니다. 배열은 이 차원을 취하고 거기에 값을 쓰고 "누락된" 인덱스를 0 값으로 초기화합니다.

정확히. 왜 "제로"??? 아니면 EMPTY_VALUE여야 합니까? 또는 WRONG_VALUE?

이러한 암시적 할당의 문제는 정확히 암시적이라는 점에 있습니다. 컴파일러는 한 프로그래머가 생각하는 것과 다른 프로그래머가 다르게 생각할 수 있는 일부 코드를 도입합니다.

게다가 비효율적입니다. 항상 변수를 즉시 초기화할 필요는 없으며, 루프에서 큰 배열을 초기화하면 속도가 크게 느려질 수 있습니다.

셋째, 프로그래머가 사용된 차원과 인덱스를 제어하는 것을 누구도 막을 수 없습니다! 유일한 차이점은 이제 그들이 그것을 강제 로 수행한다는 것입니다! )))

컴파일러가 배열 자체의 크기를 추적하는 경우 어떤 클래스도 이 코드를 제거할 수 없습니다. 효율성이 많이 떨어질 수 있습니다.

동시에 컴파일러가 이 작업을 수행하지 않으면 프로그래머는 이 작업을 수행하는 클래스를 작성할 수 있으며 향후에는 필요한 경우 확장되고 0으로 초기화될 수 있는 배열을 사용할 수 있습니다.

두 번째 경우에는 유연성이 더 높습니다.

즉, 귀하가 제공하는 것은 많은 경우에 매우 적합한 솔루션이기도 합니다. 그러나 효율성이 떨어질 수 있으며 이는 좋지 않습니다.

 
Сергей Таболин :

이것은 원칙적으로 동적 배열 이 일반적으로 어떻게 채워져야 하는지에 대한 간단한 예입니다. 아주 오랫동안 C로 글을 쓰지 않아서 기억이 안 나지만 php에서는 배열이 그대로 채워져 있습니다! 모든 것이 논리적이고 이해할 수 있습니다. 배열에 요소를 추가하면(arr[] = x) 배열이 자동으로 증가하고 요소가 배열 끝에 추가됩니다. 그리고 직접 늘릴 필요도 없고 요소의 인덱스를 직접 지정할 필요도 없습니다. 여기서 우리는 완전히 불필요한 움직임을 수행해야 합니다.

차이가 분명하다...

제 생각에는 이것은 적어도 이상합니다)))

프로그래밍 언어는 강력형과 비형으로 나뉩니다. 강력하지 않은 유형에는 PHP, R 및 기타 기능 언어가 포함됩니다. MQL이나 C#, Java와 같은 강력한 형식의 언어에서는 이러한 모호한 데이터 조작이 허용되지 않습니다. 그리고 이것은 특히 프로그래머 자신의 안전을 위해 수행되었습니다. 강력한 유형 지정은 각 절차가 매우 구체적이라는 것을 의미합니다. "배열 배열의 인덱스 0에 있는 요소 가져오기"는 구체적이고 이해할 수 있는 절차이지만, "배열 배열에서 무언가를 가져와서 해당 배열에 추가하는 것"으로 바꾸는 것이 좋습니다. 먼저 반환 컴파일러를 해결합니다." - 당신이 이것에 대해 멀리하지 않을 것이라는 데 동의하십시오.

반면에 배열의 크기를 찾는 지루한 작업과 지속적인 사용자 재분할 작업이 없는 간단한 고수준 구성을 원합니다. 그것이 바로 표준 라이브러리의 목적입니다. 기본 배열을 사용하는 대신 배열 그룹의 클래스로 전환하십시오. 예를 들어 0에서 16까지 CArrayInt 배열에 추가하면 다음과 같습니다.

 #include <Arrays\ArrayInt.mqh>

void OnStart ()
{
   CArrayInt array;
   for ( int i = 0 ; i < 16 ; i++)
      array.Add(i);   
}

보시다시피, 평범한 것은 없습니다. 그리고 어레이의 현재 크기 및 기타 재분할에 대해 머리를 감을 필요가 없습니다. 강력한 타이핑의 프레임워크 내에서 모든 작업이 수행되며 사용자 작업에 직접 집중할 수 있습니다. 이것이 OOP의 힘이자 의미입니다.

 

전체 녹음을 사용할 수 없습니다. 컴파일 오류

 template < typename T>
class A { protected :
        A( T t ) : t( t ) {}
        T t;
};
class B : A< int > {
        B() : A< int >( 1 ) {} //'<' - member(s) initialization expected
};
 

어디가 잘못되었는지 찾을 수 없습니다.

작업은 간격 의 최대값과 최소값을 찾는 것 입니다.

 void OnStart ()

  {
int             Kol_Kan= 10 ;       //Количество элементов для копирования
double          HI[];             //массив для хранения максимумов на интервале
double          LO[];             //массив для хранения минимумов на интервале

CopyHigh ( _Symbol , 0 , 2 ,Kol_Kan,HI); //копируем значения максимумов
CopyLow ( _Symbol , 0 , 2 ,Kol_Kan,LO); //копируем значения минимумов

ArrayResize (HI,Kol_Kan);         //устанавливаем размер массива
ArrayResize (LO,Kol_Kan);

int in_max= 0 ;                     //индекс максимального значения в массиве
int in_min= 0 ;

in_max= ArrayMaximum (HI, WHOLE_ARRAY , 0 ); //Находим индексы максимума и мин в массивах
in_min= ArrayMinimum (LO, WHOLE_ARRAY , 0 );

double hi_max;                   // максимальное значение цены 
double lo_min;                   // минимальное значение цены

hi_max=HI[in_max];               //Переносим значения максимумов и мин в переменные
lo_min=LO[in_min];
Alert (hi_max, "___" ,lo_min);   

  } 
 

ArrayMaximum(), ArrayMinimum( ) 의 잘못된 인수 순서.

 
PabloEs :

어디가 잘못되었는지 찾을 수 없습니다.

작업은 간격 의 최대값과 최소값을 찾는 것 입니다.

기능

CopyHigh ( _Symbol , 0 , 2 ,Kol_Kan,HI); //최대값 복사  

CopyLow ( _심볼 , 0 , 2 , Kol_Kan,LO); //최소값 복사

이미 배열 크기 조정 중...

너무해

ArrayResize (HI,Kol_Kan); //배열 크기 설정

ArrayResize (LO,Kol_Kan);

 
Sergei Vladimirov :

Неправильный порядок аргументов в ArrayMaximum(), ArrayMinimum().

정확히)) 그리고 제 생각에는 ...

블라디미르 파투샤크 :

기능

CopyHigh ( _Symbol , 0 , 2 ,Kol_Kan,HI); //최대값 복사  

CopyLow ( _심볼 , 0 , 2 , Kol_Kan,LO); //최소값 복사

이미 배열 크기 조정 중...

너무해

ArrayResize (HI,Kol_Kan); //배열 크기 설정

ArrayResize (LO,Kol_Kan);

알겠습니다. 감사합니다.

 
PabloEs :
그래서 무슨 일이야, 내가 스스로 알아낼 수 없습니까?
 

하지만 작가는 이미 이해하고 있었다. ))

PabloEs :

정확히)) 그리고 제 생각에는 ...