Programa Gerador de Tabelas Esportivas: mudanças entre as edições
De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
(7 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 22: | Linha 22: | ||
===Download do programa=== | ===Download do programa=== | ||
O software foi desenvolvido em '''linguagem C''' | O software foi desenvolvido em '''linguagem C'''. | ||
gcc | |||
O '''código fonte''' do programa está organizado em três arquivos, disponibilizados abaixo: | |||
GeradorTebelas.c | |||
- | Copa.c | ||
MataMata.c''' | |||
Para gerar o '''programa executável''', os arquivos fonte devem ser compilados com o comando: | |||
gcc GeradorTabelas.c Copa.c MataMata.c -o GeradorTabelas | |||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
//Arquivo GeradorTabelas.c | |||
//Programa Gerador de Tabelas Esportivas | //Programa Gerador de Tabelas Esportivas | ||
//Desenvolvido por Evandro Cantú | //Desenvolvido por Evandro Cantú | ||
//Instituto Federal do Paraná | //Instituto Federal do Paraná | ||
//Foz do Iguaçu, outubro 2016 | //Foz do Iguaçu, outubro 2016 | ||
//Contato: evandro.cantu@ifpr.edu.br | |||
//Atualização: jun/2017 | //Atualização: jun/2017 | ||
Linha 39: | Linha 45: | ||
#include <string.h> | #include <string.h> | ||
#include <time.h> | #include <time.h> | ||
char tabela[] = "Tabelas.txt"; | |||
FILE *arq; | |||
//matamata: Função para determinar as partidas de uma eliminatória simples. | |||
// Recebe como parâmetro o número de jogadores e | |||
// o vetor com os jogadores | |||
void matamata (int n, char jogadores[32][20]); | |||
//Protótipo: Arquivo fonte MataMata.c | |||
//copa: Função organizar a competição em grupos. | |||
// Recebe como parâmetros o número de grupos (g), número de | |||
// jogadores (n), número de classificados por grupo (nc) e | |||
// o vetor com os jogadores. | |||
void copa (int r, int g, int n, int nc, char jogadores[80][20]); | |||
//Protótipo: Arquivo fonte Copa.c | |||
//rodizio: Função para determinar as partidas de um rodízio simples, | //rodizio: Função para determinar as partidas de um rodízio simples, | ||
Linha 44: | Linha 66: | ||
// Recebe como parâmetro o número de jogadores e | // Recebe como parâmetro o número de jogadores e | ||
// o vetor com os jogadores | // o vetor com os jogadores | ||
void rodizio (int n, char jogadores[ | void rodizio (int n, char jogadores[80][20]) | ||
{ | |||
int c = 0; | |||
int i, j, k; | |||
char ultimoJogador[20] = {""}; | |||
//SE número impar de jogadores ENTÃO adiciona um jogador vazio | |||
if (n % 2 == 1) { | |||
strcpy(jogadores[n], ultimoJogador); | |||
n = n + 1; | |||
} | |||
arq = fopen(tabela, "a"); | |||
fprintf(arq, "\nPARTIDAS \nDO RODÍZIO: \n\n"); | |||
for (k=0;k<n-1;k++) | |||
{ | |||
fprintf(arq, "%sRodada: %2d\n", "",k+1); | |||
for (i=0;i<n/2;i++) | |||
if ((strcmp(jogadores[i], "") != 0) && (strcmp(jogadores[n-1-i], "") != 0)) | |||
fprintf(arq, "%2d: %20s _ x _ %-20s\n", ++c, jogadores[i], jogadores[n-1-i]); | |||
//Rotaciona vetor de jogadores, menos primeira posição | |||
strcpy(ultimoJogador, jogadores[n-1]); | |||
for (j=n-1;j>0;j--) | |||
strcpy(jogadores[j], jogadores[j-1]); | |||
strcpy(jogadores[1], ultimoJogador); | |||
} | |||
fclose(arq); | |||
} | |||
//Ref: https://pt.wikipedia.org/wiki/Competições_de_todos_contra_todos | |||
/* FUNÇÃO ANTERIOR SEM ORGANIZAR RODADAS | |||
void rodizio (int n, char jogadores[80][20]) | |||
{ | { | ||
int c = 0; | int c = 0; | ||
int i, j; | int i, j; | ||
Linha 57: | Linha 106: | ||
fclose(arq); | fclose(arq); | ||
} | } | ||
*/ | |||
/ | |||
//embaralhar: Função para embaralhar um vetor. | //embaralhar: Função para embaralhar um vetor. | ||
// Recebe como parâmetro o vetor com os jogadores | // Recebe como parâmetro o vetor com os jogadores | ||
// a serem embaralhados e o tamanho do vetor. | // a serem embaralhados e o tamanho do vetor. | ||
void embaralhar(char vetor[ | void embaralhar(char vetor[80][20], int tamVetor) | ||
{ | { | ||
int i; | int i; | ||
Linha 79: | Linha 124: | ||
} | } | ||
} | } | ||
int main(int argc, char *argv[]) | |||
//Arquivo com jogadores pode ser fornecido como parâmetro | |||
{ | |||
char jogador[20]; | |||
char jogadores[80][20]; | |||
int n = 0; //número de jogadores cadastrados | |||
int g = 0; //número de grupos | |||
int nc = 2; //Número de classificados por GRUPO | |||
int r; //Número de jogadores incluídos pelo RANKING nos GRUPOS | |||
int i; | |||
char resposta; | |||
int tam; | |||
char arquivo[20]; | |||
if (argc == 1) | |||
{ | |||
printf("\nCADASTRO DE JOGADORES\n"); | |||
printf("\nEntre com NOME DO ARQUIVO com os jogadores:\n"); | |||
fgets(arquivo, sizeof(arquivo), stdin); | |||
tam = strlen(arquivo); | |||
if (arquivo[tam - 1] == '\n') | |||
arquivo[tam - 1] = '\0'; | |||
} | |||
else | |||
{ | |||
strcpy (arquivo, argv[1]); | |||
} | |||
FILE *arq; | |||
arq = fopen(arquivo, "r"); | |||
if(arq == NULL) { | |||
printf("\nNao foi possivel abrir o arquivo!\n"); | |||
printf("\nConfira se o nome do arquivo está correto, incluindo a extensão txt.\n"); | |||
return(1);} | |||
else | |||
//Monta vetor com os jogadores | |||
while( (fscanf(arq,"%s\n", jogador))!=EOF ) | |||
{ | |||
strcpy(jogadores[n], jogador); | |||
n++; | |||
} | |||
fclose(arq); | |||
arq = fopen(tabela, "w"); | |||
fprintf(arq, "\n+----------------------------------------------------+\n"); | |||
fprintf(arq, "\n PROGRAMA GERADOR DE TABELAS ESPORTIVAS\n"); | |||
fprintf(arq, "\n+----------------------------------------------------+\n"); | |||
fprintf(arq, "\n Evento: _________________________________________\n"); | |||
fprintf(arq, "\n Local: _________________________________________\n"); | |||
fprintf(arq, "\n Data: _________________________________________\n"); | |||
fprintf(arq, "\n+----------------------------------------------------+\n"); | |||
//Data e hora do sistema | |||
time_t mytime; | |||
mytime = time(NULL); | |||
struct tm tm = *localtime(&mytime); | |||
fprintf(arq, "\n Geração das Tabelas: %d/%d/%d - %d:%d\n", | |||
tm.tm_mday, tm.tm_mon + 1, tm.tm_year + 1900, tm.tm_hour, tm.tm_min); | |||
fprintf(arq, "\n+----------------------------------------------------+\n"); | |||
//Imprime jogadores cadastrados | |||
fprintf(arq, "\nJOGADORES CADASTRADOS:\n"); | |||
for (i=0; i<n; i++) | |||
{ | |||
printf("%2d: %-20s\n", i + 1, jogadores[i]); | |||
fprintf(arq, "%2d: %-20s\n", i + 1, jogadores[i]); | |||
} | |||
fclose(arq); | |||
//Pergunta sobre formato da competição | |||
do | |||
{ | |||
printf("\nESCOHA FORMATO DA COMPETIÇÃO: \n"); | |||
if (n >= 4 && n <= 80) | |||
printf(" (C) Copa: Grupos + Fase Final\n"); | |||
printf(" (R) Rodízio simples\n"); | |||
if (n <= 16 || n == 24 || n == 32) | |||
printf(" (E) Eliminatória simples\n"); | |||
scanf (" %c",&resposta); | |||
} while (resposta != 'c' && resposta != 'C' && | |||
resposta != 'r' && resposta != 'R' && | |||
resposta != 'e' && resposta != 'e'); | |||
if (resposta == 'r' || resposta == 'R') | |||
//Chama função rodizio | |||
rodizio (n, jogadores); | |||
if (resposta == 'e' || resposta == 'E') { | |||
//Pergunta sobre formato do sorteio | |||
do | |||
{ | |||
printf("\nESCOLHA FORMATO DO SORTEIO: \n"); | |||
printf(" (R) Manter ordem de RANKING\n"); | |||
printf(" (S) SORTEAR e embaralhar TODOS os jogadores\n"); | |||
scanf (" %c",&resposta); | |||
} while (resposta != 's' && resposta != 'S' && | |||
resposta != 'r' && resposta != 'R'); | |||
if (resposta == 's' || resposta == 'S') | |||
embaralhar(jogadores, n); | |||
//Chama função matamata | |||
matamata(n, jogadores); | |||
} | |||
if (resposta == 'c' || resposta == 'C') | |||
{ | |||
//Pergunta sobre número de GRUPOS | |||
do | |||
{ | |||
printf("\n Escolha quantos GRUPOS: \n"); | |||
if (n >= 4 && n <= 10) { | |||
printf(" (2) Dois GRUPOS (%d ", n / 2); | |||
if (n % 2 != 0) printf("ou %d ", n / 2 + 1); | |||
printf("jogadores cada)"); | |||
if (n / 2 == 3 || (n / 2 == 4 && n % 2 == 0)) | |||
printf(" <- melhor escolha\n"); else printf("\n");} | |||
if (n >= 6 && n <= 15) { | |||
printf(" (3) Três GRUPOS (%d ", n / 3); | |||
if (n % 3 != 0) printf("ou %d ", n / 3 + 1); | |||
printf("jogadores cada)"); | |||
if (n / 3 == 3 || (n / 3 == 4 && n % 3 == 0)) | |||
printf(" <- melhor escolha\n"); else printf("\n");} | |||
if (n >= 8 && n <= 20) { | |||
printf(" (4) Quatro GRUPOS (%d ", n / 4); | |||
if (n % 4 != 0) printf("ou %d ", n / 4 + 1); | |||
printf("jogadores cada)"); | |||
if (n / 4 == 3 || (n / 4 == 4 && n % 4 == 0)) | |||
printf(" <- melhor escolha\n"); else printf("\n");} | |||
if (n >= 10 && n <= 25) { | |||
printf(" (5) Cinco GRUPOS (%d ", n / 5); | |||
if (n % 5 != 0) printf("ou %d ", n / 5 + 1); | |||
printf("jogadores cada)"); | |||
if (n / 5 == 3 || (n / 5 == 4 && n % 5 == 0)) | |||
printf(" <- melhor escolha\n"); else printf("\n");} | |||
if (n >= 12 && n <= 30) { | |||
printf(" (6) Seis GRUPOS (%d ", n / 6); | |||
if (n % 6 != 0) printf("ou %d ", n / 6 + 1); | |||
printf("jogadores cada)"); | |||
if (n / 6 == 3 || (n / 6 == 4 && n % 6 == 0)) | |||
printf(" <- melhor escolha\n"); else printf("\n");} | |||
if (n >= 14 && n <= 35) { | |||
printf(" (7) Sete GRUPOS (%d ", n / 7); | |||
if (n % 7 != 0) printf("ou %d ", n / 7 + 1); | |||
printf("jogadores cada)"); | |||
if (n / 7 == 3 || (n / 7 == 4 && n % 7 == 0)) | |||
printf(" <- melhor escolha\n"); else printf("\n");} | |||
if (n >= 16 && n <= 40) { | |||
printf(" (8) Oito GRUPOS (%d ", n / 8); | |||
if (n % 8 != 0) printf("ou %d ", n / 8 + 1); | |||
printf("jogadores cada)"); | |||
if (n / 8 == 3 || (n / 8 == 4 && n % 8 == 0)) | |||
printf(" <- melhor escolha\n"); else printf("\n");} | |||
if (n >= 24 && n <= 60) { | |||
printf(" (Z) Doze GRUPOS (%d ", n / 12); | |||
if (n % 12 != 0) printf("ou %d ", n / 12 + 1); | |||
printf("jogadores cada)"); | |||
if (n / 12 == 3 || (n / 12 == 4 && n % 12 == 0)) | |||
printf(" <- melhor escolha\n"); else printf("\n");} | |||
if (n >= 32 && n <= 80) { | |||
printf(" (S) Dezeseis GRUPOS (%d ", n / 16); | |||
if (n % 16 != 0) printf("ou %d ", n / 16 + 1); | |||
printf("jogadores cada)"); | |||
if (n / 16 == 3 || (n / 16 == 4 && n % 16 == 0)) | |||
printf(" <- melhor escolha\n"); else printf("\n");} | |||
scanf (" %c",&resposta); | |||
} while (resposta != '2' && resposta != '3' && resposta != '4' && | |||
resposta != '5' && resposta != '6' && resposta != '7' && | |||
resposta != '8' && resposta != 'z' && resposta != 'Z' && | |||
resposta != 's' && resposta != 'S'); | |||
if (resposta == '2' || resposta == '3'|| resposta == '4'|| | |||
resposta == '5' || resposta == '6') | |||
{ | |||
if (resposta == '2') | |||
g = 2; | |||
if (resposta == '3') | |||
g = 3; | |||
if (resposta == '4') | |||
g = 4; | |||
if (resposta == '5') | |||
g = 5; | |||
if (resposta == '6') | |||
g = 6; | |||
if ((g == 2 && n >= 6) || (g == 3 && n >= 9) || (g == 4 && n >= 12) || | |||
(g == 5 && n >= 15) || (g == 6 && n >= 18)) | |||
//Pergunta sobre número de classificados por GRUPO | |||
do | |||
{ | |||
printf("\n Escolha número de classificados por GRUPO: \n"); | |||
printf(" (2) Dois\n"); | |||
printf(" (3) Três\n"); | |||
scanf (" %c",&resposta); | |||
} while (resposta != '2' && resposta != '3'); | |||
if (resposta == '2') | |||
nc = 2; | |||
if (resposta == '3') | |||
nc = 3; | |||
} | |||
if (resposta == '7') | |||
g = 7; | |||
if (resposta == '8') | |||
g = 8; | |||
if (resposta == 'z' || resposta == 'Z') | |||
g = 12; | |||
if (resposta == 's' || resposta == 'S') | |||
g = 16; | |||
//Pergunta sobre formato do sorteio | |||
do | |||
{ | |||
printf("\nESCOLHA O FORMATO DA MONTAGEM DOS GRUPOS: \n"); | |||
printf(" (R) Manter ordem de RANKING para organizar GRUPOS\n"); | |||
printf(" (1) Incluir UM pelo RANKING e embaralhar demais\n"); | |||
if (n / g >= 2) | |||
printf(" (2) Incluir DOIS pelo RANKING e embaralhar demais\n"); | |||
if (n / g >= 3) | |||
printf(" (3) Incluir TRÊS pelo RANKING e embaralhar demais\n"); | |||
printf(" (S) SORTEAR e embaralhar TODOS os jogadores\n"); | |||
scanf (" %c",&resposta); | |||
} while (resposta != 's' && resposta != 'S' && | |||
resposta != '1' && resposta != '2' && resposta != '3' && | |||
resposta != 'r' && resposta != 'R'); | |||
if (resposta == 's' || resposta == 'S') | |||
r = 0; | |||
if (resposta == '1') | |||
r = 1; | |||
if (resposta == '2') | |||
r = 2; | |||
if (resposta == '3') | |||
r = 3; | |||
if (resposta == 'r' || resposta == 'R') | |||
r = 4; | |||
//Chama função copa | |||
copa(r, g, n, nc, jogadores); | |||
} | |||
arq = fopen(tabela, "a"); | |||
fprintf(arq, "\n+----------------------------------------------------+\n"); | |||
fprintf(arq, "\n Programa desenvolvido por: Evandro Cantú"); | |||
fprintf(arq, "\n Contato: evandro.cantu@ifpr.edu.br"); | |||
fprintf(arq, "\n Data da compilação: %s\n",__DATE__); | |||
fclose(arq); | |||
return(0); | |||
} | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="c"> | |||
//Arquivo Copa.c | |||
//Programa Gerador de Tabelas Esportivas | |||
//Função copa utilizada pelo programa principal. | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <string.h> | |||
#include <time.h> | |||
void matamata (int n, char jogadores[32][20]); | |||
void rodizio (int n, char jogadores[80][20]); | |||
void embaralhar(char vetor[80][20], int tamVetor); | |||
//calExtra: Função auxiliar da função copa, permtindo verificar se | //calExtra: Função auxiliar da função copa, permtindo verificar se | ||
Linha 94: | Linha 387: | ||
//copa: Função organizar a competição em grupos. | //copa: Função organizar a competição em grupos. | ||
// Recebe como parâmetros o número de grupos (g), número de | // Recebe como parâmetros o número de jogadores a serem incluídos | ||
// pelo Ranking (r), o número de grupos (g), número de | |||
// jogadores (n), número de classificados por grupo (nc) e | // jogadores (n), número de classificados por grupo (nc) e | ||
// o vetor com os jogadores. | // o vetor com os jogadores. | ||
void copa (int g, int n, int nc, char jogadores[ | void copa (int r, int g, int n, int nc, char jogadores[80][20]) | ||
{ | { | ||
char tabela[] = " | char tabela[] = "Tabelas.txt"; | ||
FILE *arq; | FILE *arq; | ||
char grupos[ | char grupos[16][80][20]; | ||
char nomeGrupo[16] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P'}; | |||
int i, j; | int i, j; | ||
int c = 0; | |||
int div, mod; | int div, mod; | ||
div = n / g; //Número mínimo de jogadores por GRUPO | div = n / g; //Número mínimo de jogadores por GRUPO | ||
mod = n % g; //Jogador(es) extra para alocar em GRUPO(s) | mod = n % g; //Jogador(es) extra para alocar em GRUPO(s) | ||
int ng; | int ng = n; //Número de jogadores além incluídos pelo RANKING | ||
int extra[8]; | int extra[8]; | ||
int offset = 0; | int offset = 0; | ||
arq = fopen(tabela, "a"); | arq = fopen(tabela, "a"); | ||
fprintf(arq, "\nCOMPETIÇÃO NO FORMATO COPA: \n"); | fprintf(arq, "\nCOMPETIÇÃO NO FORMATO COPA: \n"); | ||
fprintf(arq, "-> % | fprintf(arq, "-> %2d GRUPOS\n-> %2d Classificados cada GRUPO\n", g, nc); | ||
fprintf(arq, "\ | fprintf(arq, "\n+----------------------------------------------------+"); | ||
for (i = 0; i < g; i++) | fprintf(arq, "\n TABELAS DE JOGOS: "); | ||
fprintf(arq, "\n+----------------------------------------------------+"); | |||
fclose(arq); | |||
//Inclusão de jogadores nos GRUPOS de acordo com RANKING | |||
if (r >= 1) | |||
{ | |||
for (i = 0; i < g; i++) //Cabeças de GRUPO | |||
strcpy(grupos[i][0], jogadores[i]); | |||
ng = n - g; //Número total de jogadores restantes | |||
c = 1; | |||
} | |||
if (r >= 2) | |||
{ | { | ||
for (i = 0; i < g; i++) //Segundo integrante do GRUPO na ordem inversa | |||
strcpy(grupos[i][1], jogadores[2 * g - 1 - i]); | |||
ng = n - 2 * g; //Número total de jogadores restantes | |||
c = 2; | |||
} | } | ||
if ((r >= 3) && (n / g > 2)) | |||
{ | { | ||
strcpy(grupos[i][ | for (i = 0; i < g; i++) //Terceiro integrante do GRUPO | ||
strcpy(grupos[i][2], jogadores[2 * g + i]); | |||
ng = n - 3 * g; //Número total de jogadores restantes | |||
c = 3; | |||
} | } | ||
if ((r == 4) && (n / g > 3)) | |||
{ | |||
for (i = 0; i < g; i++) //Terceiro integrante do GRUPO | |||
strcpy(grupos[i][3], jogadores[4 * g - 1 - i]); | |||
ng = n - 4 * g; //Número total de jogadores restantes | |||
c = 4; | |||
} | } | ||
for (i = 0; i < ng; i++) | for (i = 0; i < ng; i++) | ||
strcpy(jogadores[i], jogadores[ | strcpy(jogadores[i], jogadores[c * g + i]); //Retira jogadores já incluídos | ||
embaralhar(jogadores, ng); //Embaralha restantes | if (r != 4) | ||
embaralhar(jogadores, ng); //Embaralha restantes | |||
//Monta GRUPOS, verificado através da função callExtra se | //Monta GRUPOS, verificado através da função callExtra se | ||
//há jogadores extra em um grupo, quando a divisão entre | //há jogadores extra em um grupo, quando a divisão entre | ||
Linha 148: | Linha 452: | ||
extra[j] = calExtra(&mod); | extra[j] = calExtra(&mod); | ||
for (i = 0; i < ng/g + extra[j]; i++) | for (i = 0; i < ng/g + extra[j]; i++) | ||
//Inclui jogadores nos | //Inclui o restante dos jogadores nos GRUPOS | ||
strcpy(grupos[j][i+ | strcpy(grupos[j][i+c], jogadores[i + offset]); | ||
//offset marca no vetor com os jogadores a posição do próximo | //offset marca no vetor com os jogadores a posição do próximo | ||
//jogador a ser incluídos no próximo GRUPO. | //jogador a ser incluídos no próximo GRUPO. | ||
offset = offset + ng/g + extra[j]; | offset = offset + ng/g + extra[j]; | ||
arq = fopen(tabela, "a"); | arq = fopen(tabela, "a"); | ||
fprintf(arq, "\n+ | fprintf(arq, "\n+------------------------------------------------+"); | ||
fprintf(arq, "\n| GRUPO %c : Jogadores | Vitórias | Saldo de Sets |", nomeGrupo[j]); | |||
fprintf(arq, "\n| GRUPO % | fprintf(arq, "\n+---------------------+----------+---------------+\n"); | ||
fprintf(arq, "\n+--------------------+----------+---------------+\n"); | |||
//Imprime os membros de cada GRUPO | //Imprime os membros de cada GRUPO | ||
for (i = 0; i < n/g + extra[j]; i++) | for (i = 0; i < n/g + extra[j]; i++) | ||
fprintf(arq, "|% | fprintf(arq, "|%20s | | |\n", grupos[j][i]); | ||
fprintf(arq, "+-----------------------------------------------+\n"); | fprintf(arq, "+------------------------------------------------+\n"); | ||
fclose(arq); | fclose(arq); | ||
//Chama a função rodízio para determinar as partidas do GRUPO | //Chama a função rodízio para determinar as partidas do GRUPO | ||
rodizio (n/g + extra[j], grupos[j]); | rodizio (n/g + extra[j], grupos[j]); | ||
} | } | ||
//Sequência de vetores de | //Sequência de vetores de strings que definem a ordem dos confrontos | ||
// | //para as Finais no formato Copa, considerando o número de grupos (g) | ||
//o número de classificados (c) por grupo. | //e o número de classificados (c) por grupo. | ||
char final2g2c[][20] = { | char final2g2c[][20] = { | ||
"1o Grupo | "1o Grupo A ________", "1o Grupo B ________", | ||
"2o Grupo | "2o Grupo A ________", "2o Grupo B ________"}; | ||
char final2g3c[][20] = { | char final2g3c[][20] = { | ||
"1o Grupo | "1o Grupo A ________", "1o Grupo B ________", "2o Grupo A ________", | ||
"2o Grupo | "2o Grupo B ________", "3o Grupo A ________", "3o Grupo B ________"}; | ||
char final3g2c[][20] = { | char final3g2c[][20] = { | ||
"1o Grupo | "1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", | ||
"2o Grupo | "2o Grupo B ________", "2o Grupo C ________", "2o Grupo A ________"}; | ||
char final3g3c[][20] = { | char final3g3c[][20] = { | ||
"1o Grupo | "1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", | ||
"2o Grupo | "2o Grupo B ________", "2o Grupo C ________", "2o Grupo A ________", | ||
"3o Grupo | "3o Grupo A ________", "3o Grupo B ________", "3o Grupo C ________"}; | ||
char final4g2c[][20] = { | char final4g2c[][20] = { | ||
"1o Grupo | "1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", "1o Grupo D ________", | ||
"2o Grupo | "2o Grupo B ________", "2o Grupo A ________", "2o Grupo D ________", "2o Grupo C ________"}; | ||
char final4g3c[][20] = { | char final4g3c[][20] = { | ||
"1o Grupo | "1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", "1o Grupo D ________", | ||
"2o Grupo | "2o Grupo B ________", "2o Grupo A ________", "2o Grupo D ________", "2o Grupo C ________", | ||
"3o Grupo | "3o Grupo B ________", "3o Grupo A ________", "3o Grupo D ________", "3o Grupo C ________"}; | ||
char final5g2c[][20] = { | |||
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", | |||
"1o Grupo D ________", "1o Grupo E ________", | |||
"2o Grupo A ________", "2o Grupo E ________", "2o Grupo B ________", | |||
"2o Grupo C ________", "2o Grupo D ________"}; | |||
char final5g3c[][20] = { | |||
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", | |||
"1o Grupo D ________", "1o Grupo E ________", | |||
"2o Grupo A ________", "2o Grupo E ________", "2o Grupo B ________", | |||
"2o Grupo C ________", "2o Grupo D ________", | |||
"3o Grupo D ________", "3o Grupo A ________", "3o Grupo E ________", | |||
"3o Grupo B ________", "3o Grupo C ________",}; | |||
char final6g2c[][20] = { | char final6g2c[][20] = { | ||
"1o Grupo | "1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", | ||
"1o Grupo | "1o Grupo D ________", "1o Grupo E ________", "1o Grupo F ________", | ||
"2o Grupo | "2o Grupo E ________", "2o Grupo F ________", "2o Grupo B ________", | ||
"2o Grupo | "2o Grupo A ________", "2o Grupo D ________", "2o Grupo C ________"}; | ||
char | char final6g3c[][20] = { | ||
"1o Grupo | "1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", | ||
"1o Grupo | "1o Grupo D ________", "1o Grupo E ________", "1o Grupo F ________", | ||
"2o Grupo | "2o Grupo E ________", "2o Grupo F ________", "2o Grupo B ________", | ||
"2o Grupo | "2o Grupo A ________", "2o Grupo D ________", "2o Grupo C ________", | ||
"3o Grupo A ________", "3o Grupo B ________", "3o Grupo C ________", | |||
"3o Grupo D ________", "3o Grupo E ________", "3o Grupo F ________"}; | |||
char final7g[][20] = { | |||
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", | |||
"1o Grupo D ________", "1o Grupo E ________", "1o Grupo F ________", "1o Grupo G ________", | |||
"2o Grupo B ________", "2o Grupo G ________", "2o Grupo A ________", | |||
"2o Grupo D ________", "2o Grupo C ________", "2o Grupo F ________", "2o Grupo E ________"}; | |||
char final8g[][20] = { | |||
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", "1o Grupo D ________", | |||
"1o Grupo E ________", "1o Grupo F ________", "1o Grupo G ________", "1o Grupo H ________", | |||
"2o Grupo B ________", "2o Grupo A ________", "2o Grupo D ________", "2o Grupo C ________", | |||
"2o Grupo F ________", "2o Grupo E ________", "2o Grupo H ________", "2o Grupo G ________"}; | |||
char final12g[][20] = { | |||
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", "1o Grupo D ________", | |||
"1o Grupo E ________", "1o Grupo F ________", "1o Grupo G ________", "1o Grupo H ________", | |||
"1o Grupo I ________", "1o Grupo J ________", "1o Grupo K ________", "1o Grupo L ________", | |||
"2o Grupo C ________", "2o Grupo D ________", "2o Grupo E ________", "2o Grupo F ________", | |||
"2o Grupo G ________", "2o Grupo H ________", "2o Grupo A ________", "2o Grupo B ________", | |||
"2o Grupo J ________", "2o Grupo L ________", "2o Grupo I ________", "2o Grupo K ________"}; | |||
char final16g[][20] = { | |||
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", "1o Grupo D ________", | |||
"1o Grupo E ________", "1o Grupo F ________", "1o Grupo G ________", "1o Grupo H ________", | |||
"1o Grupo I ________", "1o Grupo J ________", "1o Grupo K ________", "1o Grupo L ________", | |||
"1o Grupo M ________", "1o Grupo N ________", "1o Grupo O ________", "1o Grupo P ________", | |||
"2o Grupo B ________", "2o Grupo A ________", "2o Grupo D ________", "2o Grupo C ________", | |||
"2o Grupo F ________", "2o Grupo E ________", "2o Grupo H ________", "2o Grupo G ________", | |||
"2o Grupo J ________", "2o Grupo I ________", "2o Grupo L ________", "2o Grupo K ________", | |||
"2o Grupo N ________", "2o Grupo M ________", "2o Grupo P ________", "2o Grupo O ________"}; | |||
switch (g) | switch (g) | ||
{ | { | ||
Linha 218: | Linha 562: | ||
if (nc == 3) | if (nc == 3) | ||
matamata(g * nc, final4g3c); | matamata(g * nc, final4g3c); | ||
break; | |||
case 5: | |||
if (nc == 2) | |||
matamata(g * nc, final5g2c); | |||
if (nc == 3) | |||
matamata(g * nc, final5g3c); | |||
break; | break; | ||
case 6: | case 6: | ||
matamata(g * nc, final6g2c); | if (nc == 2) | ||
matamata(g * nc, final6g2c); | |||
if (nc == 3) | |||
matamata(g * nc, final6g3c); | |||
break; | |||
case 7: | |||
matamata(g * nc, final7g); | |||
break; | break; | ||
case 8: | case 8: | ||
matamata(g * nc, | matamata(g * nc, final8g); | ||
break; | |||
case 12: | |||
matamata(g * nc, final12g); | |||
break; | |||
case 16: | |||
matamata(g * nc, final16g); | |||
break; | break; | ||
} | } | ||
} | } | ||
</syntaxhighlight> | |||
<syntaxhighlight lang="c"> | |||
//Arquivo MataMata.c | |||
//Programa Gerador de Tabelas Esportivas | |||
//Função matamata utilizada pelo programa principal. | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <string.h> | |||
#include <time.h> | |||
//matamata: Função para determinar as partidas de uma eliminatória simples. | //matamata: Função para determinar as partidas de uma eliminatória simples. | ||
Linha 384: | Linha 607: | ||
void matamata (int n, char jogadores[32][20]) | void matamata (int n, char jogadores[32][20]) | ||
{ | { | ||
char tabela[] = " | char tabela[] = "Tabelas.txt"; | ||
FILE *arq; | FILE *arq; | ||
arq = fopen(tabela, "a"); | arq = fopen(tabela, "a"); | ||
Linha 704: | Linha 927: | ||
fprintf(arq, "\n%20s |----+",""); | fprintf(arq, "\n%20s |----+",""); | ||
fprintf(arq, "\n%20s ----+ |", jogadores[14]); | fprintf(arq, "\n%20s ----+ |", jogadores[14]); | ||
fprintf(arq, "\n%20s |----+",""); | |||
fprintf(arq, "\n%20s ----+\n", jogadores[1]); | |||
break; | |||
case 18: | |||
//matamata 9 | |||
fprintf(arq, "\n%22s16F OF QF SF F\n",""); | |||
fprintf(arq, "\n%25s ----+", jogadores[0]); | |||
fprintf(arq, "\n%20s |----+",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[16]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ |----+", jogadores[15]); | |||
fprintf(arq, "\n%20s | |",""); | |||
fprintf(arq, "\n%25s ----+ | |", jogadores[8]); | |||
fprintf(arq, "\n%25s |----+ |",""); | |||
fprintf(arq, "\n%25s ----+ |----+", jogadores[7]); | |||
fprintf(arq, "\n%25s | |",""); | |||
fprintf(arq, "\n%25s ----+ | |", jogadores[4]); | |||
fprintf(arq, "\n%25s |----+ | |",""); | |||
fprintf(arq, "\n%25s ----+ | | |", jogadores[11]); | |||
fprintf(arq, "\n%25s |----+ |",""); | |||
fprintf(arq, "\n%25s ----+ | |", jogadores[12]); | |||
fprintf(arq, "\n%25s |----+ |",""); | |||
fprintf(arq, "\n%25s ----+ |", jogadores[3]); | |||
fprintf(arq, "\n%25s |-----",""); | |||
//matamata 9 | |||
fprintf(arq, "\n%25s ----+ |", jogadores[2]); | |||
fprintf(arq, "\n%25s |----+ |",""); | |||
fprintf(arq, "\n%25s ----+ | |", jogadores[13]); | |||
fprintf(arq, "\n%25s |----+ |",""); | |||
fprintf(arq, "\n%25s ----+ | | |", jogadores[10]); | |||
fprintf(arq, "\n%25s |----+ | |",""); | |||
fprintf(arq, "\n%25s ----+ | | ", jogadores[5]); | |||
fprintf(arq, "\n%25s |----+",""); | |||
fprintf(arq, "\n%25s ----+ |", jogadores[6]); | |||
fprintf(arq, "\n%25s |----+ |",""); | |||
fprintf(arq, "\n%25s ----+ | |", jogadores[9]); | |||
fprintf(arq, "\n%20s | |",""); | |||
fprintf(arq, "\n%20s ----+ |----+", jogadores[14]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[17]); | |||
fprintf(arq, "\n%20s |----+",""); | |||
fprintf(arq, "\n%25s ----+\n", jogadores[1]); | |||
break; | |||
case 24: | |||
//matamata 12 | |||
fprintf(arq, "\n%18s16F OF QF SF F\n",""); | |||
fprintf(arq, "\n%25s ----+", jogadores[0]); | |||
fprintf(arq, "\n%20s |----+",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[16]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ |----+", jogadores[15]); | |||
fprintf(arq, "\n%20s | |",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[8]); | |||
fprintf(arq, "\n%20s |----+ | |",""); | |||
fprintf(arq, "\n%20s ----+ | | |", jogadores[23]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%25s ----+ |", jogadores[7]); | |||
fprintf(arq, "\n%20s |----+",""); | |||
fprintf(arq, "\n%25s ----+ | |", jogadores[4]); | |||
fprintf(arq, "\n%20s |----+ | |",""); | |||
fprintf(arq, "\n%20s ----+ | | | |", jogadores[20]); | |||
fprintf(arq, "\n%20s |----+ | | |",""); | |||
fprintf(arq, "\n%20s ----+ | | |", jogadores[11]); | |||
fprintf(arq, "\n%20s | | |",""); | |||
fprintf(arq, "\n%20s ----+ |----+ |", jogadores[12]); | |||
fprintf(arq, "\n%20s |----+ | |",""); | |||
fprintf(arq, "\n%20s ----+ | | |", jogadores[19]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%25s ----+ |", jogadores[3]); | |||
fprintf(arq, "\n%20s |-----",""); | |||
//matamata 12 | |||
fprintf(arq, "\n%25s ----+ |", jogadores[2]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ | | |", jogadores[18]); | |||
fprintf(arq, "\n%20s |----+ | |",""); | |||
fprintf(arq, "\n%20s ----+ |----+ |", jogadores[13]); | |||
fprintf(arq, "\n%20s | | |",""); | |||
fprintf(arq, "\n%20s ----+ | | |", jogadores[10]); | |||
fprintf(arq, "\n%20s |----+ | | |",""); | |||
fprintf(arq, "\n%20s ----+ | | | |", jogadores[21]); | |||
fprintf(arq, "\n%20s |----+ | |",""); | |||
fprintf(arq, "\n%25s ----+ | |", jogadores[5]); | |||
fprintf(arq, "\n%20s |----+",""); | |||
fprintf(arq, "\n%25s ----+ |", jogadores[6]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ | | |", jogadores[22]); | |||
fprintf(arq, "\n%20s |----+ | |",""); | |||
fprintf(arq, "\n%20s ----+ | | ", jogadores[9]); | |||
fprintf(arq, "\n%20s | |",""); | |||
fprintf(arq, "\n%20s ----+ |----+", jogadores[14]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[17]); | |||
fprintf(arq, "\n%20s |----+",""); | |||
fprintf(arq, "\n%25s ----+\n", jogadores[1]); | |||
break; | |||
case 32: | |||
//matamata 16 | |||
fprintf(arq, "\n%18s16F OF QF SF F\n",""); | |||
fprintf(arq, "\n%20s ----+", jogadores[0]); | |||
fprintf(arq, "\n%20s |----+",""); | |||
fprintf(arq, "\n%20s ----+ |", jogadores[31]); | |||
fprintf(arq, "\n%20s |----+",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[16]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ |", jogadores[15]); | |||
fprintf(arq, "\n%20s |----+",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[8]); | |||
fprintf(arq, "\n%20s |----+ | |",""); | |||
fprintf(arq, "\n%20s ----+ | | |", jogadores[23]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[24]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ |", jogadores[7]); | |||
fprintf(arq, "\n%20s |----+",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[4]); | |||
fprintf(arq, "\n%20s |----+ | |",""); | |||
fprintf(arq, "\n%20s ----+ | | |", jogadores[27]); | |||
fprintf(arq, "\n%20s |----+ | |",""); | |||
fprintf(arq, "\n%20s ----+ | | | |", jogadores[20]); | |||
fprintf(arq, "\n%20s |----+ | | |",""); | |||
fprintf(arq, "\n%20s ----+ | | |", jogadores[11]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[12]); | |||
fprintf(arq, "\n%20s |----+ | |",""); | |||
fprintf(arq, "\n%20s ----+ | | |", jogadores[19]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[28]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ |", jogadores[3]); | |||
fprintf(arq, "\n%20s |----+",""); | |||
//matamata 16 | |||
fprintf(arq, "\n%20s ----+ |", jogadores[2]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[29]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ | | |", jogadores[18]); | |||
fprintf(arq, "\n%20s |----+ | |",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[13]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ | | |", jogadores[10]); | |||
fprintf(arq, "\n%20s |----+ | | |",""); | |||
fprintf(arq, "\n%20s ----+ | | | |", jogadores[21]); | |||
fprintf(arq, "\n%20s |----+ | |",""); | |||
fprintf(arq, "\n%20s ----+ | | |", jogadores[26]); | |||
fprintf(arq, "\n%20s |----+ | |",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[5]); | |||
fprintf(arq, "\n%20s |----+",""); | |||
fprintf(arq, "\n%20s ----+ |", jogadores[6]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[25]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ | | |", jogadores[22]); | |||
fprintf(arq, "\n%20s |----+ | |",""); | |||
fprintf(arq, "\n%20s ----+ | | ", jogadores[9]); | |||
fprintf(arq, "\n%20s |----+",""); | |||
fprintf(arq, "\n%20s ----+ |", jogadores[14]); | |||
fprintf(arq, "\n%20s |----+ |",""); | |||
fprintf(arq, "\n%20s ----+ | |", jogadores[17]); | |||
fprintf(arq, "\n%20s |----+",""); | |||
fprintf(arq, "\n%20s ----+ |", jogadores[30]); | |||
fprintf(arq, "\n%20s |----+",""); | fprintf(arq, "\n%20s |----+",""); | ||
fprintf(arq, "\n%20s ----+\n", jogadores[1]); | fprintf(arq, "\n%20s ----+\n", jogadores[1]); | ||
Linha 711: | Linha 1 094: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
;Versão para Windows: Para rodar no sistema operacional Windows o código fonte deve ser compilado neste sistema. Caso prefira, pode solicitar por email o arquivo executável do programa diretamente do desenvolvedor. | |||
---- | ---- | ||
[[Categoria:Atividades Esportivas]] | [[Categoria:Atividades Esportivas]] |
Edição atual tal como às 16h49min de 12 de novembro de 2018
Este software permite a geração de tabelas esportivas para organizar competições em diferentes formatos, incluindo:
- Copa (fase de grupos seguido de eliminatória simples);
- Rodízio simples (todos contra todos);
- Eliminatória simples (mata mata).
No formato copa o programa aceita até 80 competidores, organizados em até 16 grupos. No formato eliminatória simples o programa pode organizar confrontos com 2 a 16 jogadores ou 24 ou 32. No formato rodízio simples o programa aceita qualquer número de jogadores.
Utilização do Programa
- Entrada dos jogadores
- O cadastro de jogadores (ou equipes) deve ser realizado através de um arquivo de texto, um nome em cada linha. Os nomes podem ter até 20 caracteres, sem acentos ou espaços.
- Caso haja um ranking dos jogadores para orientar a formação das tabelas para eliminatórias simples ou para composição de grupos no formato copa, a ordem dos jogadores no arquivo deve seguir a ordem do ranking.
- Execução do programa
- A execução do programa deve ser feira em um terminal de comandos, no caso do sistema Linux, passando como parâmetro o arquivo com os jogadores cadastrados.
./GeradorTabelas Jogadores.txt
- No caso so sistema Windows, deve-se clicar duas vezes no programa executável e será solicitado o nome do arquivo com os jogadores.
- O programa solicita ao usuário as opções quanto ao formato das competições e orienta as escolhas em função do número de competidores.
- Tabelas da Competição
- O programa gera como saída o arquivo Tabelas.txt, que contém os confrontos entre os jogadores.
- Caso a escolha tenha sido o formato copa, o programa gera os confrontos da fase de grupos e os confrontos das partidas eliminatórias.
- O arquivo Tabelas.txt pode ser editado com os resultados das competições.
Download do programa
O software foi desenvolvido em linguagem C.
O código fonte do programa está organizado em três arquivos, disponibilizados abaixo:
GeradorTebelas.c Copa.c MataMata.c
Para gerar o programa executável, os arquivos fonte devem ser compilados com o comando:
gcc GeradorTabelas.c Copa.c MataMata.c -o GeradorTabelas
//Arquivo GeradorTabelas.c
//Programa Gerador de Tabelas Esportivas
//Desenvolvido por Evandro Cantú
//Instituto Federal do Paraná
//Foz do Iguaçu, outubro 2016
//Contato: evandro.cantu@ifpr.edu.br
//Atualização: jun/2017
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
char tabela[] = "Tabelas.txt";
FILE *arq;
//matamata: Função para determinar as partidas de uma eliminatória simples.
// Recebe como parâmetro o número de jogadores e
// o vetor com os jogadores
void matamata (int n, char jogadores[32][20]);
//Protótipo: Arquivo fonte MataMata.c
//copa: Função organizar a competição em grupos.
// Recebe como parâmetros o número de grupos (g), número de
// jogadores (n), número de classificados por grupo (nc) e
// o vetor com os jogadores.
void copa (int r, int g, int n, int nc, char jogadores[80][20]);
//Protótipo: Arquivo fonte Copa.c
//rodizio: Função para determinar as partidas de um rodízio simples,
// com todos jogando contra todos.
// Recebe como parâmetro o número de jogadores e
// o vetor com os jogadores
void rodizio (int n, char jogadores[80][20])
{
int c = 0;
int i, j, k;
char ultimoJogador[20] = {""};
//SE número impar de jogadores ENTÃO adiciona um jogador vazio
if (n % 2 == 1) {
strcpy(jogadores[n], ultimoJogador);
n = n + 1;
}
arq = fopen(tabela, "a");
fprintf(arq, "\nPARTIDAS \nDO RODÍZIO: \n\n");
for (k=0;k<n-1;k++)
{
fprintf(arq, "%sRodada: %2d\n", "",k+1);
for (i=0;i<n/2;i++)
if ((strcmp(jogadores[i], "") != 0) && (strcmp(jogadores[n-1-i], "") != 0))
fprintf(arq, "%2d: %20s _ x _ %-20s\n", ++c, jogadores[i], jogadores[n-1-i]);
//Rotaciona vetor de jogadores, menos primeira posição
strcpy(ultimoJogador, jogadores[n-1]);
for (j=n-1;j>0;j--)
strcpy(jogadores[j], jogadores[j-1]);
strcpy(jogadores[1], ultimoJogador);
}
fclose(arq);
}
//Ref: https://pt.wikipedia.org/wiki/Competições_de_todos_contra_todos
/* FUNÇÃO ANTERIOR SEM ORGANIZAR RODADAS
void rodizio (int n, char jogadores[80][20])
{
int c = 0;
int i, j;
arq = fopen(tabela, "a");
fprintf(arq, "\nPARTIDAS DO RODÍZIO: \n");
for (i=0;i<n;i++)
for (j=i+1;j<n;j++)
fprintf(arq, "%2d: %20s _ x _ %-20s\n", ++c, jogadores[i], jogadores[j]);
fclose(arq);
}
*/
//embaralhar: Função para embaralhar um vetor.
// Recebe como parâmetro o vetor com os jogadores
// a serem embaralhados e o tamanho do vetor.
void embaralhar(char vetor[80][20], int tamVetor)
{
int i;
char temp[20];
srand(time(NULL));
for (i = 0; i < tamVetor; i++)
{
int r = rand() %tamVetor;
strcpy(temp, vetor[i]);
strcpy(vetor[i], vetor[r]);
strcpy(vetor[r], temp);
}
}
int main(int argc, char *argv[])
//Arquivo com jogadores pode ser fornecido como parâmetro
{
char jogador[20];
char jogadores[80][20];
int n = 0; //número de jogadores cadastrados
int g = 0; //número de grupos
int nc = 2; //Número de classificados por GRUPO
int r; //Número de jogadores incluídos pelo RANKING nos GRUPOS
int i;
char resposta;
int tam;
char arquivo[20];
if (argc == 1)
{
printf("\nCADASTRO DE JOGADORES\n");
printf("\nEntre com NOME DO ARQUIVO com os jogadores:\n");
fgets(arquivo, sizeof(arquivo), stdin);
tam = strlen(arquivo);
if (arquivo[tam - 1] == '\n')
arquivo[tam - 1] = '\0';
}
else
{
strcpy (arquivo, argv[1]);
}
FILE *arq;
arq = fopen(arquivo, "r");
if(arq == NULL) {
printf("\nNao foi possivel abrir o arquivo!\n");
printf("\nConfira se o nome do arquivo está correto, incluindo a extensão txt.\n");
return(1);}
else
//Monta vetor com os jogadores
while( (fscanf(arq,"%s\n", jogador))!=EOF )
{
strcpy(jogadores[n], jogador);
n++;
}
fclose(arq);
arq = fopen(tabela, "w");
fprintf(arq, "\n+----------------------------------------------------+\n");
fprintf(arq, "\n PROGRAMA GERADOR DE TABELAS ESPORTIVAS\n");
fprintf(arq, "\n+----------------------------------------------------+\n");
fprintf(arq, "\n Evento: _________________________________________\n");
fprintf(arq, "\n Local: _________________________________________\n");
fprintf(arq, "\n Data: _________________________________________\n");
fprintf(arq, "\n+----------------------------------------------------+\n");
//Data e hora do sistema
time_t mytime;
mytime = time(NULL);
struct tm tm = *localtime(&mytime);
fprintf(arq, "\n Geração das Tabelas: %d/%d/%d - %d:%d\n",
tm.tm_mday, tm.tm_mon + 1, tm.tm_year + 1900, tm.tm_hour, tm.tm_min);
fprintf(arq, "\n+----------------------------------------------------+\n");
//Imprime jogadores cadastrados
fprintf(arq, "\nJOGADORES CADASTRADOS:\n");
for (i=0; i<n; i++)
{
printf("%2d: %-20s\n", i + 1, jogadores[i]);
fprintf(arq, "%2d: %-20s\n", i + 1, jogadores[i]);
}
fclose(arq);
//Pergunta sobre formato da competição
do
{
printf("\nESCOHA FORMATO DA COMPETIÇÃO: \n");
if (n >= 4 && n <= 80)
printf(" (C) Copa: Grupos + Fase Final\n");
printf(" (R) Rodízio simples\n");
if (n <= 16 || n == 24 || n == 32)
printf(" (E) Eliminatória simples\n");
scanf (" %c",&resposta);
} while (resposta != 'c' && resposta != 'C' &&
resposta != 'r' && resposta != 'R' &&
resposta != 'e' && resposta != 'e');
if (resposta == 'r' || resposta == 'R')
//Chama função rodizio
rodizio (n, jogadores);
if (resposta == 'e' || resposta == 'E') {
//Pergunta sobre formato do sorteio
do
{
printf("\nESCOLHA FORMATO DO SORTEIO: \n");
printf(" (R) Manter ordem de RANKING\n");
printf(" (S) SORTEAR e embaralhar TODOS os jogadores\n");
scanf (" %c",&resposta);
} while (resposta != 's' && resposta != 'S' &&
resposta != 'r' && resposta != 'R');
if (resposta == 's' || resposta == 'S')
embaralhar(jogadores, n);
//Chama função matamata
matamata(n, jogadores);
}
if (resposta == 'c' || resposta == 'C')
{
//Pergunta sobre número de GRUPOS
do
{
printf("\n Escolha quantos GRUPOS: \n");
if (n >= 4 && n <= 10) {
printf(" (2) Dois GRUPOS (%d ", n / 2);
if (n % 2 != 0) printf("ou %d ", n / 2 + 1);
printf("jogadores cada)");
if (n / 2 == 3 || (n / 2 == 4 && n % 2 == 0))
printf(" <- melhor escolha\n"); else printf("\n");}
if (n >= 6 && n <= 15) {
printf(" (3) Três GRUPOS (%d ", n / 3);
if (n % 3 != 0) printf("ou %d ", n / 3 + 1);
printf("jogadores cada)");
if (n / 3 == 3 || (n / 3 == 4 && n % 3 == 0))
printf(" <- melhor escolha\n"); else printf("\n");}
if (n >= 8 && n <= 20) {
printf(" (4) Quatro GRUPOS (%d ", n / 4);
if (n % 4 != 0) printf("ou %d ", n / 4 + 1);
printf("jogadores cada)");
if (n / 4 == 3 || (n / 4 == 4 && n % 4 == 0))
printf(" <- melhor escolha\n"); else printf("\n");}
if (n >= 10 && n <= 25) {
printf(" (5) Cinco GRUPOS (%d ", n / 5);
if (n % 5 != 0) printf("ou %d ", n / 5 + 1);
printf("jogadores cada)");
if (n / 5 == 3 || (n / 5 == 4 && n % 5 == 0))
printf(" <- melhor escolha\n"); else printf("\n");}
if (n >= 12 && n <= 30) {
printf(" (6) Seis GRUPOS (%d ", n / 6);
if (n % 6 != 0) printf("ou %d ", n / 6 + 1);
printf("jogadores cada)");
if (n / 6 == 3 || (n / 6 == 4 && n % 6 == 0))
printf(" <- melhor escolha\n"); else printf("\n");}
if (n >= 14 && n <= 35) {
printf(" (7) Sete GRUPOS (%d ", n / 7);
if (n % 7 != 0) printf("ou %d ", n / 7 + 1);
printf("jogadores cada)");
if (n / 7 == 3 || (n / 7 == 4 && n % 7 == 0))
printf(" <- melhor escolha\n"); else printf("\n");}
if (n >= 16 && n <= 40) {
printf(" (8) Oito GRUPOS (%d ", n / 8);
if (n % 8 != 0) printf("ou %d ", n / 8 + 1);
printf("jogadores cada)");
if (n / 8 == 3 || (n / 8 == 4 && n % 8 == 0))
printf(" <- melhor escolha\n"); else printf("\n");}
if (n >= 24 && n <= 60) {
printf(" (Z) Doze GRUPOS (%d ", n / 12);
if (n % 12 != 0) printf("ou %d ", n / 12 + 1);
printf("jogadores cada)");
if (n / 12 == 3 || (n / 12 == 4 && n % 12 == 0))
printf(" <- melhor escolha\n"); else printf("\n");}
if (n >= 32 && n <= 80) {
printf(" (S) Dezeseis GRUPOS (%d ", n / 16);
if (n % 16 != 0) printf("ou %d ", n / 16 + 1);
printf("jogadores cada)");
if (n / 16 == 3 || (n / 16 == 4 && n % 16 == 0))
printf(" <- melhor escolha\n"); else printf("\n");}
scanf (" %c",&resposta);
} while (resposta != '2' && resposta != '3' && resposta != '4' &&
resposta != '5' && resposta != '6' && resposta != '7' &&
resposta != '8' && resposta != 'z' && resposta != 'Z' &&
resposta != 's' && resposta != 'S');
if (resposta == '2' || resposta == '3'|| resposta == '4'||
resposta == '5' || resposta == '6')
{
if (resposta == '2')
g = 2;
if (resposta == '3')
g = 3;
if (resposta == '4')
g = 4;
if (resposta == '5')
g = 5;
if (resposta == '6')
g = 6;
if ((g == 2 && n >= 6) || (g == 3 && n >= 9) || (g == 4 && n >= 12) ||
(g == 5 && n >= 15) || (g == 6 && n >= 18))
//Pergunta sobre número de classificados por GRUPO
do
{
printf("\n Escolha número de classificados por GRUPO: \n");
printf(" (2) Dois\n");
printf(" (3) Três\n");
scanf (" %c",&resposta);
} while (resposta != '2' && resposta != '3');
if (resposta == '2')
nc = 2;
if (resposta == '3')
nc = 3;
}
if (resposta == '7')
g = 7;
if (resposta == '8')
g = 8;
if (resposta == 'z' || resposta == 'Z')
g = 12;
if (resposta == 's' || resposta == 'S')
g = 16;
//Pergunta sobre formato do sorteio
do
{
printf("\nESCOLHA O FORMATO DA MONTAGEM DOS GRUPOS: \n");
printf(" (R) Manter ordem de RANKING para organizar GRUPOS\n");
printf(" (1) Incluir UM pelo RANKING e embaralhar demais\n");
if (n / g >= 2)
printf(" (2) Incluir DOIS pelo RANKING e embaralhar demais\n");
if (n / g >= 3)
printf(" (3) Incluir TRÊS pelo RANKING e embaralhar demais\n");
printf(" (S) SORTEAR e embaralhar TODOS os jogadores\n");
scanf (" %c",&resposta);
} while (resposta != 's' && resposta != 'S' &&
resposta != '1' && resposta != '2' && resposta != '3' &&
resposta != 'r' && resposta != 'R');
if (resposta == 's' || resposta == 'S')
r = 0;
if (resposta == '1')
r = 1;
if (resposta == '2')
r = 2;
if (resposta == '3')
r = 3;
if (resposta == 'r' || resposta == 'R')
r = 4;
//Chama função copa
copa(r, g, n, nc, jogadores);
}
arq = fopen(tabela, "a");
fprintf(arq, "\n+----------------------------------------------------+\n");
fprintf(arq, "\n Programa desenvolvido por: Evandro Cantú");
fprintf(arq, "\n Contato: evandro.cantu@ifpr.edu.br");
fprintf(arq, "\n Data da compilação: %s\n",__DATE__);
fclose(arq);
return(0);
}
//Arquivo Copa.c
//Programa Gerador de Tabelas Esportivas
//Função copa utilizada pelo programa principal.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void matamata (int n, char jogadores[32][20]);
void rodizio (int n, char jogadores[80][20]);
void embaralhar(char vetor[80][20], int tamVetor);
//calExtra: Função auxiliar da função copa, permtindo verificar se
// há jogadores extra em um grupo, quando a divisão entre
// o número de jogadores e o número de grupos não é exata.
int calExtra (int *mod)
{
if (*mod > 0)
{
*mod = *mod - 1;
return (1);
}
return (0);
}
//copa: Função organizar a competição em grupos.
// Recebe como parâmetros o número de jogadores a serem incluídos
// pelo Ranking (r), o número de grupos (g), número de
// jogadores (n), número de classificados por grupo (nc) e
// o vetor com os jogadores.
void copa (int r, int g, int n, int nc, char jogadores[80][20])
{
char tabela[] = "Tabelas.txt";
FILE *arq;
char grupos[16][80][20];
char nomeGrupo[16] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P'};
int i, j;
int c = 0;
int div, mod;
div = n / g; //Número mínimo de jogadores por GRUPO
mod = n % g; //Jogador(es) extra para alocar em GRUPO(s)
int ng = n; //Número de jogadores além incluídos pelo RANKING
int extra[8];
int offset = 0;
arq = fopen(tabela, "a");
fprintf(arq, "\nCOMPETIÇÃO NO FORMATO COPA: \n");
fprintf(arq, "-> %2d GRUPOS\n-> %2d Classificados cada GRUPO\n", g, nc);
fprintf(arq, "\n+----------------------------------------------------+");
fprintf(arq, "\n TABELAS DE JOGOS: ");
fprintf(arq, "\n+----------------------------------------------------+");
fclose(arq);
//Inclusão de jogadores nos GRUPOS de acordo com RANKING
if (r >= 1)
{
for (i = 0; i < g; i++) //Cabeças de GRUPO
strcpy(grupos[i][0], jogadores[i]);
ng = n - g; //Número total de jogadores restantes
c = 1;
}
if (r >= 2)
{
for (i = 0; i < g; i++) //Segundo integrante do GRUPO na ordem inversa
strcpy(grupos[i][1], jogadores[2 * g - 1 - i]);
ng = n - 2 * g; //Número total de jogadores restantes
c = 2;
}
if ((r >= 3) && (n / g > 2))
{
for (i = 0; i < g; i++) //Terceiro integrante do GRUPO
strcpy(grupos[i][2], jogadores[2 * g + i]);
ng = n - 3 * g; //Número total de jogadores restantes
c = 3;
}
if ((r == 4) && (n / g > 3))
{
for (i = 0; i < g; i++) //Terceiro integrante do GRUPO
strcpy(grupos[i][3], jogadores[4 * g - 1 - i]);
ng = n - 4 * g; //Número total de jogadores restantes
c = 4;
}
for (i = 0; i < ng; i++)
strcpy(jogadores[i], jogadores[c * g + i]); //Retira jogadores já incluídos
if (r != 4)
embaralhar(jogadores, ng); //Embaralha restantes
//Monta GRUPOS, verificado através da função callExtra se
//há jogadores extra em um grupo, quando a divisão entre
//o número de jogadores e o número de grupos não é exata.
for (j = 0; j < g; j++)
{
extra[j] = calExtra(&mod);
for (i = 0; i < ng/g + extra[j]; i++)
//Inclui o restante dos jogadores nos GRUPOS
strcpy(grupos[j][i+c], jogadores[i + offset]);
//offset marca no vetor com os jogadores a posição do próximo
//jogador a ser incluídos no próximo GRUPO.
offset = offset + ng/g + extra[j];
arq = fopen(tabela, "a");
fprintf(arq, "\n+------------------------------------------------+");
fprintf(arq, "\n| GRUPO %c : Jogadores | Vitórias | Saldo de Sets |", nomeGrupo[j]);
fprintf(arq, "\n+---------------------+----------+---------------+\n");
//Imprime os membros de cada GRUPO
for (i = 0; i < n/g + extra[j]; i++)
fprintf(arq, "|%20s | | |\n", grupos[j][i]);
fprintf(arq, "+------------------------------------------------+\n");
fclose(arq);
//Chama a função rodízio para determinar as partidas do GRUPO
rodizio (n/g + extra[j], grupos[j]);
}
//Sequência de vetores de strings que definem a ordem dos confrontos
//para as Finais no formato Copa, considerando o número de grupos (g)
//e o número de classificados (c) por grupo.
char final2g2c[][20] = {
"1o Grupo A ________", "1o Grupo B ________",
"2o Grupo A ________", "2o Grupo B ________"};
char final2g3c[][20] = {
"1o Grupo A ________", "1o Grupo B ________", "2o Grupo A ________",
"2o Grupo B ________", "3o Grupo A ________", "3o Grupo B ________"};
char final3g2c[][20] = {
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________",
"2o Grupo B ________", "2o Grupo C ________", "2o Grupo A ________"};
char final3g3c[][20] = {
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________",
"2o Grupo B ________", "2o Grupo C ________", "2o Grupo A ________",
"3o Grupo A ________", "3o Grupo B ________", "3o Grupo C ________"};
char final4g2c[][20] = {
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", "1o Grupo D ________",
"2o Grupo B ________", "2o Grupo A ________", "2o Grupo D ________", "2o Grupo C ________"};
char final4g3c[][20] = {
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", "1o Grupo D ________",
"2o Grupo B ________", "2o Grupo A ________", "2o Grupo D ________", "2o Grupo C ________",
"3o Grupo B ________", "3o Grupo A ________", "3o Grupo D ________", "3o Grupo C ________"};
char final5g2c[][20] = {
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________",
"1o Grupo D ________", "1o Grupo E ________",
"2o Grupo A ________", "2o Grupo E ________", "2o Grupo B ________",
"2o Grupo C ________", "2o Grupo D ________"};
char final5g3c[][20] = {
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________",
"1o Grupo D ________", "1o Grupo E ________",
"2o Grupo A ________", "2o Grupo E ________", "2o Grupo B ________",
"2o Grupo C ________", "2o Grupo D ________",
"3o Grupo D ________", "3o Grupo A ________", "3o Grupo E ________",
"3o Grupo B ________", "3o Grupo C ________",};
char final6g2c[][20] = {
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________",
"1o Grupo D ________", "1o Grupo E ________", "1o Grupo F ________",
"2o Grupo E ________", "2o Grupo F ________", "2o Grupo B ________",
"2o Grupo A ________", "2o Grupo D ________", "2o Grupo C ________"};
char final6g3c[][20] = {
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________",
"1o Grupo D ________", "1o Grupo E ________", "1o Grupo F ________",
"2o Grupo E ________", "2o Grupo F ________", "2o Grupo B ________",
"2o Grupo A ________", "2o Grupo D ________", "2o Grupo C ________",
"3o Grupo A ________", "3o Grupo B ________", "3o Grupo C ________",
"3o Grupo D ________", "3o Grupo E ________", "3o Grupo F ________"};
char final7g[][20] = {
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________",
"1o Grupo D ________", "1o Grupo E ________", "1o Grupo F ________", "1o Grupo G ________",
"2o Grupo B ________", "2o Grupo G ________", "2o Grupo A ________",
"2o Grupo D ________", "2o Grupo C ________", "2o Grupo F ________", "2o Grupo E ________"};
char final8g[][20] = {
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", "1o Grupo D ________",
"1o Grupo E ________", "1o Grupo F ________", "1o Grupo G ________", "1o Grupo H ________",
"2o Grupo B ________", "2o Grupo A ________", "2o Grupo D ________", "2o Grupo C ________",
"2o Grupo F ________", "2o Grupo E ________", "2o Grupo H ________", "2o Grupo G ________"};
char final12g[][20] = {
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", "1o Grupo D ________",
"1o Grupo E ________", "1o Grupo F ________", "1o Grupo G ________", "1o Grupo H ________",
"1o Grupo I ________", "1o Grupo J ________", "1o Grupo K ________", "1o Grupo L ________",
"2o Grupo C ________", "2o Grupo D ________", "2o Grupo E ________", "2o Grupo F ________",
"2o Grupo G ________", "2o Grupo H ________", "2o Grupo A ________", "2o Grupo B ________",
"2o Grupo J ________", "2o Grupo L ________", "2o Grupo I ________", "2o Grupo K ________"};
char final16g[][20] = {
"1o Grupo A ________", "1o Grupo B ________", "1o Grupo C ________", "1o Grupo D ________",
"1o Grupo E ________", "1o Grupo F ________", "1o Grupo G ________", "1o Grupo H ________",
"1o Grupo I ________", "1o Grupo J ________", "1o Grupo K ________", "1o Grupo L ________",
"1o Grupo M ________", "1o Grupo N ________", "1o Grupo O ________", "1o Grupo P ________",
"2o Grupo B ________", "2o Grupo A ________", "2o Grupo D ________", "2o Grupo C ________",
"2o Grupo F ________", "2o Grupo E ________", "2o Grupo H ________", "2o Grupo G ________",
"2o Grupo J ________", "2o Grupo I ________", "2o Grupo L ________", "2o Grupo K ________",
"2o Grupo N ________", "2o Grupo M ________", "2o Grupo P ________", "2o Grupo O ________"};
switch (g)
{
case 2:
if (nc == 2)
matamata(g * nc, final2g2c);
if (nc == 3)
matamata(g * nc, final2g3c);
break;
case 3:
if (nc == 2)
matamata(g * nc, final3g2c);
if (nc == 3)
matamata(g * nc, final3g3c);
break;
case 4:
if (nc == 2)
matamata(g * nc, final4g2c);
if (nc == 3)
matamata(g * nc, final4g3c);
break;
case 5:
if (nc == 2)
matamata(g * nc, final5g2c);
if (nc == 3)
matamata(g * nc, final5g3c);
break;
case 6:
if (nc == 2)
matamata(g * nc, final6g2c);
if (nc == 3)
matamata(g * nc, final6g3c);
break;
case 7:
matamata(g * nc, final7g);
break;
case 8:
matamata(g * nc, final8g);
break;
case 12:
matamata(g * nc, final12g);
break;
case 16:
matamata(g * nc, final16g);
break;
}
}
//Arquivo MataMata.c
//Programa Gerador de Tabelas Esportivas
//Função matamata utilizada pelo programa principal.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
//matamata: Função para determinar as partidas de uma eliminatória simples.
// Recebe como parâmetro o número de jogadores e
// o vetor com os jogadores
void matamata (int n, char jogadores[32][20])
{
char tabela[] = "Tabelas.txt";
FILE *arq;
arq = fopen(tabela, "a");
fprintf(arq, "\n+----------------------------------------------------+\n");
fprintf(arq, "\nPARTIDAS ELIMINATÓRIAS: \n");
switch (n)
{
case 2:
fprintf(arq, "\n%20s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+\n", jogadores[1]);
break;
case 3:
fprintf(arq, "\n%18sSF F\n","");
fprintf(arq, "\n%25s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----","");
fprintf(arq, "\n%20s ----+ |", jogadores[2]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+\n", jogadores[1]);
break;
case 4:
fprintf(arq, "\n%20s SF F\n","");
fprintf(arq, "\n%20s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ |", jogadores[3]);
fprintf(arq, "\n%20s |----","");
fprintf(arq, "\n%20s ----+ |", jogadores[2]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+\n", jogadores[1]);
break;
case 5:
fprintf(arq, "\n%18sQF SF F\n","");
fprintf(arq, "\n%25s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[4]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |----", jogadores[3]);
fprintf(arq, "\n%20s | ","");
fprintf(arq, "\n%25s ----+ |", jogadores[2]);
fprintf(arq, "\n%25s |----+","");
fprintf(arq, "\n%25s ----+\n", jogadores[1]);
break;
case 6:
fprintf(arq, "\n%18sQF SF F\n","");
fprintf(arq, "\n%25s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[4]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |", jogadores[3]);
fprintf(arq, "\n%20s |----","");
fprintf(arq, "\n%20s ----+ |", jogadores[2]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[5]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%25s ----+\n", jogadores[1]);
break;
case 7:
fprintf(arq, "\n%18sQF SF F\n","");
fprintf(arq, "\n%25s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[4]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |", jogadores[3]);
fprintf(arq, "\n%20s |---","");
fprintf(arq, "\n%20s ----+ |", jogadores[2]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[5]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ |", jogadores[6]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+\n", jogadores[1]);
break;
case 8:
fprintf(arq, "\n%20s QF SF F\n","");
fprintf(arq, "\n%20s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ |", jogadores[7]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[4]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |", jogadores[3]);
fprintf(arq, "\n%20s |----","");
fprintf(arq, "\n%20s ----+ |", jogadores[2]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[5]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ |", jogadores[6]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+\n", jogadores[1]);
break;
case 9:
//matamata 5
fprintf(arq, "\n%18sOF QF SF F\n","");
fprintf(arq, "\n%25s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[8]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[7]);
fprintf(arq, "\n%20s | |","");
fprintf(arq, "\n%25s ----+ | |", jogadores[4]);
fprintf(arq, "\n%25s |----+ |","");
fprintf(arq, "\n%25s ----+ |----", jogadores[3]);
fprintf(arq, "\n%25s |","");
//matamata 4
fprintf(arq, "\n%25s ----+ |", jogadores[2]);
fprintf(arq, "\n%25s |----+ |","");
fprintf(arq, "\n%25s ----+ | |", jogadores[5]);
fprintf(arq, "\n%25s |----+","");
fprintf(arq, "\n%25s ----+ |", jogadores[6]);
fprintf(arq, "\n%25s |----+","");
fprintf(arq, "\n%25s ----+\n", jogadores[1]);
break;
case 10:
//matamata 5
fprintf(arq, "\n%18sOF QF SF F\n","");
fprintf(arq, "\n%25s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[8]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[7]);
fprintf(arq, "\n%20s | |","");
fprintf(arq, "\n%25s ----+ | |", jogadores[4]);
fprintf(arq, "\n%25s |----+ |","");
fprintf(arq, "\n%25s ----+ |", jogadores[3]);
fprintf(arq, "\n%25s |----","");
//matamata 5
fprintf(arq, "\n%25s ----+ |", jogadores[2]);
fprintf(arq, "\n%25s |----+ |","");
fprintf(arq, "\n%25s ----+ | |", jogadores[5]);
fprintf(arq, "\n%25s | |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[6]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[9]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%25s ----+\n", jogadores[1]);
break;
case 11:
//matamata 5
fprintf(arq, "\n%18sOF QF SF F\n","");
fprintf(arq, "\n%25s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[8]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[7]);
fprintf(arq, "\n%20s | |","");
fprintf(arq, "\n%25s ----+ | |", jogadores[4]);
fprintf(arq, "\n%25s |----+ |","");
fprintf(arq, "\n%25s ----+ |", jogadores[3]);
fprintf(arq, "\n%25s |----","");
//matamata 6
fprintf(arq, "\n%25s ----+ |", jogadores[2]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[10]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | ", jogadores[5]);
fprintf(arq, "\n%20s | |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[6]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[9]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%25s ----+\n", jogadores[1]);
break;
case 12:
//matamata 6
fprintf(arq, "\n%18sOF QF SF F\n","");
fprintf(arq, "\n%25s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[8]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[7]);
fprintf(arq, "\n%20s | |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[4]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[11]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%25s ----+ |", jogadores[3]);
fprintf(arq, "\n%20s |-----","");
//matamata 6
fprintf(arq, "\n%25s ----+ |", jogadores[2]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[10]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | ", jogadores[5]);
fprintf(arq, "\n%20s | |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[6]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[9]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%25s ----+\n", jogadores[1]);
break;
case 13:
//matamata 7
fprintf(arq, "\n%18sOF QF SF F\n","");
fprintf(arq, "\n%25s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[7]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[8]);
fprintf(arq, "\n%20s | |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[4]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[11]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[12]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |-----", jogadores[3]);
fprintf(arq, "\n%20s |","");
//matamata 6
fprintf(arq, "\n%25s ----+ |", jogadores[2]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[10]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | ", jogadores[5]);
fprintf(arq, "\n%20s | |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[6]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[9]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%25s ----+\n", jogadores[1]);
break;
case 14:
//matamata 7
fprintf(arq, "\n%18sOF QF SF F\n","");
fprintf(arq, "\n%25s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[8]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[7]);
fprintf(arq, "\n%20s | |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[4]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[11]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[12]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |", jogadores[3]);
fprintf(arq, "\n%20s |-----","");
//matamata 7
fprintf(arq, "\n%20s ----+ |", jogadores[2]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[13]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[10]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | ", jogadores[5]);
fprintf(arq, "\n%20s | |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[6]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[9]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%25s ----+\n", jogadores[1]);
break;
case 15:
//matamata 7
fprintf(arq, "\n%18sOF QF SF F\n","");
fprintf(arq, "\n%25s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[8]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |", jogadores[7]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[4]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[11]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[12]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |", jogadores[3]);
fprintf(arq, "\n%20s |-----","");
//matamata 8
fprintf(arq, "\n%20s ----+ |", jogadores[2]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[13]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[10]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | ", jogadores[5]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ |", jogadores[6]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[9]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ |", jogadores[14]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+\n", jogadores[1]);
break;
case 16:
//matamata 8
fprintf(arq, "\n%18sOF QF SF F\n","");
fprintf(arq, "\n%20s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ |", jogadores[15]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[8]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |", jogadores[7]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[4]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[11]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[12]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |", jogadores[3]);
fprintf(arq, "\n%20s |-----","");
//matamata 8
fprintf(arq, "\n%20s ----+ |", jogadores[2]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[13]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[10]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | ", jogadores[5]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ |", jogadores[6]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[9]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ |", jogadores[14]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+\n", jogadores[1]);
break;
case 18:
//matamata 9
fprintf(arq, "\n%22s16F OF QF SF F\n","");
fprintf(arq, "\n%25s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[16]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[15]);
fprintf(arq, "\n%20s | |","");
fprintf(arq, "\n%25s ----+ | |", jogadores[8]);
fprintf(arq, "\n%25s |----+ |","");
fprintf(arq, "\n%25s ----+ |----+", jogadores[7]);
fprintf(arq, "\n%25s | |","");
fprintf(arq, "\n%25s ----+ | |", jogadores[4]);
fprintf(arq, "\n%25s |----+ | |","");
fprintf(arq, "\n%25s ----+ | | |", jogadores[11]);
fprintf(arq, "\n%25s |----+ |","");
fprintf(arq, "\n%25s ----+ | |", jogadores[12]);
fprintf(arq, "\n%25s |----+ |","");
fprintf(arq, "\n%25s ----+ |", jogadores[3]);
fprintf(arq, "\n%25s |-----","");
//matamata 9
fprintf(arq, "\n%25s ----+ |", jogadores[2]);
fprintf(arq, "\n%25s |----+ |","");
fprintf(arq, "\n%25s ----+ | |", jogadores[13]);
fprintf(arq, "\n%25s |----+ |","");
fprintf(arq, "\n%25s ----+ | | |", jogadores[10]);
fprintf(arq, "\n%25s |----+ | |","");
fprintf(arq, "\n%25s ----+ | | ", jogadores[5]);
fprintf(arq, "\n%25s |----+","");
fprintf(arq, "\n%25s ----+ |", jogadores[6]);
fprintf(arq, "\n%25s |----+ |","");
fprintf(arq, "\n%25s ----+ | |", jogadores[9]);
fprintf(arq, "\n%20s | |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[14]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[17]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%25s ----+\n", jogadores[1]);
break;
case 24:
//matamata 12
fprintf(arq, "\n%18s16F OF QF SF F\n","");
fprintf(arq, "\n%25s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[16]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[15]);
fprintf(arq, "\n%20s | |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[8]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[23]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%25s ----+ |", jogadores[7]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%25s ----+ | |", jogadores[4]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | | |", jogadores[20]);
fprintf(arq, "\n%20s |----+ | | |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[11]);
fprintf(arq, "\n%20s | | |","");
fprintf(arq, "\n%20s ----+ |----+ |", jogadores[12]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[19]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%25s ----+ |", jogadores[3]);
fprintf(arq, "\n%20s |-----","");
//matamata 12
fprintf(arq, "\n%25s ----+ |", jogadores[2]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[18]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ |----+ |", jogadores[13]);
fprintf(arq, "\n%20s | | |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[10]);
fprintf(arq, "\n%20s |----+ | | |","");
fprintf(arq, "\n%20s ----+ | | | |", jogadores[21]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%25s ----+ | |", jogadores[5]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%25s ----+ |", jogadores[6]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[22]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | ", jogadores[9]);
fprintf(arq, "\n%20s | |","");
fprintf(arq, "\n%20s ----+ |----+", jogadores[14]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[17]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%25s ----+\n", jogadores[1]);
break;
case 32:
//matamata 16
fprintf(arq, "\n%18s16F OF QF SF F\n","");
fprintf(arq, "\n%20s ----+", jogadores[0]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ |", jogadores[31]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[16]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |", jogadores[15]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[8]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[23]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[24]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |", jogadores[7]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ | |", jogadores[4]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[27]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | | |", jogadores[20]);
fprintf(arq, "\n%20s |----+ | | |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[11]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[12]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[19]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[28]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ |", jogadores[3]);
fprintf(arq, "\n%20s |----+","");
//matamata 16
fprintf(arq, "\n%20s ----+ |", jogadores[2]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[29]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[18]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[13]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[10]);
fprintf(arq, "\n%20s |----+ | | |","");
fprintf(arq, "\n%20s ----+ | | | |", jogadores[21]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[26]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[5]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ |", jogadores[6]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[25]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | | |", jogadores[22]);
fprintf(arq, "\n%20s |----+ | |","");
fprintf(arq, "\n%20s ----+ | | ", jogadores[9]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ |", jogadores[14]);
fprintf(arq, "\n%20s |----+ |","");
fprintf(arq, "\n%20s ----+ | |", jogadores[17]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+ |", jogadores[30]);
fprintf(arq, "\n%20s |----+","");
fprintf(arq, "\n%20s ----+\n", jogadores[1]);
break;
}
fclose(arq);
}
- Versão para Windows
- Para rodar no sistema operacional Windows o código fonte deve ser compilado neste sistema. Caso prefira, pode solicitar por email o arquivo executável do programa diretamente do desenvolvedor.