мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
Следующая версияСледующая версия справа и слева
java:basics [04/12/2014 13:30] ybezrukovjava:basics [19/01/2015 09:13] ybezrukov
Строка 839: Строка 839:
 [[https://drive.google.com/file/d/0B88BcoMr40VINTJIX1VuSlAxSTA/view?usp=sharing|Задание]] [[https://drive.google.com/file/d/0B88BcoMr40VINTJIX1VuSlAxSTA/view?usp=sharing|Задание]]
  
 +==== Второй семестр ====
 +
 +===== Задание 1. Тур де Франс =====
 +
 +Наша задача состоит в том, чтобы написать красивую объектно-ориентированную программу, которая будет заниматься обработкой данных результатов велогонки Тур де Франс. Данные гонки хранятся в трех текстовых файлах.
 +
 +Файл 1. tdf14_teams.txt
 +
 +В нем перечислены участники и команды. В каждой строке файла хранится запись вида:
 +
 +<code>
 +национальность фамилия имя год_рождения номер команда
 +</code>
 +
 +Например
 +
 +<code>
 +SUI ALBASINI Michael 1980 182 ORICA GREENEDGE
 +</code>
 +
 +Каждый участник однозначно идентифицируется по своему имени, а команда по названию (т.е. дубликатов нет)
 +
 +Файл 2. tdf14_stage.txt
 +
 +В нем перечислены этапы гонки в виде:
 +
 +<code>
 +номер_этапа дата место_отправления место_прибытия дистанция
 +</code>
 +
 +Например
 +
 +<code>
 +1 05/07/14 Leeds Harrogate 190
 +</code>
 +
 +Файл 3. tdf14_ranks.txt
 +
 +В этом файле содержатся рейтинги участников на разных этапах. Каждая строка содержит следующее:
 +
 +<code>
 +Номер_этапа место_участника номер_участника время_участника
 +</code>
 +
 +Участники, сошедшие с дистанции во время этапа с номером i, где (1 ≤ i ≤ 21) исключены из рейтингов для всех последующих этапов.
 +
 +Класс-обертка для чтения из файла прилагается.
 +
 +<code java>
 +import java.io.*;
 +
 +public class ReadData {
 + private BufferedReader reader; // читатель из файла
 +
 + /**
 + * Конструктор.
 + */
 + public ReadData() {
 + reader = null;
 + }
 +
 + /**
 + * открывает текстовый файл
 + * @param fileName имя файла
 + * @return true если открыли успешно, false иначе.
 + */
 + public boolean open(String fileName) {
 + try {
 + FileReader fr = new FileReader(fileName);
 + reader = new BufferedReader(fr);
 + return true;
 + }
 + catch(IOException ex) {
 + return false;
 + }
 + }
 +
 + /**
 + * Читает строку из файла, открытого методом open()
 + * @return прочитанная строка или null, если прочитать не удалось
 + */
 + public String readLine() {
 + try {
 + return reader.readLine();
 + }
 + catch(IOException ex) {
 + return null;
 + }
 + }
 +
 + /**
 + * Закрывает файл
 + */
 + public void close() {
 + if (reader != null) {
 + try {
 + reader.close();
 + }
 + catch(IOException ex) {
 + }
 + }
 + }
 +}
 +
 +</code>
 +
 +Работа делится на две части. Первая заключается в создании системы классов и объектов для представления данных и начальном заполнении их информацией из файла. Вторая в статистической обработке данных.
 +
 +Часть 1.
 +
 +Наша задача состоит в обработке файла tdf14_teams.txt. Для этого требуется создать следующие 4 класса.
 +
 +1. Racer. У нашего участника есть имя, фамилия, национальность, год рождения и номер участия. В классе должны быть необходимые геттеры и сеттеры, а так же метод int age(int year), который позволяет вычислить возраст участника, год передается в качестве параметра (например 2014)
 +2. Team. Команда имеет название и список участников. Должны быть реализованы следующие методы:
 +- Team(String name) конструктор, который принимает в качестве аргумента название команды. Список гонщиков инициализируется пустным списком
 +- void insert(Racer racer) добавляет гонщика в команду
 +- String getName() геттер для названия команды
 +- int numberOfRacers() возвращает количество гонщиков в команде
 +- Racer getRacers(int i) возвращает гонщика по номеру. Нумерация идет с нуля.
 +- int totalAge(int year) возвращает суммарный возраст участников. Год передается в качестве параметра.
 +3. TeamsList. Класс для списка команд. Должны быть реализованы следующие методы:
 +- TeamsList() конструктор, инициализирующий список команд пустым списком.
 +- void insert(Team team) добавляет команду в общий список.
 +- Team getTeam(String teamName) возвращает команду по ее названию. Если такой команды не найдено, должен возвращаться null.
 +- int numberOfTeams() возвращает количество команд
 +- Team getTeam(int i) возвращает i-ю команду. Нумерация с нуля.
 +4. TourDeFrance главный класс программы, содержащий метод main. В этом классе должны выполнятся вызовы методов для чтения данных о велосипедистах, создаваться необходимые объекты (участники, команды, список команд), показываться информация о командах и их участниках. После чтения данных и заполнения объектов нужно ответить на вопрос: каков средний возраст участников Тур де Франс 2014. Ответ округлить до двух знаков после запятой. Набросок для этого класса приведен далее.
 +
 +<code java>
 +
 +</code>