Дәріс кешені с/с++ тілдері



Дәріс №1. Программалау технологиялары туралы түсінік.
Дәріс №2. С/С++ ТІЛДЕРІНІҢ ЭЛЕМЕНТТЕРІ. ТҰРАҚТЫЛАР.
Дәріс №3. ЕНГІЗУ.ШЫҒАРУ МҮМКІНДІКТЕРІ
Дәріс №4. ОПЕРАТОРЛАР
Дәріс №5. БАСҚАРУ ИНСТРУКЦИЯЛАРЫ МЕН КОНСТРУКЦИЯЛАРЫ
Дәріс №6. МАССИВТЕР
Дәріс №7. ФУНКЦИЯЛАР. РЕКУРСИЯ
Дәріс №8. КӨРСЕТКІШТЕР
Дәріс №9. СТРУКТУРАЛАР
Дәріс №10. БІРІКТІРУ
Дәріс №11. ГРАФИКА

ДӘРІС КЕШЕНІ

Дәріс №1. Программалау технологиялары туралы түсінік.

СС++ тілдеріне кіріспе

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

Жоспары:

1.1. Программалау тілдері. Программалау тілдерінің жіктемесі.
1.2. Программалау технологиялары.
1.3. С\С++ программалау тілдерінің тарихына қысқаша шолу. С\С++ программалау тілдерінің мүмкіндіктері мен ерекшеліктеріне шолу
1.4. СС++ тіліндегі программаның жалпы құрылысы. Препроцессор директивалары

1.1. Программалау тілдері. Программалау тілдерінің жіктемесі.

Қазіргі электрондық есептеуіш машиналарын программалық жабдықтау барысында негізгі орын - программалау жүйелеріне тиесілі. Ал, программалау жүйелері - ақпараттармен жұмыс жасауға арналған универсал құрал. Олардың көмегімен есептеулер жүргізуге, мәтіндерді өңдеу, графикалық бейнелер тұрғызу, мәліметтерді сақтау және іздеу т.б. әрекеттерді жүзеге асыруға болады.
Өз кезегінде бұл құралдардың өзі - программалау тілдерінде жазылған программа.
Ал, программалау тілдерінің өзгеру қарқыны өте жылдам, қазіргі таңда программалау тілдерінің саны көп және жыл сайын жаңа бір тілдер пайда болуда.
Программалау тілдерінің даму бағытын шартты түрде - процедуралық және процедуралық емес деп бөлуге болады.
Процедуралық программалау есептеуіш техникаларының даму кезеңінен бастап таралған және әлі кең қолданыста. Және процедуралық тілдердегі программа орындауға тиісті әрекеттерді сипаттайды, әрекеттерге сәйкес нәтиже нақты бір процедуралардың көмегімен алынады. Олай болса, процедуралық программалау алгоритмдік ойлау қабілетімен негізделеді, демек ойлау қабілетін дамыту құралы ретінде қолданыла алады. Процедуралық тілдердің ішінде структуралық тілдерді айрықша атауға болады.
Структуралық тілдерде бір оператор көмегімен бүтін бір алгоритмдік құрылым жазылатынын белгілі. Алгоритмдік құрылымдар: ілесу, тармақ, циклдар екені бәрімізге аян. Ал, операциялық тілдерде мұны сипаттау бірнеше амал орындауды қажет етеді. Структуралық тілдер Pascal, CC++ .
Процедуралық емес программалауға функциональдық және логикалық тілдер жататыны мәлім. Функционалдық тілдердегі программа қандай да бір функцияның есептелуін сипаттайды. Және ол функция басқа қарапайым функциялар композициясы ретінде анықталады. Функциональдық тілдердегі кең тараған элемент - рекурсия болып табылады. Меншіктеу және циклдар классикалық функциональдық тілдерде жоқ. Кең тарағаны - Лисп тілі.
Функционалдық және процедуралық тілдердің құралдарынан тұратын тіл - Лого.
Логикалық тілдерде программа әрекетті сипаттамайды, мәліметтерді береді және олардың арасындағы сәйкестілік орнатылады, яғни машина программада анықталған мәліметтерді терімдеп(перебор) сәйкестілікті анықтайды. Мысал ретінде Пролог тілі қабылданады, бірақ онда да процедуралық элементтер кіріктірілген. Сол секілді кең құлаш жайып жатқан тілдер - объектілі - бағытталған программалау тілдері. Мұнда да процедуралық программалау элементтері болғанымен, мұнда есепті шешудегі әрекеттердің айқын тізбегі сипатталмайды.

1.2. Программалау технологиялары

Программаларды жобалаудың негізгі екі тәсілі жоғарыдан төмен және төменнен жоғары бар.
Төменнен жоғары технологиясыныңмағынасы: алдымен етене таныс және түсінікті (сұрыптау алгоритмдері жүзеге асыру, жолдарды өңдеу, мәліметтерді енгізу) мәселелер орындалады да сосын барып үлкен, күрделі прорамманы дайын бөлшектерден құрастыру жасалады.
Жоғарыдан төмен тенологиясының мағынасы: алдымен программа скелеті дайындалып (процедуралар мен олардың арасындағы байланысы) алынады да содан кейін жеке бөлшектерін жазуға кіріседі.
Көбінесе программа аталған екі технологияны аралас қолдану арқылы құрылады.
Программалар жиі нашар құрылымдарға ие болады немесе оларда мәліметтер көрінісі орындалатын жұмысқа сәйкес болмағандықтан, олармен жұмыс істеу қиын.
Мәліметтердің жақсартылған құрылымын таңдау, үйрене алмайтын өзінің тегіндегі көркемөнері болып табылады. Шешімдер процесі жеңілірек болу үшін және мәліметтер құрылымында қандай өзгерістер басқаруды қысқартуға көмектесетінін анықтау үшін алдын-ала программаның алғашқы жазылған түрін жиі жазып отыруға тура келеді.
Көптеген программалар, оларды түгелдей қабылдау үшін өте қолайсыз болып келеді. Жеке-жеке меңгеру үшін, оларды бөліктерге бөлу қажет. Бұл программаның сеніділігін арттырудың жалғыз жолы, сондай-ақ оқу мен түсінудің жалғыз тәсілі.
Функция мен процедуралар үлкен программалаудың модульдері немесе құрылыстық блоктары болып табылады. Көптеген тілдерде ол жеке түрде трансляциялануы және бір-бірінен тәуелсіз пайдалануы мүмкін. Үлкен модульдер, егер олар өте көп санды немесе тым әртүрлі функцияларды орындайтын болса кең түрде қолдану үшін өте мамандандырылған болады және пайдалану қиын.
Қайда және не орындалу керектігін анықтайтын, программаны ұйымдастыру жеткіліксіз мәліметтерді енгізу және шығару форматтары мен есепті талдау салдары болып табылады.
Үлкен көлемдегі есептерді кіші көлемді есептерге бөлу процесі құрылымдық жобалау деп аталады. Осы пәннің шеңберінде:
- Жазу мен үлкен программаларды сүйемелдеудің жалғыз тәсілі - оларды модуль түрінде ұйымдасқан біраз функциялардың жиынтығы ретінде көрсету;
- Модульде ақпарат, ол өзінің есебін қалай шешетіндей жұмыс істемеуі керек;
- Әр модуль өзінің тікелей көршілерінің шағын тобымен ғана өзара әрекеттесуі қажет;
- Программаның құрамында өнделген мәліметтердің бейнесі табылуы керек.

1.3. С\С++ программалау тілдерінің тарихына қысқаша шолу

Си- тілі жүйелік программалау тілі, бұл тілді компиляторлар мен операциялық жүйелерді жазуға және қолданбалы программаларды жазуға қолданылады. Мысалы, Нью - Джерси штатының Мюррей Хилл қаласында Bell laboratiories компаниясының ұйымдастыруымен 1969 жылы UNIX - операциялық жүйесі жазылды, бұл жүйе PDP-7 компьютеріне орнатылған. С тілінің негізгі идеяларының көпшілігі BCPL тілінен алынған.
Жалпы Си тілінің шығу тарихына тоқталайық:
Ең алдымен 1960 жылы Аlgol тілі пайда болған. Содан кейін CPL- (біріктірілген програмамлау тілі) 1963 жылы жазылған. Осы тілдер негізінде іргелендіру арқылы Мартин Ричардс ВCPL(базалық біріккен программалау тілі) тілін 1967 жылы дүниеге әкелген. Артынша 1970 жылы Кен Томпсон В тілін ойластырған. Алғашқы Си тілі 1972 жылы Bell laboratiories лабораториясында жазылған және оның авторы - Деннис М.Ритчи. 1983 жылы АNSI(Америка ұлттық стандарттау институты) институты Си тілін стандарттау мақсатын қойды. Себебі, Кен Томпсон В тілін жазып бітіргенде PDP - 11 компьютері пайда болған. Сондықтан UNIX операциялық жүйесін және В тілінің компиляторын жаңа машинаға сәйкестендіріп жөндеген. Бұл PDP-11 компьютерінің оперативті жадысының көлемі -24 Кб, мұның 16 Кб орыны операциялық жүйеге қолданылған. Сонымен қатар, дискідегі орыны - 512 Кб болған. UNІX - ті В тілінде қайта жазу идеясы туындаған. Бірақ, В тілі жәй жұмыс жасаған және В сөздермен жұмыс жасауға бағытталған. Жалпы BCPL және В тілдері - типсіз тілдерге жатады. Сондықтан В тілінің өзін жетілдіру қажеттілігі туындаған. Ізінше 1971 жылы жаңа версиясын - Си тілін жаза бастаған. Деннис Ритчи тілдің нақты бір құрылғыдан тәуелсіздігін қарастырады.
Программалау тілдерінің көбісін (C, Рascal, Lisp u APL) жеке авторлар құрастырғандықтан біртұтастығымен ерекшеленеді, және көпшілік авторлар жазған (Ada, PL1 u Algol60) тілдеріне қарағанда бір автордың жақсы білетін сұрақтарын шешеуге мамандандырылған сипатта құрылады.
Деннис Ритчи жүйелік програмалау саласында мойындалған ең ірі маман саналады.
С\С++ программалау тілдерінің мүмкіндіктері мен ерекшеліктеріне шолу Деннис Ритчи жазған Си тілінің таралу себебі: салыстырмалы түрде төмен деңгейлі тіл, сондықтан алгоритм жұмысының әрбір бөлімін бақылау мүмкіндігі бар және жоғары деңгейлі тілдер принцптері енгізілгендіктен, нақты бір компьютердің архитиктурасы ерекшелітерінен тәуелсіздігін қамтамасыз ету мүмкін болды.
Жоғарғы деңгейлі тілдерден Си тілінің ерекшелігі:
- операторлар түрі өзгеше;
- көрсеткіштер жиі қолданылады;
- басқа тілдерге қарағанда синтаксикалық ережелері аз, нәтижесінде компилятор тиімді жұмыс жасау үшін 256 Кб оперативті жады жеткілікті;
- қызметші сөздерге қарағанда операторлар мен олардың комбинациялары көп;
- алғашқыда Си тілінде 27 қызметші сөз ғана болған. Кейін ANSI Си тіліне және Microsoft C тіліне қызметші сөз қосылды, жалпы саны шамамен 50;
- Көп программалау тілдерінде бар функциялар Си тілінде жоқ;
- Си тілінде қосалқы енгізу шығару функциялары, математикалық функциялары және жолдармен жұмыс жасау функциялары жоқ, бірақ сол функциялардан және басқа функциялардан тұратын жеке кітапханалардан алу мүмкіндігі қарастырылған;
- мәліметтер типін бақылау жеңіл, яғни программаның бір жерінде айнымалыны символ түрінде , екінші бір жерінде осы символдың ASCII коды ретінде қарастыруға болады;
- Си тілінде қазіргі тілдері секілді барлық басқарушы конструкциялары бар(For, if else, ... );
- Cи тілінде модулдік программалауға болады, яғни программаның әртүрлі бөлігін жеке копиляциялауға болады;
- Ассемблер тілінде жазылған ішкі программаларды шақыруға болады;
- көрсеткіштер яғни жады аймақтарынан берілген адрес бойынша қарау программаны орындау жылдамдығын арттырады. Көрсеткіштер көп тілде қолданылады, ал көрсеткіштерге арифметикалық амалдар тек Си тілінде қолданылады.
- Си тілінде барлық массивтер бір өлшемді, бірақ Си тілінде бір өлшемді массивтерден тұратын конструкциялар бар, яғни көп өлшемді массивтер құрылады;
- тек қажетті кітапханалар шақырылатын болғандықтан жады тиімді қолданылады;
- басқа тілдердегідей қосалқы функциялар;
- көптеген мамандандырылған функциялар кітапханаларының жинытығы бар.
Кемшілігі:
- Си тілінде мәліметтер типі қатаң қадағаланбайды, сондықтан Си тілінде тәжірибелі программист байқағанмен жаңа үйренуші байқамайтын айнымалы мәндеріне өзгерістер болуы мүмкін.
Мысалы, бір өрнекте (=) меншіктеу операторы бірнеше рет қолданылуы мүмкін. Сондықтан нәтижесінің типі түсініксіз және қиын анықталады. Бірақ оны қолдану арқылы тілдің қуаты арттырылған.
С++ тілі Си тілінің толықтырылған, яғни объектілі бағытталған программалау(ОБП) құралдарымен толықтырылған жиыны деуге болады.
Си және С++ тілдерінің айырмашылығы:
-құрылымдар мен класстар аттары мәләметтер типтерінің аттары болып табылады. С- де класс түсінігі жоқ.
СС++ тіліндегі программаның жалпы құрылысы
Си тіліндегі кез-келген программа main функциясынан тұрады. Мұның орындалу барысында басқа функциялар шақырылады. Функциялар арасындағы байланыс параметрлер арқылы беріліп функция мәнін қайтарып алу арқылы жүзеге асады.
Сонымен қатар, Си тілінің компиляторында мәселені бірнеше бөлікке -файлдарға бөліп, әрқайсысын жеке-жеке трансляциялап, сосын оларды жеке бір орындалатын файлға, жинау мүмкіндігі бар. Жинақтау байланыс редакторының көмегімен жүзеге асырылады.
Программа құрылымы:
Кез-келген программа комментарийден басталады. Комментарийді Си тілінде * , * белгілеріне алынып жазылған блок түрінде беруге болады.
Содан кейін препроцессор дерективасы орналасады. Препроцессор директивасы берілгенде кітапханалық файлда - тақырыптық файлда орналасқан кодты программаға қою нұсқауын береді. Мұндағы .h кеңеймелі файлдар тақырыптық файлдар деп аталады. Тақырыптық файлдарда әртүрлі тұрақты мен таулар сипатталады. Функциялар прототиптері сақталады.
Препроцессор дерективасынан кейін main функциясы сипатталған бөлігі орналасады.
Main функциясы барлық программада міндетті түрде болуы тиіс, одан программа орындалуы басталып, Return инструкциясы шақырылғанда аяқталады.
Main функциясының денесі фигуралық жақшада орналасады.
Си тілінде барлық айнымалы оған программаның қандайда бір бөлігінен сілтеме жасалғанға дейін сипатталуы тиіс.
Препроцессор директивалары Си тілінде жазылған программа текстінде кездесетін инструкциялар (нұсқаулар) препроцессор директивасы (ПД) деп аталады. Олар программа трансляцияланғанға дейін орындалады және программаның текстін өзгертуге мүмкіндік береді. Мысалы текстегі кейбір лексемдерді өзгерту, басқа файлдан мәтінді қосу, мәтіннің қандай да бір бөлігін орындауға, трансляциялауға шектеу қою т.б. Барлық препроцессор директивасы # таңбасымен басталады және соңынан нүктелі үтір (;) қойылмайды.
Түрлері:
37
1) #include директивасы.
Бұл программаға көрсетілген файлдағы мәліметтерді қосады. Бұл директиваның екі формасы бар:
#include "файл аты"
# include файл аты
Мұндағы, Файл аты операциялық жүйелер талабына сай көрсетіледі, яғни тек файл атынан немесе оның маршрутымен алынған атауынан тұруы мүмкін. Егер файл аты тырнақшада берілсе, онда файл сәйкес көрсетілген маршрутпен анықталатын орыннан, ал ол көрсетілмесе жұмысшы каталогтан ізделеді. Егер файл аты бұрыштама жақшада ( ) берілсе, онда файл операциялық жүйенің PATH командасы арқылы берілген, стандартты директориясынан ізделеді. #include директивасы іштестірілген болуы мүмкін, яғни қосылатын файлда тағы кездесуі мүмкін. Көбінесе бұл программаға тақырыптық файлдарды қосу үшін қолданады, яғни стандартты кітапханалық функциялар прототиптерінен тұратын файлдарды қосуға мүмкіндік береді. Сондықтан С тіліндегі программа осы директивадан басталады.
2) #define директивасы.
#define - директивасы жиі қолданылатын тұрақтыларды, қызметші сөздерді, операторларды және өрнектерді кейбір идентификаторлармен ауыстыруға мүмкіндік береді. Сандық немесе текстік тұрақтыларды ауыстыратын идентификаторларды атаулы тұрақтылар (именованные константы) деп атайды.
Программа фрагменттерін алмастыратын идентификаторларды (макроопределения) макроанықтамалар деп атайды.
#define екі формасы бар:
- #define идентификатор текст
- #define идентификатор (программалар тізімі тексті)
Мысалы, #define WIDTH 80
#define LENGTH (WIDTH+10)
бұл директивалар программа текстіндегі әрбір WIDTH сөзін 80 санына, ал LENGTH сөзін (80+10) өрісіне ауыстырады.
Макроанықтамалардағы жақшалар олардағы алмастырудың орындалу ретін анықтауға мүмкіндік береді. Мысалы, жақша болмаса мына өрнек: t=length+7 мынадай t=80+10*7 өрнекке ауыстырылады, ал қажетісі t=(80+10)*7 болатын, сондықтан жақша қойған дұрыс.
2-ші формасында формалды параметрлер тізімі көрсетіледі, мұнда тізім үтір арқылы ажыратылып көрсетіледі, және макроанықтама текстіндегі алатын позициясын анықтайды.
Шақырғанда идентификатордан кейін формалды параметрлер санына сәйкес нақты аргументтер көрсетілуі тиіс.
Мысалы,

#define MAX(x,y) ((x)(y))?(x):(y)

Бұл директива t=MAX(i,s[i]); фрагментін t=((i)(s[i])?(i):(s[i]); фрагментіне ауыстырады.

3) #undef - директивасы

38
Бұл директива #define директивасы қызметін қайтаруға қолданылады. Яғни, көрсетілген идентификаторларға қолданылатын #define анықтамасы қызметін болдыдырмайды.

Мысалы,
#undef WIDTH
#undef MAX
Бұл директивалар WIDTH атаулы тұрақтысымен MAX макроанықтамасын болдырмайды.
Тақырыптық файлдар атаулары төмендегідей:
assert.h, float.h, math.h, ctype.h,
limits.h, setjmp.h, errno.h, locale.h,
signal.h, stdarg.h, stddef.h, stdio.h,
stdlib.h, string.h, time.h.

Кейбір тақырыптық файлдар мазмұны Стандартты кітапханалар ретінде жеке қарастырылыды, сәйкес бөлімді қараңыз.

Дәріс №2. СС++ ТІЛДЕРІНІҢ ЭЛЕМЕНТТЕРІ. ТҰРАҚТЫЛАР.

АЙНЫМАЛЫЛАР. ТИПТЕР

Дәріс мақсаты: Си тіліннің негізгі элементтері: литерлер, символдары,

тұрақтылар, айнымалылар, типтері т.б. таныстыру.

Кілттік сөздер: литерлер, идентификаторлар, тип, стрингтік тұрақты,

кфалификаторлар, тұрақты өрнек.

Дәріс жоспары:

2.1. Тілдің элементтері

2.2. СС++ тіліндегі типтер.

2.3. Тұрақтылар.

2.4. Глобалды және локалды айнымалылар.

39

2.1. Тілдің элементтері

Символдар:

- латын әріптері;

- цифрлар;

- арнайы символдар;

- пробелмен ажыратылмаған символдар комбинациясы, бір мағыналы символ

ретінде қабылданады, Мысалы ++, - - , , += , - , .

Идентификаторлар:

Идентификаторлар - символдардан, цифрлардан және _ таңбасынан тұрады.

С компиляторы 31 символды таниды. С және С++ тілдері символдар регистріне

қарайды, яғни компилятор үлкен және кіші символдарды әртүрлі символ ретінде

қабылдайды.

Мысалы, Name_TYPE және name_type идентификаторлары әртүрлі деп

қарастырылады.

Программистер арасында жарияланбаған келісім бойынша кезкелген

идентификаторды сәйкес типінің бірінші әрпінен бастау ұйғарылған.

Қызметші сөздері:

С тіліндегі қызметші сөздер қосалқы идентификаторлар болып табылады.

Оның әрқайсысы белгілі бір әрекет орындайды. Қызметші сөздер мағнасын өзгерту

мүмкін емес, тек, #define препроцессор директивасы арқылықызметші сөз

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

2.2. СС++ тіліндегі типтер

С немесе С++ тілдерінде мәндер төмендегідей базалық типтер бірімен

бейнеленеді. Олар:

1. char - бірлік байт, қолданылатын литерлер жиынтығындағы бір литерді

меншітей алады.

2. int - бүтін.

3. float - 3.4E- 38 және 3.4E+38 аралығындағы нақты сандар.

4. double - 1.7E-308 - 1.7E+308 аралығындағы жылжымалы нүктелі сандар.

5. Void типті, ешқандай мән қайтармайтын функцияларды қолданылады.

6. bool типті айнымалы С++-те true немесе false мәнін қабылдайды.

7. Санылымды тип.

8. Көрсеткіштер.

Саналымды типті айнымалы санап көрсетілген тұрақтыға оның атауы

арқылы сілтейді.

СС++ тілі машинадан тәуелді тіл болғандықтан аталған типтерге жадыдан

бөлінетін орындар көлемі нақты атап көрсетілмейді. Дегенмен, шамамен сипаттау

мүмкіндігі бар.

Сонымен қатар, базалық типтерге қолданылатын бірнеше квалификаторлар бар.

Квалификаторлар

short (қысқа) және long (ұзын) квалификаторлары бүтін типтерге қолданылады:

Short int sh;

40

Long int counter;

Бұндай сипаттауларда int сөзін жазбауға болады. Көбінесе short квалификаторы

арқылы сипатталған бүтінге 16 бит бөлінеді, long квалификаторымен сипатталса - 32

бит, ал int типіне - не 16, не 32 бит бөлінеді.

Signed (таңбалы) және unsigned (таңбасыз) квалификаторларын char типіне

және кез келген бүтін типке қолдануға болады.

Unsigned мәні әрқашан оң немесе нөлге тең және 2n модулі бойынша

арифметика заңына бағынады. Мұндағы, n- типті бейнелегендегі биттер санына тең.

Мысалы, char мәніне 8 бит бөлінсе, онда unsigned char 0-ден 255-ке дейінгі

диапазондағы мәнге, ал signed char -128-ден 127-ге дейінгі мәнге ие.

Барлық өлшемдегі атаулы тұрақтылар limits.h және float.h стандартты

тақырыптық файлдарында орналасады.

Сонымен қатар, С тілінде екі квалификатор бар: Const және Volatile.

Const - мәні өзгермейтін айнымалыларды, ал Volatile кез келген уақытта мәні

өзгеретін айнымалыларды белгілеу үшін қолданылады.

Const -программа орындалу барысында өзгермейтін айнымалылар - тұрақтылар

деп аталады.

Сипатталуы:

Мысалы, Const float pi=3014159;

Const int imin=1, isale=5;

Тұрақтыны сипаттаудың екі тәсілін білеміз, Const және define; көпшілік

жағдайда екеуі бірдей нәтиже береді, бірақ мынадай ерекшеліктері бар: define -

макротұрақты, ал Const арқылы айнымалы құрылады.

Volatile бұл айнымалының мәні сыртқы әрекеттер әсерінен өзгеруі мүмкін

екенін білдіреді.

Мысалы, Volatile int EV_time;

Бұл жағдайда EV_time айнымалысы таймер, яғни жүйелік құрылғы арқылы

өзгереді.

Бұл бұл квалификаторлар бір уақытта қолданылуы мүмкін, мысалы, Const

Volatile Const EV_time;

Мұнда Const EV_time айнымалысының мәні программасының денесінде

өзгертілменгенмен, оның мәні сырттай жанартылуы мүмкін.

2.3. Тұрақтылар

Программаның орындалу барысында мәні өзгермейтін шама - тұрақты деп

аталады.

Бүтін тұрақты, мысалы, 1234, int типімен сипатталады. Long типті тұрақты l

немесе L әрпімен аяқталады. Мысалы, 123456789L. Таңбасыз тұрақтылар u немесе U

әрпімен аяқталады. Ал ul немесе UL-мен аяқталатын тұрақтылар типі - unsigned long

екенін көрсетеді.

Сонымен қатар, бүтін мән ондық форматта немесе басқа 8-дік немесе 16-лық

форматта берілуі мүмкін. Егер тұрақты нөлден басталса, онда ол 8-дік форматта,

егер 0х немесе 0Х болса, онда 16-лық форматта көрсетілген. Мысалы, ондық бүтін

31-ді 037 немесе 0Х1F түрінде жазуға болады. 8-дік және 16-лық тұрақтылардың

жазылуы L және U әрпімен аяқталуы мүмкін.

41

Мысалы, 0XFUL тұрақтысы 15 мәніне және unsigned long типіне ие.

Жылжымалы нүктелі тұрақтылар. Егер тұрақты f немесе F әрпімен аяқталса,

онда тип float, ал l немесе L болса, онда long double типті болғаны.

Литерлік тұрақтылар. Литерлік тұрақтылар деп апострафқа алынған литер

түрінде жазылған бүтінде айтамыз.

Мысалы, 'x'. Литерлік тұрақтының мәні ретінде литердің сандық коды алынады.

Мысалы, '0' литерлік тұрақты ASCII кодында 48 кодына сәйкес келеді. Бұның 0

мәніне ешқандай қатысы жоқ. Литерлік тұрақтылар көбінесе басқа литерлермен

салыстыру үшін қолданғанымен, олар басқа бүтін типтер сияқты сандарға амалдар

қолдануға қатыса алады.

Тұрақты өрнек - тек тұрақтылармен ғана өрнектелетін өрнек.

Мұндай өрнектер компиляциялау барысында есептеледі, сондықтан оларды

келген жерде қолдануға болады.

Мысалы:

#define SAN 368

char line[SAN +1];

Стрингтік тұрақты - нөл немесе қос тырнақшаға алынған литерлер. Мысалы,

" Бұл жолдық тұрақты"

немесе " " * бос жол *

Тырнақшалар жолдарға кірмейді, ол тек оның шектеуі ретінде қолданылады.

Жолдық тұрақтыларды компиляциялау барысында бір-біріне жалғауға болады.

бөліктерге бөліп, оларды бөлек жолдарға жазуға мүмкіндік береді.

Шын мәнінде жолдық тұрақты ол литерлер массиві.

Strlen(s) функциясы s жолының ұзындығын есптейді.

* strlen: s жолының ұзындығын қайтаратын функция мазмұны *

int strlen(char s[ ] ) {

int i;

i=0;

while ( s[i]!='\0')

++i;

return i;

}

Жолдарға қолданылатын strlen және басқа функциялар string.h стандартты

тақырыптық файлында сипатталған.

`\о' - null-литер стрингтің ішкі бейнеленуінде міндетті түрде соңына қойылады.

Ескерту: бір литерден тұратын литерлік тұрақты мен жол бірдей емес.

Саналымды тұрақты. Санау -ол бүтін тұрақтылар тізімі.

Мысалы,

Enumeration - ағылшын сөзі, санау деген сөзді білдіреді.

Enum boolean{ NO, YES};

Enum months { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL,

AUG, SEP, OCT, NOV, DEC }; * FEB 2, MAR 3 т.с.с. *

42

Әртүрлі саналымдарда атаулар әртүрлі болуы тиіс. Бір саналым ішінде мәндер

қайталануы мүмкін. Enum құралы тұрақтыларға ыңғайлы аттау беруге мүмкіндік

береді, #define препроцессоры директивасына қарағанда мұндағы тұрақтылар

мәндері генерациялана береді.

2.4. Глобалды және жергілікті айнымалылар

Айнымалылар. Программаланың орындалу барысында мәні өзгеретін

шамалар айнымалылар деп аталады.

СС++ тілінде кез келген айнымалы оны қолданғанға дейін анықталуы керек.

Декларацияда айнымалылардың қасиеттері хабарланады. Ол типтің атынан және

айнымалылар тізбегінен тұрады.

Мысалы,

int fahr,celsius;

int lower,upper,step;

Мұндағы int типі көрсетілген айнымалылардың мәні бүтін екенін білдіреді, ал,

float бөлшек бөлігі бар мәндер.

Бақылау сұрақтары:

1. СС++ тілдеріндегі лиетр түсінігі нені білдіреді?

2. Типтеріне жадыдан бөлінетін орын мөлшерін нақты атауға бола ма?

3. Идентификаторларды неше символға дейін қабылдайды?

4. Литерлік тұрақты мен стрингтік тұрақты айырмашылығы неде?

Әдебиеттер:[1-2], [5-10], [16-17].

Дәріс №3. ЕНГІЗУ-ШЫҒАРУ МҮМКІНДІКТЕРІ

Дәріс мақсаты: СС++ тілдерінің енгізу-шығару мүмкіндіктерімен таныстыру.

Жиі қолданылатын енгізу-шығару функцияларын меңгерту және негізгі

параметрлеріне көңіл бөле отырып, қалған мүмкіндіктерін зерттеуге бағыттау.

Кілттік сөздер: енгізу, шығару, енгізу-шығару форматы, функциялар, лектер,

буферлік лектер, лектік класс, басқару символдары, формат спецификаторлары,

флагтар.

Жоспары:

3.1. С тіліндегі енгізу-шығару құралдары

3.2. С++ тіліндегі енгізу-шығару құралдары

3.3. С тілінде форматтап енгізу және шығару

3.4. С++-тегі форматтау функциялары мен флагтар

3.1. С тіліндегі енгізу-шығару құралдары

СС++ тілдерінде 20-дан астам мәліметтерді енгізу-шығару тәсілі бар.

43

Енгізу-шығару стандартты кітапханалық функциялар файлдармен және

әртүрлі құрылғылармен байланысқан мәліметтерді оқуға немесе жазуға мүмкіндік

береді.

С тілінде файлдың қандай да бір алдын-ала анықталған структурасы жоқ. Кез-

келген мәлімет байттар тізбегі түрінде қарастырылады.

Жалпы енгізу-шығару функцияларын негізгі үш категорияға бөлуге болады:

- Лектік(потоктық);

- консолдық (консольные);

- төмен деңгейлі (низкоуровневые).

Лектік функциялар: буферлік, форматталған, форматсыз енгізу-шығару

мүмкіншілігін жүзеге асырады.

Буферлік лектердің мәліметтерді уақытша жазу-оқу барысында буферде

сақтау мүмкіндігі бар. Дискке тікелей жазу уақыт алады, ал буферлік аймақты

пайдалану процесті тездетеді.

Лектік функциялар мәліметтерді символдар легі түрінде қабылдайды.

Лектік файлдар арқылы белгілі бір мөлшердегі және форматтағы символдар

блогымен алмасуға болады.

Файлды ашқанда лектік функцияны пайдаланып файлмен FILE типті

структура арасында байланыс орнатылады да программа сәйкесінше осы

структураға сілтемені алады, ол лек көрсеткіші немесе лек деп аталады.

● Сонымен қатар консоль немесе порт арқылы енгізу-шығару орындалады

(мысалы, принтер порты арқылы).

Бұл жағдайда сәйкес функциялары мәліметтерді байттап оқып-жазады.

Консольмен жұмыс жасау қосымша мүмкіндіктер береді. Бұлар мынадай

қосымша мүмкіндіктерді орындайды:

- символдық клавиатурадан енгізілген кезеңін анықтау;

енгізілген символдар ЭХО режимін қосу-ажырату.

Мысалы, символдың клавиатурадан енгізілген кезеңін анықтау, т.б.

● Төмен деңгейлі категория функциялары тікелей жүйелік енгізу-шығару

құралдарын пайдаланады, яғни төмен деңгейде файлға немесе периферийлік

құрылғыларға жол ашады. Төменгі деңгейлі функциялар арқылы файл ашқанда

оның дескрипторы - бүтін сан қайтарылады да, ол кейін файл идентификаторы

ретінде қолданылады.

Ескерту: Лектік функция мен төмен деңгейлі функцияларды бір программада

араластыру арқылы конфликт пайда болады.

Лектік функциялар.

stadio.h стандартты кітапханасында лектік функциялар орналасқан.

Қосымшаны жүктегенде автоматты түрде 5 стандартты лек ашылады. Лектер:

- енгізу (stdin);

- қателер (stderr);

- шығару (stdout);

- баспаға шығару (stdprn);

- сыртқы құрылғылар (stdoux).

Автоматты түрде қате, енгізу, шығару стандартты легі консольмен

байланысады. Лекті көрсететін көрсеткіш аргументі болатын функцияларда

44

жоғарыдағы көрсеткіштердің бірін таңдап көрсету керек. Stdin, stderr, stdout, stdprn,

stdoux- тұрақтылар.

getс ( ), putc ( ) - функциялары

getc ( ) функциясы файлдық лектен 1 символды оқиды.

Жалпы форматы: int getc ( );

Бұл функция буферден оқылған символдың кодын қайтарады.

getc ( ) функциясы лектен жаңа жол символы кездескенге дейін оқиды.

Мысалы, клавиатурадан Enter басу арқылы ғана жекелеген символдар

енгізілсін.

putc ( ) - символды лекке жазады.

Мысалы, int ix;

Ix=getc (stdin);

putc (ix, stddut);

putc() функциясы қате жіберілгенде EOF қайтарады. putc, getc функциялары

функция және макрос түрінде де анықталған. Макрос приоритеті жоғары. Оны

өзгерту үшін, яғни макросты болдырмау үшін:

# undef getc препроцессор директивасысы берілу керек.

Бүтін сандарды енгізу

Бүтін сандардың легін (буферлік) енгізіп-шығару үшін: getw ( ), putw ( )

функциялары getc ( ), putc ( ) функция секілді, тек бүтін сандарды оқиды және тек

файлдардан (екілік режимде ашылған) оқиды.

3.2. С++ тіліне тәні енгізу-шығару құралдары

С++ тілінде С тіліндегі стандарт функциялар енгізу-шығаруға қолданылады.

Сонымен қатар С++ тілінде iostream.h тақырыптық файлында анықталған

енгізу-шығару құралдары бар. Лектік енгізу-шығару осы тақырыптық файлдағы

кластар арқылы орындалады.

Мына операторлар: - енгізу және - шығару операторы - кез-келген

типті мәліметтермен жұмыс жасауда қолданылады.

С++-те де үш лектік класс қарастырылған:

istream - енгізу құралдары;

ostueam - шығару құралдары;

iostream - енгізу-шығару құралдары.

Осы үш класта да , операторлары қолдынылады. С тіліндегі stdin,

stdout, stderr стандартты лектеріне сәйкес С++тілінде cin, cout, cerr, clog - объект-

лектері қарастырылған.

Cin istream класының объектісі istream енгізу легімен, ал osream класының

объектісі cout шығару легімен байланысты.

Cerr - ostream класының объектісі - қателер легі, ал clog ostream класының

объектісі - буферленген қателер легіне сәйкес.

Мысалы:

Шығару: С-де: printf (" бүтін сан = %d, нақты = %f, ia, fb);

Си++-те: cout "бүтін сан" ia n, нақты = " fb;

Енгізу: Си-де scanf ("%d %f", &ia, &fb);

Си++-те: cin ia fb;

45

Бұл жолдарда С тілінде айнымалылар арнайы форматтар мен типтері анық көрсетілу

арқылы орындалса, С++ тілінде - операторы мәлімет типін және форматын

таңдайды, ал - операторы қабылданатын мәннің адресін, форматын анықтайды.

● операторында endl манипуляторы тіркелуі мүмкін.

Мысалы, cout "бүтін сан = " іаendl;

Манипулятор дегеніміз -лекке қатысты нақты әрекет орындайтын арнайы

функция.

endl манипуляторы - жаңа жол символын қоюмен қатар лек буферін

тазартады.

Ал, flush манипуляторы - ( \ n) жаңа жол литерін шығармайды.

-операторы жолды оқығанда пробель, ТАВ белгісі, `\n' литері кездескен

бойдан оқу әрекетін аяқтайды, ал осы таңбалар арқылы сипатталып кездескен

жолды толық оқу үшін cin объектісінің get( ) функциясын қолданған дұрыс.

Мысал: #include iostream.h

#define n 25

void main (void)

{

char span [n];

cout "пән аты - ?";

cin span;

cout "\n сабақ, " span;

Орындағанда: Пән аты - ? Математикалық анализ - түрінде енгізілгенмен,

нәтиже экранға толық шығарылмай былайша бейнеленеді:

Сабақ, Математикалық

Сондықтан жолды толық алу үшін мына әрекеттер ретін орындау қажет:

cin.get(span, n);

cout "\n Сабақ, " span;

cin объектісінің get( ) функциясында аргументпен қатар, екі параметрден тәуелді

анықталуы мүмкін, олар `\n' литері және жолды құрайтын символдардың санына

қатысты параметрлер.

cin.get( ) функциясы шектеуші - символ кездескенге дейін немесе `\n'

литеріне дейін оқиды.

Мысалы:

cin.get (span, n, `*'); мұндағы `*'- шектеуші символ болып табылады.

3.3. С тілінде форматтап енгізу және шығару

Экранға мәліметтерді форматтап шығару. printf() функциясын шақыру

операторы келесі құрылымға ие:

printf(формат түріндегі жол, аргументтер_тізімі);

46

Форматты жол екі тырнақшамен шектелген (яғни, тексттік константа болып

табылады) және өзінің құрамына кез-келген текстті, басқару символдарын және

формат спецификаторларын қамти алады. Аргументтер тізімі келтірілмеуі мүмкін

немесе мәндері экранға шығарылатын өрнектерден тұра алады. Мысалы,

printf("\na="); операторы("a=")текстін және (\n) басқару символын қамтиды. Текст

жазылған түрінде экранға шығарылады. Басқарушы символдар шығарылатын

белгілердің экранда орналасуына әсер етеді. Басқарушы символдардың белгісі

ретінде \ беріледі. Төменде олардың тізімі келтірілген:

\n - жаңа жолға көшіру;

\t - горизонталды табуляция;

\r - курсорды жаңа жолдың басына қайтару;

\a - қоңырау дыбысы;

\b - бір сивол кері қайтару (бір позиция);

\f - жаңа параққа көшу;

\v - вертикалды табуляция.

printf("\nүшбұрыш ауданы=%f",s); операторын қарастырайық. Аргументтер тізімі

бір s айнымалысынан тұрады. Оның мәні экранға шығарылады. %f символдар жұбы

шығарылатын s айнымалысының мән форматының спецификациясы болып

табылады. % - формат белгісі, ал f әрпі шығарылатын санның нақты типті екенін

көрсетеді.

Формат спецификаторы шығарылатын өлшембірліктің сырт көрінісінің түрін

анықтайды. Кейбір формат спецификаторларын келтірейік:

%c - символ;

%s - жол;

%d - бүтін ондық сан (типі int);

%u - белгісі жоқ бүтін ондық сан (типі unsigned);

%f - бекітілген нүкте түріндегі нақты сандар;

%e - қалқымалы нүкте түріндегі нақты сандар (мантиссамен, ретпен берілген)

Мысалы, келесі операторлардың орындалуынан кейін

float m, p;

int k;

m=84.3; k=-12; p=32.15;

printf("\nm=%f\tk=%d\tp=%e", m, k, p);

экранға мына жол шығады:

m=84.299999 k=-12 p=3.21500e+01

Формат спецификаторына сандық параметрлер қосыла алады: жолдың ені мен

дәлдігі. Ені - өлшемге экранда берілетін позициялар саны, ал дәлдік - бөлшек

бөлігіне берілетін позициялар саны (нүктеден кейін). Параметрлер % пен формат

символының арасында жазылады және бір бірінен нүкте арқылы ажыратылады.

Мысалы,

printf("\nm=%5,2 ", m); нәтижесінде экранға

m=84.30 шығады.

Көрсетілген жолдың еніне шығарылатын мән симай қалған жағдайда да,

өлшем толық шығарылады.

47

Формат спецификаторларына келесі түрдегі модификаторлар да қосылуы

мүмкін:

%ld - long int шығару;

%hu - short unsigned шығару;

%lf - long double шығару.

Клавиатурадан форматты түрде енгізу. scanf()функциясын шақыру

операторы келесі құрылымға ие:

scanf(формат түріндегі жол, аргументтер_тізімі);

Бұл функция клавиатурадан енгізілген символдардың оқылуын қамтамасыз

етеді. scanf()функциясында формат жолы мен аргументтер тізімі міндетті түрде

болуы қажет. Келесі операторды қарастырайық:

scanf("%f",&a);

Мұндағы "%f" - формат жолы, &a - енізілетін мәндерге сәйкес аргументтер

тізімі. Бұл оператор a айнымалысына сандық мәннің енгізілуін қамтамасыз етеді.

Клавиатурадан енгізілетін және scanf()функциясыменен қабылданатын

символдық тізбекті кіріс ағымы деп атайды. Аргументтер тізімі - енгізілетін

айнымалылар және әр айнымалының алдына & белгісі қойылады.

Формат жолы тырнақшаға алынады және спецификациялар тізімінен тұрады.

Әр спецификация % белгісінен басталады, одан кейін

*жолдың_ені модификатор спецификатор

тұруы мүмкін. Соның ішінде спецификатор міндетті элемент болып табылады. *

белгісі кіріс ағымында белгілі бір символдар санын жіберуге мүмкіндік береді.

3.4. С++-тегі форматтау функциялары мен флагтар

iostream.h типті файлдағы лектік-объектілер жұмысы форматтау

флагтарымен басқарылады:

Флагтар self( ) функциясы көмегімен орнатылады, unself( ) функциясы

арқылы ажыратылады.

Мысалы: cout octia; cout.self(ios::left);

Флагтар

skipws - енгізу барысында пробел литерлері алынып тасталады;

left - шығарылатын мәндер әрічтің сол жақ шетімен тегістеледі, толықтырғыш

символдармен толықтырылады;

right - шығарылатын мәндер өрістің оң жақ шетінен тегістеледі;

internal - бұл символдар таңба символдар мен сан және санау жүйесі префиксі

арасында қойылады;

dec - бүтін сан 10-дық санау жүйесінде шығады;

oct - бүтін сан 8-дік санау жүйесінде шығады;

nex - бүтін сан 16-лық санау жүйесінде шығады;

show base - бүтін санды шығарғанда санау жүйесінің префиксі шығарылады;

show point - бөлшек санды шығарғанда ондық нүктесі қойылады және соңындағы

0-дер тіркеледі;

uppercase - 16-лық санау жүйесіндегі А, ..., F және Е експоненциалдық символы

үлкен әріппен шығады;

48

showpas - оң сандары шығарғанда + таңбасы қойылады;

scientific - бөлшек сан експоненциалдық түрде жпзылады;

presicion( ) - функциясы scientific немесе fixed флагы орнатылып тұрғанда, үтірлі

санның бейнелену дәлдігін анықтайды;

set precision( )- де сол секілді. Автоматты түрде - 6-ға тең. Бұл функция

аргументсіз шақырылғанда ағымды дәлдік мәнін анықтайды.

width( ) - функциясы шығару өрісінің енінің ең кіші мәнін анықтайды.

setw( ) - функциясы да сол секілді. Аргументсіз функция ағымды мәнді

қайтарады.

setfill( ), setprecision( ), setw( ) манипуляторлары ios класының параметрленген

мүшелері болып табылады, олармен жұмыс жасау үшін iomanip.h

тақырыптық файлы қосылу керек.

Енгізу-шығару бағытын адрестеу

Қазіргі операциялық жүйе клавиатура мен экранды файлдық құрылғы ретінде

қарастырады.

Клавиатура мәліметтерді оқып немесе экранға шығару программасының

бағытын адрестеу үшін жүйеге клавиатураның орнына нақты файлды, мысалы DAN.

DAT қолдануға нұсқау беріледі.

Мысалы, орындалатын файл аты - PRIMER.

Нұсқау: 1) primer dan.dat - файлдан оқу

2) primer res.dat - файлға шығару.

Бірге: 3) primer dan.dat res.dat.

Стандартты потоктар мен нақты файл арасында немесе периферийлік

құрылғылар арасында байланыс ұйымдастырудың 2 тәсілі бар:

- бағытын адрестеу;

- каналдар құру.

Канал дегеніміз - бір программадағы стандартты енгізу мен екінші

программадағы стандартты шығару арасындағы тікелей байланыс.

Мысал, procces1 process2

Мұндағы process 1,2 екі программа.

тік сызық ( ) - каналмен байланыстыру таңбасы.

Байланастыру жұмысы, яғни екі программаның енгізу-шығару жүйесінің

әрекетін операциялық жүйе басқарады.

Бақылау сұрақтары:

1. Лек дегеніміз не?

2. Енгізу-шығару мүмкіндіктерінің өзге тілдерден ерекшелігі қандай?

3. Енгізу-шығару барысындағы басқару таңбаларының қойылу реттері

қандай?

4. Эскейп-тізбек деген не?

... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
ИНФОРМАТИКАНЫ ОҚЫТУДЫҢ ӘДІСТЕМЕСІ ПӘНІНІҢ ОҚУ-ӘДІСТЕМЕЛІК КЕШЕНІ
Электрондық оқулық пен оқытудың негізгі мақсаты
«Ақпараттық қауіпсіздік және ақпаратты қорғау» пәні бойынша әдістемелік-оқу кешені
Тарихи өлкетану курсының жұмыс бағдарламасы.
Интерактивті тақтаның құралдары
ЭЕМ-нің қызметі,құрамы және жіктелуі
Тіл білімі туралы жалпы түсінік
Интерактивті тақтаны орнату
Web-технологиялар көмегімен html пәні бойынша электронды оқулық
ИНФОРМАТИКАНЫ ОҚЫТУДЫҢ ӘДІСТЕМЕСІ Бастауышты оқытудың әдістемесі мен педагогикасы мамандығы үшін
Пәндер