[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 22

 

Les gens, aidez-moi !

                      if(OPrazH<razH && OPrazH>0)              
                        {
                         f1=1;                                 
                         xDelH[countDH][0]=High[j];            
                         xDelH[countDH][1]=Time[j];
                         Print(xDelH[countDH][0]);
                         countDH++;
                         break;
                        }

J'écris ce code (ceci est un extrait), toutes les variables et les tableaux sont définis, le compteur compte. Initialement, countDH=0. Mais il y a un problème : rien n'est écrit dans le tableau xDelH. Print (High[j], Time[j], countDH) renvoie le résultat correct mais xDelH[countDH][0] donne toujours 0. La vérification via la taille du tableau renvoie également 0.

Même si vous écrivez xDelH[countDH][0]=0.01 ; cela donne toujours 0. Quoi que je fasse, peu importe où je place ce code, il ne fonctionne nulle part.

A quoi cela peut-il être dû ? Quelle en est la raison ? Aidez-moi, s'il vous plaît !

 
WindSW:

Les gens, aidez-moi !

J'écris ce code (c'est un fragment), toutes les variables et les tableaux sont définis, le compteur compte. Mais j'ai un problème avec le tableau xDelH, rien n'y est écrit. Print (High[j], Time[j], countDH) me donne un résultat correct mais xDelH[countDH][0] renvoie toujours 0. La vérification via la taille du tableau renvoie également 0. Quelle peut être la raison ? Quelle en est la raison ? Aidez-moi, s'il vous plaît !

Même si j'écris xDelH[countDH][0]=0.01 ; cela donne toujours 0.

Vérifier si xDelH est du type double. Est-ce que ce si à l'intérieur pour. L'opérateur de rupture est en quelque sorte mal placé. Si vous le faites comme ci-dessous, que se passera-t-il ?

double xDelH [1][1];
int countDH=0;

xDelH[countDH][0]=0.01; // точка а не запятая
Print(DoubleToStr(xDelH[countDH][0],2));
 
WindSW:

Les gens, aidez-moi !

J'écris ce code (ceci est un extrait), toutes les variables et les tableaux sont définis, le compteur compte. Initialement, countDH=0. Mais il y a un problème : rien n'est écrit dans le tableau xDelH. Print (High[j], Time[j], countDH) renvoie des résultats corrects, tandis que xDelH[countDH][0] donne toujours 0. La vérification via la taille du tableau renvoie également 0.

Même si vous écrivez xDelH[countDH][0]=0.01 ; cela donne toujours 0. Quoi que je fasse, peu importe où je place ce code, il ne fonctionne nulle part.

A quoi cela peut-il être dû ? Quelle en est la raison ? Aidez-moi, s'il vous plaît !

Une autre raison peut être la taille non déclarée du tableau xDelH[][].
 
J'ai le double xDelH[][2] ; if est dans deux for, dont l'un passe par j. Le code que vous avez écrit fonctionne - il donne 0.01
 
WindSW:
J'ai le double xDelH[][2] ; if est dans deux for, dont l'un passe par j. Le code que vous avez écrit fonctionne - il sort 0.01

Dans votre version, la taille du tableau n'est pas spécifiée en dimension 0, mais dans l'exemple ci-dessus, elle l'est :

double xDelH [1][1];
 

Merci ! Tout fonctionne. Sélectionnez la taille comme suit : ArrayResize(xDelH,100) ;

Une autre question : si le tableau remplit les 100 cellules, et que countDH compte jusqu'à 120 par exemple, la taille du tableau augmentera-t-elle automatiquement jusqu'à 120, ou devrai-je régulièrement redimensionner le tableau d'une autre manière ?

 
WindSW:

Merci ! Tout fonctionne. Sélectionnez la taille comme suit : ArrayResize(xDelH,100) ;

Une autre question : si le tableau remplit les 100 cellules, et que countDH compte jusqu'à 120 par exemple, la taille du tableau augmentera-t-elle automatiquement jusqu'à 120, ou devrai-je régulièrement redimensionner le tableau d'une autre manière ?

Rien ne sera fait automatiquement. Si nécessaire :

ArrayResize (xDelH, countDH + 1);
 
TarasBY:

Rien ne sera fait automatiquement. Si nécessaire :


Merci !
 

Vous pouvez aussi définir plusieurs cellules en même temps, par exemple 1000 si vous savez qu'il n'y en aura pas plus de 1000. Si vous remplissez le tableau à l'intérieur de for, alors dans le même for vous définissez le nombre maximum d'itérations et avant for vous pouvez changer la taille du tableau, par exemple... :

double xDelH[][2];

int N=120;
ArrayResize(xDelH, N);

for (int i=0; i<=N; i++)
{
// ...
}
 
paladin80:

Vous pouvez aussi définir plusieurs cellules en même temps, par exemple 1000 si vous savez qu'il n'y en aura pas plus de 1000. Si vous remplissez le tableau dans for, alors dans le même for vous définissez le nombre maximal d'itérations et avant for vous pouvez redimensionner le tableau, par exemple.. :


Dans mon code, il est plus pratique de définir le nombre d'itérations à travers ArrayRange.

Pourquoi, si j'écris xDelH[countDH][0]=HBar[countH][0] ; cela donnera 0 (bien que HBar[countH][0] soit déjà rempli et ait sa propre valeur). Est-ce que je peux le faire ?