-->
Главная » Статьи » Информатика

ФУНКЦИЯЛАР ЖӘНЕ ПРОГРАММА ҚҰРЫЛЫМЫ

ФУНКЦИЯЛАР ЖӘНЕ ПРОГРАММА ҚҰРЫЛЫМЫ

 

Функциялар үлкен есептеулердегі есептерді ұсақтарға бөледі және құрылған программаны қайтып «нөлден» бастамай, басқа жасаушылармен жасалғандарды пайданлануға мүмкіндік береді. Осы түрде таңдалған функцияларда «тығылған» (ипкапсуляцияланған), олардың функционалдануының бөлшектері программаның басқа бөлімдері үшін болмайды, бұл программаны жалпы түсініктірек және оған өзгерістерді енгізуді жеңілдетеді.

Әдетте Си-дегі программалар үлкеннің біреуінен емес, үлкен емес функциялардың үлкен санынан тұрады. Программаны бір немесе бірнеше бастапқы файлдарда орналастыруға  болады. Бұл файлдар жеке комиляциялауға, ал бірге жүктеуге болады, сонымен бірге бұрын компиляцияланған кітапханалық функциялармен.

Есепті кіші бөліктерге бөлу функционалдық декомпазиция арқылы шешіледі, оның нәтижесі болып олардың арасындағы қатынастар, басты бір функциялардан (main) тұратын құрамы табылады. Осы тұрғыдан кез-келген программа  айнымалылар мен функциялар анықтамаларының жай және жалпы түрі бола келеді. Функциялар арасындағы байланыс мәнді және сыртқы айнымалыны қайтаратын аргументтер арқылы жүзеге асады. Функцияны бастапқы файлдарда кез-келген тәртіпке орналастыруға рұқсат етіледі; бастапқы программаны функциялардың бірде-біреуі үзіліп қалмайтындай етіп файлдың кез-келген санына бөлуге болады.

return нұсқауы шақырылатын функцияға нәтижені қайтаратын механизм. return сөзінен кейін кез-келген өрнек келуі мүмкін. Қажет болса, өрнек нәтиже типіне келтіріледі. 

main функциясы программа жұмысының нәтижесі ретінде берілген программа шақырылған ортада болатын қандай да бір санды береді.

Егер функцияның нәтижесінің типі өткізіліп алынған болса, онда ол int типіндегі мәнді қайтарады деп шамалайды.

Бүтін емес мәндерді қайтаратын функциялар, біріншіден осы жөнінде қайтаратын мәннің типі арқылы декларациялануы қажет. Сонымен қатар, шақырушы программа шақырылатын функция бүтін емес мәнді қайтаратынын білу маңызды. Бұны қамтамасыз ететін тәсілдердің бірі – шақыратын функцияларда шақырылатынды оның сипаттауы керек. Мысалы:

#include <stdio.h>

#define MAXLINE 100

   // қарапайым калькулятор

main ( )

{ double sum, atof (char [] );

char line [MAXLINE];

int getline (char line [], int max);

sum=0;

    while ( getline (line, MAXLINE)>0)

    printf ( "\t%g\n”,sum+=atof(line));

    return 0;

}

double sum, atof (char [] ) декларациясында ( char []  типті аргументті қабылдайтын және double типтің нәтижесін қайтаратын (стрингті double-ге түрлендіреді)    sum – double типтің айнымалысы, ал  atof  - функция екендігі айтылады.

Егер өрнекте алдын-ала еш жерде сипатталмаған және одан кейін ашық жақша болатын ат кездессе, онда int типінің нәтижесін қабылдайтын мұндай ат, контекст бойынша функция аты деп есептеледі; бұдан оның аргументтеріне қатысты ешнәрсе шамаланбайды.

Сыртқы айнымалылар.

Әдетте Си тіліндегі программа сыртқы объектілердің жиынымен орындалады: айнымалылар және функциялармен. Сыртқы айнымалылар функциядан тыс өзгешеліктерін анықтайды және әрдайым көптеген функциялар үшін қатынас жасайды. Си-де басқа функциялардың ішіндегі функцияларды анықтауға тиым салынатындықтан, функцияның өзі әрқашан сыртқы объектілер болып табылады. Үнсіздік бойынша әр түрлі файлдарда қолданылатын бірдей сыртқы аттар бір және басқа сыртқы объектіге (функцияға) жіберіледі.

Кез-келген функция үшін сыртқы (external) айнымалы, оның аты бойынша қатынас жасайды, егер бұл атауы ойдағыдай сипатталса.

Сыртқы айнымалылар әрқашан бар болады, сондықтан олардың мәндері функцияларға көңіл аудару арасындағы интервалдарда сақталады. Бұдан, егер функцияға бір ғана мәліметтерді ғана қолдану қажет болса және олардың еш біреуі, басқаларын шақырмаса, онда осы жалпы мәліметтерді сыртқы айнымалылар түрінде, оларды функцияға және керісінше аргументтер арқылы бермей, аударуға ыңғайлы.  

Си - программаның бастапқы мәтінін бірнеше файлдарда сақтауға болады, ал бұрын компиляцияланған программаларды кітапханадан жүктеуге болады. Осымен байланысты келесі сұрақтар туындайды: декларацияларда қалай жазамыз, оларды қандай тәртіппен орналастырамыз және ұйымдастырамыз. Басқаша сөзбен айтқанда, программаны бірнеше файлдарға бөлу айнымалылардың сипаттамасында программаның бөліктерінің байланысының қажетті түрінде, инициализациялауда, жазып қолдануда және т.б. байқалады.

Атаудың әрекет ету аймағы деп, осы атауды қолдануға болатын программаның бөлігі есептелінеді. Автоматты айнымалылар үшін әрекет ету аймағы болып, олар сипатталған функция табылады. Біратты әртүрлі функциялардың жергілікті айнымалылары бір-бірімен ешқандай байланыспаған. Сондай айтылым жергілікті айнымалы болып келетін функция параметрлеріне де қатысты шындық болады.

Ішкі айнымалы немесе функцияның әрекет ету аймағы компилияцияға жататын файлдың соңына дейін декларацияланған программаның нүктесінген жойылады. Мысалы, егер main, sp, val, push және pop көрсетілген тәртіппен бір файлда анықталса, яғни

   main ( )       { … }

int sp=0;

double val [ MAX ];

void push ( double f )        { … }

double pop ( void )  { … }

онда  sp және val айнымалыларына push және pop-тан олардың аттары бойынша жіберуге боладыолар үшін қосымшаешқандай декларациялар талап етілмейді. main-да  push және pop-дері секілді бұл аттар көрінбейді.

Егер сыртқы айнымалыға ол анықталғанға дейін жіберілуі керек немесе егер ол басқа файлда анықталсаонда оныңдекларциясы  extern сөзімен берілуі керекІшкі айнымалының декларациясы (сипаттамаайнымалының қасиеттерінжариялайды (бәрінен бұрын оның типін), ал анықтамасондай-ақ ол үшін жадының анықталуына әсер етеді.

Егер жолдар

                  int sp;

              double val [MAX];

барлық функциялардан тыс орналасқан болсаонда олар ішкі айнымалылар sp және val-да анықтайдыяғни олар үшін жадыныбөледіжәне сонымен бірге бастапқы файлдың қалған бөліктері үшін декларация ретінде жүредіАл;

                      extern int sp;

                      extern double val [ ];

жолдары қалған бөліктері үшін декларациялайды, sp – int типіндегі айнымалы және  val –double типіндегі массив (өлшемі басқажерде анықталған); мұнда айнымалы дамассивте құрылмайды және жады оларға бөлінбейді.

Бастапқы программадан тұратын файлдың барлық жиындарынаәрбір сыртқы айнымалы үшін бір ғана анықтама болуықажетбасқа файлдарсыртқы айнымалыға қатынас құру үшін extern декларациясынан тұруы керек.

Массивтер анықтамасында олардың өлшемдерін көрсету керекал extern декларациясына келер болсақмұнда оларміндетті емес.

Сыртқы айнымалының тек анықтамада ғана инициализациялауға болады.

push және pop функцияларын бір файылға, ал sp және val – айнымалыларын инициализациялайтын басқа жерде анықтайық. Онда байланысты орнату үшін анықтамалар және декларациялар қажет болады:

1-ші файлда: extern int sp;

                      extern double val [ ];

                      void push (double f)       { … }

                      double pop ( void )        { … }

2-ші файлда: int sp=0;

                      double val [ MAX ];

extern декларациясы функцияның анықталуында емес және 1-ші файлдың басында тұрғандықтанолардың әрекеттерібарлық функцияларға таратыладымұнда декларацияның біреуінің жазылуы барлық 1 файлдар үшін жеткіліктіТура сол externдекларациясын ұйымдастыру – программа бір ғана файлдан тұрған жағдайда қажетбірақ sp және val анықталуы олардыңқолданылуынан кейін орналасады.

Сыртқы айнымалыға немесе функцияға қолданылған static нұсқауы объектінің әрекет ету аймағын файл соңымен шектейді.Бұл -  басқа файлдардан аттарды жасыру тәсіліСтатистикалық жады қарапайым сипаттаудың алдында араласатын staticсөзімен спецификацияланады. val және sp айнымалыларының декларацияларының алдындағы static  нұсқауыбұнымен текқана push және pop жұмыс істейтіноларды қалған функциялардан жасырады.

Әдетте функцияның аттары бастапқыда және программаның кез-келген жерінен көрінедіЕгер де функция static сөзіменараласқан болсаонда оның аты ол анықталатын файлдан тысқары көрінбейтін боладыStatic декларациясын ішкіайнымалылар үшін де қолдануға боладыАвтоматтық жергілікті айнымалылар сияқтыішкі статистикалық айнымалыларфункцияларды жергіліктібірақ автоматтылардан өзгешелігі олар мен функцияның  белсенділігінің периодында ғана пайдаболмайдыүнемі боладыБұл жады бөлінеді.  

Категория: Информатика | Добавил: admin_ (17.11.2013)
Просмотров: 1962 | Теги: ФУНКЦИЯЛАР ЖӘНЕ ПРОГРАММА ҚҰРЫЛЫМЫ | Рейтинг: 0.0/0
Всего комментариев: 0

Имя *:
Email:
Код *: