\documentclass{article}

\title{1$^{\underline{\mbox{a}}}$ Prova de Programa\c{c}\~ao de Computadores}

\author{Professor: Carlos Camar\~ao}

\date{30 de Junho de 2004}

\addtolength\textwidth{15mm}
\addtolength\textheight{2cm}
\addtolength\topmargin{-2cm}
\setlength{\parindent}{0pt}

\pagestyle{empty}

\begin{document}

\maketitle

\begin{enumerate}

\item (5 pontos) Madame Zen \'e uma figura m\'{\i}stica que, al\'em de
prever o futuro lendo a m\~ao das pessoas, acredita que a frequ\^encia
de ocorr\^encia dos d\'{\i}igitos na representa\c{c}\~ao decimal dos
fatoriais de n\'umeros naturais est\'a relacionada ao futuro das
pessoas. Ela decidiu vender seus servi\c{c}os, fazendo previs\~oes
sobre a vida de seus fregueses, baseadas nessas freq\"u\^encias, e
pediu voc\^e para ajud\'a-la, determinando esses valores para ela.

Ela espera usar dados de entrada como os dias da semana, do m\^es e do
ano como valores de entrada, que s\~ao valores positivos menores ou
iguais a 365, e voc\^e deve ent\~ao fazer um programa que leia uma
lista de n\'umeros naturais e imprima, para cada um, o n\'umero de
ocorr\^encias de cada d\'{\i}gito decimal na representa\c{c}\~ao
decimal do fatorial desse n\'umero. O programa deve terminar quando o
n\'umero lido for maior do que 365 ou menor ou igual a zero.

Por exemplo, para a entrada:

\begin{tabular}{l}
3\\
8\\
100\\
0
\end{tabular}

o programa deve imprimir uma tabela como a seguinte:

\begin{tabular}{ll}
3!   & \\
     & (0)    0    (1)    0    (2)    0    (3)    0    (4)    0\\
     & (5)    0    (6)    1    (7)    0    (8)    0    (9)    0\\
8!   & \\
     & (0)    2    (1)    0    (2)    1    (3)    1    (4)    1\\
     & (5)    0    (6)    0    (7)    0    (8)    0    (9)    0\\
100! & \\
     & (0)   30    (1)   15    (2)   19    (3)   10    (4)   10\\
     & (5)   14    (6)   19    (7)    7    (8)   14    (9)   20
\end{tabular}

Os dados devem ser lidos do dispositivo de entrada padr\~ao.

\item (3 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, e imprima,
para cada $i$ 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    \\
        2    \\
        20   \\
        3    \\
        30   
      \end{array} \]
o programa deve imprimir os 2 valores (10+2+3) e (5+20+30).

O programa deve emitir uma mensagem de erro apropriada casa a entrada
n\~ao esteja segundo especificado acima.

Os dados devem ser lidos do dispositivo de entrada padr\~ao.

\item (5 pontos) Um numeral \'e um {\em pal\'{\i}ndromo\/} se ele \'e  
o mesmo se lido da esquerda para a direita ou da direita para a
esquerda (em outras palavras, se ele \'e igual ao seu reverso). Por
exemplo, 74547 \' um pal\'{\i}ndromo.

Um n\'umero pode ter uma representa\c{c}\~ao que \'e um
pal\'{\i}ndromo em uma base, e n\~ao \'e em outra. Por exemplo, 17
n\~ao \'e um pal\'{\i}ndromo, mas 10001 \'e, e ambas representam o
mesmo n\'umero se as bases s\~ao 10 e 2, respectivamente.

Fa\c{c}a um programa que leia uma lista de numerais na base 10 e
imprima, para cada $i$ dessa lista, uma das seguintes mensagens,
conforme apropriado:

  \begin{itemize}
 
     \item ``A representa\c{c}\~ao de $i$ \'e um pal\'{\i}ndromo nas
     bases: $b_1, \ldots, b_n$'' (onde $b_1, \ldots, b_n$ s\~ao as
     bases de 2 a 16 nas quais a representa\c{c}\~ao de $i$ \'e um
     pal\'{\i}ndromo);

     \item ``A representa\c{c}\~ao de $i$ n\~ao \'e um pal\'{\i}ndromo
     em nenhuma das bases de 2 a 16''.

  \end{itemize}

\item (7 pontos) Uma opera\c{c}\~ao de {\em contra\c{c}\~ao\/} tem
como entrada um inteiro positivo $i$ e uma seq\"u\^encia $s = [a_1,
a_2, \ldots, a_i, \ldots, a_n]$ de $n$ inteiros, onde sup\~oe-se $i <
n$, e retorna a seq\"u\^encia $con(s,i)$ dada por $[a_1, \ldots,
a_{i-1}, a_i-a_{i+1}, a_{i+2}, \ldots, a_n]$.

Aplicando $n-1$ contra\c{c}\~oes a um seq\"u\^encia de $n$ inteiros
quaisquer resulta em (uma seq\"u\^encia com) um \'unico inteiro,
chamado de {\em valor alvo\/}. Por exemplo:

  \[ \begin{array}{rcl}
       con([12,10,4,3,5],2) & = & [12,6,3,5] \\
       con([12,6,3,5],3)    & = & [12,6,-2]\\
       con([12,6,-2],2)     & = & [12,8]\\
       con([12,8],1)        & = & [4]
     \end{array}
  \]

Fa\c{c}a um programa que leia um valor inteiro positivo $n$ (o
n\'umero de inteiros da seq\"u\^encia original), $n$ valores inteiros
que formam a seq\"u\^encia original $a_1, \ldots, a_n$ e, em seguida,
uma seq\"u\^encia de $n-1$ valores que indicam as constra\c{c}\~oes a
serem usadas (i.e.~indicam em cada caso o segundo par\^ametro de {\it
con\/}), e imprima o valor alvo $x$. Se n\~ao existir valor alvo
(i.e.~se a entrada estiver de alguma forma incorreta), o programa deve
emitir uma mensagem de erro apropriada.

Os dados devem ser lidos do dispositivo de entrada padr\~ao.

\end{enumerate}

\end{document}
