Skip to content

Instantly share code, notes, and snippets.

@f0nZ
Last active January 5, 2017 00:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save f0nZ/106b097e39ab13c1e5daf65b5e31399f to your computer and use it in GitHub Desktop.
Save f0nZ/106b097e39ab13c1e5daf65b5e31399f to your computer and use it in GitHub Desktop.
/*
Descricaoo:
O programa vai ter uma coleccao de cromos organizada por ano, e varias equipas com varios jogadores onde tem nome e numero camisola.
Neste programa dara para criar colecoes equipas e jogadores
Neste programa permite a pesquisa do jogador pela camisola e equipa e da informacoes sobre ele
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NOME 50
typedef struct jogador{
char * pnome;
int numero;
struct jogador * pnext;
}JOGADOR;
typedef struct equipa{
char nome_equipa[MAX_NOME];
JOGADOR * pjogador;
int njogador;
}EQUIPA;
typedef struct colecao{
int ano_colecao;
EQUIPA * pequipa;
int nequipa;
}COLECAO;
void init_colecao(COLECAO * pc, int ano_colecao, int size);
void insere_equipa(COLECAO * pc, char nome_equipa[]);
char * create_dynamic_string (char str[]);
EQUIPA * encontrar_equipa(COLECAO * pc, char nome_equipa[]);
void insere_jogador(COLECAO * pc, char nome_equipa[], char nome_jogador[], int numero_camisola);
void imprime_jogador(COLECAO * pc, char nome_equipa[], int numero_camisola);
int main()
{
COLECAO c1={2016, NULL,0};
EQUIPA* pe = NULL;
init_colecao(&c1, 2016,3);
insere_equipa(&c1, "Porto");
insere_equipa(&c1, "Benfica");
insere_jogador(&c1, "Porto", "Pedro", 8);
insere_jogador(&c1, "Porto", "Rui", 5);
insere_jogador(&c1, "Porto", "Marco", 1);
insere_jogador(&c1, "Benfica", "Paulo", 7);
insere_jogador(&c1, "Benfica", "Jorge", 9);
insere_jogador(&c1, "Benfica", "Tiago", 10);
insere_jogador(&c1, "Benfica", "Jose", 11);
imprime_jogador(&c1, "Porto", 1);
return 0;
}
void init_colecao(COLECAO * pc, int ano_colecao, int size)
{
EQUIPA * pe;
pc->ano_colecao=ano_colecao;
pc->pequipa=(EQUIPA*)malloc(sizeof(EQUIPA)*size);
pc->nequipa=size;
pe=pc->pequipa;
while (pe<(pc->pequipa+size)) {
strcpy(pe->nome_equipa, "");
pe->pjogador=NULL;
pe->njogador=0;
pe++;
}
}
void insere_equipa(COLECAO * pc, char nome_equipa[])
{
EQUIPA * pe = pc->pequipa;
while (pe!=NULL && pe<(pc->pequipa+pc->nequipa)){
if (strcmp(pe->nome_equipa, "")==0) {
strcpy(pe->nome_equipa, nome_equipa);
return;
}else{
pe++;
}
}
}
void insere_jogador(COLECAO * pc, char nome_equipa[], char nome_jogador[], int numero_camisola){
EQUIPA * pe=NULL;
JOGADOR * pnew=NULL, *paux=NULL, *pant=NULL;
pe=encontrar_equipa(pc, nome_equipa);
pnew=(JOGADOR *)malloc(sizeof(JOGADOR));
pnew->pnome=create_dynamic_string(nome_jogador);
pnew->numero=numero_camisola;
pnew->pnext=NULL;
if (pe->pjogador==NULL) {
pe->pjogador=pnew;
pe->njogador++;
return;
}
paux=pe->pjogador;
pant=pe->pjogador;
// menor que 0 porque 'M'-'A' > 0, logo queremos 'A'-'M' <0 para continuar
while(paux!=NULL && strcmp(paux->pnome,pnew->pnome)<0)
{
pant=paux;
paux=paux->pnext;
}
if(pe->pjogador==paux)
{
printf("insere_jogador(): HEAD %s\n",pnew->pnome);
pnew->pnext = pe->pjogador;
pe->pjogador=pnew;
return;
}
if(pant==NULL)
{
printf("insere_jogador(): TAIL %s\n",pnew->pnome);
pant->pnext=pnew;
pe->njogador++;
return;
}
printf("insere_jogador(): MID %s\n",pnew->pnome);
pnew->pnext=pant->pnext; //pant->pnext
pant->pnext = pnew; //pant->pnext;
pe->njogador++;
return;
}
/*
vai fazer so uma pesquisa de uma equipas numa certa colecao de equipa, quando encontrar retorna struct dessa equipa se nao
returna como NULL
*/
EQUIPA * encontrar_equipa(COLECAO * pc, char nome_equipa[]){
EQUIPA * pe=pc->pequipa;
while (pe!=NULL && pe<(pc->pequipa+pc->nequipa)) {
if (strcmp(pe->nome_equipa, nome_equipa)==0) {
return pe;
}else{
pe++;
}
}
return NULL;
}
/*
Unica coisa que faz a receber o nome fazer malloc dele e voltar retornar
*/
char * create_dynamic_string (char str[]){
char * paux=NULL;
paux=(char*)malloc(strlen(str)+1);
strcpy(paux,str);
return paux;
}
void imprime_jogador(COLECAO * pc, char nome_equipa[], int numero_camisola)
{
EQUIPA * pe=NULL;
JOGADOR * pj=NULL;
pe = encontrar_equipa(pc, nome_equipa);
pj=pe->pjogador;
while (pj!=NULL) {
//printf("Nome Jogador encontrado: %s || Numero camisola %d\n", pj->pnome, pj->numero);
//Comentar o IF para ver todos os jogadores de um clube e descomentar a linha de cima
if(pj->numero==numero_camisola){
printf("Nome Jogador encontrado: %s || Numero camisola %d\n", pj->pnome, pj->numero);
return;
}
pj = pj->pnext;
}
printf("\nJogador nao encontrado\n");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment