9 typedef vector<pair<double, double> > Data;
\r
11 void readData(Data & data, const char * fileName);
\r
12 void operate(Data & data1, Data & data2, const char * op);
\r
13 void writeData(Data & data, ostream & output);
\r
16 int main(int argc, const char * argv[])
\r
20 readData(data[0], argv[1]);
\r
21 readData(data[1], argv[3]);
\r
22 operate(data[0], data[1], argv[2]);
\r
24 ostream & output = cout;
\r
25 writeData(data[0], output);
\r
28 void readData(Data & data, const char * fileName)
\r
30 ifstream input(fileName);
\r
31 while (input.good())
\r
34 input >> x; input >> y;
\r
35 data.push_back(pair<double, double>(x, y));
\r
40 void operate(Data & data1, Data & data2, const char * op)
\r
42 if (data1.size() != data2.size())
\r
44 cerr << "Error; data sizes do not match (" << data1.size() << " .vs " << data2.size() << ")\n";
\r
47 for (int ii=0; ii < data1.size() && ii < data2.size(); ++ii)
\r
49 if (data1[ii].first != data2[ii].first)
\r
51 cerr << "Error: Data do not have matching x values at index " << ii << " (" << data1[ii].first << " vs. " << data2[ii].first << ")\n";
\r
52 exit(EXIT_FAILURE);
\r
57 data1[ii].second += data2[ii].second;
\r
60 data1[ii].second -= data2[ii].second;
\r
63 data1[ii].second = data1[ii].second * data2[ii].second;
\r
66 data1[ii].second /= data2[ii].second;
\r
69 cerr << "Operation \"" << op << "\" is not understood!\n";
\r
77 void writeData(Data & data, ostream & output)
\r
79 for (int ii=0; ii < data.size(); ++ii)
\r
81 output << data[ii].first << " " << data[ii].second << "\n";
\r