1 - VARIÁVEIS COMPOSTAS HETEROGÊNEAS (Registros)
Uma empresa vai fornecer o crediário para um cliente efetuar o pagamento em várias parcelas, mas para isso será necessário efetivar um cadastro dos dados mais relevantes para a localização do cliente, caso algum problema venha a ocorrer com os pagamentos.
Estas informações seriam: Nome,
Endereço, Número do CPF.
A criação destas fichas cadastrais conterá dados com tipos diferentes, não sendo possível usar uma variável composta homogênea para guardar todos eles. Apesar disso, todos estes dados são relacionados, pois pertencem a uma mesma pessoa, ou seja, cada ficha possuirá diferentes dados (nome, endereço e CPF), mas todos eles são de um mesmo cliente, sendo todos estes dados relacionados logicamente a este cliente.
Cada um dos dados que formam esta ficha é chamado de componente ou elemento do registro, sendo cada ficha completa identificada como um código de registro. Portanto, neste exemplo, só será possível conseguir um crediário após a efetivação do registro do cliente, sendo este registro formado pelos componentes nome, endereço e número do CPF.
FICHA: 0 (ou primeiro registro)
NOME Asdrúbal João da Silva caracter ENDEREÇO Rua São José, 576 caracter CPF 04568715898 inteiro
componentes dados armazenados tipo de dados
Esta empresa também não fará o crediário somente para um cliente, mas para os vários clientes que possuírem um perfil interessante para a mesma. Assim, será necessário criar uma estrutura de dados que possa armazenar vários dados (composta) de tipos diferentes (heterogênea).
Estas estruturas (compostas heterogêneas) também são chamadas de registros e permitem uma organização eficiente no armazenamento e manipulação dos dados que estão implicitamente relacionados.
Exemplo:
Primeiro Registro[0]
NOME: Asdrúbal João da Silva ENDEREÇO: Rua São José, 576 CPF: 045687158-98
Segundo Registro[1]
NOME: Radegondes Maria Amaral
ENDEREÇO: Avenida Rui Barbosa, 234 apto. 31 CPF: 132876851-01
Observe o exemplo com dois registros cadastrados. A primeira ficha contém os dados do Asdrúbal João da Silva, enquanto que a segunda possui os dados da Radegondes Maria Amaral.
1.1 - REGISTROS
Uma das principais estruturas de dados é o registro. Para exemplificar, imagine uma passagem de ônibus, que é formada por um conjunto de dados logicamente relacionados, porém de tipos diferentes, tais como número da passagem (inteiro), origem e destino (caractere), data (caractere), horário (caractere), poltrona (inteiro), distância (real), que são subdivisões do registro (elementos do conjunto), também chamadas de campos. Logo, um registro é composto por campos que são partes que especificam cada um dos dados.
Sintaxe: registro nome_registro de { lista de campos; } fim registro ou
registro nome_registro (lista de campos separados por vírgula); Exemplo: registro passagem de { inteiro numero,poltrona; literal origem,destino,data,horário; real distancia; } fim registro ou
registro passagem (inteiro numero, poltrona, literal origem, destino, data, horário, real distancia);
1.1.1 - Acesso aos campos
Ao considerar que um registro contém várias informações, para acessar um campo individualmente é necessário indicar o nome da variável e o nome do campo desejado, separados por um ponto. Observe o exemplo a seguir:
nome_registro.nome_campo Exemplo 1:
passagem.numero 8;
O exemplo coloca o número 8 no campo numero da variável registro denominada passagem. Exemplo 2:
conta[2].numero 15;
O exemplo armazena o número 15 no campo numero da segunda posição da variável registro denominada conta.
Exemplo 3:
escreva(conta[3,2].numero);
O exemplo mostra o conteúdo do campo numero, localizado na linha 3, coluna 2 da variável registro denominada conta.
1.1.2 - Manipulação
Em determinados momentos podemos precisar de todas as informações contidas no registro (passagem) ou de apenas algum campo do registro (como freqüentemente, o número da poltrona).
Quando acessamos o registro genericamente, estamos referenciando obrigatoriamente todos os campos por ele envolvidos.
Exemplo: leia (passagem); escreva (passagem);
Para utilizar um campo específico do registro, devemos diferenciar esse campo. Para tal utilizamos o caractere “.” (ponto) para estabelecer a separação entre o nome do registro e o nome do campo.
Exemplo:
leia (passagem.poltrona); escreva (passagem.numero);
Exemplo: Utilizando o registro passagem: início {definições anteriores} . . leia (passagem.numero); leia (passagem.origem); leia (passagem.destino); . . escreva (passagem); fim. 1.2 - REGISTRO DE CONJUNTOS
Os registros vistos até agora possuíam em seus campos apenas informações de tipos primitivos, entretanto, podemos dispor também de campos que são compostos, ou seja, formados por outros tipos construídos.
Digamos que possuímos um registro de estoque de um produto, contendo como um de seus campos um valor numérico que indique baixas por dia do produto, por dia de semana. Temos então, um vetor de seis posições, na qual cada posição corresponde a um dia útil da semana.
Para declarar o tipo registro anterior, utilizamos um tipo construído vetor; então, precisamos primeiramente declarar tal tipo, e depois o tipo registro; isto é, precisamos declarar todos os conjuntos que serão incluídos no registro antes da sua declaração.
Sintaxe da declaração: Exemplos: a) inteiro vdias [6] ; registro produto de { caractere nome; inteiro codigo; real preco; vdias baixa; } fim registro ou ainda, registro produto de { caractere nome; inteiro código,baixa[6]; real preco; } fim registro b)
Modificar o registro de estoque de um produto a fim de que possa conter as baixas de quatro semanas, utilizando um tipo construído matriz.
inteiro matdias [4,6]; registro produto2 de { caractere nome; inteiro codigo; real preco; matdias baixa; } fim registro ou ainda, registro produto2 de { caractere nome; inteiro código,baixa[4,6]; real preco; } fim registro Exemplos de manipulação:
A manipulação de um registro de conjunto deve obedecer às manipulações próprias de cada estrutura de dados anteriormente definida.
Exemplos:
a) Para acessar o quanto foi vendido do produto no terceiro dia da quarta semana, teríamos: produto2.baixa [4, 3];
b) Construir o trecho de algoritmo que, usando a definição de produto2, escreva o nome do produto, o código, o preço e as baixas da segunda semana.
. .
escreva (produto2.nome); escreva (produto2.codigo); escreva (produto2.preco); para j = 1 até 6 faça
escreva (produto2.baixa [2, j]); fim para;
. .
c) Construa o trecho do algoritmo que totalize por dia da semana todos os dias do mês. .
.
para j = 1 até 6 faça aux 0;
para i = 1 até 4 faça
aux aux + produto2.baixa[i, j]; fim para;
escreva (j, ´totalizou ´, aux, ´ baixas´); fim para;
. .
1.2.1 - Acesso a membros de estruturas
Depois de a variável ser declarada, o programa precisa manipular o conteúdo de cada campo individualmente. Para tanto, é preciso informar o nome da variável e o do campo desejado, separados por um ponto.
Exemplo 1:
Para armazenar os valores 1 e “geladeira na variável” x, deve-se fazer as atribuições a seguir: registro produto de
{
inteiro codigo; literal descricao[30]; };
produto x; //a variável x é declarada como sendo um produto.
x.codigo1;
1.3 - CONJUNTO DE REGISTROS
Nas estruturas compostas homogêneas (vetores e matrizes) utilizamos tipos de dados primitivos como sendo os elementos dessas estruturas. Agora utilizaremos como componente dessa estrutura não apenas um tipo primitivo, mas sim os tipos construídos, neste caso os registros. Supondo que quiséssemos manter um registro de informações relativas às passagens rodoviárias de todos os lugares de um ônibus, utilizaríamos um registro referente a cada poltrona (passagem), e para agrupar todos eles utilizaríamos um conjunto desses registros.
Como possuímos 44 lugares num ônibus, numerados seqüencialmente de 1 até 44, podemos, para uni-los, criar um vetor no qual cada posição é um elemento de tipo construído registro (passagem).
Sintaxe da declaração:
Como possuímos um vetor composto por registros, não podemos declarar esse vetor sem antes ter declarado seus elementos; devemos então declarar primeiro o tipo construído registro e depois o vetor.
Exemplo 1:
Para armazenar os valores 5 e “fogão” na quinta posição de um vetor, deve-se fazer as atribuições a seguir: registro produto de { inteiro codigo; literal descricao[30]; };
produto eletro[12]; //a variável eletro é declarada como sendo um vetor de 12 posições e cada posição é produto.
eletro[4].codigo5; //em C++ eletro[3].codigo5;
eletro[4].descricao“fogão”; //em C++ strcpy(eletro[3].descricao,“fogão”)
Exemplo 2:
Para armazenar os valores 11 e “televisão” na terceira coluna da sexta linha de uma matriz, deve-se fazer as atribuições a seguir:
registro produto de {
inteiro codigo; literal descricao[30]; };
produto eletro[8,4]; //a variável eletro é declarada como sendo uma matriz de 8 linhas e 4 colunas, onde cada posições e cada posição é produto.
Em C++ produto eletro[8][4];
eletro[6,3].codigo11; //em C++ eletro[5][2].codigo11;
Outros exemplos (em C++): struct { int cod; char desc[20]; } tipos[4]; struct
{ int num, cod_serv, cod_cliente; float valor;
} serv[30][3] ; Exercício resolvido:
Criar um algoritmo que leia os dados de um aluno (RGM e 4 notas). Mostre os dados lidos. algoritmo aluno registro aluno de { inteiro rgm; real p1,p2.p3,p4; } fim registro; declaração de variáveis aluno x; início escreva(“Digite o RGM: ”); leia(x.rgm); escreva(“Digite a nota da P1: ”); leia(x.p1); escreva(“Digite a nota da P2: ”); leia(x.p2); escreva(“Digite a nota da P3: ”); leia(x.p3); escreva(“Digite a nota da P4: ”); leia(x.p4); escreva(“DADOS DO ALNUO”); escreva(“RGM: ”,x.rgm); escreva(“P1: ”,x.p1); escreva(“P2: ”,x.p2); escreva(“P3: ”,x.p3); escreva(“P4: ”,x.p4); fim_algoritmo Exercícios:
1 – Criar um algoritmo que leia o nome de um cliente, código e o total em débito deste cliente. Mostre os dados lidos.
2 – Utilizando registros, criar um algoritmo que leia informações sobre os produtos de uma loja (código, descrição, quantidade em estoque e preço de venda). Utilizar uma estrutura de repetição para cadastrar novos produtos. Mostrar o código e a descrição do produto mais caro.
3 – Criar um programa que realize o controle de estoque de uma loja. Para tal, deverão ser lidas as seguintes informações: código, descrição, preço de compra, preço de venda, quantidade em estoque. supondo que existem 5 produtos em estoque, determine: (utilizar uma estrutura de repetição para
cadastrar os 5 produtos)
a) A descrição e o código dos produtos com quantidade inferior a 50 e margem de lucro inferior a R$ 3,00.
b) O código, descrição e quantidade dos produtos com preço de venda superior a R$ 30,00 e preço de compra inferior a R$ 10,00.
4 – Criar um algoritmo para ler o código, o sexo (M – masculino; F – feminino) e o número de horas/aula ministradas pelos professores de uma escola durante um mês. Sabe-se que um professor ganha R$ 20,50 hora/aula e que a escola possui 10 professores. Após a leitura, o programa deverá mostrar:
Uma listagem contendo o código, o salário bruto, o desconto e o salário líquido de todos os professores.
A média aritmética dos salários brutos dos professores do sexo feminino.
A média aritmética dos salários brutos dos professores do sexo feminino. Os descontos devem ser assim calculados:
Sexo Até 70 horas/aula no mês Mais que 70 horas/aula no mês
Masculino 10% 8%
Feminino 7% 5%
5 – Uma indústria faz a folha de pagamento de seus empregados baseado no seguinte:
Existe uma tabela com os dados dos funcionários contendo: número de inscrição, nome, categoria, horas normais e horas extras. Fazer um algoritmo que processe as informações dos funcionários e emita o seu contracheque:
Número da inscrição: Nome:
Salário horas normais: Salário horas extras: Dedução INSS: Salário líquido:
Deve ser informado um salário referência.
A hora de trabalho normal do funcionário tem valor definido de acordo com a categoria. 1 – Salário referência * 1.3
2 – Salário referência * 1.8
O valor da hora extra é 30% a mais que a hora normal.
O INSS representa um desconto de 8% no salário bruto (salário normal + salário extra).
Existem 50000 funcionários. (cadastre uns 5 funcionários para testar na implementação).
6 – Um banco deseja fazer um controle informatizado de seus clientes e contas. Para tanto, devem ser armazenadas informações sobre os clientes (código, nome, fone) e sobre as contas (número da conta, saldo, limite, código do cliente).
Sabe-se que existe 13500 clientes e 22100 contas. (para implementar diminuam estes valores). Criar um algoritmo que leia as informações (em 2 registros) de todos os clientes e de todas as contas (lembrando-se que o código do cliente titular da conta deve ter sido previamente cadastrado).
Mostrar na tela as informações das contas seguindo o layout abaixo: Número da conta:
Código do cliente: Nome:
Saldo: Limite: