マルチスレッド版数独自動生成ソフト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話へ
本講義トップへ