PARADIGMAS DE PROGRAMAÇÃO IV
2º Ano LESI+LMCC
1ª. Chamada 25/Junho/2004
Cotação : 20 Valores
Duração - 2H30 m
Leia o teste atentamente antes de começar.
Não programe os métodos get e set, use-os apenas dando-lhes um nome claro.
Responda a cada uma das QUESTÕES em folhas separadas
QUESTÃO 1 (6 valores)
Considere a classe LivroElectronico definida como
public class LivroElectronico {
private Stack esquerda;
// páginas da esquerda
private Stack direita;
// páginas da direita
na qual duas stacks representam as páginas do livro, sendo cada página uma simples
instância de String.
1.1- Tendo por base esta representação, e assumindo os métodos usuais de Stack (pop,
push, top, empty) implemente os seguintes métodos:
public
public
public
public
public
public
public
LivroElectronico(Vector paginas) ; // construtor inicial
String paginaActual(); // próxima página acessível
void desfolha();
// avança 1 página
void desfolhaN(int n); // avança n páginas, se possível
ArrayList lidas();
// páginas lidas, por ordem
String toString();
ArrayList converteLivro(); // (índice = nº página)
1.2- Torne robustos, usando excepções (não crie as classes de excepção) os métodos
paginaActual(), desfolha() e desfolhaN().
QUESTÃO 2 (7 valores)
Uma equipa de futebol é formada por um conjunto de jogadores de número único,
tendo cada jogador a si associada a seguinte informação básica: número, nome, clube,
idade, altura (instância de Ficha de jogador).
2.1- Desenvolva uma classe Equipa que deverá ter um nome e que permitirá com
facilidade procurar a informação de um jogador dado o seu número, tendo entre
outros os seguintes métodos e construtores:
public Equipa(String nome, Vector fichas);
// recebe um Vector de fichas de jogadores
public void insereJogador(Ficha jogador) throws JaExisteJogadorExc;
public Ficha jogadorNumero(int num) throws NaoExisteJogadorExc;
public int convocados(); // número de jogadores inscritos
public String toString();
public void gravaEmTxt(String ficheiro);
2.2.- Desenvolva a classe EquipaMais, subclasse de Equipa, que permita juntar a cada
jogador informação adicional (instância de FichaAdicional), tal como: número de
jogos, nº de golos, amarelos e vermelhos. Implemente os métodos:
public EquipaMais(String nome, Vector fichasBase, Vector fichasMais);
public void insJogador(Ficha fb, FichaAdicional fa)
throws JaExisteJogadorExc;
public String toString();
QUESTÃO 3 (7 valores)
Implemente uma classe Polinómio que permita criar representações canónicas de
polinómios a uma variável (exº P(x) = 2x5 – 3x4 + x2 –3), ou seja, polinómios em que
não existem termos (do mesmo grau) repetidos. Cada termo que irá constituir tal
polinómio deverá ser criado a partir de uma classe Termo, dado o seu grau e o seu
coeficiente, ambos de tipo int. Esta classe deverá também implementar métodos para
alterar o grau de um termo, mudar o seu coeficiente, mudar grau e coeficiente, e,
ainda, implementar a interface Standard (ou seja, implementar toString, equals e
clone).
A classe Polinómio, que, cf. anteriormente especificado, usa a classe Termo, deverá,
para além dos seus respectivos construtores, implementar a interface Standard bem
como um conjunto de métodos para a manipulação e “query” sobre polinómios,
designadamente:
•
•
•
•
•
maiorGrau() // dá o grau do termo de maior grau do polinómio;
maiorCoef() // dá o Termo de maior coeficiente do polinómio;
numTermos() // dá o número total de termos do polinómio;
juntaTermo(Termo t); // adiciona tal termo ao polinómio; as regras são as
bem conhecidas regras da forma canónica, ou seja, novo grau implica novo
termo; se grau é já existente faz-se aritmética com os coeficientes;
eliminaTermo(Termo t); // elimina tal termo do polinómio, caso exista;
Prof. F. Mário Martins
Download

Exame 25.06.2004