Registros Computação e Calculo Numérico: Linguagem Pascal Guaratinguetá junho de 2004 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 2 01010101010 10101010101 Registros Variáveis Compostas Heterogêneas (1/12) As variáveis vistas até agora eram: ⌦simples: definidas por tipo integer, real, char; ⌦compostas homogêneas: definidas por array. Registros podem possuir variáveis de tipos diferentes e são declaradas da seguinte forma: type reg = record campo1 : tipo1; campo2 : tipo2; ... campon : tipon; end; Printed with FinePrint - purchase at www.fineprint.com 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 3 01010101010 10101010101 Registros Variáveis Compostas Heterogêneas (2/12) Um registro pode ser visto como uma ficha de dados. Por exemplo, Pode ser integer, real, string Pode ser um vetor de 255 caracteres INSCRIÇÃO NOME RUA NÚMERO Integer ou vetor Pode ser um vetor de 64 caracteres de 4 caracter 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 4 01010101010 10101010101 Registros Variáveis Compostas Heterogêneas (2/12) Esta ficha é representada na linguagem Pascal da seguinte forma: type ficha = record inscricao : integer; nome : array[1..255] of char; rua : array[1..64] of char; numero : integer; end; Printed with FinePrint - purchase at www.fineprint.com 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 5 01010101010 10101010101 Registros Variáveis Compostas Heterogêneas (3/12) Dada uma declaração em Pascal: type Produto = record cod : array[1..8] of char; nome : array[1..30] of char; quant : integer; custo : real; end; var prod : Produto; Como é feito o acesso às variáveis? prod.cod prod.nome prod.quant prod.custo := := := := ‘12345678’; ‘arroz’; 1000; 0.82; 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 6 01010101010 10101010101 Registros Variáveis Compostas Heterogêneas (4/12) Comando WITH ⌦permite ao programador omitir a referência da variável definida pelo RECORD. with prod do begin cod := ‘12345678’; nome := ‘arroz’; quant := 1000; custo := 0.82; end; Printed with FinePrint - purchase at www.fineprint.com 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 7 01010101010 10101010101 Registros Variáveis Compostas Heterogêneas (5/12) Se, ao invés de uma única ficha, quisermos cadastrar n fichas? SOLUÇÃO: criar um vetor de registros! Como seria a declaração de um vetor do tipo Produto? var produtos : array[1 .. 5] of Produto; 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 8 01010101010 10101010101 Registros Variáveis Compostas Heterogêneas (6/12) Observações: ⌦Registro (record): define um “conjunto” de variáveis que podem ser de tipos diferentes; ⌦Vetor (array): é uma “lista” de elementos de mesmo tipo. Por ex., a seguinte declaração: var lista : array[1..5] of Produto; declara uma variável lista contendo elementos do tipo Produto. Printed with FinePrint - purchase at www.fineprint.com 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 9 01010101010 10101010101 Registros Variáveis Compostas Heterogêneas (7/12) produtos 10547 [1] JOSÉ DA SILVA RUA PINDAMONHANGABA 27490 [2] 13859 [3] 9221 [4] MARIA JOSÉ RUA ONDE? 8484 MELISSA SOUTO RUA CADÊ? 4393 VALTER MERCADO AVENIDA 0900-1010 23784 [5] 1840 2424 JOÃO FIGUEIRA RUA DAS ANDORINHAS 1234 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 10 01010101010 10101010101 Registros Variáveis Compostas Heterogêneas (7/12) produtos [1] [2] [3] [4] [5] 10547 JOSÉ DA SILVA RUA PINDAMONHANGABA MARIA JOSÉ RUA ONDE? referenciar este campo? 1840 27490 Como 13859 9221 MELISSA SOUTO RUA CADÊ? 4393 VALTER MERCADO AVENIDA 0900-1010 23784 JOÃO FIGUEIRA RUA DAS ANDORINHAS Printed with FinePrint - purchase at www.fineprint.com 8484 2424 1234 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 11 01010101010 10101010101 Registros Exercício 1 (8/12) Faça um programa para ler 10 fichas de empregados de uma empresa. Cada ficha possui o seguinte formato: NUMEMP NOMEMP ENDEREÇO DATAEMP SEXO SALÁRIO Observações: ⌦O campo DATAEMP deve ser dividido em 3 variáveis: dia, mês, ano; ⌦O campo NUMEMP é do tipo inteiro; ⌦O campo NOMEMP, ENDEREÇO é do tipo string; ⌦O campo SEXO é do tipo caracter; ⌦O campo SALÁRIO é do tipo real. 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 program leia_fichas; 01010101010 10101010101 type ficha = record 01010101010 numemp : integer; 10101010101 01010101010 nomemp, endereco : string; 10101010101 01010101010 dia, mes, ano : integer; 10101010101 sexo: char; salario : real; 01010101010 10101010101 end; 01010101010 10101010101 vetorfichas = array[1..10] of ficha; 01010101010 var fichas : vetorfichas; i : integer; 10101010101 01010101010 begin 10101010101 01010101010 for i := 1 to 10 do begin 10101010101 readln(fichas[i].numemp); readln(fichas[i].nomemp); 01010101010 10101010101 readln(fichas[i].endereco); readln(fichas[i].dia); 01010101010 readln(fichas[i].mes); readln(fichas[i].ano); 10101010101 01010101010 readln(fichas[i].sexo); readln(fichas[i].salario); 10101010101 01010101010 end; 10101010101 01010101010 end. 10101010101 12 01010101010 10101010101 Registros Exercício 1 - RESPOSTA (9/12) Printed with FinePrint - purchase at www.fineprint.com 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 13 01010101010 10101010101 Registros Exercício 2 (10/12) Faça o mesmo programa utilizando o comando WITH para referenciar as variáveis. Observação: ⌦Cada elemento do vetor fichas é um elemento do tipo ficha declarado anteriormente. 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 14 01010101010 10101010101 Registros Exercício 2 - RESPOSTA (11/12) program leia_fichas2; type ficha = record ... end; vfichas = array[1..10] of ficha; var fichas : vfichas; i : integer; begin for i := 1 to 10 do begin with fichas[i] do begin readln(numemp); readln(nomemp); readln(endereco); readln(dia); readln(mes); readln(ano); readln(sexo); readln(salario); end; end; end. Printed with FinePrint - purchase at www.fineprint.com 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 15 01010101010 10101010101 Registros Variáveis Compostas Heterogêneas (12/12) Uma atribuição que tenha a seguinte forma: for i := 1 to 10 do fichas2[i] := fichas[i] pode ser feita? Sendo que fichas2 é do tipo vfichas? Atribuições entre registros só podem ser feitas quando os campos são IGUAIS! Printed with FinePrint - purchase at www.fineprint.com 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 01010101010 10101010101 16 01010101010 10101010101