Baixe o app para aproveitar ainda mais
Prévia do material em texto
Fundamentos da Computação Priscilla Fonseca de Abreu Braz turmas_uerj@yahoo.com.br Universidade do Estado do Rio de Janeiro Instituto de Matemática e Estatística Matrizes x Registros Quando trabalhamos com matrizes percebemos que somente foi possível agrupar informações com o mesmo tipo de dados. Caso fosse necessário trabalhar com mais de um tipo de dado, precisaríamos criar matrizes diferentes. Por exemplo: Em uma escola é necessário armazenar os dados de diversos alunos. Suponha que tenhamos uma turma com 20 alunos e os dados necessários são: nome, matrícula, endereço e telefone. Na forma tradicional que vimos até o momento, seria necessário declarar um vetor para cada tipo de dado: VAR nome: array[1..20] of string; matr: array [1..20] of integer; end: array[1..20] of string; tel: array[1..20] of string; Para solucionar esta deficiência podemos utilizar uma estrutura de dados chamada de Registro. Registros Em um registro(record) poderemos utilizar uma estrutura que agrupe várias informações, que podem ser de tipos de dados diferentes. Por esta razão, este tipo de dado é considerado heterogêneo. Sintaxe: type <identificador> = record <lista de campos e seus tipos> end; var <variavel> : <identificador_registro> Ao definir uma variável do tipo record, devemos definir também quais serão as partes (campos) que compõem esta variável juntamente com seu tipo. Dessa forma, uma variável do tipo record pode ter campos de qualquer tipo válido do Pascal, sendo permitido inclusive que um record seja definido dentro do outro, ou como parte de um array. Registros Exemplos: Type discente = record nome:string; matricula:integer; ende:string; telefone:string; n1,n2:real; end; Var aluno:discente; Type pessoa = record nome:string; idade:integer; sexo:string; profissao:string; telefone:string; end; Var func:pessoa; Registros Utilizando Records Para acessar os campos de um registro utilizamos o “.” Exemplo Utilizando o exemplo anterior, para atribuir o valor “João” ao campo nome da variável aluno: aluno.nome:=‘Joao’; Leitura de Valores: Writeln(‘Informe o nome:’); Readln(aluno.nome); Type discente = record nome:string; matricula:integer; end:string; telefone:string; end; Var aluno:discente; Registros : exemplo program EX_REGISTRO1; Uses crt; type CAD_ALUNO = record NOME : string; NOTA1 : real; NOTA2 : real; NOTA3 : real; NOTA4 : real; end; var ALUNO : cad_aluno; begin writeln(‘Cadastro de Aluno’); write(‘Informe o nome..............: ’); readln(ALUNO.NOME); write(‘Informe a primeira nota..: ’); readln(ALUNO.NOTA1); write(‘Informe a segunda nota...: ’); readln(ALUNO.NOTA2); write(‘Informe a terceira nota....: ’); readln(ALUNO.NOTA3); write(‘Informe a quarta nota......: ’); readln(ALUNO.NOTA4); writeln; writeln(‘Nome..: ’ , ALUNO.NOME); writeln(‘Nota 1.: ’ , ALUNO.NOTA1 :2:2); writeln(‘Nota 2.: ’ , ALUNO.NOTA2 :2:2); writeln(‘Nota 3.: ’ , ALUNO.NOTA3 :2:2); writeln(‘Nota 4.: ’ , ALUNO.NOTA4 :2:2); writeln; readkey; end. Registros Perceba que o registro está sendo denominado como CAD_ALUNO, o qual será um conjunto de dados heterogêneos (um campo tipo string e quatro do tipo real). Desta forma, é possível guardar em uma mesma estrutura, vários tipos diferentes de dados. Para armazenar as notas do aluno foram necessárias 4 variáveis. E se utilizássemos um vetor para armazenar as notas, como já fizemos anteriormente? Vejamos como ficará: Registros : exemplo program EXEMPLO_REGISTRO2; uses crt; type NOTAS = array[1..4] of real; CAD_ALUNO = record NOME : string; NOTA : notas; end; var ALUNO : cad_aluno; I : integer; begin writeln(‘Cadastro de Aluno’); write(‘Informe o nome..............: ’); readln(ALUNO.NOME); writeln; for I := 1 to 4 do begin write(‘Informe a ’ , I, ‘a. nota..: ’); readln(ALUNO.NOTA[I]); end; writeln; writeln(‘Nome..: ’ , ALUNO.NOME); for I := 1 to 4 do writeln(‘Nota ’ ,I, ‘...: ’, ALUNO.NOTA[I]:2:2); readkey; end. Registros : exemplo Até agora, os dois exemplos apresentados só servem para a leitura e exibição das notas de um aluno. E se quiséssemos apresentar todos os dados de cinco alunos? Vamos ver como ficaria um programa assim: VET 1 2 3 4 5 Nome Nota 1 2 3 4 Registros : exemplo program EXEMPLO_REGISTRO3; type NOTAS = array[1..4] of real; CAD_ALUNO = record NOME : string; NOTA : notas; end; var ALUNO : array[1..5] of cad_aluno; I , J: integer; begin writeln(‘Cadastro de Aluno’); for J := 1 to 5 do begin write(‘Informe o nome do ’, J, ‘o. aluno: ’); readln(ALUNO[J].NOME); for I := 1 to 4 do begin write(‘Informe a ’ , I, ‘a. nota: ’); readln(ALUNO[J].NOTA[I]); end; end; for J := 1 to 5 do begin writeln(‘Nome aluno ’ , J, ‘: ’, ALUNO[J].NOME); for I := 1 to 4 do writeln(‘Nota ’ ,I, ‘: ’, ALUNO[J].NOTA[I]:2:2); end; readkey; end. Exercícios 1) Crie a estrutura de código em Pascal para os seguintes registros: a) b) REG Nome Salário Idade Sexo Funcionário Nome Rua/Av Nº CEP CPF Sexo Horas trabalhadas na semana 1 2 3 4 Data de Nascimento Tem Dependentes? Resolução 1) Crie a estrutura de código em Pascal para os seguintes registros: a) REG Nome Salário Idade Sexo Type registro = record nome:string; salario: real; idade: integer; sexo: char; end; Var pessoa: registro; Resolução 1) Crie a estrutura de código em Pascal para os seguintes registros: b) Type vet = array[1..4] of real; funcionario = record nome,rua, CEP, CPF:string; num: integer; dt_nasc:string; sexo,dep: char; horas:vet; end; Var func: funcionario; Funcionário Nome Rua/Av Nº CEP CPF Sexo Horas trabalhadas na semana 1 2 3 Data de Nascimento Tem Dependentes? Exercício 1) Faça um programa que leia um registro de passagem contendo o número da passagem, informação se o passageiro é fumante, origem, destino, horário, número da poltrona, distância e calcule o preço da seguinte forma: Para distâncias: até 100 km: R$ 100,00 Entre 101 e 200 km: R$ 200,00 Acima de 200 km: R$ 300,00 Ao final, todo o registro deve ser impresso. Exercício program EX1; uses crt; type CAD_VOO = record cod, n_polt:integer; fumante:char; dist,vl_total:real; ori,des,hor: string; end; var pass: CAD_VOO; begin writeln('Mercadorias'); write('Informe o numero da passagem: '); readln(pass.cod); writeln('Fumante? (S ou N)'); readln(pass.fumante); writeln('Informe a origem: '); readln(pass.ori); writeln('Informe o destino: '); readln(pass.des); writeln('Informe o horario: '); readln(pass.hor); writeln('Informe o numero da poltrona: '); readln(pass.n_polt); writeln('Informe a distância: '); readln(pass.dist); if (pass.dist<=100) thenpass.vl_total:=100 else begin if (pass.dist>200) then pass.vl_total:=300 else pass.vl_total:=200 end; writeln; writeln('...Resultados...'); writeln('Numero da passagem: ', pass.cod); writeln('Fumante : ', pass.fumante); writeln('Origem: ', pass.ori); writeln('Destino: ', pass.des); writeln('Horario: ', pass.hor); writeln('Numero da poltrona: ', pass.n_polt); writeln('Distância: ', pass.dist:0:1); writeln('Valor total: ', pass.vl_total:0:1); readkey; end. Exercícios 2) Elabore um programa que leia um registro de mercadoria com os seguintes dados: código, nome, valor unitário do produto, quantidade vendida e calcule o valor total a pagar. Ao final, o registro deve ser impresso. 3) Com base no exercício anterior, elabore um programa que exiba um menu que possibilite o cadastro de até 50 mercadorias, consulta a uma mercadoria específica através do seu código e a impressão de todas as mercadorias cadastradas.
Compartilhar