Você está na página 1de 27

Programao Estruturada

Prof. Raimundo Osvaldo Vieira


Prof. Evaldinolia Gilbertoni Moreira

Aula 09: Estrutura de dados


heterogneas

Registro - Structs
Exerccios
Atividade de laboratrio

Estruturas de Dados Heterogneas

Structs
Uma struct uma coleo de um ou mais valores
agrupados sob um nico identificador.

As estruturas constituem um recurso importante para


organizar os dados utilizados por um programa, pois
possibilita tratar um grupo de valores como uma nica
varivel.
Uma estrutura um tipo de dado cujo formato definido
pelo programador.

Estruturas de Dados Heterogneas

Definindo uma Estrutura


Palavra-chave que
declara uma struct

Etiqueta: nome dado


estrutura

struct nome_da_estrutura{
tipo var1;
tipo var2;
...
tipo varN;
};

Membros: so variveis de
tipos bsicos, vetores,
strings ou outras structs.

Estruturas de Dados Heterogneas

Exemplo 01: definio do novo tipo de dado struct Aluno.


struct Aluno{
int matricula;
float nota[3];
float media;
};

Quantas variveis foram


criadas?

Estruturas de Dados Heterogneas


A definio de uma struct no cria
nenhuma varivel, somente informa ao
compilador as caractersticas do novo tipo
de dado.
No h nenhuma reserva de memria.

Declarao de uma varivel do tipo definido


struct Aluno ICC;
Cria uma varivel chamada joaozinho do tipo struct
Aluno. Essa declarao reserva espao de memria
suficiente para armazenar todos os membros da struct.

Estruturas de Dados Heterogneas

Outra forma de declarar


struct Aluno{
int matricula;
float nota[3];
float media;
}ICC;
Cria uma varivel chamada joaozinho do tipo struct
Aluno. Essa declarao reserva espao de memria
suficiente para armazenar todos os membros da struct.

Estruturas de Dados Heterogneas

Declaraes Combinadas
struct Aluno{
int matricula;
float nota[3];
float media;
}PE, ICC, LPI;

Podemos declarar quantas variveis quisermos

Estruturas de Dados Heterogneas


Qual a disposio na
memria dos membros de
uma varivel struct?
Os membros de uma varivel struct so
armazenados em sequncia contnua na
memria.

Estruturas de Dados Heterogneas

Operador typedef

O propsito deste operador possibilitar a criao de novos


nomes para tipos de dados j existentes.
Sintaxe
typedef tipo_existente sinnimo;

Exemplo
typedef unsigned int uint;
int main(){
uint x;
...
}

Cria o sinnimo uint


Declara uma
varivel do tipo uint.

Estruturas de Dados Heterogneas

Usando typedef com struct

Com struct, podemos usar typedef de trs formas:

struct Aluno{
int matricula;
float nota[3];
float media;
};

typedef struct Aluno Aluno;


Aluno ICC;
Cria o sinnimo Aluno para o tipo struct Aluno
Cria uma varivel chamada ICCdo tipo Aluno

Estruturas de Dados Heterogneas

Usando typedef com struct

Com struct, podemos usar typedef de trs formas:

typedef struct Aluno{


int matricula;
float nota[3];
float media;
}Aluno;

Aluno ICC;

Cria uma varivel chamada ICC do tipo Aluno

Estruturas de Dados Heterogneas

Usando typedef com struct

Com struct, podemos usar typedef de trs formas:

typedef struct{
int matricula;
float nota[3];
float media;
}Aluno;

Aluno ICC;

Cria uma varivel chamada ICC do tipo Aluno

Estruturas de Dados Heterogneas

Como acessar os membros de uma struct


O operador ponto conecta o nome de uma varivel do tipo
struct a um membro dela.

A linguagem C trata os membros de uma struct como


quaisquer outras variveis simples.
ICC.matricula o nome de uma varivel do tipo
int e pode ser utilizada em todo lugar que se use variveis
desse tipo.

Estruturas de Dados Heterogneas

Operaes entre structs

Atribuio: uma varivel do tipo struct pode ser atribuda a


outra do mesmo tipo por meio de atribuio direta.
typedef struct{
int dia;
char ms[10];
int ano;
}Data;
Data aniversario = {30, julho, 2012};
Data Fernanda;
Fernanda = aniversario;

Estruturas de Dados Heterogneas

Operaes entre structs

Operaes Aritmtica: em linguagem C, essas operaes


devem ser feitas membro a membro.
typedef struct{
int pecas;
float preco;
}Venda;
Venda A = {20, 110.0}, B = {3, 16.5}, Total;
Total = A + B;

//Erro

Total.pecas = A.pecas + B.pecas;


Total.preco = A.preco + B.preco;

Estruturas de Dados Heterogneas

Structs Aninhadas
#include <stdio.h>
#include <stdlib.h>

typedef struct{
int dia;
char ms[10];
int ano;
}Data;
typedef struct{
int pecas;
float preco;
Data diavenda;
}Venda;

Estruturas de Dados Heterogneas

Structs Aninhadas
int main(){
static Venda A = {20, 110.0, {23, maro, 2012}};
printf(Peas: %d\n, A.pecas);
printf(Preco: %.2f\n, A.preco);
printf(Data: %d de %s de %d\n, A.diavenda.dia,
A.diavenda.mes, A.diavenda.ano);

system(pause);
return 0;
}

Estruturas de Dados Heterogneas

Vetor de Structs
Um vetor de structs tem por objetivo armazenar conjuntos de
elementos complexos.
Declarao de um vetor de structs

O processo de declarao de um vetor de structs


perfeitamente anlogo ao de declarao de qualquer outro tipo
de vetor.
Declara vendas como sendo um vetor
Exemplo
de 50 elementos. Cada elemento do
vetor uma struct do tipo Venda
Venda vendas[50];

O nome vendas o do vetor ( um endereo) em que os elementos


so estruturas.

Estruturas de Dados Heterogneas

Acessando membros de um vetor de structs

Membros individuais de cada estrutura em um vetor so


acessados aplicando-se o operador ponto.

Exemplo
vendas[n].preco;

A expresso refere-se ao membro preco da n-sima estrutura


do vetor.

Exemplo: Criando Estruturas Aninhadas


21

struct tipo_endereco
{
char rua [50];
int numero;
char bairro [20];
char cidade [30];
char sigla_estado [3];
};

Criando Estruturas Aninhas


22

struct ficha_pessoal
{
char nome [50];
unsigned int telefone[10];
struct tipo_endereco endereco;
};

Acessando os membros da estrutura


aninhada
23

main (void)
{
struct ficha_pessoal ficha;
strcpy (ficha.nome,"Luiz Osvaldo Silva");
ficha.telefone=4921234;
strcpy(ficha.endereco.rua,"Rua das Flores");
ficha.endereco.numero=10;

strcpy (ficha.endereco.bairro,"Cidade Velha");


puts(ficha.nome);

printf ("%d\n", ficha.telefone);


puts(ficha.endereco.rua);
puts(ficha.endereco.bairro);
}

Acessando os membros da estrutura


aninhada
24

main (void)
{
struct ficha_pessoal ficha[10];

strcpy (ficha[0].nome,"Luiz Osvaldo Silva");


ficha[0].telefone=4921234;
strcpy(ficha[0].endereco.rua,"Rua das Flores");
ficha[0].endereco.numero=10;
strcpy (ficha[0].endereco.bairro,"Cidade Velha");
puts(ficha[0].nome);
printf ("%d\n", ficha[0].telefone);
puts(ficha[0].endereco.rua);
puts(ficha[0].endereco.bairro);
}

Exerccios
26
1)

Com base em seu conhecimento defina os registros abaixo. Crie um algoritmo


que solicite ao usurio informar os dados do registro e imprima os mesmos na
tela:
a) cheque bancrio;

b) livro;
c) aluno;
d) endereo;

e) cadastro de pessoa;

Exerccios
27

2)

3)

Escreva um programa para cadastrar 1clientes de uma loja. As


informaes necessrias so: nome, endereo e telefone. Deve ser usada uma
estrutura de registro para a construo deste cadastro e deve ser usando
Typedef para a declarao do registro.
Refaa o exerccio 2 para que o programa suporte at 5 clientes. Ao final
do cadastro de cada cliente dever ser perguntado: "Novo Cliente (S/N)?".
Deve-se utilizar um vetor do tipo declarado como um registro para a soluo
deste programa.