// 02212008.cpp, P H Anderson, Feb 21, '08

#include <stdio.h>
#include <math.h>

int get_grades(float g[]);
float calc_arithmetic_avg(float g[], int num_grades);
float calc_RMS_avg(float g[], int num_grades);

char calc_letter_grade(float avg);

float calc_term(float x, int term);
int factorial(int num);

FILE *fr;

int main()
{
    float g[60], avg, RMS_avg, y;
    int num_grades;
    char letter_grade;
    
    num_grades = get_grades(g);
    if (num_grades <=0)
    {
        printf("Failure\n");
    }
    else
    {
        avg = calc_arithmetic_avg(g, num_grades);
        RMS_avg = calc_RMS_avg(g, num_grades);
        printf("%.2f %.2f\n", avg, RMS_avg);
    }
    
    letter_grade = calc_letter_grade(89.2);
    printf("Grade is %c\n", letter_grade);
    
    y = calc_term(0.7, 5);
    printf("%f\n", y);
    
    while(getchar() != 'x')
    {
    }
}

int get_grades(float g[])
{
    int n = 0, x;
    
    fr = fopen("c:\\grades.txt", "rt");
    if (fr == NULL)
    {
        return(-1);
    }
    else
    {
         while(1)
         {
            x = fscanf(fr, "%f", &g[n]);
            if (x != 1)
            {
                return(n);
            }
            else
            {
                ++n;
            }
        }
    }
}
    
float calc_arithmetic_avg(float g[], int num_grades)
{ // stub
   float sum = 0.0;
   
   sum = g[0] + g[1];
   return(sum / 2);
}
   
float calc_RMS_avg(float g[], int num_grades)
{ // stub
   float sum = 0.0;
   
   sum = g[0]* g[0] + g[1] * g[1];
   return(sqrt(sum) / 2);
}

char calc_letter_grade(float avg)
{ // stub
   return('A');
}

float calc_term(float x, int term)
{   // stub
    float numerator, denominator;
    numerator = pow(x, 2.0 * term);
    denominator = factorial(2 * term);
    
    if ((term % 2) == 1)
    denominator = -denominator;
    return(numerator / denominator);
}

int factorial(int num)
{ // stub
    return(2 * num);
}