%$Header$
\chapter[Solutions: \cratzeroxrefcomma{}Chapter \ref{crat0}]
{Solutions: \cratzeroxrefcomma{}Chapter \ref{crat0}, \cratzerolongtitle{}}
\label{cras0}
\vworkexercisechapterheader{}
\begin{vworkexercisesolution}{\ref{exe:crat0:sexe0:01}}
The value of the \texttt{state} variable when
evaluating the \emph{if()} clause on the
$n+1$'th invocation is
\begin{equation}
\label{eq:cras0:exe01:01}
K_1 - nK_4 + (n+1) K_2 .
\end{equation}
We require on the $n+1$'th invocation, in order for the
test of the \emph{if()} clause to fail (i.e. that the function
``\texttt{A()}'' has been run on the first $n$ invocations of
the base subroutine but is not run on the $n+1$'th invocation),
that:
\begin{equation}
\label{eq:cras0:exe01:01b}
K_1 - nK_4 + (n+1) K_2 < K_3.
\end{equation}
Solving this inequality for the smallest integral
value of $n$ yields:
\begin{equation}
\label{eq:cras0:exe01:01c}
n = \left\lceil
\frac{K_1 + K_2 - K_3 + 1}{K_4 - K_2}
\right\rceil .
\end{equation}
It can be verified using an example that
(\ref{eq:cras0:exe01:01c}). For example, with
$K_1 = 10$, $K_2 = 3$, $K_3 = 7$, and $K_4 = 5$,
(\ref{eq:cras0:exe01:01}) predicts that on the first
$\lceil 7/2 \rceil = 4$ invocations of the base subroutine
the subroutine ``\texttt{A()}'' will be run but on the 5th
invocation it will not. Tracing the algorithm with the
parameters specified reveals that at the
test in the \emph{if()} statement
on the first invocation of the
subroutine, \texttt{state}=13 (``\texttt{A()}'' executed);
on the second invocation of the
subroutine, \texttt{state}=11 (``\texttt{A()}'' executed);
on the third invocation of the
subroutine, \texttt{state}=9 (``\texttt{A()}'' executed);
on the fourth invocation of the
subroutine, \texttt{state}=7 (``\texttt{A()}'' executed);
and on the fifth invocation of the
subroutine, \texttt{state}=5 (``\texttt{A()}'' not executed).
This is in agreement with
(\ref{eq:cras0:exe01:01}).
\end{vworkexercisesolution}
%\vworkexerciseseparator
%\begin{vworkexercisesolution}{\ref{exe:cfry0:sexe0:02}}
%Placeholder.
%\end{vworkexercisesolution}
\vworkexercisechapterfooter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\vfill
\noindent\begin{figure}[!b]
\noindent\rule[-0.25in]{\textwidth}{1pt}
\begin{tiny}
\begin{verbatim}
$RCSfile: c_ras0.tex,v $
$Source: /home/dashley/cvsrep/e3ft_gpl01/e3ft_gpl01/dtaipubs/esrgubka/c_ras0/c_ras0.tex,v $
$Revision: 1.4 $
$Author: dtashley $
$Date: 2003/11/03 02:14:24 $
\end{verbatim}
\end{tiny}
\noindent\rule[0.25in]{\textwidth}{1pt}
\end{figure}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% $Log: c_ras0.tex,v $
% Revision 1.4 2003/11/03 02:14:24 dtashley
% All duplicate labels as flagged by LaTeX removed. Additional files added
% to Microsoft Visual Studio edit context.
%
% Revision 1.3 2003/03/08 04:11:19 dtashley
% Friday evening safety checkin.
%
% Revision 1.2 2001/07/01 21:10:59 dtashley
% Safety check-in after major re-org.
%
% Revision 1.1.1.1 2001/07/01 00:14:03 dtashley
% Initial import.
%
%
%End of file C_RAS0.TEX