mirador_22 Posted October 24, 2015 at 01:44 AM Report Share #589114 Posted October 24, 2015 at 01:44 AM (edited) Ola a todos, estou com dificuldade em definir as estruturas para simular um jogo de multibol para 3 pessoas e algumas bolas em linguagem C e tenho assim, as seguintes estruturas #define MAX_NUM_JOGADOR 10//numero maximo de jogadores #define MIN_NUM_JOGADOR 3//numero minimo de jogadores a jogar #define MAX_BOLA_JOGADOR 2//numero maximo de bolas para cada jogador #define MAX_NUM_BOLA 5//numero maximo de bolas para jogo #define MIN_NUM_BOLA 1//numero minimo de bola para jogo typedef struct { int num_bola; /* numero de bola */ } BOLA; /*Declaração da estrutura que define a bola*/ typedef struct { int num_jogador; /*numero de jogador*/ BALIZA baliza; /*possui uma e uma só baliza*/ BOLA bola[MAX_BOLA_JOGADOR]; /*existem várias bolas entre uma a duas bolas*/ } JOGADOR; /*Declaração da estrutura que define o jogador*/ typedef struct { int num_baliza; /*numero de baliza*/ JOGADOR jogador; } BALIZA; /*Declaração da estrutura que define a baliza*/ typedef struct { JOGADOR jogador[MAX_NUM_JOGADOR]; /* contem no maximo 10 jogadores*/ BALIZA balizas[MAX_NUM_JOGADOR]; /*o numero de baliza é igual ao numero de jogadores*/ BOLA bola[MAX_NUM_BOLA]; /*possui no maximo 5 bolas para cada jogo*/ } CAMPO; /*Declaração da estrutura que define o campo*/ ao compilar da o erro, como mostra na figura e tentei fazer assim e dá erro na mesma /********************************************** ** Declaração da Estrutura ** **********************************************/ typedef struct { int num_baliza; /*numero de baliza*/ struct jogador { /*contem apenas um e só um jogador*/ int num_jogador; /*numero de jogador*/ BALIZA baliza; /*possui uma e uma só baliza*/ BOLA bola[MAX_BOLA_JOGADOR]; /*existem várias bolas entre uma a duas bolas*/ } jogador; /*Declaração da estrutura que define o jogador*/ } BALIZA; /*Declaração da estrutura que define a baliza*/ Edited October 24, 2015 at 01:48 AM by mirador_22 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted October 24, 2015 at 08:36 AM Report Share #589115 Posted October 24, 2015 at 08:36 AM não podes "usar" um tipo de dados que ainda não foi declarado previamente. o compilador de C lê o código de cima para baixo e se encontra algum tipo de dados que ainda não interpretou, dá esse erro (se bem que a imagem que apresentas é um erro do NetBeans, mas é a prevenir erros de compilação) o que deverás fazer é fazer a alusão ao tipo de dados que irás declarar: #define MAX_NUM_JOGADOR 10 // numero maximo de jogadores #define MIN_NUM_JOGADOR 3 // numero minimo de jogadores a jogar #define MAX_BOLA_JOGADOR 2 // numero maximo de bolas para cada jogador #define MAX_NUM_BOLA 5 // numero maximo de bolas para jogo #define MIN_NUM_BOLA 1 // numero minimo de bola para jogo typedef struct BOLA BOLA; // dizer que existe um tipo de dados estruturado BOLA que irá ser declarado no "futuro" typedef struct JOGADOR JOGADOR; // dizer que existe um tipo de dados estruturado JOGADOR que irá ser declarado no "futuro" typedef struct BALIZA BALIZA; // dizer que existe um tipo de dados estruturado BALIZA que irá ser declarado no "futuro" typedef struct CAMPO CAMPO; // dizer que existe um tipo de dados estruturado CAMPO que irá ser declarado no "futuro" struct BOLA { int num_bola; // numero de bola }; // Declaração da estrutura que define a bola struct JOGADOR { int num_jogador; // numero de jogador BALIZA baliza; // possui uma e uma só baliza BOLA bola[MAX_BOLA_JOGADOR]; // existem várias bolas entre uma a duas bolas }; // Declaração da estrutura que define o jogador struct BALIZA { int num_baliza; // numero de baliza JOGADOR jogador; }; // Declaração da estrutura que define a baliza struct CAMPO { JOGADOR jogador[MAX_NUM_JOGADOR]; // contem no maximo 10 jogadores BALIZA balizas[MAX_NUM_JOGADOR]; // o numero de baliza é igual ao numero de jogadores BOLA bola[MAX_NUM_BOLA]; // possui no maximo 5 bolas para cada jogo }; // Declaração da estrutura que define o campo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
mirador_22 Posted October 24, 2015 at 02:06 PM Author Report Share #589119 Posted October 24, 2015 at 02:06 PM (edited) obrigado, mas continuou na mesma, continua sem reconhecer o tipo de dados baliza segundo o prof, a logica a seguir será isto Cada jogador possui uma e uma só baliza e cada baliza pertence a um e um só jogador. segundo percebi teoricamente, cada jogador possui apenas um numero de baliza que será igual ao que foi inserido e cada baliza pertence a um jogador que será igual ao que tiver o mesmo numero de baliza. na pratica, ficaria assim, struct BOLA { int num_bola; // numero de bola }; // Declaração da estrutura que define a bola struct JOGADOR { int num_jogador; // numero de jogador int num_baliza; // possui uma e uma só baliza BOLA bola[MAX_BOLA_JOGADOR]; // existem várias bolas entre uma a duas bolas }; // Declaração da estrutura que define o jogador struct BALIZA { int num_baliza; // numero de baliza JOGADOR jogador;// possui um e um só jogador }; // Declaração da estrutura que define a baliza seguindo este codigo, não dá erro Edited October 24, 2015 at 02:09 PM by mirador_22 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted October 24, 2015 at 02:36 PM Report Share #589120 Posted October 24, 2015 at 02:36 PM (edited) obrigado, mas continuou na mesma, continua sem reconhecer o tipo de dados baliza já percebi qual é o teu problema nem olhei bem para o conteudo de cada estrutura ... a solução está aqui : se um jogador tem uma só baliza e uma baliza pertence a um só jogador, então são uma unica "coisa" Edited October 24, 2015 at 02:40 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
mirador_22 Posted October 24, 2015 at 04:57 PM Author Report Share #589121 Posted October 24, 2015 at 04:57 PM honestamente a programação é mesmo complicada de entender mas mesmo assim, usando a sua solução continou a dar o mesmo erro Link to comment Share on other sites More sharing options...
falk0n Posted October 24, 2015 at 05:09 PM Report Share #589122 Posted October 24, 2015 at 05:09 PM (edited) Qual é o erro que está a aparecer quando compilas o código ? Pensei que antes fosse que não reconhecia o tipo de dados BALIZA. Como o @HappyHippyHippo disse se trocares a ordem das definições (primeiro a baliza e depois o jogador) já não deverias ter esse problema de reconhecimento do tipo de dados. Se puderes coloca aqui qual o erro dado pelo compilador (gcc, microsoft compiler, borland, etc). Boas programações ps. A baliza pertencer a apenas um jogador (guarda-redes) e um jogador ter apenas uma baliza (a da sua equipa) não quer dizer que sejam a mesma coisa. Mas a ideia do HappyHippyHippo está boa 🙂 Edited October 24, 2015 at 05:11 PM by falk0n Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted October 24, 2015 at 05:20 PM Report Share #589123 Posted October 24, 2015 at 05:20 PM Qual é o erro que está a aparecer quando compilas o código ? Pensei que antes fosse que não reconhecia o tipo de dados BALIZA. Como o @HappyHippyHippo disse se trocares a ordem das definições (primeiro a baliza e depois o jogador) já não deverias ter esse problema de reconhecimento do tipo de dados. o que disse não foi trocar a ordem, mas fazer a alusão, o que não é uma solução completa porque não se pode declarar uma estrutura com um parâmetro de tamanho desconhecido. ps. A baliza pertencer a apenas um jogador (guarda-redes) e um jogador ter apenas uma baliza (a da sua equipa) não quer dizer que sejam a mesma coisa. eu só analizei o que foi escrito: segundo o prof, a logica a seguir será isto Cada jogador possui uma e uma só baliza e cada baliza pertence a um e um só jogador. o que quer dizer que é a mesma coisa se é para ter declarado as duas estruturas diferentes, a solução é ter um ponteiro (que é um tipo de dados de tamanho conhecido) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
mirador_22 Posted October 24, 2015 at 05:25 PM Author Report Share #589124 Posted October 24, 2015 at 05:25 PM Qual é o erro que está a aparecer quando compilas o código ? Pensei que antes fosse que não reconhecia o tipo de dados BALIZA. Como o @HappyHippyHippo disse se trocares a ordem das definições (primeiro a baliza e depois o jogador) já não deverias ter esse problema de reconhecimento do tipo de dados. Se puderes coloca aqui qual o erro dado pelo compilador (gcc, microsoft compiler, borland, etc). Boas programações ps. A baliza pertencer a apenas um jogador (guarda-redes) e um jogador ter apenas uma baliza (a da sua equipa) não quer dizer que sejam a mesma coisa. Mas a ideia do HappyHippyHippo está boa 🙂 sem duvida que, a ideia do HappyHippyHippo está boa mas dá erro de não reconhecer a baliza visto que não foi declarado mas na ideia do a iHappyHippyHippo é a mais correta só que o compilador ainda insiste que está errado e a baliza não é para guarda-redes, sim para os jogadores que vao iniciar o jogo multibol eis a figura, Link to comment Share on other sites More sharing options...
falk0n Posted October 24, 2015 at 05:29 PM Report Share #589125 Posted October 24, 2015 at 05:29 PM sem duvida que, a ideia do HappyHippyHippo está boa mas dá erro de não reconhecer a baliza visto que não foi declarado mas na ideia do a iHappyHippyHippo é a mais correta só que o compilador ainda insiste que está errado e a baliza não é para guarda-redes, sim para os jogadores que vao iniciar o jogo multibol eis a figura, Qual é o erro que o compilador dá ? Quando compilas o código em C qual é o erro do compilador ? Boas programações, ps. HappyHippyHippo e mirador_22, desculpem eu desconhecia o conceito de multigol. Interessante de facto. Link to comment Share on other sites More sharing options...
mirador_22 Posted October 24, 2015 at 05:37 PM Author Report Share #589126 Posted October 24, 2015 at 05:37 PM Qual é o erro que o compilador dá ? Quando compilas o código em C qual é o erro do compilador ? Boas programações, ps. HappyHippyHippo e mirador_22, desculpem eu desconhecia o conceito de multigol. Interessante de facto. main.c:53:12: error: field ‘baliza’ has incomplete type BALIZA baliza; // possui uma e uma só baliza Link to comment Share on other sites More sharing options...
falk0n Posted October 24, 2015 at 07:35 PM Report Share #589127 Posted October 24, 2015 at 07:35 PM main.c:53:12: error: field ‘baliza’ has incomplete type BALIZA baliza; // possui uma e uma só baliza Podes voltar a colocar a sequencia de instrucoes (de definicoes de tipos) que tens no teu programa ? Reparaste que o HappyHippoHippy colocou isto (em baixo) numa das respostas que te deu ? typedef struct BOLA BOLA; // dizer que existe um tipo de dados estruturado BOLA que irá ser declarado no "futuro" typedef struct JOGADOR JOGADOR; // dizer que existe um tipo de dados estruturado JOGADOR que irá ser declarado no "futuro" typedef struct BALIZA BALIZA; // dizer que existe um tipo de dados estruturado BALIZA que irá ser declarado no "futuro" typedef struct CAMPO CAMPO; // dizer que existe um tipo de dados estruturado CAMPO que irá ser declarado no "futuro" O que (provavelmente) se passa no teu código é que tens dependencias circulares de tipos, que poderiam ser resolvidas com pointers, mas que em principio também podem ser resolvidas com o que coloquei acima em quote. Ou seja, a BALIZA necessita de um jogador, mas um jogador necessita de uma baliza, (parecido ao problema do que nasceu primeiro o ovo ou a galinha). Ou seja eles são circulares. Para este tipo de problemas podes dizer que vai existir uma estrutura com o nome "qq" e só depois a defines de forma a que o compilador saiba que esse tipo (nome) ja existe. No entanto ele tem de ver procurar esse nome para saber qtos bytes essa estrura vai ter. Boas programaçoes Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted October 24, 2015 at 07:36 PM Report Share #589128 Posted October 24, 2015 at 07:36 PM Como disse um jogador e baliza e exactamente a mesma coisa. Por outras palavras, não são estruturas diferentes IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
mirador_22 Posted October 24, 2015 at 08:55 PM Author Report Share #589129 Posted October 24, 2015 at 08:55 PM (edited) Como disse um jogador e baliza e exactamente a mesma coisa. Por outras palavras, não são estruturas diferentes Podes voltar a colocar a sequencia de instrucoes (de definicoes de tipos) que tens no teu programa ? Reparaste que o HappyHippoHippy colocou isto (em baixo) numa das respostas que te deu ? O que (provavelmente) se passa no teu código é que tens dependencias circulares de tipos, que poderiam ser resolvidas com pointers, mas que em principio também podem ser resolvidas com o que coloquei acima em quote. Ou seja, a BALIZA necessita de um jogador, mas um jogador necessita de uma baliza, (parecido ao problema do que nasceu primeiro o ovo ou a galinha). Ou seja eles são circulares. Para este tipo de problemas podes dizer que vai existir uma estrutura com o nome "qq" e só depois a defines de forma a que o compilador saiba que esse tipo (nome) ja existe. No entanto ele tem de ver procurar esse nome para saber qtos bytes essa estrura vai ter. Boas programaçoes Agradeço vos pela vossa orientação mas na verdade, estava complicado raciocinar, mas depois de alterar o Jogador como um apontador da estrutura JOGADOR, deu certo sem erro, como vem na figura e vou repostar o codigo typedef struct BOLA BOLA; // tipo de dados estruturado BOLA que irá ser declarado typedef struct JOGADOR JOGADOR; // tipo de dados estruturado JOGADOR que irá ser declarado typedef struct BALIZA BALIZA; // tipo de dados estruturado BALIZA que irá ser declarado typedef struct CAMPO CAMPO; // tipo de dados estruturado CAMPO que irá ser declarado struct BOLA { int num_bola; // numero de bola char trajetoria[50]; //trajetoria da bola }; // Declaração da estrutura que define a bola struct BALIZA { int num_baliza; // numero de baliza JOGADOR *jogador;//Apontada para jogador que irá ser adicionado a Baliza }; // Declaração da estrutura que define a baliza struct JOGADOR { int num_jogador; // numero de jogador BALIZA baliza; // possui uma e uma só baliza BOLA bola[MAX_BOLA_JOGADOR]; // existem várias bolas entre uma a duas bolas }; // Declaração da estrutura que define o jogador struct CAMPO { JOGADOR jogadores[MAX_NUM_JOGADOR]; // contem no maximo 10 jogadores BALIZA balizas[MAX_NUM_JOGADOR]; // o numero de baliza é igual ao numero de jogadores BOLA bolas[MAX_NUM_BOLA]; // possui no maximo 5 bolas para cada jogo }; // Declaração da estrutura que define o campo Edited October 24, 2015 at 09:00 PM by mirador_22 Link to comment Share on other sites More sharing options...
mirador_22 Posted October 25, 2015 at 03:30 AM Author Report Share #589130 Posted October 25, 2015 at 03:30 AM tópico resolvido, porque o codigo já está funcionado como esperado e neste momento, estou criando jogadores, baliza adicionando jogadores e criar bola tudo isso foi armazenado na estrutura CAMPO e apartir desta estrutura, já estou acendendo aos dados de outra estruturas, mas duvidas, vou postar e obrigado Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now