Função Struct

Função Struct

por André Bürger -
Número de respostas: 7
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.
Em resposta à André Bürger

Re: Função Struct

por Caio Braz -
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!

Em resposta à Caio Braz

Re: Função Struct

por André Bürger -
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!
Em resposta à André Bürger

Re: Função Struct

por Caio Braz -
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...
Em resposta à André Bürger

Re: Função Struct

por Leandro Gonçalves Coelho -
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
Em resposta à André Bürger

Re: Função Struct

por Leandro Gonçalves Coelho -
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
Em resposta à André Bürger

.

por André Bürger -
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.