Unidade 11
Exemplos de tipos
primitivos...
Definidos pelo
Programador
Strings &
Arrays
Escalares
Conjuntos
Estruturados
Registros &
Arquivos
Integer
Tipos
Ponteiros
Real
Primitivos
String
Boolean
Array
type
TpVetor: array[1..15]of byte;
var
Vetor: TpVetor;
Em que seo de
programas Pascal
deve-se declarar
tipos?
5
type
<identificador>=<tipo>; |
<identificador>=(valor1,valor2,...);
Onde:
type
<identificador>=<tipo>; |
<identificador>=(valor1,valor2,valor3,...);
Exemplos:
type
Str20=string[20];
TpLogico=(verdadeiro,falso);
TpSemana=(DOM,SEG,TER,QUA,QUI,SEX,SAB);
Exemplos:
type
Str20=string[20];
TpLogico=(verdadeiro,falso);
TpSemana=(DOM,SEG,TER,QUA,QUI,SEX,SAB);
type
<identificador>=<tipo>;
Exemplo:
type
Str20= string[20];
TpNum = byte;
TpArray = array [1..100] of integer;
var
Nome: Str20;
Idade: TpNum;
Vetor: TpArray;
10
Outro Exemplo:
type
Str15 = string[15];
TpDias =(DOM,SEG,TER,QUA,QUI,SEX,SAB);
TpSemana =array[DOM..SAB]of Str15;
var
Semana: TpSemana; {Prioridades.}
Qual o esboo da
varivel semana?
11
var
Semana: TpSemana;
DOM
SEG
TER
QUA
QUI
SEX
SAB
Semana
12
var
Semana: TpSemana;
DOM
SEG
TER
QUA
definir
definir
definir
definir
QUI
definir
SEX
SAB
definir
definir
Semana
13
Exemplos:
type
TpCaracteres = set of char;
TpAlgarismos = set of 0..9;
TpVogais = set of (A,E,I,O,U,a,e,i,o,u);
var
Letras: TpCaracteres;
Pares: TpAlgarismos;
Vogais: TpVogais;
14
16
17
so idnticos.
2. Diferente <>, verdadeiro se pelo menos um
elemento pertencer a um conjunto e no
pertencer a outro.
3. Est Contido <=, se Conj1<=Conj2,
verdadeiro se Conj1 est contido em Conj2.
Conj.
J havamos usado
conjunto?
19
20
Onde:
type
<IdentificaTipo> = record
campos que compoem registros
<IdentificaCampo1>: <Tipo1>;
<IdentificaCampo2>: <Tipo2>;
...
tipos dos
campos
end;
Varivel do tipo registro
var
<IdentificaVariavel>: <IdentificaTipo>;
21
Exemplo:
TpRegCliente = record
Nome:
string[20];
Telefone:
string[10];
Financiamento:
real;
Tipo:
char;
Fidelidade:
byte;
end;
var
RegCliente: TpRegCliente;
Nome
Telefone
7932574455
Financiamento
Tipo
17.000,00
type
Fidelidade
8
RegCliente
22
Onde:
type
palavra reservada
TpRegPesquisador = record
campos que compoem registros
Nome:
string[20];
Telefone:
string[10];
Financiamento:
real;
Tipo:
char;
Fidelidade:
byte;
end;
var
RegCliente: TpRegCliente;
23
type
TpRegExtrato = record
Dia: byte;
Operacao: string[10];
Valor: real;
Tipo: char;
end;
Dia
13
Operacao
Valor
Tipo
var
RegExtrato: TpRegExtrato;
Transferncia
700,00
C
RegExtrato
24
type
TpRegCliente = record
Nome:
string[20];
Telefone:
string[10]
Financiamento:
real;
Tipo:
char;
Fidelidade:
byte;
end;
var
RegCliente: TpRegCliente;
type
TpRegCliente = record
Nome:
string[20];
Telefone:
string[10]
Financiamento:
real;
Tipo:
char;
Fidelidade:
byte;
end;
var
RegCliente: TpRegCliente;
a atribuio
de
registros de um mesmo tipo,
os registros so manipulados
TpRegExtrato = record
campo a campo. Para tanto
Dia: byte;
deve ser usado o nome do
Operacao: string[10];
registro seguido de ponto e
Valor: real;
do nome do campo a
Tipo: char;
manipular.
end;
J a manipulao dos
campos dos registros so
var
efetuadas em conformidade
Reg1, Reg2: TpRegExtrato;
com os tipos destes.
Reg1:=Reg2;
writeln(Reg1);
Reg1.Valor:=2000/3;
readln(Reg2.Dia);
readln(Reg2);
Exceto
type
Reg1.Tipo=Reg2.Tipo;
27
TpRegExtrato = record
Dia: byte;
Operacao: string[10];
Valor: real;
Tipo: char;
end;
var
Reg1, Reg2: TpRegExtrato;
type
TpRegExtrato = record
Dia: byte;
Operacao: string[10];
Valor: real;
Tipo: char;
end;
var
Reg1, Reg2: TpRegExtrato;
type
var
Reg1, Reg2: TpRegExtrato;
item de composio de
programas de computador
til ao armazenamento dos
dados.
heterogneos, ou
seja,
podem armazenar dados
de diversos tipos.
Na
situao
problema
apresentada, por exemplo,
tem-se
um
registro
composto por 2 dados
numricos
e
2
alfanumricos.
30
Para
facilitar
a
manipulao
de
registros,
possibilitando que no seja necessrio repetir
exaustivamente o nome do registro, o Pascal
disponibiliza o comando with.
Assim, o trecho de cdigo:
writeln(Reg1.Dia,Reg1.Operacao,Reg1.Valor,Reg1.Tipo);
with Reg1 do
writeln(Dia,Operacao,Valor,Tipo);
31
Outro Exemplo:
type
TpRegCliente = record
Nome:
string[20];
Telefone:
string[10]
Financiamento:
real;
Tipo:
char;
Fidelidade:
byte;
end;
var
RegAux: TpRegCliente;
with RegAux do
begin
writeln(Nome);
writeln(Telefone);
Financiamento:=200000;
end;
32
Exemplo:
with RegAux do
begin
writeln(Nome);
writeln(Telefone);
Fianciamento:=200.000;
end;
Sintaxe
with <IdentificaVariavelTipoRegistro> do
<comandos>;
33
Sintaxe
with <IdentificaVariavelDoTipoRegistro> do
<comandos>;
Onde:
<IdentificaVarivelDoTipoRe
<Comando>
instrues envolvendo os
campos do registro supracitado sem a
necessidade de serem precedidas pelo nome
deste.
34
type
TpReg = record
Nome:
string[20];
Telefone:
string[10]
Financiamento:
real;
Tipo:
char;
Fidelidade:
byte;
end;
var
Melhores: array[1..20] of TpRegCliente;
Reg: TpReg;
35
36
37
Onde as consultas so
38
type
TpRegMed = record
Nome: string[20];
Convenio,
Fone: string[10];
Pago: real;
Retorno: boolean;
end;
var
ArqPacientes: file of TpRegMed;
39
type
TpRegMed = record
Nome: string[20];
Convenio,
Fone: string[10];
Pago: real;
Retorno: boolean;
end;
var
ArqPacientes: file of TpRegMed;
0
...
N
Nome
Convnio
Fone
Pago
Retorno
Maria
BoaSaude
322
18,50
true
ArqPacientes
40
41
42
Exemplo:
assign(ArqPacientes,Consultas.dat);
43
Exemplo:
assign(ArqPacientes,C18nov08.dat);
...
assign(ArqPacientes,C20nov08.dat);
44
reset(var <Arquivo>);
rewrite(var <Arquivo>);
45
reset(var <Arquivo>);
rewrite(var <Arquivo>);
46
reset(ArqPacientes);
rewrite(ArqPacientes);
47
reset(ArqPacientes);
rewrite(ArqPacientes);
48
reset(ArqPacientes);
rewrite(ArqPacientes);
49
50
51
52
close(var <Arquivo>);
53
54
55
Caso seja necessrio manipular um registro que encontrase numa dada posio do arquivo, til procedimento
seek.
seek(var <Arquivo>; <posio>: longint);
Considerando seek(Arq,50); o ponteiro posicionado na
posio 50 do arquivo Arq; ento a prxima operao de
leitura ou armazenamento ser efetuada sobre o registro
que se encontra nesta posio.
56
filepos(<Arquivo>):longint;
filesize(<Arquivo>): longint;
57
agenda telefnica
estoque
cadastros
58
Implementar
programa de
cadastro dos
medicamentos
de uma farmcia.
UFS - DComp - Prof. Kenia Kodel
59
type
Str20 = string[20];
TpReg = record
Nome: Str20;
Preco: real;
Estoque: integer;
end;
var
ArqFarma: file of TpReg;
RegFarma: TpReg;
{Quantidade em estoque}
Opcao: char;
CadastroVazio,
Existe: boolean;
Pos: longint;
60
begin
CadastroVazio:=false;
assign(ArqFarma,'Farmas.dat');
{$I-} reset(ArqFarma); {$I+}
if IOResult <> 0 then rewrite(ArqFarma);
repeat
clrscr; writeln('*** farma ***'); writeln;
writeln(' 1 - incluir');
writeln(' 2 - excluir');
writeln(' 3 - editar estoque');
writeln(' 4 - consultar');
writeln(' 5 - listar todos');
writeln(' 6 - encerrar');
writeln; writeln('Opcao:');
repeat Opcao:=readkey;
until Opcao in ['1','2','3','4','5','6'];
if Opcao in ['2','3','4','5'] then
VerifiqueVazio(CadastroVazio);
if not CadastroVazio then
case Opcao of
'1': incluir;
'2': excluir;
'3': alterar;
'4': consultar;
'5': listarTodos; end;
until Opcao = '6';
close(ArqFarma); end.
UFS - DComp - Prof. Kenia Kodel
61
62
procedure incluir;
var
R: char;
begin
repeat
clrscr;
writeln('*** inclusao ***');
writeln;
with RegFarma do begin
writeln('Nome: ');
readln(Nome);
writeln('Preco: ');
readln(Preco);
writeln('Estoque: ');
readln(Estoque);
end;
seek(ArqFarma,filesize(ArqFarma));
write(ArqFarma,RegFarma);
writeln;
writeln('Deseja efetuar nova inclusao? S/N ');
repeat
R:=upcase(readkey);
until (R='S') or (R='N');
until R='N';
end;
UFS - DComp - Prof. Kenia Kodel
63
procedure listarTodos;
begin
clrscr; writeln('*** lista todos ***');
writeln;
writeln('Nome':20,'Preco':12,'Estoque':10);
seek(ArqFarma,0);
while not eof(ArqFarma) do begin
read(ArqFarma,RegFarma);
if RegFarma.Nome <> 'XXX' then
with RegFarma do
writeln(Nome:20,Preco:10:2,Estoque:10);
end;
writeln;
writeln('pressione qualquer tecla');
readkey;
end;
UFS - DComp - Prof. Kenia Kodel
64
procedure consultar;
var
Remedio: Str20;
R: char;
begin
repeat
clrscr; writeln('*** consulta ***');
writeln;
writeln('Nome: ');
readln(Remedio);
localizar(Remedio,Existe,Pos);
if Existe then
with RegFarma do begin
writeln('Nome: ',Nome);
writeln('Preco: ',Preco);
writeln('Estoque: ',Estoque); end
else
writeln('*** medicamento inexistente ***');
writeln;
writeln('Deseja efetuar nova consulta? S/N ');
repeat
R:=upcase(readkey);
until (R='S') or (R='N');
until R = 'N';
end;
UFS - DComp - Prof. Kenia Kodel
65
66
Implementar
procedimento
de excluso
(lgica).
67
procedure incluir;
var
R: char;
begin
repeat
Ajustar
clrscr;
procedimento de
writeln('*** inclusao ***');
writeln;
incluso de forma a
with RegFarma do begin
evitar redundncia
writeln('Nome: ');
readln(Nome);
de dados.
writeln('Preco: ');
readln(Preco);
writeln('Estoque: ');
readln(Estoque);
end;
seek(ArqFarma,filesize(ArqFarma));
write(ArqFarma,RegFarma);
writeln;
writeln('Deseja efetuar nova inclusao? S/N ');
repeat
R:=upcase(readkey);
until (R='S') or (R='N');
until R='N';
end;
UFS - DComp - Prof. Kenia Kodel
68
Implementar
procedimento
de alterao
(ajuste do
estoque).
69
Verifique
Vazio
Consulta
Total
Incluso
Cadastro
Farmcia
[Principal]
Consulta
Excluso
Alterao
Analisando a situao
problema, que outras
alteraes (edies)
so provavelmente
necessrias?
70
Verifique
Vazio?
Consulta
Total?
Incluso?
Controle
de Notas
[Principal]
Consulta?
Excluso?
Alterao?
71
72
73
COMPLEMENTAR ESTUDOS:
Fundamentos da Programao de Computadores
Ana Fernanda Gomes Ascencio
Edilene Aparecida Veneruchi de Campos
ARQUIVOS
73