Curso Profissional de Informática de Gestão
Módulo 6: Tipo Estruturado - Registos
LINGUAGENS DE PROGRAMAÇÃO
Conteúdos 1. Noção de registos 2. Vantagens da utilização de registos 3. Regras de utilização de registos 4. Manipulação de registos
Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Noção de registos Até agora todos os dados eram armazenados em
variáveis simples: char, int, float ou double. Podendo também ser armazenados conjuntos de valores relacionados em vectores, que tinham a capacidade de conter vários elementos do mesmo tipo. Os registos (designados Estruturas no C) permitem colocar, numa única entidade, elementos de tipos diferentes. Uma estrutura é, assim, um conjunto de uma ou mais variáveis (a que vulgarmente também se chama campos ou membros) agrupadas sob um único nome, de forma a facilitar a sua referência. As estruturas podem conter elementos de qualquer tipo de
dados válidos em C (tipos básicos ou mesmo outras estruturas) Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Declaração de estruturas A declaração de estruturas é realizada através
da seguinte sintaxe: struct [nome_da_estrutura] { tipo1 campo1, campo2; … tipon campo; }; Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Declaração de estruturas - exemplo Definir uma estrutura capaz de suportar
datas. struct Data { int Dia, Ano; char Mes[20]; };
Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Declaração de variáveis do tipo estrutura Para declarar uma variável do tipo struct
Data, atrás apresentado, basta indicar qual o tipo, seguido do nome das variáveis: struct Data d, datas[100]; Em que: d é uma variável do tipo struct Data. datas é um vector de 100 elementos, sendo cada
um deles um estrutura do tipo struct Data. Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Declaração de variáveis do tipo estrutura A declaração de variáveis pode também ser
realizada quando se faz a definição da própria estrutura: struct [nome_da_estrutura] { tipo1 campo1, campo2; … tipon campo; } v1, v2, …, vn; Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Exemplo: Definir uma estrutura capaz de suportar a
definição de um indivíduo. Declarar na definição as variáveis Paulo e Teresa, desse mesmo tipo. struct Pessoa { int idade; char sexo, est_civil; char nome[60]; float salario; } Paulo, Teresa; Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Acesso aos membros de uma estrutura Para aceder ao membro mmm de uma
estrutura eee usa-se o operador ponto (..) ficando eee.mmm Exemplo: struct Data {int dia, ano; char mês[12];} dt_nasc; dt_nasc.dia = 23; strcpy(dt_nasc.mes, ”Janeiro”); dt_nasc.ano = 1966;
Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Inicialização automática Uma estrutura pode ser inicializada quando é
declarada: struct nome_estrutura var ={val1, val2, …, valn}
Exemplos struct Data { int dia, ano; char mes[12]; } dt_nasc = {23,1966,”Jan”}; struct Data { int dia, ano; char mes[12]; } dt_nasc = {23,1966,”Jan”};
Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Definição de tipos - typedef Uma das desvantagens existentes na utilização de
estruturas está na declaração das variáveis que têm sempre que ser precedidas da palavra reservada struct seguida do nome da estrutura. O ideal seria podermos representar uma estrutura unicamente através de uma palavra, tal como fazemos com os tipos base da linguagem. Isto é possível através da palavra reservada typedef typedef: typedef tipo_existente sinónimo; A palavra typedef não cria um novo tipo. Permite apenas que um
determinado tipo possa ser denominado de forma diferente, de acordo com as necessidades do programador. Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Exemplo: Declare um novo tipo denominado PESSOA
que permita identificar a estrutura pessoa. typedef struct Pessoa { int idade; char sexo, est_civil; char nome[60]; float salario; } PESSOA; Atenção: na definição de um typedef não podem ser Atenção declaradas variáveis. Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Onde definir estruturas e typedef #include<. . . . .> #include<. . . . .> struct data{. . . .}; typedef . . . . . .; /* protótipos das funções */ . . . . . . /* funções */ f() {. . . .} g() {. . . .} main() {. . . .} Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Estruturas dentro de estruturas Uma estrutura pode conter, na sua definição,
variáveis simples, vectores, apontadores ou mesmo outras estruturas. A única restrição a que tem que obedecer, é
que todas as estruturas ou tipos utilizados na definição de uma nova estrutura têm que estar previamente definidos.
Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Exemplo Declare um novo tipo denominado pessoa que contenha o nome, idade, salário e data de nascimento. typedef struct { int Dia; char Mes[3+1]; int Ano; } DATA; typedef struct s_pessoa { char Nome[100]; int Idade; float Salario; DATA dt_Nasc; } PESSOA; Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Exemplo Declare uma variável simples desse tipo e um
vector com 3 pessoas. struct s_pessoa homem, mulher[3];
ou PESSOA homem, mulher[3];
Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Exemplo Como alterar o código para inicializar as
variáveis no momento da declaração? PESSOA homem
= {”To”, 23, 123.45, {10,”MAI”,1986}},
mulher = {{”Ze”, 51, 0.0, {15, ”JUN”, 1958}}, {”Alf”, 17, 52.0, {22, ”JUL”, 1992}}, {”NY”, 22, 25.93, {14, ”DEZ”, 1987}} };
Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Exemplo Adicionar um dia à data de nascimento do homem: homem.dt_Nasc.Dia++; Colocar o ano 1999 na segunda mulher do vector: mulher[1].dt_Nasc.Ano = 1999; Alterar o mês da última mulher para ”NOV”: strcpy(mulher[2].dt_Nasc.Mes, ”NOV”); Mostrar no ecrã a primeira letra de cada um dos
meses das mulheres:
for(i=0; i<3; i++) putchar(mulher[i].dt_Nasc.Mes[0]); Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Passagem de estruturas para funções A passagem de estruturas para funções faz-se indicando no
parâmetro o tipo associado à estrutura (ou ao typedef).
Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Bibliografia Damas, Luís; LINGUAGEM C; FCA; 2ª edição; Lisboa;
1999 Aguilar, Luis Joyanes; FUNDAMENTOS DE PROGRAMAÇÃO – Algoritmos, estruturas de dados e objetos; Mc Graw Hill; Tradução da 3ª edição; São Paulo; 2008 Azul, Artur Augusto; BASES DE PROGRAMAÇÃO 10; Porto Editora; Porto http://www.eisnt.com/GPSI/programacao/Aula4C.pdf http://www.linhadecodigo.com.br/Artigo.aspx?id=425 http://www.criarweb.com/artigos/825.php http://deei.fct.ualg.pt/PI_flobo/teorica7.html http://www.di.ubi.pt/~fsilva/prog/Prog_Cap4.pdf (em 10/11/2008) Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6
Bibliografia Damas, Luís; LINGUAGEM C; FCA; 2ª edição; Lisboa;
1999 Aguilar, Luis Joyanes; FUNDAMENTOS DE PROGRAMAÇÃO – Algoritmos, estruturas de dados e objetos; Mc Graw Hill; Tradução da 3ª edição; São Paulo; 2008 Azul, Artur Augusto; BASES DE PROGRAMAÇÃO 10; Porto Editora; Porto Em 10/11/2008
http://www.eisnt.com/GPSI/programacao/Aula4C.pdf http://www.linhadecodigo.com.br/Artigo.aspx?id=425 http://www.criarweb.com/artigos/825.php http://deei.fct.ualg.pt/PI_flobo/teorica7.html http://www.di.ubi.pt/~fsilva/prog/Prog_Cap4.pdf
Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 6