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

Кіріспе
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 ... ... ... ... ... библиотеканың енгізу-шығаруы туралы
ақпаратты қосу ... ... ... (printf функциясының прототипін
шақыру).
Функциялардың ... ... беру ... ... ... ... ... мәндер арқылы жүзеге асырылады.
Сыртқы айнымалылар функциядан тыс өзнешеліктерді анықтайды және көптеген
функциялар үшін ... ... ... Си-де басқа функциялардың
ішіндегі функцияларды анықтауға тиым салынатындықтан, функцияның ... ... ... болып табылады.
Си тіліндегі қарапайым программа бір ғана жалғыз main ... ... сол ... ... ... ... мүмкіндіктерді:
сипаттама, айнымалылар, арифметикалық өрнектер, циклдер және форматты
қорытындыны қарастырады.
Си-де ... ... оны ... бұрын, яғни алғашқы
орындалатын нұсқауға дейін сипатталуы қажет. Мәліметтер үшін ... char, short, long, double, int, float. ... ... ... мен ... осы типтердің мәндерінің
нәтижесі ретінде қайтарылатын базалық типтер мен ... ... ... ... ... ... программаның логикалық
құрылымын ерекшелейді. Бұдан басқа әр жолда бір ғана ... жазу ... бос ... ... ... ... ... барлық аргументтері “мән бойынша” беріледі, ... ... өзге ... ... ... ... ... қатынас жасай алады. Сондықтан Си-де функцияны шақырушы
айнымалыны тікелей өзгертуге болмайтын функция шақырылады: ол оның ... ... ғана ... ... қасиеттің арқасында, негізінде жинақтырақ программа жазуға мүмкіндік
бар.
Егер шақырылатын программада функцияға айнымалыны ... ... ... соңында айнымалыны өзгертуге жататын адрес берілуі керек ... ал ... ... ... ... параметрді көрсеткіш
ретінде сипаттау керек және осы ... ол ... ... қатынас
жасауды ұйымдастыру қажет.
Егер функцияның аргументі массив (массив аты) болса, онда функцияға осы
массивтің бастапқы адресі болатын мән беріледі; массивтің ешқандай
элементтері ... ... ... Обьектілі - бағытталған программалау негіздері .
Объектілі-бағытталған әдістеме “объект” ... ... ... ... қосады. Әртүрлі объектілер өзінің қасиеттері және
мінездемелерімен сипатталады. Объектілі-бағытталған әдістемені ... сол ... ... және ... ... жобалау) ретінде
қолдануға болады.
Объектілі-бағытталған әдістеменің (ОБӘ) дамуына процедуралық ... ... ... ... ішінде әсіресе Си тілі.
Құрылымдық парадигма (сөздердің септелуі, жіктелу үлгісі) машиналық
тілдегі программалаудың парадигмасымен ... ... ... отырады,
бірақ басқа жағынан алғанда кемшіліктері бар.
Программалау ... ... ... ... ... ... ... мұрагер және полиморфизмді қоса отырып, модульдік
программалаудан кейінгі келесі ... ... орын ... ... ... ... программаны, оны жоғары деңгейлік ... бөле ... ... Әр ... ... мәселенің анықталған
аспектілерін моделдейді. Объектілі-бағытталған программалау программаның
орындалу процесін басқару үшін процедураны шақыратын ... ... ... ... ... ... қатар объектілер өзара бір-
бірімен әрекеттеседі. Объектілі-бағытталған әдістеме көмегімен ... ... ... ... ... ... ... есептеледі!
2. Басқару
Есептеу орындалу ережесі басқару нұсқауымен анықталады.
Кез-келген өрнек, егерде оның соңына нүктелі үтір қойсақ ... ... х=0; i++; ... жазбада.
Си-де нүктелі үтір Паскаль тіліндегі сияқты бөлуші емес, нұсқаудың аяқтаушы
литері болып ... ... ... ... – бұл ... ... көмегімен сипаттаманы және
нұсқауды біріктіру. Синтаксистік тұрғыдан, мұндай сұлба бір нұсқау ретінде
қабылданады.
Нұсқауды біріктірудің басқа мысалы – бұл if, else, while ... ... ... ... жақша.
Сұлба соңында оң жабушы фигуралы жақшадан кейін нүктелі үтір қойылмайды.
Басқару нұсқауларға жататындар:
if- else – шешім қабылдау үшін;
else -if– ... ... ... ... – көп ... бірін таңдау үшін қосу (Паскальда case операторына
пара-пар);
while және for ... do- ... және continue ... және ... ... ... ... түсініктемелер келтірейік:
- бір-біріне қойылған if – конструкция else – ... ... ... бір ... талдауға әкелуі мүмкін. Бұл мәнсіздікті, else
әрқашан жақын тұрған else-сі жоқ ... ... ... ... if және else ... күрделілігінің дұрыс интерпретациясы фигуралы
жақшаны, сол сияқты мәтінде шегіністерді көрсету көмегімен дұрыс ... switch ... әр ... (соның ішінде және default-тан кейін)
break – қосқыштан шығу нұсқауымен ... ... ... ... for циклінің үш компоненті (өрн1; өрн2; өрн3)
кездейсоқ өрнекті көрсетеді, өрн1 және өрн3 – бұл ... ... ... ал өрн2 – ... ... Осы үш ... кез-келгені
болмауы мүмкін, бірақ нүктелі үтірді қалдыруға болмайды. өрн1 және ... олар ... ... жоқ деп ... ... ... ... әрқашан ақиқат екендігін білдіреді.
- Си-де for ... ... және оның ... мәні ... ... ... және ... индексінің мәні циклден шықаннан кейін әрқашан
белгілі болады;
- ... ... ... ... жұбы ... оңға ... Нәтиженің типі мен мәні for нұсқауында әр үш компонент ... ие ... оң жақ ... мәні мен типі ... ... ... ... параллель енгізу (функция ... ... және т.б. ... ... ... do – while ... шарт ақиқат болағанда қайталау ... break және continue ... ... ... ... ... табылады: break нұсқауы ең ішкі оның циклдері мен
қосқыштарынан тез арада шығуды ... ... continue ... ... ... ( for, while ... do – while) ... келесі қадамын
бастауға әкеп тірейді.
2. Арнайы бөлім
2.1 ... және ... ... ... ... есептерді ұсақтарға бөледі және құрылған
программаны қайтып «нөлден» ... ... ... ... ... ... Осы ... таңдалған функцияларда «тығылған»
(ипкапсуляцияланған), олардың функционалдануының бөлшектері программаның
басқа бөлімдері үшін ... бұл ... ... ... және ... ... ... Си-дегі программалар үлкеннің біреуінен ... ... ... ... санынан тұрады. Программаны бір немесе бірнеше ... ... ... Бұл ... жеке комиляциялауға, ал бірге
жүктеуге болады, сонымен бірге бұрын ... ... кіші ... бөлу ... ... ... шешіледі,
оның нәтижесі болып олардың арасындағы қатынастар, басты бір функциялардан
(main) тұратын құрамы табылады. Осы ... ... ... мен ... ... жай және жалпы түрі бола келеді.
Функциялар арасындағы байланыс мәнді және сыртқы айнымалыны қайтаратын
аргументтер ... ... ... ... ... ... ... орналастыруға рұқсат етіледі; бастапқы программаны функциялардың
бірде-біреуі ... ... етіп ... ... ... бөлуге
болады.
return нұсқауы шақырылатын функцияға нәтижені қайтаратын механизм.
return сөзінен кейін кез-келген ... ... ... Қажет болса, өрнек
нәтиже типіне келтіріледі.
main функциясы программа жұмысының нәтижесі ретінде берілген программа
шақырылған ортада болатын ... да бір ... ... ... ... типі ... ... болса, онда ол int
типіндегі мәнді қайтарады деп шамалайды.
Бүтін емес ... ... ... ... осы ... ... типі ... декларациялануы қажет. Сонымен ... ... ... ... ... емес ... қайтаратынын білу
маңызды. Бұны қамтамасыз ететін ... бірі – ... ... оның ... керек. Мысалы:
#include
#define MAXLINE 100
// қарапайым калькулятор
main ( )
{ double sum, atof (char [] ... line ... getline (char line [], int ... ( getline (line, ... ( “\t%g\n”,sum+=atof(line));
return 0;
}
double sum, atof (char [] ) декларациясында ( char [] типті ... және double ... ... ... ... double-ге
түрлендіреді) sum – double типтің айнымалысы, ал atof - ... ... ... алдын-ала еш жерде сипатталмаған және одан кейін ашық жақша
болатын ат кездессе, онда int ... ... ... ... ... бойынша функция аты деп есептеледі; бұдан оның ... ... ... ... ... Си ... программа сыртқы объектілердің жиынымен орындалады:
айнымалылар және функциялармен. Сыртқы айнымалылар ... ... ... және ... ... ... үшін ... Си-де басқа функциялардың ішіндегі функцияларды анықтауға тиым
салынатындықтан, функцияның өзі әрқашан сыртқы ... ... ... ... әр түрлі файлдарда қолданылатын бірдей сыртқы аттар бір
және басқа ... ... ... ... ... үшін сыртқы (external) айнымалы, оның аты бойынша
қатынас жасайды, егер бұл ... ... ... ... ... бар ... ... олардың мәндері
функцияларға көңіл аудару ... ... ... ... ... бір ғана мәліметтерді ғана қолдану қажет болса және олардың еш
біреуі, ... ... онда осы ... ... сыртқы
айнымалылар түрінде, оларды функцияға және керісінше аргументтер арқылы
бермей, аударуға ыңғайлы.
2.3 Функциялар ... ету ... ... ... ... - программаның бастапқы мәтінін бірнеше файлдарда сақтауға болады, ал
бұрын компиляцияланған программаларды кітапханадан жүктеуге ... ... ... сұрақтар туындайды: декларацияларда қалай жазамыз, оларды
қандай тәртіппен ... және ... ... сөзбен
айтқанда, программаны бірнеше файлдарға бөлу айнымалылардың сипаттамасында
программаның бөліктерінің байланысының қажетті ... ... ... және т.б. ... ... ету ... деп, осы ... қолдануға болатын программаның
бөлігі есептелінеді. Автоматты айнымалылар үшін әрекет ету аймағы болып,
олар сипатталған ... ... ... ... функциялардың жергілікті
айнымалылары бір-бірімен ешқандай байланыспаған. Сондай айтылым ... ... ... функция параметрлеріне де қатысты шындық болады.
Ішкі айнымалы немесе функцияның әрекет ету аймағы компилияцияға жататын
файлдың ... ... ... ... ... ... егер main, sp, val, push және pop ... тәртіппен бір файлда
анықталса, яғни
main ( ) { … }
int sp=0;
double val [ MAX ... push ( double f ) { … ... pop ( void ) { … ... sp және val ... push және ... ... аттары бойынша
жіберуге болады; олар үшін ... ... ... ... ... push және ... секілді бұл аттар көрінбейді.
Егер сыртқы айнымалыға ол анықталғанға дейін жіберілуі керек ... ... ... ... анықталса, онда оның декларциясы extern ... ... Ішкі ... ... ... ... ... (бәрінен бұрын оның типін), ал анықтама, сондай-ақ ол ... ... әсер ... ... 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 ... double val [ ... push (double f) { … ... pop ( void ) { … ... ... int sp=0;
double val [ MAX ];
extern декларациясы функцияның анықталуында емес және 1-ші ... ... ... ... ... ... ... декларацияның біреуінің жазылуы барлық 1 файлдар үшін жеткілікті.
Тура сол extern ... ...... бір ғана файлдан
тұрған жағдайда қажет, ... sp және val ... ... қолданылуынан
кейін орналасады.
Сыртқы айнымалыға немесе функцияға қолданылған 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, ... ... (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);
жазуға болады
* операторының ... . ... ... ... ... ... қажет.
“Құрлымдағы көрсеткіш” түсінігімен байланысты мүшелерге қатынас жасау
үшін жазбаның қысқаша формасы ... Егер р – ... ... онда ... – оның жеке ... ... ... printf-
ты келесі түрде жазуға болады.
printf(“origin:(%d,%d)\n”,pp->x,pp->y);
Екі және -> операторларда солдан оңға қарай орындалады.
Құрылым мүшелеріне ... ... және -> ... ... ... ) және ... индекстеу [ ] операторларымен бірге приоритеттер
иерархиясында ең жоғарғы орынға ие және ... ... ... ... егер ... берілсе
struct
{ int len;
char*str;
} *p;
онда ++(р -> len) өрнекте ... ... ... ... өзі ... ++р -> len бір мәнге len структурасының ... ... ... өзгерту үшін анық жақшалар керек. (++р)
-> len-де len-нің мәнін алмас бұрын, программа р көрсеткішін жылжытады.
Құрылым ... ... ... ... әр кілттік сөздердің санын анықтайтын
программаны құрастырайық. Бұл үшін біз кілттік сөздерді стрингтің массиві
түрінде, ... ... ... ... ... массивтер түрінде
сақтай білуіміз керек болатын, варианттардың біреуі – бұл екі ... болу ... *keyword ... keycount [ ... ... ... сақтаудың басқаша - құрылым массиві арқылы
ұйымдастыруды ойға ... Әр ... ... ... ... ... ... count; жазуға болады
Мұндай жұптар массивті құрайды.
struct key
{ char *word;
int count;
}keytab[NKEYS];
декларациясы key типті құрылымды сипаттайды және keytab ... ... ... бір ... жады ... және осы ... әр ... құрылым
болады. Мұны басқаша жазуға да болады:
struct key
{ char ... ... key ... ... тұрақты аттардың жиынынан тұратындықтан, оны сыртқы
массив ретінде жасаған ... және ... ... бір ... ... key ... ... count;
} keytab[ ]={“auto”,0,”break”,0,/*…*/”while”,0};
keytab массивтің элементтерінің саны инициализаторлардың мөлшері бойынша
есептелінеді.
Си-де компиляция ... ... ... sizeof, ... ... бар. Оны
кез-келген объектінің өлшемін есептеу үшін қолдануға болады.
sizeof объект және sizeof (тип ... ... ... ... ... ... ... тең бүтін
мәндерді береді. Объект айналымы, массив немесе ... ... ... ... ... базалық типтің аты ... ... ... аты, ... ... көрсеткіштің қолданылуы мүмкін.
3.1.3 Құрылымның көрсеткіштері
Құрылымның көрсеткіштері мен ... ... ... ... ... келтіру үшін, массивтің элементтерін алу ... ... ... Си программасының мәтініндегі кілттік
сөздерді есептеу ... ... ...
#include
#define MAXWORD 100
int getword (char*, int);
struct key * ... (char*, struct key *, ... ... ... ... ... ( )
{ char word [MAXWORD];
struct key ... (getword (word, ... ... ... keytab, ... (p=keytab; pcount > 0)
printf (“%4d%s\n”,p->count, p->word);
return 0;
}
// binsearch: ... ... ... key * binsearch (char *word, struct key *tab, int n)
{ int cond;
struct key ... key * high = ... key ... ... ... ... NULL;
}
Егер binsearch функциясы кілттік сөзді тапса, онда ол көрсеткішті оған
береді, кері жағдайда ол NULL-ді ... keytab ... ... ... ... ... ... low және high үшін инициализаторлар
ретінде басына және массивтің ... ... ... ... ... mid = (low +high)/2 формуласы арқылы орташа элементті есептеуге
болмайды, өйткені көрсеткіштерді ... ... ... ... алу амалын
қолдануға болады, high-low элементтер саны болғандықтан,
mid = low + ( high – low )/2
меншіктеуді low және ... ... ... ... ... ... циклінде p++ операторы р-ны массивтің келесі құрылымдық элементіне
өсіреді. ... ... оның ... ... қосындысына тең
болады деп ұйғаруға болмайды. Sizeof операторы дұрыс мәнді ... ... кіру ... келесін сөзін немесе литерін қабылдайды.
Сөз ... ... ... жеке бос орынсыз литерлерден басталатын цифр -
әріптер шынжыры деген түсінік алынады. ... соңы ... ... ... ал қалған жағдайларда сөздің бірінші литерінің коды немесе жеке
литер ... егер ол әріп ... оның мәні ... ... getword: ... ... ... литерді қабылдайды
int getword (char * word, int ... int c, getch ... ungetch ... * w =word;
while (isspace (c=getch( ))
;
if (c!=EOF) ... ... ... ... (; --lim >0; ... ... ... )))
{ ungetch (*w);
break;
}
*w=’\0’;
return word [0];
}
ungetch-ті пайдалану кіру ағынындағы артық ... ... ... ... бос ... литерді жіберу үшін - isspace, ... ... үшін - isalpha және әріп ... ... ... isalnum ... ... барлығы стандартты бас файлда
сипатталады. getch және ungetch функциялары ... ... ... Көп
жағдайда, программа артықтарын оқып болғанша қажеттілердің барлығын оқыды
ма, әлде жоқ па соны “түсінбейді”. ... ... ... ... ... артық оқығанын, әсіресе санаққа ... ... ... ... ... ... қайтаратын операция қажет. Керісінше
литерді жіберу механизмі енгізу кезінде getch кезекті литерді қоятын, ... ... ungetch ... кері ... ... ... жұбының көмегімен оңай моделденеді.
3.1.4 Құрлымның өзіне сілтеме жасауы
Біз жалпылама есепті шешкіміз келсін делік – кіру ... ... үшін ... ... ... ... жазайық. Сөздер
тізімі алдын-ала белгісіз болғандықтан біз оларды алдын-ала реттестіре және
қолдана алмаймыз, мысалы бинарлы іздеу, сұрыптау мақсаты – ... ... ... ... Әр алынған сөзді, бұрын ол кездестіме,
әлде ... ... ... үшін ... ... ... ... болар еді,
осы жағдайда программа өте жай жұмыс ... еді. ... ... сөздердің
тізімдерімен дұрыс жұмыс істеу үшін, мәліметтерді ... ... ... ... туындайды.
Тәсілдердің бірі – реті бұзылмайтындай, орынға әр жаңа ... ... ... ... ... ... ... Бұл үшін бинарлы ағаш деп
аталатын мәлеметтер құрылымы қажет.
Ағашта әр жеке ... ... ... ... мәтініне көрсеткіш:
сөздің мәтініне көрсеткіш;
кездесетіндердің санын есептеу;
сол жақ балалық түйінге көрсеткіш;
оң жақ ... ... ... ... бір ... екі баласы бар, немесе түйінің типті баласы жоқ.
Мұрагері жоқ түйінді жапырақ деп атайды.
Ағашта түйіндер сол жақ ағаштың кез-келген ... ... ... сөзіне қарағанда лексикографикалық жағынан аз сөздерден, ал оң
жағы – одан артығырақ сөздерден тұратындай ... ... ... ... балалық түйіндерінің ... ... ... ... ... процессі мәні бойынша ... ... ... қосу мен ... басып шығару үшін, мұнда ... ... ... ... ағаштың түйінін сипаттауды төрт компонентті құрылым түрінде
көрсетейік:
struct tnode //ағаш түйіні
{ char *word; ... ... count; ... ... ... //сол жақ ... tnode*right; // оң жақ бала
};
Құрылым өз-өзін қоса алмайды, бірақ
struct tnode*left;
tnode түйініне ... ... ... анықтайды, ал tnode өзі
анықтамайды.
Кейде өзара жіберілетін құрылымдар ... ... ... екі ... ... мәселені шеше алатын тәсіл келесі
фрагментті ұйымдастырады:
struct t
{ …
struct s *p; // p s-ті ... s
{ ... t *q; // q t-ны ... ... ... ... getword ... көмегімен
сөзді оқиды және оларды addtree функциясы арқылы ағашқа қояды.
#include
#include
#include
#define MAXWORD 100
struct tnode * addtree (struct tnode *, char ... ... (struct tnode ... getword ( char * , int ... ... сөздің жиілігін есептеу
main ()
{ struct tnode * root; // ... ... ... word ... = NULL;
while ( getword(word, MAXWORD)!=EOF)
if ( isalpha (word[0]))
root = addtree(root,word);
treeprint(root);
return 0 ;
}
addtree функциясы ... Әр ... ... ... үшін ... ... және саны 1-ге артады, немесе ол үшін жаңа ... егер ... сөз ... ... ... жаңа ... ... ата-анасына қойылатындай, оған көрсеткішті addtree ... ... tnode * talloc ( ... * strdup ( char ... addtree: w ... p-ға немесе одан төменге түйін қосылады
struct tnode * addtree ( struct tnode *p, char * w)
{ int cond;
if ( p= = NULL) //сөз ... рет ... ... ... // жаңа ... ... = strdup ... =1;
p→left = p→ right = NULL;
}
else if (( cond = strcmp( ... = ... + + ; // бұл сөз ... if ( condnext)
if (strcmp (s,np->name)= =0)
return np; \\ ... ... ... NULL; \\ ... ... ... ... бар екенін анықтау үшін lookup-қа
қатынас жасайды. Егер бұл осылай ... онда ескі ... ... кері ... жаңа ... ... nlist * lookup (char *);
char * strdup (char *);
\\ install: (name, defn) кестеге кіргізу
struct nlist * install ( char * name, char * ... struct nlist * ... ... (( np=(lookup (name))= =NULL) \\ ... np =(struct nlist*) ... (np = =NULL   (np -> name ... ... = hash ... -> next = hashtab ... ... = np;
}
else \\ ... ((void *) np-> defn); \\ ... ... (( np -> defn = strdup (defn)) = ... ... ... ... – бұл ... ... және ... объектілерден (әр уақыт
кезеңдерінде) тұратын айнымалы. Өлшемдер мен ... ... ... ... орындайды. Біріктірулер программаға машиналы ... ... ... ... ... жадының бір немесе басқа
аймақтарында сақтауға мүмкіндік береді. Бұл құралдар ... ... ... ... ... мақсаты – заңды негізде бірнеше
типтердің мәнін өзіне ... ... бар ... ... құрылым синтаксисіне ұқсас. Біріктіру синтаксисі құрылым
синтаксисіне ұқсас. Біріктірулер мысалын келтірейік.
union u_tag
{ int ... ... * ... ... ... үш айнымалылырдың кез-келген оған сиятындай
орналастыру жеткілікті үлкен болады; r ... дәл ... ... ... Осы үш типтердің біреуінің мәніне r ... ... және егер ол ... ... яғни оған ... ... типі
соңғы оған меншіктелген мәннің типтерімен сәйкес келсе, әріқарай өрнектерде
қолданылады. Осы ... әр ... ... ... программистің
еркінде. Нәтиженің “Келіспеушілік” типтері жағдайы іске асырудан тәуелді.
Біріктіру мүшелеріне қатынасу синтаксисі ... ... -> ... ... ... ... және ... кіруі мүмкін және керісінше.
Мысалы, құрылым массивінде
struct
{ char ... ... int ... ... * sval;
} r;
} symtab ... ... ... жіберіледі
symtab[i].r.ival
ал sval стрингтің бірінші литеріне келесі екі тәсілдің кез-келгенімен
қатынасуға болады:
* symtab [i].r.ival
symtab ... ... – бұл ... ... оның базалық адресінің өлшеміне
қатысты нөлдік жылжытуы бар және онда ең ... ... ... ... ... типін тегістеуді қанағаттандыруға мүмкіндік беретін
құрылым.
Құрылымға қолданылатын операциялар біріктірулер үшін де орындалады.
Біріктірулерді инициализациялауды оның бірінші мүшесінің типі бар ... ... ... жиі ... ... ие ... ... оларда мәліметтер
көрінісі орындалатын жұмысқа сәйкес ... ... ... ... ... жақсартылған құрылымын таңдау, үйрене алмайтын өзінің
тегіндегі көркемөнері болып табылады. Шешімдер процесі жіңілірек болу ... ... ... ... ... ... ... анықтау үшін алдын-ала программаның алғашқы жазылған түрін
жиі жазып отыруға тура келеді.
Көптеген программалар, оларды түгелдей ... үшін өте ... ... ... ... үшін, оларды бөліктерге бөлу керек. Бұл
программаның сенімділігін ... ... ... ... оқу ... жалғыз тәсілі. Функция мен процедуралар үлкен программалардың
“модульдері” немесе ... ... ... ... ... ... жеке ... трансляциялануы және бір-бірінен тәуелсіз пайдалануы мүмкін.
Үлкен модульдер, егер олар өте көп санды немесе тым ... ... ... кең ... қолдану үшін өте мамандандырылған болады ... ... және не ... ... анықтайтын, программаны ұйымдастыру
жеткіліксіз деректерді енгізу және ... ... мен ... ... ... ... ... есептерді кіші бөліктерге бөлу пәні “құрылымдық жобалау”
деп аталады. Осы пәннің шеңберінде:
- жазу мен ... ... ... ... ... - оларды
модуль түрінде ұйымдасқан ... ... ... ... ... ... ол ... есебін қалай шешетіндей жұмыс істемеуі
керек;
- әр модуль өзінің тікелей көршілерінің ... ... ғана ... ... ... ... өңделген мәліметтердің бейнесі табылуы керек;
Функциялар үлкен есептеулердегі есептерді ұсақтарға бөледі және құрылған
программаны қайтып «нөлден» бастамай, ... ... ... ... береді. Осы түрде таңдалған функцияларда «тығылған»
(ипкапсуляцияланған), олардың функционалдануының бөлшектері программаның
басқа бөлімдері үшін ... бұл ... ... түсініктірек және оған
өзгерістерді енгізуді жеңілдетеді.
Әдетте Си-дегі программалар үлкеннің біреуінен ... ... ... ... ... ... Программаны бір немесе бірнеше бастапқы
файлдарда орналастыруға болады. Бұл файлдар жеке комиляциялауға, ал бірге
жүктеуге ... ... ... ... компиляцияланған кітапханалық
функциялармен.
Есепті кіші бөліктерге бөлу функционалдық декомпазиция арқылы шешіледі,
оның нәтижесі болып ... ... ... ... бір ... тұратын құрамы табылады. Осы тұрғыдан кез-келген программа
айнымалылар мен ... ... жай және ... түрі бола ... ... ... мәнді және сыртқы айнымалыны қайтаратын
аргументтер арқылы жүзеге асады. Функцияны бастапқы файлдарда ... ... ... ... бастапқы программаны функциялардың
бірде-біреуі үзіліп қалмайтындай етіп ... ... ... ... ... ... ... нәтижені қайтаратын механизм.
return сөзінен кейін кез-келген өрнек келуі мүмкін. Қажет ... ... ... ... функциясы программа жұмысының нәтижесі ретінде берілген программа
шақырылған ортада болатын қандай да бір ... ... ... ... типі ... алынған болса, онда ол int
типіндегі мәнді қайтарады деп ... емес ... ... ... ... осы ... ... типі арқылы декларациялануы қажет. Сонымен қатар,
шақырушы программа шақырылатын функция ... емес ... ... ... Бұны ... ... ... бірі – шақыратын функцияларда
шақырылатынды оның сипаттауы керек. Мысалы:
#include
#define MAXLINE 100
// қарапайым калькулятор
main ( )
{ double sum, atof (char [] ... line ... getline (char line [], int ... ( getline (line, ... ( ... ... sum, atof (char [] ) декларациясында ( char [] типті аргументті
қабылдайтын және double ... ... ... ... ... sum – double ... ... ал atof - функция
екендігі айтылады.
Егер өрнекте алдын-ала еш жерде сипатталмаған және одан ... ашық ... ат ... онда int ... нәтижесін қабылдайтын мұндай ат,
контекст бойынша функция аты деп есептеледі; бұдан оның ... ... ... ... ... және оқу ... программалау
технологиясына арналған, нақты парадигмадан тәуелді программалау процессі
мен программалауды ... ... және ... ... ... ... ... Біздің курс СИ тілінің бұйрықты аспектілерінен
программалаудың маңызды пәні ... ... ... ... ағын ... ... ... операторлар және
мәліметтер көріністерімен қалыптасады. Өрнектер мен ұйымдастырулар ... ... жоқ – бұл ... ... ... ... басқару құрылымы программаның қаңқасын құрайды. Бұл құрылымдар if
және else операторларының көмегімен шешім ... for, do, ... ... ... ... ... ... сияқты функцияға ұйымдастырады. Программада осы құрылымдарды қолданудың
назары, олар қаншалықты ... ... ... ... ... әрекет ету жүзеге асатынынан және немен ... ... ... дұрысында, программаның көмегімен ... ... беру ... тез және ... ... ... керек.
Кез-келген тілде программаны жазудың пайдалы тәсілі жеткілікті ... ... ... ал ... ... ... тіліне ауыстырудың (қазіргі
жағдайда-Си) дұрыстығы анықталғаннан кейін бастапқы оның кодталуы болып
табылады.
Келесі қадам ... ... ... ... бұл ... ... қарай жобалау” немесе “тізбектелген декомпозиция” деп
атайды. Негізгі басқарушы құрылымдар толығымен ... ... ... және ... жеңіл түсіндіріледі. Мұндай тіл жеңіл оқылады және дәл,
сементикалық жағынан программалаудың кәдімгі ... ... біз ол ... деп ... ... оған ... ... принциптерін қолдана
аламыз. Оның жұмысқа қабілеттілігін тексеруге болады, яғни қажетті кезеңде
программаның әрекеті арқылы жүзеге асатыны дұрыс па ... ... ... препроцессоры компиляцияны нөлінші фазасында алғашқы файлды
өңдеу үшін қолданылатын макропроцессор болып есептелінеді. Препроцессор
директиві Си-дегі ... ... ... ... ... табылады
және әдетте алғашқы программаның модификациясын жеңілдету үшін және оларды
Си тілінің компиляторынан және ... ... ... болу ... Препроцессор директиві программаның мәтінінде лексемдерді
кейбір мәндерімен ауыстыруға мүмкіндік береді, соның ішінде ... ... ... ... ... қояды, алғашқы файлдың кейбір бөліктерін
компиляциясына тыйым салады және т.с.с.
Си тілінің ... ... ... ... ... файлды қосатын #include, және бірдей мәтінді шынжырларды ... # ... include ... жеке ... #define және ... ... ... жасауға мүмкіндік береді.
#include “файл аты” немесе
# include
түрдегі ... жол ... файл аты ... ауыстырылады. Егер файл
аты екі тырнақшаға алынса, онда ереже бойынша, файл программасының алғашқы
файлдарының арасынан ізделінеді; егер ... ... ... файл ... ... ... ... онда іздеу жүйелік библиотекаларда жүзеге
асырылады. Қосылған файлдың өзі #include ... ... include ... ... ... ... жинақтаудың жақсы
тәсілі. Ол әсіресе, ... ... неге ... болмайтынын,
барлық алғашқы файлдарды бір және сондай ... және ... ... ... ... ... ... файлға
өзгерісті енгізуде, барлық одан тәуелді файлдар қайтадан құрастырылуы
қажет.
Қолданылған ... А. ... ... ... на ... Ю.А. ... ... на языке C для AVR и PIC микроконтроллеров.
3) А. Богатырев. Руководство полного идиота по ... (на ... ... ...

Пән: Информатика
Жұмыс түрі: Реферат
Көлемі: 22 бет
Бұл жұмыстың бағасы: 300 теңге









Ұқсас жұмыстар
Тақырыб Бет саны
Delphi7 объектілі бағытталған программалау ортасы34 бет
C# Тілінің негіздері32 бет
Delphi программалау ортасы туралы10 бет
Turbo Pascal тіліндегі мәліметтердің күрделі типтері50 бет
Жануартану пәніне мультимедиялық анимация процессін ұйымдастыру технологиясы60 бет
Локальді желілерге арналған чат жүйесі48 бет
Құжаттарды бір-бірімен ұқсастығы78 бет
Объектті бағытталған программалау54 бет
Қазіргі замандағы жоғары деңгей тілдері: қысқа мінездеме, негізгі түсініктер. Объектіге бағытталған программалау технологиясы12 бет
Жалпы мақсаттағы қолданбалы программалар пакеті. Әдісті-бағытталған қолданбалы программалар9 бет


Исходниктер
Пәндер
Көмек / Помощь
Арайлым
Біз міндетті түрде жауап береміз!
Мы обязательно ответим!
Жіберу / Отправить


Зарабатывайте вместе с нами

Рахмет!
Хабарлама жіберілді. / Сообщение отправлено.

Сіз үшін аптасына 5 күн жұмыс істейміз.
Жұмыс уақыты 09:00 - 18:00

Мы работаем для Вас 5 дней в неделю.
Время работы 09:00 - 18:00

Email: info@stud.kz

Phone: 777 614 50 20
Жабу / Закрыть

Көмек / Помощь