マルチスレッド版数独自動生成ソフト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文で行えばよいのです。


第12章第2話へ 第12章4話へ

本講義トップへ