%%%
%%%     stuki.hun - Stuki dokumentáció (v2.5)
%%%
%%%     Copyright 1999,2000,2001 Károly Lőrentey.
%%%
%%%     E-mail: lorentey@inf.elte.hu.
%%%
%%%     Jelen dokumentáció szabadon terjeszthető és módosítható,
%%%     feltéve, hogy az eredeti szerző neve és ez a mondat
%%%     nem változik.
%%%
%%%     A `stuki.sty' fájl tartalma a GNU General Public License
%%%     hatálya alá esik.  Lásd a mellékelt COPYING állományt.

%%
%%  A TeX forrásfájl létrehozásához ezt a fájlt keresztül kell
%%  futtatni a HiOn elválasztóprogramon.  A stuki disztribúcióban 
%%  megtalálható egy előregenerált .tex változat is.
%%

%% [TODO: Ideje lenne rendberakni az éveken keresztüli foltozgatás,
%% kiegészítgetés miatt szétzilált szerkezetű doksit.]

 \documentclass[11pt]{article} 
\usepackage{a4wide}
\usepackage[magyar]{babel} 
\usepackage{t1enc}
\usepackage[latin2]{inputenc} 
\usepackage{amsmath}
\usepackage{concrete} 
\usepackage{example}
\usepackage{eepic} % A miniatűr stuki pöckeihez

\usepackage{stuki}



\setlength{\stukiwidth}{4cm}



% LaTeX magyarintás
\makeatletter
\addto{\extrasmagyar}{%
  \babel@save{\partname}%
  \def\partname{rész}%
  \babel@save{\chaptername}%
  \def\chaptername{fejezet}%
  \babel@save{\tablename}%
  \def\tablename{táblázat}%
  \babel@save{\@partnum}%
  \def\@partnum{\thepart.~\partname}%
  \babel@save{\fnum@figure}%
  \def\fnum@figure{\thefigure.~\figurename}%
  \babel@save{\fnum@table}%
  \def\fnum@table{\thetable.~\tablename}%
  \babel@save{\@seccntformat}%
  \def\@seccntformat#1{\csname the#1\endcsname.\space}%
  \babel@save{\numberline}%
  \renewcommand{\numberline}[1]{\hbox to\@tempdima{#1.\hfil}}}
\makeatother



% Az example környezet eredményében felcseréli a forrást és a
% kimenetet, valamint a \ifprogi feltételtől függően egy kicsit
% lejjebb igazítja a forráskódot.
\chardef\uscode=\catcode`\_
\catcode`\_=\letter
\newif\ifprogi
\def\endexample{%
   \endgroup
   \immediate\closeout\example_file
   \penalty \predisplaypenalty
   \vskip \abovedisplayskip
   \ifprogi
     \leftline{\vtop{\vskip\stmheight\hbox{\ExampleVerb}} 
       \hskip\columnsep \ExampleSet}%
   \else
     \leftline{\ExampleVerb \hskip\columnsep \ExampleSet}%
   \fi
   \penalty \postdisplaypenalty
   \vskip \belowdisplayskip
   }
\catcode`\_=\uscode



\begin{document}


\begin{titlepage}
\begin{center}
{\LARGE\textsc{Struktogramok készítése \LaTeX ben}}\\[2pt]
\hrule\vskip 8pt
{\Large\textsc{A \textsl{stuki} csomag}}\\
\vskip 10pt
{\large Lőrentey Károly}\\
\textsf{lorentey@inf.elte.hu}\\
\textsf{http://www.inf.elte.hu/\~{ }lorentey/stuki/}\\
\vskip 10pt
2001. január 27.\\
2.5. változat
\end{center}
\vfill
\begin{stuki*}[180pt]{\bf Használati utasítás}
  \stm*{Kezdd el olvasni ezt a leírást.}
  \begin{WHILE}{2}{\stm*{Amíg még van mit olvasni}}
    \stm*{Próbáld ki az olvasottakat.}
    \stm*{Olvass tovább.}
  \end{WHILE}
  \begin{IF}{2}{\stm*{Tetszik a program?}}
    \stm[2]{\hbox{Használd}\\\hbox{egészséggel.}}
  \ELSE
    \stm*{SKIP}
  \end{IF}
\end{stuki*}
\vfill
\tableofcontents
\end{titlepage}
\newpage



\section{Struktogramok}
\label{sec:stukik}

A struk\-tog\-ra\-mok se\-g\'\i{}t\-s\'e\-g\'e\-vel az al\-go\-rit\-mu\-so\-kat tet\-sze\-t\H os, k\"o\discretionary{ny-}{ny}{nny}en
\'at\-te\-kint\-he\-t\H o ,,do\-bo\-zok'' for\-m\'a\-j\'a\-ban ad\-hat\-juk meg.  A struk\-tog\-ra\-mok
--~ne\-v\"uk\-h\"oz m\'el\-t\'o\-an~-- t\'a\-mo\-gat\-j\'ak, s\H ot ki\-k\'eny\-sze\-r\'\i{}\-tik a struk\-tu\-r\'alt
prog\-ra\-mok \'\i{}r\'a\-s\'at, \'es a szin\-t\'en n\'ep\-sze\-r\H u psze\-u\-do\-k\'od\-dal el\-len\-t\'et\-ben nem
k\"o\-t\H od\-nek egyet\-len prog\-ra\-mo\-z\'a\-si nyelv szin\-ta\-xi\-s\'a\-hoz sem.

Az alap\-ve\-t\H o prog\-ram\-konst\-ruk\-ci\-\'o\-kat a k\"o\-vet\-ke\-z\H o m\'o\-don je\-l\"ol\-j\"uk:


\label{demo}
\medskip
\noindent\hfill
\begin{stukibox*}[2.2cm]{Szekvencia}
  \stm{S_1}
  \stm{S_2}
\end{stukibox*}\hfill
\begin{stukibox*}[4.4cm]{Elágazás}
  \begin{CASE}{1.5}{15}
  \WHEN[4]{\stm{\pi_1}}   \stm{S_1}
  \WHEN[4]{\stm{\pi_2}}   \stm{S_2}
  \WHEN*[3]{\stm{\cdots}} \stm{\cdots}
  \WHEN[4]{\stm{\pi_n}}   \stm{S_n}
  \end{CASE}
\end{stukibox*}\hfill
\begin{stukibox*}[2.2cm]{Ciklus}
  \begin{WHILE}{1}{\stm{\pi}}
    \stm{S}
  \end{WHILE}
\end{stukibox*}%
\hfill{}
\medskip


($S$ tet\-sz\H o\-le\-ges struk\-tog\-ra\-mot, $\pi$ pe\-dig egy
lo\-gi\-kai ki\-fe\-je\-z\'est je\-l\"ol.)

Az el\-\'a\-ga\-z\'a\-sok egy spe\-ci\-\'a\-lis faj\-t\'a\-j\'a\-ra, a k\'e\-ti\-r\'a\-ny\'u igaz-ha\-mis
el\-\'a\-ga\-z\'a\-sok\-ra olyan gyak\-ran van sz\"uk\-s\'e\-g\"unk, hogy c\'el\-sze\-r\H u sz\'a\-muk\-ra
be\-ve\-zet\-ni egy ne\-gye\-dik do\-boz\-t\'\i{}\-pust is:


\begin{stuki*}[2.2cm]{Igaz-hamis}
  \begin{IF}{1.5}{\stm{\pi}}
    \stm{S_1}
    \ELSE
    \stm{S_2}
  \end{IF}
\end{stuki*}


Ve\-gy\"uk \'esz\-re, hogy az igaz-ha\-mis el\-\'a\-ga\-z\'as\-do\-bo\-zok fel\-t\'e\-te\-l\'e\-nek mind\-k\'et
sz\'e\-l\'en van p\"o\-c\"ok.  A jobb\-ol\-da\-li p\"o\-c\"ok a fel\-t\'e\-tel hi\-\'any\-z\'o ta\-ga\-d\'a\-s\'at
k\'\i{}\-v\'an\-ja szim\-bo\-li\-z\'al\-ni.

V\'e\-ge\-ze\-t\"ul adunk egy p\'el\-d\'at egy va\-l\'o\-di, \'elet\-sza\-g\'u struk\-tog\-ram\-ra.  Íme a
fel\-t\'e\-te\-les ma\-xi\-mum\-ke\-re\-s\'es t\'e\-te\-l\'e\-nek prog\-ram\-ja\footnote{Eb\-ben a
le\-\'\i{}\-r\'as\-ban ki\-z\'a\-r\'o\-lag a struk\-tog\-ra\-mok raj\-zo\-l\'a\-s\'a\-val fog\-lal\-ko\-zunk, \'\i{}gy a
p\'el\-da\-k\'ent adott t\'e\-te\-lek r\'esz\-le\-tes is\-mer\-te\-t\'e\-s\'e\-t\H ol (\'al\-la\-pot\-t\'er, el\H o- \'es
ut\'o\-fel\-t\'e\-tel, stb.)\ el\-te\-kin\-t\"unk.}:


\begin{stuki*}[11.11cm]{Feltételes maxker}
  \stm{k,l := m-1, \hbox{hamis}}
  \begin{WHILE}{5}{\stm{k \ne n}}
    \begin{CASE}{3}{16}
      \WHEN[3]{\stm{\lnot \beta(k+1)}}
        \stm*{SKIP}
      \WHEN[5]{\stm{\lnot l \land \beta(k+1)}}
        \stm[3]{l,i,max:=\\
             \hbox{hamis},k+1,\\
             f(k+1)}
      \WHEN[8]{\stm{l \land \beta(k+1)}}
        \begin{IF}[35]{2}{\stm{f(k+1) \le max}}
          \stm*{SKIP}
        \ELSE
          \stm[2]{i, max := \\
               k+1, f(k+1)}
        \end{IF}
    \end{CASE}
    \stm{k := k+1}
  \end{WHILE}
\end{stuki*}


Fi\-gyel\-j\"uk meg, hogy az el\-\'a\-ga\-z\'a\-sok \'agai f\"ug\-g\H o\-le\-ge\-sen is sz\'e\-pen k\"o\-z\'ep\-re van\-nak
iga\-z\'\i{}t\-va.


% Az example környezetben nem használható a center környezet, ezért a
% leírás további részében egy kicsit csalok, nem a valódi definíciókat
% használom:
\renewenvironment{stuki}{\leavevmode\begin{stukibox}}{\end{stukibox}}
\renewenvironment{stuki*}{\leavevmode\begin{stukibox*}}{\end{stukibox*}}



\section{A \texttt{stu\-ki} cso\-mag hasz\-n\'a\-la\-ta}

Eb\-b\H ol a fe\-je\-zet\-b\H ol meg\-ta\-nul\-hat\-juk, ho\-gyan gy\'art\-ha\-tunk a \LaTeX\
se\-g\'\i{}t\-s\'e\-g\'e\-vel a fen\-ti\-ek\-hez ha\-son\-l\'o sz\'ep struk\-tog\-ra\-mo\-kat.


\subsection{Kezd\H ol\'ep\'esek}
\label{sec:kezdet}

Ha egy do\-ku\-men\-tunk\-ban struk\-tog\-ra\-mo\-kat sze\-ret\-n\'enk raj\-zol\-ni, ak\-kor a
\texttt{stu\-ki} cso\-ma\-got tar\-tal\-ma\-z\'o \texttt{stu\-ki.sty} f\'ajlt be kell
m\'a\-sol\-nunk a do\-ku\-men\-tu\-mot tar\-tal\-ma\-z\'o k\"onyv\-t\'ar\-ba, \'es a pre\-am\-bu\-lum\-ba (a
do\-ku\-men\-tum \verb#\begin{document}# el\H ot\-ti r\'e\-sz\'e\-be, a
\verb#\documentclass# pa\-rancs ut\'an) be kell \'\i{}r\-nunk a k\"o\-vet\-ke\-z\H o
uta\-s\'\i{}\-t\'ast:

\begin{center}
  \verb#\usepackage{stuki}#
\end{center}

Ez\-zel a do\-ku\-men\-tu\-munk bel\-se\-j\'e\-ben el\-\'er\-he\-t\H o\-v\'e te\discretionary{sz-}{sz}{ssz}\"uk a
struk\-tog\-ram\-ge\-ne\-r\'a\-l\'o pa\-ran\-cso\-kat.


\subsection{A \texttt{stuki} \'es a \texttt{stuki*} k\"ornyezetek}
\label{sec:korny}

A \texttt{stu\-ki} cso\-mag c\'\i{}m\-k\'e\-zett \'es c\'\i{}m\-ke n\'el\-k\"u\-li struk\-tog\-ra\-mok
k\'e\-sz\'\i{}\-t\'e\-s\'e\-re is hasz\-n\'al\-ha\-t\'o.  C\'\i{}m\-ke n\'el\-k\"u\-li stu\-ki\-kat a \texttt{stu\-ki}
k\"or\-nye\-zet\-ben de\-fi\-ni\-\'al\-ha\-tunk.  A k\"or\-nye\-zet\-nek egyet\-len, op\-ci\-o\-n\'a\-lis
pa\-ra\-m\'e\-te\-re van, a le\-en\-d\H o stu\-ki sz\'e\-les\-s\'e\-ge.  Ha ezt nem ad\-juk meg,
ak\-kor az ala\-p\'er\-tel\-me\-zett sz\'e\-les\-s\'eg a \verb#\stukiwidth#
ho\discretionary{sz-}{sz}{ssz}\'u\-s\'ag\-pa\-rancs \'er\-t\'e\-ke, ami kez\-det\-ben 10~cm, de a \verb#\setlength#
pa\-rancs se\-g\'\i{}t\-s\'e\-g\'e\-vel b\'ar\-mi\-kor \'at\-\'al\-l\'\i{}t\-hat\-juk:


\begin{example}
\begin{stuki}[3cm]
  \stm*{Szia, vil\'ag!}
\end{stuki}
\end{example}



\label{stk:stukiwidthex}
\begin{example}
\setlength{\stukiwidth}{4cm}
\begin{stuki}
  \stm*{Szia, VIL\'AG!}
\end{stuki}
\end{example}


A \texttt{stu\-ki} k\"or\-nye\-zet\-nek van egy csil\-la\-gos v\'al\-to\-za\-ta is, a
\texttt{stu\-ki*}.  Ez csak ab\-ban k\"u\-l\"on\-b\"o\-zik a \texttt{stu\-ki}t\'ol, hogy
van egy k\"o\-te\-le\-z\H o pa\-ra\-m\'e\-te\-re is, a stu\-ki ne\-ve, amit a stu\-ki f\"o\-l\'e egy
le\-ke\-re\-k\'\i{}\-tett do\-boz\-ba \'\i{}r be\-le:


\begin{example}

\begin{stuki*}[3cm]{Els\H o}
  \stm*{Szia, vil\'ag!}
\end{stuki*}
\end{example}


N\'e\-ha sz\"uk\-s\'e\-g\"unk le\-het ar\-ra, hogy n\'e\-h\'any struk\-tog\-ra\-mot egy\-m\'as mel\-lett
je\-le\-n\'\i{}t\-s\"unk meg (l\'asd p\'el\-d\'a\-ul az \pageref{demo}. ol\-da\-lon l\'at\-ha\-t\'o
stu\-ki\-kat).  Er\-re a fe\-la\-dat\-ra a fen\-ti k\"or\-nye\-ze\-tek nem al\-kal\-ma\-sak,
hi\-szen ezek a struk\-tog\-ra\-mo\-kat min\-dig k\"u\-l\"on so\-rok\-ba te\-szik.  A
meg\-ol\-d\'ast a \texttt{stu\-ki\-box} \'es a \texttt{stu\-ki\-box*} k\"or\-nye\-ze\-tek
szol\-g\'al\-tat\-j\'ak\footnote{Ezek a k\"or\-nye\-ze\-tek a 2.0-\'as\-n\'al r\'e\-geb\-bi
  \texttt{stu\-ki} v\'al\-to\-za\-tok\-b\'ol hi\-\'a\-nyoz\-nak, de ott a \texttt{stu\-ki}
  k\"or\-nye\-ze\-tek nem is rak\-j\'ak k\"u\-l\"on sor\-ba a meg\-raj\-zolt struk\-tog\-ra\-mot.}.
Ezek ugyan\-\'ugy m\H u\-k\"od\-nek, mint az ed\-dig meg\-is\-mert t\'ar\-sa\-ik, de az
ered\-m\'e\-ny\"u\-ket egy \'un. \emph{hbox}-ban ad\-j\'ak vi\discretionary{sz-}{sz}{ssz}a.  A
\texttt{stu\-ki\-box} k\"or\-nye\-ze\-tet hasz\-n\'al\-va k\"o\discretionary{ny-}{ny}{nny}e\-d\'en raj\-zol\-ha\-tunk egy\-m\'as
mel\-let\-ti stu\-ki\-kat:


\begin{verbatim}
\noindent\hfill
\begin{stukibox*}[3cm]{1. stuki}\stm*{Micimackó}\end{stukibox*}%
\hfill
\begin{stukibox*}[3cm]{2. stuki}\stm*{Malacka}\end{stukibox*}%
\hfill{}
\end{verbatim}

\noindent\hfill
\begin{stukibox*}[3cm]{1. stuki}\stm*{Micimackó}\end{stukibox*}\hfill
\begin{stukibox*}[3cm]{2. stuki}\stm*{Malacka}\end{stukibox*}\hfill{}



\subsection{Egyszer\H u utas\'\i{}t\'asok}
\label{sec:stmt}

A fen\-ti p\'el\-d\'ak\-ban m\'ar l\'at\-hat\-tuk, hogy a stu\-ki\-raj\-zo\-l\'o k\"or\-nye\-ze\-tek
bel\-se\-j\'e\-be az \verb#\stm*# pa\-ran\discretionary{cs-}{cs}{ccs}al tet\-sz\H o\-le\-ges sz\"o\-ve\-get te\-he\-t\"unk.
Ez a pa\-rancs az \verb#\stm# pa\-rancs spe\-ci\-\'a\-lis alak\-ja.  A k\'et pa\-rancs
mind\-\"o\discretionary{sz-}{sz}{ssz}e ab\-ban k\"u\-l\"on\-b\"o\-zik, hogy m\'\i{}g az \verb#\stm# ma\-te\-ma\-ti\-kai
m\'od\-ban je\-le\-n\'\i{}\-ti a pa\-ra\-m\'e\-te\-r\'et, ad\-dig az \verb#\stm*# si\-ma sz\"o\-ve\-ges
m\'od\-ban dol\-go\-zik. (A szo\-k\'a\-sos struk\-tog\-ra\-mok\-ban az uta\-s\'\i{}\-t\'a\-sok \'ori\-\'a\-si
t\"obb\-s\'e\-ge \verb#\stm#, a csil\-la\-gos v\'al\-to\-zat\-ra csak rit\-k\'an van
sz\"uk\-s\'eg.)


\begin{example}
\begin{stuki}[3cm]
  \stm{x := \phi(y^2)}
\end{stuki}
\end{example}


Az uta\-s\'\i{}\-t\'a\-sok szek\-ven\-ci\-\'a\-it egy\-sze\-r\H u\-en a pa\-ran\-csok egy\-m\'as ut\'an \'\i{}r\'a\-s\'a\-val
kap\-juk:


\begin{example}
\begin{stuki}[4cm]
  \stm*{Kinyitom az ajt\'ot}
  \stm*{Kiveszem a zsir\'afot}
  \stm*{Beteszem az elef\'antot}
  \stm*{Becsukom az ajt\'ot}
\end{stuki}
\end{example}


Fi\-gyel\-j\"uk meg, hogy az el\-v\'a\-lasz\-t\'o\-vo\-na\-lak au\-to\-ma\-ti\-ku\-san meg\-je\-len\-nek.

N\'e\-ha egy uta\-s\'\i{}\-t\'as nem f\'er el egy sor\-ban.  Ek\-kor a \verb#\\#
pa\-ran\discretionary{cs-}{cs}{ccs}al sor\-t\"o\-r\'e\-se\-ket kell he\-lyez\-n\"unk az \verb#\stm#
ar\-gu\-men\-tu\-m\'a\-ba\footnote{A \texttt{stu\-ki} cso\-mag 1.3-n\'al ko\-r\'ab\-bi %[FIXME]
  v\'al\-to\-za\-ta\-i\-ban \"ugyel\-ni kel\-lett ar\-ra, hogy a t\"obb\-so\-ros \texttt{stm*}
  pa\-ran\-csok\-ban a $\backslash\backslash$ sor\-t\"o\-r\'e\-sek el\H ott ne le\-gyen sz\'o\-k\"oz.  Az\-\'o\-ta
  a szer\-z\H o egy ki\-csit \TeX{}ni\-k\'a\-sabb lett, \'es ezt a hi\-\'a\-nyos\-s\'a\-got ki
  tud\-ta ja\-v\'\i{}\-ta\-ni.}.  Ha azon\-ban ezt te\discretionary{sz-}{sz}{ssz}\"uk, ak\-kor az uta\-s\'\i{}\-t\'as (so\-rok
sz\'a\-m\'a\-ban m\'ert) ma\-gas\-s\'a\-g\'at sz\"og\-le\-tes z\'a\-r\'o\-je\-lek k\"o\-z\"ott meg kell ad\-nunk.


\begin{example}
\begin{stuki}[4cm]
  \stm*[2]{Hull a h\'o \'es h\'ozik\\
           zik-zik}
  \stm*[2]{Micimack\'o f\'azik\\
           zik-zik}
\end{stuki}
\end{example}


Nem je\-lent hi\-b\'at, ha m\'as\-kor is meg\-ad\-juk ezt az op\-ci\-o\-n\'a\-lis
ma\-gas\-s\'a\-g\'er\-t\'e\-ket, hi\-szen ez tu\-laj\-don\-k\'ep\-pen az uta\-s\'\i{}\-t\'as\-do\-boz ma\-gas\-s\'a\-g\'at
ad\-ja meg.  Ha az uta\-s\'\i{}\-t\'as sz\"o\-ve\-ge nem t\"ol\-ti ki a meg\-a\-dott ma\-gas\-s\'a\-got,
ak\-kor az \verb#\stm# pa\-rancs k\"o\-z\'ep\-re iga\-z\'\i{}t\-ja a sz\"o\-ve\-get, az\-az a
hi\-\'any\-z\'o r\'eszt alul-fel\-\"ul egy\-for\-ma ma\-gas\-s\'a\-g\'u l\'at\-ha\-tat\-lan t\'er\-k\"oz\-zel
t\"ol\-ti ki.

Ha vi\-szont az uta\-s\'\i{}\-t\'as ma\-gas\-s\'a\-g\'a\-n\'al ki\-sebb \'er\-t\'e\-ket adunk meg az
uta\-s\'\i{}\-t\'as\-do\-boz ma\-gas\-s\'a\-g\'a\-nak (vagy nem adunk meg \'er\-t\'e\-ket, ha az uta\-s\'\i{}\-t\'as
nem f\'er ki egy sor\-ban), ak\-kor a sz\"o\-veg ki fog l\'og\-ni a do\-bo\-z\'a\-b\'ol, \'es ez
na\-gyon ron\-da struk\-tog\-ra\-mo\-kat ered\-m\'e\-nyez.  Sze\-ren\-cs\'e\-re ilyen ese\-tek\-ben
a \LaTeX{} fi\-gyel\-mez\-te\-t\H o \"uze\-ne\-tet (\verb#"Overfull \vbox"#) ad.  Ha
a do\-ku\-men\-tum for\-d\'\i{}\-t\'a\-sa k\"oz\-ben ilyen \"uze\-ne\-tet ka\-punk, ak\-kor
va\-l\'o\-sz\'\i{}\-n\H u\-leg va\-la\-me\-lyik uta\-s\'\i{}\-t\'as\-do\-boz\-nak el\-fe\-lej\-tet\-t\"unk
ma\-gas\-s\'a\-g\'er\-t\'e\-ket ad\-ni.

N\'e\-ha sz\"uk\-s\'e\-g\"unk le\-het nem eg\'esz ma\-gas\-s\'a\-g\'u uta\-s\'\i{}\-t\'as\-do\-boz l\'et\-re\-ho\-z\'a\-s\'a\-ra.
Ilyen\-kor az uta\-s\'\i{}\-t\'as ma\-gas\-s\'a\-ga\-k\'ent egy\-sze\-r\H u\-en be\-\'\i{}r\-juk a k\'\i{}\-v\'ant va\-l\'os
sz\'a\-mot:


\begin{example}
\begin{stuki}
  \stm*[1]{Dobozolni j\'o!}
  \stm*[1.42]{Dobozolni j\'o!}
  \stm*[1.84]{Dobozolni j\'o!}
\end{stuki}
\end{example}



\subsection{Ciklusok}
\label{sec:ciklus}

El\-j\"ott az ide\-je, hogy el\-kezd\-j\"unk fog\-lal\-koz\-ni a bo\-nyo\-lul\-tabb
prog\-ram\-konst\-ruk\-ci\-\'ok \'ab\-r\'a\-zo\-l\'a\-s\'a\-val.  A szek\-ven\-cia le\-\'\i{}\-r\'a\-sa -- mint azt
m\'ar tud\-juk -- egy\-sze\-r\H u\-en a kom\-po\-nen\-sek egy\-m\'as\-u\-t\'a\-n\'\i{}\-r\'a\-s\'a\-val t\"or\-t\'e\-nik.  A
cik\-lus le\-\'\i{}\-r\'a\-sa m\'ar va\-la\-mi\-vel bo\-nyo\-lul\-tabb, eh\-hez egy \'uj k\"or\-nye\-zet\-tel
kell meg\-is\-mer\-ked\-n\"unk.

A \texttt{WHI\-LE} k\"or\-nye\-zet k\'et k\"o\-te\-le\-z\H o \'es egy op\-ci\-o\-n\'a\-lis pa\-ra\-m\'e\-ter\-rel
ren\-del\-ke\-zik.

\begin{itemize}
\item\emph{Az el\-s\H o k\"o\-te\-le\-z\H o pa\-ra\-m\'e\-ter} az uta\-s\'\i{}\-t\'a\-sok
  ma\-gas\-s\'ag\-pa\-ra\-m\'e\-te\-r\'e\-nek fe\-lel meg, meg\-ad\-ja a cik\-lus mag\-j\'a\-nak
  ma\-gas\-s\'a\-g\'at.  A le\-gegy\-sze\-r\H ubb eset\-ben ez a cik\-lus\-mag uta\-s\'\i{}\-t\'a\-sa\-i\-nak
  sz\'a\-ma.
\item\emph{A m\'a\-so\-dik k\"o\-te\-le\-z\H o ar\-gu\-men\-tum\-ban} kell meg\-ad\-nunk a
  cik\-lus\-fel\-t\'e\-telt.  A fel\-t\'e\-telt is uta\-s\'\i{}\-t\'as\-k\'ent, az\-az egy
  \verb#\stm# vagy \verb#\stm*# pa\-rancs\-k\'ent kell be\-\'\i{}r\-ni.
\item\emph{Op\-ci\-o\-n\'a\-lis pa\-ra\-m\'e\-ter\-k\'ent} egy \LaTeX{} hosszt \'\i{}r\-ha\-tunk be,
  ez sza\-b\'a\-lyoz\-za a cik\-lus\-mag in\-den\-t\'a\-l\'a\-s\'a\-nak m\'er\-t\'e\-k\'et
  (ala\-p\'er\-tel\-me\-z\'es\-ben ez a \verb#\loopindent# mak\-r\'o \'er\-t\'e\-ke,
  ami kez\-det\-ben meg\-e\-gye\-zik az egy\-s\'eg\-sor ma\-gas\-s\'a\-g\'a\-val.
\end{itemize}

A k\"or\-nye\-zet tes\-t\'e\-be a cik\-lus\-mag uta\-s\'\i{}\-t\'a\-sa\-it \'\i{}r\-hat\-juk be.  P\'el\-da\-k\'ent
te\-kint\-s\"uk a \emph{li\-ne\-\'a\-ris ke\-re\-s\'es in\-ter\-val\-lu\-mon} prog\-ra\-mot:


\progitrue
\begin{example}
\begin{stuki*}{linker2.8}
  \stm{i,l:=m-1,\hbox{hamis}}
  \begin{WHILE}{2}{\stm{i<n\land\lnot l}}
    \stm{l:=\gamma(i+1)}
    \stm{i:=i+1}
  \end{WHILE}
\end{stuki*}
\end{example}
\progifalse


Ter\-m\'e\-sze\-te\-sen cik\-lu\-so\-kat (el\-\'a\-ga\-z\'a\-so\-kat stb.)\ ak\'ar\-mi\-lyen m\'ely\-s\'eg\-ben
egy\-m\'as\-ba\-\'a\-gyaz\-ha\-tunk, csak fi\-gyel\-n\"unk kell a k\"ul\-s\H o cik\-lus
ma\-gas\-s\'a\-g\'er\-t\'e\-k\'e\-re: egy cik\-lus tel\-jes ma\-gas\-s\'a\-ga pon\-to\-san a
cik\-lus\-fel\-t\'e\-tel \'es a cik\-lus\-mag ma\-gas\-s\'a\-ga\-i\-nak \"o\discretionary{sz-}{sz}{ssz}e\-ge. (Ez a k\"o\-vet\-ke\-z\H o
k\'et fe\-je\-zet\-ben be\-mu\-ta\-tott el\-\'a\-ga\-z\'a\-sok\-ra is igaz: egy el\-\'a\-ga\-z\'as ma\-gas\-s\'a\-ga
a fel\-t\'e\-tel \'es a k\"o\-z\"os \'ag\-ma\-gas\-s\'ag \"o\discretionary{sz-}{sz}{ssz}e\-ge.)


\progitrue
\begin{example}
\begin{stuki*}{Transzpon\'alt}
  \stm{i:=1}
  \begin{WHILE}{6}{\stm{i\le n}}
    \stm{j:=1}
    \begin{WHILE}{3}{\stm{j<i}}
      \stm[2]{
        A_{i,j},A_{j,i}:=\\
        A_{j,i},A_{i,j}}
      \stm{j:=j+1}
    \end{WHILE}
    \stm{i:=i+1}
  \end{WHILE}
\end{stuki*}
\end{example}
\progifalse




\subsection{Igaz-hamis el\-\'agaz\'asok}
\label{sec:if}

Az igaz-ha\-mis el\-\'a\-ga\-z\'a\-so\-kat az \texttt{IF} ne\-v\H u k\"or\-nye\-zet se\-g\'\i{}t\-s\'e\-g\'e\-vel
hoz\-hat\-juk l\'et\-re. A k\"or\-nye\-zet\-nek k\'et k\"o\-te\-le\-z\H o \'es egy op\-ci\-o\-n\'a\-lis
pa\-ra\-m\'e\-te\-re van:

\begin{itemize}
\item \emph{Az el\-s\H o k\"o\-te\-le\-z\H o pa\-ra\-m\'e\-ter} az el\-\'a\-ga\-z\'as fel\-t\'e\-te\-le alat\-ti
  prog\-ram\-r\'esz ma\-gas\-s\'a\-g\'at ha\-t\'a\-roz\-za meg, a szo\-k\'a\-sos m\'o\-don.
\item \emph{A m\'a\-so\-dik k\"o\-te\-le\-z\H o pa\-ra\-m\'e\-ter} az el\-\'a\-ga\-z\'as fel\-t\'e\-te\-le.
  A fel\-t\'e\-tel uta\-s\'\i{}\-t\'as\-nak sz\'a\-m\'\i{}t, te\-h\'at \verb#\stm# vagy
  \verb#\stm*# pa\-rancs\-k\'ent kell meg\-ad\-ni.
\item \emph{Az op\-ci\-o\-n\'a\-lis pa\-ra\-m\'e\-ter} az el\-s\H o \'ag sz\'e\-les\-s\'e\-g\'e\-nek \'es a
  tel\-jes el\-\'a\-ga\-z\'as sz\'e\-les\-s\'e\-g\'e\-nek az ar\'a\-ny\'at ad\-ja meg, sz\'a\-za\-l\'ek\-ban.  Ha
  nem ad\-juk meg, az ala\-p\'er\-tel\-me\-z\'es 50\%, az\-az a k\'et \'ag fe\-le-fe\-le
  ar\'any\-ban osz\-to\-zik a ren\-del\-ke\-z\'es\-re \'al\-l\'o te\-r\"u\-le\-ten.
\end{itemize}

A k\"or\-nye\-zet bel\-se\-j\'e\-be a \'agak uta\-s\'\i{}\-t\'a\-sa\-it kell \'\i{}r\-ni, el\H o\-sz\"or az
,,igaz'' \'agat, az\-t\'an t\H o\-le egy \verb#\ELSE# pa\-ran\discretionary{cs-}{cs}{ccs}al el\-v\'a\-laszt\-va a
ha\-mi\-sat.

P\'el\-d\'a\-ul te\-kint\-s\"uk a k\"o\-vet\-ke\-z\H o prog\-ra\-mot:


\begin{example}
\begin{stuki} 
  \begin{IF}{2}
        {\stm[1.5]{\sum\limits
         _{i=1}^n x_i>h}}
    \stm{d:=d+1}
    \stm{h:=h / 2}
  \ELSE
    \stm*{SKIP}
  \end{IF}
\end{stuki}
\end{example}


L\'at\-ha\-t\'o, hogy nem kell meg\-i\-jed\-n\"unk, ha egy el\-\'a\-ga\-z\'as fel\-t\'e\-te\-le ma\-ga\-sabb
a szo\-k\'a\-sos\-n\'al, a \LaTeX{} nem j\"on t\H o\-le za\-var\-ba.  Azt is
meg\-fi\-gyel\-het\-j\"uk, hogy a SKIP \'ag an\'el\-k\"ul is sz\'ep lett, hogy az
\verb#\stm*# pa\-rancs\-nak meg\-ad\-tuk vol\-na az \'ag k\'\i{}\-v\'ant ma\-gas\-s\'a\-g\'at.  Ez
an\-nak k\"o\-vet\-kez\-m\'e\-nye, hogy az el\-\'a\-ga\-z\'as \'agai ma\-guk is tel\-jes eg\'e\-sz\'e\-ben
k\"o\-z\'ep\-re van\-nak iga\-z\'\i{}t\-va, \'\i{}gy a fen\-ti eset\-ben az egy ma\-gas\-s\'a\-g\'u uta\-s\'\i{}\-t\'as
fe\-lett \'es alatt f\'el-f\'el sor ma\-gas\-s\'a\-g\'u l\'at\-ha\-tat\-lan t\'er\-k\"o\-z\"ok van\-nak. (Az
uta\-s\'\i{}\-t\'a\-so\-kat el\-v\'a\-lasz\-t\'o vo\-na\-lak most hi\-\'a\-nyoz\-nak, hi\-szen az \'ag egyet\-len
uta\-s\'\i{}\-t\'as\-b\'ol \'all.)  Az \'ag ma\-gas\-s\'a\-g\'at ki\-z\'a\-r\'o\-lag ak\-kor le\-het b\"un\-tet\-le\-n\"ul
fi\-gyel\-men k\'\i{}\-v\"ul hagy\-ni, ha az \'ag csak egyet\-len, egy\-sze\-r\H u uta\-s\'\i{}\-t\'ast
tar\-tal\-maz.  A k\"o\-vet\-ke\-z\H o p\'el\-da meg\-mu\-tat\-ja, hogy mi\-lyen cs\'u\-nya ered\-m\'enyt
kap\-ha\-tunk, ha az el\-\'a\-ga\-z\'a\-son be\-l\"ul \'ovat\-la\-nul el\-hagy\-juk a
ma\-gas\-s\'a\-g\'er\-t\'e\-ke\-ket:


\begin{example}
% Hibas!
\begin{stuki}[5cm] 
  \begin{IF}{4}{\stm{\lnot l\land p}}
    \begin{WHILE}{2}{\stm{p \land i<n}}
      \stm{i:=i+1}
      \stm{p:=\phi(i)}
    \end{WHILE}
  \ELSE
    \stm{u:=1}
    \stm{v:=2}
  \end{IF}
\end{stuki}
\end{example}


A ja\-v\'\i{}\-t\'as k\'e\-zen\-fek\-v\H o: (Fi\-gyel\-j\"uk meg a cik\-lus ma\-gas\-s\'a\-g\'er\-t\'e\-ke\-it!)


\begin{example}
\begin{stuki}[5cm] 
  \begin{IF}{4}{\stm{\lnot l\land p}}
    \begin{WHILE}{2.66}
            {\stm[1.34]{p \land i<n}}
      \stm[1.33]{i:=i+1}
      \stm[1.33]{p:=\phi(i)}
    \end{WHILE}
  \ELSE
    \stm[2]{u:=1}
    \stm[2]{v:=2}
  \end{IF}
\end{stuki}
\end{example}


Ter\-m\'e\-sze\-te\-sen a leg\-jobb ered\-m\'enyt \'ugy kap\-juk, ha az el\-\'a\-ga\-z\'as ma\-gas\-s\'a\-g\'at
az \'agak\-nak sz\"uk\-s\'e\-ges ma\-gas\-s\'a\-gok ma\-xi\-mu\-m\'a\-ra \'al\-l\'\i{}t\-juk, \'es a cik\-lust tar\-tal\-ma\-z\'o,
he\-lyi\-g\'e\-nyes \'agat egy ki\-csit ki\-sz\'e\-le\-s\'\i{}t\-j\"uk:


\label{stk:goodex}
\begin{example}
\begin{stuki}[5cm] 
  \begin{IF}[60]{3}
            {\stm{\lnot l\land p}}
    \begin{WHILE}{2}{\stm{p \land i<n}}
      \stm{i:=i+1}
      \stm{p:=\phi(i)}
    \end{WHILE}
  \ELSE
    \stm[1.5]{u:=1}
    \stm[1.5]{v:=2}
  \end{IF}
\end{stuki}
\end{example}


\label{slash}
Az el\-\'a\-ga\-z\'as\-fel\-t\'e\-te\-lek sz\'e\-l\'en meg\-je\-le\-n\H o fer\-de vo\-na\-lak -- ,,p\"oc\-k\"ok'' --
ma\-gas\-s\'a\-gegy\-s\'e\-gek\-ben ki\-fe\-je\-zett m\'e\-re\-t\'et a \verb#\slashheight# mak\-r\'o
ad\-ja meg.  Ez ala\-pe\-set\-ben 0.666, az\-az a p\"oc\-k\"ok egy egy\-s\'eg\-nyi ma\-gas\-s\'a\-g\'u
fel\-t\'e\-tel\-do\-boz\-nak k\"o\-r\"ul\-be\-l\"ul a k\'et\-har\-ma\-d\'a\-ig \'er fel.  A mak\-r\'o
fe\-l\"ul\-de\-fi\-ni\-\'a\-l\'a\-s\'a\-val ez az \'er\-t\'ek a fel\-hasz\-n\'a\-l\'o \'\i{}z\-l\'e\-s\'e\-hez iga\-z\'\i{}t\-ha\-t\'o.  A
k\"o\-vet\-ke\-z\H o stu\-ki\-ban p\'el\-d\'a\-ul a p\"oc\-k\"ok az egy\-s\'eg\-do\-boz te\-te\-j\'e\-ig fel\-\'er\-nek:


{\begin{example}
\renewcommand{\slashheight}{1}% <===
\begin{stuki}[5cm] 
  \begin{IF}[60]{3}
            {\stm{\lnot l\land p}}
    \begin{WHILE}{2}{\stm{p \land i<n}}
      \stm{i:=i+1}
      \stm{p:=\phi(i)}
    \end{WHILE}
  \ELSE
    \stm[1.5]{u:=1}
    \stm[1.5]{v:=2}
  \end{IF}
\end{stuki}
\end{example}
}


Kis l\'ep\-t\'e\-k\H u stu\-kik sze\-d\'e\-se\-kor el\H o\-for\-dul\-hat, hogy a \LaTeX\ a
do\-ku\-men\-tum for\-d\'\i{}\-t\'a\-sa k\"oz\-ben ,,\texttt{$\backslash$oval,
  $\backslash$circle, or $\backslash$line size unavailable}''
fi\-gyel\-mez\-te\-t\'e\-se\-ket ad, \'es a p\"oc\-k\"ok egy\-sze\-r\H u\-en el\-t\H un\-nek a stu\-kik
el\-\'a\-ga\-z\'a\-sa\-i\-r\'ol.  Ez a \LaTeX\ \texttt{pic\-tu\-re} k\"or\-nye\-ze\-t\'e\-nek a
hi\-\'a\-nyos\-s\'a\-ga, me\-lyet le\-gegy\-sze\-r\H ub\-ben a \texttt{eepic} vagy a
\texttt{pspicture} mak\-r\'o\-cso\-ma\-gok be\-t\"ol\-t\'e\-s\'e\-vel old\-ha\-tunk meg
(\verb#\usepackage{eepic}#).  Ezt a \texttt{stu\-ki.sty} az\'ert nem
te\-szi meg au\-to\-ma\-ti\-ku\-san, mert az ese\-tek t\"obb\-s\'e\-g\'e\-ben tel\-je\-sen
fel\-es\-le\-ge\-sen ter\-hel\-n\'e ve\-le a fel\-hasz\-n\'a\-l\'o t\"u\-rel\-m\'et \'es a rend\-szer
er\H o\-for\-r\'a\-sa\-it.

\subsection{Által\'anos, t\"obb\'ag\'u el\-\'agaz\'asok}
\label{sec:case}

A \texttt{stu\-ki} cso\-mag leg\-bo\-nyo\-lul\-tabb r\'e\-sze a t\"ob\-b\'a\-g\'u el\-\'a\-ga\-z\'a\-so\-kat
raj\-zo\-l\'o \texttt{CA\-SE} k\"or\-nye\-zet.  A \texttt{CA\-SE} k\"or\-nye\-zet az
\texttt{IF}-hez ha\-son\-l\'o\-an k\'et k\"o\-te\-le\-z\H o \'es egy el\-hagy\-ha\-t\'o pa\-ra\-m\'e\-ter\-rel
ren\-del\-ke\-zik, azon\-ban a pa\-ra\-m\'e\-te\-rek je\-len\-t\'e\-se m\'as:

\begin{itemize}
\item \emph{Az el\-s\H o k\"o\-te\-le\-z\H o ar\-gu\-men\-tum\-ban} az ed\-di\-gi\-ek\-hez ha\-son\-l\'o\-an az
  el\-\'a\-ga\-z\'as \'aga\-i\-nak ma\-gas\-s\'a\-g\'at kell meg\-ad\-ni.  Eb\-be a fel\-t\'e\-te\-lek
  ma\-gas\-s\'a\-ga nem sz\'a\-m\'\i{}t be\-le.
\item \emph{A m\'a\-so\-dik k\"o\-te\-le\-z\H o ar\-gu\-men\-tum\-ban} -- egy\-sze\-r\H u\-en fo\-gal\-maz\-va
  -- az \emph{\'agak sz\'a\-m\'at} kell meg\-ad\-nunk, eg\'esz sz\'am\-k\'ent.  Va\-l\'o\-j\'a\-ban
  a \LaTeX{} ezt a sz\'a\-mot az \emph{egy\-s\'eg\-nyi \'ag\-sz\'e\-les\-s\'eg}
  meg\-ha\-t\'a\-ro\-z\'a\-s\'a\-ra hasz\-n\'al\-ja \'ugy, hogy le\-oszt\-ja ve\-le az el\-\'a\-ga\-z\'as
  tel\-jes sz\'e\-les\-s\'e\-g\'et.
\item \emph{Az op\-ci\-o\-n\'a\-lis pa\-ra\-m\'e\-ter} a fel\-t\'e\-tel\-sor ma\-gas\-s\'a\-g\'at
  tar\-tal\-maz\-hat\-ja.  Ak\-kor kell meg\-ad\-ni, ha van egy\-n\'el ma\-ga\-sabb
  fel\-t\'e\-tel\-do\-bo\-z\'u el\-\'a\-ga\-z\'a\-s\'ag.  (A fel\-t\'e\-te\-lek so\-r\'at al\-ko\-t\'o uta\-s\'\i{}\-t\'a\-sok\-nak
  nem fel\-t\'et\-le\-n\"ul kell egy\-for\-ma ma\-gas\-nak len\-ni\-\"uk, a r\"o\-vi\-deb\-be\-ket a
  \LaTeX{} a szo\-kott m\'o\-don k\"o\-z\'ep\-re iga\-z\'\i{}t\-ja.  Eh\-hez azon\-ban el\H o\-re
  is\-mer\-nie kell a leg\-na\-gyobb uta\-s\'\i{}\-t\'as ma\-gas\-s\'a\-g\'at.)
\end{itemize}

Az el\-\'a\-ga\-z\'as \'aga\-it a \verb#CASE# k\"ornyezet belsej\'eben, \verb#\WHEN#
pa\-ran\-csok\-kal kez\-d\H o\-d\H o uta\-s\'\i{}\-t\'as\-so\-ro\-za\-tok\-k\'ent ad\-hat\-juk meg.  A
\verb#\WHEN#-nek egy k\"o\-te\-le\-z\H o \'es egy op\-ci\-o\-n\'a\-lis pa\-ra\-m\'e\-te\-re van:

\begin{itemize}
\item \emph{A k\"o\-te\-le\-z\H o ar\-gu\-men\-tum\-ban} az adott \'ag fel\-t\'e\-te\-l\'et kell
  meg\-ad\-ni, a szo\-kott m\'o\-don egy \verb#\stm# pa\-rancs\-ba z\'ar\-va.
\item \emph{Az op\-ci\-o\-n\'a\-lis pa\-ra\-m\'e\-ter} az \'ag re\-la\-t\'\i{}v sz\'e\-les\-s\'e\-g\'et
ha\-t\'a\-roz\-za meg.  Az \'ag t\'eny\-le\-ges sz\'e\-les\-s\'e\-g\'et a re\-la\-t\'\i{}v sz\'e\-les\-s\'eg \'es az
egy\-s\'eg\-nyi \'ag\-sz\'e\-les\-s\'eg \"o\discretionary{sz-}{sz}{ssz}e\-szor\-z\'a\-s\'a\-val kap\-hat\-juk meg.  (\'Er\-te\-lem\-sze\-r\H u\-en
az \'agak re\-la\-t\'\i{}v sz\'e\-les\-s\'e\-ge\-i\-nek \"o\discretionary{sz-}{sz}{ssz}e\-ge meg kell, hogy
egyez\-zen a \texttt{CA\-SE} k\"or\-nye\-zet m\'a\-so\-dik ar\-gu\-men\-tu\-m\'a\-ban meg\-a\-dott
\'er\-t\'ek\-kel.)  Ha nem ad\-juk meg, a pa\-ra\-m\'e\-ter ala\-p\'er\-tel\-me\-zett \'er\-t\'e\-ke 1.
\end{itemize}

A re\-la\-t\'\i{}v sz\'e\-les\-s\'e\-gek\-kel j\'at\-szi k\"o\discretionary{ny-}{ny}{nny}ed\-s\'eg\-gel ad\-hat\-juk meg az el\-\'a\-ga\-z\'as
\'aga\-i\-nak sz\'e\-les\-s\'e\-g\'et.  (Ha va\-la\-ki sze\-ret sz\'a\-za\-l\'e\-kok\-ban sz\'a\-mol\-ni, ak\-kor
a k\"or\-nye\-zet m\'a\-so\-dik pa\-ra\-m\'e\-te\-r\'e\-nek 100-at ad\-va az egyes \'agak
sz\'e\-les\-s\'e\-g\'et a tel\-jes sz\'e\-les\-s\'eg sz\'a\-za\-l\'e\-k\'a\-ban fe\-jez\-he\-ti ki.)

A \verb#\WHEN# pa\-rancs\-nak van egy csil\-la\-gos v\'al\-to\-za\-ta is.
A \verb#\WHEN*# ugyan\-\'ugy m\H u\-k\"o\-dik, mint a si\-ma \verb#\WHEN#,
de az \'al\-ta\-la de\-fi\-ni\-\'alt \'ag fel\-t\'e\-tel\-do\-bo\-z\'a\-ba nem rak p\"oc\-k\"ot.  Ez 
prog\-ram\-s\'e\-m\'ak ese\-t\'e\-ben hasz\-nos, ami\-kor nem is\-mer\-j\"uk az \'agak pon\-tos
sz\'a\-m\'at.

P\'el\-da\-k\'ent l\'as\-suk az \'al\-ta\-l\'a\-nos ele\-men\-k\'en\-ti fel\-dol\-go\-z\'as prog\-ram\-j\'at:
(Most is csak a struk\-tog\-ra\-mot raj\-zol\-juk fel, a spe\-ci\-fi\-k\'a\-ci\-\'o\-t\'ol \'es a
fel\-hasz\-n\'alt szim\-b\'o\-lu\-mok ($A$, $B$, $g_i$) de\-fi\-n\'\i{}\-ci\-\'o\-j\'a\-t\'ol el\-te\-kin\-t\"unk.)


\begin{center}
\begin{stuki*}[\textwidth]{T\"obbv\'altoz\'os-t\"obb\-\'ert\'ek\H u e.f.}
  \stm{Y:=\emptyset_m}
  \begin{WHILE}{8}{\stm{X\ne\emptyset_n}}
    \stm[1]{e:\in\bigcup_{i=1}^n X_i}
    \begin{CASE}[2]{5}{14}
      \WHEN[4]{\stm[2]{e\in X_1\land e\notin X_2\\
                       \land\cdots\land e\notin X_n}}
        \stm[4]{Y_1,\dotsc,Y_m:=\\
                f_1(\{e\},0,\dotsc,0),\\
                \vdots\\
                f_m(\{e\},0,\dotsc,0)}
        \stm{X_1:=X_1\backslash\{e\}}
      \WHEN*[1]{\stm[2]{\cdots}}
        \stm{\cdots}
      \WHEN[4]{\stm[2]{\forall i\mathord\in 
                        A\mathpunct: e\in X_i\land\\
                       \forall i\mathord\in 
                        B\mathpunct: e\notin X_i}}
        \stm[4]{Y_1,\dotsc,Y_m:=\\
                f_1(g_1,\dotsc,g_n),\\
                    \vdots\\
                f_m(g_1,\dotsc,g_n)}
        \stm{\forall i\mathord\in A\mathpunct: 
                      X_i:=X_i\backslash\{e\}}
      \WHEN*[1]{\stm[2]{\cdots}}
        \stm{\cdots}
      \WHEN[4]{\stm[2]{e\in X_1\land e\in X_2\\
                       \land\cdots\land e\in X_n}}
        \stm[4]{Y_1,\dotsc,Y_m:=\\
                f_1(\{e\},\{e\},\dotsc,\{e\}),\\
                \vdots\\
                f_m(\{e\},\{e\},\dotsc,\{e\})}
        \stm{\forall i\mathord\in [1..n]\mathpunct:
               X_i:=X_i\backslash\{e\}}
    \end{CASE}
  \end{WHILE}
\end{stuki*}
\end{center}
A struktogramot gener\'al\'o \texttt{stuki} k\"ornyezet a k\"ovetkez\H o
oldalon tal\'alhat\'o.  Els\H o pillant\'asra a forr\'ask\'od riaszt\'oan
bonyolultnak t\H unhet, de val\'oj\'aban egyszer\H u szerkezet\H u.  A k\'od
legnagyobb r\'esz\'et az utas\'\i{}t\'asok le\'\i{}r\'asa teszi ki.
\newpage

\vfill
\begin{small}
\begin{verbatim}
\begin{stuki*}[\textwidth]{T\"obbv\'altoz\'os-t\"obb\-\'ert\'ek\H u e.f.}
  \stm{Y:=\emptyset_m}
  \begin{WHILE}{8}{\stm{X\ne\emptyset_n}}
    \stm[1]{e:\in\bigcup_{i=1}^n X_i}
    \begin{CASE}[2]{5}{14}
      \WHEN[4]{\stm[2]{e\in X_1\land e\notin X_2\\
                       \land\cdots\land e\notin X_n}}
        \stm[4]{Y_1,\dotsc,Y_m:=\\
                f_1(\{e\},0,\dotsc,0),\\
                \vdots\\
                f_m(\{e\},0,\dotsc,0)}
        \stm{X_1:=X_1\backslash\{e\}}
      \WHEN*[1]{\stm[2]{\cdots}}
        \stm{\cdots}
      \WHEN[4]{\stm[2]{\forall i\mathord\in 
                        A\mathpunct: e\in X_i\land\\
                       \forall i\mathord\in 
                        B\mathpunct: e\notin X_i}}
        \stm[4]{Y_1,\dotsc,Y_m:=\\
                f_1(g_1,\dotsc,g_n),\\
                    \vdots\\
                f_m(g_1,\dotsc,g_n)}
        \stm{\forall i\mathord\in A\mathpunct: 
                      X_i:=X_i\backslash\{e\}}
      \WHEN*[1]{\stm[2]{\cdots}}
        \stm{\cdots}
      \WHEN[4]{\stm[2]{e\in X_1\land e\in X_2\\
                       \land\cdots\land e\in X_n}}
        \stm[4]{Y_1,\dotsc,Y_m:=\\
                f_1(\{e\},\{e\},\dotsc,\{e\}),\\
                \vdots\\
                f_m(\{e\},\{e\},\dotsc,\{e\})}
        \stm{\forall i\mathord\in [1..n]\mathpunct:
               X_i:=X_i\backslash\{e\}}
    \end{CASE}
  \end{WHILE}
\end{stuki*}
\end{verbatim}
\end{small}
\vfill
\newpage


\subsection{A k\"oz\'epre igaz\'\i{}t\'as megsz\H untet\'ese}
\label{sec:vfilneg}

Ha egy el\-\'a\-ga\-z\'a\-s\'ag\-ban fe\-l\"ul\-re akar\-juk iga\-z\'\i{}\-ta\-ni az uta\-s\'\i{}\-t\'a\-so\-kat, ak\-kor
az adott \'ag el\-s\H o \verb#\stm# pa\-ran\-csa el\'e \'\i{}r\-junk be egy
\verb#\vfilneg# pa\-ran\-csot (ez csak ak\-kor ha\-t\'a\-sos, ha az \'ag nincs
tel\-je\-sen ki\-t\"olt\-ve):


\begin{example}
\begin{stuki}[5cm]
  \begin{IF}[70]{6}{\stm{sf=\hbox{norm}}}
     \stm{sx := \hbox{norm}}
     \stm{dx := 0}
     \begin{WHILE}{2}{\stm{sf=\hbox{norm}
            \land df\ne0}}
        \stm{dx := dx + 1}
        \stm{sf,df,f:\hbox{read}}
     \end{WHILE}
     \stm{sf,df,f:\hbox{read}}
  \ELSE
     \vfilneg
     \stm[2]{sx :=\\ \hbox{abnorm}}
  \end{IF}
\end{stuki}
\end{example}


(Ha alul\-ra aka\-runk iga\-z\'\i{}\-ta\-ni, ak\-kor a \verb#\vfilneg#-et
\'er\-te\-lem\-sze\-r\H u\-en az \'ag uta\-s\'\i{}\-t\'a\-sai ut\'an kell \'\i{}r\-ni.)


\section{A \texttt{stuki} csomag konfigur\'aci\'oja}
\label{sec:config}

Eb\-ben a fe\-je\-zet\-ben \"o\discretionary{sz-}{sz}{ssz}e\-fog\-lal\-juk, hogy mi\-lyen le\-he\-t\H o\-s\'e\-ge\-ink
van\-nak a \texttt{stu\-ki} cso\-mag test\-re\-sza\-b\'a\-s\'a\-ra.


\subsection{Egyszer\H u be\'all\'\i{}t\'asok}
\label{sec:simple}

A struk\-tog\-ra\-mok ki\-n\'e\-ze\-t\'et n\'e\-h\'any egy\-sze\-r\H u pa\-rancs se\-g\'\i{}t\-s\'e\-g\'e\-vel
k\"o\discretionary{ny-}{ny}{nny}e\-d\'en be\-fo\-ly\'a\-sol\-hat\-juk:

\begin{itemize}
  
\item A struk\-tog\-ra\-mok ala\-p\'er\-tel\-me\-zett sz\'e\-les\-s\'e\-g\'et a
  \verb#\stukiwidth# hossz\-pa\-rancs t\'a\-rol\-ja.  Kez\-de\-ti \'er\-t\'e\-ke 10\ cm.
  A \ref{sec:korny}. fe\-je\-zet\-ben, a \pageref{stk:stukiwidthex}. ol\-da\-lon
  ad\-tunk egy p\'el\-d\'at a hasz\-n\'a\-la\-t\'a\-ra.
  
\item Az uta\-s\'\i{}\-t\'a\-sok egy\-s\'eg\-nyi ma\-gas\-s\'a\-g\'at az \verb#\stmheight#
  hossz\-pa\-rancs ad\-ja meg.  A struk\-tog\-ra\-mok de\-fi\-ni\-\'a\-l\'a\-sa\-kor min\-den
  ma\-gas\-s\'a\-g\'er\-t\'ek en\-nek a hossz\-nak va\-la\-mi\-lyen t\"obb\-sz\"o\-r\"o\-se.
  Ala\-p\'er\-tel\-me\-zett \'er\-t\'e\-ke 18\ pt. (Ha 12 pont\-n\'al ki\-sebb\-re \'al\-l\'\i{}t\-juk,
  ak\-kor \'at kell de\-fi\-ni\-\'al\-nunk az el\-\'a\-ga\-z\'a\-sok p\"oc\-ke\-it is (l\'asd
  \verb#\stuki@rightif# \'es \verb#\stuki@leftif# mak\-r\'ok,
  \ref{sec:internal} fe\-je\-zet), k\"u\-l\"on\-ben ki\-l\'og\-n\'a\-nak a
  fel\-t\'e\-tel\-do\-bo\-zok\-b\'ol.)
  
\item Az el\-\'a\-ga\-z\'a\-s\'a\-gak p\"oc\-ke\-i\-nek az egy\-s\'eg\-ma\-gas\-s\'ag\-hoz vi\-szo\-ny\'\i{}\-tott
  m\'e\-re\-t\'et a \verb#\slashheight# mak\-r\'o ad\-ja meg.  A r\'esz\-le\-te\-ket a
  \ref{slash}. ol\-da\-lon meg\-be\-sz\'el\-t\"uk.

\item A cik\-lus\-ma\-gok ala\-p\'er\-tel\-me\-zett in\-den\-t\'a\-l\'a\-s\'at a
  \verb#\loopindent# pa\-rancs \'at\-de\-fi\-ni\-\'a\-l\'a\-s\'a\-val v\'al\-toz\-tat\-hat\-juk meg.
  A pa\-rancs kez\-de\-ti de\-fi\-n\'\i{}\-ci\-\'o\-j\'a\-nak \'er\-t\'e\-ke meg\-e\-gye\-zik az \'ep\-pen ak\-tu\-\'a\-lis
  sor\-ma\-gas\-s\'ag\-gal.  (Rit\-k\'an kell meg\-v\'al\-toz\-tat\-ni, hi\-szen a be\-h\'u\-z\'as
  m\'er\-t\'e\-k\'et egye\-di ese\-tek\-ben a \texttt{WHI\-LE} k\"or\-nye\-zet op\-ci\-o\-n\'a\-lis
  ar\-gu\-men\-tu\-m\'a\-ban k\"o\discretionary{ny-}{ny}{nny}en fel\-\"ul le\-het b\'\i{}\-r\'al\-ni.)

\item A \verb#\thicklines# pa\-rancs ki\-a\-d\'a\-s\'a\-val meg\-n\"o\-vel\-het\-j\"uk a
  do\-bo\-zok ke\-re\-t\'e\-nek a vas\-tag\-s\'a\-g\'at.  Az ere\-de\-ti \'al\-la\-po\-tot a
  \verb#\thinlines# pa\-rancs \'al\-l\'\i{}t\-ja vi\discretionary{sz-}{sz}{ssz}a.  A vas\-ta\-gabb do\-bo\-zok\-hoz
  f\'el\-k\"o\-v\'er be\-t\H u\-t\'\i{}\-pus il\-lik.  
\end{itemize}

Az \verb#\stmheight# pa\-ran\-csot ak\-kor \'er\-de\-mes hasz\-n\'al\-ni, ha a
szo\-k\'a\-sos\-t\'ol el\-t\'e\-r\H o m\'e\-re\-t\H u stu\-ki\-kat sze\-ret\-n\'enk raj\-zol\-ni: (Ha\-son\-l\'\i{}t\-suk
\"o\discretionary{sz-}{sz}{ssz}e ezt a struk\-tog\-ra\-mot a \pageref{stk:goodex}. ol\-da\-lon l\'at\-ha\-t\'o
ere\-de\-ti\-vel!)

\begin{example}
\begin{tiny}
 \setlength{\stmheight}{10pt}
 \begin{stuki}[2.75cm] 
   \begin{IF}[60]{3}
             {\stm{\lnot l\land p}}
     \begin{WHILE}{2}{\stm{p \land i<n}}
       \stm{i:=i+1}
       \stm{p:=\phi(i)}
     \end{WHILE}
   \ELSE
     \stm[1.5]{u:=1}
     \stm[1.5]{v:=2}
   \end{IF}
 \end{stuki}
\end{tiny}
\end{example}

A fen\-ti struk\-tog\-ram el\-\'a\-ga\-z\'a\-s\'a\-ban a p\"oc\-k\"ok m\'ar t\'ul ap\-r\'ok ah\-hoz, hogy a
szten\-derd \LaTeX\ meg\-b\'\i{}r\-k\'oz\-zon ve\-l\"uk, ez\'ert k\'eny\-te\-le\-nek vol\-tunk a
do\-ku\-men\-tum pre\-am\-bu\-lu\-m\'a\-ban be\-t\"ol\-te\-ni a \texttt{eepic} mak\-r\'o\-cso\-ma\-got.

A \verb#\thicklines# pa\-rancs hasz\-n\'a\-la\-t\'a\-ra is mu\-ta\-tunk egy p\'el\-d\'at:


\begin{example}
\begingroup
 \thicklines
 \mathversion{bold} \bfseries
 \begin{stuki*}{P\'elda} 
   \begin{IF}{2}
         {\stm[1.5]{\sum\limits
          _{i=1}^n x_i>h}}
     \stm{d:=d+1}
     \stm{h:=h / 2}
   \ELSE
     \stm*{SKIP}
   \end{IF}
 \end{stuki*}
\endgroup
\end{example}





\subsection{\'Erdekes bels\H o parancsok}
\label{sec:internal}

Az al\'ab\-bi pa\-ran\-csok a \texttt{stu\-ki} cso\-mag a kon\-fi\-gu\-r\'a\-ci\'o
szem\-pont\-j\'a\-b\'ol \'er\-de\-kes bel\-s\H o pa\-ran\-csai.  K\"u\-l\"on\-le\-ges be\-\'al\-l\'\i{}\-t\'a\-si ig\'e\-nyek
ese\-t\'en sz\"uk\-s\'eg le\-het a meg\-v\'al\-toz\-ta\-t\'a\-suk\-ra, de a cso\-mag nor\-m\'a\-lis
hasz\-n\'a\-la\-t\'a\-hoz nem sz\"uk\-s\'e\-ges az is\-me\-re\-t\"uk.

\begin{itemize}
\item A \verb#\stuki@hrule# és \verb#\stuki@vrule# pa\-ran\-csok nul\-la
l\'at\-sz\'o\-la\-gos vas\-tag\-s\'a\-g\'u, de ma\-xi\-m\'a\-lis ho\discretionary{sz-}{sz}{ssz}\'u\-s\'a\-g\'u v\'\i{}z\-szin\-tes, il\-let\-ve
f\"ug\-g\H o\-le\-ges vo\-nal h\'u\-z\'a\-s\'a\-ra szol\-g\'al\-nak.  A stu\-kik do\-bo\-zai ilyen
vo\-na\-lak\-b\'ol \'ep\"ul\-nek fel.  A vo\-na\-lak t\'eny\-le\-ges vas\-tag\-s\'a\-ga
ala\-p\'er\-tel\-me\-z\'es\-ben 0.4~pt, ez a \verb#\thicklines# pa\-rancs ki\-a\-d\'a\-s\'a\-val
1~pt-ra v\'al\-toz\-tat\-ha\-t\'o.  Az ezek\-t\H ol k\"u\-l\"on\-b\"o\-z\H o vo\-nal\-vas\-tag\-s\'a\-go\-kat a k\'et
pa\-rancs \'at\-de\-fi\-ni\-\'a\-l\'a\-s\'a\-val le\-het be\-\'al\-l\'\i{}\-ta\-ni (er\-re gya\-kor\-la\-ti\-lag
so\-ha sincs sz\"uk\-s\'eg).

\item A \verb#\stuki@leftif# és \verb#\stuki@rightif# pa\-ran\-csok
az el\-\'a\-ga\-z\'a\-sok p\"oc\-ke\-i\-nek meg\-raj\-zo\-l\'a\-s\'a\-ra szol\-g\'al\-nak.  A rajz nem
ren\-del\-kez\-het nul\-l\'a\-n\'al na\-gyobb (l\'at\-sz\'o\-la\-gos) m\'e\-re\-tek\-kel.

\item A \verb#\stuki@title# pa\-rancs a \texttt{stu\-ki*} k\"or\-nye\-zet
ov\'a\-lis c\'\i{}m\-ke\-do\-bo\-za\-it raj\-zol\-ja.  Spe\-ci\-\'a\-lis e\discretionary{f-}{f}{ff}ek\-tu\-sok l\'et\-re\-ho\-z\'a\-s\'a\-hoz
ezt a mak\-r\'ot is \'at\-de\-fi\-ni\-\'al\-hat\-juk.  A pa\-rancs k\'et pa\-ra\-m\'e\-tert kap, a
stu\-ki tel\-jes sz\'e\-les\-s\'e\-g\'et \'es a do\-boz\-ba te\-en\-d\H o sz\"o\-ve\-get.
\end{itemize}

\newpage

\section*{Összefoglaló a \textsf{stuki.sty} csomagról}
\addcontentsline{toc}{section}{Egyoldalas összefoglaló}
\thispagestyle{empty}
%\noindent\verb#\usepackage{stuki}#
\subsection*{Utasítások}
{\setlength{\tabcolsep}{0pt}
\def\p{\leaders\hbox{\enskip.}\hskip 17pt plus 1fill\hbox{}}
\noindent\begin{tabular}{ll}
  \verb#\begin{#\textsf{\textbf{stuki}}\verb#}[#\emph{szélesség}\verb#]#\p &Egyszerű stukik\\
  \verb#\begin{#\textsf{\textbf{stuki*}}\verb#}[#\emph{szélesség}\verb#]{#\emph{címke}\verb#}#\p
      &Címkézett stukik\\[5pt]
  \verb#\begin{#\textsf{\textbf{stukibox}}\verb#}[#\emph{szélesség}\verb#]#\p
  &Egyszerű stuki, hboxban\\
  \verb#\begin{#\textsf{\textbf{stukibox*}}\verb#}[#\emph{szélesség}\verb#]{#\emph{címke}\verb#}#\p
      &Címkézett stuki, hboxban\\[5pt]
  \verb#\#\textsf{\textbf{stm}}\verb#{#\emph{képlet}\verb#}#\p &Utasítás matematikai módban\\
  \verb#\#\textsf{\textbf{stm*}}\verb#{#\emph{szöveg}\verb#}#\p &Szöveges utasítás\\[5pt]
  \verb#\begin{#\textsf{\textbf{WHILE}}\verb#}[#\emph{behúzás}\verb#]{#\emph{magasság}\verb#}{#\emph{feltétel}\verb#}#\p &Ciklus\\[5pt]
  \verb#\begin{#\textsf{\textbf{IF}}\verb#}[#\emph{arány}\verb#]{#\emph{magasság}\verb#}{#\emph{feltétel}\verb#}#\p &Kétágú (igaz-hamis) elágazás\\
  \quad\verb#\#\textsf{\textbf{ELSE}}\p&A hamis ág utasításainak kezdete\\[5pt]
  \verb#\begin{#\textsf{\textbf{CASE}}\verb#}[#\emph{felt.mag.}\verb#]{#\emph{magasság}\verb#}{#\emph{ágak száma}\verb#}#\p &Általános (többágú) elágazás\\
  \quad\verb#\#\textsf{\textbf{WHEN}}\verb#[#\emph{relatív
      szélesség}\verb#]{#\emph{feltétel}\verb#}# \emph{utasítások}\p
    &A többágú elágazás egy ága\\
  \quad\verb#\#\textsf{\textbf{WHEN*}}\verb#[#\emph{relatív
      szélesség}\verb#]{#\emph{feltétel}\verb#}# \emph{utasítások}\p
    &Pöcök nélküli elágazáság
\end{tabular}}

\subsection*{Beállítási lehetőségek}
\noindent\begin{tabular}{llll}
\emph{Név}&\emph{Kategória}&\emph{Alapérték}&\emph{Leírás}\\
\verb#\#\textsf{\textbf{stukiwidth}}&Hosszúság&10\,cm&Alapértelmezett
stukiszélesség\\
\verb#\#\textsf{\textbf{stmheight}}&Hosszúság&18\,pt&Magasságegység\\
\verb#\#\textsf{\textbf{loopindent}}&Makró&\verb#\stmheight#&Alapértelmezett
ciklusmag-behúzás\\
\verb#\#\textsf{\textbf{slashheight}}&Makró&0.666&Az elágazáspöckök magassága\\
\verb#\#\textsf{\textbf{thicklines}}&Makró&&Átkapcsolás vastag
vonalakra\\
\verb#\#\textsf{\textbf{thinlines}}&Makró&&Visszakapcsolás vékony
vonalakra\\
\end{tabular}
\subsection*{Példa}\vspace{-10pt}
\setlength{\stmheight}{12pt}
\hbox{\hbox{\footnotesize
\vbox{\begin{verbatim}
\begin{stuki*}[6cm]{Feltételes maxker}
  \stm{k,l := m-1, \hbox{hamis}}
  \begin{WHILE}{5}{\stm{k \ne n}}
    \begin{CASE}{3}{16}
      \WHEN[3]{\stm{\lnot \beta(k+1)}}
        \stm*{SKIP}
      \WHEN[5]{\stm{\lnot l \land \beta(k+1)}}
        \stm[3]{l,i,max:=\\\hbox{hamis},k+1,\\f(k+1)}
      \WHEN[8]{\stm{l \land \beta(k+1)}}
        \begin{IF}[35]{2}{\stm{f(k+1) \le max}}
          \stm*{SKIP}
        \ELSE
          \stm[2]{i,max:=\\k+1,f(k+1)}
        \end{IF}
    \end{CASE}
    \stm{k := k+1}
  \end{WHILE}
\end{stuki*}
\end{verbatim}}}\hbox to 0pt{\hskip 0pt minus 1fill
\tiny  
\vbox to 8cm{\vfill\begin{stukibox*}[6.5cm]{Feltételes maxker}
  \stm{k,l := m-1, \hbox{hamis}}
  \begin{WHILE}{4.8}{\stm{k \ne n}}
    \begin{CASE}{2.8}{17}
      \WHEN[4]{\stm{\lnot \beta(k+1)}}
        \stm*{SKIP}
      \WHEN[5]{\stm{\lnot l \land \beta(k+1)}}
        \stm[3]{l,i,max:=\\\hbox{hamis},k+1,\\f(k+1)}
      \WHEN[8]{\stm{l \land \beta(k+1)}}
        \begin{IF}[30]{1.8}{\stm{f(k+1) \le max}}
          \stm*{SKIP}
        \ELSE
          \stm[1.8]{i,max:=\\k+1,f(k+1)}
        \end{IF}
    \end{CASE}
    \stm{k := k+1}
  \end{WHILE}
\end{stukibox*}\vfill}}}


\end{document}

%%% Local Variables:
%%% coding: latin-2
%%% mode: latex
%%% TeX-master: t
%%% End:

