問題としては面白い、うん。の続き。
ヒエログリフ臭を消してみた。
istream_iterator も vector も要らないのよね。
#include <iostream> // cout, endl
#include <fstream> // ifstream
#include <utility> // pair
// そっか、こーすりゃいーんだ♪
struct record : std::pair<int,int> {};
std::istream& operator>>(std::istream& stream, record& rec) {
return stream >> rec.first >> rec.second;
}
int main(int argc, char* argv[]) {
for ( int i = 1; i < argc; ++i ) {
double sum = 0.0;
std::ifstream stream(argv[i]);
record prev, current;
stream >> prev;
while ( stream >> current ) {
sum += (current.second + prev.second) // (上底+下底)
* (current.first - prev.first ) // × 高さ
/ 2.0; // ÷ 2
prev = current;
}
std::cout << sum / 3.0 << std::endl;
}
}
より一層"アホみたく簡単"になっちまった件について。