Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos Iniciais Aula 03 DPEE 1038 Estrutura de Dados para Automação Curso de Engenharia de Controle e Automação Universidade Federal de Santa Maria beltrame@mail.ufsm.br
Sumário Estruturas em C Definição Declaração em C Uniões Parâmetros de funções 2
Estruturas em C Definição Definida como um grupo de itens Cada item (membro) érepresentado por um identificador próprio Estudante Nome Nascimento Curso Disciplinas Endereço Estrutura: Estudante Membros: Nome, Nascimento, Endereço, Curso, Disciplinas 3
Declarando estruturas em C struct { char first[10]; char middle; char last[20]; } str_name; struct nametype { char first[10]; char middle; char last[20]; struct nametype str_name; typedef struct { char first[10]; char middle; char last[20]; } NAMETYPE; NAMETYPE str_name; 4
Quando uma variável édeclarada como uma estrutura Pode se acessar cada membro individualmente nome_variavel. nome_membro Exemplos // Escreve na tela o conteúdo de first printf("%s", str_name.first); // Atribui o caractere m à middle str_name.middle = m ; // Se um membro da estrutura for um vetor for (i=0; i<20; i++) { str_name.last[i] = str_name2.last[i]; } 5
Um membro de uma estrutura pode ser declarado como outra estrutura struct nametype { // Estrutura 1 char first[10]; char last[20]; struct addrtype { // Estrutura 2 char street[40]; char city[10]; struct name_addr_type { // Combinação de 1 e 2 struct nametype name; struct addrtype address; 6
name_addr_type nametype (name) char first [10] char last [20] addrtype (address) char street [40] char city [10] 7
Se declararmos duas variáveis struct name_addr_type user1, user2; Os seguintes comandos são válidos // Atribuições user2.adress.city[4] = user1.name.first[1]; for (i=0; i<10; i++) { user1.name.first[i] = user2.name.first[i]; } // Alguns compiladores aceitam, desde que as // estruturas sejam do mesmo tipo user1 = user2; 8
Estruturas em C Uniões A estrutura do tipo union permite que uma variável seja interpretada de diferentes maneiras Exemplo: Empresa de seguros Modalidades: Vida (LIFE), Automóvel (AUTO), Residencial (HOME) Todas modalidades Nome, Endereço, Valor do seguro, Pagamento do prêmio mensal Seguro de vida Data de nascimento do assegurado, Nome do beneficiário Seguro do automóvel Número da licença, Estado, Modelo, Ano do automóvel Seguro residencial Dada de construção da casa, Indicativo de sistemas de segurança 9
Declarando uniões em C #define LIFE 1 #define AUTO 2 #define HOME 3 struct addr { char street[50]; char city[10]; char zip[5]; struct date { int month; int day; int year; (Continua) // Constantes // Estr. Endereço // (dado comum) // Estr. Data // (dado comum) 10
// Estrutura Apólice struct str_policy { int pol_number; char name[30]; struct addr address; int amount; float premium; int kind; // LIFE, AUTO ou HOME union { // União... // (dados comuns) // Declaração da variável policyinfo struct str_policy policyinfo; (Continua) 11
union { struct { char beneficiary[30]; struct date birthday; } life; struct { char license[10]; char state[2]; char model[15]; int year; } auto; struct { int yearbuilt; int security; } home; // Vida // Automóvel // Residencial 12
Estruturas em C Análise da estrutura Parte fixa: todas definições até a palavra union Parte variável: definições contidas em union { Denomina se variável pois nem todos os campos serão sempre utilizados Seu uso depende da modalidade de apólice de seguro O programador é responsável por que haja coerência entre um membro e o dado salvo nele Observar que, dependendo da modalidade, alguns membros não são empregados Observação Éusual manter um membro fixo para identificar a estrutura em uso (kind) 13
if (policyinfo.kind == LIFE) // Vida printf("%s %2d/%2d/%4d", policyinfo.life.beneficiary, policyinfo.life.birthday.month, policyinfo.life.birthday.day, policyinfo.life.birthday.year); else if (policyinfo.kind == AUTO) // Automóvel printf("%d %s %s %s %d", policyinfo.auto.license, policyinfo.auto.state, policyinfo.auto.model, policyinfo.auto.year); else if (policyinfo.kind == HOME) // Residencial printf("%d %d", policyinfo.home.yearbuilt, policyinfo.home.security); 14
Estruturas em C Parâmetros de Estruturas Para passar uma estrutura para uma função, precisamos passar seu endereço e referenciá la por meio de um ponteiro (*p).x ou p -> x 15
Exemplo // Função para escrita na tela fc_write_name (name) struct nametype *name { int i; for (i=0; (i<10)&&(name->first[i]!= \0 ); i++ ){ printf("%c", name->first[i]); } printf(" "); for (i=0; (i<20)&&(name->last[i]!= \0 ); i++ ){ printf("%c", name->last[i]); } } name.first = Erico name.last = Verissimo x = fc_write_name(name) // Erico Verissimo 16
Revisão Estruturas em C Éum grupo de itens Cada item (membro) é possui um identificador próprio nome_variavel. nome_membro União (union) Permite que uma variável seja interpretada de diferentes maneiras Dependendo da modalidade, alguns membros não são empregados Parâmetros de estruturas (*p).x ou p -> x 17