マルチスレッド版数独自動生成ソフトC++コードを題材とする超初心者のためのVisual Studio C++講義
第4章 if文(もしもボックス))

第14話 4次魔方陣の作成その2




1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

1 15 14 4
12 6 7 9
8 10 11 5
13 3 2 16

を実現するコード例

#include<iostream>//インクルードファイルiostreamの読み込み

#include<conio.h>//while(!_kbhit());を使うためのお呪い

#include<string> //文字列変数を使えるようにするために組み込む

#include <iomanip> //setprecisionを使えるように組み込む

#include <cmath>//powなどを使うときに必要

#include <ctime>//time()(←現時刻発生する関数)を使うために必要

using namespace std;//coutを使うときに必要なお呪い

void 2次元for文();//横と縦の2方向を持つ2次元for文体験

int main() {//私は社長だ。

  2次元for文();

  while (!_kbhit());//待機させるための命令

  return(0);//int main()終わるためのお呪い

}

void 2次元for文() {
  //横と縦の2方向を持つ2次元for文体験

  int a00, a01, a02, a03;//1行目の行列の数字を収納する変数

  int a10, a11, a12, a13;//2行目の行列の数字を収納する変数

  int a20, a21, a22, a23;//3行目の行列の数字を収納する変数

  int a30, a31, a32, a33;//4行目の行列の数字を収納する変数

  for (int i = 0; i < 4; i++) {

    for (int j = 0; j < 4; j++) {

      if (i == 0 && j == 0)a00 = 4 * i + j + 1;

      if (i == 0 && j == 1)a01 = 4 * i + j + 1;

      if (i == 0 && j == 2)a02 = 4 * i + j + 1;

      if (i == 0 && j == 3)a03 = 4 * i + j + 1;

      if (i == 1 && j == 0)a10 = 4 * i + j + 1;

      if (i == 1 && j == 1)a11 = 4 * i + j + 1;

      if (i == 1 && j == 2)a12 = 4 * i + j + 1;

      if (i == 1 && j == 3)a13 = 4 * i + j + 1;

      if (i == 2 && j == 0)a20 = 4 * i + j + 1;

      if (i == 2 && j == 1)a21 = 4 * i + j + 1;

      if (i == 2 && j == 2)a22 = 4 * i + j + 1;

      if (i == 2 && j == 3)a23 = 4 * i + j + 1;

      if (i == 3 && j == 0)a30 = 4 * i + j + 1;

      if (i == 3 && j == 1)a31 = 4 * i + j + 1;

      if (i == 3 && j == 2)a32 = 4 * i + j + 1;

      if (i == 3 && j == 3)a33 = 4 * i + j + 1;

    }

  }

  cout << " " << a00 << " " << a01 << " " << a02 << " " << a03 << endl;

  cout << " " << a10 << " " << a11 << " " << a12 << " " << a13 << endl;

  cout << " " << a20 << " " << a21 << " " << a22 << " " << a23 << endl;

  cout << a30 << " " << a31 << " " << a32 << " " << a33 << endl;

  int w;//交換するための受け皿変数

  w = a01;

  a01 = a32;

  a32 = w;

  w = a02;

  a02 = a31;

  a31 = w;

  w = a10;

  a10 = a23;

  a23 = w;

  w = a20;

  a20 = a13;

  a13 = w;

  cout << endl;

  cout << " " << a00 << " " << a01 << " " << a02 << " " << a03 << endl;

  cout << a10 << " " << a11 << " " << a12 << " " << a13 << endl;

  cout << " " << a20 << " " << a21 << " " << a22 << " " << a23 << endl;

  cout << a30 << " " << a31 << " " << a32 << " " << a33 << endl;

}

プログラミング36年の私でさえ大苦戦するのですから、

皆さんは大大苦戦されたと思います。

本当お疲れ様です。

これで第4章は終了にして、

第5章 配列に進みます。

2次元配列を学ぶと第13話と第14話のプログラミングは、

ずっとずっと簡単になります。

制御変数 i と j で操れて、

      if (i == 0 && j == 0)a00 = 4 * i + j + 1;

      if (i == 0 && j == 1)a01 = 4 * i + j + 1;

      if (i == 0 && j == 2)a02 = 4 * i + j + 1;

      if (i == 0 && j == 3)a03 = 4 * i + j + 1;

      if (i == 1 && j == 0)a10 = 4 * i + j + 1;

      if (i == 1 && j == 1)a11 = 4 * i + j + 1;

      if (i == 1 && j == 2)a12 = 4 * i + j + 1;

      if (i == 1 && j == 3)a13 = 4 * i + j + 1;

      if (i == 2 && j == 0)a20 = 4 * i + j + 1;

      if (i == 2 && j == 1)a21 = 4 * i + j + 1;

      if (i == 2 && j == 2)a22 = 4 * i + j + 1;

      if (i == 2 && j == 3)a23 = 4 * i + j + 1;

      if (i == 3 && j == 0)a30 = 4 * i + j + 1;

      if (i == 3 && j == 1)a31 = 4 * i + j + 1;

      if (i == 3 && j == 2)a32 = 4 * i + j + 1;

      if (i == 3 && j == 3)a33 = 4 * i + j + 1;

はたったの1行になります。




第4章第13話へ 第5章第1話へ

本講義トップへ