please help, c++ please explain the process when reading in from the files. The
ID: 3716908 • Letter: P
Question
please help, c++
please explain the process when reading in from the files.
Explanation / Answer
#include <vector>
#include <iostream>
#include <string>
#include <fstream>
#include <algorithm>
using namespace std;
// Asking the user to enter a file name and read data from it
vector<double> ReadDataFromFile()
{
string fileName;
cout << "Enter filename: ";
cin >> fileName;
ifstream inFile(fileName);
if (!inFile)
{
cerr << "unable to open the file.";
exit(1);
}
vector<double> data;
double value;
while (inFile >> value)
{
if (value == -999)
break;
data.emplace_back(value);
}
return data;
}
// Print array
void PrintArray(const vector<double>& data)
{
for (double val : data)
{
cout << val << endl;
}
}
// Sort the array and return
vector<double> SortArray(vector<double> data)
{
sort(data.begin(), data.end());
return data;
}
// Calculate and return the mean of the data
double CalculateMean(const vector<double>& data)
{
double sum = 0;
for (double val : data)
{
sum += val;
}
return sum / data.size();
}
// Calculate and return the median of the data
double CalculateMedian(const vector<double>& data)
{
// Need to sort the data to calculate the median
auto sortedData = SortArray(data);
if (data.size() % 2 == 0)
{
// Sum middle two numbers and return the avergae of them
size_t index = data.size() / 2;
return (sortedData[index - 1] + sortedData[index]) / 2;
}
else
return sortedData[data.size() / 2];
}
// Calculate and return the mode of the data
double CalculateMode(const vector<double>& data)
{
auto sortedData = SortArray(data);
double number = sortedData[0];
double mode = number;
int count = 1;
int countMode = 1;
for (int i = 1; i < sortedData.size(); i++)
{
if (sortedData[i] == number)
{
// count occurrences of the current number
++count;
}
else
{
// now this is a different number
if (count > countMode)
{
countMode = count; // mode is the biggest ocurrences
mode = number;
}
count = 1; // reset count for the new number
number = sortedData[i];
}
}
return mode;
}
int main()
{
vector<double> combinedData;
// Reading data from three different files
auto dataSet1 = ReadDataFromFile();
//Print Unsorted data set 1
PrintArray(dataSet1);
PrintArray(SortArray(dataSet1));
cout << "Mean of data set 1: " << CalculateMean(dataSet1);
cout << "Median of data set 1: " << CalculateMedian(dataSet1);
cout << "Mode of data set 1: " << CalculateMode(dataSet1);
//addding the data set to combined data set
combinedData = dataSet1;
//Print sorted data set 1
auto dataSet2 = ReadDataFromFile();
//Print Unsorted data set 1
PrintArray(dataSet2);
// Print sorted data set 2
PrintArray(SortArray(dataSet2));
cout << "Mean of data set 2: " << CalculateMean(dataSet2);
cout << "Median of data set 2: " << CalculateMedian(dataSet2);
cout << "Mode of data set 2: " << CalculateMode(dataSet2);
//appending data set 2 to combined data set
combinedData.insert(combinedData.end(), dataSet2.begin(), dataSet2.end());
auto dataSet3 = ReadDataFromFile();
//Print Unsorted data set 3
PrintArray(dataSet3);
// print sorted data set 3
PrintArray(SortArray(dataSet3));
cout << "Mean of data set 3: " << CalculateMean(dataSet3);
cout << "Median of data set 3: " << CalculateMedian(dataSet3);
cout << "Mode of data set 3: " << CalculateMode(dataSet3);
//appending data set 3 to combined data set
combinedData.insert(combinedData.end(), dataSet3.begin(), dataSet3.end());
//Print Unsorted combined data set
PrintArray(combinedData);
// print sorted combined data set
PrintArray(SortArray(combinedData));
cout << "Mean of combined data set: " << CalculateMean(combinedData);
cout << "Median of combined data set: " << CalculateMedian(combinedData);
cout << "Mode of combined data set: " << CalculateMode(combinedData);
return 0;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.