% -*- coding: iso-8859-2 -*-
\documentclass[a4paper]{article}
\usepackage{progm}
\analpacks
\analoldal{2. feladatsor, 48. feladat}
\begin{document}
\noindent
\emph{Feladat:} Adottak az $x$ és $b$ vektorok.  `Fektessük' $b$-t az
$x$ vektorra folyamatosan egymás után ahányszor csak lehet, és
számoljuk meg, hány helyen egyeznek az egymás feletti értékek!  Csak
egész számú egymásrafektetést csináljunk!  Tehát például az `Orsolya'
nevet karakterenként tartalmazó vektorra az `Orsi' csak egyszer
fektethető, és összesen 3 darab egyezés van.

\emph{Specifikáció:}\\
$\V = \vect(\Z, \mathcal{H})$ \\
$A = \alatt{\V}{x} \times \alatt{\V}{b} \times \alatt{\N_0}{d}$\\
$B = \alatt{\V}{x'} \times \alatt{\V}{b'}$\\
$Q = ( x=x' \es b=b' )$\\
$R = ( Q \es d=\sum\limits_{i=0}^{x.dom-(x.dom \mod\  b.dom)-1} \chi(x_{x.lob+i}=b_{b.lob+(i \mod\  b.dom)}) )$

(Megjegyzés: a $\mathcal{H}$ halmaz tetszőleges halmazt jelölhet,
ugyanis az elemeivel kapcsolatban csak az egyenlőség vizsgálat
létezését fogjuk kihasználni.  Az említett példában $\mathcal{H}$ a
karakteres típus, de lehetne szó egészekről vagy bármi másról is.)

Alteres (konstanssal helyettesítettük $m$-et és $n$-et) visszavezetés a számlálásra:

\begin{tabular}{cccr}
  feladat &  & számlálás \\
  \hline
  $0$ & \knyil & $m$ \\
  $x.dom-(x.dom \mod\  b.dom)-1$ & \knyil & $n$ \\
  $x_{x.lob+i}=b_{b.lob+(i \mod\  b.dom)}$ & \knyil & $\beta(i)$
\end{tabular}

\begin{stuki}
  \stm{k,d:=-1,0}
  \begin{WHILE}{3}{\stm{k \ne x.dom-(x.dom \mod\  b.dom)-1}}
    \begin{IF}{1}{\stm{x_{x.lob+k+1}=b_{b.lob+((k+1) \mod\  b.dom)}}}
      \stm{d:=d+1}
      \ELSE
      \SKIP
    \end{IF}
    \stm{k:=k+1}
  \end{WHILE}
\end{stuki}


\end{document}
