マルチスレッド版数独自動生成ソフトC++コードを題材とする超初心者のためのVisual Studio C++講義
第5章 配列

第7話 データ表示部分を1次元for文に書き換える

第4章第13話課題を2次元配列で書き直す、すなわち


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


2次元配列で実現するコード例
#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 a[4][4];//4行4列の行列を表すことのできる2次元配列の宣言

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

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

      a[i][j] = 4 * i + j + 1;
    }

  }

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

    if (a[0][i] < 10)cout << " ";

    cout << a[0][i] <<" ";

  }

  cout << endl;

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

    if (a[1][i] < 10)cout << " ";

    cout << a[1][i] << " ";

  }

  cout << endl;


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

    if (a[2][i] < 10)cout << " ";

    cout << a[2][i] << " ";

  }

  cout << endl;

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

    if (a[3][i] < 10)cout << " ";

    cout << a[3][i] << " ";

  }

  cout << endl;


  //対角線部分の中央に対する点対称移動を行う

  int 受け皿;//a[0][0]などのデータを一時的に預かる変数

  受け皿 = a[0][0];//a[0][0]のデータを上書きする前に 受け皿 に一時的にデータを預ける

  a[0][0] = a[3][3];
  //a[0][0]のデータがa[3][3]のデータに上書きされてしまうが、値は 受け皿 に残っている

  a[3][3] = 受け皿;
  //a[0][0]の元のデータをa[3][3]に入力

  受け皿 = a[1][1];//a[1][1]のデータを上書きする前に 受け皿 に一時的にデータを預ける

  a[1][1] = a[2][2];
  //a[1][1]のデータがa[2][2]のデータに上書きされてしまうが、値は 受け皿 に残っている

  a[2][2] = 受け皿;
  //a[1][1]の元データをa[2][2]に入力

  //対角線部分の中央に対する点対称移動終了


  //逆対角線部分の中央に対する点対称移動を行う
  受け皿 = a[0][3];//a[0][0]のデータを上書きする前に 受け皿 に一時的にデータを預ける

  a[0][3] = a[3][0];
  //a[0][3]のデータがa[3][0]のデータに上書きされてしまうが、値は 受け皿 に残っている

  a[3][0] = 受け皿;
  //a[0][3]の元のデータをa[3][0]に入力

  受け皿 = a[1][2];//a[1][2]のデータを上書きする前に 受け皿 に一時的にデータを預ける

  a[1][2] = a[2][1];
  //a[1][2]のデータがa[2][1]のデータに上書きされてしまうが、値は 受け皿 に残っている

  a[2][1] = 受け皿;
  //a[1][2]の元データをa[2][1]に入力

  //逆対角線部分の中央に対する点対称移動終了

  cout << endl;

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

    if (a[0][i] < 10)cout << " ";

    cout << a[0][i] << " ";

  }

  cout << endl;

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

    if (a[1][i] < 10)cout << " ";

    cout << a[1][i] << " ";

  }

  cout << endl;

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

    if (a[2][i] < 10)cout << " ";

    cout << a[2][i] << " ";

  }

  cout << endl;

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

    if (a[3][i] < 10)cout << " ";

    cout << a[3][i] << " ";

  }


}

第6話で述べた通り第8話への課題は

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

    if (a[0][i] < 10)cout << " ";

      cout << a[0][i] << " ";

    }

    cout << endl;

  }

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

    if (a[1][i] < 10)cout << " ";

    cout << a[1][i] << " ";

  }

  cout << endl;

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

    if (a[2][i] < 10)cout << " ";

    cout << a[2][i] << " ";

  }

  cout << endl;

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

    if (a[3][i] < 10)cout << " ";

    cout << a[3][i] << " ";

  }

を2次元for文で実現するです。




第5章第6話へ 第5章第8話へ

本講義トップへ