Нұсқауыш типтерді қолдану



1. Кіріспе
2. Негізгі бөлім
2.1 Нұсқауыш типтері туралы қажеттері
мәліметтер
2.2 Бір байланысты тізім
2.3 Бір байланысты тізбек түріндегі
жолдың көрінісі
2.4 Жол тізбектерге операция жасау

Қорытынды
Кез келген программалық объектілер тек қана жадының көп бөлігін ала отырып, программаның барлық орындалу бағытында емес, сонымен қазіргі программалық тілде статикалық объектілермен байланысында көрсетілген кемшіліктерін болдырмас үшін динамикалық объектілерді қолдану орналастырылған. Осындай қиыншылықтардың бірі программа орындалу барысында динамикалық объектілер пайда болады, ал оларға іс-әрекетті беру - программа жазу барысында немесе орындау барысында беріледі. Бұл қиыншылықты жеңу үшін динамикалық объектілермен жұмыс барысында арнайы тип қарастырылған. Ол «нұсқауыш» тип. Басқа сөзбен айтқанда «нұсқауыш» тип кез келген программалық объектінің нұсқауышы болып келеді және осы нұсқауыш арқылы керекті объектілерге қол жеткізуге болады.
Бұндай жағдайларда динамикалық объектілерде іс-әрекеттің орындалуы барлық жағдайда программалық объектілерді статикалық айнымалының «нұсқауыш» типі арқылы беріледі, ал олар ауыспалы терминдерде динамикалық объектілердің іс-әрекетімен сипатталады. Бұл программа айнымалы «нұсқауыш» тип, программа орындалу барысында анықталады, ал осындай мағынада жеткілікті құруға сәйкес келетін тиімді жабдықтар қарастырып отырмыз.
1 Подбельский В.В., Фомин С.С. Программирование на языке Си:
Учеб. пособие. – 2- е доп. изд. – М.: Финансы и статистика, 2002
1 Подбельский В.В. Язык С ++: Учеб. пособие. – 3- е изд. Дораб . - М.: Финансы и статистика, 1998
2 Культин Н.Б. С/ С++ в задачах и примерах. – СПб.: БХВ – Петербург, 2004
3 Мартынов Н.Н. Программирование для Windows на С/ С++. Том.1.- М.: ООО “ Бином – Пресс”, 2004
4 Шиманович Е.А. С/ С++ в примерах и задачах. – Мн. : Новое знание, 2004
5 Ахо А.В., Хопкрофт Д.Э., Ульман Д.Д. - Структуры данных и алгоритмы, Издательство “Вильямс”, Москва, 2000
6 Седжвик Р. Фундаментальные алгоритмы на С++. Части 1-4, Издательство “ДиаСофт”, Москва, 2001

Жоспар

1. Кіріспе

2. Негізгі бөлім

2.1 Нұсқауыш типтері туралы қажеттері

мәліметтер

2.2 Бір байланысты тізім

2.3 Бір байланысты тізбек түріндегі

жолдың көрінісі

2.4 Жол тізбектерге операция жасау

Қорытынды

Кіріспе

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

Бұндай жағдайларда динамикалық объектілерде іс-әрекеттің орындалуы
барлық жағдайда программалық объектілерді статикалық айнымалының нұсқауыш
типі арқылы беріледі, ал олар ауыспалы терминдерде динамикалық
объектілердің іс-әрекетімен сипатталады. Бұл программа айнымалы нұсқауыш
тип, программа орындалу барысында анықталады, ал осындай мағынада
жеткілікті құруға сәйкес келетін тиімді жабдықтар қарастырып отырмыз.

2.1 Нұсқауыш типтері туралы қажеттері мәліметтер

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

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

Есептердің шығару алгоритімі жинақталатын нысандарды - кез-келген
динамикалық құрылымдарды жеңіл жасаудың тәсілдерін қарастырамын..

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

Динамикалық обьектінің құрылымдары кем дегенде екі өрістен тұрады:
бірінші өрісінде – атрибуттар, екінші өрісінде – басқа динамикалық объект
адресімен байланысқан нұсқауыш тұрады. Сонымен динамикалық объект бір атпен
берілген нысан әртекті мәліметтердің жиынынан құралады, struct кілттік
сөзімен анықталатын құрылымдық тип. Енді осындай динамикалық объектілерден
стектар, кезектер, тізімдер, кестелер және т.б. динамикалық объектілер
құрастыруға болады .

Ендігі жерде құрылымдық түрді толық қарастырмай тек күрделі
динамикалық объектінің берілу және өңдеу тәсілдерін түсінуге қолайлы
сұрақтарды қарастырамын..

Сонымен tagName структуралық типін анықтауға мысал келтірсек:

struct tagName

{ int k;

char str [6];

double d;

int ar[2][3];

};

осы тип С++ тілінде келесі түрде беріледі: tagName st1, st2;

бірақ Си тілінде міндетті түрде struct кілттік сөзін қайталау керек:
struct tagName st1, st2;

typedef кілттік сөзі Си тілінде синтаксистік хабарлама структуралық типі
түрінде пайдаланылады.

typedef struct tagName

{ int k;

char str [6];

double d;

int ar[2][3];

} STRUCTNAME;

осыдан кейін структураның өзгеруін келесі түрде өзгертуге болады:
STRUCTNAME st1, st2;

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

tagName *pst = & st1;

Бағыттаушы операциясы құрылымдық айнымалының өрістеріне нұсқау
арқылы қол жеткен іске асырады, мысалы: pst → k Осы мақсатқа нүкте
операциясын да жақсы қолдануға болады: ( * pst ) . k .

Осы мысалдан pst нұсқауышы алдында ‘*’ операциясының әрекетін көреміз,
құрылымның мазмұнын ащады, ‘.’-операциясы к айнымалысына кіруді қамтамасыз
етеді. Өрнекте жақшалар міндетті, ‘*’ операциясынан ‘.’ операциясы жоғары
болады.

Құрылымдық мәлімет типі нұсқаушысынан көрі басқа типов нұсқаушысын
пайдаланып құрылымдық өріс айнымалысына “жетуге” болады. Шындығында char *
нұсқаушысының типін анықтаймыз, онда инкремента операциясы оның мағынасына
(адрес жадысы) тек бір бірлікке көбейгенін көрсетеді. Осындай нұсқаушысының
арқасында кез-келген жады диапазоны бірден аралап, көріп шығуға болады,
шешілмейтін мәселемен әрқашан айқын мәліметтер тип көмегімен түзеуге
болады.

char *p = (char*) &st1;

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

struct tagName

{ ...tagName *p; }

2.2 Бір байланысты тізім

Бір байланысты тізім - жалпы мақсатты икемді динамикалық құрылым.

Бір байланысты тізім құру үшін СС++ тілдерінің нұсқауыштары мен
құрылымдарынан алған білімімді пайдаланамын.

Бір байланысты тізімдер де массивтер сияқты жиындардың мәндерін
сақтауға арналған. Массивтерден бір байланысты тізімдердің айырмашылығы
ақпараттардың элементтерінің санын қажет етпейді. Яғни олар негізінде
динамикалық объект болып табылады.

Бір байланысты тізімдер әрқайсысында осы түйін туралы ақпарат және келесі
түйін нұсқауышы сақталатын түйіндерден (ағылшынша - nodes) тұрады. Ең
басында бастапқы бірінші түйін орналасады да одан бостап келесі түйіндерді
жүріп өтуге болады. Сонымен кез-келген түйінге жетіп оның ішіндегі
сақталатын ақпараттар мәндерін шығарып алуға болады. Соңғы түйін өзінің
нұсқауыштық өрісінің нөлдік мәнімен ерекшелейді.

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

Бұдан кейін келесі жаңа түйіндерді дайын тізбектің соңына қосуға
мақсатталған динамикалық процесс жүреді. Әр түйін компьютер жадында
динамикалық түрде жасалынып одан кейін осы түйіннің ақпараттық міндерімен
нұсқауыштық өрістері алдыңғы бір байланысты тізімге бекітілген түйіннен
алынып жасалынады. Әрине, бір байланысты түйіндер құрылған тізімін жою
арқылы компьютердің жадындағы оған бөлінген орынды босатуға мүмкіндік болу
керек. Енді тізімді өңдемейтін бірақ бір байланысты тізімді құрастырудың
міндеті жұмысы іске асыратын программаға мысал келтірейік.

Тізбек түйіні құрылымдық айнымалы типін ұсынады..

struct Node

{ int val; ақпараттық мағынасы

Node *pNode; кезекті түйіннің нұсқауышы

};

Жаңа түйіндерді бастапқы жұмыс жасап тұрған тізбекке қосу үшін Add()
функциясын орындайды, тізбектің мәнін шығару үшін – Print() функция,
тізбекті өшіру үшін – Remove() функциясы қолданылады.

#include stdio.h

#include conio.h

#include malloc.h

struct Node

{ int val;

Node * pNode;

};

функцияның прототипі

void Add (Node **ppStart, int newVal);

void Print (Node * pStart);

void Remove (Node **ppStart);

int main (void)

{ int ret;

Node *pN = NULL;

Add (&pN, 5);

Add ( &pN, 6);

Add ( &pN, 7);

Print ( pN);

Remove (& pN);

getch ( );

return 0;

}

void Add (Node **ppStart, int newVal)

{ Node *p = *ppStart;

if (p==NULL)

тізбектің бірінші элементін құрамыз

{ *ppStart = (Node*)malloc (sizeof(Node));

( *ppStart) → val = newVal;

(*ppStart) → pNode = NULL;

return;

}

while ( p != NULL)

{ If (p → pNode == NULL) break;

p = p → pNode;

}

p → pNode = (Node*)malloc (sizeof(Node));

(p → pNode) → val = newVal;

(p → pNode) → pNode = NULL;

}

void Print ( Node *pStart)

{ Node *p = pStart;

while (p != NULL)

{ printf (“Элемент = %d \n”, p → val );

p = p → pNode;

}

prinrf (“\n Тізім толығымен шығарылған! \n”);

}

void Remove (Node **ppStart)

{

Node *p;

p = *ppStart;

if ( *ppStart == NULL) бос тізім

return;

while ( p→ pNode != NULL)

тізімдегі соңғы элемент емес

{ if(p →pNode)→pNode==NULL)

соңғы екі элемент

р нұсқауышымен адрестеледі.

{ free (p → pNode);

p → pNode = NULL;

p = *ppStart;

continue;

}

else

p = p → pNode;

}

соңғы элементті және нұсқауышты жоямыз

тізімнің басына NULL-ді меншіктейміз

free (* ppStart);

*ppStart = NULL;

}

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

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Әрбір оператордан кейін
Құрылымдық программалаудың базалық конструкциялары
ҚҰРЫЛЫМДАНҒАН МӘЛІМЕТ ТИПТЕРІ ТУРАЛЫ ЖАЛПЫ ҰҒЫМ
Жадыны динамикалық үлестіру
Int - бүтін сан типі
Тауарды файлға енгізу процесі
Сөз тіркестерін өңдеу
С++ тілінің базалық жабдықтары. Препроцессор директивалары
Файлдар
Лабораториялық жұмыстар, файлдарды пайдалану
Пәндер