Beruflich Dokumente
Kultur Dokumente
ENGENHARIA DE COMPUTAO
Algoritmos e Estrutura de Dados II - Turma 590
Prof. Paulo Rech Wagner
PROVA P2 Data: 25/05/07
Questo 1)
A estrutura de dados utilizada para controlar as compras dos clientes em um
supermercado foi implementada atravs de estruturas cruzadas (lista com lista, ABP com
lista,...). Esta estrutura de dados deve ser totalmente dinmica contendo os clientes e os
produtos que cada um est comprando. Os clientes possuem os atributos nome (campo
chave), cpf e uma referncia para a lista dos produtos que est comprando. Cada produto
possui os atributos nome e preo. Considerando que os dados j esto armazenados na
estrutura de dados, faa: (3.0 pontos)
a) defina a estrutura de dados a ser utilizada fazendo o seu desenho e indicando
todas as classes utilizadas com seus respectivos atributos;
b) um mtodo, que recebe como parmetro o nome de um cliente e retorne o produto
mais barato que est comprando;
Objeto ListaLSE
prim ult
lista dos clientes
nome preo
Objeto Produto
Classes utilizadas:
- Classe NodoLSE
- Classe ListaLSE
- Classe Cliente
inicio
literal nome , cpf
- Classe Produto
inicio
literal nome
real preco
fim
nocli pesquisar(nome_cliente)
se ( nocli = nulo )
ento retorna nulo
seno inicio
mais_barato nulo
lprod nocli.get_info( ).get_lista_prod( )
noprod lprod.get_primeiro( )
enquanto ( noprod nulo ) faa
inicio
prod noprod.get_info( )
se ( mais_barato = nulo )
ento mais_barato noprod
seno se ( prod.get_preco( ) < mais_barato.get_info( ).get_preco( ) )
ento mais_barato noprod
noprod noprod.get_prox( )
fim
retorna mais_barato.get_info( )
fim
fim
Algoritmo Principal
inicio
ListaClientes listacli
NodoLSE nocli
literal nome
60 35 55 95 45 15 80 50 85 75 90 40
60
35 95
15 55 80
45 75 85
40 50 90
Pr-fixado: 60 35 15 55 45 40 50 95 80 75 85 90
Central: 15 35 40 45 50 55 60 75 80 85 90 95
Ps-fixado: 15 40 50 45 55 35 75 90 85 80 95 60
Questo 3)
Dado um banco de dados j construdo e composto pelos seguintes campos: nome, cargo
e salrio. Sabendo que ele est organizado segundo uma rvore binria j construda,
escreva um algoritmo que leia o nome de uma pessoa e verifique se ela est presente ou
no na rvore binria. Caso ela esteja presente, escreva um mtodo que calcule e
informe a mdia salarial das pessoas que possuem o mesmo cargo do que ela (pessoa
pesquisada) existentes neste banco de dados. (2.0 pontos)
/* verso 1 utilizando dois mtodos distintos: uma para contar e outro para somar */
Algoritmo Principal
inicio
Arv_Binaria ab
NodoAB no
literal nome, cargo
inteiro cont
real soma
fim
objeto_temporario ( ) : construtor
{ cont 0; soma 0 }
inteiro get_cont ( ) : mtodo que retorna o valor do contador
{ retorna cont }
inc_cont ( ) : mtodo que incrementa 1 no contador
{ cont cont + 1 }
real get_soma ( ) : mtodo que retorna o valor do acumulador
{ retorna soma }
fim
/* retorna a mdia salarial das pessoas do mesmo cargo. Chama o algoritmo recursivo */
Algoritmo media_salarial_cargo (literal cargo)
inicio
objeto_temporatio temp
/* algoritmo recursivo que retorna a mdia salarial das pessoas do mesmo cargo */
Algoritmo media_salarial_cargo (NodoAB no, literal cargo, objeto_temporario temp)
inicio
se ( no nulo )
ento inicio
se ( no.get_info( ).get_cargo( ) = cargo )
ento inicio
temp.inc_cont( )
temp.acum_soma(no.get_info( ).get_salario( ))
fim
media_mesmo_sexo(no.get_esq( ),cargo,temp)
media_mesmo_sexo(no.get_dir( ),cargo,temp)
fim
fim
Questo 4)
Escreva um algoritmo que leia (no algoritmo principal) um valor inteiro e verifique se ele
est presente ou no em uma rvore binria de pesquisa (ABP) contendo valores inteiros.
Caso ele esteja presente, escreva um mtodo que retorna e escreva (no algoritmo
principal) a quantidade de valores presentes na ABP que so maiores do que ele. Para
exemplificar, indicar dois valores quaisquer da rvore da questo 2 com suas respectivas
quantidades de valores maiores. (3.0 pontos)
Exemplos:
- valor 60 quantidade de valores maiores: 5
- valor 50 quantidade de valores maiores: 7
no pesquisar(valor)
cont tamanho(no.get_dir( ))
pai acha_pai(no)
enquanto (pai nulo) faa
inicio
se ( pai.get_info( ).comparar(valor) = -1)
ento cont cont + 1 + tamanho(pai.get_dir( ))
pai acha_pai(pai)
fim
retorna cont
fim
achei falso