Ive been trying to learn the problem for awhile here's my code #include #include using namespace std;
Fantastic news! We've Found the answer you've been seeking!
Question:
Ive been trying to learn the problem for awhile here's my code
#include #include using namespace std; const int MAX_TRANSACTIONS = 100; struct Transaction { char type; // 'd' for debit, 'c' for credit, 'b' for balance string date; double value; }; int daysInMonth(int month, int year) { if (month == 2) { if ((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0))) return 29; // Leap year else return 28; } else if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } else { return 31; } } int main() { Transaction transactions[MAX_TRANSACTIONS]; int numTransactions = 0; // Read the initial balance double balance; cin >> transactions[0].date >> balance; transactions[0].type = 'b'; // 'b' for balance int startDay, startMonth, startYear; sscanf(transactions[0].date.c_str(), "%d/%d/%d", &startMonth, &startDay, &startYear); int currentDay = startDay; int currentMonth = startMonth; int currentYear = startYear; // Read transactions until 'q' or more than 30 days while (true) { // Handle overdraft before checking transaction order if (transactions[numTransactions].type == 'd' && balance < transactions[numTransactions].value) { // Complete the transaction and assess overdraft fee balance -= 15; cout << "Overdraft on " << transactions[numTransactions].date << ". $15 overdraft fee assessed." << endl; } cin >> transactions[numTransactions + 1].type; if (transactions[numTransactions + 1].type == 'q') break; cin >> transactions[numTransactions + 1].date >> transactions[numTransactions + 1].value; int transactionDay, transactionMonth, transactionYear; sscanf(transactions[numTransactions + 1].date.c_str(), "%d/%d/%d", &transactionMonth, &transactionDay, &transactionYear); if (transactionYear < currentYear || (transactionYear == currentYear && transactionMonth < currentMonth) || (transactionYear == currentYear && transactionMonth == currentMonth && transactionDay < currentDay)) { // Out-of-order error cout << "Entries must be provided in chronological order. " << transactions[numTransactions + 1].date << " entered after " << transactions[numTransactions].date << endl; return 1; // Exit with an error code } // Normal transaction if (transactions[numTransactions + 1].type == 'd') { balance -= transactions[numTransactions + 1].value; } else { balance += transactions[numTransactions + 1].value; } numTransactions++; // Update current date currentDay = transactionDay; currentMonth = transactionMonth; currentYear = transactionYear; // Check if exactly 30 days int daysDifference = 0; while (daysDifference < 30) { currentDay--; daysDifference++; if (currentDay == 0) { currentMonth--; if (currentMonth == 0) { currentMonth = 12; currentYear--; } currentDay = daysInMonth(currentMonth, currentYear); } } if (daysDifference >= 30) { break; } } // Calculate and print average balance double averageBalance = balance / (numTransactions + 1); cout << "30-day average balance (" << transactions[0].date << "-" << transactions[numTransactions].date << "): $" << fixed << setprecision(2) << averageBalance << endl; return 0; }
when ran with the input it outputs
the actual output is suppose to be
Can someone please help I have been working on this all day. The code is suppose to stop after 30 days and then take the average but rightnow its not getting passed the first set of days.
Related Book For
Posted Date: