Programa Gerador de Tabelas Esportivas: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
Sem resumo de edição
 
(24 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
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
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
//Arquivo GeradorTabelas.c


//Programa Gerador de Tabelas Esportivas
//Programa Gerador de Tabelas Esportivas
//Desenvolvido por: --~~~~
//Desenvolvido por Evandro Cantú
//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


#include <stdio.h>
#include <stdio.h>
Linha 9: 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,
//        com todos jogando contra todos.
//        com todos jogando contra todos.
//        Recebe como parâmetro o vetor com os jogadores
//        Recebe como parâmetro o número de jogadores e
void rodizio (int n, char jogadores[32][20])
//        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])
{
{
  char tabela[] = "tabela.txt";
  FILE *arq; 
   int c = 0;
   int c = 0;
   int i, j;
   int i, j;
Linha 26: Linha 106:
   fclose(arq);
   fclose(arq);
}
}
 
*/
//matamata: Função para determinar as partidas de uma eliminatória simples ou mata mata.
//          Recebe como parâmetro o vetor com os jogadores
void matamata (int n, char jogadores[32][20]);


//embaralhar: Função para embaralhar um vetor.
//embaralhar: Função para embaralhar um vetor.
//            Recebe como parâmetro o vetor com os jogadores a serem embaralhados.
//            Recebe como parâmetro o vetor com os jogadores
void embaralhar(char vetor[32][20], int tamVetor)
//            a serem embaralhados e o tamanho do vetor.
void embaralhar(char vetor[80][20], int tamVetor)
{
{
   int i;
   int i;
Linha 47: Linha 125:
}
}


int calExtra (int *mod)
int main(int argc, char *argv[])  
{
  if (*mod > 0)
  {
    *mod = *mod - 1;
    return (1);
  }
  return (0);
}
 
void copa (int g, int n, int nc, char jogadores[32][20])
{
  char tabela[] = "tabela.txt";
  FILE *arq;
  char grupos[8][32][20];
  int i, j;
  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úmero de jogadores além dos cabeças de GRUPO
  int extra[8];
  int offset = 0;
  arq = fopen(tabela, "a");
  fprintf(arq, "\nCOMPETIÇÃO NO FORMATO COPA: \n");
  fprintf(arq, "-> %d GRUPOS\n-> %d Classificados cada GRUPO\n", g, nc);
  fprintf(arq, "\nCABEÇAS DE CHAVE:\n");
  for (i = 0; i < g; i++) //Cabeça de GRUPO
  {
    strcpy(grupos[i][0], jogadores[i]);
    fprintf(arq, " %d)%s", i+1, grupos[i][0]);
  }
  fprintf(arq, "\n");
  fclose(arq);
  ng = n - g;   
  for (i = 0; i < ng; i++)            //Retira cabeças de GRUPO
    strcpy(jogadores[i], jogadores[i+g]);
  embaralhar(jogadores, ng);          //Embaralha restantes
  for (j = 0; j < g; j++)              //Monta GRUPOS
  {
    extra[j] = calExtra(&mod);
    for (i = 0; i < ng/g + extra[j]; i++)
      strcpy(grupos[j][i+1], jogadores[i + offset]);     
    offset = offset + ng/g + extra[j];
    arq = fopen(tabela, "a");
    fprintf(arq, "\n+----------------------------------------------------+\n");
    fprintf(arq, "\nGRUPO %d:\n", j + 1);
    for (i = 0; i < n/g + extra[j]; i++)
      fprintf(arq, "%20s\n", grupos[j][i]);
    fclose(arq);
    rodizio (n/g + extra[j], grupos[j]);
  }
  //Finais
  char final2g2c[][20] = {"1o Grupo 1 ________", "1o Grupo 2 ________", "2o Grupo 1 ________", "2o Grupo 2 ________"};
  char final2g3c[][20] = {"1o Grupo 1 ________", "1o Grupo 2 ________", "2o Grupo 1 ________", "2o Grupo 2 ________", "3o Grupo 1 ________", "3o Grupo 2 ________"};
  char final3g2c[][20] = {"1o Grupo 1 ________", "1o Grupo 2 ________", "1o Grupo 3 ________", "2o Grupo 2 ________", "2o Grupo 3 ________", "2o Grupo 1 ________"};
  char final3g3c[][20] = {"1o Grupo 1 ________", "1o Grupo 2 ________", "1o Grupo 3 ________", "2o Grupo 2 ________", "2o Grupo 3 ________", "2o Grupo 1 ________", "3o Grupo 1 ________", "3o Grupo 2 ________", "3o Grupo 3 ________"};
  char final4g2c[][20] = {"1o Grupo 1 ________", "1o Grupo 2 ________", "1o Grupo 3 ________", "1o Grupo 4 ________", "2o Grupo 2 ________", "2o Grupo 1 ________", "2o Grupo 4 ________", "2o Grupo 3 ________"};
  char final4g3c[][20] = {"1o Grupo 1 ________", "1o Grupo 2 ________", "1o Grupo 3 ________", "1o Grupo 4 ________", "2o Grupo 2 ________", "2o Grupo 1 ________", "2o Grupo 4 ________", "2o Grupo 3 ________", "3o Grupo 2 ________", "3o Grupo 1 ________", "3o Grupo 4 ________", "3o Grupo 3 ________"};
  char final6g2c[][20] = {"1o Grupo 1 ________", "1o Grupo 2 ________", "1o Grupo 3 ________", "1o Grupo 4 ________", "1o Grupo 5 ________", "1o Grupo 6 ________", "2o Grupo 4 ________", "2o Grupo 3 ________", "2o Grupo 6 ________", "2o Grupo 5 ________", "2o Grupo 1 ________", "2o Grupo 2 ________"};
  char final8g2c[][20] = {"1o Grupo 1 ________", "1o Grupo 2 ________", "1o Grupo 3 ________", "1o Grupo 4 ________", "1o Grupo 5 ________", "1o Grupo 6 ________", "1o Grupo 7 ________", "1o Grupo 8 ________", "2o Grupo 2 ________", "2o Grupo 1 ________", "2o Grupo 4 ________", "2o Grupo 3 ________", "2o Grupo 6 ________", "2o Grupo 5 ________", "2o Grupo 8 ________", "2o Grupo 7 ________"};
  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 6:
      matamata(g * nc, final6g2c); 
      break;
    case 8:
      matamata(g * nc, final8g2c); 
      break;
  }
}
 
void main(int argc, char *argv[])  
//Arquivo com jogadores pode ser fornecido como parâmetro
//Arquivo com jogadores pode ser fornecido como parâmetro
{
{
   char jogador[20];
   char jogador[20];
   char jogadores[32][20];
   char jogadores[80][20];
   int n = 0;  //número de jogadores cadastrados
   int n = 0;  //número de jogadores cadastrados
   int g = 0;  //número de grupos
   int g = 0;  //número de grupos
   int nc = 2;  //Número de classificados por GRUPO
   int nc = 2;  //Número de classificados por GRUPO
  int r;      //Número de jogadores incluídos pelo RANKING nos GRUPOS
   int i;
   int i;
   char resposta;
   char resposta;
   int tam;
   int tam;
   char arquivo[20];
   char arquivo[20];
  char tabela[] = "tabela.txt";
   if (argc == 1)
   if (argc == 1)
   {
   {
Linha 164: Linha 153:
   FILE *arq;
   FILE *arq;
   arq = fopen(arquivo, "r");
   arq = fopen(arquivo, "r");
   if(arq == NULL)
   if(arq == NULL) {
     printf("\nErro, nao foi possivel abrir o arquivo\n");
     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
   else
    //Monta vetor com os jogadores
     while( (fscanf(arq,"%s\n", jogador))!=EOF )
     while( (fscanf(arq,"%s\n", jogador))!=EOF )
     {
     {
Linha 173: Linha 165:
     }
     }
   fclose(arq);
   fclose(arq);
   arq = fopen(tabela, "w");
   arq = fopen(tabela, "w");
   if(arq == NULL)
   fprintf(arq, "\n+----------------------------------------------------+\n");
    printf("\nErro, nao foi possivel abrir o arquivo\n");
  fprintf(arq, "\n      PROGRAMA GERADOR DE TABELAS ESPORTIVAS\n");
 
  fprintf(arq, "\n+----------------------------------------------------+\n");
   printf("\nJOGADORES CADASTRADOS:\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");
   fprintf(arq, "\nJOGADORES CADASTRADOS:\n");
   for (i=0; i<n; i++)
   for (i=0; i<n; i++)
Linha 186: Linha 188:
   }
   }
   fclose(arq);
   fclose(arq);
   printf("\nESCOLHA FORMATO DO SORTEIO: \n");
   //Pergunta sobre formato da competição
  printf(" (R) Manter ordem de RANKING ou CABEÇAS DE CHAVE (embaralhando demais)\n");
   do
   printf(" (S) SORTEAR e embaralhar TODOS os jogadores\n");
   {
  scanf (" %c",&resposta);
     printf("\nESCOHA FORMATO DA COMPETIÇÃO: \n");
   if (resposta == 's' || resposta == 'S')
    if (n >= 4 && n <= 80)
     embaralhar(jogadores, n);
      printf(" (C) Copa: Grupos + Fase Final\n");
  printf("\nESCOHA FORMATO DA COMPETIÇÃO: \n");
    printf(" (R) Rodízio simples\n");
  printf(" (R) Rodízio simples (Até 5 jogadores)\n");
      if (n <= 16 || n == 24 || n == 32)
  printf(" (E) Eliminatória simples (Até 16 jogadores)\n");
      printf(" (E) Eliminatória simples\n");
  if (n >= 6 && n <= 32)
    scanf (" %c",&resposta);
    printf(" (C) Copa: Grupos + Fase Final (De 6 a 32 jogadores)\n");
  } while (resposta != 'c' && resposta != 'C' &&
  scanf (" %c",&resposta);
          resposta != 'r' && resposta != 'R' &&
          resposta != 'e' && resposta != 'e');
   if (resposta == 'r' || resposta == 'R')
   if (resposta == 'r' || resposta == 'R')
    //Chama função rodizio
     rodizio (n, jogadores);
     rodizio (n, jogadores);
   if (resposta ==  'e' || resposta == 'E')
   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);
     matamata(n, jogadores);
    }
   if (resposta ==  'c' || resposta == 'C')
   if (resposta ==  'c' || resposta == 'C')
   {
   {
     printf("\n  Escolha quantos GRUPOS: \n");
     //Pergunta sobre número de GRUPOS
    printf("  (2) Dois  GRUPOS (Até 10 jogadores)\n");
    do
    printf("  (3) Três  GRUPOS (De 9 a 12 jogadores)\n");
    {
    printf("  (4) Quatro GRUPOS (De 12 a 17 jogadores)\n");
      printf("\n  Escolha quantos GRUPOS: \n");
    printf("  (6) Seis  GRUPOS (De 18 a 24 jogadores)\n");
      if (n >= 4 && n <= 10) {
    printf("  (8) Oito  GRUPOS (De 24 a 32 jogadores)\n");
        printf("  (2) Dois  GRUPOS (%d ", n / 2);
    scanf (" %c",&resposta);
        if (n % 2 != 0) printf("ou %d ", n / 2 + 1);
     if (resposta == '2' || resposta == '3'|| resposta == '4')
        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')
       if (resposta == '2')
Linha 219: Linha 293:
       if (resposta == '4')
       if (resposta == '4')
         g = 4;
         g = 4;
       printf("\n  Escolha número de classificados por GRUPO: \n");
       if (resposta == '5')
      printf("  (2) Dois\n");
        g = 5;
      printf("  (3) Três\n");
      if (resposta == '6')
      scanf (" %c",&resposta);
        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')
       if (resposta == '2')
         nc = 2;
         nc = 2;
Linha 228: Linha 312:
         nc = 3;
         nc = 3;
     }
     }
     if (resposta == '4')
     if (resposta == '7')
       g = 4;
       g = 7;
    if (resposta == '6')
      g = 6;
     if (resposta == '8')
     if (resposta == '8')
       g = 8;
       g = 8;
   copa(g, n, nc, jogadores);
    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
//          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;
  }
}
</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.
//          Recebe como parâmetro o número de jogadores e
//          o vetor com os jogadores
void matamata (int n, char jogadores[32][20])
void matamata (int n, char jogadores[32][20])
{
{
   char tabela[] = "tabela.txt";
   char tabela[] = "Tabelas.txt";
   FILE *arq;
   FILE *arq;
   arq = fopen(tabela, "a");
   arq = fopen(tabela, "a");
Linha 248: Linha 615:
   {
   {
     case 2:
     case 2:
       fprintf(arq, "\n%20s ----+", jogadores[0]);       //1---+
       fprintf(arq, "\n%20s ----+", jogadores[0]);
       fprintf(arq, "\n                         |----+"); //    |----+
       fprintf(arq, "\n%20s    |----+","");
       fprintf(arq, "\n%20s ----+\n", jogadores[1]);     //2---+
       fprintf(arq, "\n%20s ----+\n", jogadores[1]);
       break;
       break;
     case 3:
     case 3:
       fprintf(arq, "\n%20s ---------+", jogadores[0]);       //1-------+
       fprintf(arq, "\n%18sSF      F\n","");
       fprintf(arq, "\n                             |----"); //        |---
      fprintf(arq, "\n%25s ----+", jogadores[0]);
       fprintf(arq, "\n%20s ----+    |", jogadores[1]);       //2---+  |
       fprintf(arq, "\n%20s          |----","");
       fprintf(arq, "\n                         |----+");     //    |----+
       fprintf(arq, "\n%20s ----+    |", jogadores[2]);
       fprintf(arq, "\n%20s ----+\n", jogadores[2]);         //3---+
       fprintf(arq, "\n%20s    |----+","");
       fprintf(arq, "\n%20s ----+\n", jogadores[1]);
       break;
       break;
     case 4:
     case 4:
       fprintf(arq, "\n%20s ----+", jogadores[0]);             //1---+
      fprintf(arq, "\n%20s  SF    F\n","");
       fprintf(arq, "\n                         |----+");       //    |---+
       fprintf(arq, "\n%20s ----+", jogadores[0]);
       fprintf(arq, "\n%20s ----+    |", jogadores[3]);         //4---+  |
       fprintf(arq, "\n%20s    |----+","");
       fprintf(arq, "\n                             |----");   //        |---
       fprintf(arq, "\n%20s ----+    |", jogadores[3]);
       fprintf(arq, "\n%20s ----+    |", jogadores[1]);         //2---+  |
       fprintf(arq, "\n%20s          |----","");
       fprintf(arq, "\n                         |----+");       //    |---+
       fprintf(arq, "\n%20s ----+    |", jogadores[2]);
       fprintf(arq, "\n%20s ----+\n", jogadores[2]);           //3---+
       fprintf(arq, "\n%20s    |----+","");
       fprintf(arq, "\n%20s ----+\n", jogadores[1]);
       break;
       break;
     case 5:
     case 5:
       fprintf(arq, "\n%20s ---------+", jogadores[0]);
       fprintf(arq, "\n%18sQF        SF    F\n","");
       fprintf(arq, "\n                             |----+");
      fprintf(arq, "\n%25s ----+", jogadores[0]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[3]);
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[4]);
       fprintf(arq, "\n%20s ----+        |----\n", jogadores[4]);
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "                                   | ");   
       fprintf(arq, "\n%20s ----+        |----", jogadores[3]);
       fprintf(arq, "\n%20s ----+         |", jogadores[1]);
       fprintf(arq, "\n%20s              | ","");   
       fprintf(arq, "\n                         |---------+");
       fprintf(arq, "\n%25s ----+   |", jogadores[2]);
       fprintf(arq, "\n%20s ----+\n", jogadores[2]);
       fprintf(arq, "\n%25s    |----+","");
       fprintf(arq, "\n%25s ----+\n", jogadores[1]);
       break;
       break;
     case 6:
     case 6:
       fprintf(arq, "\n%20s ---------+", jogadores[0]);
       fprintf(arq, "\n%18sQF        SF    F\n","");
       fprintf(arq, "\n                             |----+");
      fprintf(arq, "\n%25s ----+", jogadores[0]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[3]);
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[4]);
       fprintf(arq, "\n%20s ----+        |----\n", jogadores[4]);
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "                                   | ");
       fprintf(arq, "\n%20s ----+        |", jogadores[3]);
       fprintf(arq, "\n%20s ---------+   |", jogadores[1]);
       fprintf(arq, "\n%20s              |----","");
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s ----+         |", jogadores[2]);
       fprintf(arq, "\n%20s ----+    |", jogadores[2]);
       fprintf(arq, "\n%20s    |----+   |","");
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%20s ----+   |   |", jogadores[5]);
       fprintf(arq, "\n%20s ----+       \n", jogadores[5]);
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n%25s ----+\n", jogadores[1]);
 
       break;
       break;
     case 7:
     case 7:
       fprintf(arq, "\n%20s ---------+", jogadores[0]);
       fprintf(arq, "\n%18sQF        SF    F\n","");
       fprintf(arq, "\n                             |----+");
      fprintf(arq, "\n%25s ----+", jogadores[0]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[3]);
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[4]);
       fprintf(arq, "\n%20s ----+        |\n", jogadores[4]);
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "                                   |---");
       fprintf(arq, "\n%20s ----+        |", jogadores[3]);
       fprintf(arq, "\n%20s ----+        |", jogadores[1]);
       fprintf(arq, "\n%20s              |---","");
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s ----+        |", jogadores[2]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[6]);
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[5]);
       fprintf(arq, "\n%20s ----+    |", jogadores[2]);
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%20s ----+    |", jogadores[6]);
       fprintf(arq, "\n%20s ----+\n", jogadores[5]);
       fprintf(arq, "\n%20s    |----+","");
       fprintf(arq, "\n%20s ----+\n", jogadores[1]);
       break;
       break;
     case 8:
     case 8:
      fprintf(arq, "\n%20s  QF  SF    F\n","");
       fprintf(arq, "\n%20s ----+", jogadores[0]);
       fprintf(arq, "\n%20s ----+", jogadores[0]);
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%20s    |----+","");
       fprintf(arq, "\n%20s ----+    |", jogadores[7]);
       fprintf(arq, "\n%20s ----+    |", jogadores[7]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[3]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[4]);
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "\n%20s ----+        |\n", jogadores[4]);
       fprintf(arq, "\n%20s ----+        |", jogadores[3]);
       fprintf(arq, "                                   |----");
       fprintf(arq, "\n%20s              |----","");
       fprintf(arq, "\n%20s ----+        |", jogadores[1]);
       fprintf(arq, "\n%20s ----+        |", jogadores[2]);
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[6]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[5]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n%20s ----+    |", jogadores[2]);
       fprintf(arq, "\n%20s ----+    |", jogadores[6]);
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%20s    |----+","");
       fprintf(arq, "\n%20s ----+\n", jogadores[5]);
       fprintf(arq, "\n%20s ----+\n", jogadores[1]);
       break;
       break;
     case 9:
     case 9:
       //matamata 5
       //matamata 5
       fprintf(arq, "\n%20s ---------+", jogadores[0]);
       fprintf(arq, "\n%18sOF        QF  SF    F\n","");
       fprintf(arq, "\n                             |----+");
      fprintf(arq, "\n%25s ----+", jogadores[0]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[7]);
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[8]);
       fprintf(arq, "\n%20s ----+        |----\n", jogadores[8]);
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "                                   | ");   
       fprintf(arq, "\n%20s ----+        |----+", jogadores[7]);
       fprintf(arq, "\n%20s ----+         |", jogadores[3]);
       fprintf(arq, "\n%20s              |    |","");   
       fprintf(arq, "\n                         |---------+");
       fprintf(arq, "\n%25s ----+   |    |", jogadores[4]);
       fprintf(arq, "\n%20s ----+\n", jogadores[4]);
       fprintf(arq, "\n%25s    |----+   |","");
       fprintf(arq, "\n%25s ----+         |----", jogadores[3]);
      fprintf(arq, "\n%25s              |","");
       //matamata 4
       //matamata 4
       fprintf(arq, "\n%20s ----+", jogadores[1]);  
       fprintf(arq, "\n%25s ----+         |", jogadores[2]);
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%25s    |----+   |","");
       fprintf(arq, "\n%20s ----+    |", jogadores[6]);
       fprintf(arq, "\n%25s ----+   |   |", jogadores[5]);
       fprintf(arq, "\n                             |----");
       fprintf(arq, "\n%25s          |----+","");
       fprintf(arq, "\n%20s ----+    |", jogadores[2]);  
       fprintf(arq, "\n%25s ----+    |", jogadores[6]);
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%25s    |----+","");
       fprintf(arq, "\n%20s ----+\n", jogadores[5]);
       fprintf(arq, "\n%25s ----+\n", jogadores[1]);
       break;
       break;
     case 10:
     case 10:
       //matamata 5
       //matamata 5
       fprintf(arq, "\n%20s ---------+", jogadores[0]);
       fprintf(arq, "\n%18sOF        QF  SF    F\n","");
       fprintf(arq, "\n                             |----+");
      fprintf(arq, "\n%25s ----+", jogadores[0]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[7]);
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[8]);
       fprintf(arq, "\n%20s ----+        |----", jogadores[8]);
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "\n                                   | ");   
       fprintf(arq, "\n%20s ----+        |----+", jogadores[7]);
       fprintf(arq, "\n%20s ----+         |", jogadores[3]);
       fprintf(arq, "\n%20s              |    |","");   
       fprintf(arq, "\n                         |---------+");
       fprintf(arq, "\n%25s ----+   |    |", jogadores[4]);
       fprintf(arq, "\n%20s ----+\n", jogadores[4]);
       fprintf(arq, "\n%25s    |----+    |","");
      fprintf(arq, "\n%25s ----+         |", jogadores[3]);
       fprintf(arq, "\n%25s              |----","");
       //matamata 5
       //matamata 5
       fprintf(arq, "\n%20s ---------+", jogadores[1]);
       fprintf(arq, "\n%25s ----+         |", jogadores[2]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%25s    |----+   |","");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[6]);
       fprintf(arq, "\n%25s ----+    |    |", jogadores[5]);
       fprintf(arq, "\n                         |----+   |");
       fprintf(arq, "\n%25s          |    |","");
       fprintf(arq, "\n%20s ----+        |----", jogadores[9]);
       fprintf(arq, "\n%20s ----+        |----+", jogadores[6]);
       fprintf(arq, "\n                                   | ");
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "\n%20s ----+         |", jogadores[2]);
       fprintf(arq, "\n%20s ----+   |    |", jogadores[9]);
       fprintf(arq, "\n                         |---------+");
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n%20s ----+\n", jogadores[5]);
       fprintf(arq, "\n%25s ----+\n", jogadores[1]);
       break;
       break;
     case 11:
     case 11:
       //matamata 5
       //matamata 5
       fprintf(arq, "\n%20s ---------+", jogadores[0]);
       fprintf(arq, "\n%18sOF        QF  SF    F\n","");
       fprintf(arq, "\n                             |----+");
      fprintf(arq, "\n%25s ----+", jogadores[0]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[7]);
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[8]);
       fprintf(arq, "\n%20s ----+        |----", jogadores[8]);
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "\n                                   | ");   
       fprintf(arq, "\n%20s ----+        |----+", jogadores[7]);
       fprintf(arq, "\n%20s ----+         |", jogadores[3]);
       fprintf(arq, "\n%20s              |    |","");   
       fprintf(arq, "\n                         |---------+");
       fprintf(arq, "\n%25s ----+   |    |", jogadores[4]);
       fprintf(arq, "\n%20s ----+\n", jogadores[4]);
       fprintf(arq, "\n%25s    |----+    |","");
      fprintf(arq, "\n%25s ----+         |", jogadores[3]);
       fprintf(arq, "\n%25s              |----","");
       //matamata 6
       //matamata 6
       fprintf(arq, "\n%20s ---------+", jogadores[1]);
       fprintf(arq, "\n%25s ----+         |", jogadores[2]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s          |----+   |","");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[6]);
       fprintf(arq, "\n%20s ----+   |   |    |", jogadores[10]);
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s    |----+    |   |","");
       fprintf(arq, "\n%20s ----+        |----", jogadores[9]);
       fprintf(arq, "\n%20s ----+        |   | ", jogadores[5]);
       fprintf(arq, "\n                                   | ");   
       fprintf(arq, "\n%20s              |    |","");   
       fprintf(arq, "\n%20s ---------+   |", jogadores[2]);
       fprintf(arq, "\n%20s ----+        |----+", jogadores[6]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s    |----+   |","");
       fprintf(arq, "\n%20s ----+    |", jogadores[5]);
       fprintf(arq, "\n%20s ----+   |   |", jogadores[9]);
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n%20s ----+       \n", jogadores[10]);
       fprintf(arq, "\n%25s ----+\n", jogadores[1]);
       break;
       break;
     case 12:
     case 12:
       //matamata 6
       //matamata 6
       fprintf(arq, "\n%20s ---------+", jogadores[0]);
       fprintf(arq, "\n%18sOF        QF  SF    F\n","");
       fprintf(arq, "\n                             |----+");
      fprintf(arq, "\n%25s ----+", jogadores[0]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[7]);
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[8]);
       fprintf(arq, "\n%20s ----+        |----", jogadores[8]);
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "\n                                   |");
       fprintf(arq, "\n%20s ----+        |----+", jogadores[7]);
       fprintf(arq, "\n%20s ---------+    |", jogadores[3]);
       fprintf(arq, "\n%20s              |    |","");
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s ----+         |   |", jogadores[4]);
       fprintf(arq, "\n%20s ----+    |", jogadores[4]);
       fprintf(arq, "\n%20s    |----+   |    |","");
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%20s ----+   |    |   |", jogadores[11]);
       fprintf(arq, "\n%20s ----+\n", jogadores[11]);
       fprintf(arq, "\n%20s          |----+   |","");
       fprintf(arq, "\n%25s ----+         |", jogadores[3]);
      fprintf(arq, "\n%20s                    |-----",""); 
       //matamata 6
       //matamata 6
       fprintf(arq, "\n%20s ---------+", jogadores[1]);
       fprintf(arq, "\n%25s ----+         |", jogadores[2]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s          |----+   |","");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[6]);
       fprintf(arq, "\n%20s ----+   |   |    |", jogadores[10]);
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s    |----+    |   |","");
       fprintf(arq, "\n%20s ----+        |----", jogadores[9]);
       fprintf(arq, "\n%20s ----+        |   | ", jogadores[5]);
       fprintf(arq, "\n                                   | ");   
       fprintf(arq, "\n%20s              |    |","");   
       fprintf(arq, "\n%20s ---------+   |", jogadores[2]);
       fprintf(arq, "\n%20s ----+        |----+", jogadores[6]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s    |----+   |","");
       fprintf(arq, "\n%20s ----+    |", jogadores[5]);
       fprintf(arq, "\n%20s ----+   |   |", jogadores[9]);
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n%20s ----+       \n", jogadores[10]);
       fprintf(arq, "\n%25s ----+\n", jogadores[1]);
       break;
       break;
     case 13:
     case 13:
       //matamata 7
       //matamata 7
       fprintf(arq, "\n%20s ---------+", jogadores[0]);
       fprintf(arq, "\n%18sOF        QF  SF    F\n","");
       fprintf(arq, "\n                             |----+");
      fprintf(arq, "\n%25s ----+", jogadores[0]);
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[7]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[7]);
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "\n%20s ----+        |", jogadores[8]);
       fprintf(arq, "\n%20s ----+        |----+", jogadores[8]);
       fprintf(arq, "\n                                   |---");
       fprintf(arq, "\n%20s              |   |","");
       fprintf(arq, "\n%20s ----+        |", jogadores[3]);
       fprintf(arq, "\n%20s ----+        |    |", jogadores[4]);
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s    |----+    |   |","");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[12]);
       fprintf(arq, "\n%20s ----+   |   |    |", jogadores[11]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s          |----+   |","");
       fprintf(arq, "\n%20s ----+    |", jogadores[4]);
       fprintf(arq, "\n%20s ----+    |        |", jogadores[12]);
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%20s    |----+         |","");
       fprintf(arq, "\n%20s ----+\n", jogadores[11]);
       fprintf(arq, "\n%20s ----+             |-----", jogadores[3]);
      fprintf(arq, "\n%20s                    |",""); 
       //matamata 6
       //matamata 6
       fprintf(arq, "\n%20s ---------+", jogadores[1]);
       fprintf(arq, "\n%25s ----+         |", jogadores[2]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s          |----+   |","");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[6]);
       fprintf(arq, "\n%20s ----+   |   |    |", jogadores[10]);
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s    |----+    |   |","");
       fprintf(arq, "\n%20s ----+        |----", jogadores[9]);
       fprintf(arq, "\n%20s ----+        |   | ", jogadores[5]);
       fprintf(arq, "\n                                   | ");   
       fprintf(arq, "\n%20s              |    |","");   
       fprintf(arq, "\n%20s ---------+   |", jogadores[2]);
       fprintf(arq, "\n%20s ----+        |----+", jogadores[6]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s    |----+   |","");
       fprintf(arq, "\n%20s ----+    |", jogadores[5]);
       fprintf(arq, "\n%20s ----+   |   |", jogadores[9]);
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n%20s ----+     \n ", jogadores[10]);
       fprintf(arq, "\n%25s ----+\n", jogadores[1]);
       break;
       break;
     case 14:
     case 14:
       //matamata 7
       //matamata 7
       fprintf(arq, "\n%20s ---------+", jogadores[0]);
       fprintf(arq, "\n%18sOF        QF  SF    F\n","");
       fprintf(arq, "\n                             |----+");
      fprintf(arq, "\n%25s ----+", jogadores[0]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[7]);
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[8]);
       fprintf(arq, "\n%20s ----+        |", jogadores[8]);
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "\n                                   |---");
       fprintf(arq, "\n%20s ----+        |----+", jogadores[7]);
       fprintf(arq, "\n%20s ----+        |", jogadores[3]);
       fprintf(arq, "\n%20s              |    |","");
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s ----+        |    |", jogadores[4]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[12]);
       fprintf(arq, "\n%20s    |----+    |   |","");
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s ----+   |   |    |", jogadores[11]);
       fprintf(arq, "\n%20s ----+    |", jogadores[4]);
       fprintf(arq, "\n%20s          |----+   |","");
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%20s ----+    |        |", jogadores[12]);
       fprintf(arq, "\n%20s ----+\n", jogadores[11]);
       fprintf(arq, "\n%20s    |----+         |","");
       fprintf(arq, "\n%20s ----+             |", jogadores[3]);
      fprintf(arq, "\n%20s                    |-----",""); 
       //matamata 7
       //matamata 7
       fprintf(arq, "\n%20s ---------+", jogadores[1]);
       fprintf(arq, "\n%20s ----+             |", jogadores[2]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s    |----+         |","");
       fprintf(arq, "\n%20s ----+    |   |", jogadores[6]);
       fprintf(arq, "\n%20s ----+    |         |", jogadores[13]);
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s          |----+    |","");
       fprintf(arq, "\n%20s ----+         |", jogadores[9]);
       fprintf(arq, "\n%20s ----+   |    |    |", jogadores[10]);
       fprintf(arq, "\n                                   |---");
       fprintf(arq, "\n%20s    |----+    |    |","");
       fprintf(arq, "\n%20s ----+        |", jogadores[2]);
       fprintf(arq, "\n%20s ----+        |    | ", jogadores[5]);
       fprintf(arq, "\n                         |----+   |");
       fprintf(arq, "\n%20s              |    |","");
       fprintf(arq, "\n%20s ----+   |    |", jogadores[13]);
       fprintf(arq, "\n%20s ----+         |----+", jogadores[6]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s    |----+   |","");
       fprintf(arq, "\n%20s ----+    |", jogadores[5]);
       fprintf(arq, "\n%20s ----+   |   |", jogadores[9]);
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n%20s ----+\n", jogadores[10]);
       fprintf(arq, "\n%25s ----+\n", jogadores[1]);
       break;
       break;
     case 15:
     case 15:
       //matamata 7
       //matamata 7
       fprintf(arq, "\n%20s ---------+", jogadores[0]);
       fprintf(arq, "\n%18sOF        QF  SF    F\n","");
       fprintf(arq, "\n                             |----+");
      fprintf(arq, "\n%25s ----+", jogadores[0]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[7]);
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[8]);
       fprintf(arq, "\n%20s ----+        |", jogadores[8]);
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "\n                                   |---");
       fprintf(arq, "\n%20s ----+        |", jogadores[7]);
       fprintf(arq, "\n%20s ----+        |", jogadores[3]);
       fprintf(arq, "\n%20s              |----+","");
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s ----+        |    |", jogadores[4]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[12]);
       fprintf(arq, "\n%20s    |----+   |   |","");
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s ----+   |   |    |", jogadores[11]);
       fprintf(arq, "\n%20s ----+    |", jogadores[4]);
       fprintf(arq, "\n%20s          |----+   |","");
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%20s ----+    |        |", jogadores[12]);
       fprintf(arq, "\n%20s ----+\n", jogadores[11]);
       fprintf(arq, "\n%20s    |----+         |","");
       fprintf(arq, "\n%20s ----+             |", jogadores[3]);
      fprintf(arq, "\n%20s                    |-----",""); 
       //matamata 8
       //matamata 8
       fprintf(arq, "\n%20s ----+", jogadores[1]);
       fprintf(arq, "\n%20s ----+             |", jogadores[2]);
       fprintf(arq, "\n                         |----+");
      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 ----+    |", jogadores[14]);
      fprintf(arq, "\n                              |----+");
       fprintf(arq, "\n%20s     |----+","");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[6]);
       fprintf(arq, "\n%20s ----+\n", jogadores[1]);
      fprintf(arq, "\n                        |----+    |");
      fprintf(arq, "\n%20s ----+         |", jogadores[9]);
      fprintf(arq, "\n                                  |----");
      fprintf(arq, "\n%20s ----+        |", jogadores[2]);
      fprintf(arq, "\n                        |----+    |");
      fprintf(arq, "\n%20s ----+    |    |", jogadores[13]);
      fprintf(arq, "\n                              |----+");
      fprintf(arq, "\n%20s ----+    |", jogadores[5]);
      fprintf(arq, "\n                        |----+");
       fprintf(arq, "\n%20s ----+\n", jogadores[10]);
       break;
       break;
     case 16:
     case 16:
       //matamata 8
       //matamata 8
      fprintf(arq, "\n%18sOF        QF  SF    F\n","");
       fprintf(arq, "\n%20s ----+", jogadores[0]);
       fprintf(arq, "\n%20s ----+", jogadores[0]);
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%20s    |----+","");
       fprintf(arq, "\n%20s ----+    |", jogadores[15]);
       fprintf(arq, "\n%20s ----+    |", jogadores[15]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[7]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[8]);
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "\n%20s ----+        |", jogadores[8]);
       fprintf(arq, "\n%20s ----+        |", jogadores[7]);
       fprintf(arq, "\n                                   |----");
       fprintf(arq, "\n%20s              |----+","");
       fprintf(arq, "\n%20s ----+        |", jogadores[3]);
       fprintf(arq, "\n%20s ----+        |    |", jogadores[4]);
       fprintf(arq, "\n                         |----+    |");
       fprintf(arq, "\n%20s    |----+    |   |","");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[12]);
       fprintf(arq, "\n%20s ----+   |   |    |", jogadores[11]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s          |----+   |","");
       fprintf(arq, "\n%20s ----+    |", jogadores[4]);
       fprintf(arq, "\n%20s ----+    |        |", jogadores[12]);
       fprintf(arq, "\n                         |----+");
       fprintf(arq, "\n%20s    |----+         |","");
       fprintf(arq, "\n%20s ----+\n", jogadores[11]);
       fprintf(arq, "\n%20s ----+             |", jogadores[3]);
      fprintf(arq, "\n%20s                    |-----",""); 
       //matamata 8
       //matamata 8
       fprintf(arq, "\n%20s ----+", jogadores[1]);
       fprintf(arq, "\n%20s ----+             |", jogadores[2]);
       fprintf(arq, "\n                         |----+");
      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 ----+    |", jogadores[14]);
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s    |----+","");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[6]);
      fprintf(arq, "\n%20s ----+\n", jogadores[1]);
       fprintf(arq, "\n                        |----+    |");
      break;
       fprintf(arq, "\n%20s ----+        |", jogadores[9]);
    case 18:
       fprintf(arq, "\n                                   |----");
      //matamata 9
       fprintf(arq, "\n%20s ----+        |", jogadores[2]);
      fprintf(arq, "\n%22s16F  OF  QF  SF    F\n","");
       fprintf(arq, "\n                         |----+    |");
      fprintf(arq, "\n%25s ----+", jogadores[0]);
       fprintf(arq, "\n%20s ----+    |    |", jogadores[13]);
      fprintf(arq, "\n%20s          |----+","");
       fprintf(arq, "\n                             |----+");
       fprintf(arq, "\n%20s ----+    |    |", jogadores[16]);
       fprintf(arq, "\n%20s ----+    |", jogadores[5]);
      fprintf(arq, "\n%20s    |----+    |","");
       fprintf(arq, "\n                         |----+");
      fprintf(arq, "\n%20s ----+        |----+", jogadores[15]);
       fprintf(arq, "\n%20s ----+\n", jogadores[10]);
      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;
       break;
  }
   fclose(arq);
   fclose(arq);
  }
}
}
</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.
</syntaxhighlight>


----
----


[[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.