// top-down-2.cc

// Computes weighted average score of grades. Grades include two
// assignments two midterm exams and one final exam.  // All grades
// are input from standard input, but the weights of // each type of
// grade are hard coded.

// C header files
extern "C" {
}

// Standard C++ header files
#include <iostream>

// My own C++ header files

// Macro definitions

// Forward definitions of auxiliary functions
void readAssignmentGrades(float& assignment1, float& assignment2);
void readExamGrades(float& ex1, float& ex2);
void readFinalGrade(float& final);
float calculateAverage(float assignment1, float assignment2,
                       float exam1, float exam2,
                       float finalExam);
void printReport(float assignment1, float assignment2,
		 float exam1, float exam2,
		 float finalExam,
		 float average);


// Global declarations
 
int main() {
  float assignment1, assignment2;
  float exam1, exam2;
  float finalExam;

  readAssignmentGrades(assignment1, assignment2);
  readExamGrades(exam1, exam2);
  readFinalGrade(finalExam);
  float avg;
  avg = calculateAverage(assignment1, assignment2,
                         exam1, exam2,
                         finalExam);
  printReport(assignment1, assignment2,
              exam1, exam2,
              finalExam,
              avg);
  return 0;
}
// Auxiliary functions
void readAssignmentGrades(float& assignment1, float& assignment2)
{
  // Read a float in [0,100] into assignment1
  // Read a float in [0,100] into assignment2
}

void readExamGrades(float& ex1, float& ex2)
{
  // Read a float in [0,100] into ex1
  // Read a float in [0,100] into ex2
}

void readFinalGrade(float& final)
{
  // Read a float in [0,100] into final
}
float calculateAverage(float assignment1, float assignment2,
                       float exam1, float exam2,
                       float finalExam)
{
  // Calculate assignments average
  // Calculate exams average
  // Calculate weighted average
}

void printReport(float assignment1, float assignment2,
                       float exam1, float exam2,
                       float finalExam,
                       float average)
{
  // print assignment grades
  // print exam grades
  // print final exam grades
  // print weighted average
}
