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

ҚҰРЫЛЫМДАР

ҚҰРЫЛЫМДАР.

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

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

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

«Нүкте» құрлымының декларациясы келесі түрде болады:

             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);

Құрылымдар бір-біріне қойылуы мүмкін.

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

   Құрылымдық объектілерді функцияға берудің үш тәсілі бар:

-      компоненттерді (мүшелерді) жеке беру;

-      барлық құрылымдарды түгелдей беру;

-      көрсеткішті құрылымға беру.

Егер функцияға, оны түгелдей көшіретін үлкен құрылым берілсе, көрсеткішті оған беру тиімдірек.

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 (тип аты)

өрнегі көрсетілген объектінің өлшеміне немесе байттың типіне тең бүтін мәндерді береді. Объект айналымы, массив немесе құрылым болуы мүмкін. Тип аты ретінде базалық типтің аты немесе туындылы типтің аты, мысалы құрылымның немесе көрсеткіштің қолданылуы мүмкін.

Категория: Информатика | Добавил: admin_ (17.11.2013)
Просмотров: 1462 | Теги: ҚҰРЫЛЫМДАР с++ қазақша | Рейтинг: 0.0/0
Всего комментариев: 0

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