Vous êtes sur la page 1sur 51

Tema: Estruturas de dados compostas

- Registros
Professor MSc. Edilene A. Veneruchi de
Campos
Objetivos deste encontro
Identificar a necessidade de variveis
heterogneas (registros);
Definir e criar variveis registros;
Armazenar valores em registros;
Recuperar valores contidos em registros;
Criar algoritmos que utilizem registros.
O que um registro?
um tipo de estrutura de dados;
uma reunio de dados sobre um determinado
elemento (ou objeto);
Cada dado dentro de um registro chamado de
campo (ou atributo);
Descreve com mais riqueza elementos reais.
Representao grfica de um registro

Varivel Pessoa
nome Jos
peso 85.5
idade 47
Uso de registros

Registros devem ser utilizados quando se


necessita trabalhar com diferentes dados
relativos aos mesmo elemento.
Exemplos para uso de registro
Exemplo 1:
Preciso controlar o estoque de uma loja e, para isto,
devo controlar os dados relativos aos produtos
(descrio, preo de custo e preo de venda).

Produto
descricao Caneta
precoCusto 1.00
precoVenda 2.00
Exemplos para uso de registro
Exemplo 2:

Uma escola necessita Aluno


armazenar dados sobre nome Maria
seus alunos (nome, srie, serie 5
turma) para gerar os turma A-mat
dirios de classe.
Definindo um tipo registro

Um registro representa um novo tipo de dado,


capaz de reunir dentro de uma mesma varivel tipos
diferentes.
Assim, para se trabalhar com registro deve-se,
inicialmente, definir este novo tipo de dado.
Definindo um tipo registro

tipo
Produto = registro
descricao: CARACTERE
precoCusto: REAL
precoVenda: REAL
fimregistro
Criao de um registro

Aps a definio do novo tipo, um registro criado


como uma varivel qualquer.

Var
estoque: Produto
Armazenando valores em um registro
Varivel estoque
descricao Caneta
precoCusto 1.00
precoVenda 2.00

Deve-se informar o nome da varivel, seguido de um


ponto e do nome do campo desejado.

estoque.descricao Caneta
estoque.precoCusto 1.0
estoque.precoVenda 2.0
Armazenando valores em um registro

Outra forma poderia ser solicitando os valores a


algum, conforme a seguir:

LEIA(estoque.descricao)
LEIA(estoque.precoCusto)
LEIA(estoque.precoVenda)
Juntando tudo ...
Algoritmo Exemplo
tipo Produto = registro
descricao: CARACTERE
precoCusto: REAL
precoVenda: REAL
fimregistro
Var
estoque: Produto
Juntando tudo ...
ESCREVA(Digite descrio do produto: )
LEIA(estoque.descricao)
ESCREVA(Digite preo de custo do produto: )
LEIA(estoque.precoCusto)
ESCREVA(Digite preo de venda do produto: )
LEIA(estoque.precoVenda)
fimalgoritmo
Algoritmo usando registro
Problema: Receber a descrio, o preo de custo e
o preo de venda de um produto. Depois, mostrar o
lucro que ser obtido ao vend-lo.

Algoritmo Venda
tipo Produto = registro
descricao: CARACTER
precoCusto: REAL
precoVenda: REAL
fimregistro
Var estoque: Produto
lucro: REAL
Algoritmo usando registro (continuao)

ESCREVA(Digite descrio do produto: )


LEIA(estoque.descricao)
ESCREVA(Digite preo de custo do produto: )
LEIA(estoque.precoCusto)
ESCREVA(Digite preo de venda do produto: )
LEIA(estoque.precoCusto)
lucro estoque.precoVenda estoque.precoCusto
ESCREVA(Lucro = , lucro)
fimalgoritmo
Vetor e Matriz de registro

Um registro representa um novo tipo de dado.


Assim sendo, pode-se criar, tambm, vetores e
matrizes de registro.

Exemplo:
Var
estoque: Vetor[1..15] de Produto
M: Vetor[1..3, 1..10] de Produto
Acessando um valor dentro de um campo
de um vetor de registro
Para acessar um valor contido em um campo de
uma posio de um vetor de registro, deve-se seguir
a hierarquia:

Nome_varivel[nmero_ndice].nome_campo

1 2 3
3
Resolvendo problemas com vetor de
registro

Problema 1:
Uma loja necessita cadastrar os 15 produtos que
comercializa. Depois, necessita saber o lucro
gerado pela venda de cada produto,
juntamente com o lucro mdio de todo o seu
estoque.
Resolvendo problemas com vetor de
registro

descricao Caneta Lpis Caderno Lapiseira ... Papel A4


precoCusto 1.00 0.5 15.00 4.5 ... 18.00
precoVenda 2.00 0.9 23.00 6.0 ... 29.00
1 2 3 4 ... 15
Soluo (em portugol)

Algoritmo Lucro
tipo Produto = registro
descricao: CARACTERE
precoCompra: REAL
precoVenda: REAL
fimregistro
Var
estoque: Vetor[1..15] de Produto
lucro, calc: Real
i: INTEIRO
calc 0
para i de 1 ate 15 faa
ESCREVA (Digite descrio: )
LEIA (estoque[i].descricao)
ESCREVA (Digite preo de custo: )
LEIA (estoque[i].precoCusto)
ESCREVA (Digite preo de venda: )
LEIA (estoque[i].precoVenda)
lucro estoque[i].precoVenda
estoque[i].precoCompra
calc calc + lucro
ESCREVA (Lucro do produto , i, = , lucro)
fimpara
calc calc/15
ESCREVA (Lucro mdio = , calc)
fimalgoritmo
Soluo (em C)

#include <stdio.h>
struct Produto {
char descricao[30];
float precoCusto;
float precoVenda;
};
main() {
Produto estoque[15], calc;
calc = 0;
for (i=0; i<15; i++) {
printf(Digite descrio: );
scanf(%s%*c, &estoque[i].descricao);
printf(Digite preo de custo: );
scanf(%f%*c, &estoque[i].precoCusto);
printf(Digite preo de venda: );
scanf(%f%*c, &estoque[i].precoVenda);
lucro = estoque[i].precoVenda
estoque[i].precoCusto;
calc = calc + lucro
printf(Lucro do produto , i, = , lucro); }
calc = calc / 15;
printf(Lucro mdio = % f, calc);
getchar();
}
Resolvendo problemas com vetor de
registro
Problema 2:
Um professor aplicou 2 avaliaes aos alunos de
sua turma de matemtica. A turma contm 30
alunos. O professor registrou o nome e as
notas de cada aluno (prova e trabalho). Ao
final, o professor precisa de uma relao
contendo nome e mdia dos alunos que no
foram aprovados (mdia < 7).
Resolvendo problemas com vetor de
registro

nome Joo Maria Lucia Ana ... Pedro


prova 10.00 8.0 5.00 4.5 ... 8.00
trab 5.00 7.0 3.00 6.0 ... 9.00
1 2 3 4 ... 30
Inicio

Controle V al[i].nome
i1 al[i].prova ii+1
(i <=30)
al[i].trab
F

i1

F Controle V m (al[i].prova
Fim (i <=30) + al[i].trab)/2

V
m<7 al[i].nome, m

F
ii+1
Soluo (portugol - para)

Algoritmo Alunos
Tipo aluno = registro
nome: CARACTERE
prova: REAL
trab: REAL
fimregistro
Var
al: Vetor[1..30] de aluno
m: REAL
i: INTEIRO
para i de 1 at 30 faa
ESCREVA (Digite nome do aluno , i, : )
LEIA (al.nome[i])
ESCREVA (Digite nota da prova do aluno , i, : )
LEIA (al.prova[i])
ESCREVA (Digite nota do trabalho do aluno , i, : )
LEIA (al.trab[i])
fimpara
para i de 1 at 30 faa
m al.prova[i] + al.trab[i]
SE m < 7
ENTO ESCREVA(al[i].nome, m)
FIMSE
fimpara
fimalgoritmo
Soluo (em C - for)
#include <stdio.h>
struct aluno {
char nome[40];
float prova;
float trab;
};
main() {
aluno al[30];
float m;
int i;
for (i=0; i<30; i++) {
println(Digite nome do aluno %d: , i);
scanf(%s%*c, &al[i].nome);
println(Digite nota da prova do aluno %d: , i);
scanf(%f%*c, &al[i].prova);
println(Digite nota do trabalho aluno %d: , i);
scanf(%f%*c, &al[i].trab);
}
for (i=0; i<30; i++) {
m = (al[i].prova + al[i].trab)/2;
if (m < 7) {
println(al[i].nome, m);
}
}
getchar();
}
Soluo (portugol - repita)

Algoritmo Alunos
tipo aluno = registro
nome: CARACTERE
prova: REAL
trab: REAL
fimregistro
Var
al Vetor[1..30] de aluno
m: REAL
i: INTEIRO
i 1
repita
ESCREVA (Digite nome do aluno , i, :)
LEIA (al[i].nome)
ESCREVA (Digite nota da prova do aluno , i, :)
LEIA (al[i].prova)
ESCREVA (Digite nota do trabalho do aluno , i, :)
LEIA (al[i].trab)
ii+1
at i > 30
i 1
repita
m (al[i].prova + al[i].trab)/2
SE m < 7
ENTO ESCREVA (al[i].nome, m)
FIMSE
ii+1
at i > 30
fimalgoritmo
Soluo 2 (em C do-while)
#include <stdio.h>
struct aluno {
char nome[40];
float prova;
float trab;
};
main() {
aluno al[30];
float m;
int i;
i = 0;
do {
println(Digite nome do aluno %d: , i);
scanf(%s%*c, &al[i].nome);
println(Digite nota da prova do aluno %d: , i);
scanf(%f%*c, &al[i].prova);
println(Digite nota do trabalho do aluno %d: , i);
scanf(%f%*c, &al[i].trab);
i i + 1;
} while (i < 30);
i = 0;
do {
m (al[i].prova + al[i].trab)/2
if (m < 7) {
println(al[i].nome, m);
}
i i + 1;
} while (i < 30);
getchar();
}
Resolvendo problemas com registro e
matriz
Problema:
Uma empresa deseja controlar o estoque de
suas 3 filiais. Cada filial pode comercializar 15
produtos (nome, preo de custo e preo de
venda). Deseja saber o lucro obtido em cada
filial (ou seja, somar o lucro gerado pelos 15
produtos em cada filial).
ii+1
Inicio
F

V e[i, j].desc
Controle V Controle
i1 j1 e[i, j].pCusto
(i <=15) (j <=3) e[i, j].pVenda
F
jj+1
ii+1 s
F

Controle V j1 Controle
i1 (i <=3) (j <=15) jj+1
s 0
V
F
s s + (e[j, i].pVenda
Fim - e[j, i].pCusto
Soluo (portugol - para)
Algoritmo Filiais
tipo Produto = registro
desc: CARACTERE
pCusto: REAL
pVenda: REAL
fimregistro
Var
e: Vetor[1..15, 1..3] de Produto
s: REAL
i, j: INTEIRO
para i de 1 at 15 faa
para j de 1 at 3 faa
LEIA(e.desc[i, j])
LEIA(e.pCusto[i, j])
LEIA(e.pVenda[i, j]
fimpara
fimpara
para i de 1 at 3 faa
s0
para j de 1 at 15 faa
s s + e.pVenda[j, i] e.pCusto[j, i]
fimpara
ESCREVA(Total da filial , i, = , s)
fimpara
fimalgoritmo
Soluo (em C - for)
#include <stdio.h>
struct Produto {
char desc[35];
float pCusto;
float pVenda;
};
main() {
Produto e[15][3];
float s;
int i, j;
for (i=0; i<15; i++) {
for (j=0; j<3; j++) {
scanf(%s%*c, &e.desc[i][j]);
scanf(%f%*c, &e.pCusto[i][j]);
scanf(%f%*c, &e.pVenda[i][j]);
}
}
for (i=0; i<3; i++) {
s = 0;
for (j=0; j<15; j++) {
s = s + e[j][i].pVenda e[j][i].pCusto;
}
println(Total da filial %d = %f, i, s);
}
getchar();
}
Caractersticas importantes sobre um
registro

Permite agrupar em uma nica varivel valores de


diferentes tipos;
Os campos de um registro recebem o nome de
campos ou atributos;
Usa-se o nome da varivel.campo.

Vous aimerez peut-être aussi