\documentclass{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 Escreva duas defini\c{c}\~oes para uma fun\c{c}\~ao {\it soma\/}
que, dados dois n\'u\-me\-ros inteiros positivos {\it a\/} e {\it
b\/}, retorne o valor \mbox{\tt {\it a\/} + {\it b\/}}, usando apenas as
opera\c{c}\~oes mais simples de incrementar 1 e decrementar 1 (suponha
que as opera\c{c}\~oes de adicionar e de subtrair mais de uma unidade
n\~ao s\~ao dispon\'{\i}veis). A primeira defini\c{c}\~ao deve usar um
comando de repeti\c{c}\~ao, e a segunda defini\c{c}\~ao deve ser
recursiva.

\item Defina uma fun\c{c}\~ao que receba um n\'umero inteiro
n\~ao-negativo como argumento e retorne uma cadeia de ca\-rac\-te\-res
que \'e igual \`a representa\c{c}\~ao desse n\'umero em nota\c{c}\~ao
bin\'aria.

Por exemplo, ao receber o n\'umero inteiro {\tt 8}, a fun\c{c}\~ao
deve retornar  \ttfamily "1000"\normalfont.

\item 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).

O programa pode supor, em cada situa\c{c}\~ao de entrada de dados, que
o valor lido \'o esperado (por exemplo n\~ao \'e fornecida como
entrada nenhuma cadeia de caracteres que n\~ao representa um n\'umero
inteiro). Por exemplo, n\~ao \'e necess\'ario testar se o primeiro
valor lido (de $n$) representa de fato um valor positivo.

\item 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) 

O programa pode super que cada um dos valores fornecidos como entrada
representa um valor esperado (por exemplo, n\~ao \'e preciso testar se
\'e fornecida como entrada 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 \'e o mesmo).

\end{enumerate}

\end{document}


