\documentclass[a4paper]{article}
\usepackage{progm}
\analpacks
\analoldal{3. feladatsor, 11. feladat}
\begin{document}
\noindent
\emph{Feladat:} Adott az $x$ vektor és az $y$ szekvenciális file,
amelynek elemei egyaránt pozitív egész számok.  $x$-ben és $y$-ban egy
szám legfeljebb egyszer fordul elő, és mindkettő növekvően rendezett.
Az $y$ egy olyan szekvenciális file, amire csak a $lopop$ művelet
megengedett, és a file végét egy negatív szám jelzi.  Állítsuk elő a
rendezett $z$ sorozatot, ami $x$ és $y$ elemeit tartalmazza!

\emph{Specifikáció:}\\
$\F = \file(\Z)$\\
$\V = \vect(\Z, \N)$\\
$\S = \seq(\Z)$\\
$A = \alatt{\V}{x} \times \alatt{\F}{y} \times \alatt{\S}{z}$\\
$B = \alatt{\V}{x'} \times \alatt{\F}{y'}$\\
$Q = ( x=x' \es y=y' \es x' \text{ növekvő} \es y' \text{ növekvő} \es \forall j\in[y'.lob, y'.hib-1]: y'_j>0 \es y'.hiv<0 )$\\
$R = ( z=f(k', v'))$

Ahol $f$ elemenként feldolgozható és egy elemet feldolgozó változata:\\
$\Tilde f(\{e\}, \varnothing)=\{e\}$\\
$\Tilde f(\varnothing, \{e\})=\{e\}$\\
$\Tilde f(\{e\}, \{e\})=\{e\}$

Tehát ez egy kétváltozós egyértékű elemenkénti feldolgozás.  Méghozzá
(a feladat betűzését használva és filera meg vektorra átírva) az alábbi:
\begin{stuki}[17cm]
  \stm{z:=<>}
  \stm{dy,y:lopop}
  \stm{k:=x.lob-1}
  \begin{WHILE}{5}{\stm{dy\ge0 \vagy k\ne x.hib}}
    \begin{CASE}[2]{3}{3}
      \WHEN{\stm[2]{dy<0 \vagy \\ (dy\ge0 \es k\ne x.hib \es x[k+1]<dy)}}
      \stm[1.5]{z:hiext(x[k+1])}
      \stm[1.5]{k:=k+1}
      \WHEN{\stm[2]{dy\ge0 \es k\ne x.hib \es x[k+1]=dy}}
      \stm{z:hiext(x[k+1])}
      \stm{k:=k+1}
      \stm{dy,y:lopop}
      \WHEN{\stm[2]{k=x.hib \vagy \\ (k\ne x.hib \es dy\ge 0 \es x[k+1]>dy)}}
      \stm[1.5]{z:hiext(dy)}
      \stm[1.5]{dy,y:lopop}
    \end{CASE}
  \end{WHILE}
\end{stuki}

Megjegyzés: a középső ágba $z:hiext(dy)$ is írható.
\end{document}
