Erreurs, bugs, questions - page 1440

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

Deuxièmement (j'ai peur de faire une erreur ici, j'espère qu'Alexander Puzanov pourra me corriger si nécessaire), si le programmeur décide pour une raison quelconque d'ajouter un élément avec l'indice 20 à un tableau dynamique, rien de mauvais ne se produira. Le tableau prendra cette dimension et y inscrira une valeur et initialisera les index "manquants" avec des valeurs nulles.

Exactement. Pourquoi "zéro" ? Peut-être devrait-il s'agir de EMPTY_VALUE ? Ou WRONG_VALUE ?

Le problème de ces affectations implicites est précisément leur nature implicite - le compilateur introduit du code, qu'un programmeur pense d'une certaine manière, alors qu'un autre pourrait penser différemment.

De plus, c'est inefficace - il n'est pas toujours nécessaire d'initialiser une variable immédiatement, et initialiser un grand tableau dans une boucle peut réduire considérablement la vitesse.

Et troisièmement, personne n'empêche le programmeur de contrôler la dimensionnalité et l'indice utilisé ! La seule différence est que maintenant il est obligé de le faire ! )))

Si le compilateur garde lui-même la trace de la dimension d'un tableau, aucune classe ne sera en mesure de nettoyer ce code. L'efficacité peut très bien baisser.

En même temps, si le compilateur ne s'occupe pas de cette tâche, le programmeur peut écrire une classe pour le faire et utiliser un tableau qui se développera et sera initialisé avec des zéros si nécessaire.

Dans le second cas, la flexibilité est plus élevée.

Ainsi, ce que vous proposez est également une bonne solution pour de nombreux cas. Mais cela peut diminuer l'efficacité, ce qui n'est pas bon.

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

Il s'agit, en principe, d'un exemple simple de la manière dont un tableau dynamique doit normalement être rempli. Je n'ai pas écrit en C depuis longtemps, je ne me souviens pas, mais c'est comme ça que les tableaux sont remplis en php ! Tout est logique et compréhensible. Si j'ajoute un élément à un tableau (arr[] = x), le tableau est automatiquement étendu, et l'élément est ajouté à la fin du tableau. Et nous n'avons pas besoin de l'étirer nous-mêmes, ni de spécifier l'index de l'élément nous-mêmes. Mais ici, nous devons faire des mouvements absolument inutiles :

la différence est évidente...

À mon avis, c'est étrange, pour ne pas dire plus. ))))

Les langages de programmation sont divisés en langages strictement typés et non typés. Vos PHP, R et autres langages fonctionnels font partie de ceux qui ne sont pas strictement typés. Dans les langages strictement typés comme MQL, C# et Java, ce type de manipulation ambiguë des données n'est pas autorisé. Et ceci est fait spécifiquement pour la sécurité du programmeur lui-même. Le typage strict implique que chacune de vos procédures soit extrêmement spécifique : "prendre un élément à l'indice 0 dans le tableau array" est une procédure spécifique et claire, mais vous proposez de la remplacer par "prendre quelque chose dans le tableau array et l'ajouter à ce que le compilateur décide de retourner en premier". - Vous convenez que vous n'irez pas loin avec ça.

D'un autre côté, bien sûr, nous voulons des constructions simples de haut niveau sans dimensionnement fastidieux des tableaux et sans réorganisation constante par l'utilisateur. C'est exactement ce à quoi sert la bibliothèque standard. Au lieu d'utiliser des tableaux de base, passez aux classes du groupe Array. Voici à quoi ressemble, par exemple, l'ajout de zéro à 16 dans le tableau CArrayInt :

#include <Arrays\ArrayInt.mqh>

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

Comme vous pouvez le constater, il n'y a rien de trop naturel. Et il n'est pas nécessaire de se creuser la tête pour connaître la taille actuelle du tableau et autres réarrangements. Tout est fait pour vous, dans le cadre d'une saisie stricte, et vous êtes invité à vous concentrer directement sur la tâche de l'utilisateur. C'est la puissance et l'intérêt de la POO.

 

L'enregistrement complet n'est pas disponible. Erreur de compilation

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

Je n'arrive pas à trouver où je me trompe.

La tâche consiste à trouver la valeur maximale et minimale d'un intervalle.

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

  } 
 

Mauvais ordre des arguments dans ArrayMaximum(), ArrayMinimum().

 
PabloEs:

Je n'arrive pas à trouver où je me trompe.

La tâche consiste à trouver la valeur maximale et minimale d'un intervalle.

Fonctions

CopyHigh(_Symbol,0,2,Kol_Kan,HI) ;//copie des valeurs des maxima

CopyLow(_Symbol,0,2,Kol_Kan,LO) ; //copie des valeurs des minima

déjà redimensionné le tableau.

C'est inutile

ArrayResize(HI,Kol_Kan) ; //définir la taille du tableau

ArrayResize(LO,Kol_Kan) ;

 
Sergei Vladimirov:

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

Exactement)) Et moi qui pensais...

Vladimir Pastushak:

Fonctions

CopyHigh(_Symbol,0,2,Kol_Kan,HI) ;//copie des valeurs des maxima

CopyLow(_Symbol,0,2,Kol_Kan,LO) ; //copie des valeurs des minima

déjà redimensionné le tableau.

C'est inutile

ArrayResize(HI,Kol_Kan) ; //définir la taille du tableau

ArrayResize(LO,Kol_Kan) ;

Je le saurai, merci.

 
PabloEs:
Alors qu'est-ce qui ne va pas ? Je ne peux pas le découvrir moi-même ?
 

L'auteur, en revanche, a déjà tout compris. ))

PabloEs:

Exactement.)) Et moi qui pensais...

 

Lorsque j'essaie de devenir un acheteur de signaux, il est dit que l'abonnement a échoué. quelle pourrait être la raison ?

dans le journal de bord :

2015.11.27 17:30:23.482 '100980' : Signal - error purchasing product [142893] - attempt to subscribe to foreign signal, broker enabled only own signals

que faire ?