Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- double* studentscores(char* key, char** student_answers, int numstud, int numq);
- double best_grade(double* grades, int numStudents);
- double lowest_grade(double* grades, int numStudents);
- char score_to_letter_grade(double score);
- void save_grades(char** studentIds, char** studentAnswers, double* grades, int numStudents, int idlen);
- void display(char** studentIds, char** studentAnswers, double* grades, int numStudents, int idlen);
- int main()
- {
- int numStudents, idlen, numq;
- ifstream fin("hist101midterm1.txt");
- if (fin.fail())
- {
- cout << "Failed opening the file";
- exit(1);
- }
- fin >> numStudents >> idlen >> numq;
- char** studentIds = new char* [numStudents];
- char* key = new char[numq + 1];
- char** studentAnswers = new char* [numStudents];
- for (int i = 0; i < numStudents; i++)
- {
- studentAnswers[i] = new char[numq + 1];
- studentIds[i] = new char[idlen + 1];
- }
- fin >> key;
- for (int i = 0; i < numStudents; i++)
- {
- fin >> studentIds[i];
- fin >> studentAnswers[i];
- }
- double* grades = studentscores(key, studentAnswers, numStudents, numq);
- save_grades(studentIds, studentAnswers, grades, numStudents, idlen);
- display(studentIds, studentAnswers, grades, numStudents, idlen);
- delete[] grades;
- delete[] key;
- for (int i = 0; i < numStudents; i++) {
- delete[] studentIds[i];
- delete[] studentAnswers[i];
- }
- delete[] studentIds;
- delete[] studentAnswers;
- return 0;
- }
- double best_grade(double* grades, int numStudents) {
- double result = grades[0];
- for (int i = 1; i < numStudents; i++)
- if (result < grades[i])
- result = grades[i];
- return result;
- }
- double lowest_grade(double* grades, int numStudents) {
- double result = grades[0];
- for (int i = 1; i < numStudents; i++)
- if (result > grades[i])
- result = grades[i];
- return result;
- }
- char score_to_letter_grade(double score) {
- char result = '_';
- if (score >= 90)
- result = 'A';
- else if (score >= 80)
- result = 'B';
- else if (score >= 70)
- result = 'C';
- else if (score >= 60)
- result = 'D';
- else if (score >= 0)
- result = 'F';
- return result;
- }
- double* studentscores(char* key, char** student_answers, int numstud, int numq)
- {
- double* score = new double[numstud];
- int numcorrect;
- for (int i = 0; i < numstud; i++)
- {
- numcorrect = 0;
- for (int j = 0; j < numq; j++)
- if (key[j] == student_answers[i][j])
- numcorrect++;
- score[i] = (double)numcorrect / numq * 100;
- }
- return score;
- }
- void save_grades(char** studentIds, char** studentAnswers, double* grades, int numStudents, int idlen)
- {
- ofstream fout("saved.txt");
- double bestGrade = best_grade(grades, numStudents);
- double lowestGrade = lowest_grade(grades, numStudents);
- char* bestId = new char[idlen + 1];
- char* lowestId = new char[idlen + 1];
- fout << "Student ID\t------ Answers ----\tPercent\tGrade\n";
- for (int i = 0; i < numStudents; i++) {
- fout << studentIds[i] << "\t" << studentAnswers[i] << "\t";
- fout << grades[i] << "\t" << score_to_letter_grade(grades[i]) << endl;
- }
- fout << "Highest grade is " << bestGrade << " for student ";
- for (int i = 0; i < numStudents; i++)
- if (grades[i] == bestGrade)
- fout << studentIds[i] << " ";
- fout << endl;
- fout << "Lowest grade is " << lowestGrade << " for student ";
- for (int i = 0; i < numStudents; i++)
- if (grades[i] == lowestGrade)
- fout << studentIds[i] << " ";
- fout << endl;
- fout.close();
- delete[] bestId;
- delete[] lowestId;
- }
- void display(char** studentIds, char** studentAnswers, double* grades, int numStudents, int idlen)
- {
- double bestGrade = best_grade(grades, numStudents);
- double lowestGrade = lowest_grade(grades, numStudents);
- char* bestId = new char[idlen + 1];
- char* lowestId = new char[idlen + 1];
- cout << "Student ID\t------ Answers ----\tPercent\tGrade\n";
- for (int i = 0; i < numStudents; i++) {
- cout << studentIds[i] << "\t" << studentAnswers[i] << "\t";
- cout << grades[i] << "\t" << score_to_letter_grade(grades[i]) << endl;
- }
- cout << "Highest grade is " << bestGrade << " for student ";
- for (int i = 0; i < numStudents; i++)
- if (grades[i] == bestGrade)
- cout << studentIds[i] << " ";
- cout << endl;
- cout << "Lowest grade is " << lowestGrade << " for student ";
- for (int i = 0; i < numStudents; i++)
- if (grades[i] == lowestGrade)
- cout << studentIds[i] << " ";
- cout << endl;
- delete[] bestId;
- delete[] lowestId;
- }
Add Comment
Please, Sign In to add comment