dizi başlatma

 

mql4 kılavuzundan diziler hakkında bilgi alıyorum ve sorun yaşadığım bir konu ile karşılaştım; dizi başlatma biraz şaşırtıcı Aşağıdaki ifadeyi anlamıyorum

"

Dizi Başlatma


Bir dizi yalnızca karşılık gelen türdeki sabitlerle başlatılabilir. Tek boyutlu ve çok boyutlu diziler, virgülle ayrılmış tek boyutlu sabitler dizisiyle başlatılır. Dizi, küme parantezlerine dahil edilmiştir:

 int Mas_i[ 3 ][ 4 ] = { 0 , 1 , 2 , 3 ,   10 , 11 , 12 , 13 ,   20 , 21 , 22 , 23 };
 
double Mas_d[ 2 ][ 3 ] = { 0.1 , 0.2 , - 0.3 ,    - 10.2 , 1.5 , 7.0 };
 
bool Mas_b[ 5 ] = { false , true , false , true , true }

"

Bir dizinin yalnızca karşılık gelen türdeki sabitlerle başlatılabileceği gerçeği kafamı karıştırmıyor, ancak dizi başlatma kavramı ve tek boyutlu bir dizinin çok boyutlu bir diziyi başlatabilmesi konusunda kafam karıştı.

Aşağıdakilerle kafam karıştı.

"

Başlatılan dizide bir veya birkaç sabit atlanabilir. Böyle bir durumda, sayısal türdeki karşılık gelen dizi öğeleri sıfırla başlatılır, dize türündeki dizilerin öğeleri, "" dize değeriyle (boşluksuz tırnak işaretleri), yani boş bir satırla (boşlukla karıştırılmamalıdır) başlatılır. ). Sonraki program, bazı değerlerin çıkarıldığı bir dizi tarafından başlatılan dizilerin değerlerini görüntüler (script arrayalert.mq4 ) :

 //--------------------------------------------------------------------
// arrayalert.mq4
// The code should be used for educational purpose only.
//--------------------------------------------------------------------
int start()                                     // Special funct. start()
  {
   string Mas_s[ 4 ] = { "a" , "b" , , "d" };           // String array
   int Mas_i[ 6 ] = { 0 , 1 , 2 , , 4 , 5 };               // Integer type array
   Alert (Mas_s[ 0 ],Mas_s[ 1 ],Mas_s[ 2 ],Mas_s[ 3 ]);   // Displaying
   Alert (Mas_i[ 0 ],Mas_i[ 1 ],Mas_i[ 2 ],Mas_i[ 3 ],Mas_i[ 4 ],Mas_i[ 5 ]);
   return ;                                       // Exit start()
  }
//--------------------------------------------------------------------

"

Sonuçta dizi başlatma kavramını kavrayamıyorum.

 

Doğru düşünülen diziler kavramını anlıyorsunuz? birden çok indeksli bir değişken?

Tüm başlatma, tüm dizinlere bir başlangıç değeri ayarlamaktır.

Gönderdiğiniz örneklerde olduğu gibi her dizine ayrı ayrı değer atayabilir veya

Eğer başlangıç değerinin tüm indeksler için aynı olmasını istiyorsanız değeri bir defa bu şekilde girebilirsiniz,

 int myarray[ 100 ]={ 0 };   //initializes all 100 indexes to value zero

veya,

 int myarray[ 100 ][ 5 ]={- 1 }; //multi dimensions, initializes all 500 indexes to -1.

Ayrıca mql4 kitabında bazı hatalar olduğunu da unutmayın. Sanırım ikinci örnekte şöyle diyor:

"Başlatılan dizide bir veya birkaç sabit atlanabilir. Böyle bir durumda, sayısal türdeki karşılık gelen dizi öğeleri sıfırla başlatılır , dize türündeki dizilerin öğeleri, "" dize değeriyle başlatılır (boşluksuz tırnak işaretleri), yani boş bir satırla (boşlukla karıştırılmamalıdır )."

ve sonra bu örneği gösterir,

 string Mas_s[ 4 ] = { "a" , "b" , , "d" };           // String array

muhtemelen şu anlama geliyordu:

 string Mas_s[ 4 ] = { "a" , "b" , "" , "d" };           // String array
ayrıca kitabın bir yerinde "tüm diziler varsayılan olarak statik türdedir" diyor, bu da diğer değişkenler gibi bir hatadır, genel oldukları durumlar dışında statik olarak tanımlanmadıkça statik değildir.
 
SDC :

Doğru düşünülen diziler kavramını anlıyorsunuz? birden çok dizine sahip bir değişken?

Tüm başlatma, tüm dizinlere bir başlangıç değeri ayarlamaktır.

Tüm indeksler için başlangıç değerinin aynı olmasını istiyorsanız değeri bir kez bu şekilde girebilirsiniz.

int myarray[100] {0} //100 dizinin tümünü sıfır değerine başlatır.


Doğru

Hala biraz kafam karıştı.

Yani bir dizim varsa

Çift myarray[100]

Dizi türünü (double), Dizi adını (myarray) ve dizin sayısını (100) bildirdim.

MyArray dizisinin değeri Double myarray[100] = {1, 2, 3, ....} kullanılarak atanabilir mi, böylece myarray[1]=1 ve myarray[2]=2 vb.

Şimdiye kadar sadece döngülerden değer almak amacıyla diziler oluşturdum ve o zaman bile dizi çok gevşek bir şekilde kullanıldı.

Teşekkürler, bu hatayı belirtmek, sahip olduğum küçük bir soruyu temizledi.

 

İlk dizi dizini sıfırdır, yani yaparsanız,

double myarray[100] = {1,2,3 .....};

yapacak, myarray[0] == 1, myarray[1] ==2 vb.

 

Ah doğru tamam.

Peki ya çok boyutlu bir Dizim varsa

Double Myarray[3][4] = {0.1,0.2,0.3,0.4,0.5} (daha önce tamsayı kullandığımı fark ettiğim için üzgünüm)

Bir değeri nasıl çağırabilirim?

 

buna myarray[index,index] gibi diyorsunuz; veya myarray[index][index]; aynı şeyi yapar.

val = dizim[2,2]; //dizi indeksi 2,2'den değeri alır, onu val'e koyar.

Yazdır(myarray[2,2]); // yazdırır

Uyarı(myarray[2][2]); // uyarır

 

Değer ne olurdu?

Çift Myarray[3][4] = {0.1,0.2,0.3,0.4,0.5}

Myarray[1][3]=?

 
sıfır çünkü ona hiçbir şey atamadın
 

3 x 4 diziniz var

double Myarray[3][4] = {0.1,0.2,0.3,0.4,0.5} ;

böyle dolduracaktı

Myarray[0,0] = 0.1;

Myarray[0,1] = 0.2;

Myarray[0,2] = 0.3;

Myarray[0,3] = 0.4;

Myarray[1,0] = 0,5;

Myarray[1,1] = 0.0;

Myarray[1,2] = 0.0;

vb

 
[0,0] dizisinin Myarray[3][4] için bildirilen bir değeri nasıl olur?
 

şu an kararsızım..

Myarray[3][4] çok boyutlu değil mi, öyleyse neden sadece boyutlardan birinin değerini değiştirerek değerleri çağırabiliyorum?

Neden: