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

第4話
if文とfor文を組み合わせて応用範囲を広げよう

本章の最終目的は成績一覧表の作成と3次魔方陣の自動生成です。

if文とfor文を組み合せと世界が広がります。

射程距離が大きくなり応用範囲が広がるのです。

さらに、配列・関数・ポインタ・関数の再帰的使用などを学ぶと、

高次魔方陣の自動生成と数独の自動生成が可能になります。

そして、本講義最終章卒業研究=推薦書の自動生成の開発が現実となります。

推薦書の自動生成は、応用範囲がかなり広いです。

高校の先生ばかりでなく、

他の職種の人も応用できるソフトとなります。

自分の職種の特徴を活かしてソフトを改良してください。

この講義を学べば夢のような話が本当の話になります。

初心者が文書自動生成開発なんて本当なの?

現実の話です。


では色気も何もあったものではありません。

#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));

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

    int テスト結果 = rand() % 101;//0以上100以下の整数データを生成する。

    cout << テスト結果;

    if (テスト結果 >= 50) {
       
       cout << ":合格" << endl;

    }
    else {

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

    }

  }

}



まず、出席番号を付け加えましょう。

1行目には

出席番号 得点 合否判定

を表示しましょう。


出席番号 得点 合否判定
1 18 不合格
2 79  合格
3 61  合格
4 84  合格
5 78  合格
6 58  合格
7 51  合格
8 29 不合格
9 12 不合格
10 90  合格


位置調整は粘り強く試行錯誤をする必要があります。

cout << "     " ;

などを試行錯誤で入れてください。

また、得点を2桁に揃えるために

    int テスト結果 = rand() %
100;//0以上100未満の整数データを生成する。←2026年2月7日訂正

は改良が必要です。

rand() % 100への訂正は2桁以下に統一するためです。

100で割った余りは99以下ですから2桁以下にできます。

解答も判例は20行下に示します。
















#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 テスト結果 = 10 + rand() %
90;//10以上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〜99の整数を作る

に戻し、一桁代にも対応してください。


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


この際に『テスト結果』も『得点』に変更してください。

1つ1つ手で直すのではなく、


編集→検索と置換→クイック置換と進み

下を得点に変えて青色のをクリックして一気に変換してください。

この機能(まとめて置換)を使っていなかった人はこの際のこの使い方を覚えて、

WordやExcelでもまとめて置換をするようにしてください。

悪い習慣は少しずつ改めていきましょう。





第4章第3話へ 第4章第5話へ

本講義トップへ