\documentclass[a4paper]{article}
\usepackage{progm}
\analpacks
\analoldal{2. feladatsor, 46. feladat}
\begin{document}
\noindent
\emph{Feladat:} Adott a $t$ mátrix, amelyek elemei sorfolytonosan növekvő
sorozatot alkotnak.  Keressük meg a mátrixban az $n$ értéket!

\emph{Specifikáció:}\\
$\M = \text{mátrix}([1..a, 1..b], \Z)$ \\
$A = \alatt{\M}{t} \times \alatt{\Z}{n} \times \alatt{\N}{i} \times \alatt{\L}{l}$\\
$B = \alatt{\M}{t'} \times \alatt{\Z}{n'}$\\
$Q = ( t=t' \es n=n' \es \forall i\in[1,a*b-1]: t[\phi(i)]\le t[\phi(i+1)])$\\
$R = ( Q \es l=(\exists i\in[1,a*b]: t[\phi(i)]=n) \es l\nyil(i\in[1,a*b] \es t[\phi(i)]=n))$\\
$\phi(i):=(\lceil(i/a)\rceil, i\text{ mod }a)$\\
Értelmezés: $t[(x,y)]:=t[x,y]$

Visszavezetés a logaritmikus keresésre, az $m$-et konstanssal helyettesítjük:

\begin{tabular}{ccc}
  feladat &  & log. ker. \\
  \hline
  $1$ & \knyil & $m$ \\
  $a*b$ & \knyil & $n$ \\
  $n$ & \knyil & $h$ \\
  $t[\phi(i)]$ & \knyil & $f(i)$
\end{tabular}

\begin{stuki}
  \stm{u,v,l:=1,a*b,\hamis}
  \begin{WHILE}{3}{\stm{\nem l \es u \le v}}
    \stm{i:=\lceil(u+v)/2\rceil}
    \begin{CASE}{1}{3}
      \WHEN{\stm{t[\phi(i)]<n}}
      \stm{u:=i+1}
      \WHEN{\stm{t[\phi(i)]=n}}
      \stm{l:=\igaz}
      \WHEN{\stm{t[\phi(i)]>n}}
      \stm{v:=i-1}
    \end{CASE}
  \end{WHILE}
\end{stuki}
\end{document}
