// Timothy Price CS1A Ch 7 challenge 9
/*******************************************************************************
* Determine grade
*
* This program receives character inputs and determines if a student has passed
* or failed.
*
* Inputs:
* Question answers
*
* Outputs:
* Pass or fail indication
* Score
* Incorrect answers
******************************************************************************/
#include <iostream>
#include <cctype> // Required for toupper()
using namespace std;
int main() {
const int NUM_QUESTIONS = 20;
// Array storing the correct answers
char correctAnswers[NUM_QUESTIONS] = {
'B', 'D', 'A', 'A', 'C',
'A', 'B', 'A', 'C', 'D',
'B', 'C', 'D', 'A', 'D',
'C', 'C', 'B', 'D', 'A'
};
// Array to store the student's answers
char studentAnswers[NUM_QUESTIONS];
cout << "-------------------------------------" << endl;
cout << " DRIVER'S LICENSE EXAM GRADER " << endl;
cout << "-------------------------------------" << endl << endl;
// Get student answers with input validation
for (int i = 0; i < NUM_QUESTIONS; ++i) {
char ans;
do {
cout << "Question " << (i + 1) << ": ";
cin >> ans;
ans = toupper(ans); // Convert to uppercase for convenience
cout << ans << endl;
// Input validation
if (ans != 'A' && ans != 'B' && ans != 'C' && ans != 'D') {
cout << "Invalid selection. Try again: " << endl;
cin >> ans;
}
} while (ans != 'A' && ans != 'B' && ans != 'C' && ans != 'D');
studentAnswers[i] = ans;
}
// Evaluation variables
int correctCount = 0;
int incorrectCount = 0;
int incorrectQuestions[NUM_QUESTIONS]; // numbers of wrong answers
for (int i = 0; i < NUM_QUESTIONS; ++i) {
if (studentAnswers[i] == correctAnswers[i]) {
correctCount++;
} else {
incorrectQuestions[incorrectCount] = i + 1;
incorrectCount++;
}
}
// Display Results
cout << endl << "-------------------------------------" << endl;
cout << " EXAM RESULTS " << endl;
cout << "-------------------------------------" << endl;
// Pass/Fail check (Passing score is 15 or more out of 20)
if (correctCount >= 15) {
cout << "Status: PASSED" << endl;
} else {
cout << "Status: FAILED" << endl;
}
cout << "Total Answered Correctly: " << correctCount << " / ";
cout << NUM_QUESTIONS << endl << "Total Answered Incorrectly: ";
cout << incorrectCount << " / " << NUM_QUESTIONS << endl;
// Display list of incorrect questions, if any
if (incorrectCount > 0) {
cout << endl << "Questions answered incorrectly:" << endl;
for (int i = 0; i < incorrectCount; ++i) {
cout << "Question " << incorrectQuestions[i] << " (You answered: ";
cout << studentAnswers[incorrectQuestions[i] - 1];
cout << ", Correct: " << correctAnswers[incorrectQuestions[i] - 1];
cout << ")" << endl;
}
} else {
cout << endl << "Congratulations! Perfect score!" << endl;
}
cout << "-------------------------------------" << endl;
return 0;
}