diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-09 00:44:40 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-09 00:44:40 +0000 |
commit | b4fc5f639874db951177ec539299d20908adb654 (patch) | |
tree | 52f08823ca58fffe3db6a9b075635038c567626c /Master/texmf-dist/doc/latex/pseudocode | |
parent | dec3d98ebe442d7ea93efbaa8dd2e2be8149a467 (diff) |
doc 4
git-svn-id: svn://tug.org/texlive/trunk@80 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/pseudocode')
-rw-r--r-- | Master/texmf-dist/doc/latex/pseudocode/README | 6 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/pseudocode/pseudocode.pdf | bin | 0 -> 150052 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/pseudocode/pseudocode.tex | 768 |
3 files changed, 774 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/pseudocode/README b/Master/texmf-dist/doc/latex/pseudocode/README new file mode 100644 index 00000000000..1be70d3712e --- /dev/null +++ b/Master/texmf-dist/doc/latex/pseudocode/README @@ -0,0 +1,6 @@ +This package provides the environment "pseudocode" for describing +algorithms in a natural manner. Installation details are given in the +front mater of pseudocode.sty. A sample LaTeX file is given as +pseudocode.tex which can also be used to generate the documentation. This +documentation can be also viewed in the pdf file pseudocode.pdf. + diff --git a/Master/texmf-dist/doc/latex/pseudocode/pseudocode.pdf b/Master/texmf-dist/doc/latex/pseudocode/pseudocode.pdf Binary files differnew file mode 100644 index 00000000000..fc8310c5cc0 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pseudocode/pseudocode.pdf diff --git a/Master/texmf-dist/doc/latex/pseudocode/pseudocode.tex b/Master/texmf-dist/doc/latex/pseudocode/pseudocode.tex new file mode 100644 index 00000000000..77fd71ddc00 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pseudocode/pseudocode.tex @@ -0,0 +1,768 @@ +\documentclass{article} +\textwidth=4.5in +\textheight=7.125in +\usepackage{pseudocode} +% +% +% September 2, 1999 +% +% +\title{Pseudocode: A \LaTeX\ Style File for Displaying Algorithms} +\author{ +D.L.\ Kreher\\ +Department of Mathematical Sciences\\ +Michigan Technological University \\ +Houghton, MI 49931\\ +{\tt kreher@mtu.edu}\\[1ex] +and \\[1ex] +D.R.\ Stinson\\ +Department of Combinatorics and Optimization\\ +University of Waterloo\\ +Waterloo ON, N2L 3G1\\ +{\tt dstinson@uwaterloo.ca} +} + +\newcommand{\keyword}[1]{\texttt{#1}} +\begin{document} +%\makeatletter +%\setlength{\pcode@width}{2.75in} +%\addtolength{\pcode@width}{-40pt} +%\makeatother + +\maketitle + +\section{Introduction} + +This paper describes a \LaTeX\ environment named \keyword{pseudocode} that can be used +for describing algorithms in pseudocode form. This is the style used +in our %recently published +textbook {\em Combinatorial Algorithms: Generation, Enumeration and Search} +\cite{cages}. The style file \keyword{pseudocode.sty} is available for free +downloading from the web page +\verb+http://www.math.mtu.edu/~kreher/cages.html+ + +This package is quite easy to use, and allows algorithms to be described +in a \LaTeX\ document using a natural Pascal-like syntax. In the remaining sections +of this note, we describe how to use the \keyword{pseudocode} environment +and we present some examples. Readers familiar with \LaTeX\ +(see \cite{lamport}) should be +able to easily customize the style file to include additional desired features. + +The \keyword{pseudocode} environment requires the \keyword{fancybox} +package by Timothy Van Zandt. This package is described in +Section 10.1.3 of \cite{LC}. +Other environments for describing algorithms include +\keyword{alg}, \keyword{algorithmic}, \keyword{newalg} and \keyword{program}. +These style files, as well as \keyword{fancybox}, are all available from the CTAN web site +\verb+http://www.ctan.org/+ + +\section{The \keyword{pseudocode} Environment} + +Within the \keyword{pseudocode} environment, a number of commands for +popular algorithmic constructs are available. +In general, the commands provided can be nested to +describe quite complex algorithms. + +The \keyword{pseudocode} environment is invoked +as follows: +\begin{verbatim} +\begin{pseudocode}{<Name>}{<Parameters>} + pseudocode constructs +\end{pseudocode} +\end{verbatim} + +\noindent{}The argument \verb+<Name>+ is the name of the algorithm, and + \verb+<Parameters>+ is a list of parameters for the algorithm. +For example, the commands + +\begin{verbatim} +\begin{pseudocode}{CelsiusToFahrenheit}{c} + f \GETS {9c/5} + 32\\ + \RETURN{f} +\end{pseudocode} +\end{verbatim} + +\noindent{}produce the following output when included in +a \LaTeX\ document: + +\begin{pseudocode}{CelsiusToFahrenheit}{c} + f \GETS {9c/5} + 32\\ + \RETURN{f} +\end{pseudocode} + +Notice that the command \verb+\GETS+ produces a +left arrow, which we use to indicate an assignment of +a variable. The user could use instead some other symbol, if desired. +For example, \verb+\GETS+ could be replaced by \verb+=+, +as is done in the ``C'' programming language. + +\subsection{ The {\em begin-end} Construct} + +To form compound statements from simple statements, the {\em begin-end} +construct is used as follows: +\begin{verbatim} + \BEGIN + some statement\\ + another statement\\ + yet another statement + \END +\end{verbatim} +This generates the following: + +\medskip +\begin{pseudocode}[display]{}{} +\BEGIN +\mbox{some statement}\\ +\mbox{another statement}\\ +\mbox{yet another statement} +\END +\end{pseudocode} + +\noindent{}The effect of this construct is to group +a collection of statements +using a left brace bracket of the appropriate size. + +In the sections that follow we will use the notation +\verb+<stmt>+ +to indicate a simple statement or a compound statement. +Note that the contents of statements are typeset in math mode. +Therefore, non-math mode text must be enclosed in an +\verb+\mbox{}+. + +Observe that the double backslash \verb+\\+ plays the same +role as the semicolon in Pascal, i.e., it is used to +separate statements, and should never appear before +\verb+\END+. + +\subsection{The {\em if-then-else} Construct} + +The {\em if-then-else} construct takes various forms, +such as the following: +\begin{verbatim} +\IF <condition> \THEN <stmt> +\IF <condition> \THEN <stmt> \ELSE <stmt> +\IF <condition> \THEN <stmt> \ELSEIF <stmt> \THEN <stmt> +\end{verbatim} +Note that there is no limit placed on the number +of \verb+\ELSEIF+s that may be used in an {\em if-then-else} construct. +For example, the commands: +\begin{verbatim} +\IF some condition is true +\THEN + \BEGIN + some statement\\ + another statement\\ + yet another statement + \END +\ELSEIF some other condition is true +\THEN + \BEGIN + some statement\\ + another statement\\ + yet another statement + \END +\ELSEIF some even more bizarre condition is met +\THEN + do something else +\ELSE + do the default actions +\end{verbatim} + +\noindent{}would produce the following output: + +\medskip +\begin{pseudocode}[display]{}{} +\IF \mbox{some condition is true} +\THEN +\BEGIN +\mbox{some statement}\\ +\mbox{another statement}\\ +\mbox{yet another statement} +\END +\ELSEIF \mbox{some other condition is true} +\THEN +\BEGIN +\mbox{some statement}\\ +\mbox{another statement}\\ +\mbox{yet another statement} +\END +\ELSEIF\mbox{some even more bizarre condition is met} +\THEN \mbox{do something else} +\ELSE +\mbox{do the default actions} +\end{pseudocode} + +\subsection{The {\em for} Loop} + +The {\em for} loop takes the following forms: +\begin{verbatim} +\FOR <var> \GETS <lower> \TO <upper> \DO <stmt> +\FOR <var> \GETS <upper> \DOWNTO <lower> \DO <stmt> +\FOREACH <condition> \DO <stmt> +\end{verbatim} +For example, +\begin{verbatim} +\FOR i \GETS 0 \TO 10 \DO + some processing +\end{verbatim} +produces + +\medskip +\begin{pseudocode}[display]{}{} +\FOR i \GETS 0 \TO 10 \DO +\mbox{some processing} +\end{pseudocode} + +\noindent{}and + +\begin{verbatim} +\FOREACH x \in \mathcal{S} \DO + some processing +\end{verbatim} + +\noindent{produces} + +\medskip +\begin{pseudocode}[display]{}{} +\FOREACH x \in \mathcal{S} \DO + \mbox{some processing} +\end{pseudocode} + +\subsection{The {\em while} Loop} + +The {\em while} loop takes the following form: + +\begin{verbatim} +\WHILE <condition> \DO <stmt> +\end{verbatim} + +\noindent{}For example, + +\begin{verbatim} +\WHILE some condition holds \DO + some processing +\end{verbatim} + +\noindent{}produces + +\medskip +\begin{pseudocode}[display]{}{} +\WHILE \mbox{some condition holds} \DO +\mbox{some processing } +\end{pseudocode} + +\subsection{The {\em repeat-until} Loop} + +The {\em repeat-until} loop takes the following form: + +\begin{verbatim} +\REPEAT <stmt> \UNTIL <condition> +\end{verbatim} + +\noindent{}For example, + +\begin{verbatim} +\REPEAT + some processing +\UNTIL some condition is met +\end{verbatim} + +\noindent{}produces + +\medskip +\begin{pseudocode}[display]{}{} +\REPEAT +\mbox{some processing} +\UNTIL \mbox{some condition is met} +\end{pseudocode} + +\subsection{Main Programs and Procedures} + +We can describe a main program that calls one (or more) procedures as follows: + +\begin{verbatim} +\begin{pseudocode}{<Name>}{<Parameters>} +\PROCEDURE{<ProcedureName>}{<ProcedureParameters>} + some stuff +\ENDPROCEDURE +\MAIN + some stuff\\ + \CALL{<ProcedureName>}{<ActualParameters}>\\ + more stuff +\ENDMAIN +\end{pseudocode} +\end{verbatim} + +Here is a simple example to illustrate the +use of a main program calling a procedure. +The commands + +\begin{verbatim} +\begin{pseudocode}{TemperatureTable}{lower, upper} +\PROCEDURE{CelsiusToFahrenheit}{c} + f \GETS {9c/5} + 32\\ + \RETURN{f} +\ENDPROCEDURE +\MAIN +x \GETS lower \\ +\WHILE x \leq upper \DO +\BEGIN + \OUTPUT{x, \CALL{CelsiusToFahrenheit}{x}}\\ + x \GETS x+1 +\END +\ENDMAIN +\end{pseudocode} +\end{verbatim} + +\noindent{}produce the following output: + +\begin{pseudocode}{TemperatureTable}{lower, upper} +\PROCEDURE{CelsiusToFahrenheit}{c} + f \GETS {9c/5} + 32\\ + \RETURN{f} +\ENDPROCEDURE + +\MAIN +x \GETS lower \\ +\WHILE x \leq upper \DO +\BEGIN + \OUTPUT{x, \CALL{CelsiusToFahrenheit}{x}}\\ + x \GETS x+1 +\END +\ENDMAIN +\end{pseudocode} + + +\subsection{Comments} + +A comment statement may be inserted in an algorithm using the +following command: +\begin{verbatim} +\COMMENT{<stmt>} +\end{verbatim} +For example, the commands +\begin{verbatim} +A \GETS B\\ +\COMMENT{Now increment the value of $A$}\\ +A \GETS A+1 +\end{verbatim} + +\noindent{}produce the output + +\medskip +\begin{pseudocode}[display]{}{} +A \GETS B\\ +\COMMENT{Now increment the value of $A$}\\ +A \GETS A+1 +\end{pseudocode} + +\medskip + +Note that comments are assumed to be text. Thus, in order to include +mathematical expressions in a comment, math mode must be used explicitly. + +\subsection{Other Predefined Keywords} + +Several other predefined keywords are available. +We summarize their usage in Table \ref{other predefined keywords}. + +\begin{table}[h] +\caption{Other Predefined Keywords} +\label{other predefined keywords} +\begin{center} +\begin{tabular}{@{}ll@{}} +\hline +command & output\\ +\hline +\verb+\LOCAL{list of variables}+& +$\LOCAL{\mbox{list of variables}}$\\ +\verb+\GLOBAL{list of variables}+& +$\GLOBAL{\mbox{list of variables}}$\\ +\verb+\EXTERNAL{list of procedures}+& +$\EXTERNAL{\mbox{list of procedures}}$\\ +\verb+\RETURN{list of values}+& +$\RETURN{\mbox{list of values}}$\\ +\verb+\OUTPUT{list of values}+& +$\OUTPUT{\mbox{list of values}}$\\ +\verb+\EXIT+& +$\EXIT$\\ +\verb+\AND+& +$\AND$\\ +\verb+\OR+& +$\OR$\\ +\verb+\NOT+& +$\NOT$\\ +\verb+\TRUE+& +$\TRUE$\\ +\verb+\FALSE+& +$\FALSE$\\ +\verb+\GETS+& +$\GETS$\\ +\hline +\end{tabular} +\end{center} +\end{table} + +Also note +that all of the keywords +\verb+\IF+, \verb+\WHILE+, \verb+\CALL{}{}+, \verb+\NOT+, etc.\ +are available for +use outside of the \keyword{pseudocode} environment, but they must +be input in math mode. For example, +\begin{center} +\verb+The $\WHILE$ loop is our friend.+ +\end{center} +generates +\begin{center} +The $\WHILE$ loop is our friend. +\end{center} + + +\subsection{Statement Numbering} + +Statements can be numbered and given a reference key so that +they can be referenced in a \LaTeX\ document using a \verb+\ref{}+ command +(see section 4.2 of \cite{lamport}). +This is done as follows: + +\begin{verbatim} +\STMTNUM{<space>}{<key>} +\end{verbatim} + +\noindent{}The argument \verb+<space>+ is the amount of space to be left between +the text and the statement number. This is a length that is specified by the +user, and generally will require some experimentation in order for it to look nice. +The argument \verb+<key>+ is the reference key +used in the LaTeX\ \verb+\ref{}+ command to refer to the given +statement. + +The default numbering for statements is arabic. However, it can be changed +by a suitable \verb+\renewcommand{}+. +An example is provided in the next section. + +\section{An example} + +The following example demonstrates the use of the +\keyword{pseudocode} environment to describe a complete +algorithm, the familiar ``mergesort'' algorithm. The \LaTeX\ input + +\begin{verbatim} +\renewcommand{\thepseudonum}{\roman{pseudonum}} +\begin{pseudocode}{MergeSort}{n,X} +\label{MergeSort} +\COMMENT{Sort the array $X$ of length $n$}\\ +\IF n=2 \THEN +\BEGIN + \IF X[0]>X[1] \THEN + \BEGIN + T \GETS X[0]\\ + X[0]\GETS X[1]\\ + X[1]\GETS T + \END +\END +\ELSEIF n>2 \THEN +\BEGIN + m\GETS \lfloor n/2 \rfloor\\ + \FOR i\GETS 0 \TO m-1 \DO A[i] \GETS X[i]\\ + \FOR i\GETS m \TO n-1 \DO B[i] \GETS X[i]\\ + \COMMENT{Now sort the subarrays $A$ and $B$}\\ + \CALL{MergeSort}{m,A}\\ + \CALL{MergeSort}{n-m,B}\\ + i\GETS 0\\ + j\GETS 0\\ + \FOR k \GETS 0 \TO n-1 \DO + \BEGIN + \IF A[i] \leq B[j] \THEN + \BEGIN + X[k]\GETS A[i] \STMTNUM{1in}{st.1}\\ + i\GETS i+1 + \END + \ELSE + \BEGIN + X[k]\GETS B[j] \STMTNUM{1.03in}{st.2}\\ + j\GETS j+1 + \END + \END +\END +\end{pseudocode} +\end{verbatim} + +\noindent{}produces the following output: + +\renewcommand{\thepseudonum}{\roman{pseudonum}} +\begin{pseudocode}{MergeSort}{n,X} +\label{MergeSort} +\COMMENT{Sort the array $X$ of length $n$}\\ +\IF n=2 \THEN +\BEGIN + \IF X[0]>X[1] \THEN + \BEGIN + T \GETS X[0]\\ + X[0]\GETS X[1]\\ + X[1]\GETS T + \END +\END +\ELSEIF n>2 \THEN +\BEGIN + m\GETS \lfloor n/2 \rfloor\\ + \FOR i\GETS 0 \TO m-1 \DO A[i] \GETS X[i]\\ + \FOR i\GETS m \TO n-1 \DO B[i] \GETS X[i]\\ + \COMMENT{Now sort the subarrays $A$ and $B$}\\ + \CALL{MergeSort}{m,A}\\ + \CALL{MergeSort}{n-m,B}\\ + i\GETS 0\\ + j\GETS 0\\ + \FOR k \GETS 0 \TO n-1 \DO + \BEGIN + \IF A[i] \leq B[j] \THEN + \BEGIN + X[k]\GETS A[i] \STMTNUM{.9in}{st.1}\\ + i\GETS i+1 + \END + \ELSE + \BEGIN + X[k]\GETS B[j] \STMTNUM{.93in}{st.2}\\ + j\GETS j+1 + \END + \END +\END +\end{pseudocode} + +The counter \verb+pseudonum+ keeps track of the statement numbers. +The style of the counter values can be changed using the method +described in Section 6.3 of \cite{lamport}. For example, +we used the command +\begin{center} +\verb+ \renewcommand{\thepseudonum}{\roman{pseudonum}} + +\end{center} +in our example so that statements were numbered with +lowercase Roman numerals. +We also assigned a label to the algorithm using the +\verb+\label{}+ command that is described in Section 4.2 of \cite{lamport}. +Finally, by trial and error, we determined +spacing so that the statement numbers would be vertically aligned. + +We now give an example of how the numbered statements in the above +algorithm can be referenced in a \LaTeX document. The commands + +\begin{verbatim} +On lines (\ref{st.1}) and (\ref{st.2}) of Algorithm +\ref{MergeSort}, we determine the $k$th element of the +sorted array. +\end{verbatim} + +\noindent{}produce the following output: + +\medskip + +\noindent{}On lines (\ref{st.1}) and (\ref{st.2}) of Algorithm \ref{MergeSort}, +we determine the $k$th element of the +sorted array. + +%\medskip + + + +\section{Framing} +The \keyword{pseudocode} environment also has an optional parameter, +\verb+<frame>+. The complete form of the \keyword{pseudocode} environment is + +\begin{verbatim} +\begin{pseudocode}[<frame>]{<Name>}{<Parameters>} + pseudocode constructs +\end{pseudocode} +\end{verbatim} + +The possible values of \verb+<frame>+ are: +\begin{center} +\begin{tabular}{llll} +\verb+shadowbox+ & +\verb+doublebox+ & +\verb+ovalbox+ & +\verb+Ovalbox+ \\ +\verb+framebox+ & +\verb+plain+ & +\verb+ruled+ & +\verb+display+ +\end{tabular} +\end{center} +The values ending with ``box'' draw various types of frames around the algorithm. +The value \verb+plain+ is the default and adds no frame to the algorithm. +The value \verb+display+ is used for displaying sections of code +without the algorithm name or parameters. Here are some examples with +input: + +\begin{verbatim} +\begin{pseudocode}[<frame>]{SquareAndMultiply}{x,b,n} + \COMMENT{ Compute $x^b \pmod{n}$}\\ + z\GETS 1\\ + \WHILE b > 0 \DO + \BEGIN + z \GETS z^2 \pmod{n} \\ + \IF b\mbox{ is odd} + \THEN z \GETS z \cdot x \pmod{n} \\ + b \GETS \CALL{ShiftRight}{b} + \END\\ + \RETURN{z} +\end{pseudocode} +\end{verbatim} + +\noindent{}where we give \verb+<frame>+ each of the values described above. + +\medskip + +\noindent When \verb+<frame>+ is \verb+shadowbox+ we obtain: + +\begin{pseudocode}[shadowbox]{SquareAndMultiply}{x,b,n} + \COMMENT{ Compute $x^b \pmod{n}$}\\ + z\GETS 1\\ + \WHILE b > 0 \DO + \BEGIN + z \GETS z^2 \pmod{n} \\ + \IF b\mbox{ is odd} + \THEN z \GETS z \cdot x \pmod{n} \\ + b \GETS \CALL{ShiftRight}{b} + \END\\ + \RETURN{z} +\end{pseudocode} + +\noindent When \verb+<frame>+ is \verb+doublebox+ we obtain: + +\begin{pseudocode}[doublebox]{SquareAndMultiply}{x,b,n} + \COMMENT{ Compute $x^b \pmod{n}$}\\ + z\GETS 1\\ + \WHILE b > 0 \DO + \BEGIN + z \GETS z^2 \pmod{n} \\ + \IF b\mbox{ is odd} + \THEN z \GETS z \cdot x \pmod{n} \\ + b \GETS \CALL{ShiftRight}{b} + \END\\ + \RETURN{z} +\end{pseudocode} + +\noindent When \verb+<frame>+ is \verb+ovalbox+ we obtain: + +\begin{pseudocode}[ovalbox]{SquareAndMultiply}{x,b,n} + \COMMENT{ Compute $x^b \pmod{n}$}\\ + z\GETS 1\\ + \WHILE b > 0 \DO + \BEGIN + z \GETS z^2 \pmod{n} \\ + \IF b\mbox{ is odd} + \THEN z \GETS z \cdot x \pmod{n} \\ + b \GETS \CALL{ShiftRight}{b} + \END\\ + \RETURN{z} +\end{pseudocode} + +\noindent When \verb+<frame>+ is \verb+Ovalbox+ we obtain: + +\begin{pseudocode}[Ovalbox]{SquareAndMultiply}{x,b,n} + \COMMENT{ Compute $x^b \pmod{n}$}\\ + z\GETS 1\\ + \WHILE b > 0 \DO + \BEGIN + z \GETS z^2 \pmod{n} \\ + \IF b\mbox{ is odd} + \THEN z \GETS z \cdot x \pmod{n} \\ + b \GETS \CALL{ShiftRight}{b} + \END\\ + \RETURN{z} +\end{pseudocode} + +\noindent When \verb+<frame>+ is \verb+framebox+ we obtain: + +\begin{pseudocode}[framebox]{SquareAndMultiply}{x,b,n} + \COMMENT{ Compute $x^b \pmod{n}$}\\ + z\GETS 1\\ + \WHILE b > 0 \DO + \BEGIN + z \GETS z^2 \pmod{n} \\ + \IF b\mbox{ is odd} + \THEN z \GETS z \cdot x \pmod{n} \\ + b \GETS \CALL{ShiftRight}{b} + \END\\ + \RETURN{z} +\end{pseudocode} + +\noindent When \verb+<frame>+ is \verb+plain+ or if \verb+[<frame>]+ is omitted we obtain: + +\begin{pseudocode}[plain]{SquareAndMultiply}{x,b,n} + \COMMENT{ Compute $x^b \pmod{n}$}\\ + z\GETS 1\\ + \WHILE b > 0 \DO + \BEGIN + z \GETS z^2 \pmod{n} \\ + \IF b\mbox{ is odd} + \THEN z \GETS z \cdot x \pmod{n} \\ + b \GETS \CALL{ShiftRight}{b} + \END\\ + \RETURN{z} +\end{pseudocode} + +\noindent When \verb+<frame>+ is \verb+ruled+ we obtain: + +\begin{pseudocode}[ruled]{SquareAndMultiply}{x,b,n} + \COMMENT{ Compute $x^b \pmod{n}$}\\ + z\GETS 1\\ + \WHILE b > 0 \DO + \BEGIN + z \GETS z^2 \pmod{n} \\ + \IF b\mbox{ is odd} + \THEN z \GETS z \cdot x \pmod{n} \\ + b \GETS \CALL{ShiftRight}{b} + \END\\ + \RETURN{z} +\end{pseudocode} + + +The purpose of the value \verb+display+ is to allow portions of +algorithms to be displayed with out the algorithm header. Thus +for example to display the section of code in the $\WHILE$ loop +of the $\CALL{SquareAndMultiply}{}$ algorithm one could write + +\begin{verbatim} +\begin{center} +\begin{minipage}{2in} +\begin{pseudocode}[display]{}{} + z \GETS z^2 \pmod{n} \\ + \IF b\mbox{ is odd} + \THEN z \GETS z \cdot x \pmod{n}\\ + b \GETS \CALL{ShiftRight}{b} +\end{pseudocode} +\end{minipage} +\end{center} +\end{verbatim} + +\noindent which would produce the following output: + +\begin{center} +\begin{minipage}{2in} +\begin{pseudocode}[display]{}{} + z \GETS z^2 \pmod{n} \\ + \IF b\mbox{ is odd} + \THEN z \GETS z \cdot x \pmod{n}\\ + b \GETS \CALL{ShiftRight}{b} +\end{pseudocode} +\end{minipage} +\end{center} + +\begin{thebibliography}{99} + +\bibitem{LC} +M.\ Goossens, F.\ Mittelbach and A.\ Samarin, {\it The \LaTeX Companion}, +Addison-Wesley, 1994. + +\bibitem{cages} +D.L.\ Kreher and D.R.\ Stinson, +{\em Combinatorial Algorithms: Generation, Enumeration and Search}, +CRC Press, 1999. + +\bibitem{lamport} +L.\ Lamport, \LaTeX, +{\em A Document Preparation System}, +Addison-Wesley, 1994. +\end{thebibliography} +\end{document} + |