Читайте также:
|
|
Мәліметтер құрылымдары – бір немесе бірнеше әр түрлі типті айнымалылардан құралған, ыңғайлылық үшін бір атқа жинақталған мәліметтер жиыны.
Мәліметтер құрылымына қарапайым мысал болып – жұмысшының есеп карточкасы табылады. Жұмысшының мәліметтері: аты, тегі, адресі, еңбек ақысы т.с.с. мәліметтер құрылымы компоненттері болып табылады. Кейбір компоненттерінің өзін мәліметтер құрылымы ретінде сипаттауға болады. Бір атау астына жинақталған мәліметтер құрылымын үлкен программаларда қолдануда тиімді әрі ыңғайлы.
Мәліметтер құрылымдарын struct кілттік сөзінен кейін мәліметтер құрылымына ат қоюға болады. Компоненттері немесе айнымалылары жазба мүшелері деп аталады. Олардың атын еркімізше таңдаймыз, көбінесе сипатталатын объектіге байланысты таңдайды.
Басқа кез келген типтер сияқты бірнеше айнымалыларды, фигуралы жақшадан кейін тізіп жазуға болады. Мысал:
struct {…} x, y, z, сәйкесінше INT X, Y, Z;
Мәліметтер құрылымына да жадыдан орын бөлінеді. Қандай да бір айнымалыны мәліметтер құрылымында сипаттамаса, оған жадыдан орын бөлінбейді. Ол тек шаблон немесе мәліметтер құрылым формасы ретінде қалады, бірақ мәліметтер құрылымының атын қолдануға болады.
struct person {
char name [namesize];
char address [adrsize];
long zipcode; /*почталық индекс*/
long ss_namber; /*әлеуметтік қорғау коды*/
double salary; /*еңбек ақы*/
struct date birthdate; /*туған күні*/
struct date hirehdate; /*жұмысқа кірген күні*/
};
PERSON мәліметтер құрылымында date типті екі мәліметтер құрылымы бар. Егер emp былай анықталса:
struct person emp;
онда
emp. Birthdate.month туған айы анықталады.
Құрылымдық шаблонды анықтау. Әртүрлі типті мәліметтерді баяндау үшін және жаңа типтерді ұйымдастыру үшін құрылым деген тип ыңғайлы және икемді болып табылады. Мәліметтер құрылымын баяндағанда алдымен құрылымдық шаблонды келесі түрде баяндауға болады:
struct <rname>
{
<type> <fname>;
…………
<type> <fname>;
}
мұндағы rname - структура типінің аты, структура типінің атын көрсетпесе де болады, } жақшада структура элементтерінің тізбегі келтірілген және әрбір элементтің типі көрсетілген. Құрылымдық шаблон анықталғаннан кейін құрылымдық айнымалының анықталуы келесі түрде жазылады:
struct <rname> <vnames>;
vnames - құрылымдық айнымалының аты.
Мысал:
struct sved
{
char fam[25];
char adr[20];
int gr;
};
struct sved inf;
Құрылымдық шаблонды функция анықталуының ішінде немесе функцияның сыртында келтіруге болады. Функцияның ішінде келтірілген шаблон осы функцияның ішінде ғана пайдаланылуы мүмкін. Егер құрылымдық шаблон функцияның сыртында орналасқан болса, онда бұл шаблон оның анықталуынан кейін орналасқан программаның бірнеше функцияларында қолданылуы мүмкін. Мысалы, басқа бір функцияның ішінде inf1 атты басқа құрылымдық айнымалыны келесі түрде анықтауға болады: inf1 в виде struct sved inf1;
Берілген баяндалудан тұратын функция шаблон анықталғаннан кейін орналасады деп жорамалданады. Егер құрылымды баяндағанда оның шаблоны программаның бір жерінде анықталған болса, ал осы шаблонды пайдаланылатын құрылымдық айнымалылар программаның басқа бір функциясында анықталатын боса, онда структура типінің атын міндетті түрде көрсету қажет. Құрылымдық айнымалының анықталуын пайдаланып, компилятор құрылымдық шаблон бойынша жадыда орын бөліп береді (құрылымдың әрбір элементінің баяндалуын ескереді). Мәліметтер құрылымын баяндағанда құрылымдық шаблон анықтауын және құрылымдықайнымалыны анықтау процестерін біріктіруге болады. Айнымалыны және шаблонның анықталуын біріктіргенде структура типінің атын жазбаса да болады. Мысал,
struct
{
char fam[25];
char adr[20];
int gr;
} inf;
Егер құрылымдық шаблон бір реттен көп қолданылса, онда әдетте структура типінің атымен берілетін форманы қолданады.
Құрылымдарда инициалдау. Сыртқы және статикалық құрылымдық айнымалыларды инициалдауға болады. Құрылымдық айнымалының сыртқы типке жататыны шаблонның анықталған орнына байланысты емес, осы айнымалы программаның қандай жерінде анықталғанына байланысты. Келесі бар деп жорамалдайық:
static struct sved inf;
Бұл жағдайда статикалық жады қолданылады және құрылымды келесі түрде инициалдауға болады:
static struct sved inf= {“Абзалов”,
“Сәтбаев, 20”,
1978}
Мысал: (құрылымның элементеріне қол жеткізу)
#include <stdio.h>
main()
{ struct
{ char fam[25];
char adr[20];
int gr;
} inf;
printf(“ Тегін еңгізініз: \n”);
gets(inf.fam); /* fam элементіне қол жеткізу*/
printf(“Мекен -жайын еңгізініз: \n”);
gets(inf.adr);
printf(“Туған жылын еңгізініз: \n”);
scanf(“%d”,&inf.gr);
printf (“%s, %s, %d\n”, inf.fam, inf.adr, inf.gr); }
Құрылымдардың массивтері. Есептерді шығару барысында құрылымдардың массивтері пайдаланылады, яғни құрылымдық айнымалы массивтің элементі болып табылады. Құрылымдардың массивтері келесі түрде баяндалады:
struct sved inf[10];
sved типті структура inf[10] массивтің элементі болып табылады.
Құрылымдардың массивтері элементтерін анықтағанда бөлек алынған структура жағдайындағы сиықты құрылымдың аты структура элементінің атынан нүкте “.” (элементті алу операциясы) символы арқылы бөлектенеді. Мысалы:
inf[0].fam - массивтің бірінші элементі
inf[1].fam - массивтің екінші элементі
…………………..
inf[9].fam - массивтің 10- элементі
(inf[1] - құрылымды айнымалының аты)
#include <stdio.h>
#define num 10
struct cved
{ char fam[25];
char adr[20];
int gr; };
main()
{ struct sved inf[num];
int l=0, i;
while (l<num)
{ printf(“Тегін енгізу \n”);
gets (inf[l].fam);
printf(“Мекен-жайы: \n”);
gets (inf[l].adr);
printf(“туған жыл \n”);
scanf(“%d”, &inf[l].gr);
l++; }
printf(“Тобтың студенттері туралы мәліметтер \n”);
for (i=0; i<l; i++)
printf(“%s, %s, %d\n”, inf[i].fam, inf[i].adr, inf[i].gr); }
Бірінің ішіне бірі еңген құрылымдарды қарастырайық
#include <stdio.h>
#define num 5
#define len 15
#define is “Ғылым”
struct isd
{ char namisd[len];
int godisd; }
struct knig
{ char author[len];
char title[len]
struct isd isdat; }
main()
{ static struct knig masking[num]={{“ Ашимов В.”,
“Информатика”
{“Ғылым”, 1998}},
{“Абилов В.”,
“Физика”,
{“Мектеп”,1985}}};
int i;
for (i=0; i<num; i++)
if (masking[i].isdat.nanidd==IS)
printf (“%s %s \n”, masking[i].author, masking[i].title); }
Құрылымның көрсеткішінің қолдануын қарастырайық. Қөрсеткіштің сипаттамасы төменде келтірілген (Құрылымдардың массивтері қарастырылады):
Struct knig *ptrst;
Ptrst көрсеткіш кез-келген knig типі құрылымға сілтеме үшін құрылған.
Орны бар:
Ptrst==&masking[0];
*ptrst==masking[0];
ptrst->author - бұл masking[0].author. эквивалентті болып табылады.
Егер ptrst келтірілген masking[0] құрылымға көрсеткіш болса, онда келесі белгілер эквивалентті болып табылады.
Masking[0].author==(*ptrst).author==ptrst->author
Ptrst+1 masking[1] сілтеме болып саналады. Бұл мысалда 1 ptrst көрсеткішке 47 адресіне қосады, сондықтан ААА типтің әрбір құрылымы 47 байт орын алады. Келесі мысалда, құрылымның адресті функциянын аргументі реттінде қолданылады:
struct ZP
{ char *name;
char *mec;
float nach;
float prem; } SOTR={ “Мамаев П”,”қантар” 1020.45, 250.15 };
main()
{ float s, fadd();
printf (“Мамаев П. қантарда есептелді %6.2а тенге \n“, fadd(&sotr)); }
float fadd (ptrst)
struct zp *ptrst;
{ float s=0;
s=ptrst->nach+ptrst->prem;
return (s); }
& операция құрылымның адресін анықтау үшін қолданылады. Массивтің атына қарағанда құрылымның аты өзінің адресінің синонимы болып табылмайды. Құрылымдардың массивтерді қарастырайық. Массивтін аты оның адресінің синонимы болып табылады, сондықтан оның функцияларын беруге болады.
Struct zp
{ char *name;
char *mec;
float nach;
float prem; } sort[6]={ {“Мамаев П.”,”қантар”, 8020.45, 1250.15},
……………
{“Байтасов М.”,”қантар”,6000.50, 1500.20} };
main()
{ float ITS, fadd ();
printf (“ Қызметкерлерге қантарда есептелді %10.2f тенге \n”, fadd(sort)); }
float fadd (ptrst)
struct zp *ptrst;
{ float ITS;
int i;
for (i=0, ITS=0; i<6; i++; ptrst++)
ITS+=ptrst ->nach+ptrst->prem;
Return (ITS); }
Негізгі әдебиет: 1[119-139], 2[781-807], 3[277-300], 4[125-147]
Бақылау сұрақтары:
1. Мәліметтер құрылымы дегеніміз не?
2. Бірінің ішіне бірі еңген құрылымдарды қандай кездерде қолдануға болдады?
3. Мәліметтердің құрылымдарын сипаттау үшін қандай құрылымдық шаблонды қолданады?
4. Мәліметтердің құрылымдарының компонентеріне қол жеткізуі қалай ұйымдастырады?
5.Құрылымдар массивтерді өңдеу кезінде көрсеткіштер қалай қолданылады?
Дата добавления: 2015-07-08; просмотров: 604 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Жолдарға қолданылатын операциялардың функциялары | | | Дәріс. Файлдық енгізу-шығару. |