Buscar

Registro_Struct

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
Registro (struct) 
Algoritmos e Estruturas de Dados I (DCC/003) – 2013/2 
Registros 
 Registros: criação de novos tipos de 
dados a partir dos tipos básicos da 
linguagem 
 
 Registros são caracterizados pelos seus 
campos 
 
 Em linguagens orientadas a objeto, temos 
as classes: tipo de dados + operações 
associadas 
 
 
Registros 
 Um registro possui: 
 Campos, cada um com seu nome 
 Nome do tipo do registro: usado para 
declaração de variáveis deste tipo 
 
Registros - etapas 
1. Definição dos campos de um registro e 
nome do registro 
 
2. Declaração de variáveis do tipo registro 
 
3. Leitura/escrita de dados em campos do 
registro 
5 
 Se cada fração compreende dois inteiros, como é 
possível fazer uma função para somar duas frações 
passando apenas dois parâmetros? 
 
 Isto é possível porque a linguagem C permite a 
definição de novos tipos de dados com base nos tipos 
primitivos: char, int, float e double. 
 
 Estes novos tipos de dados, formados a partir dos 
tipos primitivos são chamados de tipos estruturados. 
 
 
Definição de novos tipos de dados 
6 
 Uma variável de um determinado tipo estruturado 
definido pelo usuário é comumente chamada de uma 
estrutura. 
 Uma estrutura agrupa várias variáveis de diversos 
tipos em uma só variável. 
 
 Para criar uma estrutura usa-se o comando struct: 
struct nome_da_estrutura 
{ 
 tipo_1 variavel_1; 
 ... 
 tipo_n variavel_n; 
}; 
As variáveis que compõem 
a estrutura são chamadas 
de campos da estrutura. 
Definição de novos tipos de dados 
7 
 Exemplos: 
struct ponto 
{ 
 float coord_x; 
 float coord_y; 
}; 
struct circulo 
{ 
 float raio; 
 struct ponto centro; 
}; 
struct cilindro 
{ 
 float altura; 
 struct circulo base; 
}; 
A declaração de variáveis de um 
tipo estruturado (estruturas) é feita 
da mesma forma que para um tipo 
simples. 
Definição de novos tipos de dados 
8 
 Para se acessar os campos de uma estrutura, basta 
separar o nome da variável pelo símbolo ponto ( . ). 
 Para os exemplos anteriores: 
struct cilindro d; 
d.altura = 3.0; 
d.base.raio = 5.5; 
d.base.centro.coord_x = 1.2; 
d.base.centro.coord_y = 3.8; 
struct cilindro 
{ 
 float altura; 
 struct circulo base; 
}; 
struct ponto 
{ 
 float coord_x; 
 float coord_y; 
}; 
struct circulo 
{ 
 float raio; 
 struct ponto centro; 
}; 
Definição de novos tipos de dados 
9 
 O Comando typedef permite ao programador definir 
um novo nome para um determinado tipo. 
 Sua forma geral é: 
 
 
 Exemplo: 
 Dando o nome inteiro para o tipo int: 
 
 
typedef nome_antigo nome_novo; 
typedef int inteiro; 
 
inteiro num; 
O comando typedef 
10 
 O comando typedef também pode ser utilizado para 
dar nome a tipos complexos como estruturas. 
 Exemplos: 
 
 
 
typedef struct tipo_endereco 
 { 
 char rua[50]; 
 int numero; 
 char bairro[20]; 
 char cidade[30]; 
 char sigla_estado[3]; 
 long int CEP; 
 } TEndereco; 
typedef struct frac 
 { 
 int num; 
 int den; 
 } frac; 
Exemplo do programa p22.c 
O comando typedef 
11 
 Observação: 
 Utilizando-se o comando struct juntamente com o 
comando typedef, pode-se dispensar o uso da 
palavra struct na declaração da variável. 
 
 Exemplos: 
 
 
 
typedef struct ponto 
 { 
 float coord_x; 
 float coord_y; 
 } ponto; 
typedef struct circulo 
 { 
 float raio; 
 ponto centro; 
 } circulo; 
typedef struct cilindro 
 { 
 float altura; 
 circulo base; 
 } cilindro; 
O comando typedef 
Registro – C – protótipo 
 Criação de um registro: usamos a palavra-
chave (keyword) struct 
 
1. struct aluno { 
2. int matricula; 
3. char nome[100]; 
4. int disciplinas[10]; 
5. double nota[10]; 
6. }; 
Registro – C – protótipo 
 Nome do registro: aluno 
 Campos: numeromatricula, nome, disciplinas, 
nota 
 
1. struct aluno { 
2. int matricula; 
3. char nome[100]; 
4. int disciplinas[10]; 
5. double nota[10]; 
6. }; 
Registro – C – declaração 
 Para declarar uma variável, usamos o seu 
nome, junto com a keyword struct; 
 
1. struct aluno aluno1; 
2. struct aluno al_aeds1[55]; 
Registro – C – declaração 
 Podemos encurtar a declaração se 
usarmos typedef para definir um “apelido” 
1. typedef struct aluno pessoa; 
 
 Ou 
 
1. typedef struct { 
2. … 
3. … 
4. } pessoa; 
 
 Declaração: pessoa aluno1; 
Registro – C – declaração 
 Com typedef, podemos declarar estruturas 
sem nome, que depois irão receber um 
apelido: 
 
1. typedef struct ?nome deveria vir aqui? { 
2. … 
3. … 
4. } pessoa; 
 
Registro – C – declaração 
 Assim, podemos declarar registros de duas 
formas: 
 
1. struct registro var;//Somente com registro nomeado 
2. registro var;//Somente com typedef 
Registro – C – Acesso aos campos 
 O acesso aos campos é dado pela forma 
variavel.campo ou variavel->campo. 
 
 variavel.campo: acesso pela variável 
 variavel->campo: acesso por ponteiro 
 Igual a (*variavel).campo 
 
Registro – C – Acesso aos campos 
 Acesso via variável 
 
1. struct aluno novo; 
2. novo.matricula=2012113491; 
3. scanf(“%s”,novo.nome); 
4. printf(“Nome do novo aluno: 
%s”,novo.nome); 
Registro – C – Acesso aos campos 
 Acesso via ponteiro 
 
1. struct aluno novo; 
2. struct aluno *p = &novo; 
3. p->matricula=2012113491; 
4. scanf(“%s”,p->nome); 
5. printf(“Nome do novo aluno: %s”,p-
>nome); 
Registro – C – funções 
 Registros são passados 
por valor: o programa 
abaixo imprime 10. 
 
1. #include<stdio.h> 
 
2. struct teste { 
3. int inteiro; 
4. }; 
 
5. void funcao(struct teste 
a) { 
6. a.inteiro *= 10; 
7. } 
 
8. int main() { 
9. struct teste t; 
10. t.inteiro = 10; 
11. funcao(t); 
12. printf("%d\n",t.inteiro); 
13. return 0; 
14. } 
 
Registro – C – funções 
 Registro – passo como parâmetro por 
valor ou por referência? 
 
 Depende do custo da cópia do registro de uma 
função para outra 
 
 Passagem por valor: melhor se o(s) registro(s) 
for(em) pequeno(s) 
 
 Passagem por referência: melhor se o(s) 
registro(s) for(em) grande(s) 
Enumerações 
 Definem um tipo com valores 
determinados em um certo domínio: 
 
 Trabalhador pode ser: empregado, 
desempregado, aposentado 
 
 Conta de banco pode ser: ativa, inativa, 
bloqueada 
Enumerações 
 Primeiro, definimos os valores possíveis 
da enumeração: 
 enum colors {black, blue, green, cyan, red, 
purple, yellow, white}; 
 
 Em seguida instanciamos um tipo 
enumerado: 
 enum colors cordaparede = white; 
Enumerações - C 
 Em muitas linguagens de programação, 
variáveis baseadas em enumeração 
podem receber SOMENTE os valores 
enumerados 
 
 Esse não é o caso no C! 
1. enum colors {black, blue, green, cyan, red, 
purple, yellow, white}; 
2. enum colors cordaparede = 23; 
Enumerações - C 
 Enumerações no C são um valor inteiro 
 
 Cada elemento é associado a um valor inteiro, 
por exemplo: 
 enum colors {black, blue, green, cyan, red, purple, 
yellow, white}; 
 
 Black – 0 Blue – 1 
 Green – 2 
 Cyan – 3 
 Purple – 4 
 Yellow – 5 
 White – 6 
Enumerações - C 
 Podemos definir os nossos próprios valores, que 
podem ser repetidos: 
 
1. enum diadasemana { 
2. domingo = 0, 
3. segunda = 1, 
4. terca = 2, 
5. quarta = 3, 
6. quinta = 4, 
7. sexta = 5, 
8. sabado = 0, 
9. }; 
 
Enumerações - C 
 Quando não definimos um valor explícito, 
o primeiro elemento recebe o valor zero 
 Elementos subsequentes recebem 1, 2, 3, 
… 
C - Typedef 
 O C ainda permite a criação “apelidos” 
para tipos básicos e seus modificadores: 
 
 Exemplos: 
 typedef bool char; 
 typedef inteiropos unsigned int; 
 
 No C: uint16_t, uint32_t, int16_t, int32_t, 
FILE, size_t, …

Outros materiais