Ir para conteúdo
Fórum Script Brasil
  • 0

progama-liga dos campeoes


reggy

Pergunta

boas pessoal, eu gostava que alguém me ajudasse a terminar este progama de c++, é para um trabalho de final de semestre, sobre o sorteio da liga dos campeoes, é um desafio interessante e eu parei na parte de fazer o sorteio das equipas.

o professor forneceu o codigo inicial, com ranking de equipas e o numero de equipas que queria, e eu neste momento precisava de fazer um ciclo for dentro de outro mas não sei como fazer, e o codigo é muito grande para postar aqui, se alguém me conseguir ajudar como eu postar aqui o codigo para voçes ajudarem, ou algo parecido,

agradecia muito um ajuda

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Bom, primeiramente, o código está em C e não em C++ .

Agora, qual é a sua dúvida? Não sabe como criar os grupos? Quer fazer grupos aleatórios?

Att.,

Pedro

EDIT: Se possível poste o enunciado do exercício para que eu possa fazer minha própria versão para que você veja como funciona.

Editado por PedroCunha
Link para o comentário
Compartilhar em outros sites

  • 0

peço desculpa....

estou com duvidas em fazer a parte de sortear os grupos, é que também tenho o problema de ter de ter os grupos sorteados como o prof. quer

neste ficheiro aqui, no final, estao os grupos feitos como o prof quer, e é em po-los assim que eu estou com duvidas...

obrigado pela ajuda ;)

http://www.4shared.com/office/tJZuLF4i/Tra...Prtico_RPP.html

Link para o comentário
Compartilhar em outros sites

  • 0

Olha, pelo que entendi, para a primeira vaga de cada grupo, você tem colocar alguém do pote A. Para a segunda vaga de cada grupo, alguém do pote B e assim por diante. E checar para ver se não está repetindo os times. Caso consiga, poste o código caso alguém mais tenha essa dúvida.

Link para o comentário
Compartilhar em outros sites

  • 0

Hoje eu gostaria de ajudar alguém, então eu fiz isto.

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

#define NCLUBS 32

typedef struct CLUB
{
    char *name;
    unsigned int ranking;

}CLUB;

CLUB clubs[32] = { 

    "AC Milan           " , 89996, 
    "Ajax               " , 58103,
    "Anderlecht         " , 48480,
    "Arsenal            " , 113882,
    "BATE Borisov       " , 29641,
    "Bayern Munique     " , 133037,
    "Benfica            " , 87069,
    "Borussia Dortmund  " , 31037,
    "Celtic             " , 32728,
    "Chelsea            " , 135882,
    "Cluj               " , 18764,
    "Dinamo Kiev        " , 62026,
    "Dinamo Zagreb      " , 24774, 
    "FC Barcelona       " , 157837,
    "FC Nordsjaelland   " , 8005,
    "FC Porto           " , 98069,
    "Galatasaray        " , 38310,
    "Juventus           " , 46996,
    "Lille              " , 38835,
    "Malaga             " , 18690,
    "Manchester City    " , 63882,
    "Manchester United  " , 141882,
    "Montpellier        " , 11835,
    "Olympiakos         " , 61420,
    "Paris Saint-Germain" , 45835,
    "Real Madrid        " , 121837,
    "Schalke 04         " , 78037,
    "Shakhtar Donetsk   " , 84026,
    "Spartak Moscovo    " , 46066,
    "Sporting Braga     " , 63069,
    "Valencia           " , 89837,
    "Zenit St Petersburg" , 79066
};

CLUB *pote1[8];
CLUB *pote2[8];
CLUB *pote3[8];
CLUB *pote4[8];

CLUB *groupA[4] = {0, 0, 0, 0};
CLUB *groupB[4] = {0, 0, 0, 0};
CLUB *groupC[4] = {0, 0, 0, 0};
CLUB *groupD[4] = {0, 0, 0, 0};
CLUB *groupE[4] = {0, 0, 0, 0};
CLUB *groupF[4] = {0, 0, 0, 0};
CLUB *groupG[4] = {0, 0, 0, 0};
CLUB *groupH[4] = {0, 0, 0, 0};

CLUB **GROUPS[] = {groupA, groupB, groupC, groupD, groupE, groupF, groupG, groupH};

void listClubs(CLUB *clubs)
{
    int i = 0;

    for(i = 0; i < NCLUBS; i++)
    {
        printf("%s  %6d \n", clubs[i].name, clubs[i].ranking);
    }
}

void sortClubs(CLUB *clubs)
{
    int i, j;
    int temp1;
    char *temp2;

    for(i = 1; i < NCLUBS; i++)
    {
        for(j = NCLUBS - 1; j >= i; j--)
        {
            if(clubs[j - 1].ranking < clubs[j].ranking)
            {
                temp1 = clubs[j - 1].ranking;
                temp2 = clubs[j - 1].name;

                clubs[j - 1].ranking = clubs[j].ranking;
                clubs[j - 1].name = clubs[j].name;
                
                clubs[j].ranking = temp1;
                clubs[j].name = temp2;
            }
        }
    }
}

void createPotes(CLUB *clubs)
{
    CLUB **pote = pote1;
    int i;
    int j;
    
    for(i = 0, j = 0; j < NCLUBS; i++, j++)
    {
        pote[i] = &clubs[j];
        if(i == 7)
        {
            i = -1;
            
            if(j == 7) pote = pote2;
            else if(j == 15) pote = pote3;
            else if(j == 23) pote = pote4;
        }
    }

    printf("\n%s%20s%20s%20s\n","POTE 1", "POTE 2", "POTE 3", "POTE 4");
    
    for(i = 0; i < 8; i++)
    {
        printf("%s%20s%20s%20s\n", pote1[i]->name, pote2[i]->name, pote3[i]->name, pote4[i]->name);
    }
}

void addGroup(CLUB *club, char group)
{
    int i;

    for(i = 0; i < 4; i++)
    {
        if(!GROUPS[group - 65][i])
        {
            GROUPS[group - 65][i] = club;
            break;
        }
    }
}

void rafflePote(CLUB *clubs, CLUB **pote)
{
    CLUB *club;
    char group;
    char groups[] = "ABCDEFGH"; 
    int r;
    int i;
    int j;

    for(j = 0; j < 8; j++)
    {
        for(;;)
        {
            r = rand() % 8;
            if(!pote[r]) continue;
            
            club = pote[r];
            break;
        }
        pote[r] = NULL;
        
        printf("\n\nClube Sorteado   : %s\n", club->name);
        printf("Grupos Possiveis : ");
        for(i = 0; i < 8; i++)
        {
            if(groups[i]) printf("%c ", groups[i]);
        }
        printf("\n");
        
        for(;;)
        {
            r = rand() % 8;
            if(!groups[r]) continue;
            
            group = groups[r];
            break;
        }
        groups[r] = 0;
        printf("Grupo Sorteado   : %c\n", group);

        addGroup(club, group);
    }
}

void listGroups()
{
    int i;

    printf("\n%s%20s%20s%20s\n","GRUPO A", "GRUPO B", "GRUPO C", "GRUPO D");

    for(i = 0; i < 4; i++)
    {
        if(!groupA[i]) break;
        printf("%s%20s%20s%20s\n", groupA[i]->name, groupB[i]->name, groupC[i]->name, groupD[i]->name);
    }

    printf("\n%s%20s%20s%20s\n","GRUPO E", "GRUPO F", "GRUPO G", "GRUPO H");

    for(i = 0; i < 4; i++)
    {
        if(!groupA[i]) break;
        printf("%s%20s%20s%20s\n", groupE[i]->name, groupF[i]->name, groupG[i]->name, groupH[i]->name);
    }

}

int main()
{
    srand(time(NULL));

    printf("\nSORTEIO DA FASE DE GRUPOS DA LIGA DOS CAMPEOES\n");

    printf("\nClubes apurados para a fase de grupos\n\n");
    listClubs(clubs);

    sortClubs(clubs);
    printf("\nClubes apurados para a fase de grupos ordenados por ranking\n\n");
    listClubs(clubs);

    printf("\nDistribuicao dos clubes pelos potes\n");
    createPotes(clubs);
    
    printf("\nSorteio do pote 1\n");
    rafflePote(clubs, pote1);
    printf("\nGrupos apos sorteio pote 1\n");
    listGroups();

    printf("\nSorteio do pote 2\n");
    rafflePote(clubs, pote2);
    printf("\nGrupos apos sorteio pote 2\n");
    listGroups();

    printf("\nSorteio do pote 3\n");
    rafflePote(clubs, pote3);
    printf("\nGrupos apos sorteio pote 3\n");
    listGroups();

    printf("\nSorteio do pote 4\n");
    rafflePote(clubs, pote4);
    printf("\nGrupos apos sorteio pote 4\n");
    listGroups();

    return 0;
}

Editado por goldbach
Link para o comentário
Compartilhar em outros sites

  • 0
Hoje eu gostaria de ajudar alguém, então eu fiz isto.

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

#define NCLUBS 32

typedef struct CLUB
{
    char *name;
    unsigned int ranking;

}CLUB;

CLUB clubs[32] = { 

    "AC Milan           " , 89996, 
    "Ajax               " , 58103,
    "Anderlecht         " , 48480,
    "Arsenal            " , 113882,
    "BATE Borisov       " , 29641,
    "Bayern Munique     " , 133037,
    "Benfica            " , 87069,
    "Borussia Dortmund  " , 31037,
    "Celtic             " , 32728,
    "Chelsea            " , 135882,
    "Cluj               " , 18764,
    "Dinamo Kiev        " , 62026,
    "Dinamo Zagreb      " , 24774, 
    "FC Barcelona       " , 157837,
    "FC Nordsjaelland   " , 8005,
    "FC Porto           " , 98069,
    "Galatasaray        " , 38310,
    "Juventus           " , 46996,
    "Lille              " , 38835,
    "Malaga             " , 18690,
    "Manchester City    " , 63882,
    "Manchester United  " , 141882,
    "Montpellier        " , 11835,
    "Olympiakos         " , 61420,
    "Paris Saint-Germain" , 45835,
    "Real Madrid        " , 121837,
    "Schalke 04         " , 78037,
    "Shakhtar Donetsk   " , 84026,
    "Spartak Moscovo    " , 46066,
    "Sporting Braga     " , 63069,
    "Valencia           " , 89837,
    "Zenit St Petersburg" , 79066
};

CLUB *pote1[8];
CLUB *pote2[8];
CLUB *pote3[8];
CLUB *pote4[8];

CLUB *groupA[4] = {0, 0, 0, 0};
CLUB *groupB[4] = {0, 0, 0, 0};
CLUB *groupC[4] = {0, 0, 0, 0};
CLUB *groupD[4] = {0, 0, 0, 0};
CLUB *groupE[4] = {0, 0, 0, 0};
CLUB *groupF[4] = {0, 0, 0, 0};
CLUB *groupG[4] = {0, 0, 0, 0};
CLUB *groupH[4] = {0, 0, 0, 0};

CLUB **GROUPS[] = {groupA, groupB, groupC, groupD, groupE, groupF, groupG, groupH};

void listClubs(CLUB *clubs)
{
    int i = 0;

    for(i = 0; i < NCLUBS; i++)
    {
        printf("%s  %6d \n", clubs[i].name, clubs[i].ranking);
    }
}

void sortClubs(CLUB *clubs)
{
    int i, j;
    int temp1;
    char *temp2;

    for(i = 1; i < NCLUBS; i++)
    {
        for(j = NCLUBS - 1; j >= i; j--)
        {
            if(clubs[j - 1].ranking < clubs[j].ranking)
            {
                temp1 = clubs[j - 1].ranking;
                temp2 = clubs[j - 1].name;

                clubs[j - 1].ranking = clubs[j].ranking;
                clubs[j - 1].name = clubs[j].name;
                
                clubs[j].ranking = temp1;
                clubs[j].name = temp2;
            }
        }
    }
}

void createPotes(CLUB *clubs)
{
    CLUB **pote = pote1;
    int i;
    int j;
    
    for(i = 0, j = 0; j < NCLUBS; i++, j++)
    {
        pote[i] = &clubs[j];
        if(i == 7)
        {
            i = -1;
            
            if(j == 7) pote = pote2;
            else if(j == 15) pote = pote3;
            else if(j == 23) pote = pote4;
        }
    }

    printf("\n%s%20s%20s%20s\n","POTE 1", "POTE 2", "POTE 3", "POTE 4");
    
    for(i = 0; i < 8; i++)
    {
        printf("%s%20s%20s%20s\n", pote1[i]->name, pote2[i]->name, pote3[i]->name, pote4[i]->name);
    }
}

void addGroup(CLUB *club, char group)
{
    int i;

    for(i = 0; i < 4; i++)
    {
        if(!GROUPS[group - 65][i])
        {
            GROUPS[group - 65][i] = club;
            break;
        }
    }
}

void rafflePote(CLUB *clubs, CLUB **pote)
{
    CLUB *club;
    char group;
    char groups[] = "ABCDEFGH"; 
    int r;
    int i;
    int j;

    for(j = 0; j < 8; j++)
    {
        for(;;)
        {
            r = rand() % 8;
            if(!pote[r]) continue;
            
            club = pote[r];
            break;
        }
        pote[r] = NULL;
        
        printf("\n\nClube Sorteado   : %s\n", club->name);
        printf("Grupos Possiveis : ");
        for(i = 0; i < 8; i++)
        {
            if(groups[i]) printf("%c ", groups[i]);
        }
        printf("\n");
        
        for(;;)
        {
            r = rand() % 8;
            if(!groups[r]) continue;
            
            group = groups[r];
            break;
        }
        groups[r] = 0;
        printf("Grupo Sorteado   : %c\n", group);

        addGroup(club, group);
    }
}

void listGroups()
{
    int i;

    printf("\n%s%20s%20s%20s\n","GRUPO A", "GRUPO B", "GRUPO C", "GRUPO D");

    for(i = 0; i < 4; i++)
    {
        if(!groupA[i]) break;
        printf("%s%20s%20s%20s\n", groupA[i]->name, groupB[i]->name, groupC[i]->name, groupD[i]->name);
    }

    printf("\n%s%20s%20s%20s\n","GRUPO E", "GRUPO F", "GRUPO G", "GRUPO H");

    for(i = 0; i < 4; i++)
    {
        if(!groupA[i]) break;
        printf("%s%20s%20s%20s\n", groupE[i]->name, groupF[i]->name, groupG[i]->name, groupH[i]->name);
    }

}

int main()
{
    srand(time(NULL));

    printf("\nSORTEIO DA FASE DE GRUPOS DA LIGA DOS CAMPEOES\n");

    printf("\nClubes apurados para a fase de grupos\n\n");
    listClubs(clubs);

    sortClubs(clubs);
    printf("\nClubes apurados para a fase de grupos ordenados por ranking\n\n");
    listClubs(clubs);

    printf("\nDistribuicao dos clubes pelos potes\n");
    createPotes(clubs);
    
    printf("\nSorteio do pote 1\n");
    rafflePote(clubs, pote1);
    printf("\nGrupos apos sorteio pote 1\n");
    listGroups();

    printf("\nSorteio do pote 2\n");
    rafflePote(clubs, pote2);
    printf("\nGrupos apos sorteio pote 2\n");
    listGroups();

    printf("\nSorteio do pote 3\n");
    rafflePote(clubs, pote3);
    printf("\nGrupos apos sorteio pote 3\n");
    listGroups();

    printf("\nSorteio do pote 4\n");
    rafflePote(clubs, pote4);
    printf("\nGrupos apos sorteio pote 4\n");
    listGroups();

    return 0;
}

Amigo, achei seu código muito interessante,porém não entendi algumas partes. Poderia comentar o seu código para que eu possa entendê-lo?

Att.,

Pedro

Link para o comentário
Compartilhar em outros sites

  • 0
obrigado aí, o seu progama é um bocado complexo para o meu nivel, era mais ou menos isso que eu estava a precisar de ver um progama assim, foi bom ver que alguém ajudou pra valer, eu vou aproveitar algumas coisas

Eu estava num bom dia. :)

As funções de criar e sortear, :D.

/*

 Esta função usa quatro variaveis globais (pote1, pote2, pote3 e pote4), de modo que cada uma ira armazenar 8 clubes.O pote1 é preenchido com os 8 primeiros clubes; pote2 com os 8 seguintes e assim por diante.
 O que o codigo faz é percorrer o array clubs, e a cada 8 clubes passa para o próximo pote.

*/

void createPotes(CLUB *clubs)
{
    CLUB **pote = pote1; // ponteiro usado para mudar de pote
    int i;
    int j;
    
    for(i = 0, j = 0; j < NCLUBS; i++, j++)
    {
        pote[i] = &clubs[j];
        if(i == 7)
        {
            i = -1;
            
            if(j == 7) pote = pote2;
            else if(j == 15) pote = pote3;
            else if(j == 23) pote = pote4;
        }
    }

    printf("\n%s%20s%20s%20s\n","POTE 1", "POTE 2", "POTE 3", "POTE 4");
    
    for(i = 0; i < 8; i++)
    {
        printf("%s%20s%20s%20s\n", pote1[i]->name, pote2[i]->name, pote3[i]->name, pote4[i]->name);
    }
}

/*

Adiciona um clube a um determinado grupo (groupA, groupB ...)

*/

void addGroup(CLUB *club, char group)
{
    int i;

    for(i = 0; i < 4; i++)
    {
        if(!GROUPS[group - 65][i])
        {
            GROUPS[group - 65][i] = club;
            break;
        }
    }
}

/*

 Esta função sorteia um clube de um determinado pote e depois sorteia um grupo para qual este clube deve entrar (considerando-se as restrições).
 Para se sortear um clube, primeiramente é gerado um número aleatório no intervalo [0, 7], este número é usado como indice para retornar um determinado clube do pote, se o valor retornado for nulo (o clube já foi sorteado), um novo número no intervalo é sorteado, o processo se repete até retornar um clube diferente do pote.
 Para se sortear um grupo, o processo é semelhante ao descrito acima, a diferenca é que é usado um vetor de caracteres para representar os grupos.
 Após se sortear um clube e um grupo a função addGroup() é chamada.

*/

void rafflePote(CLUB *clubs, CLUB **pote)
{
    CLUB *club;
    char group;
    char groups[] = "ABCDEFGH"; 
    int r;
    int i;
    int j;

    for(j = 0; j < 8; j++)
    {
        for(;;)
        {
            r = rand() % 8;
            if(!pote[r]) continue;
            
            club = pote[r];
            break;
        }
        pote[r] = NULL; // garante que este clube não sera sorteado novamente
        
        printf("\n\nClube Sorteado   : %s\n", club->name);
        printf("Grupos Possiveis : ");
        for(i = 0; i < 8; i++)
        {
            if(groups[i]) printf("%c ", groups[i]);
        }
        printf("\n");
        
        for(;;)
        {
            r = rand() % 8;
            if(!groups[r]) continue;
            
            group = groups[r];
            break;
        }
        groups[r] = 0; // garante que este grupo não sera sorteado novamente
        printf("Grupo Sorteado   : %c\n", group);

        addGroup(club, group);
    }
}

Link para o comentário
Compartilhar em outros sites

  • 0
Ele só faz o primeiro grupo e depois trava. Mas porque 'A' e não 'B' ou 'C'?

Por que 'A' ? Porque eu quero adicionar o clube no grupo 'A', se eu quiser adicionar o clube no grupo 'B' eu uso 'B', veja o que acontence :

CLUB *groupA[4] = {0, 0, 0, 0};
CLUB *groupB[4] = {0, 0, 0, 0};
CLUB *groupC[4] = {0, 0, 0, 0};
CLUB *groupD[4] = {0, 0, 0, 0};
CLUB *groupE[4] = {0, 0, 0, 0};
CLUB *groupF[4] = {0, 0, 0, 0};
CLUB *groupG[4] = {0, 0, 0, 0};
CLUB *groupH[4] = {0, 0, 0, 0};

CLUB **GROUPS[] = {groupA, groupB, groupC, groupD, groupE, groupF, groupG, groupH};

void addGroup(CLUB *club, char group)
{
    int i;

    for(i = 0; i < 4; i++)
    {
        if(!GROUPS[group - 65][i])
        {
            GROUPS[group - 65][i] = club;
            break;
        }
    }
}

quando group == 'A' -> GROUPS[0] -> groupA

qunado group == 'B' -> GROUPS[1] -> groupB

...

É o mais claro que consigo ser. :)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...