第4章 練習問題3

  • 投稿日:
  • by
  • カテゴリ:

 第4章では、vector型というC言語にはない型とその操作方法が出てくる。ここからが、いよいよC++言語の本らしくなる。練習問題3を引用する。

 一連のdouble型の値をvectorに読み込み、これらの値を特定のルートに沿った2つの都市間の距離として考える。総距離(すべての距離の合計)を計算して出力する。2つの隣接する都市の間の最短距離と最長距離、および平均距離を割り出して出力する。

 私の回答は、下記の通り。

#include "../../std_lib_facilities.h"
 
int main() {
    vector<double> distance;

    for (double x; cin >> x;) {
        if (x > 0)
            distance.push_back(x);
        else
            break;
    }
    if (distance.size() > 0) {
        double sum, min, max;
        sum = distance[0];
        min = distance[0];
        max = distance[0];
        for (int i = 1; i < distance.size(); ++i) {
            sum += distance[i];
            if (min > distance[i]) min = distance[i];
            if (max < distance[i]) max = distance[i];
        }
        cout << "総距離:" << sum << ",最短:" << min << ",最長:" << max << ",平均:" << sum / distance.size() << "\n";
    }
    else
        cout << "値が入力されていません\n";

    return 0;

}

 vectorの最初の値で、min、max、sumを初期化して、その後ろの値を、ループで回して比較するという構成にしている。回答例は、http://www.stroustrup.com/Programming/Solutions/Ch4/e4-3.cppだが、このコードは明らかに間違っている。minを0で初期化すると、minは0のままである。
 maxはシステムとしての最小値、minはシステムとしての最大値で初期化するのが定石である。が、私は、最初の値で初期化するという私の回答のやり方を好んでいる。