<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\documentclass[11pt]{amsart}

%% Escrevendo em português:
\usepackage[brazil]{babel}
\usepackage[latin1]{inputenc} % isso é quase redundante
\usepackage{textcomp}
%\usepackage[T1]{fontenc}
%----------------------------
\makeatletter
\renewcommand{\labelenumi}{\theenumi.}
\makeatother

\begin{document}
\title{Exercício Programa 2}
\maketitle
\thispagestyle{empty}

\noindent\textbf{Data de entrega:}\quad 25/10/2001

\bigskip

\noindent\textbf{Problema.}\quad
Implemente em C uma calculadora simples que manipula nú\-me\-ros inteiros de
tamanho arbitrário.  A sua calculadora deve ser capaz de executar as seguinte
operações, no mínimo:
\begin{enumerate}
\item somar dois inteiros,                                
\item calcular a diferenca de dois inteiros,              
\item calcular o produto de dois inteiros,                
\item calcular o quociente inteiro de dois inteiros,      
\item calcular o resto da divisão de um inteiro por outro.
\end{enumerate}
A sua calculadora deve trabalhar com a notação polonesa reversa (como
calculadoras HP).  Você também pode implementar memórias, para tornar sua
calculadora mais fácil de usar.  A sugestão natural é você implementar cada
número como uma lista ligada.

Seja inventivo!  Incremente sua calculadora implementando mais coisas!  Por
exemplo, para fazer sua calculadora ser realmente útil, você poderia
implementar uma \textit{calculadora programável} (isto é, uma máquina que
permite escrever pequenos programas).


\subsection*{Sugestão}  Você pode achar úteis os seguinte programas do Sedgewick
(Algorithms in C, Capítulo~4).
{\footnotesize
\begin{verbatim}
-----
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include "POLY.h"
main(int argc, char *argv[])
  { int N = atoi(argv[1]); float p = atof(argv[2]);
    Poly t, x; int i, j;
    printf("Binomial coefficients\n");
    t = POLYadd(POLYterm(1, 1), POLYterm(1, 0));
    for (i = 0, x = t; i &lt; N; i++)
      { x = POLYmult(t, x); showPOLY(x); }
    printf("%f\n", POLYeval(x, p));
 }
-----
typedef struct poly *Poly;
 void showPOLY(Poly);
 Poly POLYterm(int, int);
 Poly POLYadd(Poly, Poly);
 Poly POLYmult(Poly, Poly);
float POLYeval(Poly, float);
-----

#include &lt;stdlib.h&gt;
#include "POLY.h"
struct poly { int N; int *a; };
Poly POLYterm(int coeff, int exp)
  { int i; Poly t = malloc(sizeof *t);
    t-&gt;a = malloc((exp+1)*sizeof(int));
    t-&gt;N = exp+1; t-&gt;a[exp] = coeff;
    for (i = 0; i &lt; exp; i++) t-&gt;a[i] = 0;    
    return t;
  }    
Poly POLYadd(Poly p, Poly q)
  { int i; Poly t;
    if (p-&gt;N &lt; q-&gt;N) { t = p; p = q; q = t; }
    for (i = 0; i &lt; q-&gt;N; i++) p-&gt;a[i] += q-&gt;a[i];
    return p;
  }
Poly POLYmult(Poly p, Poly q)
  { int i, j;
    Poly t = POLYterm(0, (p-&gt;N-1)+(q-&gt;N-1));
    for (i = 0; i &lt; p-&gt;N; i++) 
      for (j = 0; j &lt; q-&gt;N; j++) 
        t-&gt;a[i+j] += p-&gt;a[i]*q-&gt;a[j];
    return t;
  }
float POLYeval(Poly p, float x)
  { int i; double t = 0.0;
    for (i = p-&gt;N-1; i &gt;= 0; i--) 
      t = t*x + p-&gt;a[i];
    return t;
  }
\end{verbatim}
}
\end{document}

% Local Variables: 
% mode: latex
% eval: (Portug-mode)
% TeX-master: t
% End: 
</pre></body></html>