Ïðè ðàçðàáîòêå áîëüøèõ ïðîãðàììíûõ ïðîäóêòîâ ïðèíÿòî ðàçáèâàòü ïðîãðàììó íà íåñêîëüêî ëîãè÷åñêèõ ÷àñòåé, íàçûâàåìûõ ïîäïðîãðàììàìè. Ýòî óëó÷øàåò ñòðóêòóðó ïðîãðàììû, óïðîùàåò åå ïîíèìàíèå, äåëàåò ïðîãðàììó áîëåå ïðîçðà÷íîé è ÷èòàåìîé, ïîçâîëÿÿ òåì ñàìûì èçáåæàòü ìíîãèõ îøèáîê. Åñëè ïðîãðàììà ïðåäíàçíà÷åíà äëÿ ðåøåíèÿ çàäà÷è â öåëîì, òî ïîäïðîãðàììà èñïîëüçóåòñÿ äëÿ âûïîëíåíèÿ ëîãè÷åñêè çàâåðøåííîé ïîñëåäîâàòåëüíîñòè äåéñòâèé.
 ÿçûêå Delphi ïðåäñòàâëåíû äâå ðàçíîâèäíîñòè ïîäïðîãðàìì – ïðîöåäóðû è ôóíêöèè. Ïðèíöèïèàëüíîå îòëè÷èå ìåæäó ïîäïðîãðàììàìè çàêëþ÷àåòñÿ â èõ îôîðìëåíèè è ñïîñîáå ïåðåäà÷è äàííûõ â ïîäïðîãðàììó è îáðàòíî. Âñå ïîäïðîãðàììû äåëÿòñÿ íà ñòàíäàðòíûå (îïðåäåëåííûå â ÿçûêå) è ñîçäàâàåìûå ïðîãðàììèñòîì (ïîëüçîâàòåëüñêèå).
Ñòðóêòóðà ïîäïðîãðàììû î÷åíü ïîõîæà íà ñòðóêòóðó ïðîãðàììû è â ñàìîì îáùåì ñëó÷àå ñîñòîèò èç òàêèõ ÷àñòåé:
– çàãîëîâêà ïîäïðîãðàììû;
– ðàçäåëà îáúÿâëåíèÿ ìåòîê;
– ðàçäåëà îáúÿâëåíèÿ êîíñòàíò;
– ðàçäåëà îáúÿâëåíèÿ òèïîâ;
– ðàçäåëà îáúÿâëåíèÿ ïåðåìåííûõ;
– ðàçäåëà ïðîöåäóð è ôóíêöèé;
– òåëà ïîäïðîãðàììû.
Îáÿçàòåëüíûìè ÷àñòÿìè ïîäïðîãðàììû ÿâëÿþòñÿ åå çàãîëîâîê è òåëî. Îáðàùåíèå ê ïîäïðîãðàììå îñóùåñòâëÿåòñÿ ÷åðåç óïîìèíàíèÿ åå èìåíè è íàçûâàåòñÿ âûçîâîì. Ðàçäåëû îáúÿâëåíèÿ ìåòîê, êîíñòàíò. Òèïîâ è ïåðåìåííûõ ñîîòâåòñòâóåò àíàëîãè÷íûì ðàçäåëàì ïðîãðàììû. Ñîçäàíèå ýòèõ ðàçäåëîâ ïðîèñõîäèò ïî ìåðå íåîáõîäèìîñòè. Ðàçäåë ïðîöåäóð è ôóíêöèé ìîæåò ñîäåðæàòü îïèñàíèÿ ñîáñòâåííûõ ïðîöåäóð è ôóíêöèé. Òåëî ïîäïðîãðàììû ñîäåðæèò èñïîëíÿåìûå îïåðàòîðû. Ïîä îïèñàíèåì ïîäïðîãðàììû ïîíèìàåòñÿ óêàçàíèå åå çàãîëîâêà è òåëà.
Çàãîëîâîê ïðîöåäóðû èìååò âèä: Procedure èìÿ (ïàðàìåòðû);
Çàãîëîâîê ôóíêöèè: Function èìÿ (ïàðàìåòðû): òèï;
Ñëîâà Procedure è Function ÿâëÿþòñÿ çàðåçåðâèðîâàííûìè.
Ïðèìåð ïðîöåäóðû íàæàòèÿ íà êíîïêó Button:
procedure TForm1.Button1Click(Sender: TObject);
var a,b:Integer;
c:Real;
begin
//ââîä äàííûõ â êîìïîíåíòû Edit1 è Edit2; ïðåîáðàçîâàíèå èç ñòðîêè â öåëîå ÷èñëî è çàïèñü â ïåðåìåííûå a è b
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text);
//ïðîâåðêà óñëîâèÿ – åñëè ÷èñëî b íå ðàâíî 0, òî ïåðåìåííîé c ïðèñâàèâàåòñÿ ðåçóëüòàò äåëåíèÿ ÷èñëà a íà ÷èñëî b, èíà÷å, åñëè ÷èñëî ðàâíî 0, âûâîäèòñÿ ñ ïîìîùüþ ïðîöåäóðû ShowMessage ñîîáùåíèÿ î òîì, ÷òî ïðîèñõîäèò äåëåíèå íà 0.
if b<>0 then begin
c:= a/b;
Edit3.Text:=FloatToStr(c);
end
else
ShowMessage('Äåëåíèå íà 0');
end;
|