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

第5話
if文を使い文字ずれを直す



出席番号 得点 合否判定
1 4 不合格
2 71  合格
3 61  合格
4 99  合格
5 54  合格
6 51  合格
7 10 不合格
8 5 不合格
9 16 不合格
10 73  合格

を実現するコード例
#include<iostream>//インクルードファイルiostreamの読み込み

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

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

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

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

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

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

void ランダムデータの生成と判定();//0以上100以下の整数データを生成して合否判定をする。

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

  ランダムデータの生成と判定();

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

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

}

void ランダムデータの生成と判定() {
  //0以上100以下の整数データを生成して合否判定をする。

  srand((unsigned)time(NULL));//シード値を現在時刻から取得

  cout << "出席番号 得点 合否判定" << endl;

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

    int 得点 = rand() % 100;//0以上100未満の整数データを生成する。

    cout << " ";

    if (i + 1 < 10) {

      cout << " " << i + 1;

    }
    else {

      cout << i + 1;

    }

    cout << " " << 得点;

    if (得点 >= 50) {

      cout << "  合格" << endl;

    }
    else {

      cout << " 不合格" << endl;

    }

  }

}
では次の課題です。

    int 得点 = rand() % 100;//0以上100未満の整数データを生成する。


    int 得点 = rand() % 101;//0以上100以下の整数データを生成する。

に戻すことを目標にします。

そうすると得点は1桁、2桁、3桁の3通りの可能性が生じます。

100はめったに生まれないので、

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



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

としてください。

そうすると出席番号も3桁が出て来るのでここでもずれがでるのでif文による位置調整が必要です。

コードを改良して出席番号1桁~3桁、得点1桁~3桁のいずれにも対応しなければなりませんが、

段階的に実現させるために、

    int 得点 = rand() % 100;//0以上100未満の整数データを生成する。

のままにしてください。

そうすると、出席番号1桁~3桁、得点1桁または2桁に対応すればよいことになり、

対応が軽減されます。


72 91  合格
73 34 不合格
74 49 不合格
75 93  合格
76 83  合格
77 21 不合格
78 5 不合格
79 20 不合格
80 56  合格
81 27 不合格
82 96  合格
83 58  合格
84 58  合格
85 3 不合格
86 65  合格
87 83  合格
88 29 不合格
89 87  合格
90 63  合格
91 80  合格
92 53  合格
93 75  合格
94 41 不合格
95 97  合格
96 33 不合格
97 3 不合格
98 71  合格
99 76  合格
100 44 不合格


尚、出席番号1桁~3桁についてはif文を3回使ってください。

そして、if文には次の使い方があることをヒントとしておきます。

if (i + 1 < 100 && i + 1 >= 10)

>= 初めて出て来る記号ですが、A >= 10はAは10以上を意味します。

Aは10より大きいまたはAは10であるということです。

()内は i + 1 が100未満で同時に10以上を意味します。

&&は『かつ』を意味します。

つまり、 i + 1 が100未満 かつ i + 1 が10以上で

i + 1 が100未満で同時に10以上

ということになります。

『かつ』はわかりにくいと思う方は『同時に』である解釈してください。

前に言いましたね。

自分の分かりやすい言葉に翻訳して理解することが大切だと。







第4章第4話へ 第4章第6話へ

本講義トップへ