% -*- coding: iso-8859-2 -*-
\documentclass[a4paper]{article}
\usepackage{progm}
\analpacks
\analoldal{3. feladatsor, 15. feladat, függvényabsztarkcióval}
\begin{document}
\noindent

\emph{Feladat:} Adott egy szöveg, ami mondatokból áll, és a mondatok
végén pont van. Módosítsuk a szöveget úgy, hogy minden mondat végét
jelző pontot pontosvesszőre cserélünk!  A mondatokban lehetnek
idézetek, és az idézetek is tartalmazhatnak idézeteket tetszőleges
mélységben (az idézetet egy kezdőidézőjel vezeti be és egy
záróidézőjel jelzi a végét). Azok a pontok, amelyek egy idézet
belsejében vannak, nem jelentik a mondat végét! Feltesszük, hogy a
szövegben az idézőjelek kiegyensúlyozottak.

Tegyük fel, hogy a szöveg egy $sx,dx,x:\Read$ művelettel olvasható
file-ban van, a kimenetet pedig az $y$-ban kell előállítanunk!

\emph{Specifikáció:}\\
$\F=\file(Ch)$\\
$A = \alatt{\F}{x} \times \alatt{\F}{y}$\\
$B = \alatt{\F}{x'}$\\
$Q = ( x=x' )$\\
$R = ( y= f(dom(x'))_1)$, ahol $f(0):=(<>, 0), \forall i\in[1,dom(x')]: f(i):=F(i, f(i-1))$\\
$F(i,z):=\begin{cases}
  (z_1:\hiext(`), z_2+1) & \text{, ha } x_i = ` \\
  (z_1:\hiext(\text{'}), z_2-1) & \text{, ha } x_i = \text{'} \\
  (z_1:\hiext(\text{;}), z_2) & \text{, ha } x_i=\text{.} \es z_2=0 \\
  (z_1:\hiext(x_i), z_2) & \text{, ha } x_i\ne\text{.} \vagy z_2\ne0 \\
\end{cases}$

A rekurzív függvény kiszámítása file-ra:

\begin{stuki}[12cm]
  \stm{y,d:=<>,0}
  \stm{sx,dx,x:\Read}
  \begin{WHILE}{4}{\stm{sx}}
    \begin{CASE}{2}{4}
      \WHEN{\stm{dx = `}} \stm{y:\hiext(`)}\stm{d:=d+1} 
      \WHEN{\stm{dx = \text{'}}} \stm{y:\hiext(\text{'})}\stm{d:=d-1}
      \WHEN{\stm{dx = \text{.} \es d=0}} \stm[2]{y:\hiext(\text{;})}
      \WHEN{\stm{dx \ne \text{.} \vagy d\ne 0}} \stm[2]{y:hiext(dx)}
    \end{CASE}
    \stm{sx,dx,x:\Read}
  \end{WHILE}
\end{stuki}
\end{document}
