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

Различия

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

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

Следующая версия
Предыдущая версия
java:vtoroj_semestr [19/01/2015 09:24] – создано ybezrukovjava:vtoroj_semestr [09/02/2015 12:20] (текущий) ybezrukov
Строка 2: Строка 2:
  
  
-===== Задание 1. Тур де Франс =====+===== Тур де Франс =====
  
 Наша задача состоит в том, чтобы написать красивую объектно-ориентированную программу, которая будет заниматься обработкой данных результатов велогонки Тур де Франс. Данные гонки хранятся в трех текстовых файлах. Наша задача состоит в том, чтобы написать красивую объектно-ориентированную программу, которая будет заниматься обработкой данных результатов велогонки Тур де Франс. Данные гонки хранятся в трех текстовых файлах.
  
-Файл 1tdf14_teams.txt+  * {{:java:tdf14_ranks.txt|}} 
 +  * {{:java:tdf14_stages.txt|}} 
 +  * {{:java:tdf14_teams.txt|}} 
 + 
 +**Файл 1** tdf14_teams.txt
  
 В нем перечислены участники и команды. В каждой строке файла хранится запись вида: В нем перечислены участники и команды. В каждой строке файла хранится запись вида:
Строка 22: Строка 26:
 Каждый участник однозначно идентифицируется по своему имени, а команда по названию (т.е. дубликатов нет) Каждый участник однозначно идентифицируется по своему имени, а команда по названию (т.е. дубликатов нет)
  
-Файл 2. tdf14_stage.txt+**Файл 2** tdf14_stages.txt
  
 В нем перечислены этапы гонки в виде: В нем перечислены этапы гонки в виде:
Строка 36: Строка 40:
 </code> </code>
  
-Файл 3tdf14_ranks.txt+**Файл 3** tdf14_ranks.txt
  
 В этом файле содержатся рейтинги участников на разных этапах. Каждая строка содержит следующее: В этом файле содержатся рейтинги участников на разных этапах. Каждая строка содержит следующее:
Строка 45: Строка 49:
  
 Участники, сошедшие с дистанции во время этапа с номером i, где (1 ≤ i ≤ 21) исключены из рейтингов для всех последующих этапов. Участники, сошедшие с дистанции во время этапа с номером i, где (1 ≤ i ≤ 21) исключены из рейтингов для всех последующих этапов.
 +
 +Пример строки
 +
 +<code>
 +1 198 76 04:58:16
 +</code>
  
 Класс-обертка для чтения из файла прилагается. Класс-обертка для чтения из файла прилагается.
Строка 108: Строка 118:
 Работа делится на две части. Первая заключается в создании системы классов и объектов для представления данных и начальном заполнении их информацией из файла. Вторая в статистической обработке данных. Работа делится на две части. Первая заключается в создании системы классов и объектов для представления данных и начальном заполнении их информацией из файла. Вторая в статистической обработке данных.
  
-Часть 1.+==== Часть 1 ==== 
  
 Наша задача состоит в обработке файла tdf14_teams.txt. Для этого требуется создать следующие 4 класса. Наша задача состоит в обработке файла tdf14_teams.txt. Для этого требуется создать следующие 4 класса.
  
-1. RacerУ нашего участника есть имя, фамилия, национальность, год рождения и номер участия. В классе должны быть необходимые геттеры и сеттеры, а так же метод int age(int year), который позволяет вычислить возраст участника, год передается в качестве параметра (например 2014) +  * **Racer** У нашего участника есть имя, фамилия, национальность, год рождения и номер участия. В классе должны быть необходимые геттеры и сеттеры, а так же метод int age(int year), который позволяет вычислить возраст участника, год передается в качестве параметра (например 2014) 
-2Team. Команда имеет название и список участников. Должны быть реализованы следующие методы: +<code java> 
-Team(String name) конструктор, который принимает в качестве аргумента название команды. Список гонщиков инициализируется пустным списком +public class Racer { 
-void insert(Racer racer) добавляет гонщика в команду + String name; 
-String getName() геттер для названия команды + String surname; 
-int numberOfRacers() возвращает количество гонщиков в команде + String nationality; 
-Racer getRacers(int i) возвращает гонщика по номеру. Нумерация идет с нуля. + int yearOfBirth; 
-int totalAge(int year) возвращает суммарный возраст участников. Год передается в качестве параметра. + int number; 
-3TeamsList. Класс для списка команд. Должны быть реализованы следующие методы: + 
-TeamsList() конструктор, инициализирующий список команд пустым списком. + public int getNumber() { 
-void insert(Team team) добавляет команду в общий список. + return number; 
-Team getTeam(String teamName) возвращает команду по ее названию. Если такой команды не найдено, должен возвращаться null. +
-int numberOfTeams() возвращает количество команд + 
-Team getTeam(int i) возвращает i-ю команду. Нумерация с нуля. + public void setNumber(int number) { 
-4. TourDeFrance главный класс программы, содержащий метод main. В этом классе должны выполнятся вызовы методов для чтения данных о велосипедистах, создаваться необходимые объекты (участники, команды, список команд), показываться информация о командах и их участниках. После чтения данных и заполнения объектов нужно ответить на вопрос: каков средний возраст участников Тур де Франс 2014. Ответ округлить до двух знаков после запятой. Набросок для этого класса приведен далее.+ this.number = number; 
 +
 + 
 + public int getYearOfBirth() { 
 + return yearOfBirth; 
 +
 + 
 + public void setYearOfBirth(int year) { 
 + this.yearOfBirth = year; 
 +
 + 
 + public String getName() { 
 + return name; 
 +
 + 
 + public void setName(String name) { 
 + this.name = name; 
 +
 + 
 + public String getSurname() { 
 + return this.suername; 
 +
 + 
 + public void setSurname(String surname) { 
 + this.surname = surname; 
 +
 + 
 + public String getNationality() { 
 + return this.nationality; 
 +
 + 
 + public void setNationality(String nationality) { 
 + this.nationality = nationality; 
 +
 + 
 + public int age(int year) { 
 + return year - yearOfBirth; 
 +
 +}  
 +</code> 
 +  * **Team** Команда имеет название и список участников. Должны быть реализованы следующие методы: 
 +    Team(String name) конструктор, который принимает в качестве аргумента название команды. Список гонщиков инициализируется пустным списком 
 +    void insert(Racer racer) добавляет гонщика в команду 
 +    String getName() геттер для названия команды 
 +    int numberOfRacers() возвращает количество гонщиков в команде 
 +    Racer getRacers(int i) возвращает гонщика по номеру. Нумерация идет с нуля. 
 +    int totalAge(int year) возвращает суммарный возраст участников. Год передается в качестве параметра. 
 +<code java> 
 +public class Team { 
 + String name; 
 + ArrayList<Racer> racers; 
 + 
 + public Team(String name) { 
 + this.name = name; 
 + racers = new ArrayList<Racer>(); 
 +
 + 
 + public void insert(Racer racer) { 
 + racers.add(racer); 
 +
 + 
 + public String getName() { 
 + return this.name; 
 +
 + 
 + public int numberOfRacers() { 
 + return racers.size(); 
 +
 + 
 + public Racer getRacers(int i) {  
 + return racers.get(i); 
 +
 + 
 + public int totalAge(int year) { 
 + int sum = 0; 
 + for(Racer racer : racers) { 
 + sum = sum + racer.totalAge(year); 
 +
 + return sum; 
 +
 +
 +</code> 
 +  * **TeamsList** Класс для списка команд. Должны быть реализованы следующие методы: 
 +    TeamsList() конструктор, инициализирующий список команд пустым списком. 
 +    void insert(Team team) добавляет команду в общий список. 
 +    Team getTeam(String teamName) возвращает команду по ее названию. Если такой команды не найдено, должен возвращаться null. 
 +    int numberOfTeams() возвращает количество команд 
 +    Team getTeam(int i) возвращает i-ю команду. Нумерация с нуля. 
 +  * **TourDeFrance** главный класс программы, содержащий метод main. В этом классе должны выполнятся вызовы методов для чтения данных о велосипедистах, создаваться необходимые объекты (участники, команды, список команд), показываться информация о командах и их участниках. После чтения данных и заполнения объектов нужно ответить на вопрос: каков средний возраст участников Тур де Франс 2014. Ответ округлить до двух знаков после запятой. Набросок для этого класса приведен далее.
  
 <code java> <code java>
Строка 136: Строка 235:
  * @param teamsList список команд, который заполняется на основании строки из файла  * @param teamsList список команд, который заполняется на основании строки из файла
  */  */
- public static void parceTeamLine(String line, ListeEquipe teamsList) {+ public static void parceTeamLine(String line, TeamsList teamsList) {
  // Элементы в строках нашего файла разделени знаками табуляции, их мы  // Элементы в строках нашего файла разделени знаками табуляции, их мы
  // и будем использовать чтобы отличить один элемет от другого.   // и будем использовать чтобы отличить один элемет от другого. 
Строка 162: Строка 261:
  *    В противном случае возвращается false  *    В противном случае возвращается false
  */  */
- public static boolean createTeams(String fileName, ListeEquipe teamsList) {+ public static boolean createTeams(String fileName, TeamsList teamsList) {
  // Объект, связанный с файлом, откуда мы будем построчно читать данные  // Объект, связанный с файлом, откуда мы будем построчно читать данные
  ReadData reader = new ReadData();  ReadData reader = new ReadData();
Строка 205: Строка 304:
  
 </code> </code>
 +
 +==== Часть 2 ====
 +
 +Задача – это обработать файлы  tdf14_stages.txt and tdf14_ranks.txt чтобы ответить на различные вопросы, к примеру:
 +  - Какова общая дистанция, которую проехали гонщики? А средняя?
 +  - Найти самый длинный и самый короткий этапы
 +  - Кто выиграл этап, который начинается в городе Mulhouse? Кто выиграл этап, который заканчивается в городе Risoul? Кто выиграл этап 14 июля?
 +  - Какова тройка победителей 2014 года? Какова общая таблица зачета?
 +  - Какое общее время потребовалось участникам команды FDJ.FR на завершение гонки? И какое общее время, для 3 лучших каждого этапа?
 +  - Кто из участников по своей воле сошел с дистанции и на каких этапах?
 +  - На каких этапах среднее время участников, которые не сошли с дистанции, было самым малым?
 +  - Кто из участников набрал наибольшую среднюю скорость на том или ином этапе, и на каком этапе?
 +  - В какой команде участники двигаются с одинаковой скоростью (т.е. время на этап примерно одинаковое)? Каков разрыв  между самым слабым и самым сильными гонщиками команд?
 +