Baixe o app para aproveitar ainda mais
Prévia do material em texto
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica COMPUTAÇÃO BÁSICA Registros Prof. Bruno Macchiavello (bruno@cic.unb.br) Universidade de Brasília – UnB Instituto de Ciências Exatas – IE Departamento de Ciência da Computação – CIC Prof. Bruno Macchiavello 1 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Introdução • Um registro ou estrutura (struct) é uma coleção de uma ou mais variáveis, possivelmente de tipos diferentes, agrupadas sob um único identificador. • Registros constituem um recurso importante para organizar os dados utilizados por um programa pois trata um grupo de valores como uma única variável. Prof. Bruno Macchiavello 2 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Introdução • Estruturas (ou registros) são classificados como variáveis compostas heterogêneas, pois podem agrupar variáveis de tipos diferentes. • Em contraposição, temos os vetores e matrizes, classificados como variáveis compostas homogêneas, pois somente agrupam variáveis do mesmo tipo. Prof. Bruno Macchiavello 3 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Registros • Exemplos Podemos ver que as variaveis Nome, Sexo, Endereço, Dados de Funcionários Código: 9182 Nome: Hermenegildo Florentil Sexo: Masculino Endereço: Rua dos Registros Isolados, 736 Cargo: Chefe de Divisória Salario: $ 455,46 • Cargo são Literais, o Código é um inteiro, e o Salario é do tipo real. Todas essas variaveis e seus tipos, criam um novo tipo de dado: DADOS DE FUNCIONÁRIOS • Podemos analisar que da mesma forma que existe os tipos, literal, inteiro, real, agora existe o tipo Dados de Funcionários, e variáveis podem ter esse tipo. Prof. Bruno Macchiavello 4 Cargo: Chefe de Divisória Salario: $ 455,46 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Registros • Em pseudo-código podemos declarar um registro como o exemplo abaixo Exemplo de declaração de um registro em pseudocódigo. Algoritmo FuncionariosDaEmpresa Prof. Bruno Macchiavello 5 Algoritmo FuncionariosDaEmpresa Variáveis i : inteiro funcionarioDaEmpresa : registro( nome, sexo, endereço, cargo : literal ; codigo : inteiro ; salario : real) Início .... Fim Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Registros • Ou da seguinte forma Exemplo de declaração de um registro em pseudocódigo. Algoritmo FuncionariosDaEmpresa Definições Prof. Bruno Macchiavello 6 Definições tipoFuncionarioDaEmpresa : registro( nome, sexo, endereço, cargo : literal ; codigo : inteiro ; salario : real) Variaveis funcionarioDaEmpresa : tipoFuncionarioDaEmpresa Inicio .... Fim Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Em Ansi C • Vamos ver primeiro um exemplo simples struct data { Prof. Bruno Macchiavello 7 { int dia; int mes; int ano; }; Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Em Ansi C • A palavra-chave struct informa ao compilador que um modelo de estrutura está sendo definido. • “data” é um identificador que dá nome à • “data” é um identificador que dá nome à definição da estrutura. • Uma definição de estrutura é um comando, por isso deve terminar em ponto-e-vírgula. Prof. Bruno Macchiavello 8 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Em Ansi C • Os campos de uma estrutura podem ser de qualquer tipo, inclusive uma estrutura previamente definida. • Porém, o tipo dos campos não podem ser o do próprio tipo que está sendo definido. • A definição do formato de uma estrutura pode ser feita dentro da função principal (main) ou fora dela. Prof. Bruno Macchiavello 9 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Em Ansi C – Usando Typedef • Novos tipos de dados podem ser definidos utilizando-se a palavra-chave typedef. typedef struct Prof. Bruno Macchiavello 10 typedef struct { <tipo> campo_1; <tipo> campo_2; ... <tipo> campo_n; } nome_do_tipo; Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Em Ansi C – Usando Typedef • O uso mais comum de typedef é com estruturas de dados, pois evita que a palavra-chave struct tenha de ser colocada toda vez que uma estrutura é declarada. #include <stdio.h> typedef struct { int codigo; Prof. Bruno Macchiavello 11 int codigo; float salario; char nome[50], sexo[10], endereco[50], cargo[50] } tipoDadosDeFuncionario; int main() { tipoDadosDeFuncionario dadosDeFuncionario; ... } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Em Ansi C - Declarando • Em C podemos também declarar: #include <stdio.h> struct dadosDeFuncionario{ Prof. Bruno Macchiavello 12 struct dadosDeFuncionario{ int codigo; float salario; char nome[50], sexo[10], endereco[50], cargo[50] }; /*Neste caso o novo tipo de dado se chama struct dadosDeFuncionario*/ int main() { struct dadosDeFuncionario dadosDeFuncionario; ... } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Em Ansi C - Declarando • Podemos declara como variavél global struct <etiqueta> { <tipo> campo_1; <tipo> campo_2; ... Prof. Bruno Macchiavello 13 <tipo> campo_2; ... <tipo> campo_n; } <variáveis>; Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Em Ansi C - Declarando • Porém, lembrar que normalmente NÃO é bom trabalhar com variáveis globais. #include <stdio.h> struct dadosDeFuncionario{ int codigo; float salario; Prof. Bruno Macchiavello 14 float salario; char nome[50], sexo[10], endereco[50], cargo[50] } dadosFunc; /* Neste caso, dadosFunc é variavel global, e não devemos utilizar variáveis globais!*/ int main() { dadosFunc.codigo = 9182; ... } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Acessando os campos • Podemos acessar individualmente os campos de uma determinada estrutura como se fossem variáveis comuns. • A sintaxe para acessar e manipular campos de • A sintaxe para acessar e manipular campos de estruturas é a seguinte: Prof. Bruno Macchiavello 15 <nome_da_variável><nome_da_variável>..<campo><campo> Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação UniversidadeUniversidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo Algoritmo FuncionariosDaEmpresa Definições tipoFuncionarioDaEmpresa : registro( nome, sexo, endereço, cargo : literal ; codigo : inteiro ; salario : real) Variaveis Prof. Bruno Macchiavello 16 Variaveis funcionarioDaEmpresa : tipoFuncionarioDaEmpresa Inicio funcionarioDaEmpresa.nome ← ‘ Hermenegildo Florentil’ funcionarioDaEmpresa.codigo ← 9182 funcionarioDaEmpresa.sexo ←‘masculino’ ... Fim Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo – Ansi C #include <stdio.h> typedef struct { int codigo; float salario; char nome[50], sexo[10], endereco[50], cargo[50]; } tipoDadosDeFuncionario; Prof. Bruno Macchiavello 17 } tipoDadosDeFuncionario; int main() { tipoDadosDeFuncionario dadosDeFuncionario; dadosDeFuncionario.codigo = 9182; dadosDeFuncionario.Salario = 455.46; ... } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Leitura de Dados • A leitura dos campos de uma estrutura a partir do teclado deve ser feita campo a campo, como se fosse variáveis independentes. Prof. Bruno Macchiavello 18 printf (“Digite o nome do aluno: ”); scanf (“%s”, aluno.nome); printf (“Digite a idade do aluno: ”); scanf (“%d”, &aluno.idade); Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo Algoritmo FuncionariosDaEmpresa Definições tipoFuncionarioDaEmpresa : registro (nome, sexo, endereço, cargo : literal ; codigo : inteiro ; salario : real) Variaveis funcionarioDaEmpresa[100] : tipoFuncionarioDaEmpresa Prof. Bruno Macchiavello 19 funcionarioDaEmpresa[100] : tipoFuncionarioDaEmpresa i : inteiro Inicio para i←0 até 99 faça leia funcionarioDaEmpresa[i].nome leia funcionarioDaEmpresa[i].sexo leia funcionarioDaEmpresa[i].endereço .... Fim Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo em C #include <stdio.h> typedef struct { int codigo; float salario; char nome[50], sexo[10], endereco[50], cargo[50]; } tipoDadosDeFuncionario; Prof. Bruno Macchiavello 20 int main() { tipoDadosDeFuncionario dadosDeFuncionario[100]; int i; for (i = 0; i<100; i++ ) { scanf(“%s”, dadosDeFuncionario[i].nome); scanf(“%d”, &dadosDeFuncionario[i].codigo); scanf(“%s”, dadosDeFuncionario[i].sexo); ... } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Registros aninhados • Um campo de um registro pode ser um outro registro. • Quando isso ocorre, temos um registro• Quando isso ocorre, temos um registro aninhado. • O padrão ANSI C especifica que as estruturas podem ser aninhadas até 15 níveis, mas a maioria dos compiladores permite mais. Prof. Bruno Macchiavello 21 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo #include <stdio.h> typedef struct { int dia; int mes; int ano } tipoData; /*o registro tipoData, é muito utilizado quando temos que armazenar datas*/ typedef struct { Prof. Bruno Macchiavello 22 typedef struct { tipoData data; char nome[50]; char cpf[13]; }tipoVisitanteDaEmpresa; int main() { tipoVisitanteDaEmpresa visitante; visitante.data.dia = 29; visitante.data.mes = 11; visitante.data.ano = 2007; visitante.cpf = ‘111111111-11’; .... } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Vetor de Registros • Usado quando precisamos de diversas cópias de uma estrutura. • Por exemplo, cada cliente de uma locadora de • Por exemplo, cada cliente de uma locadora de vídeo constitui um elemento de um vetor, cujo tipo é uma estrutura de dados que define as características de cada cliente. Prof. Bruno Macchiavello 23 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Vetores de Registros #include <stdio.h> typedef struct { int codigo; float salario; Prof. Bruno Macchiavello 24 float salario; char nome[50], sexo[10], endereco[50], cargo[50] } tipoDadosDeFuncionario; int main() { tipoDadosDeFuncionario dadosDeFuncionario[10]; ... } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Ponteiros para estruturas • Ainda não estudamos ponteiros. Porém, é muito comum utilizar ponteiros para declarar os registros • Para acessar uma estrutura com ponteiros pode-se usar duas sintaxes: �Operador ponto: �Operador seta: Prof. Bruno Macchiavello 25 *<ponteiro_estrutura>.<campo> <ponteiro_estrutura>-><campo> Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo #include <stdio.h> typedef struct { int dia; int mes; int ano } tipoData; Prof. Bruno Macchiavello 26 int main() { tipoData *p; /* define ponteiro p para registros data */ tipoData x; p = &x; /* agora p aponta para x */ (*p).dia = 31; /* mesmo efeito que x.dia = 31 */ (*p).mes = 8; (*p).ano = 1998; .... } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo Ansi C #include <stdio.h> typedef struct { int dia; int mes; int ano } tipoData; Prof. Bruno Macchiavello 27 int main() { tipoData *p; /* define ponteiro p para registros data */ tipoData x; p = &x; /* agora p aponta para x */ p->dia = 31; /* mesmo efeito que x.dia = 31 */ p->mes = 8; p->ano = 1998; .... } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Detalhes de C: ENUM • enum é a abreviação de ENUMERATE. • Podemos usar esta palavra chave para declarar e inicializar uma seqüência de constates inteiras. • Sua principal vantagem é quando não se quer inicializar todas as constantes e cada uma precisa ter um valor único. • Por padrão, a primeira constante equivale a zero. As restantes equivalem à anterior incrementada em um. Prof. Bruno Macchiavello 28 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica ENUM • colors é o nome dado para o grupo de constantes (opcional). • Se não é atribuído um valor para as constantes, enum colors {RED, GREEN, BLUE}; • Se não é atribuído um valor para as constantes, o valor padrão atribuído para o primeiro elemento na lista (RED em nosso caso) será 0 (zero). • As demais constantes com valor indefinido terão valor o da constante anterior mais 1 (um). • No nosso caso, GREEN = 1 e BLUE = 2. Prof. Bruno Macchiavello 29 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade dede BrasíliaBrasília Computação BásicaComputação Básica ENUM • Pode-se atribuir valores para as constantes. enum colors {RED = 1, enum colors {RED = 1, YELLOW, GREEN = 6, • Agora RED = 1, YELLOW = 2, GREEN = 6 e BLUE = 7. • Geralmente usa-se letras maiúsculas para dar nome às constantes. Prof. Bruno Macchiavello 30 BLUE};BLUE}; Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exercícios 1. Faça um algoritmo que cadastre os filmes de uma locadora, sendo que a locadora tem no máximo 100 filmes diferentes. Incialmente o lagorimo deve pedir a quantidade de filmes a cadastrar é depois pedir a seguinte informação para cada filme: Titulo, Categoria (Comedia, Ação, Drama, Desenho), Duração (em minutos), Nome do Diretor(a), Quantidade de Prof. Bruno Macchiavello 31 Desenho), Duração (em minutos), Nome do Diretor(a), Quantidade de copias que existem na locadora, e o ano de lançamento.
Compartilhar