Midterm Najia
unknown
csharp
a year ago
4.8 kB
4
Indexable
#include <iostream> #include <fstream> #include <iomanip> #include <sstream> using namespace std; const string FILENAME = "temps.txt"; // Function to calculate averages and display the results void calculateAndDisplayAverages(double low, double high, ofstream &outfile) { double avgCelsius = (low + high) / 2.0; double avgFahrenheit = avgCelsius * 9 / 5 + 32; double avgKelvin = avgCelsius + 273.15; // Display averages in console cout << fixed << setprecision(1); cout << setw(8) << low << setw(12) << high << setw(12) << avgCelsius << setw(12) << avgFahrenheit << setw(12) << avgKelvin << endl; // Write entry to file outfile << low << "\t" << high << endl; } int main() { ifstream infile(FILENAME); ofstream outfile(FILENAME, ios::app); // Check if the file exists if (!infile.is_open()) { cout << "Unable to open input file! Try again." << endl; // Get input for the first entry double firstLow, firstHigh; cout << "Enter low temp: "; cin >> firstLow; cout << "Enter high temp: "; cin >> firstHigh; // Validate input while (firstLow <= 0) { cout << "Low temp must be greater than zero. Please try again." << endl; cout << "Enter low temp: "; cin >> firstLow; } while (firstHigh <= 0) { cout << "High temp must be greater than zero. Please try again." << endl; cout << "Enter high temp: "; cin >> firstHigh; } // Calculate and display averages for the first entry calculateAndDisplayAverages(firstLow, firstHigh, outfile); } else { // File exists, read existing entries and display averages double totalLow = 0.0, totalHigh = 0.0; double entryCount = 0; // Display header cout << setw(8) << "Low" << setw(12) << "High" << setw(12) << "Avg(C)" << setw(12) << "Avg(F)" << setw(12) << "Avg(K)" << endl; while (infile >> ws) { double low, high; infile >> low >> high; // Validate unexpected data if (infile.fail()) { cerr << "Error reading data from file." << endl; return 1; } calculateAndDisplayAverages(low, high, outfile); // Update total for averaging totalLow += low; totalHigh += high; entryCount++; } // Calculate and display total averages double totalAvgCelsius = totalLow + totalHigh / (2 * entryCount); double totalAvgFahrenheit = totalAvgCelsius * 9 / 5 + 32; double totalAvgKelvin = totalAvgCelsius + 273.15; cout << fixed << setprecision(2); cout << "Total Avg(C): " << totalAvgCelsius << endl; cout << "Total Avg(F): " << totalAvgFahrenheit << endl; cout << "Total Avg(K): " << totalAvgKelvin << endl; // Get input for the new entry double newLow, newHigh; cout << "Enter low temp: "; cin >> newLow; // Validate input while (newLow <= 0) { cout << "Low temp must be greater than zero. Please try again." << endl; cout << "Enter low temp: "; cin >> newLow; } cout << "Enter high temp: "; cin >> newHigh; // Validate input while (newHigh <= 0) { cout << "High temp must be greater than zero. Please try again." << endl; cout << "Enter high temp: "; cin >> newHigh; } // Calculate and display averages for the new entry calculateAndDisplayAverages(newLow, newHigh, outfile); // Calculate and display updated total averages totalLow += newLow; totalHigh += newHigh; entryCount++; totalAvgCelsius = totalLow + totalHigh / (2 * entryCount); totalAvgFahrenheit = totalAvgCelsius * 9 / 5 + 32; totalAvgKelvin = totalAvgCelsius + 273.15; cout << fixed << setprecision(2); cout << "Total Avg(C): " << totalAvgCelsius << endl; cout << "Total Avg(F): " << totalAvgFahrenheit << endl; cout << "Total Avg(K): " << totalAvgKelvin << endl; } char repeat; cout << "Press y for another trip or any other non-whitespace key to quit: "; cin >> repeat; while (repeat == 'y' || repeat == 'Y') { // Continue the loop with the same logic as above // ... cout << "Press y for another trip or any other non-whitespace key to quit: "; cin >> repeat; } cout << "Bye!" << endl; return 0; }
Editor is loading...
Leave a Comment