Above the pre-final weighted averages are displayed. Y-axis is wtd average, computed as

- [ 0.25*(average of best 3 hwk percentages) + 0.25*(average of best 3 prog percentages) + 0.20*(midterm percentage) ] / 0.70 .

There is one column per student.

Lab participation scores are not included.

Your total weighted average for the course will be

- 0.70*(pre-final weighted average) + 0.25*(percent on final exam) + 0.05*(lab attendance score),

You can find your particular pre-final weighted average on http://ilearn.ucr.edu .

- Prog4: Adam
- Prog3: Adam
- Prog2: Adam
- Prog1: Adam
- Hwk4: Serdar
- Hwk3: Serdar
- Hwk2: Serdar
- Hwk1: Serdar
- Midterm: Neal, Adam, Serdar

**change to grading policy:** your homework average will be computed as
the average of the best three out of four. same with your programming assignment average.
if you do better on the final (percentage-wise) than you did on the midterm,
then your midterm score will be replaced by your score on the final.

grading: homeworks (25%), projects (25%), lab attendance (5%), one midterm (20%), final exam (25%)

There will be 4-5 written homeworks and 4-6 programming assignments, each equally weighted within its category. Your weighted average will be computed as

- 0.25 * (avg of homework scores)
- + 0.25 * (avgof prog asst scores)
- + 0.20 * (midterm score)
- + 0.25 * (final exam score)
- + 0.05 * (lab attendance)

Your weighted average will then is used to determine your letter grade as follows:

range | grade |

0-50 | F |

50-52 | D- |

52-57 | D |

57-60 | D+ |

60-63 | C- |

63-67 | C |

67-70 | C+ |

70-73 | B- |

73-77 | B |

77-80 | B+ |

80-85 | A- |

85-90 | A |

90-100 | A+ |

The range may be adjusted (favorably) at the end of the course.

Roughly, I want grades to correspond to the following skill sets:

- C = Know algorithms and data structures we've studied in class, can simulate them on examples, know worst-case big-O running times, can implement them in C++. Can explain why these algorithms and data structures are correct, and how their run-time analyses go. Know how to run the debugger to catch most run-time errors in programs. Can complete somewhat complicated programming assignments involving templates, classes, etc, provided basic design is provided.

- B = Skills for C (above) and: given a new algorithm or data structure, can analyze running time and show correctness. Can adapt known algorithms to related problems. Comfortable and competent with the concept of "algorithm" independent of program. Comfortable running the debugger and competent at interpreting g++ compiler error messages and tracking down compile-time errors. Can distinguish a sound analysis of an algorithm (a proof) from an unsound one. Able to judge correctness of a proposed line of reasoning regarding correctness or running time of a program or algorithm.

- A = Skills for B and: can design and analyze efficient new algorithms and data structures. Comfortable with all algorithms, data structures, and techniques taught in the course. Able to debug even challenging compile-time and run-time errors in reasonable time. Completely comfortable with concepts underlying worst-case analysis of algorithms and data structures.