% -*- coding: iso-8859-2 -*-
\documentclass[a4paper]{article}
\usepackage{progm}
\analpacks
\analoldal{2. feladatsor, 31. feladat}
\begin{document}
\noindent
\emph{Feladat:} Az $x$ vektor egy szöveget tartalmaz.  Számoljuk meg,
hogy hány magánhangzó van a szövegben!

\emph{Specifikáció:}\\
$V = \vect(\Z, Ch)$\\
$A = \alatt{\V}{x} \times  \alatt{\N_0}{d}$\\
$B = \alatt{\V}{x'}$\\
$Q : ( x=x' )$\\
$R : ( Q \es d=\sum\limits_{j=x.\lob}^{x.\hib} \chi(\text{magánhangzó}(x_j)))$

Ha specifikációban szereplő magánhangzó logikai függvény nem
megengedett, akkor azt egyszerűen az $x_j=``a'' \vagy x_j=``e''
\vagy x_j=``i'' \vagy x_j=``o'' \vagy x_j=``u''$ diszjunkcióval is
helyettesíthetjük angol szövegek esetén.  Magyar szövegek
feldolgozásakor ebbe a diszjunkcióba bele kell venni az ékezeteket is.

A számlálás specifikációja hasonló.  Lássuk, hogy az alábbi átnevezés
után milyen különbségek maradnak:

\begin{tabular}{ccc}
feladat &  & számlálás \\
\hline
$x.\lob$ & \knyil & $m$ \\
$x.\hib$ & \knyil & $n$ \\
$\text{magánhangzó}(x_i)$ & \knyil & $\beta(i)$
\end{tabular}

A visszavezetés természetes.

\begin{stuki}[6cm]
  \stm{k,d:=x.\lob-1,0}
  \begin{WHILE}{3}{\stm{k \ne x.\hib}}
    \begin{IF}{1}{\stm{\text{magánhangzó}(x_{k+1})}}
      \stm{d:=d+1}
      \ELSE
      \SKIP
    \end{IF}
    \stm{k:=k+1}
  \end{WHILE}
\end{stuki}

\end{document}
