\documentstyle{article}

\title{2$^{\underline{\mbox{a}}}$ Prova de Algoritmos e Estruturas de Dados I}

\pagestyle{empty}	

\author{Professor: Carlos Camar\~ao}
\date{4 de Setembro de 2003}

\begin{document}

\maketitle
\thispagestyle{empty}

\begin{enumerate}

\item (5 pontos) Escreva um programa que leia um valor inteiro
positivo $n$, calcule o valor de $\sum_{i=1}^n (-i/(i*i))$, e imprima
esse valor.  Decomponha o seu programa em tr\^es partes, cada uma
delas implementada por um m\'etodo: leitura, c\'alculo do valor
desejado a partir do valor lido, e impress\~ao do valor calculado.

O programa (isto \'e, o m\'etodo de leitura) deve ler uma cadeia de
caracteres e causar uma exce\c{c}\~ao se essa cadeia n\~ao representar
um n\'umero inteiro positivo. Nesse caso, a exce\c{c}\~ao deve ser
tratada no programa principal, e esse tratamento deve apenas emitir
uma mensagem de erro apropriada, e em seguida a execu\c{c}\~ao do
programa deve ser terminada.

\item (5 pontos) Fa\c{c}a um programa para ler um valor inteiro
positivo $n$, e em seguida $n$ seq\"u\^encias de valores inteiros
positivos, cada uma delas terminada por um valor inteiro negativo ou
nulo, e imprimir a soma dos maiores valores de cada uma das
seq\"u\^encias.

Por exemplo, se os valores digitados pelo usu\'ario forem:
  
  \[ \begin{array}{l}
        3    \\
        1    \\
        10   \\
        0    \\
        2    \\
        20   \\
        10   \\
        -1   \\
        3    \\ 
        30   \\
        5    \\
        1    \\
        0    
      \end{array} \]
o programa deve imprimir 50 como resultado (50 = 10+20+30).

Em cada situa\c{c}\~ao de entrada de dados, se um valor n\~ao esperado
for fornecido com entrada (por exemplo uma cadeia de caracteres que
n\~ao representa um n\'umero inteiro), uma exce\c{c}\~ao deve ser
causada, e o processo de entrada de dados pelo usu\'ario do programa
deve recome\c{c}ar, a partir do in\'{\i}cio (isto \'e, a partir da
leitura de $n$). 

Dica 1: o m\'etodo {\it parseInt\/} causa a exce\c{c}\~ao {\it
NumberFormatException\/} se a cadeia de caracteres fornecida como
argumento n\~ao representar um n\'umero inteiro.

Dica 2: N\~ao esque\c{c}a de testar se o primeiro valor lido (de $n$)
\'e um valor positivo, e causar uma exce\c{c}\~ao em caso contr\'ario. 

\item (5 pontos) Escreva outra vers\~ao para o seu programa acima, que
difere da anterior da seguinte maneira. Se o seu programa declarou e
usou um arranjo, fa\c{c}a uma vers\~ao que n\~ao declara e nem usa um
arranjo. E vice-versa (se o seu programa n\~ao declarou e usou um
arranjo, fa\c{c}a uma vers\~ao que declara e usa um arranjo).

\item (5 pontos) Fa\c{c}a um programa que leia dois n\'umeros inteiros
positivos, $n$ e $m$, e $n$ seq\"u\^encias de $m$ valores inteiros
positivos, cada uma dessas seq\"u\^encias terminada por um valor
inteiro negativo ou zero, e imprima, para $i$ variando de 1 a $m$, a
soma dos $i$-\'esimos inteiros de cada uma das $n$ sequ\^encias.

Por exemplo, se os valores fornecidos como entrada forem:
  
  \[ \begin{array}{l}
        3    \\
        2    \\
        10   \\
        5    \\
        0    \\
        2    \\
        20   \\
        -1   \\
        3    \\
        30   \\
        0
      \end{array} \]
o programa deve imprimir 70 como resultado: 
  70 = (10+5) + (2+2) + (3+30) 

Se um valor n\~ao esperado for fornecido com entrada (por exemplo uma
cadeia de caracteres que n\~ao representa um n\'umero inteiro ou se o
n\'umero de inteiros positivos de cada seq\"u\^encia n\~ao for o
mesmo), uma exce\c{c}\~ao deve ser causada, e o processo de entrada de
dados pelo usu\'ario do programa deve recome\c{c}ar, a partir do
in\'{\i}cio.

\end{enumerate}

\end{document}


