Baixe o app para aproveitar ainda mais
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.
Compartilhar