You are on page 1of 4

Fundação CECIERJ - Vice Presidência de Educação Superior a Distância

Curso de Tecnologia em Sistemas de Computação


Disciplina Fundamentos de Programação
AD2 2° semestre de 2010.

IMPORTANTE:
- As respostas (programas) deverão ser entregues em papel E em disquete, CD ou DVD para serem
testados.
- A AD é um mecanismo de avaliação individual. As soluções podem ser buscadas por grupos de
alunos, mas a redação final de cada resposta tem que ser individual.
- Atenção: ADs enviadas pelo correio devem ser postadas cinco dias antes da data final de entrega
estabelecida no calendário de entrega de ADs.

1a Questão (1,5 pontos) (Arquivo Texto)

Utilize o código Pascal abaixo, com a declaração de função gerar e o acesso à operação randomize
no programa principal. Complete o código, implementando os subprogramas:

(1) produzArquivoPalindromo, que gera um arquivo do tipo texto de números inteiros, ficando
um número em cada linha, onde o primeiro parâmetro informa a quantidade da metade do
arquivo a ser gerado, com valores produzidos pela operação gerar, sendo a outra metade
composta de números idênticos aos da primeira metade da seguinte forma: o primeiro deve
ser igual ao último, o segundo igual ao penúltimo e assim sucessivamente;

(2) mostrar, que mostra o conteúdo do arquivo recebido como parâmetro.

Program AD2Q1(input{teclado}, output{vídeo}, resultado{e/s}, auxiliar{e/s});


Function gerar(inicio{e}, fim{e}: integer): integer;
Begin
gerar:= inicio+random(fim-inicio+1);
End;
Var
resultado, auxiliar: text;
nome: string;
qtd: integer;
Begin
randomize; {inicializa o gerador de numeros randomicos}
write(output, ‘Diga o nome do arquivo que sera produzido: ’) ;
readln(input, nome);
assign(resultado, nome);
write(output, ‘Diga a quantidade de numeros a serem colocados no arquivo texto:’);
readln(input, qtd);
produzArquivoPalindromo(qtd, resultado, auxiliar); {produz arquivo com numeros
no intervalo 100 e 200}
mostrar(resultado);
End.
2a Questão (1,5 pontos) (Arquivo Tipado)

Utilize o código Pascal abaixo, com a declaração de função gerar e o acesso à operação randomize
no programa principal. Complete o código, implementando os subprogramas:

( 11produzArquivoPalindromo, que gera um arquivo tipado (“file of integer”) de números


inteiros, onde o primeiro parâmetro informa a quantidade da metade do arquivo a ser
gerado, com valores produzidos pela operação gerar, sendo a outra metade composta
de números idênticos aos da primeira metade da seguinte forma: o primeiro deve ser
igual ao último, o segundo igual ao penúltimo e assim sucessivamente;

( 11mostrar, que mostra o conteúdo do arquivo recebido como parâmetro.

Program AD2Q2(input{teclado}, output{vídeo}, resultado{e/s});


Type
tipado = file of integer;
Function gerar(inicio{e}, fim{e}: integer): integer;
Begin
gerar:= inicio+random(fim-inicio+1);
End;
Var
resultado: tipado;
nome: string;
qtd: integer;
Begin
randomize; {inicializa o gerador de numeros randomicos}
write(output, ‘Diga o nome do arquivo que sera produzido: ’) ;
readln(input, nome);
assign(resultado, nome);
write(output, ‘Diga a quantidade de numeros a serem colocados no arquivo de acesso direto:’);
readln(input, qtd);
produzArquivoPalindromo(qtd, resultado); {produz arquivo com numeros no intervalo 100 e 200}
mostrar(resultado);
End.

3a Questão (2,0 pontos) (Arquivo Tipado e Ordenação)

Considere a tipagem abaixo.


type
Pessoa = record
nome: string[10];
fone, cel: string[13];
idade: integer;
peso: real;
end;
ArqPessoa = file of Pessoa;

Faça em Pascal a operação cujo cabeçalho é dado a seguir:

procedure removePessoas(Var bd{e/s}: ArqPessoa; idadeMinima{e}, idadeMaxima{e}: integer);


{operação que remove os registros das pessoas do arquivo bd que tenham idade menor que
idadeMinima e maior que idadeMaxima. Suponha que o arquivo bd esteja ordenado pelo campo
nome, devendo, após a remoção das pessoas, preservar a ordem pelo campo nome.}
4a Questão (1,5 ponto) (Conjuntos)

Sejam A, B e C três conjuntos de inteiros no intervalo [1,50] que representam identificadores


dos funcionários(as) de uma empresa.

Considere que:
A representa o conjunto dos funcionários(as) que são gerentes, B representa o conjunto dos
funcionários do sexo masculino e C representa aqueles(as) que sabem programar em Pascal.

Escreva três funções em Pascal para retornar as seguintes informações.


1) A quantidade de funcionários do sexo masculino, gerentes e que não sabem Pascal(F01).
2) A quantidade de funcionárias que são gerentes ou que saibam Pascal (F02).
3) A quantidade de funcionárias que não são gerentes e que não sabem Pascal (F03).
Utilize as seguintes declarações.
type
T_Elem = 1 . . 50;
T_Conj = set of T_Elem;
function F01 (A{e}, B{e}, C{e}: T_Conj): integer;
begin
end;
function F02 (A{e}, B{e}, C{e}: T_Conj): integer;
begin
end;
function F03 (A{e}, B{e}, C{e}: T_Conj): integer;
begin
end;

5a Questão (1,5 pontos) (Ponteiros)

Faça um procedimento em Pascal para remover, de uma lista encadeada ordenada pelo valor da
chave, uma ocorrência do elemento que contenha a chave c passada como parâmetro. Se o
elemento c não existir, a lista não será alterada. Se o elemento c existir e o seu contador indicar um
valor maior que 1 (um), basta diminuir esse valor de uma unidade. Caso o contador seja igual a um, o
elemento deverá ser removido da lista.

Utilize as seguintes declarações.

type
T_info = integer;
T_pont = ^T_elemento;
T_elemento = record
chave : T_info;
contador : T_info;
prox : T_pont
end;

procedure Remove_Elems (var P_Lista{e/s}: T_pont; c{e}: T_info);


begin
{P_Lista: contém o ponteiro para o primeiro elemento da lista ou nil, caso a lista esteja vazia;}
{c: contém o valor da chave do elemento a ser removido;}
end;

6a Questão (2,0 pontos) (Ordenação e Ponteiros)

Faça um procedimento em Pascal para criar uma versão ordenada (S) pelo valor da chave de uma
lista encadeada (E) passada como parâmetro de entrada. Enquanto houver elemento na lista de
entrada E, esse procedimento deverá ler o primeiro elemento de E, retirar esse elemento de E e
deverá inserir esse elemento na lista S de maneira ordenada.

Utilize as seguintes declarações.

type
T_info = integer;
T_pont = ^T_elemento;
T_elemento = record
chave : T_info;
prox : T_pont
end;

procedure Ordena (var E_Lista{e/s}, S_Lista{s}: T_pont);


begin
{E_Lista: contém o ponteiro para o primeiro elemento da lista de entrada ou nil, caso a lista
esteja vazia; ao final da execução deverá ter o valor nil;
S_Lista: ao final da execução, deverá apontar para o primeiro elemento da versão ordenada
da lista de entrada ou nil, caso a lista de entrada seja vazia;}
end;

You might also like