Homework 26

Write a program that will read in the grade information from grades.txt and then enter a loop that asks the user for a student number and an assignment number and prints out stats like this:

You may start with the program below, which does many of the above steps, but does not calculate the maximum grade for a student or a maximum grade for an assignment.  To accomplish this, figure out the appropriate prototypes and write two new functions:

// Prints the maximum score obtained by 'student' on any assignment

// For instance, for the first set of sample output above, this prints

//   The max grade for student 0 is 83

//   It was obtained for homework 4

printMaxOneStudent

// Prints the maximum score obtained by any student on ‘assignment’

/ For instance, for the first set of sample output above, this prints

//   The max grade for assignment 4 is 98

//   It was obtained by student 6

printMaxOneAssignment

You may assume the number of students and grades are fixed at 10, and that each row gives the grades for one student.

Turn In a printout of your code and a screen capture showing your program running with the same two sets of inputs shown in the screenshot above.

Starter code:

#include <iostream>

#include <fstream>

using namespace std;

int** createArray(int rows, int cols);

void readData(int** dataArray, ifstream& file_in, int rows, int cols);

void printOneGrade     (int **grades, int rows, int cols, int student, int assignment);

void printOneStudent   (int **grades, int rows, int cols, int student);

void printOneAssignment(int **grades, int rows, int cols, int assignment);

int main()

{

// Constants -- to keep simple we assume 10 students and 10 assignments

const int ROWS = 10;

const int COLS = 10;

char ch;

do {

int student, assignment;

cout << "Enter student number [0..9]: ";

cin >> student;

cout << "Enter assignment number [0..9]: ";

cin >> assignment;

// Print out different info about the student and assignment

// Should we continue?

cout << "Continue? (y/n) ";

cin  >> ch;

} while (ch == 'y');

return 0;

}

int** createArray(int rows, int cols)

{

int** dataArray = new int*[rows];

for (int i = 0; i < rows; i++)

{

dataArray[i] = new int[cols];

}

return dataArray;

}

void readData(int** dataArray, ifstream& file_in, int rows, int cols)

{

for (int i = 0; i < rows; i++)

{

for (int j = 0; j < cols; j++)

{

file_in >> dataArray[i][j];

}

}

}

// Prints grade for the given student and assignment

// e.g. "Grade for student 1 on assignment 3 is 74";

void printOneGrade     (int **grades, int rows, int cols, int student, int assignment)

{

cout << "Grade for student " << student << " on assignment " << assignment;

cout << " is " << grades[student][assignment] << endl;

}

// Prints all grades for the given student

// e.g. "Grades for student 1 are:

//       96 67    56    74    94    100   98    68    95    65"

void printOneStudent   (int **grades, int rows, int cols, int student)

{

cout << "Grades for student " << student << " are " << endl;

for (int i=0; i<cols; i++)

{

cout << grades[student][i] << " ";

}

cout << endl;

}

// Prints all grades for the given assignment

// e.g. "Grades for assignment 3 are:

//       72 74 59 69 67 54 71 89 95"

void printOneAssignment(int **grades, int rows, int cols, int assignment)

{

cout << "Grades for assignment " << assignment << " are " << endl;

for (int i=0; i<rows; i++)

{

cout << grades[i][assignment] << " ";

}

cout << endl;

}