Buscar

Prova com Gab - 3ºEE

Prévia do material em texto

Observações gerais: 
1) Preencher os dados do cabeçalho do bloco de provas e na folha de questões o nome e a turma; 
2) Ao final da prova entregar ao professor ou fiscal a folha de questões e o caderno de prova; 
 
1º quesito (4 pontos): Uma empresa de consultoria está separando suas atividades entre clientes pessoa física 
e pessoa jurídica. Faça um programa em Pascal que converta os registros de clientes do arquivo “Clientes.reg” 
nos arquivos “ClientesPF.reg” e “ClientesPJ.reg”. Os registros devem ser lidos do arquivo “Clientes.reg” e caso o 
registro seja de um cliente pessoa jurídica (Categoria = “PJ”) e ativo (Ativo=True) este deve ser copiado para o 
arquivo “ClientesPJ.reg”, caso seja um registro de pessoa física (Categoria = “PF”) e ativo, este deve ser copiado 
para o arquivo “ClientesPF.reg”. 
Ao final do processo deve ser impresso na tela a quantidade de registros de cada arquivo e a quantidade de 
clientes inativos. 
 
program ArquivoClientes; 
 
type 
 TEndereco = record 
 rua : string[30]; 
 bairro : string[20]; 
 numero : integer; 
 end; 
 TCliente = record 
 nome : string[30]; 
 cpf : string[11]; 
 fone : integer; 
 categoria : string[2]; 
 ativo : boolean; 
 endereco : TEndereco; 
 end; 
 TClienteP = record 
 nome : string[30]; 
 cpf : string[11]; 
 fone : integer; 
 endereco : TEndereco; 
 end; 
 
var 
 Clientes : file of TCliente; 
 ClientesPF : file of TClienteP; 
 ClientesPJ : file of TClienteP; 
 ClienteA : TCliente; 
 ClienteN : TClienteP; 
 numInat, numPF, numPJ : integer; 
 
begin 
 numInat := 0; 
 numPF :=0; 
 numPJ :=0; 
 assign(Clientes, 'Clientes.reg'); 
 assign(ClientesPF, 'ClientesPF.reg'); 
 assign(ClientesPJ, 'ClientesPJ.reg'); 
 reset(Clientes); 
 rewrite(ClientesPF); 
 rewrite(ClientesPJ); 
“Clientes.reg” 
Nome CPF Fone Categoria Ativo Endereço 
String[30] String[11] Integer String[2] Boolean Rua Bairro Número 
 String[30] String[20] Integer 
“ClientesPF.reg” e “ClientesPJ.reg” 
Nome CPF Fone Endereço 
String[30] String[11] Integer Rua Bairro Número 
 String[30] String[20] Integer 
ÁREA II – CCEN / UFPE 
Disciplina: IF 165 – Computação Eletrônica – 3º Exercício Escolar 2013.1 Data: 10/09/ 2013 
Nome legível do aluno: .......................................................................................... Turma ......... 
 
 
 while not eof(Clientes) do 
 begin 
 {Consideramos que o arquivo de entrada nao tem incoerencia} 
 read(Clientes,ClienteA); 
 if ClienteA.ativo then 
 begin 
 {Cliente Ativo: sera escrito num arquivo. Preparando o registo} 
 ClienteN.nome := ClienteA.nome; 
 ClienteN.cpf := ClienteA.cpf; 
 ClienteN.fone := ClienteA.fone; 
 ClienteN.endereco := ClienteA.endereco; 
 if ClienteA.categoria = 'PF' then 
 begin 
 {Caso da Pessoa Fisica} 
 numPF := numPF+1; 
 write(ClientesPF, ClienteN); 
 end 
 else 
 begin 
 {Caso da Pessoa Juridica} 
 numPJ := numPJ+1; 
 write(ClientesPJ, ClienteN); 
 end; 
 end 
 else 
 begin 
 {Caso do Cliente Inativo} 
 numInat := numInat+1; 
 end; 
 end; 
 {A quantidade de registros pode tambem ser obtida com o comando filesize} 
 writeln('Quantidade de pessoas fisicas: ', numPF); 
 writeln('Quantidade de pessoas juridicas: ', numPJ); 
 writeln('Quantidade de clientes inativos: ', numInat); 
Close(Clientes); 
Close(ClientesPJ); 
Close(ClientesPF); 
 
end. 
 
 
2º quesito (4 pontos): Uma empresa de call center atende chamados de suporte para diferentes empresas, a fim de 
controlar cada uma das chamadas ela armazena algumas informações das chamadas em um arquivo com o nome 
“Chamadas.reg” (contendo a estrutura abaixo). Considere que o arquivo existe. 
 
 
 
 
Escreva um programa em Pascal que alimente este arquivo de cadastro, armazene as informações do cliente e salve as 
informações adicionadas no HD. O programa deve conter: 
a) Um procedimento que permita realizar o cadastro de um novo cliente e salvar suas informações no arquivo; 
b) Um procedimento que permita imprimir na tela as informação dos clientes baseado em uma determinada 
data de solicitação (que será passado como parâmetro); 
c) O programa deve permitir que os procedimentos sejam chamados de forma repetitiva no programa principal 
a partir de um menu (1 – Cadastrar novo cliente; 2 – Imprimir informações; 3 - Sair) ao qual o usuário pode 
escolher a ação desejada (correspondente as opções a e b acima); Caso a opção b seja escolhida, deve ser 
solicitado do usuário a data desejada para pesquisa e impressão dos dados dos clientes na tela. 
Obs.: Não utilizar variáveis globais na passagem de parâmetros entre o programa principal e os procedimentos. 
 
program CallCenter; 
 
type 
 TChamada = record 
 nome : string[20]; 
 cpf : string[11]; 
 fone : integer; 
 empresa : string[40]; 
 protocolo : integer; 
 data : string[10]; 
 end; 
 TArquivo = file of TChamada; 
 
procedure NovoCadastro(var a : TArquivo); 
var 
 chamada : TChamada; 
begin 
 write('Nome='); 
 readln(chamada.nome); 
 write('CPF='); 
 readln(chamada.cpf); 
 write('Fone='); 
 readln(chamada.fone); 
 write('Empresa='); 
 readln(chamada.empresa); 
 write('Protocolo='); 
 readln(chamada.protocolo); 
 write('Data='); 
 readln(chamada.data); 
 
 {Indo no fim do arquivo antes de escrever o cadastro} 
 seek(a, filesize(a)); 
 write(a,chamada); 
end; { NovoCadastro } 
 
procedure ImpressaoData(var a : TArquivo; data : string); 
var 
 cha : TChamada; 
begin 
 writeln('Data: ', data); 
 reset(a); 
 while not eof(a) do 
Nome CPF Fone Empresa Protocolo Data Solicitação 
String[20] String[11] Integer String[40] Integer String[10] 
 
 begin 
 read(a,cha); 
 if cha.data = data then 
 begin 
 writeln(cha.nome,'-',cha.cpf,' (',cha.fone,') ',cha.empresa, 
 '. Prot.',cha.protocolo); 
 end; 
 end; 
end; { ImpressaoData } 
 
var 
 Arquivo : TArquivo; 
 esc : integer; 
 data : string[10]; 
begin 
 assign(Arquivo,'Chamadas.reg'); 
 rewrite(Arquivo); 
 repeat 
 writeln('1-Novo cadastro'); 
 writeln('2-Impressao por data'); 
 writeln('3-Sair'); 
 writeln('Opcao? '); 
 readln(esc); 
 case esc of 
 1 : begin 
 NovoCadastro(Arquivo); 
 end; 
 2 : begin 
 write('Data? '); 
 readln(data); 
 ImpressaoData(Arquivo, data); 
 end; 
 end; { case } 
 until esc = 3; 
 close(Arquivo); 
end. 
 
 
 
 
3º quesito (2 pontos): Escreva um programa em Pascal que implemente uma lista encadeada de elementos reais. O 
tamanho máximo da lista não é conhecido e o programa deve permitir que o usuário insira tantos elementos quanto 
necessário, conforme esquema abaixo: 
 
 
A lista será composta de elementos (nós) do tipo registro TElem com um campo do tipo Real e outro do tipo ponteiro 
de TElem. O programa deve permitir: 
a) Inserir um elemento no início da lista a partir de um procedimento InserirElemento,o qual recebe um ponteiro 
pLista para o primeiro elemento da lista (este será nulo caso a lista esteja vazia). O procedimento deve criar um 
novo elemento TElem, solicitar do usuário seu valor real e adicioná-lo no início da lista, atualizando a posição 
do ponteiro pLista; 
b) Imprimir na tela do computador o conteúdo da lista a partir de um procedimento ImprimirLista, o qual recebe 
um ponteiro para o primeiro elemento da lista (este será nulo caso a lista esteja vazia). O procedimento deve 
imprimir todos os campos do tipo real da lista, com duas casas decimais; 
c) Possuir um menu no programa principal, que de forma repetitiva deve permitir: 1 – Inserir um elemento na lista; 
2 – Imprimir a lista; 3 – Sair; 
d) Os procedimentos serão chamados do menu no programa principal até que a opção 3 seja escolhida. 
Obs.: Abaixo é apresentada a estrutura sugerida para o programa: 
 
Type TElem = record 
v : real; 
p : ^TElem; 
 end; 
 pTElem = ^TElem; 
 
 
Procedure InserirElemento(var pLista : pTElem; val : real); 
Procedure ImprimirLista(pLista : pTElem); 
 
program CallCenter; 
 
type 
 TElem = record 
 val : real; 
 prox : ^TElem; 
 end; 
 pTElem = ^Telem; 
 
procedure InserirElemento(var primeiroElem : pTElem); 
var 
 elem : ^TElem; 
begin 
 new(elem); 
 write('Valor='); 
 readln(elem^.val); 
 elem^.prox := primeiroElem; 
 primeiroElem := elem; 
end; { InserirElemento } 
 
procedure ImprimirLista(ini : pTElem); 
begin 
 while ini <> nil do 
 begin 
 write(ini^.val:5:2,'->'); 
 ini := ini^.prox; 
 end; 
 writeln('nil'); 
end; { ImprimirLista } 
 
var 
 esc : integer; 
10.5 22.0 18.1 -22.0 ...... 
 lista : ^TElem; 
begin 
 lista := nil; 
 repeat 
 writeln('1- Inserir um elemento'); 
 writeln('2- Imprimir a lista'); 
 writeln('3- Sair'); 
 readln(esc); 
 case esc of 
 1 : begin 
 InserirElemento(lista); 
 end; 
 2 : begin 
 ImprimirLista(lista); 
 end; 
 end; { case } 
 until esc = 3; 
end.

Continue navegando