[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 22

 

Millet, çözmeme yardım edin!

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

Bu kodu yazıyorum (bu bir parça), tüm değişkenler ve diziler ayarlandı, sayaç sayar. Başlangıçta sayDH=0. Ancak bir sorun var, xDelH dizisine hiçbir şey yazılmıyor. Yazdırma yoluyla çıktı (Yüksek[j], Zaman[j], sayımDH) doğru sonuçları verir ve xDelH[countDH][ 0 ] her zaman 0 verir. Dizinin boyutunu kontrol etmek de 0 verir.

xDelH[countDH][0]=0.01 yazsak bile; yine de 0 veriyor. Ne yaparsam yapayım, bu kodu nereye koyarsam koyayım hiçbir yerde çalışmıyor.

Ne olabilir çünkü? Sebebi ne? Lütfen yardım et!

 
WindSW :

Millet, çözmeme yardım edin!

Bu kodu yazıyorum (bu bir parça), tüm değişkenler ve diziler ayarlandı, sayaç sayar. Ancak xDelH dizisine hiçbir şey yazılmaması gibi bir sorun var. Print (High[j], Time[j], countDH) yoluyla çıktı doğru sonuçları verir ve xDelH[countDH][ 0 ] her zaman 0 döndürür. Dizinin boyutunu kontrol etmek de 0 verir. Buna ne sebep olabilir? Sebebi ne? Lütfen yardım et!

xDelH[countDH][0]=0.01 yazsak bile; hala 0 döndürür

xDelH'nin bir çift olup olmadığını kontrol edin. Bu, bir for. Break ifadesi bir şekilde doğru yerleştirilmemiş. Ve aşağıdaki gibi yaparsanız, ne olacak

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

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

Millet, çözmeme yardım edin!

Bu kodu yazıyorum (bu bir parça), tüm değişkenler ve diziler ayarlandı, sayaç sayar. Başlangıçta sayDH=0. Ancak bir sorun var, xDelH dizisine hiçbir şey yazılmıyor. Yazdırma yoluyla çıktı (Yüksek[j], Zaman[j], sayımDH) doğru sonuçları verir ve xDelH[countDH][ 0 ] her zaman 0 verir. Dizinin boyutunu kontrol etmek de 0 verir.

xDelH[countDH][0]=0.01 yazsak bile; yine de 0 veriyor. Ne yaparsam yapayım, bu kodu nereye koyarsam koyayım hiçbir yerde çalışmıyor.

Ne olabilir çünkü? Sebebi ne? Lütfen yardım et!

Başka bir neden, xDelH [][] dizisinin bildirilmemiş boyutu olabilir.
 
çift xDelH[][2]; if, biri j üzerinde yinelenen iki fors içindeyse. Yazdığınız kod çalışıyor - 0.01 veriyor
 
WindSW :
Çift xDelH [] [2] var; if, biri j üzerinde yinelenen iki fors içindeyse. Yazdığınız kod çalışıyor - 0.01 veriyor

Sürümünüzde, dizinin boyutu 0. boyutta ayarlanmamıştır , ancak yukarıdaki örnekte ayarlanmıştır:

 double xDelH [ 1 ][ 1 ];
 

Teşekkür ederim! Her şey çalıştı. Boyut aşağıdaki gibi seçildi: ArrayResize(xDelH,100);

Başka bir soru ortaya çıktı: dizi 100 hücrenin tümünü doldurursa ve örneğin 120'ye kadar DH sayarsa, dizi boyutu otomatik olarak 120'ye yükselir veya dizi boyutunu düzenli olarak başka bir şekilde değiştirmeniz mi gerekir?

 
WindSW :

Teşekkür ederim! Her şey çalıştı. Boyut aşağıdaki gibi seçildi: ArrayResize(xDelH,100);

Başka bir soru ortaya çıktı: dizi 100 hücrenin tümünü doldurursa ve örneğin 120'ye kadar DH sayarsa, dizi boyutu otomatik olarak 120'ye yükselir veya dizi boyutunu düzenli olarak başka bir şekilde değiştirmeniz mi gerekir?

Hiçbir şey otomatik olarak yapılmayacaktır. Eğer gerekliyse:

 ArrayResize (xDelH, countDH + 1 );
 
TarasBY :

Hiçbir şey otomatik olarak yapılmayacaktır. Eğer gerekliyse:


Teşekkür ederim!
 

Bir seçenek olarak, örneğin hemen daha fazla hücre belirleyebilirsiniz. 1000'den fazlasının olmayacağını biliyorsanız 1000. Diziyi for için doldurursanız, aynı şekilde maksimum yineleme sayısını tanımlarsınız ve daha önce dizinin boyutunu değiştirebilirsiniz, örneğin:

 double xDelH[][ 2 ];

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

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

Bir seçenek olarak, örneğin hemen daha fazla hücre belirleyebilirsiniz. 1000'den fazlasının olmayacağını biliyorsanız 1000. İçindeki diziyi for için doldurursanız, aynı şekilde maksimum yineleme sayısını tanımlarsınız ve daha önce dizinin boyutunu değiştirebilirsiniz, örneğin:


Koddan ArrayRange kullanarak yineleme sayısını belirlemek benim için daha uygun.

Ve neden xDelH[countDH][0]=HBar[countH][0]; yazarsanız; , sonra 0 döndürülür (HBar[countH][0] zaten doldurulmuş ve kendi değerine sahip olsa da) . Bunu yapmak hiç mümkün mü?

Neden: