Questão
2012
CESGRANRIO
Banco Nacional de Desenvolvimento Econômico e Social
Profissional Básico - Análise de Sistemas/Desenvolvimento (BNDES)
Questa-discursiva369586b28a5
Discursiva
Questão discursiva - Máximo 35 linhas

Um programa Java armazena informações sobre notas fiscais relativas a serviços prestados por uma empresa. As notas fiscais são divididas em notas emitidas para pessoas físicas (PF) e para pessoas jurídicas (PJ). As classes a seguir são utilizadas para representar tais informações:



As informações sobre as notas fiscais estão organizadas em uma árvore binária de busca, ordenadas segundo a data de emissão da nota.

A classe a seguir representa um nó dessa árvore binária de busca:



As variáveis esq e dir são usadas, respectivamente, para referenciar as subárvores à esquerda e à direita de um nó. A variável data armazena a data de emissão da nota, no formato AAMMDD (por exemplo, 22/04/2012 será armazenada como o inteiro 120422). A variável ln referencia um array contendo todas as notas fiscais emitidas na data em questão (variável data). 

A classe Arv é utilizada para implementar uma árvore binária de busca constituída por nós do tipo ArvNo. Sua estrutura é a seguinte:



O método calcTotImpostoPF() tem por objetivo calcular o somatório do imposto sobre serviços (ISS) recolhido sobre cada nota fiscal emitida para uma pessoa física entre duas datas passadas como parâmetros (dini <= ArvNo.data <= dfim). Por ser um método privado, ele é acionado a partir do método público totImpostoPF().

Escreva um algoritmo recursivo para o método calcTotImpostoPF() que percorra a árvore binária de busca e calcule o somatório do ISS recolhido sobre cada nota fiscal emitida para uma pessoa física entre as datas fornecidas. A sua solução deve levar em conta o seguinte: 

• Apenas as notas referentes a pessoas físicas devem ser consideradas. 

• O ISS cobrado sobre notas fiscais emitidas para pessoas físicas é de 10% do valor da nota. 

• Assuma que a variável Arv.raiz referencia o nó raiz de uma árvore (possivelmente vazia) que foi carregada por um método não exibido no enunciado desta questão.

• Nenhuma nova propriedade (método, variável de instância ou variável estática) pode ser inserida nas classes apresentadas no enunciado. 

• Nenhuma modificação pode ser feita no código apresentado no enunciado, com exceção do corpo dos métodos que façam parte da solução do problema. 

• O algoritmo deve levar obrigatoriamente em conta as características de uma árvore binária de busca. 

• Apenas as implementações recursivas do método calcTotImpostoPF() serão consideradas.