ASDV-Cpp/Assignments/MP1_CalebFontenot/main.cpp

203 lines
7.4 KiB
C++

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/cppFiles/main.cc to edit this template
*/
/*
* File: main.cpp
* Author: caleb
*
* Created on February 26, 2024, 11:30AM
*/
#include <iomanip>
#include <cstdlib>
#include <iostream>
#include <tuple>
#include <cmath>
#include <boost/algorithm/string.hpp>
#include <regex>
#include <vector>
using namespace std;
/*
*
*/
int milesPerGallon(int gallons, int milesDriven) {
return milesDriven / gallons;
}
std::tuple<double, double> maleFemalePercentages(int maleStudents, int femaleStudents) {
int totalStudents = maleStudents + femaleStudents;
double malePercentage = (double) maleStudents / totalStudents;
double femalePercentage = (double) femaleStudents / totalStudents;
return {malePercentage, femalePercentage};
}
double celciusToFahrenheit(double celcius) {
return 9.0 / 5.0 * celcius + 32.0;
}
std::string getMonthName(int month) {
std::string returnString = "";
switch (month) {
case 1:
returnString = "January";
break;
case 2:
returnString = "February";
break;
case 3:
returnString = "March";
break;
case 4:
returnString = "April";
break;
case 5:
returnString = "May";
break;
case 6:
returnString = "June";
break;
case 7:
returnString = "July";
break;
case 8:
returnString = "August";
break;
case 9:
returnString = "September";
break;
case 10:
returnString = "October";
case 11:
returnString = "November";
break;
case 12:
returnString = "December";
break;
}
return returnString;
}
void prettyPrintSalesTax(int month, int year, int total, double totalIncome, double stateSalesTax, double countySalesTax, double totalSalesTax) {
printf("%s %d\n", getMonthName(month).c_str(), year);
printf("---------------------------------------\n");
printf("Total collected:%*c$ %.2f\n", 5, totalIncome);
printf("Sales:%*c$ %.2f\n", 16, stateSalesTax);
printf("County Sales tax:%*c$ %.2f\n", 5, countySalesTax);
printf("Total sales tax:%*c$ %.2f\n", 6, totalSalesTax);
}
void monthlySalesTax(int month, int year, double total) {
double totalIncome = total / 1.06;
double stateSalesTax = total * 0.04;
double countySalesTax = total * 0.02;
double totalSalesTax = stateSalesTax + countySalesTax;
prettyPrintSalesTax(month, year, total, totalIncome, stateSalesTax, countySalesTax, totalSalesTax);
}
bool is_integer(const std::string & s) {
return std::regex_match(s, std::regex("[-+]?[0-9]+"));
}
void mathTutor() {
string userInput = "";
int rand1, rand2 = 0;
do {
cout << "Enter Q/q to quit." << endl;
rand1 = (rand() % 100);
rand2 = (rand() % 100);
cout << "What's " << rand1 << " + " << rand2 << "?" << endl;
cin >> userInput;
boost::algorithm::to_lower(userInput);
if (is_integer(userInput)) {
if (rand1 + rand2 == stoi(userInput)) {
cout << "You are correct!" << endl;
} else {
cout << "Sorry, the answer is " << (rand1 + rand2) << ". Try again." << endl;
}
}
} while (userInput.compare("q") != 0);
}
void prettyPrintMonthlyPayments(double payment, double rate, double numOfPayments, double loanAmount, double annualRate, double amountPaid, double amountPaidBack) {
printf("---------------------------------------\n");
printf("Loan amount:%*c$ %.2f\n", 15, loanAmount);
printf("Monthly Interest Rate:%*c%.0f%%\n", 14, rate);
printf("Number of Payments:%*c%.0f\n", 17, numOfPayments);
printf("Monthly Payment:%*c$ %.2f\n", 12, payment);
printf("Amount Paid Back:%*c$ %.2f\n", 11, amountPaidBack);
printf("Interest Paid:%*c$ %.2f\n", 14, amountPaid);
}
void monthlyPayments(double annualRate, double numOfPayments, double loanAmount, double amountPaid, double amountPaidBack) {
double rate = (annualRate / 12.0);
double topHalf = rate * pow((1.0 + rate), numOfPayments);
double bottomHalf = pow((1.0 + rate), numOfPayments) - 1.0;
double payment = (topHalf / bottomHalf) * loanAmount;
prettyPrintMonthlyPayments(payment, rate, numOfPayments, loanAmount, annualRate, amountPaid, amountPaidBack);
}
// Function to replace placeholders in the story with user inputs
std::string replacePlaceholders(const std::string& story, const std::vector<std::string>& inputs) {
std::string result = story;
std::regex placeholderRegex("<([^>]+)>");
auto inputIter = inputs.begin();
for (std::sregex_iterator iter(story.begin(), story.end(), placeholderRegex), end; iter != end; ++iter) {
const std::string& placeholder = iter->str();
if (inputIter != inputs.end()) {
result.replace(result.find(placeholder), placeholder.length(), *inputIter);
++inputIter;
} else {
// Handle the case where there are more placeholders than inputs
break;
}
}
return result;
}
void madLib() {
string storyTemplate = "There once was a person named <name> who lived in <city>. At the age of <age>, <name> went to a collage at <college>. <Name> graduated and went to work as a <profession>. Then, <name> adopted a(n) <animal> named <pet name>. They both lived happily ever after!";
std::regex placeholderRegex("<([^>]+)>");
std::vector<std::string> placeholders;
for (std::sregex_iterator iter(storyTemplate.begin(), storyTemplate.end(), placeholderRegex), end; iter != end; ++iter) {
placeholders.push_back(iter->str());
}
std::vector<std::string> inputs;
for (const auto& placeholder : placeholders) {
std::string input;
std::cout << "Enter " << placeholder << ": ";
std::getline(std::cin, input);
inputs.push_back(input);
}
// Replace placeholders with user inputs and print the complete story
std::string completedStory = replacePlaceholders(storyTemplate, inputs);
std::cout << "Completed story:\n" << completedStory << std::endl;
}
int main(int argc, char** argv) {
cout << "The car that drove 375 miles and burned 15 gallons of gasoline consumed the fuel at a rate of " << milesPerGallon(15, 375) << " MPG.\n";
int maleStudents, femaleStudents = 0;
//double malePercentage, femalePercentage = 0.0;
cout << "Enter the number of male students, followed by the number of female students: ";
//cin >> maleStudents >> femaleStudents;
//auto [malePercentage, femalePercentage] = maleFemalePercentages(maleStudents, femaleStudents);
//cout << "The ratio of male to female students is " << setprecision(2) << (malePercentage * 10) << "/" << setprecision(2) <<(femalePercentage * 10) << endl;
cout << "0C is " << std::to_string(celciusToFahrenheit(0)) << "F." << endl;
cout << "100C is " << std::to_string(celciusToFahrenheit(100)) << "F." << endl;
cout << "23.8889C is " << std::to_string(celciusToFahrenheit(23.8889)) << "F." << endl;
monthlySalesTax(3, 2024, 100000.08);
//mathTutor();
monthlyPayments(12, 36, 10000.00, 1957.15, 11957.15);
madLib();
return 0;
}