Você está na página 1de 3

REA II CCEN / UFPE

Disciplina: IF 165 Computao Eletrnica

3 Exerccio Escolar 2010.2

Nome legvel do aluno: .........................................................................................

Data: 02/12/ 2010

Turma .........

Observaes gerais:
1) Preencher os dados do cabealho do bloco de provas;
2) Preencher o cabealho da folha de questes com o nome e a turma;
3) No utilizar a folha de questes como rascunho. O rascunho, se necessrio, dever ser feito nas
folhas do caderno de prova;
4) Ao final da prova entregar ao professor ou fiscal a folha de questes e o caderno de prova;
5) Cada quesito vale 5 pontos.
1 quesito: O Dr. Zinho mantm atualizado no HD de seu computador um arquivo de cadastro de clientes

denominado ZINHO.CAD e pretende que seja criado um outro arquivo, no mesmo HD, com o
nome ZINHO.M50, correspondente aos dados dos clientes de sexo masculino que fazem 50
anos em 2011 (nascidos no ano de 1961). Pede-se:
Fazer um programa em PASCAL que leia o arquivo ZINHO.CAD e crie o arquivo solicitado
ZINHO.M50 conforme estruturas de dados abaixo:
Estrutura do registro do arquivo ZINHO.CAD
Nome
Endereo Sexo Dia Nasc. Ms Nasc. Ano nasc.
String[20] String[40] Char Integer
Integer
Integer
Est.do registro do arquivo ZINHO.M50
Nome
Endereo
String[20]
String[40]
Program Quesito1;
Type Reg1 = Record
Nome : String[20];
Endereco : String[40];
Sexo : Char;
DiaNasc, MesNasc, AnoNasc : Integer;
end;
Reg2 = Record
Nome : String[20];
Endereco : String[40];
Var

end;
Arq1 : File of Reg1; Arq2 : File of Reg2;
Cliente1 : Reg1; Cliente2 : Reg2;

CRITRIO DE CORREO:

Begin
Assign( Arq1, 'ZINHO.CAD' );
Assign( Arq2, 'ZINHO.M50' );
Reset( Arq1 ); Rewrite ( Arq2 );

Estruturas dos arquivos


Assigns e abertura
Lao de repetio
Seleo e gravao

While Not Eof( Arq1 ) Do


Begin
Read(Arq1, Cliente1);
If (Cliente1.AnoNasc = 1961) AND (Cliente1.Sexo = 'M') then
Begin
Cliente2.Nome := Cliente1.Nome;
Cliente2.Endereco := Cliente1.Endereco;
Write(Arq2, Cliente2);
End;
End;

1,0
1,0
1,5
1,5

Close(Arq1); Close(Arq2);
Write( 'Arquivo gravado com sucesso com o nome "ZINHO.M50"' );
End.

2 quesito: Escreva um programa em PASCAL que crie um pequeno cadastro de veculos para
aluguel em uma locadora de veculos (nmero mximo de veculos igual a 40). Armazene
os dados dos veculos em um vetor de registros com a seguinte estrutura:

marca (string com 15 posies)


modelo (string com 20 posies)

valor da diria (real)


nmero de portas (integer)

Aps a criao do cadastro, o programa deve, em processo repetitivo, ler do teclado o


nmero de portas e o valor mximo da diria do veculo desejado e, em seguida,
apresentar na tela uma relao contendo marca e o modelo de todos os veculos
cadastrados e que satisfaam as condies solicitadas. O processo repetitivo termina
quando for informado o valor 0 (zero) para o nmero de portas.
Obs.:
1) O nmero de veculos a serem cadastrados deve ser lido no incio do programa;
Enquanto no for digitado um nmero no intervalo definido o programa no deve
prosseguir.
2) O programa deve conter necessariamente:
a) Um funo ou procedimento que receba o nmero de veculos a serem cadastrados e
retorne por parmetro o vetor registro com os veculos cadastrados;
b) Uma funo ou procedimento para imprimir uma relao contendo marca e modelo
de todos os veculos que tenham as caractersticas indicadas a ser chamada do
programa principal.
Progra m Quesito2;
Type Veiculo = Record
Marca : String[15];
Modelo : String[20];
ValorDiaria : Real;
NumPortas : Integer;
End;
VetVeiculos = ARRAY[ 1 .. 40 ] Of Veiculo;
Var Vet : VetVeiculos;
nPortas, n, encontrou : Inte ger;
ValDiaria: Real;

CRITRIO DE CORREO:
Proc./Func. Cadastro
Proc./Func. Pesquisa
Validao de N
Chamada da Cadastro
Chamada Pesquisa
Sada do Resultado

1,5
1,5
0,5
0,5
0,5
0,5

Procedure LerDados( nv : Inte ger; var vetor : VetVeiculos);


Var i : integer;
Begin
For i := 1 to nv Do
Begin
Write( 'Entre com o valor da diria do veiculo ', i ); readln( vetor[i].ValorDiaria );
Write( 'Entre com a marca do veiculo ', i ); readln( vetor[i].Marca );
Write( 'Entre com o modelo do veiculo ', i ); readln( vetor[i].Modelo );
Write( 'Entre com o nmero de portas do veiculo ', i ); readln( vetor[i].NumPortas );
End;
End;
Function PesquisaVeiculos( nv : Integer; vetor : VetVeiculos; np : Integer; valMaximo : Real ) : Integer;
Var
i, encontrouVeiculo : integer;
Begin
encontrouVeiculo := 0;
For i := 1 to nv Do
Begin
If (vetor[ i ].NumPortas = np) AND ((vetor[ i ].ValorDiaria <= valMaximo)) Then
Begin
Writeln( 'Marca: ', vetor[ i ].Marca);
Writeln( 'Modelo: ', vetor[ i ].Modelo);
Writeln;
encontrouVeiculo := 1;

End;
End;
PesquisaVeiculos := encontrouVeiculo;
End;
Begin
Repeat
writeln( 'n= ? '); read( n );
Until ( n > 0 ) AND ( n <= 40);
LerDados(n, vet);
Writeln('Pesquisa de veculos para locao');
Repeat
Writeln('Nmero de portas (0 para encerrar): '); Read (nPortas);
If nPortas > 0 Then
Begin
Writeln('Valor m ximo da diria: '); Read (valDiaria);
encontrou := PesquisaVeiculos( n, vet, nPortas, valDiaria);
End;
If encontrou = 0 Then
Writeln( 'Nenhum veculo com as caracterstica solicitadas foi encontrado. ' );
Until nPortas = 0;
End.

Você também pode gostar