COS 126 Grades Practice Programming Exam I

Instructions. This practice exam has one question. (It is practice and not a component of your course grade.) You have 50 minutes. The practice exam is open course materials, which includes the course textbook, the companion booksite, the course website, your course notes, and code you wrote for the course. Accessing other information or communicating with a non-staff member (such as via email, instant messenger, text message, Facebook, Piazza, phone, or Snapchat) is prohibited.

Problem. Develop a Java program that takes a threshold score as a command-line argument; reads grade data from standard input; computes numerical mid-semester scores; and prints those greater than (or equal to) the specified threshold.

Standard input format. The input from standard input consists of seven columns, one for student names, four for programming assignment scores, one for the programming exam grade, and one for the written exam grade. The first line (with the special name WEIGHT) specifies weights for each assessment; the second line (with the special name MAX) specifies the maximum score for each assessment; all remaining lines specify a student name followed by the corresponding scores for that student. Here is a sample input file in the prescribed format:

 % more grades5.txt WEIGHT 12.5 12.5 12.5 12.5 15.0 35.0 MAX 20 20 20 20 30 70 Allie 16 8 16 20 25 61 Bodhi 18 19 19 20 28 59 Chaya 15 16 20 20 25 59 Donovan 10 11 11 12 21 43 Elizabeth 20 20 20 20 27 53  % more grades5163.txt WEIGHT 9.375 15.625 15.625 21.875 6.250 31.250 MAX 4 1 2 16 8 32 Aaron 3 0 1 9 6 16 Abbey 2 0 1 16 0 19 Abbie 3 1 2 2 4 12 Abby 3 1 0 11 1 27 Abdul 4 0 0 1 0 21 ... 

The weights are arbitrary real numbers (that sum to 100). You may assume that the assessment scores are integers.

Your task. For each student, compute their numerical midsemester score by adding together the weighted scores for each assessment (computed by dividing the raw score by the maximum score, and multiplying the result by the corresponding weight). For example, to compute the midsemester score for Allie, start by dividing her grade for the first assessment (16) by the maximum score for that assessment (20) and multiplying by the weight for that assessment (12.5), continuing in the same way for each assessment to compute the result:

$$\left (12.5 \times \frac{16}{20} \right ) \;+\; \left (12.5 \times \frac{8}{20} \right ) \;+\; \left (12.5 \times \frac{16}{20} \right ) \;+\; \left (12.5 \times \frac{20}{20} \right ) \;+\; \left (15.0 \times \frac{25}{30} \right ) \;+\; \left (35.0 \times \frac{61}{70} \right ) \;=\; 80.5$$

Output format. For each student with a score greater than (or equal to) the specified threshold, print a line containing their raw score (using three digits of precision after the decimal place), followed by their name.

 % java-introcs Grades 0.0 < grades5.txt 80.500 Allie 91.000 Bodhi 86.375 Chaya 59.500 Donovan 90.000 Elizabeth  % java-introcs Grades 90.0 < grades5.txt 91.000 Bodhi 90.000 Elizabeth 
 % java-introcs Grades 92.0 < grades5163.txt 92.578 Akiko 98.633 Daisey 92.578 Joseph 93.555 Wilma 

Test file. For convenience, here are the sample input files: grades5.txt and grades5163.txt.

Hint. Use only two arrays other than args[]—one for the weights and one for the maximum scores.

Submission. Submit the file Grades.java via the link on the Class Meetings page. Be sure to click the Check All Submitted Files button to verify your submission.

Grading. If this were a real exam, your program would be graded for correctness, clarity (including comments), design, and efficiency. You would receive partial credit for a program that correctly implements some of the required functionality. You would receive a substantial penalty if your program did not compile or if you did not follow the prescribed input/output specifications.

Context. This is the procedure used to calculate midsemester grades in COS 126, using the weights from Spring 2016.