Oi, bom dia.
Ao ler o EP me deparei com a função struct, que por ser uma das últimas funções não fora muito utilizada. Através da internet procurei por algo que mostrasse a utilização clara dessa função mas não encontrei.
Gostaria de saber se o professor possui algum pdf explicativo para disponibilizar.
Obrigado.
Na verdade, struct não é bem uma função, é um comando da linguagem que permite "criar" novos tipos de variável.
Então, quando no enunciado do EP ele diz:
typedef struct {
int x, y;
} POS;
Ele está crianda um novo tipo chamado POS, que contém 2 inteiros.
Agora, por exemplo, podemos criar um vetor de POS se quisermos, simplesmente fazendo:
POS vetor[10];
Basicamente, é isso!
Qualquer dúvida, postem aqui no forum!
Então, quando no enunciado do EP ele diz:
typedef struct {
int x, y;
} POS;
Ele está crianda um novo tipo chamado POS, que contém 2 inteiros.
Agora, por exemplo, podemos criar um vetor de POS se quisermos, simplesmente fazendo:
POS vetor[10];
Basicamente, é isso!
Qualquer dúvida, postem aqui no forum!
Mm, é criado um vetor, POS
Então, por exemplo, a posição 10 desse vetor ele dividirá para duas variáveis o x e y?
Algo como: pos[10].y=A e pos[10].x=B?
Ele passou um exemplo de números complexos:
typedef double Real;
typedef double Im;
typedef Struct{
Real x;
Im y;
} Complexo;
Complexo z;
z.x=1;
z.y=-2;
ele usou uma letra para caracterizar a posição do vetor, no caso "z", é isso?
Mas também poderia ter feito essa função como:
Complexo 10;
10.x=2;
10.y=5;
(nos casos acima é na verdade uma matriz, não? o x representaria a linha e o y a coluna)
Desculpa pela quantidade de perguntas mas o tempo tá escasso!
Então, por exemplo, a posição 10 desse vetor ele dividirá para duas variáveis o x e y?
Algo como: pos[10].y=A e pos[10].x=B?
Ele passou um exemplo de números complexos:
typedef double Real;
typedef double Im;
typedef Struct{
Real x;
Im y;
} Complexo;
Complexo z;
z.x=1;
z.y=-2;
ele usou uma letra para caracterizar a posição do vetor, no caso "z", é isso?
Mas também poderia ter feito essa função como:
Complexo 10;
10.x=2;
10.y=5;
(nos casos acima é na verdade uma matriz, não? o x representaria a linha e o y a coluna)
Desculpa pela quantidade de perguntas mas o tempo tá escasso!
Bom, Complexo 10 não pode, não é permitido dar nome de variavel começando com números.
Bom, se quiser pensar nisso como uma matriz, tudo bem, mas não é o jeito mais simples eu diria...
Bom, se quiser pensar nisso como uma matriz, tudo bem, mas não é o jeito mais simples eu diria...
a struct permite vc criar variáveis que comportam varias tipos de variaveis ex:
struct Pessoa {
char *nome;
int idade;
};
para declarar uma variavel do tipo Pessoa, existem duas formas
1ª - Declarando as variaveis junto com a declaração do struct:
struct Pessoa {
char *nome;
int idade;
} pessoa, pessoa2, pessoa3;
2ª - Declarando onde vc vai usar a variavel, por exemplo dentro do metodo main vc faz assim
struct Pessoa pessoa;
pessoa.nome = "Nome";
pessoa.idade = 20;
espero ter ajudado
struct Pessoa {
char *nome;
int idade;
};
para declarar uma variavel do tipo Pessoa, existem duas formas
1ª - Declarando as variaveis junto com a declaração do struct:
struct Pessoa {
char *nome;
int idade;
} pessoa, pessoa2, pessoa3;
2ª - Declarando onde vc vai usar a variavel, por exemplo dentro do metodo main vc faz assim
struct Pessoa pessoa;
pessoa.nome = "Nome";
pessoa.idade = 20;
espero ter ajudado
ja o typedef é utilizado para mudar o nome de um tipo de dado, ex:
typedef int inteiro;
em vez de vc fazer
int i;
vc faz
inteiro i;
no caso do EP3 vc tem
typedef int TABULEIRO[4][4];
entao em vez de vc fazer
int meu[4][4];
int outro[4][4];
vc faz
TABULEIRO meu;
TABULEIRO outro;
agora quando vc usa typedef com struct, ex do EP3:
typedef struct {
int x, y;
} POS;
agora em vez de vc declarar assim, dentro de uma função
struct NomeDaStruct NomeDaVariavel;
vc faz assim
POS NomeDaVariavel;
com o typedef é possivel usar um struct dentro de outro struct
flw
typedef int inteiro;
em vez de vc fazer
int i;
vc faz
inteiro i;
no caso do EP3 vc tem
typedef int TABULEIRO[4][4];
entao em vez de vc fazer
int meu[4][4];
int outro[4][4];
vc faz
TABULEIRO meu;
TABULEIRO outro;
agora quando vc usa typedef com struct, ex do EP3:
typedef struct {
int x, y;
} POS;
agora em vez de vc declarar assim, dentro de uma função
struct NomeDaStruct NomeDaVariavel;
vc faz assim
POS NomeDaVariavel;
com o typedef é possivel usar um struct dentro de outro struct
flw
Opa Obrgaido ao Caio e Leandro! Entendi a relação de vetor com struct, vlw!
Eu entendi como funciona o typedef e a função de struct, porém estou com um problema:
para tentar entender melhor aquele
POS jogada(tabuleiro meu, tabuleiro outro, POS minha, POS deles);
eu voltei tudo ao como seria sem o typedef e ficou assim:
struct{
int x,y; //esses serão os parâmetros que eu irei jogar após analisar todos os dados abaixo
int meu[4][4]; //meu tabuleiro, que será modificado a cada rodada colocando um 0 em casas jogadas
int outro[4][4]; //tabuleiro do outro
struct{
int x,y; //minha posição atual
}minha;
struct{
int x,y; //posição atual do outro
}dele;
}jogada;
Quando eu deixo esse último jeito de declaração não ocorrem problemas de localização ao compilar, por exemplo ao chamar a variável jogada.meu[#][#] tudo se passa normalmente. Agora com aquela declaração mais acima o DEV dá msg:
59 ...\MAC115\EP-3\1EP3.cpp request for member `meu' in `jogada', which is of non-class type `POS ()(int (*)[4], int (*)[4], POS, POS)'
Gostaria de entender o que acontece aqui e se realmente elas são equivalentes.
para tentar entender melhor aquele
POS jogada(tabuleiro meu, tabuleiro outro, POS minha, POS deles);
eu voltei tudo ao como seria sem o typedef e ficou assim:
struct{
int x,y; //esses serão os parâmetros que eu irei jogar após analisar todos os dados abaixo
int meu[4][4]; //meu tabuleiro, que será modificado a cada rodada colocando um 0 em casas jogadas
int outro[4][4]; //tabuleiro do outro
struct{
int x,y; //minha posição atual
}minha;
struct{
int x,y; //posição atual do outro
}dele;
}jogada;
Quando eu deixo esse último jeito de declaração não ocorrem problemas de localização ao compilar, por exemplo ao chamar a variável jogada.meu[#][#] tudo se passa normalmente. Agora com aquela declaração mais acima o DEV dá msg:
59 ...\MAC115\EP-3\1EP3.cpp request for member `meu' in `jogada', which is of non-class type `POS ()(int (*)[4], int (*)[4], POS, POS)'
Gostaria de entender o que acontece aqui e se realmente elas são equivalentes.