\documentclass[a4paper]{article}
\usepackage{progm}
\analpacks
\analoldal{3. feladatsor, 8. feladat}
\newcommand{\K}{\mathbb{K}}
\begin{document}
\noindent
\emph{Feladat:} Egy fileban (megengedett művelet a $lopop$ extremális
elemmel) adottak az egyes kaktuszfajtákról a (név, őshaza, virágszín,
méret) adatok. Válogassuk ki egy fileba a mexikói, egy másikba a piros
virágú kaktuszokat!

\emph{Specifikáció:}\\
$\K = (n:\seq(Ch), o:\seq(Ch), v:\seq(Ch), m:\seq(Ch))$\\
$\F = \file(\K)$\\
$A = \alatt{\F}{x} \times \alatt{\F}{y} \times \alatt{\F}{z}$\\
$B = \alatt{\F}{x'}$\\
$Q = ( x=x' )$\\
$R = ( y=f_1(x') \es z=f_2(x'))$

Egyváltozós-kétértékű elemenkénti feldolgozásról van szó, ahol a két
elemenként feldolgozható függvény egy-egy elemet feldolgozó változatai:
\[
\Tilde f_1(\{e\}):= \left\{
\begin{array}{ll}
\varnothing & \text{, ha } e.o\ne \text{'mexikó'} \\
\{e\} & \text{, ha } e.o=\text{'mexikó'}
\end{array}
\right.
\Tilde f_2(\{e\}):= \left\{
\begin{array}{ll}
\varnothing & \text{, ha } e.v\ne \text{'piros'} \\
\{e\} & \text{, ha } e.v=\text{'piros'}
\end{array}
\right.
\]

Először írjuk fel úgy a feldolgozást, mintha a bemeneti adathalmaz is sorzatként lenne megadva:
\begin{stuki}[10cm]
  \stm{y,z:=<>,<>}
  \begin{WHILE}{5}{\stm{x.dom \ne 0}}
    \begin{IF}{1}{\stm{x.lov.o=\text{'mexikó'}}}
      \stm{y:hiext(x.lov)}
      \ELSE
      \SKIP
    \end{IF}
    \begin{IF}{1}{\stm{x.lov.v=\text{'piros'}}}
      \stm{z:hiext(x.lov)}
      \ELSE
      \SKIP
    \end{IF}
    \stm{x:lorem}
  \end{WHILE}
\end{stuki}

Most pedig írjuk át ezt a programot arra az esetre, ha $x$ input file:
\begin{stuki}[10cm]
  \stm{y,z:=<>,<>}
  \stm{dx,x:lopop}
  \begin{WHILE}{5}{\stm{dx\ne extr}}
    \begin{IF}{1}{\stm{dx.o=\text{'mexikó'}}}
      \stm{y:hiext(dx)}
      \ELSE
      \SKIP
    \end{IF}
    \begin{IF}{1}{\stm{dx.v=\text{'piros'}}}
      \stm{z:hiext(dx)}
      \ELSE
      \SKIP
    \end{IF}
    \stm{dx,x:lopop}
  \end{WHILE}
\end{stuki}
\end{document}
