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