Answer:
Here is the program that determines the number of questions that the student answered correctly.
#include <iostream> //to use input output functions
#include <fstream> // to handle files
#define size 20 //size of questions is fixed to 20
using namespace std; //to identify objects cin cout
int correctAnswers(char answers[], char correct[]); //to count correct answers given by student
int main(){ //start of main function
char correct[size]; // array stores correct answers
char answers[size]; //stores answers of students
int result; //stores the correct answers result of student
double percentage; //stores the percentage of correct answers
int counter; //counts number of correct answers given by student
ifstream reader("CorrectAnswers.txt"); //reads the contents of CorrectAnswers.txt file
if(!reader){ //if file cannot be read/opened
cout<<"Cannot open the file"<<endl;
//displays error message
return 0; }
counter = 0; //sets counter to 0 initially
while( (reader>>correct[counter++]) && counter < size ); //reads each answer from CorrectAnswers.txt and stores it in char array correct[] at each iteration of while loop
reader.close(); //closes the file
reader.open("StudentAnswers.txt"); //opens StudentAnswers.txt file
if(!reader){ //if file could not be opened
cout<<"Cannot open file"<<endl; //displays this error message
return 0; }
counter = 0; //sets counter to 0
while( (reader>>answers[counter++]) && counter < size ); //reads each answer from StudentAnswers.txt and stores it in char array answers[] at each iteration of while loop
result = correctAnswers(answers,correct); //calls correctAnswers method to compute the correct answers given by student and stores the result of correct answers in result variable
percentage = 100.0*result/size; //computes percentage of correct answers of student
cout<<"The total number of questions answered correctly: "<<result<<endl; //displays total no of qs answered correctly
cout<<"The percentage of questions answered correctly: "<<percentage<<" %"<<endl; //displays computed percentage
if( percentage >= 75 ){ //if percentage of correctly answered questions is 75% or greater
cout<<"Student has passed the exam!"<<endl; } //displays that the student passed the exam
else {
//if percentage of correctly answered questions is below 75%
cout<<"Student has failed the exam!"<<endl; } //displays that the student failed the exam
return 0; }
int correctAnswers(char answers[], char correct[]){ //method to compute the number of correct answers
int countCorrect = 0; //stores the count of correct answers
for(int i=0; i<size; i++){ //iterates 20 times to match answers from both the files of 20 questions
if( answers[i] == correct[i] ){ // if the student answer in StudentAnswers.txt file matches with the correct answer given in CorrectAnswers.txt file
countCorrect++; } } //adds 1 to the countCorrect every time the student answer matches with the correct answer
return countCorrect; } //returns the number of questions that the student answered correctly
Explanation:
The program is well explained in the comments mentioned with each line of code.
Here are the two files that can be used to check the working of the above program. You can create your own text files too.
CorrectAnswers.txt :
A
A
B
D
C
C
A
C
D
D
A
B
A
B
B
C
A
C
C
B
StudentAnswers.txt
A
C
B
D
C
C
B
C
D
C
D
B
A
B
B
C
A
C
C
B
Also if the number of wrong answers are to be displayed then add this method to the above code:
void wrongAnswers(char answers[], char correct[]){ //method takes two arrays one with correct answers and the other with student answers
for(int i=0; i<size; i++){
//iterates 20 times
if( answers[i] != correct[i] ){
//if the answer by student does not match with correct answer
cout<<"Question Number: "<<i+1<<endl;
//the question that is answered incorrectly
cout<<"Correct answer is: "<<correct[i]<<endl; //displays the correct answer
cout<<"Student answer is: "<<answers[i]<<endl; } } } //displays the answer that student gave
Now call this method in main() as:
if(result < size){ //if result is less than size i.e. 20
cout<<"The questions answered incorrectly"<<endl; //number of questions that are answered incorrectly
wrongAnswers(answers,correct); //calls method to compute the wrongly answered questions
}else{ //if result is not less than size
cout<<"No incorrect answers."<<endl; } //no questions incorrectly answered
cout<<"Number of missed questions: "<<size-result<<endl; //displays the number of missed questions
The screenshot of the output is attached.