Академический Документы
Профессиональный Документы
Культура Документы
2
Estruturas de Dados Heterogneas
Exemplos:
Endereo
sobrenome
empregado
salrio
(4 campos)
cargo
5
Estruturas (definio)
estrutura <nome_estrutura>
{
tipo_1 IDENTIFICADOR_1;
tipo_2 IDENTIFICADOR_2;
..................
tipo_n IDENTIFICADOR_n;
}
6
Estruturas em C
struct <nome_estrutura>
{
tipo_1 IDENTIFICADOR_1;
tipo_2 IDENTIFICADOR_2;
..................
tipo_n IDENTIFICADOR_n;
};
7
Estruturas (declarao)
8
Estruturas (declarao)
ou
typedef <nome_estrutura> <novo_nome_estrutura>;
{ {
caracter MATRICULA[15]; char matricula[15];
caracter NOME[100]; char nome[100];
} };
Declarao
... ...
funcionario f1; struct funcionario f1;
10
Estruturas: Definio e Declarao
Observaes:
11
Estruturas: Manipulao
Campos ou membros de uma estrutura podem
ser usados da mesma forma como as variveis.
12
Estruturas: Manipulao
Para modificar um campo de uma estrutura, basta
usarmos novamente o operador (.). No exemplo
anterior, poderamos ler o nome do funcionrio f1 da
seguinte forma
funcionario f1;
leia(f1.NOME);
13
Estrutura: Exemplo completo
Vamos ver agora um cdigo simples que faa uso da
estrutura criada anteriormente. Neste exemplo sero lidos
matrcula e nome de um funcionrio.
estrutura funcionario
{
caracter MATRICULA[15];
caracter NOME[100];
}
principal
{
funcionario f1;
leia(f1.MATRICULA);
leia(f1.NOME);
imprima("Informaes armazenadas:");
imprima(f1.MATRICULA);
imprima(f1.NOME);
}
14
Estrutura: Exemplo Completo
Cdigo do slide anterior em C
#include <stdio.h>
struct funcionario
{
char matricula[15];
char nome[100];
};
int main()
{
struct funcionario f1;
gets(f1.matricula);
gets(f1.nome);
puts("Informaes armazenadas:\n");
puts(f1.matricula);
puts(f1.nome);
return 0;
}
15
Estruturas: Exemplos(2)
estrutura est_endereco
{
caracter RUA[50];
inteiro NUMERO;
Definio
caracter BAIRRO[20];
caracter CIDADE[30];
caracter SIGLA_ESTADO[3];
inteiro CEP;
}
17
Estruturas: Outro exemplo em C
char bairro[20];
char cidade[30]; A estrutura passar a
ser referenciada pelo
char sigla_estado[3]; nome que aparece aqui
int cep;
}endereco; A criao de variveis
fica bastante facilitada
dessa forma
Declarao
endereco end1;
18
Estruturas: Exemplos (3)
Definio de uma estrutura onde um de seus campos outra
estrutura (est_endereco):
estrutura ficha_pessoal
{
caracter NOME[50];
inteiro TELEFONE;
est_endereco END;
}
ficha_pessoal NOME1,NOME2;
19
Estruturas: Exemplos (3) em C
Definio de uma estrutura onde um de seus campos outra
estrutura (endereco):
estrutura ficha_pessoal
{
caracter NOME[50];
inteiro TELEFONE;
est_endereco END;
}
ficha_pessoal NOME1,NOME2;
21
Estruturas que possuem campos que
so estruturas
Para acessar os campos da estrutura interna
(END), podemos fazer da seguinte forma:
Campos da estrutura:
NOME1. NOME
TELEFONE
END
22
Estruturas que possuem campos que
so estruturas
Para acessar os campos da estrutura interna
(END), podemos fazer da seguinte forma:
Campos da estrutura:
NOME1.END. RUA
NUMERO
BAIRRO
CIDADE
SIGLA_ESTADO
CEP
23
Estruturas que possuem campos que
so estruturas
Para acessar os campos da estrutura interna
(END), podemos fazer da seguinte forma:
Valor:
NOME1.END.NUMERO 10;
OU
Valor:
NOME1.END.CEP 31340230;
24
Estruturas que possuem campos que
so vetores
Em alguns casos o tipo estrutura possui vetores
como um dos seus campos.
estrutura sdados
{
inteiro X[4];
caracter Y[10];
}
sdados REGISTRO;
O acesso a estes campos feito da mesma
maneira como acesso direto a um vetor.
REGISTRO.X[2] 100;
REGISTRO.Y[1] 'x';
25
Atribuio direta entre estruturas
Uma das vantagens ao utilizarmos estruturas a
possibilidade de copiarmos toda a informao de uma
estrutura para outra do mesmo tipo com uma atribuio
simples:
estrutura coordenadas
{
int X;
int Y;
}
coordenadas PRIMEIRA, SEGUNDA;
PRIMEIRA.X 20;
PRIMEIRA.Y 30;
SEGUNDA PRIMEIRA;
26
Exemplo Completo
Notas
1 2 3 4
28
Exemplo Completo
ref. definir estrutura
inicio
1
ref. declarar variveis
ref. ler os dados de um aluno
ref. imprimir os dados do aluno
fim.
29
Exemplo Completo
ref. definir estrutura
inicio
2
ref. declarar variveis
ref. ler os dados de um aluno
ref. imprimir os dados do aluno
fim.
30
Exemplo Completo
ref. definir estrutura
inicio
3
ref. declarar variveis
ref. ler os dados de um aluno
ref. imprimir os dados do aluno
fim.
leia(ALUNO.NOME);
para ( I 0 ; I 3; I I + 1 ) faa
{
leia(ALUNO.NOTA[I]);
}
31
Exemplo Completo
ref. definir estrutura
inicio
4
ref. declarar variveis
ref. ler os dados de um aluno
ref. imprimir os dados do aluno
fim.
para ( I 0 ; I 3; I + 1 ) faa
{
imprima(ALUNO.NOTA[I]);
}
32
Exemplo Completo
Juntando todos os
{definio da estrutura} refinamentos.
estrutura cad_aluno
{ {leitura dos dados de um aluno}
caracter NOME[40]; leia(ALUNO.NOME);
real NOTAS[4];
para ( I 0 ; I 3; I I + 1 ) faa
}
{
principal
leia(ALUNO.NOTA[I]);
{
}
{declarao das variveis}
{impresso dos dados do aluno}
cad_aluno ALUNO;
imprima(ALUNO.NOME);
inteiro I;
para ( I 0 ; I 3; I I + 1 ) faa
{
imprima(ALUNO.NOTA[I]);
}
} 33
Exemplo Completo em C
#include <stdio.h>
#include <stdlib.h>
typedef struct cad_aluno
{
char nome[40];
float nota[4];
}aluno;
int main()
{
aluno aluno1;
int i;
gets(aluno1.nome);
for(i = 0; i <= 3; i++)
scanf("%f", &aluno1.nota[i]);
puts(aluno1.nome);
for(i = 0; i <= 3; i++)
printf("%f\n", aluno1.nota[i]);
return 0;
} 34
Subrotinas e estruturas
Como qualquer outra varivel, uma varivel do tipo estrutura pode ser
usada como parmetro. Tambm, uma varivel do tipo estrutura pode
ser passada para uma subrotina por referncia ou por valor.
proc1(ref Texemplo Y)
estrutura Texemplo
Definio da { Passagem por
{
estrutura .... referncia
tipot CAMPO1;
fnc1(Y);
tipot CAMPO2;
....
}
}
{.............................} Tipo de retorno
{..........................}
da funo
real fnc1(Texemplo X)
Texemplo fnc2(inteiro A)
{
{
....
Passagem por Texemplo V;
}
valor ....................
retorne V;
} 35
Vetores de Estruturas
Pode-se criar vetores de estruturas como se criam
vetores de tipos primitivos.
36
Declarao de vetor de estrutura
Suponha que deseja-se manter um registro
de informaes relativas a passagens
rodovirias de todos lugares (poltronas) de
um nibus.
37
Declarao de vetor de estrutura
Pode-se utilizar uma estrutura referente a cada poltrona
(passagem) e para agrupar todas elas utiliza-se um vetor de
estruturas.
Um nibus possui 44 lugares numerados de 0 a 43:
0
Nome:__________ Nmero:__________
1
De:______________ Para:_____________
Data:____/____/____ Horrio:___________
Poltrona:__________ Distncia:__________
43
38
Declarao de vetor de estrutura
Declarao:
estrutura reg_passagem
{
caracter NOME[50];
inteiro NUMERO;
caracter ORIGEM[20];
caracter DESTINO[20];
caracter DATA[8];
caracter HORARIO[5]; Em C utilizaremos a
inteiro POLTRONA; mesma sintaxe para criar
vetores de estruturas
real DISTANCIA;
}
reg_passagem VET_PASSAGEM[44];
39
Declarao de vetor de estrutura
Acessos:
VET_PASSAGEM[3].NUMERO;
VET_PASSAGEM[34].DISTANCIA;
VET_PASSAGEM[2].ORIGEM;
40
Declarao de vetor de estrutura
41
Declarao de vetor de estrutura
Nome:______
Esquematicamente: notas
Nome:______
1 2 3 4
notas
Nome:______
Cadastro de notas
1 2 3 4
escolares notas
Nome:______
1 2 3 4 7
notas
Nome:______
notas
1 2 3 4 6
Nome:______
notas
1 2 3 4 5
Nome:______
1 2 3 4 4 tor
notas
Nome:______ ve
1 2 3 4 3 d o
notas e s
2 d i c
1 2 3 4
n
1
0 42
Declarao de vetor de estrutura
0
1
Cadastro de notas 2
escolares Nome:______
3
notas
4 1 2 3 4
6
7
43
Declarao de vetor de estrutura
estrutura cad_aluno
{
caracter NOME[40];
real NOTAS[4];
}
cad_aluno ALUNOS[8];
44
Leitura de um vetor de estrutura
Procedimento para ler os dados dos alunos:
54
Exerccios
4) Faa um programa (funo principal) para leitura, via teclado, dos
dados de um aluno. Os dados a serem guardados na estrutura
aluno so os seguintes: nome, curso, idade. Ao final, imprima estas
informaes na tela.
55
Exerccios
56
Exerccios
10) Faa um programa que permita a entrada de registros com CPF,
nome, idade, cidade e telefone de no mximo 100 pessoas. Faa
um menu com as seguintes opes:
Menu:
1 Ler as informaes de uma pessoa
2 Imprima por idade
3 Imprima por inicial
4 Imprima todos os registros cadastrados
O programa dever ter as seguintes caractersticas:
No primeiro item, pea inicialmente o ndice do vetor que
deseja alterar.
No segundo item, pea a idade mnima e mxima e imprima
as pessoas que esto neste intervalo.
Faa funes para realizar as operaes de cada um dos
itens do menu.
Inicialize o CPF de todos os 100 registros no incio do
programa com -1. Utilize essa informao no item 4 para
definir se um registro foi ou no lido naquela posio
especfica do vetor. CPF com valor -1 simbolizam posies
no lidas do vetor. 57
Estruturas
DCC 120
Estruturas: Declarao
A sintaxe para declarao de uma varivel deste tipo a seguinte:
struct <nome_estrutura>
{
tipo1 nome1;
tipo2 nome2; ...
};
struct <nome_estrutura> identif_1,identif_2,...;
Ou:
struct <nome_estrutura>
{
tipo1 nome1;
tipo2 nome2;...
} identificador1,identificador2,..;
59
Estrutura
struct funcionario
Definio
{
char matricula[15];
char nome[100];
};
Declarao
...
struct funcionario f1;
60
Estruturas: Manipulao
Campos ou membros de uma estrutura podem
ser usados da mesma forma como as variveis.
61
Estruturas: Manipulao
62
Estrutura: Exemplo Completo
#include <stdio.h>
struct funcionario
{
char matricula[15];
char nome[100];
};
int main()
{
struct funcionario f1;
gets(f1.matricula);
gets(f1.nome);
puts("Informaes armazenadas:\n");
puts(f1.matricula);
puts(f1.nome);
return 0;
}
63
Estruturas: Outras formas de Declarao
struct endereco
{
char rua [50];
int numero;
char bairro[20];
char cidade[30];
char sigla_estado[3];
int CEP;
}end;
64
Estruturas: Outras formas de Declarao
struct horario
{
int horas;
int minutos;
int segundos;
} horario_do_nascimento = { 8, 45, 0 };
65
Typedef
Permite a definio de um novo nome para um
determinado tipo. A sintaxe :
typedef antigo_nome novo_nome;
Exemplos:
typedef int inteiro;
produto estoque[100];
68
Acesso aos elementos do vetor
typedef struct sproduto
{
int codigo;
char descricao[120];
}produto;
69
Acesso aos elementos do vetor
typedef struct sproduto
{
int codigo;
char descricao[120];
}produto;
produto estoque[100];
...
for(int i = 0; i < 100; i++)
{
scanf("%d", &estoque[i].codigo);
gets(estoque[i].descricao);
}
70
Cdigo completo do exemplo
#include <stdio.h>
#define TAM 100
typedef struct sproduto
{
int codigo;
char descricao[120];
}produto;
int main()
{
int i;
produto estoque[TAM]; // Cria vetor de estruturas
for( i = 0; i < TAM; i++)
{
printf("Informe o codigo do produto %d: ", i);
scanf("%d%*c", &estoque[i].codigo); // %*c descarta o '\n'
printf("Informe a descricao do produto %d: ", i);
gets(estoque[i].descricao);
}
71
Inicializao de um vetor de estruturas
produto estoque[3] =
{235, "Teclado USB",
245, "Monitor LCD",
515, "Memoria DDR"};
72
Inicializando um vetor de estruturas
typedef struct sproduto
{
int codigo;
char descricao[120];
}produto;
...
produto estoque[100];
lerProdutos(estoque);
...
75
Estruturas e funes Exemplo 2/3
..........
void LerProdutos( produto estoque[TAM] )
{
int i;
printf("Listagem dos produtos armazenados:\n");
for( i = 0; i < TAM; i++)
{
printf("Informe o codigo do produto %d: ", i);
scanf("%d%*c", &estoque[i].codigo); // %*c descarta o '\n'
printf("Informe a descricao do produto %d: ", i);
gets(estoque[i].descricao);
}
}
...............
76
Estruturas e funes Exemplo 3/3
..........
.........
77
Estruturas e funes - Completo
#include <stdio.h>
#define TAM 4
78
Estruturas e funes - Completo
Continuao...
void ImprimeProdutos( produto estoque[TAM] )
{
int i;
for( i = 0; i < TAM; i++)
printf("%3d - %s\n", estoque[i].codigo,estoque[i].descricao);
}
int main()
{
int i;
produto estoque[TAM]; // Cria vetor de estruturas
LerProdutos(estoque); // Chama funo de leitura
ImprimeProdutos(estoque); // Chama funo de impresso
return 0;
}
79
Exerccios
1) Faa um programa que leia as informaes de N alunos (sendo N definido
com a diretiva define). As informaes que devero ser lidas de cada
aluno so: matrcula, nome e mdia final. Ao final, informe os nomes dos
alunos que foram aprovados (>= 60).
81
Exerccios
4) continuao...
O seu programa dever conter um menu com as seguintes
funcionalidades:
(a) Ler a base de dados (cdigo, leite, alimento, nascimento) informados
pelo usurio e armazenar em um vetor de estruturas.
(b) Preencher o campo abate, considerando que a cabea de gado ir para
o abate caso:
tenha mais de 5 anos, ou;
produza menos de 40 litros de leite por semana, ou;
produza entre 50 e 70 litros de leite por semana e ingira mais de 50
quilos de alimento por semana.
(c) Imprimir a quantidade total de leite produzida por semana na fazenda.
(d) Imprimir a quantidade total de alimento consumido por semana na
fazenda.
(e) Imprimir a quantidade total de leite que vai ser produzido por semana na
fazenda, aps o abate
(f) Imprimir a quantidade total de alimento que vai ser consumido por
semana na fazenda, aps o abate
(g) Imprimir nmero de cabeas de gado que iro para o abate.
(h) Inclua uma opo para sair do menu.
82