2.7  Ішкі бағдарламалар

 

     Программаның әр бөлiгiнен шақырылып, бiрнеше рет қайталап орындауға болатын, топталған операторлар тiзбегiн (программа бөлiгiн) iшкi программа деп атаймыз.

 Программалау  тiлi – Паскальда iшкi программа  Procedure және  function деп аталатын қызметшi сөздер арқылы басталады. Процедура мен функциялардың құрылымы негізгі программаға ұқсас.

 

Функция құрылымы:

Function атау(ф_п_т : типі) : типi;

       Сипаттама бөлiмi;

begin

       операторлар бөлiмi;

end;

 

Мұндағы,   ф_п_т -  типтерi анықталған формальды параметрлер тiзiмi.

 

Мысалы, n! – санының факториалын есептейтiн функция құрылымы.

Function fakt(n: integer): integer;

  Var

    I,f : integer;

begin

   f:=1;

    for i:=1 to n do

      f:=f*i;

      fakt:=f;

end;

 

     Осындай iшкi программаны негiзгi программадан немесе басқа да iшкi программалардан шақыру үшiн функцияға қатынау командасын пайдаланады:

     Функция_атауы(н_п_т); 

 

Мұндағы,   н_п_т  -  типтерi анықталған нақты параметрлер тiзiмi.

 Мысалы, fakt(6);

 

Ескерту

 Нақты параметрлер типі формальды параметрлер типiмен сәйкес болу керек.

 

Мысалы, кез келген  аn  есептейтiн программа бөлiгi:

Function stepen(a,n : integer) : integer;

Var

    Aa, i : integer;

Begin

  Aa:=1;

 For i:=1 to n do 

    Aa:=aa*a;

    Stepen:=aa

End;

 

Осы программаны шақыру командалары:   Stepen(2,4);   Stepen(х+1,3);

Функциямен жұмыс жасағанда мыналарды ескеру қажет:

- Функция орындалғанда бiр ғана нәтиже болады(бiрнеше мән берiлсе де)

- Нәтиже функцияның атына меншiктеледi, функция программасында мiндеттi түрде меншiктеу операторы болу қажет, сол жағына функцияның аты меншiктелген.

- Функция тақырыбында функция нәтижесінің типi көрсетiлуi керек.

- Программалардан функцияны шақыру командасын өрнектiң тiкелей iшiне орналастыруға болады.

 

  Процедура құрылымы:

 procedure атау(ф_п_т : типі);

   сипаттама бөлiмi;

  begin

    операторлар бөлiмi;

  end;

 

   Мұндағы,   ф_п_т -  типтерi анықталған формальды параметрлер тiзiмi, яғни  процедураның енгiзу-шығару параметрлерi.

 Осындай iшкi программаны, негiзгi программадан немесе басқа да iшкi программалардан шақыру үшiн процедураға  қатынау командасын пайдаланады:

     Процедура_атауы(н_п_т); 

 

  Мұндағы,   н_п_т  -  типтерi анықталған нақты параметрлер тiзiмi, яғни  процедураның енгiзу-шығару параметрлерi.

 

Мысалы, m натурал санының цифрларының қосындысын есептейтiн программа бөлiгi(m=2346, нәтижесі s=2+3+4+6=15 )

Procedure sum(n: integer; var s : integer);    { параметрлiмәнді процедура }

 Var  

    р : integer;

 Begin

   S:=o;

   While (n<>0) do

      Begin

         P:=n mod 10;

         S:=s+p;

          N:= n div 10;

      End;

End;

      Бұл процедураға қатынау үшін:   Sum(m, z);   Мұндағы, m-енгiзу, z-шығару параметрлерi.

 

Процедура  үш топқа бөлiнедi: параметрсiз процедура, параметрлi процедура, параметрлi мәнді процедура.

     Бір бағдарламада бірнеше ішкі бағдарламалар болу мүмкін, оларға негiзгi бағадрламалардан немесе басқада  да iшкi програмалардан қатынауға болады. Кейде, процедура немесе функция өзiн-өзi шақыруы да мүмкiн. Мұны рекурсия дейдi, ал ішкі бағдарламалар: рекурсивтi процедура немесе рекурсивтi функция деп аталады.

Мысалы, рекурсивтi процедура құрылымына

 procedure recur;       { параметрcіз  процедура }

 begin

   writeln(' procedure');

    recur;

    writeln(' f'unction’)

end;

    Бұл параметрсiз процедураға жатады, оған қатынау үшiн процедураның аты ғана жазылады: recur; мұнда шығару операторлары ғана орындала бередi, яғни процедурадан шығу жолы қарастырылмаған. 

Ескерту

  Міндетті түрде ішкі бағдарламалардан шығу жолын қарастыру керек, әйтпесе программа жұмысы тоқтап қалады.

 

Мысалы, рекурсивтi процедура құрылымына

procedure recur(n : integer); );    { параметрлi  процедура }

 begin

   write(' pocedure');

    if n>1 then recur(n-1);

end;

   Бұл параметрлі процедураға қатынау үшiн,  процедураның аты және жақшаға оның параметрiнмәнi  жазылады:  recur(5);

 

Мысалы, Eвклид алгоритмi бойынша екі санның  ЕҮОБ(n,m)  табуға арналған,  рекурсивтi функция құрылымы:

Function nod(n,m) : integer;

  Var

     D : integer;

Begin

   D:=n mod m;

   If d=0 then nod:=m

                else nod:=nod(m,d);

End;

 

      Iшкi программаның сипаттама бөлiмiнде iшкi айнымалылар(локальді немесе жергілікті) сипатталады, олар тек iшкi программаға ғана тиiстi болады. Ал, негiзгi программада сипатталған айнымалылар программаның барлық бөлігіне қатыса алады, оларды  сыртқы(глобальды немесе ауқымды) деп атаймыз.

      Программалау өнерiнде iшкi программалар маңызды роль атқарады. Программа көлемiн азайтады және компьютер жадысында аз орын алады. Жақсы ойластырылған iшкi программалардан жеке бағдарламалар кітапханасын дайындауға болады. Осындай мақсатпен есептеу орталықтарында процедуралар және функциялар  кітапханалары құрылады,  олар машина жадысында, дискiлерде саяқталады.