Здравствуйте, Масленников Александр!
Программа написана в 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); // Выводим значение суммы.
}
//---------------------------------------------------------------------------