Построение таблицы процентов голосов, отданных различным командам, претендентам на первое место, последнее место и на первую тройку (Лабораторная работа № 5)

Страницы работы

Содержание работы

Министерство образования и науки РФ.

Новосибирский государственный технический университет.

Кафедра прикладной математики.

Лабораторная работа №5

По дисциплине: Структуры данных и алгоритмы.

Факультет: ПМИ

Группа: ПМИ-51

Студент: Руфанова Александра

Преподаватель: Еланцева Ирина Леонидовна

Новосибирск 2006г

1.Условие задачи.

В спортивных соревнованиях участвуют n команд. В файле SPORT содержатся прогнозы результатов соревнований. Каждый прогноз включает номер команды, занявшей первое место, номер команды, занявшей последнее место, номера команд, входящих в первую тройку сильнейших команд. Построить таблицу, содержащую проценты голосов, отданных командам - претендентам на первое место, командам - претендентам на последнее место и проценты голосов, отданных командам - претендентам на первую тройку. Организовать таблицу как таблицу с вычисляемым входом.

2.Анализ задачи

Дано:  Прогнозы, см. тесты и условие задачи

Результат: таблица процентов голосов, отданных различным командам, претендентам  на первое место последнее место и на первую тройку.

Метод решения:

    Таблица – это список, состоящий из конечного множества элементов,  при чем каждый элемент характеризуется рядом признаков (свойств). Один из признаков, называемый ключом, позволяет отличить один элемент от другого (идентифицировать элемент). В данной задаче удобно использовать в качестве ключа номер команды,  в качестве однозначной хеш-функции  возьмем                 Ф=(номер команды – 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;        // количество прогнозов

};

4. Алгоритм

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;

Похожие материалы

Информация о работе