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
Sem resumo de edição
Linha 1: Linha 1:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
//Programa Gerador de Tabelas Esportivas
//Desenvolvido por Evandro Cantú
//Instituto Federal do Paraná
//Foz do Iguaçu, outubro 2016
//Atualização: jun/2017


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>


+----------------------------------------------------+
//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[32][20])
{
  char tabela[] = "Tabela.txt";
  FILE *arq; 
  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);
}


      PROGRAMA GERADOR DE TABELAS ESPORTIVAS
//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]);


+----------------------------------------------------+
//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[32][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);
  }
}


            Data da Competição: Jun  7 2017
//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 grupos (g), número de
//      jogadores (n), número de classificados por grupo (nc) e
//      o vetor com os jogadores.
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 GRUPO e pré alocados pelo RANKING:\n");
  for (i = 0; i < g; i++)
  {
    fprintf(arq, "            Grupo %d", i+1);
  }
  fprintf(arq, "\n");
  //Os cabeças de chave são incluídos na primeira posição de cada grupo.
  for (i = 0; i < g; i++) //Cabeça de GRUPO
  {
    strcpy(grupos[i][0], jogadores[i]);
    fprintf(arq, "%20s", grupos[i][0]);
  }
  fprintf(arq, "\n");
  //Os próximos do ranking são incluídos na segunda posição de cada grupo,
  //invertendo a ordem de inclusão nos grupos.
  for (i = 0; i < g; i++) //Segundo integrante do GRUPO
  {
    strcpy(grupos[i][1], jogadores[2 * g - 1 - i]);
    fprintf(arq, "%20s", grupos[i][1]);
  }
  fprintf(arq, "\n");
  fclose(arq);
  ng = n - 2 * g; //Número total de jogadores além dos cabeças de GRUPO
                  //e dos próximos do RANKING
  //Retira cabeças de GRUPO e próximos do RANKING do vetor dos jogadores,
  //pois já foram incluídos nos respectivos grupos.
  for (i = 0; i < ng; i++)           
    strcpy(jogadores[i], jogadores[i + 2 * g]);
  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 jogadores nos grupos, além do cabeça de GRUPO
      strcpy(grupos[j][i+2], 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+----------------------------------------------------+\n");
    fprintf(arq, "\n+-----------------------------------------------+");
    fprintf(arq, "\n| GRUPO %d: Jogadores | Vitórias | Saldo de Sets |", j + 1);
    fprintf(arq, "\n+--------------------+----------+---------------+\n");
    //Imprime os membros de cada GRUPO
    for (i = 0; i < n/g + extra[j]; i++)
      fprintf(arq, "|%19s |          |              |\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 stgrings que definem a ordem dos
  //confrontos para as Finais, considerando o número de grupos (g) e
  //o número de classificados (c) por grupo.
  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;
  }
}


JOGADORES CADASTRADOS:
int main(int argc, char *argv[])
1: AA                 
//Arquivo com jogadores pode ser fornecido como parâmetro
2: BB                 
{
3: CC                 
  char jogador[20];
4: DD                 
  char jogadores[32][20];
5: EE                 
  int n = 0;  //número de jogadores cadastrados
6: FF                 
  int g = 0;  //número de grupos
7: GG                 
  int nc = 2;  //Número de classificados por GRUPO
8: HH                 
  int i;
9: II                 
  char resposta;
10: JJ                 
  int tam;
  char arquivo[20];
  char tabela[] = "Tabela.txt";
  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);


COMPETIÇÃO NO FORMATO COPA:
  arq = fopen(tabela, "w");
-> 3 GRUPOS
-> 3 Classificados cada GRUPO


Cabeças de GRUPO e pré alocados pelo RANKING:
  fprintf(arq, "\n+----------------------------------------------------+\n");
            Grupo 1            Grupo 2             Grupo 3
  fprintf(arq, "\n      PROGRAMA GERADOR DE TABELAS ESPORTIVAS\n");
                  AA                  BB                  CC
  fprintf(arq, "\n+----------------------------------------------------+\n");
                  FF                  EE                  DD
  fprintf(arq, "\n            Data da Competição: %s \n", __DATE__);
  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 do sorteio
  printf("\nESCOLHA FORMATO DO SORTEIO: \n");
  printf(" (R) Manter ordem de RANKING ou CABEÇAS DE CHAVE (embaralhando demais)\n");
  printf(" (S) SORTEAR e embaralhar TODOS os jogadores\n");
  scanf (" %c",&resposta);
  while (resposta != 's' && resposta != 'S' &&
        resposta != 'r' && resposta != 'R') {
    printf("\nESCOLHA FORMATO DO SORTEIO: \n");
    printf(" (R) Manter ordem de RANKING ou CABEÇAS DE CHAVE (embaralhando demais)\n");
    printf(" (S) SORTEAR e embaralhar TODOS os jogadores\n");
    scanf (" %c",&resposta);}
  if (resposta == 's' || resposta == 'S')
    embaralhar(jogadores, n);
  //Pergunta sobre formato da competição
  printf("\nESCOHA FORMATO DA COMPETIÇÃO: \n");
  if (n >= 6 && n <= 32)
    printf(" (C) Copa: Grupos + Fase Final (De 6 a 32 jogadores)\n");
  printf(" (R) Rodízio simples (Até 5 jogadores)\n");
  printf(" (E) Eliminatória simples (Até 16 jogadores)\n");
  scanf (" %c",&resposta);
  while (resposta != 'c' && resposta != 'C' &&
        resposta != 'r' && resposta != 'R' &&
        resposta != 'e' && resposta != 'e') {
    if (n >= 6 && n <= 32)
      printf(" (C) Copa: Grupos + Fase Final (De 6 a 32 jogadores)\n");
    printf(" (R) Rodízio simples (Até 5 jogadores)\n");
    printf(" (E) Eliminatória simples (Até 16 jogadores)\n"); 
    scanf (" %c",&resposta);
  }
  if (resposta == 'r' || resposta == 'R')
    //Chama função rodizio
    rodizio (n, jogadores);
  if (resposta ==  'e' || resposta == 'E')
    //Chama função matamata
    matamata(n, jogadores);
  if (resposta ==  'c' || resposta == 'C')
  {
    //Pergunta sobre número de GRUPOS
    printf("\n  Escolha quantos GRUPOS: \n");
    printf("  (2) Dois  GRUPOS (Até 10 jogadores)\n");
    printf("  (3) Três  GRUPOS (De 9 a 12 jogadores)\n");
    printf("  (4) Quatro GRUPOS (De 12 a 17 jogadores)\n");
    printf("  (6) Seis  GRUPOS (De 18 a 24 jogadores)\n");
    printf("  (8) Oito  GRUPOS (De 24 a 32 jogadores)\n");
    scanf (" %c",&resposta);
    while (resposta != '2' && resposta != '3' &&
          resposta != '4' && resposta != '6' &&
          resposta != '8') {
      printf("\n  Escolha quantos GRUPOS: \n");
      printf("  (2) Dois  GRUPOS (Até 10 jogadores)\n");
      printf("  (3) Três  GRUPOS (De 9 a 12 jogadores)\n");
      printf("  (4) Quatro GRUPOS (De 12 a 17 jogadores)\n");
      printf("  (6) Seis  GRUPOS (De 18 a 24 jogadores)\n");
      printf("  (8) Oito  GRUPOS (De 24 a 32 jogadores)\n");
      scanf (" %c",&resposta);}
    if (resposta == '2' || resposta == '3'|| resposta == '4')
    {
      if (resposta == '2')
        g = 2;
      if (resposta == '3')
        g = 3;
      if (resposta == '4')
        g = 4;
      //Pergunta sobre número de classificados por GRUPO
      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'){
        printf("\n  Escolha número de classificados por GRUPO: \n");
        printf("  (2) Dois\n");
        printf("  (3) Três\n");
        scanf (" %c",&resposta);}
      if (resposta == '2')
        nc = 2;
      if (resposta == '3')
        nc = 3;
    }
    if (resposta == '4')
      g = 4;
    if (resposta == '6')
      g = 6;
    if (resposta == '8')
      g = 8;
  //Chama função copa
  copa(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");
  fclose(arq);
  return(0);
}


+----------------------------------------------------+
//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
| GRUPO 1: Jogadores | Vitórias | Saldo de Sets |
void matamata (int n, char jogadores[32][20])
+--------------------+----------+---------------+
{
|                AA |         |              |
  char tabela[] = "Tabela.txt";
|                FF |         |              |
  FILE *arq;
|                GG |          |              |
  arq = fopen(tabela, "a");
|                HH |          |              |
  fprintf(arq, "\n+----------------------------------------------------+\n");
+-----------------------------------------------+
  fprintf(arq, "\nPARTIDAS ELIMINATÓRIAS: \n");
 
  switch (n)
PARTIDAS DO RODÍZIO:
  {
1:                  AA _ x _ FF                 
    case 2:
2:                  AA _ x _ GG                 
      fprintf(arq, "\n%20s ----+", jogadores[0]); 
3:                  AA _ x _ HH                 
      fprintf(arq, "\n%20s    |----+","");
4:                  FF _ x _ GG                 
      fprintf(arq, "\n%20s ----+\n", jogadores[1]);
5:                  FF _ x _ HH                 
      break;
6:                  GG _ x _ HH                 
    case 3:
 
      fprintf(arq, "\n%18sSF      F\n","");
+----------------------------------------------------+
      fprintf(arq, "\n%25s ----+", jogadores[0]);
 
      fprintf(arq, "\n%20s          |----","");
+-----------------------------------------------+
      fprintf(arq, "\n%20s ----+    |", jogadores[2]);
| GRUPO 2: Jogadores | Vitórias | Saldo de Sets |
      fprintf(arq, "\n%20s    |----+","");
+--------------------+----------+---------------+
      fprintf(arq, "\n%20s ----+\n", jogadores[1]);
|                BB |          |              |
      break;
|                EE |          |              |
    case 4:
|                II |          |              |
      fprintf(arq, "\n%20s  SF    F\n","");
+-----------------------------------------------+
      fprintf(arq, "\n%20s ----+", jogadores[0]);
 
      fprintf(arq, "\n%20s    |----+","");
PARTIDAS DO RODÍZIO:
      fprintf(arq, "\n%20s ----+   |", jogadores[3]);
1:                  BB _ x _ EE                 
      fprintf(arq, "\n%20s         |----","");
2:                  BB _ x _ II                 
      fprintf(arq, "\n%20s ----+   |", jogadores[2]);
3:                   EE _ x _ II                 
      fprintf(arq, "\n%20s    |----+","");
 
      fprintf(arq, "\n%20s ----+\n", jogadores[1]);
+----------------------------------------------------+
      break;
 
    case 5:
+-----------------------------------------------+
      fprintf(arq, "\n%18sQF       SF    F\n","");
| GRUPO 3: Jogadores | Vitórias | Saldo de Sets |
       fprintf(arq, "\n%25s ----+", jogadores[0]);
+--------------------+----------+---------------+
      fprintf(arq, "\n%20s          |----+","");
|                CC |          |              |
      fprintf(arq, "\n%20s ----+    |    |", jogadores[4]);
|                DD |         |               |
      fprintf(arq, "\n%20s    |----+    |","");
|                JJ |          |              |
      fprintf(arq, "\n%20s ----+        |----", jogadores[3]);
+-----------------------------------------------+
      fprintf(arq, "\n%20s              | ",""); 
 
       fprintf(arq, "\n%25s ----+    |", jogadores[2]);
PARTIDAS DO RODÍZIO:
      fprintf(arq, "\n%25s    |----+","");
1:                  CC _ x _ DD                 
       fprintf(arq, "\n%25s ----+\n", jogadores[1]);
2:                  CC _ x _ JJ                 
      break;
3:                  DD _ x _ JJ                 
    case 6:
 
      fprintf(arq, "\n%18sQF        SF    F\n","");
+----------------------------------------------------+
       fprintf(arq, "\n%25s ----+", jogadores[0]);
 
      fprintf(arq, "\n%20s          |----+","");
PARTIDAS ELIMINATÓRIAS:  
       fprintf(arq, "\n%20s ----+    |    |", jogadores[4]);
 
      fprintf(arq, "\n%20s    |----+   |","");
                  OF       QF  SF    F
       fprintf(arq, "\n%20s ----+         |", jogadores[3]);
 
      fprintf(arq, "\n%20s              |----","");
       1o Grupo 1 ________ ----+
       fprintf(arq, "\n%20s ----+         |", jogadores[2]);
                              |----+
      fprintf(arq, "\n%20s    |----+    |","");
3o Grupo 3 ________ ----+    |    |
      fprintf(arq, "\n%20s ----+    |    |", jogadores[5]);
                        |----+    |
      fprintf(arq, "\n%20s          |----+","");
3o Grupo 2 ________ ----+        |----+
      fprintf(arq, "\n%25s ----+\n", jogadores[1]);
                                  |    |
       2o Grupo 3 ________ ----+    |   |
                              |----+   |
       2o Grupo 2 ________ ----+         |----
                                        |
       1o Grupo 3 ________ ----+         |
                              |----+   |
       2o Grupo 1 ________ ----+    |    |
                                  |----+
       3o Grupo 1 ________ ----+   |
                              |----+
       1o Grupo 2 ________ ----+
 
+----------------------------------------------------+
 
Programa desenvolvido por: Evandro Cantú
Contato: evandro.cantu@ifpr.edu.br


      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;
  }
  fclose(arq);
}
</syntaxhighlight>
</syntaxhighlight>



Edição das 17h55min de 7 de junho de 2017

//Programa Gerador de Tabelas Esportivas
//Desenvolvido por Evandro Cantú
//Instituto Federal do Paraná
//Foz do Iguaçu, outubro 2016
//Atualização: jun/2017

#include <stdio.h>
#include <stdlib.h> 
#include <string.h>
#include <time.h>

//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[32][20])
{
  char tabela[] = "Tabela.txt";
  FILE *arq;  
  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);
}

//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]);

//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[32][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);
  }
}

//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 grupos (g), número de
//      jogadores (n), número de classificados por grupo (nc) e
//      o vetor com os jogadores. 
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 GRUPO e pré alocados pelo RANKING:\n");
  for (i = 0; i < g; i++)
  {
    fprintf(arq, "             Grupo %d", i+1);
  }
  fprintf(arq, "\n");
  //Os cabeças de chave são incluídos na primeira posição de cada grupo.
  for (i = 0; i < g; i++) //Cabeça de GRUPO
  {
    strcpy(grupos[i][0], jogadores[i]);
    fprintf(arq, "%20s", grupos[i][0]);
  }
  fprintf(arq, "\n");
  //Os próximos do ranking são incluídos na segunda posição de cada grupo,
  //invertendo a ordem de inclusão nos grupos.
  for (i = 0; i < g; i++) //Segundo integrante do GRUPO
  { 
    strcpy(grupos[i][1], jogadores[2 * g - 1 - i]);
    fprintf(arq, "%20s", grupos[i][1]);
  }
  fprintf(arq, "\n");
  fclose(arq);
  ng = n - 2 * g; //Número total de jogadores além dos cabeças de GRUPO
                  //e dos próximos do RANKING 
  //Retira cabeças de GRUPO e próximos do RANKING do vetor dos jogadores, 
  //pois já foram incluídos nos respectivos grupos. 
  for (i = 0; i < ng; i++)             
    strcpy(jogadores[i], jogadores[i + 2 * g]); 
  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 jogadores nos grupos, além do cabeça de GRUPO
      strcpy(grupos[j][i+2], 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+----------------------------------------------------+\n");
    fprintf(arq, "\n+-----------------------------------------------+");
    fprintf(arq, "\n| GRUPO %d: Jogadores | Vitórias | Saldo de Sets |", j + 1);
    fprintf(arq, "\n+--------------------+----------+---------------+\n");
    //Imprime os membros de cada GRUPO
    for (i = 0; i < n/g + extra[j]; i++)
      fprintf(arq, "|%19s |          |               |\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 stgrings que definem a ordem dos
  //confrontos para as Finais, considerando o número de grupos (g) e
  //o número de classificados (c) por grupo.
  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;
  }
}

int main(int argc, char *argv[]) 
//Arquivo com jogadores pode ser fornecido como parâmetro
{
  char jogador[20];
  char jogadores[32][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 i;
  char resposta;
  int tam;
  char arquivo[20];
  char tabela[] = "Tabela.txt";
  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             Data da Competição: %s \n", __DATE__);
  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 do sorteio
  printf("\nESCOLHA FORMATO DO SORTEIO: \n");
  printf(" (R) Manter ordem de RANKING ou CABEÇAS DE CHAVE (embaralhando demais)\n");
  printf(" (S) SORTEAR e embaralhar TODOS os jogadores\n");
  scanf (" %c",&resposta);
  while (resposta != 's' && resposta != 'S' && 
         resposta != 'r' && resposta != 'R') {
    printf("\nESCOLHA FORMATO DO SORTEIO: \n");
    printf(" (R) Manter ordem de RANKING ou CABEÇAS DE CHAVE (embaralhando demais)\n");
    printf(" (S) SORTEAR e embaralhar TODOS os jogadores\n");
    scanf (" %c",&resposta);}
  if (resposta == 's' || resposta == 'S')
    embaralhar(jogadores, n);
  //Pergunta sobre formato da competição
  printf("\nESCOHA FORMATO DA COMPETIÇÃO: \n");
  if (n >= 6 && n <= 32)
    printf(" (C) Copa: Grupos + Fase Final (De 6 a 32 jogadores)\n");
  printf(" (R) Rodízio simples (Até 5 jogadores)\n");
  printf(" (E) Eliminatória simples (Até 16 jogadores)\n");
  scanf (" %c",&resposta);
  while (resposta != 'c' && resposta != 'C' && 
         resposta != 'r' && resposta != 'R' &&
         resposta != 'e' && resposta != 'e') {
    if (n >= 6 && n <= 32)
      printf(" (C) Copa: Grupos + Fase Final (De 6 a 32 jogadores)\n");
    printf(" (R) Rodízio simples (Até 5 jogadores)\n");
    printf(" (E) Eliminatória simples (Até 16 jogadores)\n");  
    scanf (" %c",&resposta); 
  }
  if (resposta == 'r' || resposta == 'R')
    //Chama função rodizio
    rodizio (n, jogadores);
  if (resposta ==  'e' || resposta == 'E')
    //Chama função matamata
    matamata(n, jogadores);
  if (resposta ==  'c' || resposta == 'C')
  {
    //Pergunta sobre número de GRUPOS
    printf("\n  Escolha quantos GRUPOS: \n");
    printf("   (2) Dois   GRUPOS (Até 10 jogadores)\n");
    printf("   (3) Três   GRUPOS (De 9 a 12 jogadores)\n");
    printf("   (4) Quatro GRUPOS (De 12 a 17 jogadores)\n");
    printf("   (6) Seis   GRUPOS (De 18 a 24 jogadores)\n");
    printf("   (8) Oito   GRUPOS (De 24 a 32 jogadores)\n");
    scanf (" %c",&resposta);
    while (resposta != '2' && resposta != '3' && 
           resposta != '4' && resposta != '6' &&
           resposta != '8') {
      printf("\n  Escolha quantos GRUPOS: \n");
      printf("   (2) Dois   GRUPOS (Até 10 jogadores)\n");
      printf("   (3) Três   GRUPOS (De 9 a 12 jogadores)\n");
      printf("   (4) Quatro GRUPOS (De 12 a 17 jogadores)\n");
      printf("   (6) Seis   GRUPOS (De 18 a 24 jogadores)\n");
      printf("   (8) Oito   GRUPOS (De 24 a 32 jogadores)\n");
      scanf (" %c",&resposta);}
    if (resposta == '2' || resposta == '3'|| resposta == '4')
    {
      if (resposta == '2')
        g = 2;
      if (resposta == '3')
        g = 3;
      if (resposta == '4')
        g = 4;
      //Pergunta sobre número de classificados por GRUPO
      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'){
        printf("\n  Escolha número de classificados por GRUPO: \n");
        printf("   (2) Dois\n");
        printf("   (3) Três\n");
        scanf (" %c",&resposta);} 
      if (resposta == '2')
        nc = 2;
      if (resposta == '3')
        nc = 3;
    }
    if (resposta == '4')
      g = 4;
    if (resposta == '6')
      g = 6;
    if (resposta == '8')
      g = 8;
   //Chama função copa
   copa(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");
  fclose(arq);
  return(0);
}

//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[] = "Tabela.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;
  }
  fclose(arq);
}