Консультация № 172760
30.09.2009, 11:46
25.00 руб.
0 3 1
Здравствуйте Уважаемые Эксперты!Ни раз вы меня выручали,надеюсь,что и теперь сможете мне помочь.
Просьба написать программу в С++Builder 6(или другой версии,но компиляция и запуск кода будут происходить именно в этой среде) со следующими функциями: определение текущего рейтинга спортивных команд по орграфу*(ориентированный граф,не в обиду вашим умам,но малоли подзабыли) побед и поражений. Разработать алгоритм, в кратце пожалуйста.

Собственно на что будет ориентирована программа:проводятся командные соревнования некоторой спортивной лиги. Разработать и реализовать программу, которая принимает в качестве ввода исход очередной игры (пара «команда-победитель» – «проигравшая ко-манда»), строит орграф* побед и поражений (вершинами являются команды) и по графу определяет текущий рейтинг команд.
Взаранее примнога благодарен!

Обсуждение

давно
Старший Модератор
17042
808
04.10.2009, 19:15
общий
это ответ
Здравствуйте, Масленников Александр!
Программа написана в RAD Borland C++ Builder 6 по алгоритму, предложенному экспертом
Гордиенко Андрей Владимирович.
Логика работы программы строится из того, что способом представления графа в информатике является матрица смежности, графически представляемая таблицей, где как столбцы, так и строки соответствуют вершинам графа. В качестве интерфейсного отображения матрицы в программе используется объект RatingTable класса TStringGrid.
В каждой ячейке этой таблицы (матрицы) записывается число, определяющее наличие связи от вершины-строки к вершине-столбцу (либо наоборот).
Числом, кодирующим победу, является 1, числом, кодирующим поражение либо отсутствие игры - 0. Подсчёт числа рёбер, исходящих из данной вершины, и сравнение их для всех вершин, формирует рейтинг команд. Большему числу исходящих рёбер соответствует большее количество побед и, соответственно, более высокий рейтинг...
Подробнее см. в приложении (код комментирован).
Архив ZIP, содержащий проект Borland C++ Builder 6 и исполняемый файл программы, прикреплён к ответу.
Удачи!

Приложение:
// Файл MainUnit.h

//---------------------------------------------------------------------------

#ifndef MainUnitH
#define MainUnitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Grids.hpp>
//---------------------------------------------------------------------------
class TMainForm : public TForm
{
__published: // IDE-managed Components
TStringGrid *RatingTable;
TButton *EditButton;
TButton *FinishButton;
void __fastcall FormActivate(TObject *Sender);
void __fastcall EditButtonClick(TObject *Sender);
void __fastcall FinishButtonClick(TObject *Sender);
private:
void ProcessRow(int);
public: // User declarations
__fastcall TMainForm(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//---------------------------------------------------------------------------
#endif

// Файл MainUnit.cpp

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "MainUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormActivate(TObject *Sender)
{
// Заголовки колонок таблицы
RatingTable->Cells[1][0] = "Команда 1";
RatingTable->Cells[2][0] = "Команда 2";
RatingTable->Cells[3][0] = "Команда 3";
RatingTable->Cells[4][0] = "Команда 4";
RatingTable->Cells[5][0] = "Рейтинг";

// Заголовки строк таблицы
RatingTable->Cells[0][1] = "Команда 1";
RatingTable->Cells[0][2] = "Команда 2";
RatingTable->Cells[0][3] = "Команда 3";
RatingTable->Cells[0][4] = "Команда 4";

// Заполняем ячейки таблицы нулями
for(int i = 1; i <= 5; i++)
{
for(int j = 1; j <= 4; j++)
{
RatingTable->Cells[i][j] = "0";
}
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::EditButtonClick(TObject *Sender)
{
RatingTable->Enabled = true; // Таблица готова к редактированию.
EditButton->Enabled = false;
FinishButton->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FinishButtonClick(TObject *Sender)
{
for(int i = 1; i <= 4; i++) // Проходим по ячейкам таблицы
{
for(int j = 1; j <= 4; j++)
{
if(RatingTable->Cells[i][j] != "0") // Проверка правильности пользовательского ввода.
{
if(RatingTable->Cells[i][j] != "1")
{
MessageBox(0, "Вводимое значение должно быть 0 или 1!", "Ошибка ввода", MB_ICONWARNING | MB_OK);
RatingTable->Cells[i][j] = 0;
return;
}
}
if(i == j) // Команда сама с собой не играет... ;)
{
RatingTable->Cells[i][j] = 0;
}
}
}

for(int i = 1; i <= 4; i++)
{
this->ProcessRow(i); // Обработка каждого из рядов таблицы с подсчётом рейтинга
}

RatingTable->Enabled = false; // Ввод данных завершён.
MessageBox(0, "Ввод данных завершён", "Рейтинг", MB_ICONINFORMATION | MB_OK);
FinishButton->Enabled = false;
EditButton->Enabled = true;
}
//---------------------------------------------------------------------------
void TMainForm::ProcessRow(int iRowNumber)
{
int iSum = 0; // Сумма ориентированных рёбер, т.е. рейтинг
for(int i = 1; i <= 4; i++)
{
iSum += StrToInt(RatingTable->Cells[i][iRowNumber]);
}
RatingTable->Cells[5][iRowNumber] = IntToStr(iSum); // Выводим значение суммы.
}
//---------------------------------------------------------------------------
Прикрепленные файлы:
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
06.10.2009, 10:03
общий
Уважаемый Андрей Владимирович!Огромное вам спасибо!Произошло маленькое недоразумение по моей глупости или из-за настроек профиля и я не получал уведомление на эмейл о ответе,поэтому и продолжал спамить вопросы))Не знаю как выразить маленькое материальное спасибо Андрею Владимировичу,поэтому отправлю его вам)
давно
Старший Модератор
17042
808
06.10.2009, 10:29
общий
Отправил Андрею Владимировичу Ваше материальное "спасибо", ну и устный привет передам...
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Форма ответа