\documentclass[a4paper]{article}
\usepackage{progm}
\analpacks
\analoldal{3. feladatsor, 17. feladat. függvényabsztrakcióval}
\newcommand{\ChE}{\text{ChE}}
\newcommand{\Ch}{\text{Ch}}
\newcommand{\extr}{\text{extr}}
\begin{document}
\noindent
\emph{Feladat:} Egy szekvenciális file (megengedett művelet az
$sx,dx,x:read$) szöveget tartalmaz, melyben a szavakat szóközök
(esetleg több szóköz) választják el.  Számoljuk meg, hány 3
jelnél rövidebb szó van a szövegben!

\emph{Specifikáció:}\\
$\F = \file(\Ch)$\\
$A = \alatt{\F}{x} \times \alatt{\N_0}{d}$
$B = \alatt{\F}{x'}$\\
$Q = ( x=x' )$\\
$R = ( d = f(dom(x'))_1)$, ahol $f:[0,dom(x')]\nyil \N_0\times\N_0, f(0):=(0,0), \forall i\in[1,dom(x')]:f(i):=F(i,f(i-1))$
\[
F(i,z):= \left\{
\begin{array}{ll}
(z_1,0) & \text{, ha } x_i=\_ \\
(z_1+1,z_2+1) & \text{, ha } x_i\ne\_ \es z_2=0 \\
(z_1-1,z_2+1) & \text{, ha } x_i\ne\_ \es z_2=2 \\
(z_1,z_2+1) & \text{, ha } x_i\ne\_ \es z_2\ne0\es z_2\ne2 \\
\end{array}
\right.
\]

Megjegyzés: az egyik félévben a ZH feladat a 3 jelnél hosszabb szavak
megszámlálása volt, ekkor annyiban változik a függvény, hogy a 2. sorra nincs
szükség, a harmadikban pedig a növelni kell az első komponens értékét, nem
csökkenteni.

Ez a specifikáció visszavezethető a rekurzív formulával adott függvény
kiszámításának tételére, amit file-ra írunk fel ($z_1\nyil d, z_2\nyil h$):

\begin{stuki}[16cm]
  \stm{sx,dx,x:\Read}
  \stm{d,h:=0,0}
  \begin{WHILE}{3}{\stm{sx=\norm}}
    \begin{CASE}{1}{4}
      \WHEN{\stm{dx=\_}}
      \stm{h:=0}
      \WHEN{\stm{dx\ne\_\es h=0}}
      \stm{d,h:=d+1,h+1}
      \WHEN{\stm{dx\ne\_\es h=2}}
      \stm{d,h:=d-1,h+1}
      \WHEN{\stm{dx\ne\_\es h\ne 0 \es h\ne 2 }}
      \stm{h:=h+1}
    \end{CASE}
    \stm{sx,dx,x:\Read}
  \end{WHILE}
\end{stuki}
\end{document}
