Baixe o app para aproveitar ainda mais
Prévia do material em texto
CIn.ufpe.br Computação Eletrônica Aula 8 – Estruturas de Dados Prof.: André Tiba akot@cin.ufpe.br Site da disciplina: www.cin.ufpe.br/~hfb/ce CIn.ufpe.br Tópicos da Aula • Quando estudamos vetores, vimos coleções homogêneas de dados, onde todos os elementos possuíam o mesmo tipo de dados. Hoje aprenderemos a criar estruturas de dados heterogêneas. – Tipos Primitivos x Tipos Estruturados – Conceito de Tipos Estruturados – Declaração de Estruturas em C (struct) – Variáveis do tipo struct – Operações com estruturas – Comando typedef – Passando Estruturas para Funções – Estruturas Aninhadas – Vetores de Estruturas CIn.ufpe.br Tipos de Dados Primitivos vs Estruturados • C oferece tipos primitivos que servem para representar valores simples Reais (float, double), inteiros (int), caractere (char); • C oferece também mecanismos para estruturar dados complexos nos quais as informações são compostas por diversos campos, podendo ter de tipos diferentes. • São chamados de: – Tipos de dados estruturados ou registros (em c: struct). CIn.ufpe.br Tipos de Dados Estruturados • Os tipos de dados estruturados permitem agrupar conjuntos de tipos de dados distintos sob um único nome; • Podemos criar vários objetos na memória de um determinado tipo estruturado, previamente definido. • Ex.: Tipo de dados Campo String Nome String Endereço Inteiro Telefone Inteiro Idade String Data de Nascimento Float Peso Float Altura Cadastro_Pessoal Nome da Estrutura (tipo composto) Campos ou Membros . . . CIn.ufpe.br Definindo Estruturas de Dados • Forma geral: CIn.ufpe.br Definindo Estruturas de Dados • Em C, esta estrutura de dados pode ser definida da seguinte maneira: Tipo de dados Campo String Nome String Endereço Inteiro Telefone Inteiro Idade String Data de Nascimento Float Peso Float Altura Cadastro_Pessoal Campos . . . . . . Nome da Estrutura (tipo composto) CIn.ufpe.br Importância de Estruturas de Dados • Considere o ponto P, com coordenadas x e y, ou seja, P(x,y); • Sem mecanismos para agrupar as duas coordenadas, P será descrito em um programa na forma: • Esta representação não deixa claro que estas variáveis estão conectadas (são partes de um todo) compondo a representação de um Ponto 2D; CIn.ufpe.br Importância de Estruturas de Dados • Uma estrutura serve para agrupar diversas variáveis dentro de um único contexto: • Com isso, a estrutura Ponto2D passa a ser um tipo. Então, podemos declarar uma variável deste tipo da seguinte forma: CIn.ufpe.br Acessando Membros do Tipo Ponto • Membros de uma estrutura são acessados via o operador de acesso ( “.” ): O nome da variável do tipo struct deve vir antes do “.” Após o “.” vem o nome do campo que será acessado. Forma geral: nome_variavel.nome_do_campo CIn.ufpe.br Exemplo: CIn.ufpe.br Onde Declarar um Tipo Estruturado? • Geralmente, declara-se um tipo estruturado fora das funções – Escopo da declaração engloba todas as funções no mesmo arquivo fonte; • Pode-se, também, declarar tipos estruturados dentro de funções; – Neste caso, escopo do tipo estruturado limita-se a função; • Há outras formas de declarar estruturas e variáveis. Ex.: Obs: Com estas formas, perde-se em legibilidade. CIn.ufpe.br Inicializando Variáveis de Tipos Estruturados • Uma variável de um tipo estruturado pode ser inicializada com uma estrutura com o auxílio do abre-fecha chaves (“{” e “}”): Deve-se inicializar os membros na ordem correta! CIn.ufpe.br Atribuição de Estruturas • A estrutura armazenada por uma variável de um tipo estruturado pode ser atribuída a outra variável deste mesmo tipo estruturado: Atribuição da estrutura contida em p2 para p1. CIn.ufpe.br Atribuição de Estruturas • A inicialização de uma estrutura deve ser feita no ato de sua declaração: Errado! CIn.ufpe.br Outras Operações com Estruturas • Como escrever um programa que imprime a soma das coordenadas de dois pontos? Errado! Não podemos somar estruturas inteiras CIn.ufpe.br Outras Operações com Estruturas • Como escrever um programa que imprime a soma das coordenadas de dois pontos? Certo! Temos que atuar membro a membro CIn.ufpe.br Usando typedef • O comando typedef permite criar novos nomes para tipos existentes; • Criação de sinônimos para os nomes de tipos – Útil para abreviar nomes de tipos ou tipos complexos • Forma Geral: typedef tipo_existente sinonimo; • Ex.: • Define a palavra “uint” como sendo um novo tipo, sinônimo do tipo “unsigned int”; CIn.ufpe.br Usando typedef • Muito útil para evitar a necessidade de utilizar a palavra “struct” nas declarações de variáveis tipo estrutura: • ou Simplifica a declaração de variáveis CIn.ufpe.br Passagem de Estruturas para Funções • Assim como podemos passar tipos primitivos como argumentos para uma função, também podemos passar estruturas: A passagem será feita por valor, resultando em uma cópia de p1 para p. CIn.ufpe.br • Uma função pode retornar uma estrutura: Retornando Estruturas O retorno será feito por valor, resultando em uma cópia de s para p3 CIn.ufpe.br Estruturas Aninhadas • Membros de uma estrutura podem ser outras estruturas previamente definidas Ex.: CIn.ufpe.br Exemplo: Ponto está dentro do Círculo? 2 21 2 21 )()( yyxxd Um ponto está no interior de um círculo se sua distância para o centro é menor que o raio do círculo CIn.ufpe.br Vetores de Estruturas • Podemos utilizar vetores de estruturas. • Considere o cálculo do centro geométrico de um conjunto de pontos: CIn.ufpe.br Atividade 1 • Faça um programa que declare uma estrutura “Fucionario” com os campos, nome, cargo, endereço, CPF, idade e salário. • O programa deve ler do teclado as informações de 5 funcionários em um vetor de estruturas; • Em seguida o programa imprime o nome e o salário de cada funcionário; • Por fim, o programa imprime o total pago para todos os funcionários. Ex.: Maria.......R$ 2.500,00 João.........R$ 2.000,00 Pedro.......R$ 1.500,00 ------------------------------ Total.........R$ 6.000,00 CIn.ufpe.br Atividade 1 CIn.ufpe.br Atividade 2 • Altere o programa anterior: – Crie uma função que recebe como entrada o vetor de funcionários e uma string contendo o nome de um cargo, e retorna o total dos salários pagos para aquele cargo; – Imprima o valor obtido pelo retorno da função descrita acima. CIn.ufpe.br Atividade 2 CIn.ufpe.br Atividade 3 • Crie um programa que armazene o nome, o telefone e o e-mail de um grupo de 10 pessoas, utilizando vetores de estrutura. – Peça para o usuário digitar num trecho das iniciais de um nome, de um telefone ou de um e-mail, e faça com que o programa imprima os dados que correspondem a este trecho. CIn.ufpe.br Atividade 3 CIn.ufpe.br Atividade 3 CIn.ufpe.br Atividade 4 • Seja um conjunto de 4 objetos pontuais, cada com uma certa massa m, distribuídos no plano XY. Crie uma estrutura que armazene estas três informações. Defina um vetor de estruturas que guarde as informações dos 4 objeto (passadas pelo teclado). Em seguida, construa uma função calcule o centro de massa do sistema, imprimindo o resultado.CIn.ufpe.br Atividade 4 CIn.ufpe.br Atividade 4 CIn.ufpe.br Atividade 5 • Um pintor recebeu um trabalho para pintar 10 apartamentos, que podem ter um ou dois quartos. Além dos quartos, deve-se pintar a sala e a cozinha (incluindo o teto). – Para facilitar a estimativa da área a ser pintada, considere que cada cômodo é um retângulo (lados L1 e L2), e que devido a reforma dos apartamentos, cada um tem sua própria altura h. Crie um programa que estime a área total a ser pintada de paredes e de tetos, para os dados dos apartamentos que são lidos via teclado. Crie duas estruturas, uma que contenha as áreas dos cômodos de um apartamento, e outro com os lados e altura. Guarde as informações em um vetor de estruturas. CIn.ufpe.br Atividade 5 CIn.ufpe.br Atividade 5
Compartilhar