Your task is to take the temperature readings and generate for each core:

- A piecewise linear interpolation.
- A global linear least squares approximation.
*(Optional)*A cubic spline (or other non-linear) interpolation.

## 2 Program Arguments & Execution

Your program must accept an input filename as the first command line argument. Your program **must NOT** prompt the user for a filename.

### 2.1 Input Format

Data takes the form of temperatures in a `txt`

file. All data points are whitespace delimited. For example, if I had 5 temperature readings:

Example 1: Sample Input with Labels`+61.0°C +63.0°C +50.0°C +58.0°C`

`+80.0°C +81.0°C +68.0°C +77.0°C`

`+62.0°C +63.0°C +52.0°C +60.0°C`

`+83.0°C +82.0°C +70.0°C +79.0°C`

`+68.0°C +69.0°C +58.0°C +65.0°C`

Example 2: Sample Input without Labels`61.0 63.0 50.0 58.0 80.0 81.0 68.0 77.0 62.0 63.0 52.0 60.0 83.0 82.0 70.0 79.0 68.0 69.0 58.0 65.0`

would be a possible input files. Each line represents temperature readings from 4 processor cores. Process each temperature column independently. Readings are taken every 30 seconds. In this example:

- line 1 is 0
*sec* - line 2 is 30
*sec*, - line 3 is 60
*sec*. - line 4 is 90
*sec*. - line 5 is 120
*sec*. - line 6 is 150
*sec*. - line 7 is 180
*sec*.

Your first step should be to pre-process this data into a usable form. **Conceptually,** you need the data in the following format:

This table is a conceptual visualization of the data. You may select any combination data structures, e.g., ADTS (classes or structs), arrays, lists, vectors, or maps.

Time (sec)Core 0Core 1Core 2Core 3061.063.050.058.03080.081.068.077.06062.063.052.060.012083.082.070.079.018068.069.058.065.0

### 2.3 Output Format

All output must be written to text files (one file pre core). Each line must take the form:

xk<=x<xk+1xk<=x<xk+1; yi=c0+c1xyi=c0+c1x ; *type*

where

- xkxk and xk+1xk+1 are the domain in which ykyk is applicable
- ykyk is the kthkth function
*type*is either*least-squares*or*interpolation*

**You will have:**

- n−1n−1 interpolation lines for each core
**exactly one least squares approximation line for each core**

For the example data in described in Section 2.1 (Input Format) you would generate 4 output files.

`{basename}-core-0.{txt}`

`{basename}-core-1.{txt}`

`{basename}-core-2.{txt}`

`{basename}-core-3.{txt}`

## 3 Sample Execution & Output

### 3.2 Sample Output

The following is an example of *piecewise linear interpolation* output for a single core.

### 4.1 Documentation Requirements

All code must be properly and fully documented using a language appropriate comment style. All functions (including parameters and return types) must be documented.

- Doxygen can be used for
*C++*,*Java*, or*JavaScript*. Consider the following Doxygen Example:

**Example 3: C++ Doxygen Documentation**`/** * Retrieve the value stored in three selected Cells * * @param cell1Id numeric id representing the 1st desired cell * @param cell2Id numeric id representing the 2nd desired cell * @param cell3Id numeric id representing the 3rd desired cell * * @return value stored in the Cell * * @pre (cell1Id > 0 && cell1Id < 10) && * (cell2Id > 0 && cell2Id < 10) && * (cell3Id > 0 && cell3Id < 10) */ CellTriple get3Cells(int cell1Id, int cell2Id, int cell3Id) const;`