\documentclass[a4paper]{article}
\usepackage{progm}
\analpacks
\analoldal{2. feladatsor, 11. feladat}
\begin{document}
\noindent
\emph{Feladat:} Határozzuk meg az $f$ függvénynek a $k$-nál kisebb legnagyobb értékét!

\emph{Specifikáció:}\\
$A = \alatt{\Z}{m} \times \alatt{\Z}{n} \times \alatt{\Z}{k} \times \alatt{\Z}{max} \times \alatt{\L}{l}$\\
$B = \alatt{\Z}{m'} \times \alatt{\Z}{n'} \times \alatt{\Z}{k'}$\\
$Q = ( m=m' \es n=n' \es m\le n+1 \es k=k')$\\
$R = ( Q \es l=(\exists i\in[m..n]:f(i)<k) \es \\ \hbox{} \quad \es l\nyil(\exists i\in[m..n]:(max=f(i) \es max<k \es
\forall j\in[m..n]:(f(j)<k)\nyil(f(j)\le max))))$

A specifikáció nagyon hasonló a feltételes maximumkeresés programozási tételéhez.
Az eltéréseket az alábbi táblázattal foglalhatjuk össze:

\begin{tabular}{ccc}
feladat &  & feltételes maximumkeresés \\
\hline
$f(i)<k$ & \knyil & $\beta(i)$ \\
$j$ & \knyil & $k$ \\
$-$ & \knyil & $i$
\end{tabular}

A visszavezetés paraméteres a $k$ szerint, valamint alteres
általánosított az $i$ eredménykomponens szerint.

\begin{stuki}[16cm]
  \stm{j,l:=m-1,\hamis}
  \begin{WHILE}{4}{\stm{j \ne n}}
    \begin{CASE}{2}{9}
      \WHEN[2]{\stm{f(j+1)\ge k}}
      \SKIP
      \WHEN[3]{\stm{f(j+1)<k\es\nem l}}
      \stm{l,i,max:=\igaz,j+1,f(j+1)}
      \WHEN[4]{\stm{f(j+1)<k \es l}}
      \begin{CASE}{1}{2}
        \WHEN{\stm{f(j+1)\ge max}}
        \stm{i,max:=j+1,f(j+1)}
        \WHEN{\stm{f(j+1)\le max}}
        \SKIP
      \end{CASE}
    \end{CASE}
    \stm{j:=j+1}
  \end{WHILE}
\end{stuki}

\end{document}
