| version 1.1, 2003/07/18 17:07:11 |
version 1.2, 2003/11/07 17:33:19 |
|
|
| % 26/02/2003 - created |
% 26/02/2003 - created |
| % |
% |
| |
|
| % $Platon$ |
% $Platon: doc/ztp-zbierka/02-programove-schemy.tex,v 1.1 2003/07/18 17:07:11 nepto Exp $ |
| |
|
| \chapter{Programové schémy} |
\chapter{Programové schémy} |
| |
|
|
|
| |
|
| \section{Porovnávanie tried programových schém} |
\section{Porovnávanie tried programových schém} |
| |
|
| \begin{example} % /* |
\begin{example} % /* is volnost? |
| |
|
| Rozhodnite, či je schéma $S$ voľná. |
Rozhodnite, či je schéma $S$ voľná. |
| |
|
| Line 539 nedá spraviť napríklad 3-násobné opakova |
|
| Line 539 nedá spraviť napríklad 3-násobné opakova |
|
| |
|
| \end{solution} % */ |
\end{solution} % */ |
| |
|
| \begin{example} % /* |
\begin{example} % /* volnost |
| |
|
| Máme danú Janovovu schému $S$. |
Máme danú Janovovu schému $S_1$. |
| |
|
| $$ |
$$ |
| \begin{array}{lrl} |
\begin{array}{lrl} |
| S: & \cmd{begin} & [y] := [x] \\ |
S_1: & \cmd{begin} & [y] := [x] \\ |
| & 1: & [y] := [f(y)] \\ |
& 1: & [y] := [f(y)] \\ |
| & 2: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~6 \\ |
& 2: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~6 \\ |
| & 3: & [y] := [f(y)] \\ |
& 3: & [y] := [f(y)] \\ |
| & 4: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~6 \\ |
& 4: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~6 \\ |
| & 5: & \cmd{goto}~2 \\ |
& 5: & \cmd{goto}~2 \\ |
| & 6: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~8 \\ |
& 6: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~8 \\ |
| & 7: & \cmd{goto}~4 \\ |
& 7: & \cmd{goto}~4 \\ |
| & 8: & [y] := [f(y)] \\ |
& 8: & [y] := [f(y)] \\ |
| & \cmd{end} & [z] := [y] \\ |
& \cmd{end} & [z] := [y] \\ |
| \end{array} |
\end{array} |
| $$ |
$$ |
| |
|
| Nájdite ku schéme $S$ ekvivalentnú voľnú Janovovu schému $S_v$. Schému |
Nájdite ku~schéme~$S_1$ ekvivalentnú voľnú Janovovu schému~$S_{1_v}$. Schému |
| napíšte a stručne zdôvodnite, prečo je schéma $S_v$ voľná a ekvivalentná |
napíšte a stručne zdôvodnite, prečo je schéma~$S_{1_v}$ voľná a ekvivalentná |
| so schémou $S$. |
so~schémou~$S_1$. |
| |
|
| \end{example} % */ |
\end{example} % */ |
| |
|
| \begin{solution} % /* |
\begin{solution} % /* |
| |
|
| Riešením je schéma $S_v$. |
Riešením je schéma $S_{1_v}$. |
| |
|
| $$ |
$$ |
| \begin{array}{lrl} |
\begin{array}{lrl} |
| S_v: & \cmd{begin} & [y] := [x] \\ |
S_{1_v}: & \cmd{begin} & [y] := [x] \\ |
| & 1: & [y] := [f(y)] \\ |
& 1: & [y] := [f(y)] \\ |
| & 2: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~4 \\ |
& 2: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~4 \\ |
| & 3: & \cmd{goto}~1 \\ |
& 3: & \cmd{goto}~1 \\ |
| & 4: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~6 \\ |
& 4: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~6 \\ |
| & 5: & \cmd{goto}~5 \\ |
& 5: & \cmd{goto}~5 \\ |
| & 6: & [y] := [f(y)] \\ |
& 6: & [y] := [f(y)] \\ |
| & \cmd{end} & [z] := [y] \\ |
& \cmd{end} & [z] := [y] \\ |
| \end{array} |
\end{array} |
| $$ |
$$ |
| |
|
| \underline{Voľnosť:} Ak predikát $p(y)$ platí, tak sa už ďalej netestuje. Ak |
\underline{Voľnosť:} Ak predikát $p(y)$ platí, tak sa už ďalej netestuje. Ak |
| neplatí, tak pred ďalším testom toho istého predikátu sa zmení premenná $y$. |
neplatí, tak pred ďalším testom toho istého predikátu sa zmení premenná $y$. |
| Predikát $q(y)$ sa testuje len raz. Pre každú cestu existuje interpretácia |
Predikát~$q(y)$ sa testuje len raz. Pre každú cestu existuje interpretácia |
| $I_v$ a valuácia $v_v$ taká, že výpočet $(S_v,~I_v,~v_v)$ sleduje túto cestu, |
$I_{1_v}$ a valuácia $v_{1_v}$ taká, že výpočet $(S_{1_v},~I_{1_v},~v_{1_v})$ |
| takže schéma je voľná. |
sleduje túto cestu, takže schéma je voľná. |
| |
|
| \underline{Ekvivalencia:} Oproti pôvodnej schéme sme zmenili príkaz |
\underline{Ekvivalencia:} Oproti pôvodnej schéme sme zmenili príkaz |
| $7:\cmd{goto}~4$ na nový príkaz $5:\cmd{goto}~5$. V pôvodnej schéme bol |
$7:\cmd{goto}~4$ na nový príkaz $5:\cmd{goto}~5$. V pôvodnej schéme bol |
| Line 601 malých úpravách novej schémy dajú nahrad |
|
| Line 601 malých úpravách novej schémy dajú nahrad |
|
| |
|
| \end{solution} % */ |
\end{solution} % */ |
| |
|
| \begin{example} % /* |
\begin{example} % /* volnost II. |
| |
|
| Daná je štandardná schéma $S$. |
Daná je štandardná schéma $S_2$. |
| |
|
| $$ |
$$ |
| \begin{array}{lrl} |
\begin{array}{lrl} |
| S: & \cmd{begin} & [y] := [x] \\ |
S_2: & \cmd{begin} & [y] := [x] \\ |
| & 1: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~\cmd{end} \\ |
& 1: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~\cmd{end} \\ |
| & 2: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~6 \\ |
& 2: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~6 \\ |
| & 3: & [y] := [f_1(y)] \\ |
& 3: & [y] := [f_1(y)] \\ |
| & 4: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~2 \\ |
& 4: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~2 \\ |
| & 5: & \cmd{goto}~\cmd{end} \\ |
& 5: & \cmd{goto}~\cmd{end} \\ |
| & 6: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~10 \\ |
& 6: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~10 \\ |
| & 7: & [y] := [f_2(y)] \\ |
& 7: & [y] := [f_2(y)] \\ |
| & 8: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~\cmd{end} \\ |
& 8: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~\cmd{end} \\ |
| & 9: & \cmd{goto}~1 \\ |
& 9: & \cmd{goto}~1 \\ |
| & 10: & [y] := [f_3(y)] \\ |
& 10: & [y] := [f_3(y)] \\ |
| & 11: & \cmd{goto}~8 \\ |
& 11: & \cmd{goto}~8 \\ |
| & \cmd{end} & [z] := [y] \\ |
& \cmd{end} & [z] := [y] \\ |
| \end{array} |
\end{array} |
| $$ |
$$ |
| |
|
| Nájdite ku schéme $S$ ekvivalentnú voľnú schému $S_v$\HWwarn{3}. |
Nájdite ku~schéme~$S_2$ ekvivalentnú voľnú schému~$S_{2_v}$\HWwarn{3}. |
| |
|
| \end{example} % */ |
\end{example} % */ |
| |
|
| \begin{solution} % /* |
\begin{solution} % /* |
| |
|
| Riešením je schéma $S_v$. |
Riešením je schéma $S_{2_v}$. |
| |
|
| $$ |
$$ |
| \begin{array}{lrl} |
\begin{array}{lrl} |
| S_v: & \cmd{begin} & [y] := [x] \\ |
S_{2_v}: & \cmd{begin} & [y] := [x] \\ |
| & 1: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~\cmd{end} \\ |
& 1: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~\cmd{end} \\ |
| & 2: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~6 \\ |
& 2: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~6 \\ |
| & 3: & [y] := [f_1(y)] \\ |
& 3: & [y] := [f_1(y)] \\ |
| & 4: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~10 \\ |
& 4: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~10 \\ |
| & 5: & \cmd{goto}~\cmd{end} \\ |
& 5: & \cmd{goto}~\cmd{end} \\ |
| & 6: & [y] := [f_2(y)] \\ |
& 6: & [y] := [f_2(y)] \\ |
| & 7: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~\cmd{end} \\ |
& 7: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~\cmd{end} \\ |
| & 8: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~\cmd{end} \\ |
& 8: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~\cmd{end} \\ |
| & 9: & \cmd{goto}~3 \\ |
& 9: & \cmd{goto}~3 \\ |
| & 10: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~12 \\ |
& 10: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~12 \\ |
| & 11: & \cmd{goto}~3 \\ |
& 11: & \cmd{goto}~3 \\ |
| & 12: & [y] := [f_3(y)] \\ |
& 12: & [y] := [f_3(y)] \\ |
| & 13: & \cmd{goto}~7 \\ |
& 13: & \cmd{goto}~7 \\ |
| & \cmd{end} & [z] := [y] \\ |
& \cmd{end} & [z] := [y] \\ |
| \end{array} |
\end{array} |
| $$ |
$$ |
| |
|
| Schému $S_v$ sme našli pomocou vytvorenia vývojového diagramu pôvodnej schémy |
Schému $S_{2_v}$ sme našli pomocou vytvorenia vývojového diagramu pôvodnej |
| $S$ a jeho následných modifikácií vedúcich k zvoľneniu pri zachovaní |
schémy~$S_2$ a jeho následných modifikácií vedúcich k zvoľneniu pri zachovaní |
| ekvivalencie. Tento postup je štandardný. Nedoporučuje sa písať programový kód |
ekvivalencie. Tento postup je štandardný. Nedoporučuje sa písať programový kód |
| výslednej schémy priamo\footnote{pretoźe to ide naozaj len veľmi ťažko}. |
výslednej schémy priamo\footnote{pretože to ide naozaj len veľmi ťažko}. |
| |
|
| |
\end{solution} % */ |
| |
|
| |
\begin{example} % /* volnost III. |
| |
|
| |
Daná je štandardná schéma $S_3$. |
| |
|
| |
$$ |
| |
\begin{array}{lrl} |
| |
S_3: & \cmd{begin} & [y] := [x] \\ |
| |
& 1: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~9 \\ |
| |
& 2: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~5 \\ |
| |
& 3: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~8 \\ |
| |
& 4: & \cmd{goto}~2 \\ |
| |
& 5: & [y] := [f_1(y)] \\ |
| |
& 6: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~1 \\ |
| |
& 7: & \cmd{goto}~\cmd{end} \\ |
| |
& 8: & [y] := [f_2(y)] \\ |
| |
& 9: & [y] := [f_3(y)] \\ |
| |
& \cmd{end} & [z] := [y] \\ |
| |
\end{array} |
| |
$$ |
| |
|
| |
Nájdite ku~schéme~$S_3$ ekvivalentnú voľnú schému~$S_{3_v}$. |
| |
|
| |
\end{example} % */ |
| |
|
| |
\begin{solution} % /* |
| |
|
| |
Riešením úlohy je teda schéma $S_{3_v}$. |
| |
|
| |
$$ |
| |
\begin{array}{lrl} |
| |
S_{3_v}: & \cmd{begin} & [y] := [x] \\ |
| |
& 1: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~4 \\ |
| |
& 2: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~8 \\ |
| |
& 3: & \cmd{goto}~3 \\ |
| |
& 4: & \cmd{if}~ p(y) ~\cmd{then}~\cmd{goto}~8 \\ |
| |
& 5: & [y] := [f_1(y)] \\ |
| |
& 6: & \cmd{if}~ q(y) ~\cmd{then}~\cmd{goto}~1 \\ |
| |
& 7: & \cmd{goto}~\cmd{end} \\ |
| |
& 8: & [y] := [f_3(y)] \\ |
| |
& \cmd{end} & [z] := [y] \\ |
| |
\end{array} |
| |
$$ |
| |
|
| \end{solution} % */ |
\end{solution} % */ |
| |
|