% -*- coding: iso-8859-2 -*-
\documentclass[a4paper]{article}
\usepackage{progm}
\analpacks
\analoldal{3. feladatsor, 6. feladat}
\begin{document}
\noindent
\emph{Feladat:} Adott a keresztnevek és a virágnevek fileja, mindkettő
abc-sorrendben rendezett (megengedett művelet az $sx, dx, x:read$).
Határozzuk meg azokat a keresztneveket, amelyek nem virágnevek!

\emph{Specifikáció:}\\
$\F = \file(\seq(Ch)))$\\
$A = \alatt{\F}{k} \times \alatt{\F}{v} \times \alatt{\F}{z}$\\
$B = \alatt{\F}{k'} \times \alatt{\F}{v'}$\\
$Q = ( k=k' \es v=v' \es k' \text{ növekvő} \es v' \text{ növekvő} )$\\
$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\})=\varnothing$\\
$\Tilde f(\{e\}, \{e\})=\varnothing$

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 fileokra átírva) az alábbi:
\begin{stuki}[17cm]
  \stm{z:=<>}
  \stm{sk,dk,k:read}
  \stm{sv,dv,v:read}
  \begin{WHILE}{3}{\stm{sk \vagy sv}}
    \begin{CASE}{2}{3}
      \WHEN{\stm{\nem sv \vagy (sk \es sv \es dk<dv)}}
      \stm{z:hiext(dk)}
      \stm{sk,dk,k:read}
      \WHEN{\stm{sk \es sv \es dk=dv}}
      \stm{sk,dk,k:read}
      \stm{sv,dv,v:read}
      \WHEN{\stm{\nem sk \vagy (sk \es sv \es dk>dv)}}
      \stm{sv,dv,v:read}
    \end{CASE}
  \end{WHILE}
\end{stuki}

Megjegyzés: mostantól $sx$ az $sx=norm$ feltétel rövidítése, míg $\nem
sx$ az $sx=abnorm$ feltételé.
\end{document}
