\documentclass[brazil]{article}

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

\title{Prova\\ Algoritmos e Estruturas de Dados I}

\pagestyle{empty}	

\addtolength\textwidth{16mm}
\addtolength\textheight{2.2cm}
\addtolength\topmargin{-2.2cm}
\setlength{\parindent}{0pt}

\author{Prof.: Carlos Camar\~ao}
\date{13 de Dezembro de 2005}

\begin{document}

\maketitle
\thispagestyle{empty}

Em todas as quest\~oes, voc\^e pode supor a exist\^encia de m\'etodos
est\'aticos de entrada e sa\'{\i}da de valores de tipos básicos,
definidos em uma classe {\tt EntradaPadr\~ao}. Por exemplo, para ler
inteiros, voc\^e pode usar {\tt EntradaPadr\~ao.l\^eInteiro()}. Esse
método lê um inteiro do dispositivo de entrada padrão e retorna o
valor lido, de tipo {\tt int}.

\vspace*{\baselineskip}

{\bf 1.} (6 pontos) Escreva um programa que leia um valor inteiro
positivo $n$, calcule o valor dado por $\sum_{i=1}^n (-i+1)/(3*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 deve tratar a exce\c{c}\~ao que ocorre quando a cadeia de
caracteres lida não representa um n\'umero inteiro, informando o
usuário com uma mensagem apropriada e realizando a operação de leitura
novamente.

A operação de divisão não pode ser uma ``divisão inteira'' (não pode
ter como parâmetros dois números inteiros), mas sim uma divisão de
números de ponto flutuante (i.e.~deve ser realizada depois de
converter pelo menos um dos números inteiros para um número de ponto
flutuante).

\vspace*{\baselineskip}

{\bf 2.} (7 pontos) Uma opera\c{c}\~ao {\it anulsub\/} aplicada a uma
lista de $n$ n\'umeros inteiros positivos $x = [a_0, a_1,\ldots,
a_i,\ldots, a_{n-1}]$ --- onde o elemento $a_i$ tem índice $i$ na
lista, para $i$ de $0$ a $n-1$ --- e a um inteiro positivo $i$
(chamado de {\it \'{\i}ndice\/} da operação), onde sup\~oe-se $0\leq
i<n-1$, retorna como resultado a lista $[a_0, \ldots, a_{i-1}, 0,
a_i+a_{i+1}, a_{i+2},\ldots, a_{n-1}]$.

Aplicando $n-1$ opera\c{c}\~oes {\it anulsub\/} a uma lista de $n$
inteiros positivos quaisquer obt\'em-se uma outra lista, chamada de
{\em lista alvo\/}. Por exemplo, se $anulsub(x,i)$ representa a
aplicação da operação a uma lista {\it x} e um \'{\i}ndice $i$, temos:

  \[ \begin{array}{rcl}
       anulsub([12,10,4,3,5],1)  & = & [12,0,14,3,5] \\
       anulsub([12,0,14,3,5],2)  & = & [12,0,0,17,8]\\
       anulsub([12,0,0,17,8],1)  & = & [12,0,0,17,8]\\
       anulsub([12,0,0,17,8],0)  & = & [0,0,0,17,8]
     \end{array}
  \]

Fa\c{c}a um programa que:

\begin{itemize}

\item leia um valor inteiro positivo $n$ (o n\'umero de inteiros da
lista original), $n$ valores inteiros positivos da lista $a_0, \ldots,
a_{n-1}$ e, em seguida, uma seq\"u\^encia de $n-1$ valores que indicam
os \'{\i}ndices de opera\c{c}\~oes {\it anulsub\/}, 

\item realize opera\c{c}\~oes {\it anulsub\/} consecutivamente como no
exemplo acima, e

\item imprima a lista alvo.

\end{itemize}

Se n\~ao existir lista alvo (i.e.~se a entrada estiver de alguma forma
incorreta), o programa deve emitir uma mensagem de erro apropriada.

\vspace*{\baselineskip}

{\bf 3.} (7 pontos) Um armaz\'em trabalha com $n$ mercadorias
diferentes ($n=100$), identificadas por n\'umeros de 1 a $n$.

Um funcion\'ario desse armaz\'em tem sal\'ario mensal estipulado como
20\% da receita mensal obtida com as vendas que ele realizou, mais um
b\^onus igual a 10\% da receita mensal obtida com o produto que teve o
maior n\'umero de unidades vendidas.

Escreva um programa que leia, para cada mercadoria de 1 a $n$, o
n\'umero de unidades vendidas em um determinado m\^es por esse
funcion\'ario e o pre\c{c}o unit\'ario da mercadoria, e imprima o
sal\'ario do funcion\'ario, nesse m\^es.

Repetindo: para leitura dos dados, voc\^e pode supor que existam
m\'etodos est\'aticos {\it readInt\/} e {\it readFloat\/}, que n\~ao
t\^em par\^ametros e retornam respectivamente um valor do tipo {\tt
int} e um valor do tipo {\tt float}, sendo o valor lido do dispositivo
de entrada padr\~ao.

\end{document}


