Казанский (приволжский) федеральный университет Институт вычислительной математики и информационных технологий* |
Отчет по семестровому заданию №1 |
По Структуре Данных |
|
Выполнил студент 3-го курса: Камалов А.Н. |
Проверил: Салимов Ф.И. |
|
Казань 2012 |
Оглавлени
Постановка задачи 2
Обоснование СД 3
Структура проекта и его описание 4
Листинг 6
Постановка задачи 2
Обоснование СД 3
Структура проекта и его описание 4
Листинг 6
Постановка задачи
Вариант 17
По результатам каждого тура футбольные клубы выстраиваются по количеству набранных очков. Составить следующие процедуры:
кодирования: создание списка по очковым показателям после некоторого тура
декодирования: вывод значений элементов списка в текстовый файл, с освобождением выделенной динамической памяти;
вставки элемента в список: изменения списка по результатам очередного тура;
Формирование нового списка по количеству забитых мячей
Нахождения клуба с наименьшим числом ничьих и наибольшей разницей забитых и пропущенных мячей
Слияния двух упорядоченных списков
Обоснование сд
Для реализации этой задачи я использовал массив данных, функции чтения из текстового файла и записи в массив, запись данных из массива в таблицу и текстовый файл, сортировки массива по количеству очков и забитых мячей, поиск команды с наименьшим количеством ничьей и наибольшей разницей забитых и пропущенный мячей, а также функцию изменения данных таблицы после игрового тура. Память для массива будет выделена для 30 команд. Лучшим вариантом для этой задачи были бы двусвязные списки, так как они не рассчитаны на определенное количество команд, и в такой список легко заносить новые команды, но в моем случае я все же остановился на массивах, т.к. количество команд, заданных в начале, достаточно для лиги, и мы не страдаем с ограниченной памятью.
Структура проекта и его описание
Проект состоит из одного .h файла (League.h) и одного .cpp файла (Unit1.cpp).
Описание League.h файла:
В данном классе не содержатся приватные переменные, т.к. мы будем изменять их в процессе реализации программы, а приватные переменные не позволят нам это сделать.
class league {
public:
char t[30]; //team - команда
int p; //play – кол-во игр
int w; //win – кол-во побед
int d; //draw - ничьи
int l; //lose - поражения
int pts; //points – кол-во очков
int gf; //goal for – забитые мячи
int ga; //goal against – пропущенные мячи
int gd; //goal different – разница забитых и пропущенных мячей
void read_table (league*,int &n, ifstream&);
- Чтение из текстового файла и запись в массив. Эта будет наша основная функция, т.к. после каждого изменения в таблице, мы будем записывать все в файл.
void write_table (league*, int);
- Эта функция будет осуществлять запись из массива в текстовый файл, из которого будет считываться наша таблица.
void write_table_to_file (league*, int, ofstream&);
- Запись таблицы в текстовый файл в виде таблицы.
void sorting_pts (league*, int);
- Сортировка таблицы по очкам
void sorting_gf (league*, int);
- Сортировка таблицы по кол-ву забитых мячей
void find_team (league*, char*, char*, int);
- Поиск команд по наименьшему кол-ву ничьей и наибольшей разнице забитых и пропущенных мячей
void round_result (league*,league, league, int);
- Осуществляет изменение в таблице. В функцию задаются массив лиги и 2 команды с счетом. В функции производится нахождение этих команд в лиге, вычисляется результат матча, т.е. кто выиграл, кто проиграл или сыграли вничью, а также осуществляется запись результата в таблицу.
};
Описание модуля Unit1.cpp:
Этот модуль содержит средства IDE C++ Builder для работы с инструментарием текущей задачи. А именно элементы типа TForm, TButton, TEdit, TLabel, TMemo, TStringGrid.
Работа с Form1:
Для начала работы необходимо нажать на кнопку «Обновить таблицу». Она осуществляет чтение из текстового файла и записи в массив, создает «шапку» таблицы и заносит данные из массива в TStringGrid. По умолчанию будут даны 4 команды и нулевыми значениями игр, очков, разницей ЗМ и ПМ и т.д. Эти данные вы можете изменить изначально в текстовом файле “in.txt”.
Далее вы можете делать все, что хотите. Для того, чтобы занести результат игры в таблицу, необходимо записать название сыгравших команд в поле «Команда 1» и «Команда 2», а также их счет в поля между командами. После записи нажмите «Добавить результат» и «Обновить таблицу». Результат автоматически занесется в таблицу.
Также вы можете сортировать лигу по очкам и по кол-ву забитых мячей. Для этого нажмите на соответствующие кнопки «Сортировать по очкам» или «Сортировать по GF» (GF – забитые мячи) и обновите таблицу.
Если вам необходимо найти команду с наименьшим кол-вом ничьей или наибольшим GD (GD – разница забитых и пропущенных мячей), то нажмите на кнопку «Поиск команд». В поле слева будут показаны соответствующие команды. Для слияния двух списков нажмите на кнопку «Слияние двух списков», и в текстовом окне справа будут написаны две команды, которые были найдены кнопкой «Поиск команд».
Для записи таблицы в файл нажмите кнопку «Запись в документ». Запись осуществится в текстовый файл с именем “out.txt”.