  The main theme of this dissertation is the study of the lattice points in a
rational convex polyhedron and their encoding in terms of Barvinok's short
rational functions. The first part of this thesis looks into theoretical
applications of these rational functions to Optimization, Statistics, and
Computational Algebra. The main theorem on Chapter 2 concerns the computation
of the \emph{toric ideal} $I_A$ of an integral $n \times d$ matrix $A$. We
encode the binomials belonging to the toric ideal $I_A$ associated with $A$
using Barvinok's rational functions. If we fix $d$ and $n$, this representation
allows us to compute a universal Gr\"obner basis and the reduced Gr\"obner
basis of the ideal $I_A$, with respect to any term order, in polynomial time.
We derive a polynomial time algorithm for normal form computations which
replaces in this new encoding the usual reductions of the division algorithm.
Chapter 3 presents three ways to use Barvinok's rational functions to solve
Integer Programs.
  The second part of the thesis is experimental and consists mainly of the
software package {\tt LattE}, the first implementation of Barvinok's algorithm.
We report on experiments with families of well-known rational polytopes:
multiway contingency tables, knapsack type problems, and rational polygons. We
also developed a new algorithm, {\em the homogenized Barvinok's algorithm} to
compute the generating function for a rational polytope. We showed that it runs
in polynomial time in fixed dimension. With the homogenized Barvinok's
algorithm, we obtained new combinatorial formulas: the generating function for
the number of $5\times 5$ magic squares and the generating function for the
number of $3\times 3 \times 3 \times 3$ magic cubes as rational functions.
