おまけのコーナー 9次元配列宣言、初期化をおこなってみよう 前半
マックス「よっしゃあああああ~
このまま9次元配列に数値データを格納するぜええ
9次元配列宣言、初期化だ、初期化!🌞
まずは
9次元配列宣言
int hairetu [ ][ ][ ][ ][ ][ ][ ][ ][ ];
の[]の中の要素数を
int hairetu [2][1][2][1][2][1][2][1][2];に
設定する。
(記述が膨大になるのでマックスは[ ]の中の要素数を減らしてきました。)
これで配列変数は
2×1×2×1×2×1×2×1×2=32個生成される
実際に書き出すと
hairetu [0][0][0][0][0][0][0][0][0]
hairetu [0][0][0][0][0][0][0][0][1]
hairetu [0][0][0][0][0][0][1][0][0]
hairetu [0][0][0][0][0][0][1][0][1]
hairetu [0][0][0][0][1][0][0][0][0]
hairetu [0][0][0][0][1][0][0][0][1]
hairetu [0][0][0][0][1][0][1][0][0]
hairetu [0][0][0][0][1][0][1][0][1]
hairetu [0][0][1][0][0][0][0][0][0]
hairetu [0][0][1][0][0][0][0][0][1]
hairetu [0][0][1][0][0][0][1][0][0]
hairetu [0][0][1][0][0][0][1][0][1]
hairetu [0][0][1][0][1][0][0][0][0]
hairetu [0][0][1][0][1][0][0][0][1]
hairetu [0][0][1][0][1][0][1][0][0]
hairetu [0][0][1][0][1][0][1][0][1]
hairetu [1][0][0][0][0][0][0][0][0]
hairetu [1][0][0][0][0][0][0][0][1]
hairetu [1][0][0][0][0][0][1][0][0]
hairetu [1][0][0][0][0][0][1][0][1]
hairetu [1][0][0][0][1][0][0][0][0]
hairetu [1][0][0][0][1][0][0][0][1]
hairetu [1][0][0][0][1][0][1][0][0]
hairetu [1][0][0][0][1][0][1][0][1]
hairetu [1][0][1][0][0][0][0][0][0]
hairetu [1][0][1][0][0][0][0][0][1]
hairetu [1][0][1][0][0][0][1][0][0]
hairetu [1][0][1][0][0][0][1][0][1]
hairetu [1][0][1][0][1][0][0][0][0]
hairetu [1][0][1][0][1][0][0][0][1]
hairetu [1][0][1][0][1][0][1][0][0]
hairetu [1][0][1][0][1][0][1][0][1]
こうかな?
えっなんでこうなるか?
int hairetu [2];
なら生成される配列変数は
hairetu [0]
hairetu [1]
だろう
int hairetu [1];
なら生成される配列変数は
hairetu [0]
だろう
int hairetu [1][1];
なら生成される配列変数は
hairetu [0][0]
だけだろう
int hairetu [2][2];
なら生成される配列変数は
hairetu [0][0]
hairetu [0][1]
hairetu [1][0]
hairetu [1][1]
だろう
int hairetu [1][2];
なら生成される配列変数は
hairetu [0][0]
hairetu [0][1]
だろう
ふはは
なら
int hairetu [2][1][2];
なら生成される配列変数は・・・
hairetu [0][0][0]
hairetu [0][0][1]
hairetu [1][0][0]
hairetu [1][0][1]
となる
ようは
int hairetu [2][1][2][1][2][1][2][1][2];
なら
一番右端の[2]により
[0]
[1]
が生成され
その左隣の[1]により
[0]
が生成され
その左隣の[2]により
[0]
[1]
が生成され
その左隣の[1]により
[0]
が生成され
その左隣の[2]により
[0]
[1]
が生成され
その左隣の[1]により
[0]
が生成され
その左隣の[2]により
[0]
[1]
が生成され
その左隣の[1]により
[0]
が生成され
その左隣の[2]により
[0]
[1]
が生成される
それらを組み合わせると
hairetu [0][0][0][0][0][0][0][0][0]
hairetu [0][0][0][0][0][0][0][0][1]
hairetu [0][0][0][0][0][0][1][0][0]
hairetu [0][0][0][0][0][0][1][0][1]
hairetu [0][0][0][0][1][0][0][0][0]
hairetu [0][0][0][0][1][0][0][0][1]
hairetu [0][0][0][0][1][0][1][0][0]
hairetu [0][0][0][0][1][0][1][0][1]
hairetu [0][0][1][0][0][0][0][0][0]
hairetu [0][0][1][0][0][0][0][0][1]
hairetu [0][0][1][0][0][0][1][0][0]
hairetu [0][0][1][0][0][0][1][0][1]
hairetu [0][0][1][0][1][0][0][0][0]
hairetu [0][0][1][0][1][0][0][0][1]
hairetu [0][0][1][0][1][0][1][0][0]
hairetu [0][0][1][0][1][0][1][0][1]
hairetu [1][0][0][0][0][0][0][0][0]
hairetu [1][0][0][0][0][0][0][0][1]
hairetu [1][0][0][0][0][0][1][0][0]
hairetu [1][0][0][0][0][0][1][0][1]
hairetu [1][0][0][0][1][0][0][0][0]
hairetu [1][0][0][0][1][0][0][0][1]
hairetu [1][0][0][0][1][0][1][0][0]
hairetu [1][0][0][0][1][0][1][0][1]
hairetu [1][0][1][0][0][0][0][0][0]
hairetu [1][0][1][0][0][0][0][0][1]
hairetu [1][0][1][0][0][0][1][0][0]
hairetu [1][0][1][0][0][0][1][0][1]
hairetu [1][0][1][0][1][0][0][0][0]
hairetu [1][0][1][0][1][0][0][0][1]
hairetu [1][0][1][0][1][0][1][0][0]
hairetu [1][0][1][0][1][0][1][0][1]
ができてくるというわけだ
配列に数値を格納して初期化するための
入れ物をつくっていく手順は今まで通り
int hairetu[2][1][2][1][2][1][2][1][2]
の左端の[2]により
{ } { }を2つ作り
次に
隣の[1]により
{ }のなかに{ }を1つ作る
{{ }},{{ }}
さらに
隣の[2]により今の{ }のなかに{}を2つ作成する。
{{{ },{ }}},{{{ }, { }}}
さらに隣の[1]により{}のなかに
{}を1つ作る。
{{{{} },{{} }}},{{{{} }, {{} }}}
さらに
隣の[2]により今の{ }のなかに{}を2つ作成する。
{{{{{ },{ }} },{{{ },{ }} }}},{{{{{ },{ }} }, {{{ },{ }} }}}
さらに隣の[1]により{}のなかに
{}を1つ作る。
{{{{{{} },{{} }} },{{{{} },{{} }} }}},{{{{{{} },{{} }} }, {{{{} },{{} }} }}}
さらに
隣の[2]により今の{ }のなかに{}を2つ作成する。
{{{{{{{ },{ }} },{{{ },{ }} }} },{{{{{ },{ }} },{{{ },{ }} }} }}},{{{{{{{ },{ }} },{{{ },{ }} }} }, {{{{{ },{ }} },{{{ },{ }} }} }}}
さらに隣の[1]により今の{}のなかに
{}を1つ作る。
{{{{{{{{ } },{{ } }} },{{{{ } },{{ } }} }} },{{{{{{ } },{{ } }} },{{{{ } },{{ } }} }} }}},{{{{{{{{ } },{{ } }} },{{{{ } },{{ } }} }} }, {{{{{{ } },{{ } }} },{{{{ } },{{ } }} }} }}}
最後に今の{}のなかに
隣の[2]により数値を格納する場所を示す〇を2つ記入すると
{{{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} },{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }}},{{{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }, {{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }}}
となり、これ全体を{}でくくると
9次元配列宣言を初期化するための数値のいれもの
{{{{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} },{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }}},{{{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }, {{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }}}}
が完成する。
よおし
9次元配列宣言int hairetu[2][1][2][1][2][1][2][1][2];
に数値を格納する様式は
int hairetu[2][1][2][1][2][1][2][1][2]=
{{{{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} },{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }}},{{{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }, {{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }}}};
となるわけだ。
この様式で正しいかどうかは
まず
この〇に適当に数値を代入し
この9次元配列の配列変数の1つ
hairetu[1][0][0][0][1][0][1][0][0]に
代入された数値をprintf出力表示するプログラムをつくる。
#include <stdio.h>
int main(void)
{
int hairetu[2][1][2][1][2][1][2][1][2]=
{{{{{{{{{1,2 } },{{3,4 } }} },{{{{5,6 } },{{7,8 } }} }} },{{{{{{9,10 } },{{11,12 } }} },{{{{13,14 } },{{15,16 } }} }} }}},{{{{{{{{17,18 } },{{19,20 } }} },{{{{21,22 } },{{23,24 } }} }} }, {{{{{{25,26 } },{{27,28 } }} },{{{{29,30 } },{{31,32 } }} }} }}}};
printf("%d\n",hairetu [1][0][0][0][1][0][1][0][0]);
return 0;
}
そして,このプログラムがコンパイルできて23がでてきたならOK!
(なぜhairetu [1][0][0][0][1][0][1][0][0]に23が格納されているのかわかるのか
その理由は 後述しちゃうぞ~~(´▽`*))
9次元配列作製成功となるわけだ。」
てんC 「マックスさん ついにここまできましたか。」
マックス 「わははははっ、それではコンパイルっ」
てんC「プ・ロ・グ・ラ・ムの実行結果は・・・
またまたお見事無事コンパイルされ
プログラムの実行結果
23
です。
9次元配列宣言、初期化も成功しています。 マックスさん(^^)」
。。。。。。。。。。。。
ここで9次元配列宣言
int hairetu[2][1][2][1][2][1][2][1][2];
を初期化する数値のいれものは以下のようになっています
👇
{{{{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} },{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }}},{{{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }, {{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }}}}
👆
は
int hairetu[2][1][2][1][2][1][2][1][2];
の
1番左端の
[2]によってつくられた最初の{} ,{}に左から0番目.1番目
その{}の中の
[2]の右隣の[1]によってつくられた{}に0番目
さらにその{}の中の
[1]の右隣の[2]によってつくられた{},{}に0番目.1番目、
さらにその{}の中の
[2]の右隣の[1]によってつくられた{}に0番目
さらにその{}の中の
[1]の右隣の[2]によってつくられた{},{}に0番目.1番目、
さらにその{}の中の
[2]の右隣の[1]によってつくられた{}に0番目
さらにその{}の中の
[1]の右隣の[2]によってつくられた{},{}に0番目.1番目
さらにその{}の中の
[2]の右隣の[1]によってつくられた{}に0番目
さらにその{}の中の
[1]の右隣の[2]によってつくられた〇,〇に0番目.1番目
と順番が対応しています。
0番目から{}に順番が名づけられているのは
1,2,3、4、5次元配列のときとおなじです。
その{}につけられた0,1の順番をたよりに
{}を次々選んでいくと
たとえば
1,0,0,0,1,0,1,0,0と選択する場合は次のようになります
1より最初に生成される{} ,{}の右の1番目にあたる{}を選択
0よりその{}の中の0番目にあたる{}を選択
0よりその{}の中の0番目にあたる{}を選択
0よりその{}の中の0番目にあたる{}を選択
1よりその{}の中の1番目にあたる{}を選択
0よりその{}の中の0番目にあたる{}を選択
1よりその{}の中の1番目にあたる{}を選択
0よりその{}の中の0番目にあたる{}を選択
0よりその{}の中の0番目にあたる〇を選択
すると その○の場所は
hairetu [1][0][0][0][1][0][1][0][0]
に数値が格納される場所となっています。
1,0,0,0,1,0,1,0,0に対応しています。
この場合
9次元配列の中の
配列変数の1つ
hairetu [1][0][0][0][1][0][1][0][0]に数値が格納される場所は
図では◎の位置にあたることがわかります。
int hairetu[2][1][2][1][2][1][2][1][2]=
{{{{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} },{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }}},{{{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{◎,〇 } }} }} }, {{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }}}};
プログラムの実行結果
では
23が格納されているのがわかりますね。
逆に
プログラムの実行結果
の23から
hairetu [1][0][0][0][1][0][1][0][0]に数値を格納する場所は
{{{{{{{{{1,2 } },{{3,4 } }} },{{{{5,6 } },{{7,8 } }} }} },{{{{{{9,10 } },{{11,12 } }} },{{{{13,14 } },{{15,16 } }} }} }}},{{{{{{{{17,18 } },{{19,20 } }} },{{{{21,22 } },{{23,24 } }} }} }, {{{{{{25,26 } },{{27,28 } }} },{{{{29,30 } },{{31,32 } }} }} }}}};
23の位置と
割り出すこともできます。
この
プログラムの実行結果
23
から
hairetu [1][0][0][0][1][0][1][0][0]に
数値を格納する場所を割り出す方が簡単です
同じことの繰り返しになりますが
ここでは実際に
マックス達が
hairetu [1][0][0][0][1][0][1][0][0]に格納される
数値の場所が◎の位置にあたるかどうかを
手作業で確認した手順を
私、solarplexussが再度みていきましょう。
さあ、配列変数
hairetu [1][0][0][0][1][0][1][0][0]に数値を格納する場所は
{{{{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} },{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }}},{{{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{◎,〇 } }} }} }, {{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }}}}
の中の◎の位置にあたるのでしょうか
再び
さきほどの手順に沿ってすこしづつしらべてみます。
9次元配列宣言
int hairetu[2][1][2][1][2][1][2][1][2];
の一番左の[2]によってつくられた{} ,{}を
左から0番目.1番目と数えた時の
1番目の{}のなかにhairetu [1][0][0][0][1][0][1][0][0]に数値を格納する場所は含まれています。
そして さらに詳しく見ていくと
その{}の中の
[2]の右隣の[1]によってつくられた1つの{}
つまり0番目の{}の中にhairetu [1][0][0][0][1][0][1][0][0]に数値を格納する場所は含まれています。
そして さらに詳しく見ていくと
その{}の中の
[2]の右隣の[1]の右隣の[2]によってつくられた{},{}を
左から0番目.1番目と数えた時の
0番目の{}のなかにhairetu [1][0][0][0][1][0][1][0][0]に数値を格納する場所は含まれています。
さらに詳しく見ていくと
その0番目の{}の中の
[2]の右隣の[1]の右隣の[2]の右隣の[1]によってつくられた1つの{}
つまり0番目の{}にhairetu [1][0][0][0][1][0][1][0][0]に数値を格納する場所は含まれています。
さらに詳しく見ていくと
その0番目の{}の中の
[2]の右隣の[1]の右隣の[2]の右隣の[1]の右隣の[2]によってつくられた{},{}を
左から0番目.1番目と名づけた時の
1番目の{}の中にhairetu [1][0][0][0][1][0][1][0][0]に数値を格納する場所は含まれています。
さらに詳しく見ていくと
その1番目の{}の中の
[2]の右隣の[1]の右隣の[2]の右隣の[1]の右隣の[2]の右隣の[1]によってつくられた1つの{}
つまり0番目の{}の中に
hairetu [1][0][0][0][1][0][1][0][0]に数値を格納する場所は含まれています。
さらに詳しく見ていくと
その0番目の{}の中の
[2]の右隣の[1]の右隣の[2]の右隣の[1]の右隣の[2]の右隣の[1]の右隣の[2]によってつくられた{},{}に
左から0番目.1番目と順番をつけたときの
1番目の{}の中にhairetu [1][0][0][0][1][0][1][0][0]に数値を格納する場所は含まれています。
さらに詳しく見ていくと
その1番目の{}の中の
[2]の右隣の[1]の右隣の[2]の右隣の[1]の右隣の[2]の右隣の[1]の右隣の[2]の右隣の[1]によって
つくられた1つの{}
つまり0番目の{}の中にhairetu [1][0][0][0][1][0][1][0][0]に数値を格納する場所は含まれています。
そうして
その0番目の{}の中の
[2]の右隣の[1]の右隣の[2]の右隣の[1]の右隣の[2]の右隣の[1]の右隣の[2]の右隣の[1]の右隣の[2]によって
つくられた〇,〇に左から0番目.1番目と順番をつけたときの
0番目の〇の位置が(◎にあたります)
hairetu [1][0][0][0][1][0][1][0][0]に数値を格納する場所にあたります。
ふぃ~~~
このように
9次元配列宣言
int hairetu[2][1][2][1][2][1][2][1][2];
を初期化するための数値のいれもの
{{{{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} },{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }}},{{{{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{◎,〇 } }} }} }, {{{{{{〇,〇 } },{{〇,〇 } }} },{{{{〇,〇 } },{{〇,〇 } }} }} }}}}
のどの位置が
hairetu [1][0][0][0][1][0][1][0][0]に
数値を格納する場所なのか?を手作業で探してみました。。
感想は
{}は
0番目から順番がつけられているし
{}が並んでいると
その{}は
0番目の{}だったか1番目の{}だったか?
確認が紛らわしく
hairetu [1][0][0][0][1][0][1][0][0]に
数値を格納する場所◎を手作業で探すのは大変です。
ですので
やはり
{{{{{{{{{1,2 } },{{3,4 } }} },{{{{5,6 } },{{7,8 } }} }} },{{{{{{9,10 } },{{11,12 } }} },{{{{13,14 } },{{15,16 } }} }} }}},{{{{{{{{17,18 } },{{19,20 } }} },{{{{21,22 } },{{23,24 } }} }} }, {{{{{{25,26 } },{{27,28 } }} },{{{{29,30 } },{{31,32 } }} }} }}}}
の中から
hairetu [1][0][0][0][1][0][1][0][0]に
数値が格納される場所を知りたい場合
命令文
printf("%d\n",hairetu [1][0][0][0][1][0][1][0][0]);
を実行して
表示される数値23の場所が
hairetu [1][0][0][0][1][0][1][0][0]の
数値を格納する場所になるので
手作業で場所を確かめるより
プログラムを実行したほうが早くて正確に
hairetu [1][0][0][0][1][0][1][0][0]に数値を格納できる場所を
確認できます・・・が
なんか別に
hairetu [1][0][0][0][1][0][1][0][0]の場所を知っても
あまり意味ないかも・・・・・(マックス談)
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます