[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 184

 
   double Mas[];//массив куда надо заносить данные

ゼロが出力される場合は、指で説明するよりもコードを添付したほうがよいでしょう。

オープンな配列を宣言した場合は、ArrayResizeを 行うか、すぐに大きな次元を宣言することをお勧めします。

 
double mas[];
int start()
  {
  double v1=mas[1];
  mas[1]=89;
  double v2=mas[1];
  ArrayResize(mas,iBars(NULL,0));
  double v3=mas[1];
  mas[1]=89;
  double v4=mas[1];
  Alert(v1,"-",v2,"-",v3,"-",v4);
  return(0);
  }

このスクリプトは純粋に楽しむためのものですが、Alert(GetLastError()) をキャッチすることもできます; get

err_array_index_out_of_range4002配列のインデックスが 範囲外である
 
splxgf:

ゼロが出力される場合は、指で説明するよりもコードを添付したほうがよいでしょう。

開いている配列を宣言した場合は、ArrayResizeを行うか、すぐに大きな次元の配列を宣言することが望ましい。

最初の投稿ですでにコードを添付しています。ただ、どこかに正しい行を2つほど追加して配列を形成する必要があります。ま さにそれが本題でした)。

実際、どこかでこんな感じになっているはずだと思います。

ArrayResize(Mas,n)。

Mas[n]={diff}とする。

nは新しい次元、diffは結果の差分値である。

しかし、そのようにはならず、差分の0.00000をプリントしてしまう。ループの中、ループの後ろ、条件の中にも差分を入れることはすでに試しています。

要するに、茫然自失の状態です)。

書き方をご存知の方は、ぜひ教えてください。

 
splxgf:

このスクリプトは純粋に楽しむためのものですが、Alert(GetLastError()) をキャッチすることもできます; get

err_array_index_out_of_range4002配列のインデックスが範囲外である

なるほど、コードの中で配列のサイズと値の両方を明示的に指定していることがわかりました。まさに、この記事で理解したことです。

でも、私の例では、なぜかできません(.

 
NickXXX:

配列の次元と値を明示的に指定する。

それ以外の選択肢はない。

  double v1=mas[1];
  mas[1]=89;
  Alert(GetLastError());
  double v2=mas[1];
  Alert(GetLastError());
  ArrayResize(mas,iBars(NULL,0));

エレメントは、アクセスしても作成されません。

 
splxgf:

それ以外の選択肢はない。

エレメントはアクセス時に生成されない。

よし、見てくれ。正しく理解できているか?

この例では、89という1つの値からなる1次元の配列を作成しています。

ちなみに次元数とは、1次元の配列の要素数のことです。プログラムの途中で変更できるのでは?結局のところ、最初に配列を明示的に指定しないのは無駄なことではないのです。例えば、I.e.。

double Mas[]; //1次元配列の初期化

int n=0; //配列の要素 数として利用することができます.

さらに、私の例のように、次のようなループを行います。

に対して

{

if(...)//注目する条件

{

n++;//何回動いたか数える

diff=...興味のある値

}

}

そして、どこか他の場所で、一次元配列 Mas[n] に diff 値を詰め込みます(n は要素の数です)。

ごく普通に、そのようにできると思っていたのですが......。それとも、そうなのか?

 

forの前に、必要な要素数だけArrayResizeを追加 する。

例えば、ポイント

  ArrayResize(mas,iBars(NULL,0));

は、現在のウィンドウのチャートのバーの数を指向しています。または、iBarsの代わりに天文学的数字に近いものを指定することもできます。

配列は最初は空で作成されます。アクセスする前に、何個の要素を格納するかを指定する必要があります。完全なコードを掲載すれば、ナビゲーションが容易になります。

 
splxgf:

forの前に、必要な要素数だけArrayResizeを追加する。

例えば、ポイント

は、現在のウィンドウにあるチャートのバーの数を指向しています。または、iBarsの代わりに天文学的数字に近いものを指定することもできます。

しかし、その前に要素の数が分からないので、if条件の数を計算するときに初めて分かることになる。forの後にArrayResizeを付けて みたところ、0が要素として出力されました。
 

例では、要素数がマークされていない配列は使えないことを紹介しています。

最初の2回の呼び出しでエラーが発生し、0が返されます。

ゴキブリを駆除するには、次のように書けばよい。

double mas[999999];

うまくいったら、ゴキブリをどうにかしてください。

 
splxgf:

この例では、要素数がマークされていない配列は使えないことを紹介しています。

最初の2回の呼び出しでエラーが発生し、0が返されます。

飼っているゴキブリを駆除するために。

うまくいったら、ゴキブリをどうにかしてください。

最初から要素数を指定する必要はなく、doubleのMas[]構造も適しています。