Обьектілі - бағытталған программалау негіздері



Кіріспе
1.Жалпы бөлім
1.1 Обьектілі . бағытталған программалау негіздері
1.2 Басқару
2. Арнайы бөлім
2.1 Функциялар және программа құрлымы
2.2 Сыртқы айнымалылар.
2.3 Функциялар әрекет ету аймағының ережесі статистикалық обьектілер.
3. Өндірістік бөлім
3.1 ҚҰРЫЛЫМДАР
3.1.1 Негізгі мәліметтер
3.1.2 Құрылымдар мен функциялар. Құрылыс массивтері
3.1.3 Құрылымның көрсеткіштері
3.1.4 Құрылымның өзіне сілтеме жасауы
3.2 БІРІКТІРУЛЕР
Қортынды
Қолданылған әдебиет
Си тілі — 1970 жылы Бэлл Лабс Кэн Томсон мен Ден Ритчи жасап шығарған болатын. Бас кезінде осы мамандар Би программалау тілімен айналысып, уақыт келе осы Си программалау тілімен айналысуға кіріскен болатын.
Си тіліндегі программа функциялар мен айнымалылардан тұрады. Функция есептеулерді сипаттайтындай нұсқаулардан тұрады, ал айнымалылар осы есептеу процесінде қолданылатын мәндерді сақтайды. Кез-келген программа өзінің есептеуін main функциясынан бастайды.
Ереже бойынша, main() функциясы басқа функциялардың: библиотекалық және/немесе программистің қызметімен қолданылады. Библиотекалық жағдайда, программаның бірінші жолы сәйкес стандартты библиотека туралы ақпаратты қосуы керек. Мысалы, #include инструкциясы компиляторға, ол программаның мәтініне стандартты библиотеканың енгізу-шығаруы туралы ақпаратты қосу керек екендігін хабарлайды (printf функциясының прототипін шақыру).
Функциялардың арасындағы мәліметтерді беру сыртқы айнымалылар, аргументтер арқылы немесе қайтарылатын мәндер арқылы жүзеге асырылады.
Сыртқы айнымалылар функциядан тыс өзнешеліктерді анықтайды және көптеген функциялар үшін потенциалды мүмпкін болады. Си-де басқа функциялардың ішіндегі функцияларды анықтауға тиым салынатындықтан, функцияның өзі әрқашан сыртқы объектілер болып табылады.
Си тіліндегі қарапайым программа бір ғана жалғыз main функциясын анықтаудан тұрады, сол сияқты түсініктеме ретінде мынандай мүмкіндіктерді: сипаттама, айнымалылар, арифметикалық өрнектер, циклдер және форматты қорытындыны қарастырады.
Си-де кез-келген айнымалы, оны қолданудан бұрын, яғни алғашқы орындалатын нұсқауға дейін сипатталуы қажет. Мәліметтер үшін базалық типтер: char, short, long, double, int, float. Базалық типтерден: массивтерді, құрылымдар мен біріктірулерді, осы типтердің мәндерінің нәтижесі ретінде қайтарылатын базалық типтер мен функциялардың көрсеткіштерін құруға болады.
Программаның мәтініндегі шегіністер (отступы) программаның логикалық құрылымын ерекшелейді. Бұдан басқа әр жолда бір ғана нұсқау жазу және амалдарды бос орынды белгілерімен көркемдеу ұсынылады.
1) А. Александреску. Современное программирование на C++.
2) Ю.А. Шпак. Программирование на языке C для AVR и PIC микроконтроллеров.
3) А. Богатырев. Руководство полного идиота по программированию (на языке Си).

Жоспар

Кіріспе

1.Жалпы бөлім

1.1 Обьектілі - бағытталған программалау негіздері

1.2 Басқару

2. Арнайы бөлім

2.1 Функциялар және программа құрлымы

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

2.3 Функциялар әрекет ету аймағының ережесі статистикалық обьектілер.

3. Өндірістік бөлім

3.1 ҚҰРЫЛЫМДАР

3.1.1 Негізгі мәліметтер

3.1.2 Құрылымдар мен функциялар. Құрылыс массивтері

3.1.3 Құрылымның көрсеткіштері

3.1.4 Құрылымның өзіне сілтеме жасауы

3.2 БІРІКТІРУЛЕР

Қортынды

Қолданылған әдебиет

Кіріспе

Си тілі — 1970 жылы Бэлл Лабс Кэн Томсон мен Ден Ритчи жасап шығарған
болатын. Бас кезінде осы мамандар Би программалау тілімен айналысып, уақыт
келе осы Си программалау тілімен айналысуға кіріскен болатын.
Си тіліндегі программа функциялар мен айнымалылардан тұрады. Функция
есептеулерді сипаттайтындай нұсқаулардан тұрады, ал айнымалылар осы есептеу
процесінде қолданылатын мәндерді сақтайды. Кез-келген программа өзінің
есептеуін main функциясынан бастайды.
Ереже бойынша, main() функциясы басқа функциялардың: библиотекалық
жәненемесе программистің қызметімен қолданылады. Библиотекалық жағдайда,
программаның бірінші жолы сәйкес стандартты библиотека туралы ақпаратты
қосуы керек. Мысалы, #include stdio.h инструкциясы компиляторға, ол
программаның мәтініне стандартты библиотеканың енгізу-шығаруы туралы
ақпаратты қосу керек екендігін хабарлайды (printf функциясының прототипін
шақыру).
Функциялардың арасындағы мәліметтерді беру сыртқы айнымалылар,
аргументтер арқылы немесе қайтарылатын мәндер арқылы жүзеге асырылады.
Сыртқы айнымалылар функциядан тыс өзнешеліктерді анықтайды және көптеген
функциялар үшін потенциалды мүмпкін болады. Си-де басқа функциялардың
ішіндегі функцияларды анықтауға тиым салынатындықтан, функцияның өзі
әрқашан сыртқы объектілер болып табылады.
Си тіліндегі қарапайым программа бір ғана жалғыз main функциясын
анықтаудан тұрады, сол сияқты түсініктеме ретінде мынандай мүмкіндіктерді:
сипаттама, айнымалылар, арифметикалық өрнектер, циклдер және форматты
қорытындыны қарастырады.
Си-де кез-келген айнымалы, оны қолданудан бұрын, яғни алғашқы
орындалатын нұсқауға дейін сипатталуы қажет. Мәліметтер үшін базалық
типтер: char, short, long, double, int, float. Базалық типтерден:
массивтерді, құрылымдар мен біріктірулерді, осы типтердің мәндерінің
нәтижесі ретінде қайтарылатын базалық типтер мен функциялардың
көрсеткіштерін құруға болады.
Программаның мәтініндегі шегіністер (отступы) программаның логикалық
құрылымын ерекшелейді. Бұдан басқа әр жолда бір ғана нұсқау жазу және
амалдарды бос орынды белгілерімен көркемдеу ұсынылады.
Си-де функцияның барлық аргументтері “мән бойынша” беріледі, “сілтеме
бойынша шақырудан” өзге аргументтердің локальды көшірмесіне емес,
аргументтің өзіне қатынас жасай алады. Сондықтан Си-де функцияны шақырушы
айнымалыны тікелей өзгертуге болмайтын функция шақырылады: ол оның жеке,
уақытша көшірмесін ғана өзгерте алады.
Осы қасиеттің арқасында, негізінде жинақтырақ программа жазуға мүмкіндік
бар.
Егер шақырылатын программада функцияға айнымалыны өзгерту талап етілсе,
онда соңында айнымалыны өзгертуге жататын адрес берілуі керек (айнымалының
көрсеткіші), ал шақырылатын функцияда сәйкес келетін параметрді көрсеткіш
ретінде сипаттау керек және осы айнымалыға, ол арқылы жанама қатынас
жасауды ұйымдастыру қажет.
Егер функцияның аргументі массив (массив аты) болса, онда функцияға осы
массивтің бастапқы адресі болатын мән беріледі; массивтің ешқандай
элементтері көшірілмейді.

1. Жалпы бөлім

1.1 Обьектілі - бағытталған программалау негіздері .

Объектілі-бағытталған әдістеме “объект” түсінігіне негізделген, барлық
стилдік жақсартуларды қосады. Әртүрлі объектілер өзінің қасиеттері және
мінездемелерімен сипатталады. Объектілі-бағытталған әдістемені программалау
ретінде, сол сияқты талдау және дизайн (программаларды жобалау) ретінде
қолдануға болады.

Объектілі-бағытталған әдістеменің (ОБӘ) дамуына процедуралық тілдер
негізгі әсерін тигізді, соның ішінде әсіресе Си тілі.

Құрылымдық парадигма (сөздердің септелуі, жіктелу үлгісі) машиналық
тілдегі программалаудың парадигмасымен салыстырғанда үнемі дамып отырады,
бірақ басқа жағынан алғанда кемшіліктері бар.

Программалау технологиясының дамуындағы келесі қадам модульдік
программалау болады.

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

2. Басқару

Есептеу орындалу ережесі басқару нұсқауымен анықталады.
Кез-келген өрнек, егерде оның соңына нүктелі үтір қойсақ нұсқау болады,
мысалы, х=0; i++; printf(...) жазбада.
Си-де нүктелі үтір Паскаль тіліндегі сияқты бөлуші емес, нұсқаудың аяқтаушы
литері болып табылады.
Құрама нұсқау немесе сұлба – бұл фигуралық жақша көмегімен сипаттаманы және
нұсқауды біріктіру. Синтаксистік тұрғыдан, мұндай сұлба бір нұсқау ретінде
қабылданады.
Нұсқауды біріктірудің басқа мысалы – бұл if, else, while немесе for-дан
кейінгі қойылатын дөңгелек жақша.
Сұлба соңында оң жабушы фигуралы жақшадан кейін нүктелі үтір қойылмайды.
Басқару нұсқауларға жататындар:
if- else – шешім қабылдау үшін;
else -if– көпбаспалдақты шешім қабылдау үшін;
switch – көп жолдардың бірін таңдау үшін қосу (Паскальда case операторына
пара-пар);
while және for циклдері;
цикл do- while;
break және continue нұсқаулары;
goto және белгілер нұсқаулары.
Берілген нұсқауларға бірнеше түсініктемелер келтірейік:
- бір-біріне қойылған if – конструкция else – бөлімінің біреуінің
болмауы жазбаны бір мәнсіз талдауға әкелуі мүмкін. Бұл мәнсіздікті, else
әрқашан жақын тұрған else-сі жоқ if-пен байланыстыру арқылы шешіледі;
- if және else нұсқаулары күрделілігінің дұрыс интерпретациясы фигуралы
жақшаны, сол сияқты мәтінде шегіністерді көрсету көмегімен дұрыс қоюға
көмектеседі;
- switch қосқышының әр тармағы (соның ішінде және default-тан кейін)
break – қосқыштан шығу нұсқауымен аяқталуы керек;
- грамматика тұрғысынан for циклінің үш компоненті (өрн1; өрн2; өрн3)
кездейсоқ өрнекті көрсетеді, өрн1 және өрн3 – бұл функцияны меншіктеу
немесе шақыру, ал өрн2 – қатынас өрнегі. Осы үш өрнектердің кез-келгені
болмауы мүмкін, бірақ нүктелі үтірді қалдыруға болмайды. өрн1 және өрн3-тің
болмауы, олар циклдің нұсқауында жоқ деп есептеледі; өрн2-нің болмауы, оның
мәні әрқашан ақиқат екендігін білдіреді.
- Си-де for циклдің индексі және оның шектік мәні циклдің ішінде
өзгеруі мүмкін және циклдің индексінің мәні циклден шықаннан кейін әрқашан
белгілі болады;
- “үтір” операторымен бөлінген өрнектер жұбы солдан оңға қарай
есептеледі. Нәтиженің типі мен мәні for нұсқауында әр үш компонент біренеше
өрнекке ие болатындай, оң жақ өрнектің мәні мен типі болып табылады, мысалы
екі индексті параллель енгізу (функция аргументтерін, сипаттаудағы
айнымалыларды және т.б. бөлетін үтірлерден басқа);
- do – while циклінде шарт ақиқат болағанда қайталау жүзеге
асырылады;
- break және continue нұсқаулары циклдің дұрыс аяқталуының
альтернативі болып табылады: break нұсқауы ең ішкі оның циклдері мен
қосқыштарынан тез арада шығуды қамтамасыз етеді; continue нұсқауы жақын
оның циклін ( for, while немесе do – while) итерацияның келесі қадамын
бастауға әкеп тірейді.

2. Арнайы бөлім

2.1 Функциялар және программа құрлымы.

Функциялар үлкен есептеулердегі есептерді ұсақтарға бөледі және құрылған
программаны қайтып нөлден бастамай, басқа жасаушылармен жасалғандарды
пайданлануға мүмкіндік береді. Осы түрде таңдалған функцияларда тығылған
(ипкапсуляцияланған), олардың функционалдануының бөлшектері программаның
басқа бөлімдері үшін болмайды, бұл программаны жалпы түсініктірек және оған
өзгерістерді енгізуді жеңілдетеді.
Әдетте Си-дегі программалар үлкеннің біреуінен емес, үлкен емес
функциялардың үлкен санынан тұрады. Программаны бір немесе бірнеше бастапқы
файлдарда орналастыруға болады. Бұл файлдар жеке комиляциялауға, ал бірге
жүктеуге болады, сонымен бірге бұрын компиляцияланған кітапханалық
функциялармен.
Есепті кіші бөліктерге бөлу функционалдық декомпазиция арқылы шешіледі,
оның нәтижесі болып олардың арасындағы қатынастар, басты бір функциялардан
(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 типінің нәтижесін қабылдайтын мұндай ат,
контекст бойынша функция аты деп есептеледі; бұдан оның аргументтеріне
қатысты ешнәрсе шамаланбайды.

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

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

2.3 Функциялар әрекет ету аймағының ережесі статистикалық обьектілер.

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

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

Ішкі айнымалы немесе функцияның әрекет ету аймағы компилияцияға жататын
файлдың соңына дейін декларацияланған программаның нүктесінген жойылады.
Мысалы, егер 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 декларациясын ішкі
айнымалылар үшін де қолдануға болады. Автоматтық жергілікті айнымалылар
сияқты, ішкі статистикалық айнымалылар функцияларды жергілікті, бірақ
автоматтылардан өзгешелігі олар мен функцияның белсенділігінің периодында
ғана пайда болмайды, үнемі болады. Бұл жады бөлінеді.

3. Өндірістік бөлім

3.1 ҚҰРЛЫМДАР

3.1.1 Негізгі мәліметтер

Құрылым – бұл айнымалылармен жұмыс істеу ыңғайлы болу үшін бір атауға
топтастырылған бір немесе бірнеше айнымалылар (әр түрлі болуы мүмкін).
Құрылымдар күрделі мәліметтерді (әсіресе үлкен программаларда)
ұйымдастыруға көмектеседі және өзара байланысқан айнымалылар тобын жиынның
жеке элементіндей емес, бір тұтас ретінде түсіндіреді.
Құрлымның кең таралған мысалы – төлемдік ведомостардың жолдары. Ол
ведомост қызметкерлердің толық аты, адресі, социалды сақтандыру
карточкаларының нөмері, еңбек ақысы және т.б. мәліметтерден тұрады. Осы
мінездемелердің кейбіреуінің өзі құрылым болуы мүмкін: мысалы, толық ат,
сол сияқты адресі және еңбек ақының өзі бірнеше компоненттерден тұрады. Си
үшін басқа әдеттегі, мысалы график аймағынан: нүкте координаттар жұбы,
тікбұрыш нүктелер жұбы және т.б. болып табылады.
Құрылымдар көшірілуі мүмкін, олармен меншіктеу операциялары орындалуы
мүмкін, оларды функцияға аргументтер ретінде беруге болады және ол
функцияны олардың нәтижелері ретінде қайтаруға болады. Автоматты құрылым
мен массивтер үшін сол сияқты инициализация рұқсат етіледі.
Нүкте құрлымының декларациясы келесі түрде болады:
struct point
{ int x; \\ декларация тізімі фигуралы жақшада
int y;
};
point – бұл құрылым тегі (аты) (tag – ярлык, этикетка).
Тег берілген түрдегі құрлымның атын береді және әрі қарай фигуралы
жақшамен аяқталған декларацияның қысқаша белгіленуі ретінде қызмет
атқарады.
Құрылымда тізілген айнымалылар мүшелер деп аталады. Тегтер мен
мүшелердің аттары программаның кәдімгі айнымалыларының аттармен сәйкес
келуі мүмкін. Мүшелердің аттары әртүрлі құрлымдарда кездесуі мүмкін. .
Құрлым декларациясы – бұл тип.
struct {...}x,y,z;
жазбасы құрлымдық типтің үш айнымалыларының сипаттамасын білдіреді.
Айнымалылар тізімінен тұрмайтын құрылым декларациясы жадыны резервке
алмайды: ол тек шаблонды немесе құрылым үлгісін сипаттайды. Егер құрылымның
тегі болмаса, онда осы тегтерді объектілерді анықтауда қолдануға болады.
Мысалы, struct point pt; декларациясы struct point типті pt құрылымдық
айнымалыны анықтайды.
Құрылымдық айнымалыны оны анықтауда инициализациялауға болады:
struct point maxpt = {320, 200};
Автоматты құрылымдарды (auto жады класының құрлымы) сәйкес келетін
типтегі құрылым түрінде нәтижені қайтаратын меншіктеумен немесе функцияға
айналдырумен инициализациялауға болады.
Құрлымның жеке мүшесіне қатынасу келесі түрдегі конструкциямен жүзеге
асады:
құрылым мүшесінің_аты
Мысалы, pt координаттар нүктесін келесі түрде басып шығаруды жүзеге
асыруға болады:
printf (“%d,%d”, pt.x, pt.y);
Құрылымдар бір-біріне қойылуы мүмкін.

3.1.2 ҚҰРЫЛЫМДАР МЕН ФУНКЦИЯЛАР. ҚҰРЫЛЫМ МАССИВТЕРІ.

Құрылымдарға орындалатын операциялар – бұл оларды көшіру, меншіктеу, &
операторының көмегімен аталатын адрес және олардың мүшелеріне қатысудың
жүзеге асырылуы. Құрылымды функцияға аргумент ретінде беру және оларды
нәтиже түрінде функциялардан қайтару. Сондай-ақ көшіру және меншіктеу
операцияларына жатады. Құрылымдарды салыстыруға болмайды.
Құрылымдық объектілерді функцияға берудің үш тәсілі бар:
- компоненттерді (мүшелерді) жеке беру;
- барлық құрылымдарды түгелдей беру;
- көрсеткішті құрылымға беру.
Егер функцияға, оны түгелдей көшіретін үлкен құрылым берілсе,
көрсеткішті оған беру тиімдірек.
struct point *pp; декларациясы рр - struct point типті структураға
көрсеткіш екенін хабарлайды.
Егер рр – point құрлымына жіберілсе (одан болса), онда *рр-тің өзі
құрылым, ал (*рр).х және (*рр).у – point құрлымының мүшелері болады. рр
көрсеткішін қолдана отырып,
struct point origin, *pp;
pp=&origin;
printf (“origin:(%d,%d)\n”,(*pp).x,(*pp).y );
жазуға болады
* операторының приоритетінен . операторының приоритеті жоғары
болғандықтан, (*рр).х-дағы жақша қажет.
“Құрлымдағы көрсеткіш” түсінігімен байланысты мүшелерге қатынас жасау
үшін жазбаның қысқаша формасы енгізіледі. Егер р – құрылымға көрсеткіш
болса, онда p-құрылым_мүшесі – оның жеке мүшесі болады. Сондықтан printf-
ты келесі түрде жазуға болады.
printf(“origin:(%d,%d)\n”,pp-x,pp- y);
Екі және - операторларда солдан оңға қарай орындалады.
Құрылым мүшелеріне қатынас жасау. және - операторлары функцияны шақыру
( ) және массивті индекстеу [ ] операторларымен бірге приоритеттер
иерархиясында ең жоғарғы орынға ие және басқа кез-келген операторлардан
бұрын орындалады.
Мысалы, егер декларация берілсе
struct
{ int len;
char*str;
} *p;
онда ++(р - len) өрнекте жақшалар айқын түрде болғандықтан
көрсеткіштердің өзі емес, ++р - len бір мәнге len структурасының мүшесін
өсіреді.
Операциялардың орындалу тәртібін өзгерту үшін анық жақшалар керек. (++р)
- len-де len-нің мәнін алмас бұрын, программа р көрсеткішін жылжытады.

Құрылым массивтері
Си программасының мәніне кіретін әр кілттік сөздердің санын анықтайтын
программаны құрастырайық. Бұл үшін біз кілттік сөздерді стрингтің массиві
түрінде, сондай-ақ кілттік сөздерді есептеуді бүтін массивтер түрінде
сақтай білуіміз керек болатын, варианттардың біреуі – бұл екі паралель
массив болу керек.
char *keyword [NKEYS];
int keycount [ NKEYS];
Бірақта олардың параллелдігі, сақтаудың басқаша - құрылым массиві арқылы
ұйымдастыруды ойға салады. Әр кілттік сөзді келесі сипаттамалар түрімен
char *word;
int count; жазуға болады
Мұндай жұптар массивті құрайды.
struct key
{ char *word;
int count;
}keytab[NKEYS];
декларациясы key типті құрылымды сипаттайды және keytab массивін анықтайды
және әйтеуір бір жерде жады бөлінетін және осы типтің әр элементі құрылым
болады. Мұны басқаша жазуға да болады:
struct key
{ char *word;
int count;
};
struct key keytab[NKEYS];
keytab массиві тұрақты аттардың жиынынан тұратындықтан, оны сыртқы
массив ретінде жасаған жеңіл және анықтау кезінде бір рет
инициализациялаған дұрыс:
struct key {
char *word;
int count;
} keytab[ ]={“auto”,0,”break”,0,*...*”while”, 0};
keytab массивтің элементтерінің саны инициализаторлардың мөлшері бойынша
есептелінеді.
Си-де компиляция кезінде жұмыс жасайтын sizeof, унарлы оператор бар. Оны
кез-келген объектінің өлшемін есептеу үшін қолдануға болады.
sizeof объект және sizeof (тип аты)
өрнегі көрсетілген объектінің өлшеміне немесе байттың типіне тең бүтін
мәндерді береді. Объект айналымы, массив немесе құрылым болуы мүмкін. Тип
аты ретінде базалық типтің аты немесе туындылы типтің аты, мысалы
құрылымның немесе көрсеткіштің қолданылуы мүмкін.

3.1.3 Құрылымның көрсеткіштері

Құрылымның көрсеткіштері мен құрылым массивтеріне тиісті кейбір
моменттерге мысал келтіру үшін, массивтің элементтерін алу үшін
көрсеткіштерді қолдана отырып, Си программасының мәтініндегі кілттік
сөздерді есептеу программасын көрсетейік.
#include stdio.h
#include ctype.h
#include string.h
#define MAXWORD 100
int getword (char*, int);
struct key * binsearch (char*, struct key *, int);
\\ Си-де кілттік сөздерді есептеу
main ( )
{ char word [MAXWORD];
struct key *p;
while (getword (word, MAXWORD)!=EOF)
if (isalpha(word[0]))
if ((p=binsearch(word, keytab, NKEYS))!=NULL)
p-count++;
for (p=keytab; pkeytab+NKEYS; p++)
if (p-count ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Полиморфизм - бір иерархиядағы объектілер үшін бір атаумен берілген әдістерді қолдану мүмкіндігі
Delphi программалау тілін оқыту әдістемесі
Мамандардың мәліметті өңдеудің машиналық құралдарына максималды жақындығы
Javascript тілінің теориялық негіздері
Delphi объектілі бағдарлы бағдарламалау тілінің мүмкіндіктері
Delphi-дің графикалық мүмкіндіктерін қолдана отырып қозғалатын бағдарлама құру
Web- программалау тілдері
Delphi бағдарламасын қолданып мәтіндік редакторын құру және онымен жұмыс істеу мүмкіндіктерін көрсететін бағдарлама құру
Дельфи ортасында тізімдермен жұмыс істейтін компоненттер
Банктік ААЖ
Пәндер