using System;
using System.Collections.Generic;
namespace csharp3
{
    class Results
    {

        private string name;
        private double courseMarks;
        private double examinationMarks;
        private string Grade;
        public void setName(string n)
        {
            name = n;
        }
        public string getName()
        {
            return name;
        }
        public void setMarks(double e, double c)
        {
            examinationMarks = e;
            courseMarks = c;
        }
        public double getAverage()
        {
            return (examinationMarks + courseMarks) / 2;
        }
        public void setGrade(string g)
        {
            Grade = g;
        }
        public string getGrade()
        {
            return Grade;
        }
        public double calculateSD()
        {

            double sum = 0.0, standardDeviation = 0.0;

            sum += examinationMarks;
            sum += courseMarks;

            double mean = sum / 2;

            standardDeviation += Math.Pow(examinationMarks - mean, 2);
            standardDeviation += Math.Pow(courseMarks - mean, 2);

            return Math.Sqrt(standardDeviation / 2);
        }
        static void Main(string[] args)
        {
            List<string> passlist = new List<string>();
            List<string> faillist = new List<string>();
            Console.WriteLine("40% average and 40% of exam marks and course marks are required to pass......\n\n ");
            Console.WriteLine("Enter number of Students : ");
            int size = Convert.ToInt32(Console.ReadLine());
            Results[] program = new Results[size];
            string stud_name;
            int[] s = new int[100];
            int[] t = new int[100];
            int k = 0, j = 0;
            double marks1 = 0, marks2 = 0;
            for (int i = 0; i < size; i++)
            {
                Console.WriteLine("Enter Name of Student" + (i + 1) + " : ");
                stud_name = Console.ReadLine();
                program[i] = new Results();
                program[i].setName(stud_name);
                Console.WriteLine("Enter All Marks for Student" + (i + 1) + "\n");
                Console.WriteLine("Enter Course Marks for Student" + (i + 1) + "\n");
                marks1 = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Enter Examination Marks for Student" + (i + 1) + "\n");
                marks2 = Convert.ToDouble(Console.ReadLine());
                program[i].setMarks(marks2, marks1);
                Console.WriteLine("Average Marks of Student name " + program[i].getName() + " are " + program[i].getAverage());
                Console.WriteLine("standard Deviation of Student name " + program[i].getName() + " are " + program[i].calculateSD());
                if (marks1 < 40 || marks2 < 40)
                {
                    faillist.Add(program[i].getName());
                    program[i].setGrade("Fail");
                    t[j] = i;// 
                    j++;
                }
                else if (program[i].getAverage() >= 40)
                {
                    passlist.Add(program[i].getName());
                    if (program[i].getAverage() >= 50)
                    {
                        program[i].setGrade("First Class");
                    }
                    else if (program[i].getAverage() >= 45 && program[i].getAverage() < 50)
                    {
                        program[i].setGrade("Upper Second Class");
                    }
                    else if (program[i].getAverage() >= 42 && program[i].getAverage() < 45)
                    {
                        program[i].setGrade("lower Second Class");
                    }
                    else
                    {
                        program[i].setGrade("Third Class");
                    }
                    s[k] = i;
                    k++;
                }
                else
                {
                    faillist.Add(program[i].getName());
                    program[i].setGrade("Fail");
                    t[j] = i;
                    j++;
                }
            }
            k = 0;
            Console.WriteLine("Passed Students .....\n ");
            foreach (string n in passlist)
            {
                int loc = s[k];
                Console.WriteLine(n + " passed exam with " + program[loc].getGrade());

            }
            j = 0;
            Console.WriteLine("\nFailed Students .....\n ");
            foreach (string n in faillist)
            
                int loc = t[j];
                Console.WriteLine(n + " failed with Grade " + program[loc].getGrade());

            }
        }
    }
