\documentclass[a4paper]{article}
\usepackage{progm}
\analpacks
\analoldal{3. feladatsor, 20. feladat, függvényabsztrakcióval}
\begin{document}
\noindent
\emph{Feladat:} Adott az $x$ szekvenciális file (megengedett művelet
az $sx,dx,x:read$), amely egy szöveget tartalmaz.  Állapítsuk meg,
hogy hány olyan szó van a szövegben, ami tartalmaz ``R'' betűt!

\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\L, f(0):=(0,\hamis), \forall i\in[1,dom(x')]:f(i):=F(i,f(i-1))$
\[
F(i,z):= \left\{
\begin{array}{ll}
(z_1,\hamis) & \text{, ha } x_i=\_ \\
(z_1+1, \igaz) & \text{, ha } x_i=\text{'R'} \es \nem z_2 \\
z & \text{, ha } x_i\ne\_ \es x_i\ne\text{'R'} \vagy x_i=\text{'R'} \es z_2 \\
\end{array}
\right.
\]

Ez a specifikáció visszavezethető a rekurzív formulával adott
függvény kiszámításának tételére, amit függvényre írunk fel:

\begin{stuki}[16cm]
  \stm{d,l:=0,\hamis}
  \stm{sx,dx,x:\Read}
  \begin{WHILE}{3}{\stm{sx=\norm}}
    \begin{CASE}{1}{3}
      \WHEN{\stm{dx=\_}}
      \stm{l:=\hamis}
      \WHEN{\stm{dx=\text{'R'} \es \nem l}}
      \stm{d,l:=d+1,\igaz}
      \WHEN{\stm{dx\ne\_ \es dx\ne\text{'R'} \vagy dx=\text{'R'} \es l}}
      \SKIP
    \end{CASE}
    \stm{sx,dx,x:\Read}
  \end{WHILE}
\end{stuki}

\end{document}
