pascalabcnet/PABCNetHelp/ForEducation/PT4/IO.html

472 lines
24 KiB
HTML

<html>
<head>
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="Keyword" value="PNode">
<param name="Keyword" value="TNode">
<param name="Keyword" value="Node">
<param name="Keyword" value="Task">
<param name="Keyword" value="GetB">
<param name="Keyword" value="GetC">
<param name="Keyword" value="GetN">
<param name="Keyword" value="GetR">
<param name="Keyword" value="GetS">
<param name="Keyword" value="GetP">
<param name="Keyword" value="PutB">
<param name="Keyword" value="PutC">
<param name="Keyword" value="PutN">
<param name="Keyword" value="PutR">
<param name="Keyword" value="PutS">
<param name="Keyword" value="PutP">
<param name="Keyword" value="GetBoolean">
<param name="Keyword" value="GetChar">
<param name="Keyword" value="GetInt">
<param name="Keyword" value="GetReal">
<param name="Keyword" value="GetString">
<param name="Keyword" value="GetNode">
<param name="Keyword" value="Put">
<param name="Keyword" value="Show">
<param name="Keyword" value="ShowLine">
<param name="Keyword" value="SetPrecision">
<param name="Keyword" value="HideTask">
</object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title></title>
<link rel="StyleSheet" href="../../default.css">
</head>
<body>
<h1>Ìîäóëü PT4</h1>
<hr>
<p>Îïèñàííûå â äàííîì ðàçäåëå òèïû è ïðîöåäóðû
áóäóò äîñòóïíû â ïðîãðàììå, åñëè ê íåé ñ ïîìîùüþ îïåðàòîðà <code><b>uses</b></code>
ïîäêëþ÷åí ìîäóëü <code>PT4</code> (ñì. <a href="..\CheckedTasks\checkedtasks1.htm">ïðèìåð</a> ïðîãðàììû, èñïîëüçóþùåé çàäà÷íèê
<b>Programming Taskbook</b>).
<a name="node"></a><h2>Äîïîëíèòåëüíûå òèïû äàííûõ PNode è TNode</h2>
<hr noshade size="1">
<blockquote>
<code><b>type</b><br>
&nbsp; PNode = ^TNode;<br>
&nbsp; TNode = <b>record</b><br>
&nbsp;&nbsp; Data: integer;<br>
&nbsp;&nbsp; Next: PNode;<br>
&nbsp;&nbsp; Prev: PNode;<br>
&nbsp;&nbsp; Left: PNode;<br>
&nbsp;&nbsp; Right: PNode;<br>
&nbsp;&nbsp; Parent: PNode;<br>
&nbsp; <b>end</b>;
</code></blockquote>
<p>Òèïû <code>PNode</code> è <code>TNode</code> èñïîëüçóþòñÿ â çàäàíèÿõ ãðóïï Dynamic è Tree.  çàäàíèÿõ íà ñòåêè è î÷åðåäè
(Dynamic1&#150;Dynamic28) ïðè ðàáîòå ñ çàïèñÿìè òèïà <code>TNode</code> èñïîëüçóþòñÿ òîëüêî ïîëÿ <code>Data</code> è <code>Next</code>;
â çàäàíèÿõ íà äâóñâÿçíûå ñïèñêè (Dynamic29&#150;Dynamic80) èñïîëüçóþòñÿ ïîëÿ <code>Data</code>, <code>Next</code> è <code>Prev</code>.
 áîëüøèíñòâå çàäàíèé íà áèíàðíûå äåðåâüÿ (ãðóïïà Tree) èñïîëüçóþòñÿ ïîëÿ <code>Data</code>, <code>Left</code> è <code>Right</code>;
â çàäàíèÿõ íà îáðàáîòêó áèíàðíûõ äåðåâüåâ ñ îáðàòíîé ñâÿçüþ (Tree48&#150;Tree56 è Tree70&#150;Tree71) äîïîëíèòåëüíî èñïîëüçóåòñÿ
ïîëå <code>Parent</code>.
</p>
<p>Âñå èñõîäíûå è ðåçóëüòèðóþùèå äàííûå-óêàçàòåëè â çàäàíèÿõ èìåþò òèï <code>PNode</code>;
èõ ââîä è âûâîä äîëæåí îñóùåñòâëÿòüñÿ ñ ïîìîùüþ ïðîöåäóð <code>GetP</code> è <code>PutP</code> (â ñèñòåìå <b>PascalABC.NET</b>
óêàçàòåëè, êàê è äðóãèå äàííûå,
ìîæíî ïîëó÷àòü èç çàäà÷íèêà è ïåðåäàâàòü åìó ñ ïîìîùüþ ñòàíäàðòíûõ ïðîöåäóð ââîäà-âûâîäà <code>read</code>
è <code>write</code>).
</p>
<p> ïðîãðàììå ó÷àùåãîñÿ íå ñëåäóåò ïîâòîðíî îïèñûâàòü òèïû <code>PNode</code> è <code>TNode</code>.
</p>
<h2>Èíèöèàëèçàöèÿ çàäàíèÿ, ââîä&#150;âûâîä äàííûõ</h2>
<a name="task"></a><hr noshade size="1">
<blockquote>
<code><b>procedure</b> Task(Name: <b>string</b>);
</code></blockquote>
<p>Ïðîöåäóðà èíèöèàëèçèðóåò çàäàíèå ñ èìåíåì <code>Name</code>. Îíà äîëæíà
âûçûâàòüñÿ â íà÷àëå ïðîãðàììû, âûïîëíÿþùåé ýòî çàäàíèå (äî âûçîâà
ïðîöåäóð ââîäà-âûâîäà). Åñëè â ïðîãðàììå, ïîäêëþ÷èâøåé
ìîäóëü <code>PT4</code>, íå óêàçàíà ïðîöåäóðà <code>Task</code>, òî ïðè çàïóñêå ïðîãðàììû
áóäåò âûâåäåíî îêíî ñ ñîîáùåíèåì &laquo;<i>Íå âûçâàíà ïðîöåäóðà Task ñ
èìåíåì çàäàíèÿ</i>&raquo;.</p>
<p>
Èìÿ çàäàíèÿ <code>Name</code> äîëæíî âêëþ÷àòü èìÿ òåìû è ïîðÿäêîâûé
íîìåð â ïðåäåëàõ òåìû (íàïðèìåð, <code>'Begin3'</code>). Ðåãèñòð áóêâ â èìåíè òåìû
ìîæåò áûòü ïðîèçâîëüíûì. Åñëè óêàçàíà íåâåðíàÿ òåìà çàäàíèÿ, òî
ïðîãðàììà âûâåäåò ñîîáùåíèå îá îøèáêå, â êîòîðîì áóäóò
ïåðå÷èñëåíû íàçâàíèÿ âñåõ èìåþùèõñÿ òåì. Åñëè óêàçàí
íåäîïóñòèìûé íîìåð çàäàíèÿ, òî ïðîãðàììà âûâåäåò ñîîáùåíèå, â
êîòîðîì áóäåò óêàçàí äèàïàçîí äîïóñòèìûõ íîìåðîâ äëÿ äàííîé òåìû.
Åñëè ïîñëå èìåíè çàäàíèÿ â ïàðàìåòðå <code>Name</code> óêàçàí ñèìâîë <code>?</code>
(íàïðèìåð, <code>'Begin1?'</code>), òî ïðîãðàììà áóäåò ðàáîòàòü â
<a href="Demo.html"><i>äåìîíñòðàöèîííîì ðåæèìå</i></a>.
</p>
<p>Íà÷èíàÿ ñ âåðñèè 4.8, ïðîöåäóðà <code>Task</code> ìîæåò òàêæå èñïîëüçîâàòüñÿ äëÿ
ãåíåðàöèè è âûâîäà íà ýêðàí html-ñòðàíèöû ñ òåêñòîì çàäàíèÿ èëè ãðóïïû çàäàíèé.
Äëÿ ýòîãî íåîáõîäèìî óêàçàòü â êà÷åñòâå ïàðàìåòðà <code>Name</code> èìÿ êîíêðåòíîãî çàäàíèÿ èëè ãðóïïû
çàäàíèé è ñèìâîë <code>#</code>, íàïðèìåð, <code>'Begin3#'</code> èëè
<code>'Begin#'</code>. Äîïîëíèòåëüíûå ñâåäåíèÿ î ãåíåðàöèè html-ñòðàíèö ñ îïèñàíèÿìè çàäàíèé ïðèâîäÿòñÿ
â ðàçäåëå, ïîñâÿùåííîì äåìîíñòðàöèîííîìó ðåæèìó çàäà÷íèêà.
</p>
<p>Åñëè ïðè ïåðâîì âûçîâå ïðîöåäóðû <code>Task</code> â ïàðàìåòðå íå óêàçûâàåòñÿ ñèìâîë <code>#</code>, òî
âñå ïîñëåäóþùèå âûçîâû ïðîöåäóðû <code>Task</code> èãíîðèðóþòñÿ. Åñëè ïðè ïåðâîì âûçîâå ïðîöåäóðû
<code>Task</code> â ïàðàìåòðå óêàçûâàåòñÿ ñèìâîë <code>#</code>,
òî èãíîðèðóþòñÿ âñå ïîñëåäóþùèå âûçîâû ïðîöåäóðû <code>Task</code>, íå ñîäåðæàùèå ýòîò ñèìâîë.
Ñ ïîìîùüþ íåñêîëüêèõ âûçîâîâ ïðîöåäóðû <code>Task</code>, ñîäåðæàùåé â ïàðàìåòðå ñèìâîë <code>#</code>, ìîæíî îáåñïå÷èòü
ãåíåðàöèþ html-ñòðàíèöû ñ îïèñàíèåì íåñêîëüêèõ ãðóïï çàäàíèé, ïðè÷åì â êàæäîé ãðóïïå ïðè ýòîì ìîæíî îòîáðàæàòü òîëüêî
íåêîòîðûå çàäàíèÿ.
</p>
<hr noshade size="1">
<blockquote>
<code>
<b>procedure</b> GetB(<b>var</b> X: boolean);<br>
<b>procedure</b> GetC(<b>var</b> X: char);<br>
<b>procedure</b> GetN(<b>var</b> X: integer);<br>
<b>procedure</b> GetR(<b>var</b> X: real);<br>
<b>procedure</b> GetS(<b>var</b> X: string);<br>
<b>procedure</b> GetP(<b>var</b> X: PNode);<br>
</code></blockquote>
<p>
Ïðîöåäóðû îáåñïå÷èâàþò ââîä èñõîäíûõ äàííûõ â ïðîãðàììó,
âûïîëíÿþùóþ ó÷åáíîå çàäàíèå. Îíè äîëæíû âûçûâàòüñÿ ïîñëå âûçîâà
ïðîöåäóðû <code>Task</code>;
â ñëó÷àå èõ âûçîâà äî âûçîâà ïðîöåäóðû <code>Task</code> ïðè çàïóñêå ïðîãðàììû
áóäåò âûâåäåíî ñîîáùåíèå îá îøèáêå &laquo;<i> íà÷àëå ïðîãðàììû íå
âûçâàíà ïðîöåäóðà Task ñ èìåíåì çàäàíèÿ</i>&raquo;.</p>
<p>Èñïîëüçóåìàÿ ïðîöåäóðà ââîäà äîëæíà ñîîòâåòñòâîâàòü òèïó
î÷åðåäíîãî ýëåìåíòà èñõîäíûõ äàííûõ; â ïðîòèâíîì ñëó÷àå âûâîäèòñÿ
ñîîáùåíèå îá îøèáêå &laquo;<i>Íåâåðíî óêàçàí òèï ïðè ââîäå èñõîäíûõ
äàííûõ</i>&raquo; (òàêîå ñîîáùåíèå áóäåò âûâåäåíî, íàïðèìåð, åñëè î÷åðåäíîé
ýëåìåíò äàííûõ ÿâëÿåòñÿ ñèìâîëîì, à äëÿ åãî ââîäà èñïîëüçóåòñÿ
ïðîöåäóðà <code>GetN</code>).</p>
<p>Ïðè ïîïûòêå ââåñòè áîëüøå èñõîäíûõ äàííûõ, ÷åì ýòî
ïðåäóñìîòðåíî â çàäàíèè, âûâîäèòñÿ ñîîáùåíèå îá îøèáêå &laquo;<i>Ïîïûòêà
ââåñòè ëèøíèå èñõîäíûå äàííûå</i>&raquo;. Åñëè èñõîäíûå äàííûå,
íåîáõîäèìûå äëÿ ðåøåíèÿ çàäàíèÿ, ââåäåíû íå ïîëíîñòüþ, òî
âûâîäèòñÿ ñîîáùåíèå &laquo;<i>Ââåäåíû íå âñå òðåáóåìûå èñõîäíûå äàííûå</i>&raquo;.</p>
<p>Ïðè èñïîëüçîâàíèè çàäà÷íèêà â ñèñòåìå <b>PascalABC.NET</b> âìåñòî ïðîöåäóð ãðóïïû <code>Get</code>
ìîæíî èñïîëüçîâàòü îáû÷íûå ïðîöåäóðû ââîäà <code>read</code>.
<hr noshade size="1">
<blockquote>
<code>
<b>procedure</b> PutB(X: boolean);<br>
<b>procedure</b> PutC(X: char);<br>
<b>procedure</b> PutN(X: integer);<br>
<b>procedure</b> PutR(X: real);<br>
<b>procedure</b> PutS(X: string);<br>
<b>procedure</b> PutP(X: PNode);<br>
</code></blockquote>
<p>
Ïðîöåäóðû îáåñïå÷èâàþò âûâîä íà ýêðàí ðåçóëüòèðóþùèõ
äàííûõ, íàéäåííûõ ïðîãðàììîé, è èõ ñðàâíåíèå ñ <i>êîíòðîëüíûìè
äàííûìè</i> (òî åñòü ñ ïðàâèëüíûì ðåøåíèåì). Êàê è ïðîöåäóðû ãðóïïû
<code>Get</code>, ýòè ïðîöåäóðû äîëæíû âûçûâàòüñÿ ïîñëå âûçîâà ïðîöåäóðû <code>Task</code>;
â ïðîòèâíîì ñëó÷àå ïðè çàïóñêå ïðîãðàììû áóäåò âûâåäåíî ñîîáùåíèå
îá îøèáêå «<i> íà÷àëå ïðîãðàììû íå âûçâàíà ïðîöåäóðà Task
ñ èìåíåì çàäàíèÿ</i>».</p>
<p> îòëè÷èå îò ïðîöåäóð ãðóïïû <code>Get</code>, â êà÷åñòâå ïàðàìåòðà ïðîöåäóð
ãðóïïû <code>Put</code> ìîæíî óêàçûâàòü íå òîëüêî ïåðåìåííûå, íî è <i>âûðàæåíèÿ</i>
÷àñòíîñòè, <i>êîíñòàíòû</i> ñîîòâåòñòâóþùåãî òèïà). Èñïîëüçóåìàÿ
ïðîöåäóðà äîëæíà ñîîòâåòñòâîâàòü òèïó î÷åðåäíîãî ýëåìåíòà
ðåçóëüòèðóþùèõ äàííûõ, â ïðîòèâíîì ñëó÷àå âûâîäèòñÿ ñîîáùåíèå îá
îøèáêå «<i>Íåâåðíî óêàçàí òèï ïðè âûâîäå ðåçóëüòàòîâ</i>».</p>
<p>Êàê è â ñëó÷àå ïðîöåäóð ãðóïïû <code>Get</code>, ïðè âûçîâàõ ïðîöåäóð
ãðóïïû <code>Put</code> ïðîãðàììà îñóùåñòâëÿåò êîíòðîëü çà ñîîòâåòñòâèåì
êîëè÷åñòâà òðåáóåìûõ è âûâåäåííûõ ðåçóëüòèðóþùèõ äàííûõ. Åñëè
ïðîãðàììà âûâåäåò íåäîñòàòî÷íîå èëè èçáûòî÷íîå êîëè÷åñòâî
ðåçóëüòèðóþùèõ äàííûõ, òî ïîñëå ïðîâåðêè ýòèõ äàííûõ ïîÿâèòñÿ
ñîîáùåíèå «<i>Âûâåäåíû íå âñå ðåçóëüòèðóþùèå äàííûå</i>» èëè,
ñîîòâåòñòâåííî, «<i>Ïîïûòêà âûâåñòè ëèøíèå ðåçóëüòèðóþùèå äàííûå</i>».
<p>Ïðè èñïîëüçîâàíèè çàäà÷íèêà â ñèñòåìå <b>PascalABC.NET</b> âìåñòî ïðîöåäóð ãðóïïû <code>Put</code>
ìîæíî èñïîëüçîâàòü îáû÷íûå ïðîöåäóðû âûâîäà <code>write</code>.
<hr noshade size="1">
<blockquote>
<code>
<b>procedure</b> Dispose(<b>var</b> P: PNode);
</code></blockquote>
<p>
Äàííàÿ ïðîöåäóðà ïåðåîïðåäåëÿåò ñòàíäàðòíóþ ïðîöåäóðó <code>Dispose</code> äëÿ òîãî, ÷òîáû
êîíòðîëèðîâàòü äåéñòâèÿ ó÷àùåãîñÿ ïî îñâîáîæäåíèþ ïàìÿòè ïðè âûïîëíåíèè çàäàíèé ãðóïï Dynamic è Tree.</p>
<h2>Êëàññ Node è àëüòåðíàòèâíûé ââîä&#150;âûâîä â ñòèëå .NET</h2>
<p> âàðèàíòå çàäà÷íèêà <b>Programming Taskbook</b>, âêëþ÷åííîì â ñèñòåìó <b>PascalABC.NET</b>, ïðåäóñìîòðåí
àëüòåðíàòèâíûé ñïîñîá îðãàíèçàöèè ââîäà-âûâîäà, õàðàêòåðíûé íå äëÿ òðàäèöèîííîãî Ïàñêàëÿ,
à äëÿ ÿçûêîâ ïëàòôîðìû .NET. Íàëè÷èå äâóõ ñïîñîáîâ ââîäà-âûâîäà îáóñëîâëåíî òåì îáñòîÿòåëüñòâîì, ÷òî
ñèñòåìà <b>PascalABC.NET</b> ïîçâîëÿåò ðàçðàáàòûâàòü ïðîãðàììû êàê â ñòèëå, õàðàêòåðíîì äëÿ
òðàäèöèîííîãî Ïàñêàëÿ, òàê è â .NET-ñòèëå, îðèåíòèðîâàííîì íà èñïîëüçîâàíèå ñòàíäàðòíûõ ñðåäñòâ ïëàòôîðìû
.NET, â òîì ÷èñëå åå áèáëèîòåêè êëàññîâ.
</p>
<p>Êðîìå íîâûõ ñðåäñòâ ââîäà-âûâîäà â âàðèàíòå çàäà÷íèêà äëÿ ñèñòåìû <b>PascalABC.NET</b> ïðåäóñìîòðåí
êëàññ <code>Node</code>, êîòîðûé ñëåäóåò èñïîëüçîâàòü âìåñòî òèïîâ <code>PNode</code> è <code>TNode</code> ïðè
âûïîëíåíèè çàäàíèé íà äèíàìè÷åñêèå ñòðóêòóðû &laquo;â îáúåêòíîì ñòèëå&raquo;. Çàìåòèì, ÷òî â ýòîì ñëó÷àå
íåîáõîäèìî ïîëüçîâàòüñÿ ãðóïïàìè ObjDyn è ObjTree, â êîòîðûõ (â îòëè÷èå îò ãðóïï Dynamic è Tree)
ïðèìåíÿåòñÿ &laquo;îáúåêòíàÿ&raquo; òåðìèíîëîãèÿ, îðèåíòèðîâàííàÿ íà ïðèìåíåíèå êëàññîâ ïëàòôîðìû .NET.
</p>
<hr noshade size="1">
<blockquote>
<code><b>type</b><br>
&nbsp; Node = <b>class</b>(IDisposable)<br>
&nbsp;&nbsp;. . .<br>
&nbsp;&nbsp;<b>public</b><br>
&nbsp;&nbsp;// <i>Êîíñòðóêòîðû:</i><br>
&nbsp; &nbsp; <b>constructor</b> Create;<br>
&nbsp; &nbsp; <b>constructor</b> Create(aData: integer);<br>
&nbsp; &nbsp; <b>constructor</b> Create(aData: integer; aNext: Node);<br>
&nbsp; &nbsp; <b>constructor</b> Create(aData: integer; aNext, aPrev: Node);<br>
&nbsp; &nbsp; <b>constructor</b> Create(aLeft, aRight: Node; aData: integer);<br>
&nbsp; &nbsp; <b>constructor</b> Create(aLeft, aRight: Node; aData: integer; aParent: Node);<br>
&nbsp;&nbsp;// <i>Ñâîéñòâà (äîñòóïíû äëÿ ÷òåíèÿ è çàïèñè):</i><br>
&nbsp; &nbsp; <b>property</b> Data: integer;<br>
&nbsp; &nbsp; <b>property</b> Next: Node;<br>
&nbsp; &nbsp; <b>property</b> Prev: Node;<br>
&nbsp; &nbsp; <b>property</b> Left: Node;<br>
&nbsp; &nbsp; <b>property</b> Right: Node;<br>
&nbsp; &nbsp; <b>property</b> Parent: Node;<br>
&nbsp;&nbsp;// <i>Ìåòîä, îñâîáîæäàþùèé ðåñóðñû, èñïîëüçóåìûå îáúåêòîì Node:</i><br>
&nbsp; &nbsp; <b>procedure</b> Dispose;<br>
&nbsp; <b>end</b>;
</code></blockquote>
<p>Êëàññ <code>Node</code> èñïîëüçóåòñÿ â çàäàíèÿõ ãðóïï ObjDyn è ObjTree. Â çàäàíèÿõ íà
ñòåêè è î÷åðåäè (ObjDyn1&#150;ObjDyn28) ïðè ðàáîòå ñ îáúåêòàìè òèïà <code>Node</code>
èñïîëüçóþòñÿ òîëüêî ñâîéñòâà <code>Data</code> è <code>Next</code>; â çàäàíèÿõ íà äâóñâÿçíûå ñïèñêè
(ObjDyn29&#150;ObjDyn80) èñïîëüçóþòñÿ ñâîéñòâà <code>Data</code>, <code>Next</code> è <code>Prev</code>. Â áîëüøèíñòâå çàäàíèé íà
áèíàðíûå äåðåâüÿ (ãðóïïà ObjTree) èñïîëüçóþòñÿ ñâîéñòâà <code>Data</code>, <code>Left</code> è <code>Right</code>;
â çàäàíèÿõ íà îáðàáîòêó áèíàðíûõ äåðåâüåâ ñ îáðàòíîé ñâÿçüþ
(ObjTree48&#150;ObjTree56 è ObjTree70&#150;ObjTree71) äîïîëíèòåëüíî èñïîëüçóåòñÿ ñâîéñòâî <code>Parent</code>.
</p>
<p>Âàðèàíòû êîíñòðóêòîðà êëàññà <code>Node</code> ïîçâîëÿþò çàäàâàòü çíà÷åíèÿ òðåáóåìûõ ñâîéñòâ ïðè ñîçäàíèè
îáúåêòà; ïðî÷èå ñâîéñòâà èíèöèàëèçèðóþòñÿ íóëåâûìè çíà÷åíèÿìè
(÷èñëîì&nbsp;0 äëÿ ñâîéñòâà <code>Data</code>, íóëåâîé ññûëêîé <code>nil</code> äëÿ îñòàëüíûõ ñâîéñòâ).
</p>
<p>Ñëåäóåò îáðàòèòü âíèìàíèå íà òî, ÷òî äàííûé êëàññ ðåàëèçóåò èíòåðôåéñ
<code>IDisposable</code>, ïîýòîìó ïðè çàâåðøåíèè ðàáîòû ñ îáúåêòîì òèïà <code>Node</code> òðåáóåòñÿ âûçâàòü
åãî ìåòîä <code>Dispose</code>, îñâîáîæäàþùèé <i>íåóïðàâëÿåìûå ðåñóðñû</i>, âûäåëåííûå äëÿ ýòîãî
îáúåêòà (èñêëþ÷åíèå äåëàåòñÿ òîëüêî äëÿ òåõ îáúåêòîâ, êîòîðûå ïåðåäàþòñÿ îáðàòíî
çàäà÷íèêó â êà÷åñòâå ðåçóëüòèðóþùèõ äàííûõ). Åñëè â çàäàíèè òðåáóåòñÿ âûçâàòü
ìåòîä <code>Dispose</code> äëÿ íåêîòîðûõ îáúåêòîâ, íî ýòîò âûçîâ íå âûïîëíÿåòñÿ, òî ïðè çàïóñêå
ïðîãðàììû âûâîäèòñÿ ñîîáùåíèå îá îøèáêå &laquo;<i>Íå âûçâàí ìåòîä Dispose äëÿ
îáúåêòà òèïà Node</i>&raquo;.
</p>
<p>Âñå èñõîäíûå è ðåçóëüòèðóþùèå äàííûå-ññûëêè â çàäàíèÿõ ãðóïïû ObjDyn è ObjTree
èìåþò òèï <code>Node</code>; èõ ââîä è âûâîä äîëæåí îñóùåñòâëÿòüñÿ ñ ïîìîùüþ ôóíêöèè
<code>GetNode</code> è ïðîöåäóðû <code>Put</code>, îïèñàííûõ íèæå.
</p>
<hr noshade size="1">
<blockquote>
<code>
<b>function</b> GetBoolean: boolean;<br>
<b>function</b> GetChar: char;<br>
<b>function</b> GetInt: integer;<br>
<b>function</b> GetNode: Node;<br>
<b>function</b> GetReal: real;<br>
<b>function</b> GetString: string;<br>
</code></blockquote>
<p>Ôóíêöèè îáåñïå÷èâàþò ââîä èñõîäíûõ äàííûõ â ïðîãðàììó,
âûïîëíÿþùóþ ó÷åáíîå çàäàíèå, ïðè÷åì ââîä îðãàíèçóåòñÿ â ñòèëå,
õàðàêòåðíîì äëÿ ïëàòôîðìû .NET (ïîñêîëüêó
â ñòàíäàðòíîé áèáëèîòåêå .NET ââîä äàííûõ <i>âñåãäà</i> âûïîëíÿåòñÿ ñ ïîìîùüþ ôóíêöèé).
Ýòè ôóíêöèè äîëæíû âûçûâàòüñÿ ïîñëå âûçîâà ïðîöåäóðû <code>Task</code>;
â ñëó÷àå èõ âûçîâà äî âûçîâà ïðîöåäóðû <code>Task</code> ïðè çàïóñêå ïðîãðàììû áóäåò âûâåäåíî
ñîîáùåíèå îá îøèáêå &laquo;<i> íà÷àëå ïðîãðàììû íå âûçâàíà ïðîöåäóðà Task ñ
èìåíåì çàäàíèÿ</i>&raquo;.
</p>
<p>Èñïîëüçóåìàÿ ôóíêöèÿ ââîäà äîëæíà ñîîòâåòñòâîâàòü òèïó î÷åðåäíîãî ýëåìåíòà
èñõîäíûõ äàííûõ; â ïðîòèâíîì ñëó÷àå âûâîäèòñÿ ñîîáùåíèå îá îøèáêå
&laquo;<i>Íåâåðíî óêàçàí òèï ïðè ââîäå èñõîäíûõ äàííûõ</i>&raquo; (òàêîå ñîîáùåíèå
áóäåò âûâåäåíî, íàïðèìåð, åñëè î÷åðåäíîé ýëåìåíò äàííûõ ÿâëÿåòñÿ ñèìâîëîì, à äëÿ
åãî ââîäà èñïîëüçóåòñÿ ôóíêöèÿ <code>GetInt</code>).
</p>
<p>Ïðè ïîïûòêå ââåñòè áîëüøå èñõîäíûõ äàííûõ, ÷åì ýòî ïðåäóñìîòðåíî â
çàäàíèè, âûâîäèòñÿ ñîîáùåíèå îá îøèáêå &laquo;<i>Ïîïûòêà ââåñòè ëèøíèå èñõîäíûå
äàííûå</i>&raquo;. Åñëè èñõîäíûå äàííûå, íåîáõîäèìûå äëÿ ðåøåíèÿ çàäàíèÿ, ââåäåíû
íå ïîëíîñòüþ, òî âûâîäèòñÿ ñîîáùåíèå &laquo;<i>Ââåäåíû íå âñå òðåáóåìûå èñõîäíûå
äàííûå</i>&raquo;.
</p>
<hr noshade size="1">
<blockquote>
<code>
<b>procedure</b> Put(<b>params</b> A: <b>array of</b> object);
</code></blockquote>
<p>Ïðîöåäóðà <code>Put</code> îáåñïå÷èâàåò âûâîä íà ýêðàí ðåçóëüòèðóþùèõ äàííûõ, íàéäåííûõ
ïðîãðàììîé, è èõ ñðàâíåíèå ñ <i>êîíòðîëüíûìè äàííûìè</i> (òî åñòü ñ ïðàâèëüíûì
ðåøåíèåì). Êàê è îïèñàííûå âûøå ôóíêöèè ãðóïïû <code>Get</code>, ïðîöåäóðà <code>Put</code> äîëæíà âûçûâàòüñÿ ïîñëå âûçîâà
ïðîöåäóðû <code>Task</code>; â ïðîòèâíîì ñëó÷àå ïðè çàïóñêå ïðîãðàììû áóäåò âûâåäåíî ñîîáùåíèå
îá îøèáêå &laquo;<i> íà÷àëå ïðîãðàììû íå âûçâàíà ïðîöåäóðà Task ñ èìåíåì
çàäàíèÿ</i>&raquo;.
</p>
<p>Áëàãîäàðÿ èñïîëüçîâàíèþ ïàðàìåòðà-ìàññèâà, ñíàáæåííîãî àòðèáóòîì <code><b>params</b></code>,
ïðè âûçîâå ïðîöåäóðû <code>Put</code> ìîæíî óêàçûâàòü <i>ïðîèçâîëüíîå</i> ÷èñëî ïàðàìåòðîâ. Ïàðàìåòðû
ìîãóò èìåòü òèï <code>boolean</code>, <code>integer</code>, <code>real</code>, <code>char</code>, <code>string</code>, <code>Node</code>.
 êà÷åñòâå ïàðàìåòðîâ ïðîöåäóðû <code>Put</code>
ìîæíî óêàçûâàòü íå òîëüêî ïåðåìåííûå, íî è <i>âûðàæåíèÿ</i> (â ÷àñòíîñòè, <i>êîíñòàíòû</i>
ñîîòâåòñòâóþùåãî òèïà, à òàêæå <i>íóëåâóþ ññûëêó</i> <code>nil</code>. Çàìåòèì, ÷òî íóëåâûå ññûëêè, êàê è îáúåêòû òèïà <code>Node</code>, òðåáóåòñÿ
âûâîäèòü òîëüêî â çàäàíèÿõ ãðóïï ObjDyn è ObjTree. Åñëè â ñïèñêå ïàðàìåòðîâ óêàçûâàþòñÿ
ïàðàìåòðû íåäîïóñòèìîãî òèïà, òî ïðè âûïîëíåíèè ïðîãðàììû âûâîäèòñÿ
ñîîáùåíèå îá îøèáêå &laquo;<i>Â ìåòîäå Put óêàçàí ïàðàìåòð íåäîïóñòèìîãî
òèïà</i>&raquo;.
</p>
<p>Òèï ïàðàìåòðà äîëæåí íå òîëüêî áûòü äîïóñòèìûì, íî è ñîîòâåòñòâîâàòü òèïó
î÷åðåäíîãî ýëåìåíòà ðåçóëüòèðóþùèõ äàííûõ; â ïðîòèâíîì ñëó÷àå âûâîäèòñÿ
ñîîáùåíèå îá îøèáêå &laquo;<i>Íåâåðíî óêàçàí òèï ïðè âûâîäå ðåçóëüòàòîâ</i>&raquo;.
</p>
<p>Êàê è â ñëó÷àå ôóíêöèé ãðóïïû <code>Get</code>, ïðè âûçîâàõ ïðîöåäóðû <code>Put</code> ïðîãðàììà
îñóùåñòâëÿåò êîíòðîëü çà ñîîòâåòñòâèåì êîëè÷åñòâà òðåáóåìûõ è âûâåäåííûõ
ðåçóëüòèðóþùèõ äàííûõ. Åñëè ïðîãðàììà âûâåäåò íåäîñòàòî÷íîå èëè èçáûòî÷íîå
êîëè÷åñòâî ðåçóëüòèðóþùèõ äàííûõ, òî ïîñëå ïðîâåðêè ýòèõ äàííûõ ïîÿâèòñÿ
ñîîáùåíèå &laquo;<i>Âûâåäåíû íå âñå ðåçóëüòèðóþùèå äàííûå</i>&raquo; èëè,
ñîîòâåòñòâåííî, &laquo;<i>Ïîïûòêà âûâåñòè ëèøíèå ðåçóëüòèðóþùèå äàííûå</i>&raquo;.
</p>
<a name="debug"></a><h2>Âûâîä îòëàäî÷íîé èíôîðìàöèè
</h2>
<p>Îïèñûâàåìûå äàëåå îòëàäî÷íûå ñðåäñòâà ïîÿâèëèñü â âåðñèè 4.9 çàäà÷íèêà Programming Taskbook.
Ñ èõ ïîìîùüþ ìîæíî âûâîäèòü îòëàäî÷íóþ èíôîðìàöèþ
íåïîñðåäñòâåííî â îêíî çàäà÷íèêà (â ñïåöèàëüíûé <a href="debug.html"><i>ðàçäåë îòëàäêè</i></a>).</p>
<a name="show"></a>
<hr noshade size="1">
<blockquote>
<code><b>procedure</b> Show(S: string);
</code></blockquote>
<p>Îòîáðàæàåò òåêñòîâóþ ñòðîêó <code>S</code> â ðàçäåëå îòëàäêè îêíà çàäà÷íèêà.
</p>
<p>Åñëè òåêóùàÿ ýêðàííàÿ ñòðîêà â ðàçäåëå îòëàäêè óæå ñîäåðæèò íåêîòîðûé òåêñò, òî
ñòðîêà <code>S</code> ñíàáæàåòñÿ íà÷àëüíûì ïðîáåëîì è ïðèïèñûâàåòñÿ ê ýòîìó òåêñòó,
çà èñêëþ÷åíèåì ñëó÷àÿ, êîãäà ïðè òàêîì ïðèïèñûâàíèè ðàçìåð
ïîëó÷åííîãî òåêñòà ïðåâûñèò øèðèíó îáëàñòè äàííûõ (ðàâíóþ 80&nbsp;ñèìâîëàì).
 ïîñëåäíåì ñëó÷àå âûâîä ñòðîêè <code>S</code> îñóùåñòâëÿåòñÿ ñ íà÷àëà
ñëåäóþùåé ýêðàííîé ñòðîêè; åñëè æå è â ýòîé ñèòóàöèè ñòðîêà <code>S</code> ïðåâûñèò
øèðèíó îáëàñòè äàííûõ, òî ñòðîêà <code>S</code> áóäåò âûâåäåíà íà íåñêîëüêèõ
ýêðàííûõ ñòðîêàõ, ïðè÷åì ðàçðûâû òåêñòà áóäóò âûïîëíÿòüñÿ ïî
ïðîáåëüíûì ñèìâîëàì ñòðîêè <code>S</code>, à ïðè îòñóòñòâèè ïðîáåëîâ &#151; ïðè
äîñòèæåíèè î÷åðåäíîãî ôðàãìåíòà ñòðîêè äëèíû, ðàâíîé 80.
</p>
<p>Ñòðîêà <code>S</code> ìîæåò ñîäåðæàòü ÿâíûå êîìàíäû ïåðåõîäà íà íîâóþ
ýêðàííóþ ñòðîêó.  êà÷åñòâå òàêèõ êîìàíä ìîæíî èñïîëüçîâàòü èëè
ñèìâîë ñ êîäîì 13 (&laquo;âîçâðàò êàðåòêè&raquo;), èëè ñèìâîë ñ êîäîì 10 (&laquo;ïåðåõîä íà íîâóþ
ñòðîêó&raquo;), èëè èõ êîìáèíàöèþ â
óêàçàííîì ïîðÿäêå (<code>#13#10</code>).
</p>
<a name="shownumber"></a>
<hr noshade size="1">
<blockquote>
<code><b>procedure</b> Show(<b>[</b>S: string;<b>]</b> A: integer<b>[</b>; W: integer<b>]</b>);<br>
<b>procedure</b> Show(<b>[</b>S: string;<b>]</b> A: real<b>[</b>; W: integer<b>]</b>);
</code></blockquote>
<p>Ïåðåãðóæåííûå âàðèàíòû ïðîöåäóðû Show, ïðåäíàçíà÷åííûå äëÿ âûâîäà ÷èñëîâûõ îòëàäî÷íûõ äàííûõ.
Èñïîëüçîâàíèå ýòèõ âàðèàíòîâ ïîçâîëÿåò ìàêñèìàëüíî óïðîñòèòü äåéñòâèÿ
ó÷àùåãîñÿ, ñâÿçàííûå ñ âûâîäîì ÷èñëîâûõ äàííûõ, ïîñêîëüêó èçáàâëÿåò
åãî îò íåîáõîäèìîñòè ïðèìåíÿòü ñòàíäàðòíûå ñðåäñòâà ÿçûêà Pascal,
ïðåäíàçíà÷åííûå äëÿ ïðåîáðàçîâàíèÿ ÷èñåë â èõ ñòðîêîâûå
ïðåäñòàâëåíèÿ.
</p>
<p>Ïðè âûçîâå ïðèâåäåííûõ âàðèàíòîâ ìîæíî íå óêàçûâàòü îäèí èëè îáà ïàðàìåòðà,
çàêëþ÷åííûå â êâàäðàòíûå ñêîáêè.
</p>
<p>Ñòðîêîâûé ïàðàìåòð <code>S</code> îïðåäåëÿåò íåîáÿçàòåëüíûé êîììåíòàðèé,
êîòîðûé óêàçûâàåòñÿ ïåðåä âûâîäèìûì ÷èñëîì; åñëè ïàðàìåòð <code>S</code>
îòñóòñòâóåò, òî êîììåíòàðèé ïîëàãàåòñÿ ðàâíûì ïóñòîé ñòðîêå.
</p>
<p>×èñëîâîé ïàðàìåòð <code>A</code> îïðåäåëÿåò âûâîäèìîå ÷èñëî.
</p>
<p>Íåîáÿçàòåëüíûé öåëî÷èñëåííûé ïàðàìåòð <code>W</code> îïðåäåëÿåò
<i>øèðèíó ïîëÿ âûâîäà</i> (ò.&nbsp;å. êîëè÷åñòâî ýêðàííûõ
ïîçèöèé, îòâîäèìîå äëÿ âûâîäà ÷èñëà). Åñëè óêàçàííîé øèðèíû <code>W</code> ïîëÿ âûâîäà íåäîñòàòî÷íî, òî
çíà÷åíèå ïàðàìåòðà <code>W</code> èãíîðèðóåòñÿ; â ýòîì ñëó÷àå (à òàêæå â ñëó÷àå, åñëè ïàðàìåòð <code>W</code> îòñóòñòâóåò)
èñïîëüçóåòñÿ øèðèíà ïîëÿ âûâîäà, ìèíèìàëüíî íåîáõîäèìàÿ äëÿ
îòîáðàæåíèÿ äàííîãî ÷èñëà. Åñëè ÷èñëî íå çàíèìàåò âñåãî ïîëÿ âûâîäà, òî
îíî äîïîëíÿåòñÿ ñëåâà ïðîáåëàìè (ò.&nbsp;å. âûðàâíèâàåòñÿ ïî
<i>ïðàâîé</i> ãðàíèöå ïîëÿ âûâîäà).  êà÷åñòâå äåñÿòè÷íîãî ðàçäåëèòåëÿ
äëÿ ÷èñåë ñ äðîáíîé ÷àñòüþ èñïîëüçóåòñÿ <i>òî÷êà</i>.
</p>
<p>Âåùåñòâåííûå ÷èñëà ïî óìîë÷àíèþ âûâîäÿòñÿ â ôîðìàòå ñ
ôèêñèðîâàííîé òî÷êîé è äâóìÿ äðîáíûìè çíàêàìè. Èçìåíèòü ôîðìàò
âûâîäà âåùåñòâåííûõ ÷èñåë ìîæíî ñ ïîìîùüþ âñïîìîãàòåëüíîé
ïðîöåäóðû <code>SetPrecision</code>, îïèñûâàåìîé äàëåå.
</p>
<a name="showline"></a>
<hr noshade size="1">
<blockquote>
<code><b>procedure</b> ShowLine(<b>[</b>S: string<b>]</b>);<br>
<b>procedure</b> ShowLine(<b>[</b>S: string;<b>]</b> A: integer<b>[</b>; W: integer<b>]</b>);<br>
<b>procedure</b> ShowLine(<b>[</b>S: string;<b>]</b> A: real<b>[</b>; W: integer<b>]</b>);<br>
</code></blockquote>
<p>Ìîäèôèêàöèè ðàíåå îïèñàííûõ ïðîöåäóð <code>Show</code>; ïîñëå âûâîäà óêàçàííûõ äàííûõ â ðàçäåë îòëàäêè
äîïîëíèòåëüíî îñóùåñòâëÿþò àâòîìàòè÷åñêèé ïåðåõîä íà ñëåäóþùóþ ýêðàííóþ ñòðîêó.
Ñìûñë ïàðàìåòðîâ &#151; òîò æå, ÷òî è äëÿ ñîîòâåòñòâóþùèõ âàðèàíòîâ ïðîöåäóðû <code>Show</code>.
Ïàðàìåòðû, óêàçàííûå â êâàäðàòíûõ ñêîáêàõ, ìîãóò îòñóòñòâîâàòü.
Åñëè ïðîöåäóðà <code>ShowLine</code> âûçûâàåòñÿ áåç ïàðàìåòðîâ, òî îíà
ïðîñòî îáåñïå÷èâàåò ïåðåõîä íà íîâóþ ýêðàííóþ ñòðîêó â ðàçäåëå îòëàäêè.
</p>
<a name="hidetask"></a>
<hr noshade size="1">
<blockquote>
<code><b>procedure</b> HideTask;
</code></blockquote>
<p>Âûçîâ äàííîé ïðîöåäóðû îáåñïå÷èâàåò àâòîìàòè÷åñêîå ñêðûòèå âñåõ ðàçäåëîâ îêíà
çàäà÷íèêà, êðîìå ðàçäåëà îòëàäêè. Åñëè ðàçäåë îòëàäêè â îêíå çàäà÷íèêà
íå îòîáðàæàåòñÿ (â ÷àñòíîñòè, åñëè ïðîãðàììà çàïóùåíà â
äåìîíñòðàöèîííîì ðåæèìå), òî âûçîâ ïðîöåäóðû <code>HideTask</code> èãíîðèðóåòñÿ.
Èãíîðèðóþòñÿ òàêæå âñå ïîâòîðíûå âûçîâû äàííîé ïðîöåäóðû.
</p>
<p>Ñêðûòü/âîññòàíîâèòü îñíîâíûå ðàçäåëû îêíà
çàäà÷íèêà ïîñëå åãî îòîáðàæåíèÿ íà ýêðàíå ìîæíî òàêæå ñ ïîìîùüþ êëàâèøè
ïðîáåëà èëè ñîîòâåòñòâóþùåé êîìàíäû êîíòåêñòíîãî ìåíþ ðàçäåëà
îòëàäêè.
</p>
<a name="setprecision"></a>
<hr noshade size="1">
<blockquote>
<code><b>procedure</b> SetPrecision(N: integer);
</code></blockquote>
<p>Ïðîöåäóðà ïðåäíàçíà÷åíà äëÿ íàñòðîéêè ôîðìàòà âûâîäà
<i>âåùåñòâåííûõ</i> îòëàäî÷íûõ äàííûõ. Åñëè ïàðàìåòð <code>N</code> ïîëîæèòåëåí, òî îí
îïðåäåëÿåò êîëè÷åñòâî âûâîäèìûõ äðîáíûõ ðàçðÿäîâ; ïðè ýòîì ÷èñëî
âûâîäèòñÿ â ôîðìàòå ñ ôèêñèðîâàííîé òî÷êîé. Åñëè ïàðàìåòð <code>N</code> ðàâåí
íóëþ, òî ÷èñëî âûâîäèòñÿ â ôîðìàòå ñ
ïëàâàþùåé òî÷êîé (ýêñïîíåíöèàëüíîì ôîðìàòå); ïðè ýòîì ÷èñëî
äðîáíûõ çíàêîâ äëÿ ýêñïîíåíöèàëüíîãî ôîðìàòà
îïðåäåëÿåòñÿ øèðèíîé ïîëÿ âûâîäà (ò.&nbsp;å. ïàðàìåòðîì <code>W</code> ïðîöåäóðû
<code>Show</code> èëè <code>ShowLine</code>). Ïðè îòðèöàòåëüíûõ çíà÷åíèÿõ ïàðàìåòðà <code>N</code> âûïîëíÿåòñÿ òà æå
íàñòðîéêà, ÷òî è ïðè <code>N&nbsp;=&nbsp;0</code>.
</p>
<p>Äåéñòâèå òåêóùåé íàñòðîéêè ÷èñëîâîãî ôîðìàòà, îïðåäåëåííîé
ïðîöåäóðîé <code>SetPrecision</code>, ïðîäîëæàåòñÿ äî î÷åðåäíîãî âûçîâà ýòîé
ïðîöåäóðû. Äî ïåðâîãî âûçîâà ïðîöåäóðû <code>SetPrecision</code> âåùåñòâåííûå
÷èñëà âûâîäÿòñÿ â ôîðìàòå ñ ôèêñèðîâàííîé òî÷êîé è äâóìÿ äðîáíûìè
çíàêàìè.
</p>
<h2>Îñîáåííîñòè ìîäóëÿ PT4Exam</h2>
<p>Ïðè âûïîëíåíèè çàäàíèé ãðóïï ExamBegin è ExamTaskC, ñâÿçàííûõ ñ ÅÃÝ ïî èíôîðìàòèêå,
ê ïðîãðàììàì âìåñòî ìîäóëÿ PT4 ïîäêëþ÷àåòñÿ ìîäóëü <code>PT4Exam</code>.  ýòîì ìîäóëå ðåàëèçîâàíà åäèíñòâåííàÿ äîïîëíèòåëüíàÿ
ïðîöåäóðà <a href="#task"><code>Task</code></a>, îáåñïå÷èâàþùàÿ èíèöèàëèçàöèþ çàäàíèÿ ñ óêàçàííûì
èìåíåì. Âñå äåéñòâèÿ ïî ââîäó-âûâîäó äîëæíû âûïîëíÿòüñÿ ñ èñïîëüçîâàíèå ñòàíäàðòíûõ
ïðîöåäóð ÿçûêà Pascal. Îòëàäî÷íûå ñðåäñòâà ìîäóëÿ <code>PT4</code> â ìîäóëå <code>PT4Exam</code> òàêæå íåäîñòóïíû,
îäíàêî èìååòñÿ âîçìîæíîñòü âûâîäèòü äîïîëíèòåëüíûå äàííûå ìîæíî íåïîñðåäñòâåííî â ðàçäåë ðåçóëüòàòîâ
(õîòÿ ïðè ýòîì ðåøåíèå áóäåò ñ÷èòàòüñÿ îøèáî÷íûì).
</p>
<p>Îïèñàííûå âûøå îãðàíè÷åíèÿ ìîäóëÿ <code>PT4Exam</code> ïîçâîëÿþò ìàêñèìàëüíî ïðèáëèçèòü ïîëó÷åííîå
ðåøåíèå ê âèäó, òðåáóåìîìó íà ýêçàìåíå (ïðîãðàììà ñîäåðæèò âñåãî äâå äîïîëíèòåëüíûå êîíñòðóêöèè:
äèðåêòèâó ïîäêëþ÷åíèÿ ìîäóëÿ <code>PT4Exam</code> è îïåðàòîð âûçîâà ïðîöåäóðû <code>Task</code>, èíèöèàëèçèðóþùåé òðåáóåìîå çàäàíèå).
</p>
</body>
</html>