Массивы Структур

Тема в разделе "C/C++/C#", создана пользователем BAMP94, 12 фев 2013.

  1. BAMP94

    BAMP94 New Member

    Регистрация:
    12 фев 2013
    Сообщения:
    2
    Симпатии:
    0
    На основе сводной экзаменационной ведомости, включающей фамилии студентов и оценки по дисциплинам (математика, физика, программирование, история), подсчитать средний балл для каждого студента и вывести ведомость в порядке невозрастания среднего балла. Заранее огромная благодарность тому, кто поможет.
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    а что у тебя не получается?
     
  3. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    ТС, все еще нужно решение? (щас будет тебе решение, не пропадай xD)
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <vector>
    #include <algorithm>
    const int NVAL = 4;             //! количество предметов
    struct Stud {                   //! студент
    int vals[NVAL];                 //!< оценки студента:
    //!< <оценка по матерматике> ... <истории>
    std::string name;               //!< имя студента
    };

    float rate(Stud& a) {               //! функция расчета среднего балла
    float t = 0.f;
    for(int i = 0; i < NVAL; ++i)
    t += a.vals[i];
    return t / NVAL;
    }

    int main() {
    std::ifstream ifst("input.txt");     // файл с данными о студенте, записанными в формате:
    // <имя студента> <оценка по матерматике> ... <истории>
    std::vector<Stud*> studs;       // массив студентов (вектор - это почти массив, только
    // его размер может увеличиваться во время выполнения
    // и гарантируется что вектор будет уничтожен при выходе
    // из области видимости {утечки памяти не будет})

    while (0 == ifst.eof()) {       // считываем студентов с файла 
    Stud *stud = new Stud;      // один студент
    ifst >> stud->name;
    for (int i = 0; i < NVAL; ++i)
    ifst >> stud->vals[i];
    studs.push_back(stud);
    }
    ifst.close();

    std::sort(studs.begin(), studs.end(), [](Stud* a, Stud *b) {
    return rate(*a) < rate(*b);
    });

    for (std::vector<Stud*>::iterator it = studs.begin(); studs.end() != it; ++it) {
    std::cout << (*it)->name;
    for(int i = 0; i < NVAL; ++i)
    std::cout << ' ' << (*it)->vals[i];
    std::cout << std::endl;
    }

    // освобождаем память:
    for (std::vector<Stud*>::iterator it = studs.begin(); studs.end() != it; ++it)
    delete *it;

    }
    компилировать в mingw с флагом -std=c++11, как-то так:
    или поставить 2010 или более новую студию и в настройки проекта вписать тоже -std=c++11

    Добавлено: пример файла input.txt:
     
  5. BAMP94

    BAMP94 New Member

    Регистрация:
    12 фев 2013
    Сообщения:
    2
    Симпатии:
    0
    Спасибо огромное =) :) извини что сразу не ответил, запамятовал, очень выручил.
     
Загрузка...
Похожие Темы - Массивы Структур
  1. Искушенный
    Ответов:
    0
    Просмотров:
    431
  2. Искушенный
    Ответов:
    1
    Просмотров:
    419
  3. Искушенный
    Ответов:
    1
    Просмотров:
    386
  4. Rpp
    Ответов:
    1
    Просмотров:
    809
  5. romanovbadboy2
    Ответов:
    0
    Просмотров:
    669

Поделиться этой страницей