Среднее значение массива (структуры)

Я шел к этому и не могу найти правильный способ сделать это. Я оставил только код, который работает, потому что остальное просто смущает...

Создайте программу, используя 2 массива, содержащие набор данных класса для 10 учащихся: первый массив содержит имя и фамилию (в разных ячейках) учащихся, второй массив содержит оценки (всего 5) для каждого из учащиеся Создайте соответствующие функции для загрузки и отображения массива, включая среднюю и буквенную оценку учащегося. Удалите самую низкую оценку из средней оценки учащегося.

Я не прошу кого-то сделать это за меня, мне просто нужна помощь.

#include <cstdlib>
#include <iostream>

using namespace std;

const int CLASSIZE = 1;

struct student
{
    string firstName;
    string lastName;

    void printTheInfo()
    {
        cout << "Name: " << firstName << " " << lastName;
    }
    void loadMe()
    {
        cout << "First Name: ";
        cin >> firstName;
        cout << "Last Name: ";
        cin >> lastName;
    }
};
struct grades
{
    int grade1;
    int grade2;
    int grade3;
    int grade4;
    int grade5;

    void printTheGrades()
    {
        cout << " Grades: " << grade1 << " " << grade2 << " " << grade3
             << " " << grade4 << " " << grade5 << endl;
    }
    void loadGrades()
    {
        cout << "Grade 1: ";
        cin >> grade1;
        cout << "Grade 2: ";
        cin >> grade2;
        cout << "Grade 3: ";
        cin >> grade3;
        cout << "Grade 4: ";
        cin >> grade4;
        cout << "Grade 5: ";
        cin >> grade5;
    }
};

void printAllStudents(student [], grades [], int);
void loadAllStudents(student [], grades [], int);

int main(int argc, char *argv[])
{    
    student theStudent[CLASSIZE];
    grades theGrade[CLASSIZE];

    loadAllStudents(theStudent, theGrade, CLASSIZE);
    printAllStudents(theStudent, theGrade, CLASSIZE);

    system("PAUSE");
    return EXIT_SUCCESS;
}

void loadAllStudents(student theStudents[], grades theGrades[], int s) 
{
    for(int i = 0; i < s; i++)
    {
        theStudents[i].loadMe();
        theGrades[i].loadGrades();
    }
}
void printAllStudents(student theStudents[], grades theGrades[], int s) 
{
    for(int i = 0; i < s; i++)
    {
        theStudents[i].printTheInfo(); 
        theGrades[i].printTheGrades();
    }
}

person Fusionice    schedule 19.11.2011    source источник
comment
Переименован для удаления C. Этот код использует строки и потоки C++ и несовместим с C.   -  person André Caron    schedule 19.11.2011
comment
Возможно, было бы уместно задать конкретный вопрос, например, как мне приступить к реализации «требования по вашему выбору» отсюда? Сейчас мы не совсем знаем, с чем вам нужна помощь.   -  person André Caron    schedule 19.11.2011
comment
Почему вы объявляете grade1 ... grade5 ? Массив grade[5] был бы проще...   -  person Basile Starynkevitch    schedule 19.11.2011
comment
Извините, @BasileStarynkevitch, как мне это исправить?   -  person Fusionice    schedule 19.11.2011
comment
@AndréCaron: Это приводит к вашему вопросу: мне нужно рассчитать индивидуальные средние значения (минус самая низкая оценка) для каждого ученика.   -  person Fusionice    schedule 19.11.2011
comment
+1 за отличное форматирование кода.   -  person Seth Carnegie    schedule 19.11.2011
comment
Но да, какой именно вопрос?   -  person Seth Carnegie    schedule 19.11.2011
comment
@SethCarnegie, как я могу исправить массив оценок и использовать его для расчета индивидуальных средних значений?   -  person Fusionice    schedule 19.11.2011
comment
Вы не сказали, что не так с массивом оценок, поэтому я не знаю, как это исправить, но чтобы вычислить отдельные средние значения и показать их, просто добавьте код к grades::PrintTheGrades, чтобы сложить grade1 + grade2 + ... + grade5 вместе, и разделите его на 5, чтобы получить среднее и отображать его. Также Бэзил прав, было бы проще иметь массив целых чисел, таких как int allgrades[5] вместо int grade1; int grade2; ... И таким образом вы можете использовать цикл для суммирования всех оценок вместе.   -  person Seth Carnegie    schedule 19.11.2011
comment
Вау, я совсем проглядел это. @SethCarnegie, как мне объединить отдельные оценки в массив оценок [i]?   -  person Fusionice    schedule 19.11.2011
comment
Вот пример: codepad.org/3fFXzDT7   -  person Seth Carnegie    schedule 19.11.2011
comment
@СетКарнеги Да! Это сработало, спасибо за понимание. Кроме того, я предполагаю, что было бы неплохо сделать функцию преобразования среднего значения в буквенную оценку?   -  person Fusionice    schedule 19.11.2011
comment
@Fusionice да, если вам необходимо отображать буквенную оценку, функция будет уместна.   -  person Seth Carnegie    schedule 19.11.2011
comment
@SethCarnegie Если я сделаю функцию void letterGrade, как мне правильно назвать это в пределах структурных классов?   -  person Fusionice    schedule 19.11.2011
comment
Вы должны сделать функцию с сигнатурой char letterGrade(double d) и передать ей оценку, которая является двойной. letterGrade должен возвращать символ, представляющий оценку, и вы просто отображаете его. Например, если вы хотите отображать букву вместо цифры, в моем примере вы должны изменить cout << endl << " Average: " << (average / NUMBER_OF_GRADES) << endl; на cout << endl << " Average: " << letterGrade(average / NUMBER_OF_GRADES) << endl;.   -  person Seth Carnegie    schedule 19.11.2011
comment
@SethCarnegie Вот тут-то и возникает смущение. Я не знаю, как объявить letterGrade и как передать ему среднее значение.   -  person Fusionice    schedule 19.11.2011
comment
Какую часть вы не знаете, как? Что касается дизайна, я бы сделал его private функцией-членом grades, выглядящей как char letterGrade(double d) { ... }   -  person Seth Carnegie    schedule 19.11.2011
comment
Получил это работает. Я не знаю, что меня смущает в функциях! Большое спасибо   -  person Fusionice    schedule 19.11.2011


Ответы (1)


Прежде всего создайте массив оценок. Для этого вы можете использовать double: doublegrade[5] вместоgrade1,...,grade5. Тогда легче вычислить среднее значение. При расчете среднего значения для каждого ученика вы можете сохранить в переменной текущее минимальное значение.

person Mikhail Semenov    schedule 22.12.2011