Adeline de Sousa, Milena Rocha e Paulo Borba
Centro de Informática
Universidade Federal de Pernambuco
1. Defina em Java uma classe Contador, contendo os seguintes métodos:
- incrementar, soma 1 ao valor atual do contador;
- getValor, retorna o valor atual do contador;
- desfazer, desfaz o último incremento (subtrai 1 do valor atual do contador).
Note que desfazer desfaz apenas o último incremento; assim, se chamado duas vezes consecutivas, sem uma chamada à operação de incremento, deve ser gerado uma mensagem de erro. Use um atributo booleano para indicar se houve um incremento depois da última operação desfazer. Defina também um construtor, assumindo que todo contador começa a contar de zero. Utilize a classe Console apenas para apresentar mensagens de erro na tela. Garanta que o contador não pode ficar negativo.
2. Altere a classe Contador da Questão 1 para que ela tenha um outro método incrementar, que recebe um inteiro como parâmetro e adiciona este inteiro ao valor atual do contador, dando uma mensagem de erro caso o inteiro seja negativo. Note que o método desfazer terá que ser modificado para desfazer não apenas os incrementos de 1 mas também os incrementos feitos com o novo método. Use um outro atributo para indicar o valor a ser subtraído pela operação desfazer.Tente inplementar um método usando o outro, para evitar repetição de código.
3. Altere a classe Contador da Questão 2 para que o método desfazer possa ser invocado para desfazer os dois últimos incrementos. Assim, depois de dois incrementos, uma chamada a desfazer desfaz o último incremento, e outra chamada consecutiva a desfazer desfaz o primeiro incremento; uma terceira chamada consecutiva gera uma mensagem de erro.
4. Defina um método main em Java que lê dois números inteiros do teclado e imprime o resultado da multiplicação de um número pelo outro. Não use o operador de multiplicação '*', mas sim o operador de soma '+', considerando que '3 * 4', por exemplo, é equivalente à '3 + 3 + 3 + 3'. Considere primeiro que os números lidos não podem ser negativos e depois ajuste o programa para que ele funcione corretamente com entradas negativas.
5. Defina um método main em Java que lê dois números inteiros do teclado e imprime o resultado da divisão inteira do primeiro número pelo segundo. Não use o operador de divisão '/', mas sim o operador de subtração '-', considerando que '9/4', por exemplo, é equivalente ao número de vezes que podemos subtrair 4 de 9 sem que o resultado seja negativo. Considere primeiro que os números lidos não podem ser negativos e depois ajuste o programa para que ele funcione corretamente com entradas negativas. Dê uma mensagem de erro caso o segundo número seja 0; que resultado seria gerado caso o seu programa não verificasse esta situação?
6. Estenda o método main da Questão 6 para que ele imprima também o resto da divisão inteira do primeiro número pelo segundo. Não use o operador de resto '%' e tente reusar código.
7. Adicione à classe Data,feita na lista passada, o método getDistanciaDias, o qual retorna o número de dias entre duas datas: uma das datas é a que executa o método, a outra é fornecida como parâmetro.
8. Defina uma classe Calculadora face=Arial>que contém métodos para multiplicar, dividir, e calcular o resto da divisão entre dois números inteiros, mas sem usar os operadores ' *', '/', e '%. Defina também um método main que realiza os serviços dos métodos main das Questões 4, 5, e 6 , mas que utiliza os serviços de Calculadora ao invés de implementá-los diretamente.
9. Estenda a classe Calculadora com o método fatorial, que calcula o fatorial de um dado número inteiro. O fatorial de 0 é 1, e o fatorial de qualquer inteiro positivo né igual a n multiplicado pelo fatorial de 'n-1'; ou seja, o fatorial de n é igual a 'n*n-1*n-2*...*1'. Não use os operadores '*', '/', e '%'. Caso o número passado como parâmetro seja negativo, deve ser dada uma mensagem de erro; que resultado seria gerado caso o seu programa não verificasse esta situação? Altere o método main da Questão 8 para que ele imprima também o fatorial dos dois números lidos.