Sie sind auf Seite 1von 9

Agradecimentos

Introduo Cincia da Computao Registros em C


Prof. Ricardo J. G. B. Campello

Parte dos slides a seguir so adaptaes dos originais:


de A. L. V. Forbellone e H. F. Eberspcher do Prof. Rudinei Goularte

Sumrio
Conceito de Registro Implementao em C (structs) Arranjos de Registros

Registros
Definio:
Um registro uma varivel composta heterognea
um conjunto de dados estruturados, os quais podem ser de tipos diferentes

Os dados em um registro so representados atravs de variveis ou constantes, normalmente chamadas de campos

Registros
Razo da denominao (varivel composta heterognea):
Podem ser compostos de variveis (campos) de tipos diferentes
Caso mais trivial: apenas tipos simples (primitivos) Porm, veremos que um campo pode tambm ser um arranjo ou at outro registro!

Registros
Exemplo 2: Registro de Pagamento
Dados:
Nome, RG, CPF, salrio, horas trabalhadas, etc...

Exemplo 1: Passagem de nibus

Nmero: _______________ Origem: ________________ Destino: __________________ Data: ____ / ____ / _______ Horrio: ________ : _________ Poltrona: ____________ Preo: __________

Dados Estruturados (Estrutura de Dados):


Uma varivel (campo) para cada dado, mas... Um identificador comum para o conjunto (registro)

Registros
Exemplo 2: Registro de Pagamento
Cadeia de Caracteres Vetor de Inteiros Real
HT 1

Declarao de Registros
Declarao de Registro nico:
horas trabalhadas no bimestre

Nome CPF
HT 2 HT 3 HT 4

RG
HT 5 HT 6

Salrio

note que um dos campos um vetor


combinao de variveis compostas heterognea e homognea
7

struct { tipo_1 campo(s); tipo_2 campo(s); ... tipo_n campo(s); }; identificador;


8

Declarao de Registros
Exemplo:
struct { char NOME [30]; char CPF[12]; char RG[10]; int HT[6]; float SALARIO; }; Reg_Pag1;
9

Declarao de Registros
Declarao de Mltiplos Registros (Forma 1):
struct tipo_registro { tipo_1 campo(s); tipo_2 campo(s); ... tipo_n campo(s); }; identificadores;
10

Declarao de Registros
Exemplo:
struct Registro_Pagamento { char NOME [30]; char CPF[12]; char RG[10]; int HT[6]; float SALARIO; }; Reg_Pag1, Reg_Pag2, Reg_Pag3;

Declarao de Registros
Declarao de Mltiplos Registros (Forma 2):
struct tipo_registro { tipo_1 campo(s); tipo_2 campo(s); ... tipo_n campo(s); }; struct tipo_registro identificadores;
11 12

Declarao de Registros
Exemplo:
struct Registro_Pagamento { char NOME [30]; char CPF[12]; char RG[10]; int HT[6]; float SALARIO; }; struct Registro_Pagamento Reg_Pag1, Reg_Pag2, Reg_Pag3;
13

Declarao de Registros
Declarao de Mltiplos Registros (Forma 3):
typedef struct { tipo_1 campo(s); tipo_2 campo(s); ... tipo_n campo(s); } tipo_registro; tipo_registro identificadores;
14

Declarao de Registros
Exemplo:
typedef struct { char NOME [30]; char CPF[12]; char RG[10]; int HT[6]; float SALARIO; } Registro_Pagamento; Registro_Pagamento Reg_Pag1, Reg_Pag2, Reg_Pag3;
15

Registros como Campos


Um registro pode conter campos que so registros Exemplo:
Use typedef para declarar um tipo de registro address com os campos Rua, No, Cidade, UF, CEP Use o novo tipo declarado para incrementar o tipo de registro Registro_Pagamento declarado nos exemplos anteriores, de forma que este contenha um campo do tipo address para o endereo do empregado

16

Registros como Campos


Soluo:
typedef struct { char Rua[20], Cidade[15], UF[3]; int No, CEP; } address; typedef struct { char NOME[30], CPF[12], RG[10]; int HT[6]; float SALARIO; address ENDERECO; } Registro_Pagamento;
17

Exerccios
Declare variveis do tipo Registro_Pagamento definido no exemplo anterior Declare um tipo registro para o exemplo da passagem de nibus visto anteriormente, definindo os campos data (dia, ms e ano) e horrio (hora e minuto) como outros registros

18

Manipulao de Registros
Como acessar os campos de um registro?

Manipulao de Registros
Exemplo de Manipulao:
printf(Entre o nome do empregado: ); scanf(%s, Reg_Pag1.NOME); printf(Entre as horas trabalhadas no bimestre: ); for (i=0; i<=5; i++) scanf(%d, &Reg_Pag1.HT[i]); printf(Entre o salario: ); scanf(%f, &Reg_Pag1.SALARIO);

nome_do_registro . nome_do_campo
Exemplos de Atribuio:
Reg_Pag1.HT[0] = 163; Reg_Pag1.SALARIO = 852.7;
Vetor de Inteiros Real

Nota: C ANSI admite a atribuio direta entre estruturas


de um mesmo tipo. Por exemplo, Reg_Pag2 = Reg_Pag1
19 20

Manipulao de Registros
Quando um dos campos outro registro:
struct { char NOME[30], CPF[12], RG[10]; int HT[6]; float SALARIO; struct { char Rua[20], Cidade[15], UF[3]; int No, CEP; } ENDERECO; } Reg_Pag1;

Manipulao de Registros
E se tenho 500 empregados?
Declaro 500 variveis do tipo registro???
Atribuies

Reg_Pag1.SALARIO = 1200; ... Reg_Pag1.ENDERECO.No = 230; Reg_Pag1.ENDERECO.CEP = 15980; ...

21

22

Arranjos de Registros Arranjos de Registros


Combinao de estruturas homogneas com heterogneas
vetores ou matrizes cujas clulas so registros

Exemplo 2: Registro de Pagamento


Nome Nome CPF RG Nome RGHT 5 HT 6 HT CPF 1 HT 2 HT 3 HT 4 RG HT CPF 1 HT 2 HT 3 HT 4 Salrio HT 5 HT 6 500 HT 1 HT 2 HT 3 HT 4 HT 5 HT 6 Salrio ... FGTS 1.1 2 Salrio
1

Exemplo 1: nibus composto por passagens


1 2 3 4

Nmero: ____ Nome: ___________________ RG:_________ Origem: ________________ Destino: __________________ Data: ____ / ____ / _______ Horrio: ________ : _________ Poltrona: ____________ Preo: __________

44 24

Arranjos de Registros
Nome CPF RG HT 3 HT 4 HT 5 HT 6

Declarao
Exemplo:
typedef struct { char NOME [30]; char CPF[12];
RG HT 5 HT 6

[0]

HT 1

HT 2

Salrio

Nome

[1]
HT 1

CPF HT 2 HT 3 HT 4

char RG[10]; int HT[6]; float SALARIO; } Registro_Pagamento;

Salrio

[2]
HT 1

Nome CPF HT 2 HT 3 HT 4 RG HT 5 HT 6

Salrio

Registro_Pagamento Ficha_SP[500], Ficha_RJ[300], Ficha_MG[100];


25 26

...

Arranjos de Registros
FICHA_SP
Nome CPF RG HT 3 HT 4 HT 5 HT 6

Como referenciar este campo?


FICHA_SP[0].NOME

Arranjos de Registros
Exemplos de Atribuio:
FICHA_SP[2].SALARIO = 243.45; FICHA_SP[6].HT[3] = 228; scanf(%s, FICHA_SP[1].NOME); ...

[0]

HT 1

HT 2

Salrio

Como referenciar este campo?


RG

Nome

[1]
HT 1

CPF HT 2 HT 3 HT 4

FICHA_SP[1].HT[5]
HT 6

HT 5

Salrio

[2]
HT 1

Nome CPF HT 2 HT 3 HT 4 RG HT 5 HT 6

Como referenciar este campo?


FICHA_SP[2].SALARIO
27

...

Salrio

28

Exerccio 1
Fazer um programa, em C, que contenha a declarao de um registro PESSOA, contendo:
Nome (nome): at 30 caracteres; Sexo (sexo): 'M' ou 'F'; Data de nascimento (data_nas): dd/mm/aa; Nmero de dependentes (n_dep).

Exerccio 2
Generalize o programa do Exerccio 1 de tal forma que ele permita registrar 300 funcionrios
No necessariamente o programa deve registrar todos os 300 funcionrios. Logo, permita ao usurio uma opo de interromper o cadastro

O programa deve pedir ao usurio que digite as informaes de modo a preencher o registro. As informaes do registro devem ser escritas na tela

Exerccio 3
Uma determinada biblioteca possui obras de cincias exatas, cincias humanas e cincias biomdicas, totalizando 1500 volumes, 500 de cada rea. O proprietrio resolveu informatiz-la e, para tal, agrupou as informaes sobre cada livro do seguinte modo:
Cdigo de Catalogao (4 dgitos): ___________ Ano:_____ Doado: ( ) Sim ( ) No No. de Pginas: _____________

Exerccio 4
Uma determinada biblioteca possui obras de cincias exatas, cincias humanas e cincias biomdicas, totalizando 1500 volumes, 500 de cada rea. O proprietrio resolveu informatiz-la e, para tal, agrupou as informaes sobre cada livro do seguinte modo:
Cdigo de Catalogao (4 dgitos): _____________________ Doado: ( ) Sim ( ) No No. de Pginas: _____________

Nome da Obra: ______________________________________ Nome do Autor: _____________________ Editora: ______

Nome da Obra: ______________________________________ Nome do Autor: _____________________ Editora: ______

1. Construa um programa que declare tal estrutura de forma que


as informaes das obras possam ser organizadas em trs colunas de uma matriz, uma para cada rea

2. Complemente o programa do exerccio anterior para realizar


uma consulta: O usurio deve fornecer o cdigo da obra e sua rea. Escreve-se ento os campos do registro correspondente, ou que a obra no existe. Cdigo 1 encerra o algoritmo

Bibliografia
Schildt, H. "C Completo e Total", 3a. Edio, Pearson, 1997. Damas, L. Linguagem C, 10a. Edio, LTC, 2007

Das könnte Ihnen auch gefallen