\documentclass{article}

\usepackage[portuguese]{babel}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}

\addtolength{\textwidth}{1.5cm}
\setlength{\oddsidemargin}{0pt}

\author{Carlos Camarão}

\date{Data de Entrega: 7 de Julho de 2009}

\title{Quarta Lista de Exercícios}

\begin{document}

\maketitle

{\parindent 0pt Para facilitar o trabalho do monitor, por favor
escreva as solu\c{c}\~oes em arquivos {\tt Problema1.java}, {\tt
Problema2.java} e {\tt Problema3.java}, com as classes que cont\^em o
m\'todo {\tt main} com o mesmo nome do arquivo, sem a extens\~ao {\tt
.java}.

\begin{enumerate}

\item Reescreva o exerc\'{\i}cio 3 da $1^{\rm \underline{a}}$ lista de
modo a fazer {\em valida\c{c}\~ao dos dados de entrada\/}, isto \'e,
de modo a garantir que os dados de entrada sejam sempre valores
v\'alidos para o tipo esperado (no caso, valores v\'alidos do tipo
{\tt double}).

Para isso, defina um m\'etodo para leitura de um valor de tipo {\tt
double} que fa\c{c}a uma chamada ao m\'etodo {\tt parseFloat} da
classe {\tt Float} e defina um tratador que i) trate a exce\c{c}\~ao
que pode ser causada pela chamada a esse m\'etodo (da classe {\tt
NumberFormatException}) e ii) chame o m\'etodo recursivamente.

\item Reescreva o exerc\'{\i}cio 9 da $1^{\rm \underline{a}}$ lista de
modo a garantir que o valor lido seja um valor correto (entre 0 e 100)
para a nota de um aluno. O programa deve definir um m\'etodo para
leitura da nota e propagar uma exce\c{c}\~ao de tipo {\tt
NotaInvalida} caso o valor lido n\~ao constitua um valor inteiro entre
0 e 100. A classe {\tt NotaInvalida} deve ser definida como uma
subclasse da classe {\tt Exception}. O programa deve tratar
poss\'{\i}vel exce\c{c}\~ao que possa ser causada, de modo a informar
ao usu\'ario que o valor de entrada n\~ao constitui um valor correto
para uma nota.

\item Em Java, uma exce\c{c}\~ao n\~ao \'e causada quando o resultado
de uma opera\c{c}\~o aritm\'etica com valores inteiros tem magnitude
grande demais para poder ser armazenado no espa\c{c}o de mem\'oria
reservado para valores desses tipos (essa condi\c{c}\~ao \'e comumente
chamada, em ingl\^es, de {\em overflow\/}; em portugu\^es podemos
chamar essa condi\c{c}\~ao de ``incapacidade de armazenamento", ou
``estouro").

No caso da adi\c{c}\~ao de dois inteiros, tal condi\c{c}\~ao ocorre se
e somente se as duas parcelas da adi\c{c}\~ao t\^em o mesmo sinal e o
sinal do resultado \'e diferente do sinal das parcelas (quando as duas
parcelas t\^em sinais diferentes entre si, nunca pode ocorrer uma
incapacidade de armazemento). Em outras palavras, em caso de
incapacidade de armazenamento o resultado \'e negativo se os operandos
s\~ao positivos, e positivo se os operandos s\~ao negativos .

Com base nisso, escreva um programa que defina um m\'etodo est\'atico
{\tt soma} que, ao receber dois argumentos do tipo {\tt int}, retorna
a soma desses argumentos se n\~ao houver incapacidade de armazenamento
e causa uma exce\c{c}\~ao de tipo {\tt ArithmeticException} caso
contr\'ario. O programa deve ler repetidamente dois n\'umeros inteiros
diferentes de zero, chamar o m\'etodo {\tt soma} para somar os dois
inteiros lidos e imprimir, dependendo dos valores dos argumentos, o
resultado da soma, caso o valor da soma possa ser armazenado em um
valor de tipo {\tt int}, caso contr\'ario uma mensagem apropriada para
o usu\'ario (indicando que o valor da soma n\~ao pode ser armazenado
em um valor de tipo {\tt int}). A leitura deve terminar quando um dos
valores lidos for igual a zero.

\end{enumerate}

\end{document}

