第14講 4次及び6次魔方陣の作成
第4話 対角線の交換プログラム解説
手順
Ⅱ 対角線の交換による魔方陣の完成
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
16 | 2 | 3 | 13 |
5 | 11 | 10 | 8 |
9 | 7 | 6 | 12 |
4 | 14 | 15 | 1 |
解答コード主要部分再掲
public static void g(int a[][]){
int i,w;
for(i=0;i<2;i++){
w=a[i][i];
a[i][i]=a[3-i][3-i];
a[3-i][3-i]=w;
}
for(i=0;i<2;i++){
w=a[i][3-i];
a[i][3-i]=a[3-i][i];
a[3-i][i]=w;
}
}
解説
ある程度プログラミングの経験のある方でも、
結構難解なプログラムですから、初心者の方には???でしょうね。
そこで、詳しくとレースをしましょう。
まず、
for(i=0;i<2;i++){
w=a[i][i];
a[i][i]=a[3-i][3-i];
a[3-i][3-i]=w;
}
の部分の動きを追ってみましょう。
トレースする際に、色対応に気をつけてください。
0 | 1 | 2 | 3 | |
0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
3 | 13 | 14 | 15 | 16 |
i=0のとき、
w=a[i][i];
は
w=a[0][0];
ですから、
0 | 1 | 2 | 3 | |
0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
3 | 13 | 14 | 15 | 16 |
座標(0,0)の値1がwに収納されます。
次に、
a[i][i]=a[3-i][3-i];
は
a[0][0]=a[3-0][3-0]=a[3][3];
ですから、
0 | 1 | 2 | 3 | |
0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
3 | 13 | 14 | 15 | 16 |
座標(3,3)の16が座標(0,0)に代入されて
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
3 | 13 | 14 | 15 | 16 |
となります。
そして、
a[3-i][3-i]=w;
は
a[3-0][3-0]=a[3][3]=w;
座標(3,3)にwの値1が代入されて
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
3 | 13 | 14 | 15 | 1 |
となります。座標(0,0)と座標(3,3)の交換に成功しました。
一時的に値を収納するボックスwが働いています。
i=1のとき、
w=a[i][i];
は
w=a[1][1];
で
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
3 | 13 | 14 | 15 | 1 |
座標(1,1)の値6がボックスwに収納されます。
次の行
a[i][i]=a[3-i][3-i];
は
a[1][1]=a[3-1][3-1]=a[2][2];
ですから、
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
3 | 13 | 14 | 15 | 1 |
座標(2,2)の値11が座標(1,1)に代入されて
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 4 |
1 | 5 | 11 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
3 | 13 | 14 | 15 | 1 |
となります。3行目
a[3-i][3-i]=w;
は
a[3-1][3-1]=a[2][2]=w;
なので、一時収納ボックスwの値2が座標(2,2)に代入されて
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 4 |
1 | 5 | 11 | 7 | 8 |
2 | 9 | 10 | 2 | 12 |
3 | 13 | 14 | 15 | 1 |
座標(1,1)と座標(2,2)の交換に成功しました。
第3話へ 第5話へ
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門
基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門
基礎から応用まで第2部
初心者のための
VC++による C言語 入門 C++ 入門 基礎から応用まで第3部