Показать сообщение отдельно
Старый 22.11.2008, 23:43     # 19
Voland25
Junior Member
 
Регистрация: 28.11.2003
Адрес: Израиль
Пол: Male
Сообщения: 67

Voland25 МолодецVoland25 МолодецVoland25 Молодец
Рем, похоже, это уже Visual C++, раз мы о диалогах заговорили? Поточнее требования, пожалуйста.

В плане руководства к действию, вот примерно так это должно реализовываться на С++ без примесей Visual и иже с ним:

- Определяем класс Team со свойствами m_Gold, m_Silver, m_Bronze типа integer, и свойством m_Name типа string. Само собой, определяем геттеры, сеттеры и конструктор(ы).

Один из методов - getTeamScore() - возвращает следующее выражение:
(7*m_Gold + 6*m_Silver + 5*m_Bronze)
- Определяем класс ScoreSummarizer - главный класс программы. В нем определяем массив указателей на объекты типа Team размером в 5 штук (по кол-ву комманд).
При инициализации запускаем метод этого класса getUserInput(), который заполнит массив коммандами. Алгоритм заполнения:

* В цикле запрашиваем название комманды и кол-во всех медалей
* Определяем новый объект, инициализируем полученными данными, если конструктор default (если же нет - вызываем соответствующий конструктор)
* Назначаем соответствующий указатель из массива чтобы показывал на этот объект
* Переходим к следующей команде
- В классе ScoreSummarizer определяем метод displayData. Его задача - вывести на экран отсортированный список команд с очками, и нарисовать диаграмму столбцов. Для этого определяем три вспомогательных метода:
* sortTeamScores - сортирующий имеющийся у нас массив методом обмена (для выяснения конкретного значения очков команды пользуемся методом getTeamScore из класса Team). Алгоритм приводить не буду, ибо Google - великий знаток алгоритмов сортинга.
* printTeams - выводит на экран форматированные строки, содержащие название команды и кол-во очков
* displayDiagram - тут немного посложнее . Просто распечатываем количество строк, равное максимальному кол-ву очков, когда в каждой строке печатается символ (ну например "*") только если команда набрала (max score - line index) очков... Т.е. в первой строке будут только символы тех команд, у которых максимум, во второй - у которых максимум и максимум - 1, и так далее до тех пор пока кол-во строк не станет равным максимальному кол-ву очков.
Затем, последней строкой, под каждым столбцом высвечиваем название каждой команды.
- Ну, и финал - в main() объявляем объект типа ScoreSummarizer. Если мы вызывали getUserInput в конструкторе этого класса, то можно смело вызывать displayData(). Если же конструктор этого класса default - то последовательно вызываем getUserInput(), а затем уже displayData().

Удачи!
__________________
"Inter arma leges silent" - "молчат законы при звоне оружия"
Voland25 вне форума