\documentclass[a4paper]{article}
\usepackage{progm}
\analpacks
\analoldal{3. feladatsor, 4. feladat}
\renewcommand{\D}{\mathbb{D}}
\newcommand{\id}{\text{id}}
\begin{document}
\noindent
\emph{Feladat:} Az $x$ szekvenciális file (megengedett művelet az $sx,dx,x$:read) egy
vállalat dolgozóiról a következő adatokat tartalmazza:
\begin{itemize}
\item a dolgozó azonosító száma
\item vezető beosztásban van-e
\item legmagasabb iskolai végzettsége
\end{itemize}

Válasszuk ki a $v$ sorozatba azoknak a dolgozóknak az adatait, akik
vezető beosztásban vannak, a $z$ sorozatba azoknak az azonosítóit,
akik vezető beosztásban vannak és nem érettségiztek!

Természetesen az iskolai végzettség típuson van valahogyan értelmezve
egy ``nagyobb'' reláció és van olyan eleme, hogy ``érettségi''.

\emph{Specifikáció:}\\
$\V = \{\text{elemi}, \text{érettségi}, \text{főiskola}, \text{egyetem}\}$\\
$\D = (\id:\N, l:\L, v:\V)$\\
$\F = \file(\D)$\\
$A = \alatt{\F}{x} \times \alatt{\seq(\D)}{v} \times \alatt{\seq(\N)}{z}$\\
$B = \alatt{\F}{x'}$\\
$Q = ( x=x' )$\\
$R = ( v=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 } \nem e.l \\
\{e\} & \text{, ha } e.l
\end{array}
\right.
\hspace{1cm}\Tilde f_2(\{e\}):= \left\{
\begin{array}{ll}
\varnothing & \text{, ha } \nem e.l \vagy e.v\ge \text{érettségi} \\
\{e.\id\} & \text{, ha } e.l \es e.v<\text{érettségi}
\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{v,z:=<>,<>}
  \begin{WHILE}{5}{\stm{x.\dom \ne 0}}
    \begin{IF}{1}{\stm{x.\lov.l}}
      \stm{v:\hiext(x.\lov)}
      \ELSE
      \SKIP
    \end{IF}
    \begin{IF}{1}{\stm{x.\lov.l \es x.\lov.v<\text{érettségi}}}
      \stm{z:\hiext(x.\lov.\id)}
      \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{v,z:=<>,<>}
  \stm{sx,dx,x:\Read}
  \begin{WHILE}{5}{\stm{sx=\norm}}
    \begin{IF}{1}{\stm{dx.l}}
      \stm{v:\hiext(dx)}
      \ELSE
      \SKIP
    \end{IF}
    \begin{IF}{1}{\stm{dx.l \es dx.v<\text{érettségi}}}
      \stm{z:\hiext(dx.\id)}
      \ELSE
      \SKIP
    \end{IF}
    \stm{sx,dx,x:\Read}
  \end{WHILE}
\end{stuki}
\end{document}
