Министерство образования и науки РФ.
Новосибирский государственный технический университет.
Кафедра прикладной математики.
Лабораторная работа №5
По дисциплине: Структуры данных и алгоритмы.
Факультет: ПМИ
Группа: ПМИ-51
Студент: Руфанова Александра
Преподаватель: Еланцева Ирина Леонидовна
Новосибирск 2006г
1.Условие задачи.
В спортивных соревнованиях участвуют n команд. В файле SPORT содержатся прогнозы результатов соревнований. Каждый прогноз включает номер команды, занявшей первое место, номер команды, занявшей последнее место, номера команд, входящих в первую тройку сильнейших команд. Построить таблицу, содержащую проценты голосов, отданных командам - претендентам на первое место, командам - претендентам на последнее место и проценты голосов, отданных командам - претендентам на первую тройку. Организовать таблицу как таблицу с вычисляемым входом.
Дано: Прогнозы, см. тесты и условие задачи
Результат: таблица процентов голосов, отданных различным командам, претендентам на первое место последнее место и на первую тройку.
Метод решения:
Таблица – это список, состоящий из конечного множества элементов, при чем каждый элемент характеризуется рядом признаков (свойств). Один из признаков, называемый ключом, позволяет отличить один элемент от другого (идентифицировать элемент). В данной задаче удобно использовать в качестве ключа номер команды, в качестве однозначной хеш-функции возьмем Ф=(номер команды – 1), при такой функции не возникнет коллизий.
При чтении прогноза будем учитывать, что прогноз содержит 5 номеров команд.
Заполним таблицу нулями
При k=0;
Пока k<N
{ процент голосов за первое место [k]=0;
процент голосов за последнее место [k]=0;
процент голосов за тройку лидеров[k]=0;
k=k+1;
}
Пока не конец файла {
Прочитать номер команды num
table.prognoz[num-1].first=table.prognoz[num-1].first+1;
Прочитать номер команды num
table.prognoz[num-1].last=table.prognoz[num-1].last+1
Прочитать номер команды num
table.prognoz[num-1].three=table.prognoz[num-1].three+1;
Прочитать номер команды num
table.prognoz[num-1].three=table.prognoz[num-1].three+1;
Прочитать номер команды num
table.prognoz[num-1].three=table.prognoz[num-1].three+1;
}
Затем каждый элемент таблицы умножим на 100% и разделим на количество прогнозов. При чтении из файла номера команды, будем проверять не превосходит ли он размер таблицы, если такой номер команды существует, мы продолжаем заполнение таблицы на рассчитанные номера(от 1 до N)
]3. Структуры данных
struct Prognoz {
float first; // процент голосов на первое место
float last; // процент на последнее место
float three; // процент на вхождение в тройку
int name; // номер команды
};
struct Ptable { //структура таблица
Prognoz prognoz[N];
int n; // количество прогнозов
};
5. Текст программы
#include<conio.h>
#include<stdio.h>
#include<math.h>
#define N 20
struct Prognoz { float first; //определение структур
float last;
float three;
int name; };
struct Ptable { Prognoz prognoz[N]; //определение структуры таблица
int n; }; //фактическое количество
void move(Ptable & table,int i,int j) //функция перестановки 2элементов в таблице
{ float p; //р присваивается э-т талбицы
int k; //к – таже херня
p=table.prognoz[j].first;
table.prognoz[j].first=table.prognoz[i].first;
table.prognoz[i].first=p;
p=table.prognoz[j].last;
table.prognoz[j].last=table.prognoz[i].last;
table.prognoz[i].last=p;
p=table.prognoz[j].three;
table.prognoz[j].three=table.prognoz[i].three;
table.prognoz[i].three=p;
k=table.prognoz[j].name;
table.prognoz[j].name=table.prognoz[i].name;
table.prognoz[i].name=k;
}
void main() //начало главной ф-ции
{ int num,k=0,t,max,mid,j; //num-число, котрое считываем из файла, номер комрады; мах – максимаьное количество баллов на данном этапе;
mid-промежуточное значение, сравниваемое с min
float i=0; //и-счётчик количества элементов
Ptable table; //определение талбицы
FILE *f,*f1; // определение потокв (далее идёт ссылка на поток)
f=fopen("d:\SPORT.txt","r"); f1=fopen("d:\RESULT.txt","w"); //открываем файлы
for ( k=0; k<N ; k++) //обнуляем таблицу результатов
{ table.prognoz[k].first=0;
table.prognoz[k].last=0;
table.prognoz[k].three=0;
table.prognoz[k].name=k+1;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.