マルチスレッド版数独自動生成ソフトC++コードを題材とする超初心者のためのVisual Studio C++講義
第12章 while文
第3話 合計が100未満で最大になる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を使うときに必要なお呪い
size_t 合計();//合計が100を超え最小になる1 + 2 + ・・・ + ? の和
int main() {//私は社長だ。
cout << "合計が100を超え最小になる1 + 2 + ・・・ + ? の和 = ";
cout << 合計() << endl;
while (!_kbhit());//待機させるための命令
return 0;//int main() を終わるためのお呪い
}
size_t 合計() {
size_t S = 0;
size_t i = 1;
while (S <= 100) {
S += i;
i++;
}
return(S);
}
実行結果

(
合計が100を超え最小になる1 + 2 + ・・・ + ? の和 = 105
)
トレースする前に手で
1 + 2 =
1 + 2 + 3 =
1 + 2 + 3 + 4 =
1 + 2 + 3 + 4 + 5 =
1 + 2 + 3 + 4 + 5 + 6 =
を計算しておきましょう。
今回も数字を小さくしてトレースしておきましょう。
①合計が10を超え最小になる1 + 2 + ・・・ + ? の和
cout << "合計が100を超え最小になる1
+ 2 + ・・・ + ? の和 = ";
・
・
・
while (S <= 10) {
S += i;
i++;
}
S = 0 かつ i = 1 のとき
S +=1;
i++;
S = 1 かつ i = 2
S < 10 を満たすのでwhile文は続きます。
S +=2;
i++;
S = 3 かつ i = 3
S < 10 を満たすのでwhile文は続きます。
S +=3;
i++;
S = 6 かつ i = 4
S < 10 を満たすのでwhile文は続きます。
S +=6;
i++;
S = 10 かつ i = 5
S < 10 を満たすのでwhile文は終了となります。
その結果
return(S);
によって10が返されます。
実行結果

(
合計が10を超え最小になる1 + 2 + ・・・ + ? の和 = 15
)
1 + 2 + 3 + 4 = 10
1 + 2 + 3 + 4 + 5 = 15
ですから正しいですね。
では第4話の課題です。
const size_t 初項 = 5;//初項
const size_t 公差 = 2;//交差
const size_t 項数 = 10;//項数
として、等差数列の一般項anを求めてください。
等差数列とは
5,7,9,11,・・・
となる数列です。項と項の差が一定の2です。
そこで、2のことを公差と呼びます。
そして、最初の項を初項と呼びます。
ですから、今の数列は初項5、公差2の数列です。
そして、その第10項を求めて下さい、という課題です。
第2項は
5 + 2 = 7
第3項は
5 + 2 + 2 = 9
第4項は
5 + 2 + 2 + 2 = 11
で求められます。
この計算をwhile文で行えばよいのです。