close

Вход

Забыли?

вход по аккаунту

?

3476 bribaev b programmalau tehnologiyalari

код для вставкиСкачать
ҚАЗАҚОТАН
/ /__ /
ҚАЗАҚСТАН РЕСПУБЛИКАСЫ
БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ
/
5. Бөрібаев
Алматы, 2011
004
ҚАЗАҚСТАН РЕСПУБЛИКАСЫ
БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ
Б. Бөрібаев
ПРОГРАММАЛАУ
ТЕХНОЛОГИЯЛАРЫ
Оқулық
Қазақстан Республикасы
Білім және гылым министрлігі бекіткен
Алматы, 2011
£ ?9
ӘОЖ 004.42(075.8)
КБЖ 32.973-018я73
Б 79
Пікір берушііер:
техника ғылымдарының докторы, профессор А. Ж. Сеакетов;
физика-математика гылымдарының лекторы, доцент Ш. Ә. Жомартова.
Шшш Бврібаев Б.
П рограмма.») ш и & ю іи и а р ы : Окулык. - Алматы: ЖШС
РПБК «Дәуір», 2011 - 352 бет.
ISBN 978-601-217-280-5
“П р е г р ш ш іу m io .io i м .іір ы " оқулығы жогары оку орындарынлагы тех никалыж багытга білім алый жаткам стуле нттерге арналган,
мунда С және С н плдерін нетізіе ала отырып программалау тэсілдершен
геориалы к. ма* лума пар берілі п. эрбір такырыл бой ымша жинакталғаи талсырмаларда студенттердш ө і беттерімен орыидауларына арналган есептер
келтіриігсн Үсыиылып огырган о кулык C/C++ тілдсріиде гірограм малауды
т бепнше ош п уйренпсі келетін оқырмандардын да кажетіне жарайды де-
ӘОЖ 004,42(075.8)
КБЖ 32.97Д-01 8я73
ISB>
О Берібасв Б., 2011
С КР Жшары оку орындарынын
кауымдастыгы. 2011
КІРІСПЕ
Өткен ғасырдың 80-ші жылдары басында UNIX операциялық
жүйесінің басқаруымен жұмыс істейтін компьютерлер элемінде ең
белгілі тіддің бірі С (си) тілі болды. Содан бері ол дербес компью­
терлер мен мейнфреймдерде (үлкен компьютердер) жұмыс істейтін
негізгі тілдердің біріне айналды. Программалық жабдықтамалармен айналысатын көптеген фирмалар бұл тілді мэтіндік процессорларды, электрондық кестелерді, компиляторларды құру үшін
кең қолданып келеді. Соңғы кездерде C/C++ тілдері ең кең таралған
тілдерге айналды.
С/C++ тілдерінің артықшылықтарына - ондағы программалардың
тез орындалуы, мэтінінің қысқа болуы, түйінді сөздерінің аз болуы,
тс.с. жатады. Бұл тілдердің ассемблерге ұксас басқару мүмкіндіктері де бар. Программаларды өз қалауыңызша ең жоғары орындау
жылдамдығына немесе жадты тиімді пайдалануға үйлестіруіңізге
болады. Белгілі бір операциялық жүйеге арнап жазылған программа­
ларды басқа жүиелерге кедергісіз немесе аздаған өзгертулер енгізе
отырып көшіре аласыз. Ол аппараттық жабдықтамалар жұмысына
тікелей араласып, жедел жадтың жекелеген битгерімен арифметикалық жэне логикалық амалдар орындау мүмкіндігін туғызады.
Функциялардың көлемді кітапханасы программалаушылар алдында
түрған күрделі мәселелерді жеңіл және жылдам шешуге мүмкіндік
береді.
C++ тілінде программалауцы үйрену компьютерлік технологияларды игергісі келетін эрбір маманның алғашқы қадамдарының
бірі болуы тиіс. Олай дейтініміз C/C++ жэне осыларға ұқсас тілдер
қазіргі кезде үздіксіз даму үстінде. Сол себепті назарларыңызға
үсынылып отырған оқулықтың алдына қойған мақсаты студенттерді
тиімді де қысқа мэтінді программалар жазуға жэне олардың нәтижелерін алып, түрлендіру істеріне машықтандыру болып табылады.
Оку құралы тұтынушының программалау дәрежесінің кез келген
деңгейіне арналған. Программалауды енді үйрене бастаған студенттер үшін ол оқулық болса, тәжірибелі программалаушылар үшін
анықтамалық қүрал ретінде пайдаланылуы мүмкін.
Бұл оқулық өмір талабына сай жазылып, жаратылыстану ғылымдары мен техникалық салада білім алу барысында жеке оқу
пәндері болып қалыптасқан Алгоритмдер және мәліметтер құрылымы, Алгоритмдеу және программалау тілдері, Программалау технологиялары, Объектіге бағытталған программалау
сабақтарында қолдану үшін шығарылып отыр. Мүнда алгоритм
кұру жайлы түсініктер беріліп, қазіргі кездегі кен тараған С/С++
тілдерінің ерекшеліктері қарастырылып, есептерді компьютерде
орындау шаралары жүзеге асырылады.
Оқулықта теориялық мағлұматтардың көптеген нақты мысалдар
мен жаттығулар арқылы түсіндіріліуі кітаптың негізгі бір ерекшелігі
деуге болады.
Мемлекеттік тілімізге элі информатика терминдері толық аударылып, олардың стандарты бекітілмегендіктен, кітап соңында
қолданылған терминдердің бірсыпыра аудармасы келтірілген.
Қазақ тілінде жарық көріп отырған бұл оқу құралы төл тілімізде
дэріс алып жатқан студенттеріміз үшін программалау негіздерінің
қыры мен сырын меңгеру жолында көмекші кұрал бола алады деген
сенімдеміз.
4
1
ДЕРБЕС КОМПЬЮТЕРЛЕРДІҢ
ПРО ГРАММ АЛЫҚ ЖАБДЫҚТАМАЛАРЫ
XX ғасырдағы ғылым мен өндірістің жедел өркендеп дамуы
адамға керекті ақпараттың тез артуына әкелді. Бұдан ақпаратты
жіктерге (кластарға), тақырыптық топтарға бөліп, оларды сақтау,
қажет кезінде шапшаң іздеп таба білу және ақпараттың өзгеру
заңцылықтарын зерттеу қажеттігі туды. Осы мәселелерді ғылыми
тұрғыдан зерттейтін техника саласын алдымен кибернетика, ал
кейіннен оның ақпарат өңдеуге қатысты бөлігін информатика деп
атады. Бұл сөз француз тіліндегі "Informatigue" деген ұғым атауынан шыққан, ал ағылшын тілінде сөйлейтін елдердегі "Computer
science" деп аталатын ғылым саласы да осы информатика сөзінің
баламасы болып табылады.
Сонымен, ақпаратты қабылдау, сақтау, түрлену жэне тасымалдау жолдарын зерттейтін информатиканыц негізгі аппара­
ты - элекгрондық есептеуіш машинасы, яғни компьютер болып
саналады. Сол себепті компьютерді зерттеу ілімдерін де инфор­
матика деп түсінген жөн. Информатика 1.1-суретте көрсетілген
үш бөліктен тұрады.
ИНФОРМАТИКА
Алгоритмдік
бөлік
Программалық
бөпік
Техникалық
бөлік
1.1-сурет. Информатиканың құрамы
Техникалық жабдықтамалар (ағылшынша hardware) мен программалық жабдықтамалар (ағылшынша software) эрбір оқулықта
егжей-тегжейлі түсіндірілетін болса, ал осы екеуінің негізі болып
есептелетін алгоритмдік бөлік соңғы кезде ғана толық түрде бір
жүйеге келтіріліп, информативны оқытудың өзекті мэселесі
ретінде кеңінен қарастырыла бастады.
5
! I
w
Егерде информатиканың мағынасын толық ашатын болсақ,
оны
1) ақпаратты автоматты түрде жинау, сақтау, іздеу жэне тасымалдау,
2) ақпаратты өңдеу жэне түрлендіру тәсілдерін жасау (ойлап
табу), '
■
•'
‘
X :і '&
3) ақпаратты өңдейтін электройдық есептеуіш техникасын дамыту жолдары деп түсіну керек.
Қазіргі кезде кез келген ғьшым саласында өте көп ақпарат
жинақталған. Мысалы, физика, химия, математика, т.б. салаларда
өте көп формулалар, ұғымдар, схемалар бар. Оларды оқып-үйрену
үшін информатиканы кеңінен қолдануға болады. Осы тұрғыдан
алғанда информатиканы оқытудың негізгі мақсаты - компьютерлердегі ақпаратты сақтау, өңдеу жолдарымен танысу жэне үйрену; қалаған мамандықты игеру жолында кездесетін есептерді
шығару үшін компьютерді кеңірек қолдана білу. Сондықтан есептер шығару кезінде информатиканың алгоритмдік жэне программалық бөліктерінің атқаратын маңызы зор. Бірақ бұл екеуінің
жұмыс нәтижесін компьютерсіз алу мүмкін емес.
Енді информатиканың программалық бөлігін толығырақ қарастырайық.
k
<п .
1.1 Программалар мен олардың түрлері
Компьютердегі информация екі үлкен топтан тұрады:
Программалар — алгоритмдердіц компъютерге түсінікті
командалар немесе операторлар тізбегі түрінде жазылган нұсқасы.
•
*
Мәліметтер (данные, операнды) — программалар өңдейтін
немесе солардың жұмысы нәтижесінде пайда болатын информациялар жиыны, цұжаттар.
Кез келген программаның міндеті, атқаратын жұмысы - аппараттық құралдарды басқару.
Компьютерде программаның дұрыс жұмыс істеуі үшін ол
қатесіз, дүрыс құрастырылып, өзінің жеке түсініктеме құжаты
(документация) болуы тиіс. Сондықтан оны программалық жабдықтама деген терминмен атайды.
Компьютердің программалық жабдықтамасы құрамы программалық конфигурация деп аталады.
6
Программалық жабдықтама қызметі:
- компьютер жұмысын қамтамасыз ету;
- тұтынушы мен компьютер байланысын жеңілдету;
- есептеу жүйесінің мүмкіндігін кеңейіу;
- құрылғыларды пайдалану тиімділігін арттыру;
- адамның жұмыс сапасы мен өнімділігін көтеру.
Программа жасауга қатысатындар:
- Тұтынушы, пайдалануиіы (user) —есепті, мәселені цоюшы.
Ол программа жазбайды, бірақ қай есепті шығарып, қандай
нәтиже алу керектігін біледі.
- Программалаушы — программа жасаушы, ягни оны жазатын адам. Ол тұтынушының талабына сәйкес компьютерге
нұсқаулар дайындап, соларды машина командалары ретінде жазып шығады.
- Компьютер - командаларды атқаругиы, орындаушы құрал. Ол командаларға сәйкес тұтынушы мәліметтерін жылдам
өңдейді. Мэліметтер мен программаларды өзіне түсінікті екілік
(он алтылық) жүйеге алмастырып, программаны орындап, нәтижесін алып, оны да екілік жүйеден тұтынушыға түсінікті тілге
түрлендіріп береді. Дербес компьютер деп бір адамның жеке пайдал анатын есептеу маши нас ын айтады.
Программалар жазу үшін үш тіл қажет:
1. Машинальщ кодтар mini - компьютерге түсінікті тіл (екілік жэне 16-лық кодтар түрінде жазылады). Ассемблер тілі осыған
жақын.
2. Программалау тілі - программалаушыға түсінікті тіл (мәтін, сөз, команда түрінде жазылады). Бейсик, Паскаль, C/C++, Ява
(Java) тілдері.
3. Бейнелер (образдар) тілі - тұтынушыға түсінікті тіл (мэтін
жэне графика), яғни қарапайым кітап тілі деуге негіз бар. Біз
екінші топты қарастырамыз.
1.2 Программалық жабдықтама децгейлері
Программалар арасында өзара байланыс болады, ягни көптеген программалар жұмысы төменгі деңгейдегі программалар
жұмысына негізделіп жасалады.
Программаралық интерфейс - программалардың бір-бірімен байланысты бірнеше деңгейлерге бөлінуі.
7
Программал ык жабдықтама деңгейлері пирамида тәріздес,
жоғары деңгей алдыңғы (төменгі) деңгейлерге сүйенеді.
1. Мәтіндік редакторлар;
2. Мэтіндік процессорлар;
3. Графиксп ық редакторлар;
4. Мәліметтер базасын басқару
жүиеяері;
5. Электрондың кестелер;
6..Лвтоматтандырылган жобалау
жүйелері;
I. Шагын баспа жүиелері;
8 HTML редакторлары;
9. Браузерлер;
10. Автоматтандырылган аудару
жүйелері;
I I . Іс қагаздарын жүргізу жүйелері,
12. Бухгалтерлік жүйелер;
13. Қаржылыц аналитикалыц
жуйеяері;
14. Эксперттік (сараптау)
жүйелер;
15. Геоинформациял ық жүйелер
(ГИС);
16. Бейнемонтаж жүйелеюі.
1 Файлдар диспетчерлері
2 Мэліметтерді сызу цүралдары
3 Диагностика құралдары
4 Коммуникация құралдары
5 Көру жэне тыңдау құралдары
6 Компьютерлік қауіпсіздік
щрсшдары
1.2 сурет. Программалық жабдықтама құрылымы
Базалық деңгей
Базалык деңгей ең төменгі деңгеи.
аппараттық
құралдармен байланысу ісін атқарады. Базалъщ программалық
жабдыцтамалар базалық аппараттық құралдар құрамындагы
тұрақты жады микросхемаларында жазылып сақталады да,
базалық енгізу-шығару жүйесін (BIOS) құрайды. Программалар
мен мәліметтер аппараттарды зауыттан шығару кезінде микросхемаларға жазылады, кейіннен өзгертілмейді.
Жүйелік деңгей
Жүйелік деңгей
Бұл деңгей программалары
программаларды төменгі базалық программалармен
8
тікелей аппаратурамен байланыстырады. Осы программаларға
байланысты компьютердің қызмет ету көрсеткіштері қалыптасады.
Компьютерге жаңа құрылғы қоссақ, сол құрылғының жүйелік
деңгей программасы басқа программаларды осы құрылғымен
байланыстырады. Бір кұрылғыны осылай басқа программалармен
байланыстыру программасы драйвер деп аталады (принтер,
тышқан, диск, дисплей драйверлері болады).
Тағы бір жүйелік деңгей программасы құрылғыны адаммен
байланыстырады. Соның көмегімен ісомпьтерге мэлімет енгіземіз,
басқарамыз, нәтиже ала аламыз. Бұлар тұтынушы интерфейсін басқару кұралдары, осылар компьютер жұмыс өнімділігін,
тиімділігін қамтамасыз етеді.
Жүйелік деңгейдегі программалар жиыны компьютер операциялы қ жүйесінің (системасының) ядросын құрайды. Операциялық система (ОС) ядросының болуы адамның компьютермен жұмыс істеуінің алғашқы шарты.
ОС ядросы компьютер жадын, енгізу-шыгару процесін, файл
жүйесін, командаларды өқдеуді басқару, т.б. жұмыстар атқарады.
Қызметтік деңгей
Бұл деңгей программалары базалық деңгей программаларымен де жэне жүйелік деңгей программаларымен де байланыса
алады.
Қызметтік программалар (утилиттер) жұмысы - компьютерлік жүйені тексеру мен баптау (параметрлерін тагайындау)
жұмыстарын автоматтандыру жэне де жүйелік программалар
жұмысын жақсарту. Утилиттер жиі қайталанатын операцияларды - мысалы, магниттік дискіні форматтау, дискіні дефрагментациялау, файлдарды архивтеу, вирустарды тауып аластау, т.б.
істерді орындайды.
Қызметтік программаларга
1. файл диспетчерлері;
2. архиваторлар;
3. диагностикалық программалар;
4. инсталляция жасау программалары;
5. коммуникациялық программалар, т.б. жатады.
9
Қолданбалы деңгей
Қолданбалы деңгей нақты есептер шығаратын қолданбалы
программалар жиынынан (өндіріс, шығармашылық, ойын және
оқыту) тұрады. Қолданбалы және жүйелік программалар арасында тығыз байланыс бар.
Қолданбалы программаларға мәтіндік редакторлар, мәтіндік процессорлар, графикалық редакторлар, мәліметтер базасын
басқару жүйелері (МББЖ), электрондық кестелер, автоматтандырылған жобалау жүйелері, баспа жүйелері, аударма программалары, браузерлер, HTML-редакторлар, бухгалтерлік жүйелер, т.б.
жатады.
1.3 Программалық жабдықтамалардың жіктелуі
Жүйелік программалар компьютердің жұмыс істеуі үшін керек. Олар операциялық жүйелерге, драйверлер мен утилиттерге
жэне тест программаларына бөлінеді.
Операциялық жүйелер немесе системалар (ОС) - компъютерді басцорашын э/сәне цұрылзыларды цолданбсиіы программалармен байланыстыратын программалар тобы. Дербес комПрограммалық жабдықтамалар
■■■■■■
Жүйелік
жабдықтамалар
Операциялық
жүйелер
Программалау
жүйелері
Программалау
тілдері
Бақылау және
диагностика
құралдары
Программалық қоршаулар
Драйверлер
Трансля
торлар
Қолданбалы
жабдықтамалар
Арнаулы
програм­
малар
Қолданбалы
программалар
Біріктірілген
қолданбалы
программалар
Компиляторлар
Паскаль L_Пнтерпретаторлар
Утилиттер
сурет. Программалық жабдықтамалардың жіктелуі
пькперлерде кең тараған операциялық жүйелерге MS (PC) DOS,
WINDOWS 95/98, WINDOWS 2000/XP, WINDOWS 7, OS/2,
UNIX, т.б. жатады.
Программалық қоршаулар - дербес компьютер мен жұмыс
істеуші адамның арасындағы іс-эрекеттерді жеңілдететін программалар. MS DOS үшін әдетте Norton Commander қоршауы, ал
Windows ортасы үшін - Norton Desktop, Norton Navigator, FAR
пайдаланыл ады.
Драйверлер - ОС жүйелерін сыртқы құрылғылармен (принтерлермен, дискілермен, пернетақтамен) байланыстыратын программалар тобы.
Утилиттер - ОС-ны кеңейтіп, қосымша қызмет атқаруға
керекті программалар тобы. Оларға орыс-қазақ әріптерін енгізуді,
антивирустік (вирустерге қарсы) программаларды, мәліметтерді
архивтеу (қысу) программаларын жатқызуға болады.
Тест программалары компьютердің жұмыс істеу қабілетін
(диагностика) тексеретін программалар, олар ақауы бар құрылғыларды анықтап, экранға мәліметтер шығарады.
Программалау жүйелері - программалау тілдері мен трансляторлардан (түрлендіргіш программалар) тұрады, олар арқылы
жүйелік және қолданбалы программалық жабдықтамалар жасалады. Программалау тілдері - ФОРТРАН, ПАСКАЛЬ, БЕЙСИК,
ЛИСП, С, C++, АДА, ПРОЛОГ, ЯВА, т.б. Олар агылшын тіліне
жақын жасанды тілде жазылады да, кейіннен трансляторлар
көмегімен машиналык кодтарга түрлендіріледі. Трансляторлар
интерпретаторларға жэне компиляторларға бөлінеді.
Интерпретаторлар әрбір команданы машина тіліне аудара
салып, бірден орындайтын трансляторлар тобы, олардың артықшылығы - тұтынушымен диалог режимінде жұмыс атқарады,
кемшілігі - жұмыс өнімділігі төмен болады.
Компилятор - командаларды орындамай тұрып, машиналык
кодтарга толық аударатын программа. Осының нәтижесінде
объектілік модуль деп аталатын программа жасалады, олардың
бірнешеуін біріктіру арқылы жүктеу модулі жасалып барып, осы
модульді орындау арқылы мәселе (есеп) шешіледі.
Программалық жүйелер жасайтын мықты фирмаларга
Microsoft Corporation жэне Borland International жатады. Microsoft
11
I
фирмасы: Quick Basic, Visual Basic, Microsoft C++ программаларын, ал Borland фирмасы —Turbo Basic, Borland C, Turbo Pascal
программалық тілдерін жасап таратуда.
г
Қолданбалы программалар
Қолданбалы (кәделі) программалық жабдықтамалар белгілі бір мамандық саласында нақты есептер шығара алатын
программалар жиыны. Оларға карапайым программадан бастап
күрделі есептерді шығара алатын қуатты мамандандырылған
жүйелерді (мэтіндік процесссор, графикалық редактор, баспаханалық жүйелер т.б.), экономикалық, гылыми мэселелерге
арналган жэне жалпы көпшілікке қызмет ету кешендерін де
жатқызуга болады.
,
Дербес компьютерлердің кең тарауына басты себеп болтан
қолданбалы программалардың кең таралуы еді, бұл программа­
лар тек бір есепті шыгарып қана қоймай, белгілі бір мамандық
саласында есеп жұмыстарын түгел автоматтандыруцы немесе
информацияның белгілі бір түрлерін өңдеуді түгел қамти алатын
бО Л Д Ы .
- :■, , . . .
Ш : 1м
11 д ^ , j . л
Офистік программалар осы қолданбалы программаларга жатады. Олар мынадай түрлерге жіктеледі:
—мэтін редакіорлары (Блокнот, WordPad, Word, PageMaker, т.с.с.);
- графикалық редакторлар (Paint, Fotoshop, CorelDraw);
- электрондық кестелер (кестелік процессорлар - Excel, Lotus,
Works, т.с.с.);
ч
s
- мәліметтер базасы (Access, Dbase, FoxPro, т.б.);
- Интернетпен жұмыс істейтін программалар тобы (Netscape
Navigator, Internet Explorer, Opera, т.б.);
- автоматтық жобалау программалары (AutoCad);
- оқыту жэне ойнау программалары, т.б.
1.4 Программаларды коммерциялық түрде тарату
Программаларды қызметтеріне қарай жіктеуден басқа оларды
тарату, сату істеріне қарай да жіктеуге болады.
іегін таратылатын программалар (freeware) - көптеген программалаушылар жасайтын шағын утилит-программалар жэне
басқа сатылатын программаларга тегін қосымша толықтырмалар.
Бұлар Интернеттен көшіріп алынады.
12
Коммерциялық программалар (commercialware) - сатылатын программалар, бұларға барлық ірі-ірі программалық дестелер кіреді. Интернет-дүкендерде, сайттарда несиелік карточкалар
(кэртішкелер) арқылы жэне қолма-қол ақшаға сатылады.
Шартты түрде тегін программалар (shareware) - көп тараган
программалар тобы, утилиттер, кейде керекті көлемді програм­
малар да осыған кіреді. Бұларды шамалы мерзім ішінде тегін
қолданып, сонан кейін аздап ақша төлеу керек. Егер сол мерзімде
ақша төленбесе, олар мүмкіндіктерінің біразын орындамай қояды
немесе жиі-жиі ақша сұрап мазаны алады.
Тәжірибелік нұсқалар — дұрыс жұмыс атқаратын, сатылатын программалар. Біраз уақыт өткен соң, жұмыс істемей, ақша
сұрайды. Кейбір мамандар оны бұзып, ішіне кіріп уақытын ұзартып алады немесе сагаты мен датасын кейінге ауыстырып қойып
пайдаланады. Ал кейбірі бұрынгысын деинсталлятормен өшіріп,
қайтадан жазып алады немесе көшіріп аларда жүйелік мерзімін
алдагы уақытқа ауыстырады, сонда ол ұзақ уақыт тегін істейді.
Демоверсиялар (demoware) - жарнамалық нұсқалар, жұмыс
істегенмен, нэтижесін дискіде сақгамайды немесе қолдану мерзімі аз ғана уақытқа жасалады.
Соңғы кезде информатика саласында программалық жэне аппараттық құралдардага байланысты ақпараттық технология деген
термин жиі айтылып жүр.
Бақылау сұрақтары
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Информатиканың құрамы қандай? Информатиканың негізгі аппа­
раты не?
Информатиканың толық магынасы.
Программа дегеніміз не? Мэліметтер ше?
Программалық конфигурация ұгымы.
Программалық жабдықтама қандай қызмет атқарады ?
Программа жасауга кімдер қатынасады?
Программаралыц интерфейс түсінігі.
Программалық жабдықтама деңгейлері. Базалық деңгей деген не?
Жүйелік және қызметтік деңгейлер сипаттамалары.
Қолданбалы деңгейдің атқаратын қызметі.
Программалау жүйеяері деген не? Оның құрамы.
Программалық жабдықтамалар қалай жіктеледі?
13
I
13.
14.
15.
16.
17.
Операциялың жүйелер қышеті.
Программапық қоршаулар деген не?
Драйверлер, утилиттер үгымы.
Тест программаторы қандай қыімет атқарады?
Интерпретатор, компилятор түсініктері, олардың үцсастықтары
мен айыриашылықтары.
18. Қолданбаіы (кэделі) программашқ жабдықтамалар ұгымы.
14
2 АҚПАРАТТЫҚ ТЕХНОЛОГИЯ ЖЭНЕ ТЕХНИКА
2.1 Ақпараттық технология түсінігі
Технология грек тілінен аударганда (techne) өнер (искусство),
шеберлік, білгірлік деген сөз, ал мұны қазірде процесс ұгымымен
де беруге болады.
Процесс - алдагы мақсатқа жету жолында атқарылатын
белгілі бір әрекеттер жиыны. Процесс адамдар таңдап алган
стратегиямен анықталуы тиіс, ол эр түрлі кұралдар жэне тәсілдер
көмегімен жүзеге асырылады.
Ақпарат кэдімгі материалдық ресурстар - мұнай, газ, пайдалы
қазба байлықтар тэрізді қогамның аса багалы ресурстарына жатады, сондықтан оны өңдеу процесін материалдық ресурстарды
өңдеу сияқты технология деп қабылдауга болады.
2.1 сурет. Ақпараттық технологияны материалдык ресурстарды өңдеу
технологиясының аналогы тәрізді қарастыру
Ақпараттық технология - объектінің, процестің немесе
құбылыстың (ақпараттьщ өнімнің) қалып-күйі жайлы жаңа сападагы ақпарат алу мақсатында мэліметгерді (алгашқы ақпаратты) жинау, өңдеу жэне тасымалдау құралдары мен тэсілдері жиынын пайдаланатын процесс.
Ақпараттық технология - компьютердіц көмегімен ақпаратты жинау, енгізу, тасымалдау, сұрыптау, іздеу, реттеу,
өзгерту және өңдеу жүмыстарыныц тізбегі деп те айтуга бо­
лады.
Материалдық технология өндірісінің мақсаты — адамның не­
месе жүиенщ талаптарын қанағаттандыратын өнім алу.
Ақпараттық технологияның мақсаты — адамдар талдай ала15
тын ақпарат өндіру, соның негізінде белгілі бір әрекетті орындауға қажет шешім қабылдау ісі атқарылады.
Ақпараттық технологияның өндірістік технологиядан айырмашылығы оны адамның қатысуынсыз роботтар, компьютерлер іске асыратын үздіксіз процеске айналдыруға болмайды.
Өйткені ол құжаттың көшірмесін алу, есепке енгізу, есеп шығару
секщці жұмыстармен қатар шығармашылық ізденісті талап ететін шешімдер қабылдау, мэселені жүргізу жолын өзгерту, бірнеше
мүмкіндіктерді салыстыра отырып, олардың ішінен ең тиімдісін
іріктеп алу сияқты таңдау жұмыстарын кеңінен жүргізумен өте
тығыз байланысты болады. Сондықтан ақпараттық технология
"адамдық факторға" үлкен көңіл бөледі жэне оның шеберлік
деңгейінің өсуіне эсер етеді.
Бір материалдық ресурсқа эр түрлі технологиялар қолдану
арқылы эр түрлі бұйымдар, өнімдер алуға болады. Дэл осындай
тұжырым ақпарат өңцеу технологияларына да сэйкес келеді.
9
" ' Ш
Өнімдер алуға арналған технологиялар қурамы
Материалдық анім
Ақпараттық өнім
Шикізаттар мен материалдар
даярлау
Мәліметтер немесе алғашқы
ақпарат жинау
Материалдық өнім өндірісі
Мәліметтерді өңдеу жэне
нәтижелік ақпарат алу
Шығарылған өнімді
тұтынушыларға сату
Нәтижелік ақпаратты шешім
қабылдау үшін қолданушыға беру
Ацпараттъщ технология қоғамдағы ақпараттық ресурстарды
пайдалану процесінің маңызды құраушысы болып табылады.
Қазіргі кезге дейін ол ғылыми-техникалық прогрестің дамуына
жэне ақпарат өңдейтін жаңа техникалық қүралдардың шьнуына
байланысты бірнеше эволюциялық кезеңдерден өтті.
Қазіргі ақпарат өндеу технологиясының негізгі техникалық
кұралы компьютер болып саналады, ол технологиялық процестің құрылу концепциясына жэне нэтижелік ақпарат сапасына да
бірсыпыра әсерін тигізді.
16
Дербес компьютердің ақпараттық ортаға енуі және байланыстың телекоммуникациялық құралдарын пайдалану ақпараттық технологияның жаңа кезеңі келгенін анықтады. Осыған орай
технология атауына синоним сөздер болып табылатын "жаңа",
"компьютерлік” немесе "заманауи” тәрізді тіркестер қосылып
Жаңа" сөзі бұл
аиқындаиды
новаторлық мүмкіндігі мекемелердің әр түрлі жұмыстарының
мазмұндарының да жаңаруына сәйкес пайда болды.
Жаңа ақпараттық технология ұғымына ақпаратты тасымалдайтын телефон, телеграф, телекоммуникация, факс тәрізді
құрылғылардан тұратын коммуникациялық технологиялар да
кіреді.
Жаңа ақпараттық технологиялардың негізгі сипаттамалары
Методологиясы
(әдіснамасы)
Жаңадан шыққан
ақпарат өңдеу
алдары
Біріүгас
технологиялық
жүйелер
Негізгі белгісі
Нәтижесі
Басқару технологиясы- Коммуникациялардың
на "кірістіру"
жаңа технологиясы
Мамандар мен менеджерлер қызметін
интеграциялау
Ақпарат өңдеудің жаңа
технологиясы
Ақпаратты мақсатқа
Әлеуметтік орта
Басқару шешімдерін
сэйкес түрде жасау, та- заңдылықтарын есепке қабылдаудың жаңа
сымалдау, сақтау және алу
технологиясы
бейнеле
Жаңа ақпараттық технология - дербес компыотерлер мен
телекоммуникациялық құралдарды пайдаланатын, қолданушылармен "жылы жүзді" интерфейс арқылы жұмыс
параттық технология түрі.
Жаңа ақпараттық технологияның үш негізгі қ;
ципі) бар, олар:
- компьютермен интерактивті режимде жұмыс
- басқа программалық өнімдермен бірігуі
нас жасауы);
„
0_
НЯШ Щ ,
J
и
С.Тораиғыров
I
мэліметтерді дец маввтиі^ щіщдщда | өзгерту процесінің
академик C.BeArmiV ,1
икемдшігі.
атындағы гылі
2-1660
К ІТ А П ^ А Н
I
Акпараттық технологиялар оның негізп ортасы болып табылатын акпараттык жүйелермен тығыз байланысты. Ақпараттык
технологиялар - компьютерде сақталатын мәліметтермен шектелген ережелерге сэйкес орындалатын кез келген операциялардан, эрекетгерден, кезеңдерден тұратын процесс.
Акпараттык технологияның негізгі максаты - алгашқы мэліметтерден белгіленген әрекеттерді орындау нэтижесінде қолданушыга керекті ақпарат алу.
Акпараттык жүйенің құраушы элементтері компьютерлер,
компьютерлік желілер, программалық өнімдер, мэліметтер базасы, адамдар, байланысудың техникалык және программалык
жабдыкгары болып келетін орта болып табылады. Ақпараттык
жүйенің негізгі максаты - акпаратты сақтау мен өңдеуді ұйымдастыру. Акпараттык жүйе мэлімет өңдеудің адамдық-компьютерлік жүйесі болып табылады. Акпараттык жүйеге багытталган акпараттык технологияны білмей, жүйе функцияларын
жүзеге асыру мүмкін емес. Акпараттык технология ақпараттық
жүйе аймағынан тыс жұмыс істей береді.
Екі акпараттык технологияны —баскару жэне компьютерлік
технологияларды сэйкестендіре білу - акпараттык жүйенің табысты жұмыс істеуінің кепілі бола алады.
* !
Осы айтылғандарды есепке ала отырып акпараттык техноло­
гия жэне акпараттык жүйе үғымдарының бүрынгы аныктамаларын толықтыра түсуге болады.
Ақпараттық технология - компьютерде мәлімет өңдеу кезінде
гіерсоналдын максатқа жету жолында атқаратын накты анықталган эрекеттер тізбегі.
Ақпараттьщ жүйе - компьютерлік акпараттык технология­
ларды пайдалану аркылы шешім кабылдауды сүйемелдеу және
акпараттык өнім өндіру істерінің адамдык-компьютерлік жүйесі.
Қазіргі кездегі акпараттык технология ұғымын мэліметтер
өңдеуге байланысты үш түрге жіктеуге болады, олар: есепке
алу, талдау жэне шешім қабылдау. Осы уакытқа дейін бүл жұмыстар адамнын баскаруымен қагазға жазылган күжатты өңдеу
түрінде ететін, ал енді басқару, үйымдастыру жұмыстарын ком­
пьютер көмегімен автоматты түрде аткару жаңа акпараттык
технологияның тууына себепші болды. Бұл жаңа технолог иянмн
18
бұрынғы технологиядан (құжатты машинкада басу, байланысты
телефонмен жүргізу, сөзді диктофонға жазу) айырмашылығы тізбектеле орналасқан ақпараттық техника, "жылы жүзді" программалық жабдықтама жэне дамытылған компьютерлік байла­
нысты кеңінен қолдану. Сонымен жаңа ақпараттық технология
төмендегі мынадай мүмкіндіктерді орындауы тиіс:
- эрбір адам мәліметтерді дұрыс орналастыра білуі (програм­
малау емес) керек;
- мәліметті өңдеу барысында оларды орнектеу, сақтау, іздеу,
бейнелеу және өзгерістен қорғаудың бірыңғай үлгісіне келтіріп,
жинақталған мәліметтер қоймасын пайдаланатын ақпараттық
колғабыс көрсету;
- кез келген құжатты қағазсыз өңдеу ісін ұйымдастыру,
мұнда қағазға қүжаттың ең соңғы нұсқасы гана түсіріледі, ал басқалары электрондық машинаның мәлімет жинақтағыштарында
(дискіпер) сақталады да, экранда көрсетіледі;
- адам үшін көптеген жеңілдіктері бар есепті шығарудың
сұхбаттасу режимін (интерактивті режим) жүргізу;
- бір-бірімен байланысқан компьютерлерді пайдалана отырып, қүжатты ұжымдық түрде даярлау;
- есепті шығару барысында мәліметтерді бейнелеу тәсілін
жылдам өзгерту мүмкіндігі болу.
АКПАРАТТЫК ТЕХНИКА
ЭЕМ
Телеграф Магниттік Теледидар,
жазу радио, телефон
2.2-сурет. Ақпараттык техника кұрамы
Бүл күндері жаңа ақпараттық технология информатиканың
негізгі бір саласы болып табылады, оның болашақта басқа салаларда істейтін мамандар жүмысына тигізетін эсері зор болады
деп күтілуце. Ақпараттық техника - ақпаратты өңдеуге керекті
техникалық аспаптар жиыны. 2.2-суретте көрсетілген алгашқы екі
техника түрі үздік-үздік цифр түрінде берілген дискретті мәліметтермен жұмыс істейді, олар: Компьютерлер үшін екілік сандар, ал
19
і
телеграфияда - морзе эліппесі. Қалған техника түрлері үздіксіз
электр сигналы ретінде берілетін мәліметтерді пайдаланады.
Болашақта дискретгі мэліметтермен жұмыс істейтін аспаптар
көбейе түсуі тиіс, өйткені олар жоғары дәлдікпен сенімді түрде
тыңғылықты қызмет атқарады. Сол себепті қазіргі кезеңде цифрлы телефондар мен теледидарлар шығарыла бастады.
Халық шаруашылығында ақпаратты кең қолдану үшін оны
сақтайтын, жеткізетін жэне өңдейтін құралдарды көптеп жасау
керек болды. Соның нәтижесінде ақпараттық техника күнненкүнге көбеюде, әсіресе оның ішінде электрондық манганаларға
өте көп көңіл бөлінуде, өйткені ақпаратты жылдам өңдеу үшін
қолданылатын негізгі электрондық тетік есептеу машинасы бо­
лып табылады. Сонымен қазіргі кезде информатиканы кеңінен
қолданатын орындарға мыналарды жатқызуға болады:
1) еңбек ету аспаптарын басқару, яғни станоктарды, роботтарды, машиналарды басқару;
2) ғылыми-зертгеу жұмыстарын жүргізуді автоматтандыру;
3) компьютерлерді халық шаруашылығындағы экономикалық
ұйымдастыру, басқару жұмыстарында пайдалану;
4) компьютерлерді оқыту жэне халық шаруашылығына керекті
мамандар даярлауда қолдану;
5) компьютерлерді халыққа ақпараттық қызмет көрсетуге пай­
далану (медицина, сауда, тұрмыс қажетін өтеу, энергетика, т.б.).
Информатиканың дамуы елдің экономикалық құрылымының және еңбек өнімділігінің өсу деңгейін көрсетеді, сол себепті
ол елдің экономикалық қуаттылығының көрсеткіші бола алады.
2.2 Ақпараттық ресурстар және өнімдер
Ресурстар - сақтаулы заттар, белгілі бір нәрсепердің шыгу
көздері деген мағына береді.
Мүмкіндіктердің басым бөлігі материалдық өндіріске бағытталған оіздщ қоғамда классикалық экономикалық категориялар
(санаттарға) болып саналатын ресурстардың бірнеше негізгі түрлері бар, олар:
,.і5
материалдъщ ресурстар - қоғамдық өнім өндіру процесінде
пайдалануға арналған еңбек заттары, мысалы, шикізат, матери20
алдар, отын, энергия, полуфабрикаттар (жартылай шикізаттар),
құралдар, т.б.;
- табиги ресурстар - адамдардың материалдық жэне рухани
талаптарын қанағаттандыру үшін пайдаланылатын объектілер,
процестер, табиги жагдайлар;
- еңбек ресурстары - қоғамда жұмыс істеу үшін жалпы жэне
кэсіби білімі бар адамдар;
- қаржылық ресурстар - мемлекеттік немесе коммерциялық
құрылымдардың қолындагы ақшалық қаржылар;
- энергетикалық ресурстар - энергия көздері, мысалы, көмір,
мұнай, мұнай өнімдері, газ, гидроэнергия, электр энергиясы, т.б.
Ақпараттық қогамда дәстүрлі ресурс түрлерінен гөрі ақпараттық ресурстарга көбірек назар аударылады. Олар бұрыннан
болганменен, кезінде, экономикалық немесе басқа категориялар
ретінде қарастырылмаган; ешкім олар туралы арнайы пікір айтпаган, эрине олар жайлы анықгамалар, түсініктер де болмаган
еді.
Қазіргі ақпараттық қогамга өту кезеңіндегі ең өзекті түсініктердің бірі "ацпараттыц ресурстар" ұгымы болып отыр.
Бұган соңгы кезде көптеген соны пікірлер, анықтамалар, түсініктер беріліп келеді.
Ақпараттық ресурстар - жеке құжаттар жэне жеке құжаттар жиымдары, ақпараттық жүйелердегі (кітапханаларда,
мұрагаттарда, қорларда (фондтарда), мэліметтер банктерінде,
басқа да ақпараттық жүйелерде) құжаттар мен құжаттар жиым­
дары.
Ақпараттық ресурстар - қогамдағы элеуметтік мақсатта
пайдалануга арналган жэне белгілі бір материалдық жинақтауыпгга тіркелген адамдардың дайындаган білімдері. Қогамның ақпараттық ресурстары білім ретінде оларды жасаган, жинақтаган, талдаған адамдардан бөлек сақтала береді. Адамзат
білімі құжаттар, мэліметтер базасы, білім базасы, алгоритмдер,
компьютерлік программалар жэне де өнер, эдебиет шыгармалары,
гылыми еңбектер түрінде жазылып сақтала береді. Мемлекеттің,
аймақтың, ұйымның ақпараттық ресурстары шикізат, энергия
қорлары, пайдалы қазба байлықтар сияқты стратегиялық ресур­
стар ретінде қарастырылады.
21
I
Ақпараттық ресурстар ақпараттық өнім жасаудың негізгі
базасы болып табылады. Кез келген ақпараттық өнім оны жасаушының ақпараттық моделін бейнелейді де, оның қарастырып
отырған нақты пэндік аймағы жайлы жеке көзқарасын көрсетеді.
Ақпараттық өнім адамның интеллектуалдық еңбегінің нәтижесі бола отырып, белгілі бір материалдық мэлімет жинақтайтын кітап, программа, мақала, құжат, т.с.с. түрінде тіркеліп қалуы
ТИ ІС.
'*
" '1
А қпаратты қ өнім - заттық немесе заттық емес формада таратуға арнай отырып, ақпаратты жасаушы адам қалыптастырған
мәліметтер жиыны.
Ақпараттық өнім кез келген материалдық тауар (өнім) сияқгы
қызмет көрсеіу жолымен таратыла алады. Көрсетілетін қьізмет
түрлері ақпараттық ресурстарды пайдалану аймагындағы оның
көлемімен, сапасымен, қолданылу багытымен жэне солардың
негізінде жасалатын ақпараттық өнімдер арқылы анықталады.
Ақпараттық қызмет тек компьютерлік немесе компьютерлік
емес нұсқадағы мэліметтер базасы болған кезде ғана туындайды.
Мәліметтер базасы ақпараттық қызмет көрсетудің негізгі көзі
жэне шикізаты болып табылады. Мәліметгер базасы дэл осылай аталмағанмен, компьютерлік кезеңге дейін де кітапханалар,
мұрағаттар, анықтамалық бюролар түрінде болған еді. Оларда
оқиғалар, құбылыстар, объектілер, процестер, жарияланымдар
жайлы барлық мәліметтер сақталатын болатын.
Мэліметтер базасы - ұйымдастыру ережелері мэліметтерді
сипаттау, сақтау, өңцеу қағидаларына негізделіп, бір-бірімен байланысқан мэліметтер жиыны.
Компьютерлер пайда болған соң, мәліметтер базасының ко­
лем! тез ұлғайды жэне соған сәйкес ақпараттық қызмет көрсету
аймағы да кеңейді.
Қызмет көрсету - мекеменің немесе жеке адамның баска бір
адамның не мекеменің эр түрлі өнімдерді пайдалану талаптарын
қанағаттандыруға бағытталған өндірістік емес іс-эрекеттерінің
нәтижесі.
Ақпараттық қызмет керсету - ақпараттық өнімдердің қолданушы (тұтынушы) қолына пайдалануға берілуі. Ақпараттық
22
f
кызмет көбінесе компьютер арқылы берілетін қызмет түрі болып
саналады, бірақ одан оның ауқымы кең.
Қызмет көрсету кезінде оны беруші мен алушы арасында келісім-шарт жасалып, онда қызмет көлемі, бағасы, колданылатын
өнім көрсетіледі. Ақпараттык кызмет көрсету компьютер немесе
басқа бір мүмкіндік арқылы мәліметтер базасы түрінде беріледі.
Енді ақпараттық технология ұғымымен сабақтас программа­
лау технологиясы мәселелеріне кеңірек тоқталайық.
Бақылау сүрақтары
1. Технология, процесс ұгымдары .
2. Ақпараттық технология мен материалдық технология
айырмагиылықтары.
3. Ақпараттық технология дегентіз не? Ақлараттық жүйе ше?
4. Жаца ақпараттық технология ұгымы.
5. Ақпараттық техника құрамы.
6. Ақпараттықресурстар және өнімдер үгымдары.
7. Ақпараттық қызмет корсету дегеніміз не?
23
3 ПРОГРАММАЛАУ ТЕХНОЛОГИЯЛАРЫ
Программалау - программа құру процесі, алгоритм ры м ы мен тыгыз байланысты информатика саласының бір бөлігі. Бұл —
соңғы кезде өте жылдам дамып келе жатқан пэн саласы. Бұрынғы
программалық жэне техникалық құралдарды дамыту мен жаңа
мүмкіндікгердің пайда болу тэжірибесі программалауды тұрақты
жетілдіріп келеді, осының нәтижесінде жаңа тэсілдер мен технологиялар шығып, олар қазіргі программалық жабдықгамаларды
жасауға жаңа негіздеме болып табылады. Жаңа технологиялар жасау процесін зерттеу жэне олардың негізгі даму бағытын анықтау
ісін жүргізуді қазіргі технологияларды программалау деңгейімен
салыстыра отырып, қолда бар программалық жэне аппараттық
құралдар ерекшеліктерін қолдану арқылы жетілдіру қажет.
Программалау технологиясы деп программалық жабдықтамаларды жасау процесінде пайдаланылатын құралдар мен тэсілдер жиынын айтады. Кез келген басқа технологиялар сияқты
программалау технологиясы да төмендегі мүмкіндіктерді қамтитын технологиялық нұсқаулардан тұрады:
- технологиялық операцияларды орындау тізбегін көрсету;
- кез келген операцияда орындала алатын шарттарды нақтылау;
- эрбір операцияны олардың әрқайсысы үшін анықталган бастапқы мәліметтер, нэтижелер және де нұсқаулар, нормативтер,
стандарттар, багалау критерийлері мен әдістері, т.б. арқылы сипаттау.
, .-т
Технология, операциялар мен олардың тізбегінен бөлек, жобаланатын жүйенің сипаттамасын, ягни оның жасалатын нақты
кезеңінде пайдаланылатын моделін сипаттау тэсілін анықтайды. Технологиялар көбінесе мынадай екі түрге бөлініп қарастырылады:
.
' Ju'
1) программа жасау процесінің нақты кезеңдерінде пайда­
ланылатын технология немесе осы кезеңдердегі жеке есептерді
шығару;
2) бірнеше кезеңдерді біріктіретін немесе барлық кезеңдерді
толық қамтитын технология.
24
Алғашқы технология негізінде көбінесе нақты есепті шығара
алатын шектеулі түрде қолданылатын тәсіл жатады. Ал екіншісінің
негізі ретінде программа жасаудың эртүрлі кезеңцерінде пайдаланылатын тәсілдер жиынын анықтаитын оазалық тәсіл, яғни
ортақ көзқарас (парадигма) немесе әдіснама (методология) қарастырылады.
Программалауцың даму тарихында бір-бірінен айырмашылыгы бар бірнеше парадигмалық сатылардың болганы туралы
айтылады.
3.1 Қүрылымдық программалау
Өткен гасырдың 60 жылдары - программалаудың "стихиялық"
даму кезеңінде программа құрылымы, мэліметтер типтері сияқты
ұгымдар болмады. Сол себепті программалар қайшылықтары
көп, түсінуге қиын кодтардан тұратын еді. Ол кездегі программа­
лау өзінше бір өнер тэрізді болып корінетін. Программалаудагы
сондай қиындықтан шыгу үшін программалаудың құрылымдық
парадигмасына көшу керек болды.
Бұрынгы прогаммалау тілдері пайда болтан кездерден бастап,
мынадай парадигма үстемдік еткен болатын.
"Қандай процедуралар керек екендігін анықтап алып,
колдануға болатын ең тиімді алгоритмдерді пайдаланыңыз".
Прогаммалау тілдерінде осы парадигма параметрлерді қабылдап алып, нәтижелік мэн қайтаруды қамтамасыз ететін функциялар арқылы сүйемелденеді. Стильдің бүл түрі оқулықгарда
параметрлер функцияга қалай беріледі, параметрлердің, функциялардың (процедуралар, ішкі программалар, макроанықтаулар)
эртүрлі типтері қалай ажыратылады, т.с.с. пікірталас түрінде
беріліп келеді. Фортран - алгашқы процедуралық тіл; АлголбО,
Алгол68, Паскаль жэне С - сол нұсқаға сәйкес кейінгі шыққан
тіпдер болып табылады.
"Жақсы программалау стилінің" бір мысалы - функцияның
аргумент-параметрі ретінде берілген санның квадрат түбірін табу
функциясы; егер функцияның аргументі (параметрі) берілсе, ол
нәтиже береді. Мұндай есеп белгілі математикалық есептеулер
арқылы шыгарылады. Мысалы:
25
Ёа
'■
' "fV
0
double sqrt ( double arg)
II квадрат түбірді табу программалық коды
void som efunction О
{
•*
double root2 = sqrt(2);
И ...
I *- Й:■ІШ
Ш 'Ш
}
^ -т т т
Мұндай функция алгоритмдер қоймасына белгілі бір тэртіп
орнатады да, оның атқаратын жұмысы осы есептеумен аяқталады.
Сонымен, программаны құрудың негізгі әдістемесі процеду­
ра болып табылады. Бұл эдістеменің негізі - алгоритм. Програм­
ма көлемінің ұлғаюына байланысты үлкен көлемдегі есептерді
бірнеше есептерге бөлу мэселесі туындады. Сондықтан программалауда процедура түсінігі енгізілді. Процедура программалық
кодтардыц көлемін азайтуға мүмкіндік туғызды.
Программалаудагы қурылымдың көзқарас —программалық
жабдықтаманы жасаудың барлық кезендерін орындауды қамти
отырып, қолдануға болатын технологиялық әдістер жиыны. Құрылымдық программалау негізінде күрделі жүйелерді декомпозициялау (бөліктерге бөлу) тэсілі жатыр, мұнда көлемді программа
шагьш ішкі программаларға бөлініп барып, соларды жеке-жеке
орындалу жолымен іске асырылады. Декомпозициялаудағы бас­
ка да әдістердің (объектілік, логикалық, т.б.) пайда болуына
байланысты бұл тәсіл процедуралық декомпозиция деп аталды.
Процедуралық декомпозицияның екінші бір ерекшелігі ретінде
программа құруда тек базалық алгоритмдік құрылымдарды пайдаланып, GOTO операторын қолдануға тиым салынғанын айтуға
болады.
Негізгі уш базалық алгоритмдік қурыл ымдарга тізбекті,
тармақты жэне қайталау алгоритмдері жатқызылды.
Тізбекті құрылым көрсетілген кезекпен орныдалатын екі ко­
манд адан тұрады да, ары қарай солай жалғаса береді:
<алдыңгы команда>;
<келесі команда>.
26
Тармақты құрылымның толық түрі белгілі бір шарттың
орындалуы немесе орындалмауына байланысты екі мүмкіндіктің
бірінің ғана атқарылуын көрсетеді. Бұл кұрылым С тілінде мынадай түрд е жазылады:
if <шарт > \
<шарт орындалганда, атцарылатын команда>;
else <шарт орындалмаганда, атцарылатын команда>;
Тармақты құрылымның қысқаша түрі - алдыңғы команданың дербес түрі, мұнда шарт орындалмаған жағдайда, ешқандай
команда атқарылмай, кезек келесі командаларға беріледі. Бұл
құрылымның С тіліндегі жазылуы:
if <шарт>
<шарт орындалганда, атқарылатын команда>;
Қайталау құрылымы (цикл) команданың белгілі бір параметрінің өзгеруі барысында, қайталанып бірнеше рет орындалатын операциялар тобын ыңғайлы түрде жазу үшін қолданылады.
Мысалы, "әзірше (while)" қайталау құрылымы С тілінде былай жазылады:
while <қайталану шарты>
do
<қайташнатын команда>;
Цикл тұлгасы деп қайталанатын командалар тізбегін айтады,
ол кейде бос та болуы мүмкін (сирек кездесетін жағдай).
Қайталау циклінің орындалу ережесі: егер шарт орындалмаса
(жалған болса), циклді қайталау тоқтатылады; ал егер шарт орындалса (ақиқат болса), онда цикл тұлғасы атқарылып, қайтадан
шартты тексеру жүргізіледі.
Құрылымдық программалау есепті шағын құрылымдарға бо­
л т , олардың әрқайсысын жеке қарастыруды қажет етеді. Мұнда жобалау "жоғарыдан-төменге" қарай жүргізілді де, жалпы
құрылым идеясын жүзеге асырып, ішкі интерфейс программаларын орындауды талап етті. Бұған коса, алгоритм конструкцияларына шектеулер қойылып, оларды формалды модель түрінде
сипаттау ұсынылды жэне алгоритм құрудың арнайы тәсілі қадамдық түрде орьшдау тәсілі қолданылды.
Құрылымдық программалау қагидасын сүйемелдеу процедуралық программалау тілдерінің негізіне жатқызылды. Олар
27
I
көбінесе негізгі басқаруды беру "құрылымдық" операторларын
қолдану, ішкі программаларды пайдалану жэне мәліметтердің
"көріну" аймағын шектеу тэрізді мүмкіндіктерді сүйемелдеді.
Бұл топтағы кең таралған тілдер ретінде PL/1, ALGOL-68, Pascal,
С тілдерін атауға болады.
Программалық жабдықтамалардың ары қарай көлемінің өсуі,
күрделілігінің артуы мәліметтерді құрылымдауды да дамытуды талап етті. Осының нәтижесінде қолданушының мэліметтер
типін анықтау мүмкіндігі пайда болды. Оған қоса, программаның
ауқымды (глобальді) мәліметтерін пайдалануға шек қойып, олармен жұмыс істеу кезінде шығатын қателерді азайіу мақсатында
жұмыстар істеле бастады. Сондықган бара-бара жаңа технология
- модульдік программалау технологиясы жетіле бастады.
3.2 Модульдік программалау
Уақыт өте келе программаларга деген көзқарас өзгеріп, бұрынгыдай процедуралар құрудан гөрі мэліметгерді ұйымдастыру жағына көңіл бөліне басады. Бұған басты себеп болтан
жайттардың бірі программалар көлемінің ұлғаюы болды. Бірбірімен өзара байланысқан процедуралар мен солар арқылы өңделетін мәліметтер жиынын көбінесе модуль деп атайтын еді.
Сондықтан программалау парадигмасы аздап өзгеріске ұшырады:
"Өзіңізге қандай модуль керек екендігін анықтап алыңыз
да, мәліметтер модуль ішінде корінбей тұратындай етіп программаны бірнеше бөліктерге бөліңіз".
Бұл қағида "мэліметтерді пайдалануды шектеу" деген атпен
тарала бастады. Мәліметтер оларды өңдейтін программалармен бірікпеген жагдайда бұрынгы процедуралық программалау
қағидасын қолданатын болды.
Модула-2 тілі модульдік программалау тұжырымын тікелей
сүйемелдейтін деңгейде кұрылды, ал С тілі болса, оны тек пайда­
лану мүмкіндігін ғана беретін дәрежеде болды.
Мәліметтер программадағы жасырылып қойылатын элементтердің тек біреуі гана болғандықтан, мэліметтерге қол жеткізуді шектеу, яғни "ақпаратгы жасыру" қағидасын енгізгеннен
кейін, оған қоса айнымалылар, константалар, функциялар және
олардың типтерін де бір модуль ішінде гана белгілі болатындай
28
г
етіп, шектеу мүмкіндігі туды. C++ тілін жасауда модульдік программалауды енгізуге арнайы көңіл бөлінбесе де, C++ кластары
ұғымы, негізінде, модульділікті сүйемелдейтін мүмкіндік бо­
лып шықты. Оның үстіне C++ тілі программа бөліктерін жекежеке компиляциялау ісін орындайтын болғандықтан, С тіліне
қарағанда, мұны модульдік тіл деп айтуга толық негіз бар еді.
Модульдік программалау ауқымды айнымалылардың белгілі
бір тобын қолданатын ішкі программалар жиынын жеке компиляцияланатын модульдерге (ішкі программалар кітапханасы) бөліп
қарастыру тәсілі болып табылады. Бұл технологияда модульдер
арасындагы байланыс арнайы интерфейс арқылы жүзеге асырылады да, сол модульдердің өздерін пайдалануга (ішкі програм­
малар командаларын жэне олардың "ішкі" айнымалыларын)
тиым салынады. Бұл технологияны Pascal, C/C++, Ада, Modula
XJ
тілдерінің соңгы нұсқалары сүиемелдеиді.
3.3 Мәліметтер абстракциясы
Модульдерді пайдаланып программалау, ақырында, бір типтеп барлық мәліметтерді бақылауды бір басқару блогында жинақтауга экеліп соктырды. Бұл дэстүрлі тэсілді, кластарды пайдаланбай жұмыс істейтін көзқарасты жетілдіру, бірақ бұлай
ұйымдастырылған типтер тіл құрамындагы негізгі типтерден
басқаша болып шықты.
Мұндайда, біріншіден, белгілі бір типтегі мэліметтерді басқааинымалыларды
болуы
аинымалылар
граммалау ортасына белгісіз болып келеді, ақьфьгада, мұндай
"айнымалылар" көріну аймагының бұрынгы ережелеріне багынфункцияларга
алмаиды
Модуль түрінде жасалатын осындаи типтер непзп типтерден
басқаша болады жэне олар сүйемелдеуцің де төменгі деңгейінде
орналасады. Осыдан барьш компилятор да бірсыпыра төменгі
қателерді таба алмайтын болады. Басқаша айтқанда, мэліметтерді
жасыра алатын модульдер концепциясы мәліметтерді абстракциялауды толық көлемде атқара алмаиды
29
I
\
Сонымен, осыған орай, программалау парадигмасы тагы да
өзгеріске ұшырап, енді былай айтылатын болды:
"Өзіңізге қандай типтер керек екенін анықтап алыңыз
да, әрбір тип үшін операциялардың толық жиынын дайындаңыз”.
Мұндай ортада эрбір типтегі объект тек біреу болған жағдайда, модульдік программалауды пайдалана беруге болады.
Арифметикалық типтер, мысалы, рационал комплекс сандар қолданушы анықтаған типтердің нақты мысалы бола алады.
Класты сипаттауда, яғни қолданушы анықтаған complex
типінде комплекс сандарды бейнелеу форматы мен олармен
орындалатын операциялар жиыны толық көрсетіледі. Мұндайда
мэліметтер жабық эрі жекеше (приватты) болып саналады. Бірақ
бірсыпыра модульдер (барлығы емес) қолданушы анықгаған тип­
тер ретінде көрсетіле алады.
... *
* »
,
*
'
*.
*
•
***
•
•
„ ли
3.4 Объектіге бағытталған программалау түсінігі
Дәстүрлі процедурага багытталған программалау тәсілдері
күрделі программалардың талаптарын қанагаттандыра алмады.
Сондықтан объектіге багытталган программалау ұгымы пайда
болды.
. ... •
Объектіге багытталган программалау (ОБП) - бұл жаңа
технология. Мұнда кұрылымдық программалаудың ең тиімді
жақтары алынып, олар жаңа идеялармен толықтырылады.
Объектіге багытталган тіл деп программалары өзара байланысқан объектілер тізімінен және солардың жұмысын сипаттаудан тұратын программалау тілін айтады. ОБП ерекшеліктері:
— программалық жабдықтамалардың күрделілік дәрежесін
төмендету;
—программалық жабдықтамалардың сенімділігін жогарылату;
— программалық жабдықтамалардың кейбір компоненттерін
қайтадан қолдану мүмкіндігін қамтамасыз ету.
ОБП негізгі ұғымдарының бірі —объект. Объект —мәліметтердің логикалық бірлігі ретінде программада құрастырылған жаңа
типтегі айнымалы.
Объектінің атқаратын басты міндеті — мәліметтерді жэне
оларды өңдеуге арналган тәсілдердің (ережелердің) бірігуі.
30
C++ гілінде мәліметтерді өндеу ісі тәсілдер, яғни функциялар
аркылы атқарылады. Сондықтан C++ программалау тілінде объ­
ект мәліметтерден жэне соларға қолданылатын функциялардан
тұрады.
Объектіге негізделген мэліметтер мен функциялар жабык
(private), қорғалған (protected) жэне ашық (public) бола алады.
- ОБП технологиясының негізгі төрт сипаттамасы бар:
- инкапсуляция;
- мұралау;
- полиморфизм;
- типтердің абстакциясы.
3.1 сурет. ОБП негізгі қасиеттері
Инкапсуляцияда программа бірлігі ретінде мәліметтер
жэне функциялар тобының бірлестігі қарастырылады. Объектіде
мәліметтер қорғалған болып саналады, егер мәліметтер мен
функция-мүшелер жабық немесе қорғалған деп айтылатын болса, онда олар программаның басқа бөлігінен көрінбейтін болады.
Программа сенімді жұмыс істеуі үшін объектінің өрісін
тікелей пайдалану қажет емес. Сондықтан мұндайда оның мазмұнын ашық тэсілдерді шақыру арқылы қалыптастыру керек.
Белгілі бір класс ішінен ішкі класс құрастыру мұралау бо­
лып табылады. Мұралау кезінде бір объектінің атрибуттары
мен қасиеттерін екіншісінің иемденуіне мүмкіндік беріледі.
Егер бұрынгы кластан аз ғана айырмашылығы бар жаңа класс
құрғымыз келсе, онда бастапқы кластың бұрынғы айнымалылары мен тэсілдерін қайтадан сипаттап жазу қажет емес. Сонда
базалық класс аталық, ал жаңадан пайда болтан класс - оның
ұрпагы (туындысы) деп аталады. Ұрпақ кластың, қажет болса, өз
кұрамына жаңа айнымалылар мен тәсілдер қосу мүмкіндігі бар.
31
Мұралау өз кезегінде объектілердің иерархиясын құрастыруға
жағдай туғызады, соның нэтижесінде жалпыдан жалқыға көше
алады, ол объектіні нақтылайды, айқындайды.
Пол иморфизмде кластың бір атаулы функция-мүшесі эр түрлі,
бірақ өзара логикалық байланысқан мақсаттарда пайдаланылады.
Мысалы, sum(x,y) функдиясы х + у қосындысын табады делік.
Аргументтерінің типіне қарай функция эр түрлі типтегі мэнді
қайтара алады. Бүтін немесе нақты типті х пен у айнымалылары
үшін атаулары эр түрлі екі функцияны тағайындаудың орнына бір
sum(x,y) функциясын сипаттау тиімді болады. Мұндагы + амалы
х пен у типтеріне тэуелді болады.
C++ тілінің негізгі ұғымдарының бірі - класс болып табылады. Класс дегеніміз - кұрамында мүшелері (айнымалылары) мен
тәсілдері (функциялары) бар тіл құрылымы. Кластық құрылым программалаушының өзі анықтайтын тип. C++ тілінде объектіні
анықтау үшін алдымен оның форматын class түйінді сөзімен
белгілеу керек. Кластың анықталуы құрылымның (struct) анықталуына ұқсайды. Құрылымның кластан айырмашылығы —оның
кұрамындағы барлық мүшелер мен тэсілдердің ашық сипатталуындажатьф.
-п *т :іы щ
Программалау парадигмасын енді мынадай түрде айтуға бо­
лады: '
1‘
5
"Өзіңізге қандай кластар керек екендігін анықтап алыңыз
да, әрбір класс үшін барлық операциялар жиынын дайындаңыз; жалпы қасиеттерді айқын түрде көрсетіп, мүралауды
пайдаланыңыз"
Жалпы стандарт бойынша, кластың барлық элементтері
(мүшелері мен тэсілдері) жабық болып табылады. Жабық элементтерді осы кластан тыс ешбір сыртқы класс немесе функция
пайдалана алмайды. Бұл инкапсуляция қагидасына сэйкес келеді.
Инкапсуляция мәліметтерге программа кодынан қол жеткізуці
бақылау, оларды жабық деп жариялау арқылы жүргізіледі.
ОБП қолданбалы программалауда жедел дамып келе жатцан
багыттардың бірі болып табылады.
3.5 Программалау технологияларының даму кезеңдері
Программалау технологияларының онжылдықгар бойынша
көрсетілген даму кезеццеріне қысқаша тоқталайық.
32
Өткен ғасырдың 50-ші жылдары компьютерлер қуаттылығы
(ЭЕМ-дердің алғашқы буыны) онша жоғары болған жоқ, ал
олар үшін программалау машиналық кодтар арқылы жүргізілді.
Негізінен, ғылыми-техникалық есептер (формулалар бойынша) шығарылды, программалауға берілген тапсырмалар нақты
есептер қойылымынан тұратын еді. Көбінесе программалаудың интуитивтік технологиясы қолданылатын, мүнда бірден
тапсырма бойынша программа құруга кірісетін, оның үстіне
жұмыс барысында тапсырмалар өзгертіліп те отыратын еді,
қажетті құжаттама программа жұмыс істеген кезде барып кұрастырылатын. Соган қарамастан, программалау технологиясының
іргелі тұжырымдамасы болып саналатын модульдік программа­
лау осы кезенде (машиналық кодта программалаудың қиындыгын
жеңу мақсатында) пайда болды. Алгашкы жогары деңгейде про­
граммалау тілдері пайда бола бастады, солардың ішіндегі ФОР­
ТРАН тілі одан кейін де ұзақ уақыт пайдаланылып келеді.
1960-шы жылдары бірсыпыра жогары деңгейде програм­
малау тілдерінің (АЛГОЛ 60, ФОРТРАН, КОБОЛ, т.б. өте жылдам дамыганын көреміз, сол кездерде программалау технологиясындагы олардың орны оте жогары багаланылып жүрді.
Бірақ осы тілдер көлемді программалар жазуда барлық мәселелерді шешеді деген үміт ақталмады. Компьютерлердің қуаты
артып, программалау тәжірибелері де жинақталган кездерде
жогары деңгейде программалау тілдерінің мүмкіндіктері шектеулі екендігі белгілі болды. Осының нәтижесінде программаларды модульдік түрде үйымдастыру жүзеге асырыла бастады. Тек
ФОРТРАН тілі гана пайдаланыла берді, өйткені ол бұрыннанақ модульдік қагидамен жасалган еді жэне дайындалган прог­
раммалар кітапханасы да оте бай болатын. Осы кездерде про­
граммами қай тілде құру емес, қалай кұру керек деген сауалдың
маңызды екені түсінікті болды. Мамандар енді программалау технологиялары мен олардың әдіснамаларына көңіл боле бастады.
Екінші буын компьютерлеріндегі жұмысты уақытша тоқтатып, программаларды үзе тұру мүмкіндігінің пайда болуы
мультипрограммалау ісінін жетілдіріліп, үлкен программалық
жүйелер жасауга себепші болды. Бүлардың бэрі программалар-
ды ұжым болып жасаудың әсерінен туындады да, көптеген жаңа
технологиялық мәселелер пайда болды.
Өткен ғасырдың 70-ші жылдары ақпараттық жүйелер мен
мәліметтер базасы кең етек жайды. Бұған итермелеген негізгі
себеп 1 компьютердің мэлімет жинақтауыштарындағы бір бит
ақпаратты сақтау құны бұрынгы дэстүрлі мәлімет сақтаудан
арзан болып кетті. Программалау технологиялары жылдам
алта басып, құрылымдық программалаудың дамуы (мысалы,
мәліметтер құрылымын жасыра алатын модульдердің шыгуы),
мәліметтердің абстракты типтерінің жетілдірілуі, программалык жабдықтамалардың сенімділігі мен мобильдігін қамтамасыз
етілуі, ұжымдық түрде программа құруды басқару әдістемесінің шыгуы, программалау технологияларын сүйемелдейтін саймандық программалық құралдардың пайда болуы жалпы осы
багыттағы жұмыстар түрін жаңа сатыға көтерді.
1980-ші жылдар жеке пайдаланылатын дербес компьютерлердің адам өмірінің эртүрлі салаларына кең араласуымен, программалык жабдықтамаларды пайдаланушылар санының тпұғыл
артуымен сипатталды. Осылардың нәтижесінде қолданушы интефейстерінің жылдам жетіліп, программалық жабдықгамалар
сапасы деген тұжырымдаманың туындауына экелді. Программау технологияларының жаңа талаптарына жауап бере алатын
программалау тілдері (мысалы, Ада) жасалды. Программалау
жабдықтамаларын спецификациялау тәсілдері мен тілдері дамыды. Алдыңгы қатарға объектіге багытталган программалар жасау
тәсілдері шықты. Компьютерлік желілер тұжырымдамасы пайда
болды.
Өткен ғасырдың соңы мен жаңа ғасырдың басында бүкіл
әлемді қамтитын галамтордың кеңеюі арқасында барлық дербес
компьютерлер Интернет желісіне қосылды. Бұл компьютерлікжелілік ақпаратқа қол жеткізуді реттеу үшін мамандар алдына
бірсыпыра тыгыз шешімін табатын мәселерді (технологиялық,
заңнамалық жэне этикалық сипаттагы) қойды. Желі бойынша тасымалданатын компьютердегі ақпаратты қорғау өзекті мәселеге
айналды, программалық жабдықтамалар жасайтын компьютерлік
технологиялар (CASE-технология) дамытылып, программалар
спецификацияларымен тыгыз байланысты сауалдар туындады.
34
Соньгмен, қоғамды толық ақпараттандыру мен компьютерлендірудің шешуші кезеңі басталды.
Бақылау сүрақтары
1. Программалау технологиясы деген не? Оның программалаудан
айырмагиылыгы.
2. Құрылымдық программалау жэне оныц парадигмасы.
3. Жүйелерді декомпозициялау деген не?
4. Модуль, модульдік программалау ұгымдары жэне оның парадиг­
масы.
5. Мэліметтерді абстракциялау жэне оныц парадигмасы.
6. Обьектіге багытталган программалау технологиясы түсінігі.
7. ОБП технологшсының негізгі сипаттамалары.
8. Инкапсуляция түсінігі.
9. Мұралау деген не?
10. Полиморфизм ұгымы.
11. Программалау технологияларының даму кезецдері. Олардыц
ерекіиеліктері.
12. Қазіргі программалу тілдерінің ерекіиеліктері.
35
I
4. МӘЛІМЕТТЕРДІ ӨНДЕУ ПРОЦЕСІН АЛГОРИТМДЕУ
4.1 Негізгі түсініктер мен анықтамалар
Алгоритмдеу —есепті шыгару алгоритмін құрастыру процесі, мұның нэтижесінде мәліметтерді өңдеу процесінің кезеңдері
айқындалады да, кезеңдер мазмұны формальды (жасанды) түрде
жазылып, солардың орындалу реттілігі анықталады.
Алгоритм - бастапқы айнымалы түрде берілген мәліметтерден
қажетті нәтижеге қол жеткізу жолында атқарылатын есептеу
процесін анықтайтын дэлме-дэл нұсқаулар жиыны.
Алгоритм касиеттері:
1. детерминділік (анықтылық, бір мэнділік) - басқаша түсінуге жол оермеи, тек қана көрсетілген эрекеттерді аиқын түрде
орындауға арналған нұсқаулар дәлдігі;
2. дискреттілік - есептеу процесін жекеленген қарапайым
операцияларға бөлу қасиетінің болуы, яғни күрделі есепті атқарылуына күдік келтіруге болмайтын шағын бөліктерге жіктеу
мүмкіндігінің болуы;
3. нәтижелілік - белгілі бір әрекеттер саны атқарылған соң,
процестщ қажетті нэтижесін алып, оны аяқтау мүмкіндігінің
болуы немесе есептеу процесін ары қарай жалғастыруға болмайтындығы жайлы мэлімет алу;
4.
жалпылық — алгоритмнің осы сияқты көптеген басқа да
есептерге қолданылу мүмкіндігінің болуы
Алгоритмдік тіл - алгоритмдерді жазуға арналған символдар мен сол символдардан тұратын конструкцияларды құрастыру
және түсіндіру ережелерінің жиыны.
Программалау тілі компьютерлерде программаларды орын­
дау ісін атқарады.
Программа - машинага түсінікті түрде жазылған алго­
ритм. Программада берілген мәліметтердің сипаттамаларымен
бірге оларды өңдейтін командалар болады. Командалар кандай
мэліметтер қандай операцияларга қатынасатынын, олар қандай
реттілікпен орындалатынын жэне нәтиженің қандай түрде
шыгарылатынын көрсетеді. Бұлар операторлар арқылы жүзеге
асырыл ады.
36
Мэліметтер - бслгілі бір процесс көмегімен тасымалдап,
өвдеуге болатын, формальды түрде бейнеленген фактілер мен
идеялар.
Айнымалы — программа орындалуы барысында өз мәнін
өзгерте алатын ціама.
Оператор - операциялар мен мәндерді кәрсететін немесе
солардың элементтерінің қай жерде орналасқанын білдіретін
симвсшдар жиыны. Мысалы:
a = b + с; // а, b, с - айнымалылар;
к * 2;
if (t<0)...
Алгоритмдеу мен программалаудың заттық негізі болып
(компьютерде шығару мақсатында) программаларды құрастыру
гәсілдері мен кұралдары саналады. Программалар құру үшін программалау жүиелері паидаланылады.
Программалау жүйесі - программалауды автоматтандыру
құралдары. Олар программалау тілінен, осы тілдің трансляторынан, құжаттамаларынан жэне де программаларды даиындау, әрі
орындау кұрал дары нан тұрады.
Транслятор - бір тілді екінші тілге аудару программасы. Ол
интерпретатор жэне компилятор сиякты екі топка бөлінеді.
Интерпретатор - бүл командаларды аударып, оларды бірден
орындауга арналган трансляторлык программа.
Компилятор - бұл алгоритмдік тілдің конструкцияларын
толыгымен машиналык кодка түрлендіретін программа. Есептің
нэтижесін алу үшін машиналык кодты орындау керек.
4.2 Компьютерде есеп шығару кезецдері
Компьютерде есеп шыгару күрделі процесс болып есептеледі,
ол томендегі кезеңдерден түрады:
1. Берілген есепті математикалық түрде орнектеу, ягни есепті
мэселе ретінде коя білу.
тәсілдерін
аныктау.
алгоритм түрінде
программасын
4
кателерін түзету.
37
5. Есепке керекті мәліметтер дайындау.
6. Компьютерде есепті шығару және шыққан нәтижені іс
жүзінде қолдану.
-Ф'‘ ^*
Берілген есепті математикалык түрде өрнектеу дегеніміз есептің берілген мэндерін математикалық таңбаларды қолданып
жаза білу жэне керекті математикалық формулаларды анықтау
болып саналады.
■х *
Күрделі формулаларды, теңцеулерді арифметикалық амалдар
тізбегіне айналдыру есепті шығарудьщ сандық тәсілдерін табу
немесе анықгау жолы болып есептеледі. Қазіргі кезде барлық
есептердің шығару жолының сандық тэсілдері белгілі десе де болады, тек солардың ішінен өзімізге тиімді жолын таңдап алуымыз
керек. Бұл максатта есепті шығару дэлдігін, нэтижені жылдам
табу мүмкіндігін, мәліметтерді дайындау мен есепті шығарудың
бағасын салыстыра отырып қарастыру қажет.
Есептің алгоритмін жасағанда, оның шығару жолын тізбектелген іс-эрекеттер ретінде схема түрінде өрнектеледі.
Программа жасағанда қазірде кеңінен тараған программа­
лау тілінің бірінде алгоритм нақгы түрде жазылады. Бізде кең
тараган тілдерге - Паскаль, Дельфи, C/C++ жатады. Жазылган
программаның қатесін түзету компьютердің көмегімен шешіледі,
өйткені жіберілген қателерді тек компьютер гана жылдам аңғарып,
түзету мүмкіндігін береді.
Есепті шыгаруга керекті деректерді сұрыпталган күйінде алдын ала қагазга, эйтпесе магниттік дискіге жазып, компьютердің
жадына реттей отырып енгіземіз. Есептің нэтижесін алган соң
шешім қабылдау жэне оны іс жүзінде қолдану —мамандардың
жұмысы. Тек солар гана белгілі бір шешім қабылдай алады. Бірақ
оқып-үйрену барысында кездесетін, ягни студенттерге арналган
есептерде жогарыда корсетілген сатьшардың бірсыпырасы болмайды, өйткені олар бірден формула күйінде беріледі, шығарудың
сандық тэсілі формулада айқын көрініп тұрады (интеграл, туынды болмаса) да, нэтижені алган соң, оны жазып алу жеткілікті
болып табылады. Мәселені шешудің немесе есеп шыгарудың
көрсетілген алты сатысы күрделі ондірістік есептерде, дипломдық
немесе курстық жұмыстарда жиі кездеседі.
38
4.3 Алгоритмдерді бейнелеу тәсілдері
Алгоритмдерді бейнелеудің негізгі тэсілдеріне оларды жазудың келесіден түрлері жатады:
• табиғи тіл сөздері арқылы;
• формулалық-сөздік тәсіл арқылы;
• графикалық түрде бейнелейтін блок-схемалар арқылы;
• псевдокодтар (жалған кодтар) арқылы;
• программалау тілі арқылы.
Алгоритмдерді табиғи тіл сөздері арқылы бейнелеуде есептеу кезеңдері мазмұны кез келген түрде табиғи тілде жазылады.
Осы тэсілмен келесі мысалдың алгоритмін жазып шығайық.
4.1
-мысал.Сандар жиымы (массиві) берілген делік. Осы жиым
сандарының көрсетілген аралықта, яғни интервалда толығынан
жататынын немесе жатпайтынын тексеру керек. Интервал өзінің
шекаралық А жэне В мәндерімен берілген.
I
1. Бірінші санды аламыз.
2. Осы сан А-дан В-ға дейінгі интервалға кіретінін салыстыру жолымен тексереміз; егер жауабы "Иә" бол­
са, онда 3-пунктке көшу, әйтпесе (жауабы - "Жоқ"
болса) - 6-пунктке көшу.
3. Жиымның барлық элементтері қарастырылды ма?
Егер жауабы "Иә" болса, онда 5-пунктке көшу, жау­
абы "Жоқ" болса, - 4-пунктке көшу.
4. Келесі элементті қарастырамыз. 2-пунктке көшу.
5. Мынадай хабарлама шығару: барлық элементтер
осы интервалға кіреді. 7-пунктке көшу.
6. Мынадай хабарлама шығару: элементтер интервалға
толығынан кірмейді.
7. Соңы.
Бұл тәсілде көрнекілік жок, яғни толық формальдау мүмкіндігі
жоқ.
Алгоритмдерді формулалық-сөздік тәсіл арқылы бейнеленуі - тапсьфманың математикалық символдар мен өрнектердің жэне сөздердің араласуымен берілуі болып табылады.
39
I
4.2
мысал. Үшбұрыш ауданын оның берілген (a, b, с) үш
қабырғасының ұзындығы арқылы есептеу алгоритмін Герон формуласы арқылы кұру керек болсын делік. Мұны былай көрсете
аламыз.
1. үшбұрыштың жарты периметрін есептеу р=(а+Ь+с)/2\
2. үшбұрыштың ауданын есептеу
s =
у ір (
Р - а ) ( р -
Ъ)( р - с ) ;
3. нәтиже ретінде S мэнін шығарып, алгоритм жұмысын
аяқтау.
Бұл тэсілді пайдаланғанда, алгоритмді кез келген деңгейде
айқындап көрсетуге болады, бірақ формальды түрде анық бейнелеу қиын.
Алгоритмді графикалық түрде блок-схемалар арқылы
көрсету - оның логикалық қүрылымын графикалық түрде бейнелеу болып саналады. Мұнда мэліметтерді өндеудің эрбір кезеңі
ын операцияға сәйкес эртүрлі геометриялық фигуралар
(блоктар)
алгоритм блоктармен
бұрыштар түріндегі фигуралармен орнектеледі. Әр блоктың
ішіне орындалатын іс-әрекеттің (амалдың) мазмүны жазылады.
Символдардың (блоктардың) бір кіру және бір шыгу сызықтары
болуга тиіс.
4,1 кесте. Алгоритмдерді бейнелеу блоктары
Іс-әрекет аты
Блоктың пішімі
Процесс
Атқаратын жұмысы
Математикалық
өрнектерді есептеу
Басы - соңы
Алгоритмдерді
бастау, аяқтау
40
Алдын ала
аныкталған процесс
(ішкі программа)
Қосалқы
программаларға
кіру жэне шығу
Шешім
Есеп шығару
жолын таңдау
Мәліметтерді
енгізу және
шығару
Енгізу-шығару
Нәтижені
баспаға (қағазға)
шығару
Схеманы,
формулаларды
түсіндіру
Түсініктеме
41
4.1-мысалды графикалық тәсілмен орындау келесі 4.1-суретте бейнеленген.
Ж алған кодтар (псевдокодтар) - нақты программалау
тілінің синтаксистік ерекшеліктерін есепке алмай, тек формальды түрде программа логикасын бейнелеуге мүмкіндік береді.
Бұл тэсіл программалау тілінің операторлары мен табиғи тіл
сөздерінің араласуы арқылы құрастырылып, блок-схема орнына
пайдалануға болатын программа логикасын бейнелеу құралы больга табылады.
Алдыңгы 4.1 мысалдағы алгоритмді псевдокод арқылы былай
жазуға болады:
42
Бірінші элементті тандаймыз ( і
1)
IF A > х. немесе х. > В THEN
хабарлама шығару жэне алгоритм соңына көшу
'
ELSE
келесі элементке көшу ( / : = / + 1 )
IF жиым біткен жоқ (і < N) THEN
интервалды тексеруге көшу
I
ELSE
интервалға элементтер толық кіретіні жайлы хабарлама шығару
Соңы
Ал қарапайым алгоритмдік тіл деп аталып, алгоритмді про­
граммалау тілінің терминдерін қазақ (орыс) тілінде жазу арқылы
да өрнектеу жалган кодтар арцылы жазу сияқты алгоритмді
компьютерге дейін жазу үшін кеңінен қолданылып жүр. Мұны
олардың ағылшын тіліне негізделіл жасалған программалау
тілдеріне жақындыгымен түсіндіруге болады.
4.3
мысал. Z = ax2+bx+cos(ax2+b)-tg(ax2+b) функциясының
мәнін есептеп шығару алгоритмін жасау керек болсын делік.
Мұнда алдымен а, Ь, х нақгы мэндерін енгізіп, жақшада тұрған
ах2+Ь өрнегін есептеп алу керек, соңынан Z функциясының мэні
нәтиже ретінде шығарылуы тиіс.
алг Z функциясын есептеу
нак а, Ь, х, t, z
арг a, b, х
нэт z
басы
а, b, х енгізу
t := ах2 + b
z := t+cost-tgt
х, z шыгару
СОНЫ
Программалау тілдері — программаларды компьютерде тікелей орындауға арналган алгоритмдерді жазу тэсілі. Програм­
ма - алгоритмнің компьютерге түсінікті түрде жазылуы.
43
V
Әрбір машинаның өз тілі (машиналық тіл) болады жэне
ол тек осы тілдегі программаларды, яғни командалар тізбегін
орындай алады. Программаларды машиналық тілде жазу оте
күрделі, эрі адамды шаршататын жұмыс болып табылады. Прораммалаушылардың жүмыс өнімділігін арттыру мақсатында
жасанды тілдер, ягни программалау тілдері қолданылады.
Мұндайда жасанды тілде жазылган программа машиналық
тілге аударылуы тиіс. Аудару жұмысын, ягни программаны бір
тілден екінші тілге түрлендіру ісін транслятор атқарады. Жиі
қолданылатын, тікелей интерпретация жасайтын транслятор түріне Бейсик тілінің трансляторы жатады, ол командаларды аударады да, оны бірден орындайды. Мұндай транслятор жұмысының
қорытындысы қажетті нэтижелерді алу болып табылады.
Паскаль, C/C++ тілдерінің трансляторы —компилятор түрінде
болады. Мұнда бастапқы жазылган программа мэтіні машина
тшіне аударылады да, объектілік модуль деп аталатын програм­
ма коды шыгарылады. Сонан соң объектілік модуль программа
аралъщ байланыс редакторы деп аталатын программа арқылы
өнделгеннен кейін барып қана жұмыс істеуге дайын болады.
4.4 Алгоритмдердің негізгі канондық қүрылымдары
Программалаудың ең негізгі эрі күрделі кезеңі алгоритм құру
болып табылады. Программалауцы үйретудің басьгада алгоритмді
тілдермен байланыстырмай, блок-схема немесе псевдокод тэрізді
тэсілдермен құруды түсіндіру керек. Осындай "таза" алгоритмдеу
жолын меңгерген студенттер кейін программалау тіліне оңай
көшеді. Бұл тарауда алгоритмдерді блок-схема немесе алгоритм
схемасын кұру арқылы құру негіздері қарастырылады.
Программалау теориясында кез келген күрделі есептің шыгару жолын, ягни кез келген программаны төмендегідей үш түрлі
басқару құрылымын пайдалану арқылы жазып шыгуга болатындыгы дэлелденген:
• сызықтық құрылым немесе операторлар тізбегі;
I тармақты құрылым немесе шартты оператор;
• қайталау немесе циклдік оператор.
Осындай канондық кұрылымдардан тұратын программа­
ны регулярлық программа деп атайды, олардың бір гана кіру
нүктесі мен бір ғана шыгу нүктесі болады. Дәл осы үш құры44
лым құрылымдық программалаудың базалық конструкциялары
деп аталады. Программадағы кез келген операторды оның кіру
нүктесі арқылы тауып орындауға болады (осы тәсілмен табылмайтын операторлар жэне шексіз циклдер болмауы тиіс). Мұндай
программаны басқару ісі жоғарыдан томен қарай жүргізіледі.
Түсініктеме мэтін (комментарий) қосылған осындай программа­
лар оқуға жэне түсінуге жеңіл болып есептеледі.
if Р then А ;
if P A ;
a) сызыктык
кұрылым
(Паскаль, Бейсик тілдерінде)
(C/C++ тілдерінде)
э) толык тармакты
құрылым
б) толымсыз тармакты
құрылым
сурет. Алгоритмдерді бейнелеудің канондық құрылымдары
1) сызықтық күрылым (4.2 а сурет), ол программалау тілдері арқылы былай жазылады:
А; В; (Паскаль, C/C++тілдерінде)
мұндагы А жэне В әрекеттері мыналардың бірі болуы тиіс:
• кез келген жеке оператор;
• белгілі бір функцияны шақырып, одан кері оралу;
• басқа бір басқару құрылымы.
2) тармақты құрылым (4.2 э сурет), программалау тілдерінде
былай жазылады:
if Р then A else В; (Паскаль тілінде)
if P A; else B; (C/C++ тілдерінде)
Р-ны тексеру предикат болып табылады, ягни ол мәні ақиқат
(true) немесе жалган (false) бола алатын логикалық орнектен не­
месе шарттан тұратын болады. Бұл құрылым толымсыз (қысқаша)
түрде болуы мүмкін, онда логикалық өрнектің мэні жалган
болганда ешқандай эрекет орындалмайды. Мұндай құрылым түрі
төменде көрсетілген (4.2 б сурет), ал программалау тілдерінде:
if Р then А ; (Паскаль тілінде)
if Р A; (C/C++ тілдерінде)
45
I
И
I
Енді циклдік кұрылымдарды қарастырайы қ, олар алгоритмнің
белгілі бір бөлігін бірнеше рет қайталау ісін жүзеге асырады.
Циклдік алгоритмдердің бірнеше түрі бар.
а) «әзірше» циклдік
кұрылымы
э) «дейін» циклдік
құрылымы
6) таңдау тармакты
құрылымы
Алгоритмдерді бейнелеудің циклдік және таңдау құрылымдары
3) қайталау - "әз
циклі (4.3 а сурет)
while Р do A ;
скаль. C/C++ тілл
Мұнда А эрекеті Р предикат мэні ақиқат болып тұрса, қайталана
береді. Сондықтан А эрекеті орындалуы кезінде Р-ға эсер ететін
айнымалылар мәні өзгеруі тиіс. Бұлай болмаған жағдайда шексіз
цикл орын алады. Предикат мэні А әрекетіие дейін анықгалады,
^ эрекеті бір де бір рет орындалмауы да мүмкін.
қайталау - "деі
циклі (4.3 э сурет)
repeat A until Р;
(Паскаль тілінде)
do A while P;
(C/C++ тілдерінде)
Мүндағы қаиталау кем дегенде бір рет орындалады, өйткені
шарт А әрекетінен кейін тексеріледі. А эрекеті предикат мәні
жалған болған кезде орындалмайтын болады.
4)
таңдау - switch (case) ауыстырғыш (көп тармақты)
кұрылымы программалауды жеңілдететіи мүмкіндік болып таТаңдау кұрылымы біриеше мүмкіндіктердің
ал
граммалау
Паскаль тілінде:
C/C++
case Р of
switch (P)
А: операторлар;
{ case А: операторлар; break;
В: операторлар;
case В: операторлар; break
• • •
N: операторлар;
end;
case N: операторлар; break
N әрекеттерінің бірі орындалады
орналасқан құрылымдар
46
4.5 Қарапайым алгоритмдер кұру
Күрделі алгоритмдерді құру үшін қарапайым канондық
(бірыңғайланған) алгоритмдік кұрылымдар қолданылады. Олар
сызықтық, тармақталу жэне цикл құрылымдарынан тұрады.
Программалау теориясында кез келген күрделі программаны осы үш түрлі құрылымнан құрастыруға болатыны дэлелденген.
Негізгі конструкцияларды пайдалану мақсаты - қарапайым
кұрылымды программа алу болып саналады. Мұндай программа­
лар оңай оқылады, түзетіледі жэне керек болса, оңай өзгертіледі.
1.
Сызықтық қүрылымды алгоритм немесе қарапайым
сызықтық алгоритм іс-әрекеттердің орындалу ретіне қарай тізбектеле орналасқан блоктардан тұрады. Амалдардың бұлай бірінен соң бірі реттеліп орындалу тэртібін табиги атқарылу дейді.
4.4 мысал. у = a+b формуласы бойынша у -ті табу керек болсын.
Мұнда формула бойынша есептеу тіктөртбұрыш арқьшы
кескінделетін есептеу блогы (3-блок) арқылы өрнектеліп, нәтижені кагазга басу үшін көпбұрышты құжат алу блогын (4-блок)
пайдаланып, оның ішіне нэтиженің атауларын жазамыз. Осы
көрсетілген у=а+Ь формуласын есептеу үшін а жэне 6-ның
программага
амалын орындап, ақырында^-ті экранга ^қағазға; оасьш шьиарьш,
жұмысты тоқтатамыз. Осы алгоритмнің схемасы 4.4-суретте
көрсетілген, ал оның жанында Паскаль жэне С тіліндегі програм­
масы жазылган. Программа мәтінін кұру жолдарын келесі тарауларда қарастырамыз.
Паскальдағы программа: С тіліндегі программа:
Program Р(input,output);
#include <stdio.h>
var a,b,y: integer;
#include <conio.h>
begin
write(’a, b=');
readln(a,b);
y:= a + b;
^Іе1п('у=',у:6:3);
readln;
end.
а,Ъ енгізү
main()
{
int a,b,y;
printf("a, b =");
scanf("%i%i",&a,&b);
у = a + b;
printf("y = %i", y);
getch();
}
47
СОҢЫ
4.4-сурет. Алгоритм
схемасы
И
2.
Тармақталу алгоритмдері. Тұрмыста кездесетін алгоритмдер эр түрлі болып келеді. Олардың жиі кездесетін түріне алгоритмнің белгілі бір шарттың орындалуына немесе орындалмауына байланысты тармақталып бірнеше жолдарға бөлінуі жатады.
Тармақталу алгоритмінің құрылымы қарапайым болып келеді. Мұнда арифметикалық теңсіздік (теңдік) түрінде берілген
логикалық шарт тексеріледі. Егер ол орындалса, онда алгоритм
бір жолмен, ал орындалмаса екінші жолмен жүзеге асырылады,
яғни есепті шығару жолы тармақталып екіге бөлініп кетеді. Тармақталу алгоритмдеріне шартты тексеру блогы міндеггі түрде
кіреді. Ол ромб түрінде кескінделіп, басқа блоктармен 1 кіру жэне
2 шығу сызықтары арқылы байланысады. Көбінесе тармақталу алгоритмдері екі түрде кездеседі, олар жогарыда көрсетілген
канондық кұрылымдардың толымды жэне толымсыз түрлеріне
сәйкес келеді де, "таңдау" жэне "аттап оту" мүмкіндіктерін іске
асыруга комектеседі.
"Таңцау" жолымен тармақталуда берілген шарт тексеріледі
(4.5-сурет), егер шарт орындалса (шарт ақиқат - true болса), онда
2-амал орындалып, содан кейін келесі 3-амалға көшеміз. Ал, егерде шарт орындалмаса (орындалу мүмкіндігі жалган - false болса),
онда 1-амал атқарылып, сонан соң 3-амал атқарьшады.
4-5 -сурет. Таңдау" алгоритмі
4.6-сурет. "Аттап өту" алгоритмі
"Аттап оту" (4.6-сурет) алгоритмінде шарт орындалса, 1-амалды аттап өтіп, бірден 2-амалды, содан кейін 3-амалды орын48
даймыз. Ал шарт жалған
болса, онда 1-амал міндетті
түрде орындалып, одан
х енпзу
кейін 2- жэне 3-амалдар жүзеге асырылады. Тармақталу
жок
кезеңінде шартты тексеру
блогы орындалуы барысында, алгоритмнің екі мүмкіндігінің тек біреуі ғана
таңдап алынып жүзеге асы­
рылады да, ал екінші таңдап
алынбаған тармақ біріктіру
нүктесіне деиін орындалмаи
соны
қалады. Енді осыған нақты
мысалдар келтіреиік.
4.7-сурет. Тармақталу алгоритмі
4.5-мысал. у функциясын
төмендегі формула бойынша есептеп шығарайық
yfx + X, X >О
У
х 2 +1, х< О
Мұнда х айнымалысының таңбасына (оң, теріс) байланысты
не жоғарғы, не төменгі формуланы таңдап алып, сол арқылы у
функциясының мэнін табамыз (4.7 сурет). 2-блоктың орындалу
барысында х айнымалысына белгілі бір мэн беріледі де, ол мэн
енгізу операторлары арқылы программаға енгізілуі тиіс. Бұдан
кеиін енгізілген мэннщ оң немесе теріс екендігі үшінші шартты
тексеру блогы арқылы айқындалады. Шарттың "ақиқат" (иә) не­
месе "жалған" (жоқ) болуына байланысты 4- не 5-блоктардың
бірі ғана орындалып, "тандау" орындалады. 6-блок х айнымалысының жэне у функциясының сандық мәндерін экранға немесе
қағазға басып шығарады.
3.
Циклдік алгоритмдер. Математикада, экономикада көптеген есептерді шығару кезеңінде бір тендеуді пайдаланып,
ондағы айнымалының өзгеруіне байланысты оны бірнеше рет
қайталап есептеуге тура келетін сэттер де жиі кездеседі. Осындай қайталап орындалатын есептеу процесінің белгілі бір бөлік4-1660
49
\
Г8 —L .......1
1 соны
1
Қарапайым
циклдік алгоритм
4.9-сурет. Модификаторлы
циклдік алгоритм
терін цикл деп атайды. Осы бірнеше рет кайталанатын бөлігі бар
алгоритмдер тобы циклдік алгоритмдерге жатады. Циклдік алгоритмдерді пайдалану оларды кейіннен
программаларда цикл операторы түрінде қысқартып жазу мүмкіндігін
береді. Циклдер қайталану санының алдын ала белгілі жэне белгісіз
болуына байланысты екі топқа бөлінеді. Қайталану сандары алдын
ала белгілі болып келген циклдер
тобы арифметикалық цикл болып
есептеледі, ал орындалу саны оелпсіз циклдер - қадамдық (итерация)
цикл болып аталады.
Практикада белгілі бір айнымалының сандык мәніне байланысты
орындалатын арифметикалык цикл­
дер жиі кездеседі. Мұнда арифме­
тикалык прогрессияға ұксас болып
келетін циклдер ең карапайым ариф­
метикалык цикл болып табылады.
Оны баскару кайталану кезеңінде прогрессияның заңына сәйкес
тұрақты шамага өзгеріп отыратын
цикл параметрінің сандық мәнімен
байланысты болуы тиіс.
Цикл орындалуы алдында оның
айнымалы аргументі - параметрі (дг)
алғашқы мэнге (дгО) ие болуы керек,
сонан кейін кайталану кеэеңінде
цикл параметрі белгілі бір шамага
{dx кадамга) өзгере отырып, ол ал­
дын ала берілген ең соңғы мэнге (хк)
дейін жетуі кажет.
Алгоритмнің орындалу барысы50
нда цикл параметрі, мысалы, jc өзінің ең алғашқы хО мэнінен ең
соңғы хк мәніне дейін тұрақты шамаға (dx) өзгеріп отырады. Осының нәтижесінде х мынадай мәндерді қабылдайды: jcO, xO+dx,
хО+2dx,..., хО+(п-\)dx, хк, мұндағы п - циклдің қайталану саны,
ол былай анықталады:
п
хк-хО
dx
мұнда [...] - өрнектің бүтін бөлігі алынатынын көрсетеді, п циклдің қайталану саны әркашанда бүтін натурал сан болуы тиіс,
егер ол аралас сан болса, онда оның бөлшегі алынып тасталады.
Арифметикалық цикл үшін y=f(x) функциясының есептелу
жолы алгоритм ретінде 4.8-суретте көрсетілген. Мұндағы 3-ші,
4-ші, 7-блоктар циклді ұйымдастыру үшін қажет. Олар цикл параметрініц алғашқы мэиін, өзгеру кадамын белгілеп жэне оныц ец
соңғы мәніне жеткен-жетпегенін тексереді. Ал 5- жэне 6-блоктар
бірнеше рет қайталанып циклдіц өзін құрайды. 4-блок шартты
тексеріп қаиталану процесін ұиымдастырады.
Алгоритм схемасын салуды жэне программаны жазуды жеңілдету үшін цикл алгоритмдері ықшамдалған түрде "модификатор"
немесе "цикл басы" блогын пайдалану арқылы жазылады. Онда
4.8-суретте көрсетілген 3-ші, 4-ші, 7-блоктардың орнына "цикл
басы" блогы орналасады.
Ол алтыбұрыш тэрізді геометриялық фигурадан тұрады жэне
оныц міндетті түрде екі кіру жэне екі шығу сызығы болуға тиіс.
Осы блокты пайдалану арқылы жогарыда келтірілген алгоритм
4.9-суретте корсетілген түрде кескінделеді. Параметрдің алғашқы
х0 мэні оның соцгы хк мэнінен кем болса, онда оныц қадамы dx
параметрдщ алгашқы
артық
4.
Қадамдық циклдер. Циклді орындаудың алдында, оның
қайталану саны белгісіз болган жагдайда қадамдық циклдер
пайдаланылады. Мұнда циклді жазу үшін тек "шартты тексеру"
блогын қолдану қажет, ол циклді аяқтау үшін белгілі бір шарт­
ты тексереді. Қадамдық циклдердің схемасын сызғанда модификаторды (алтыбұрышты) қолдана алмаймыз, себебі алдын
ала циклдін неше рет кайталанатыны белгісіз. Енді осындай
мысал
51
1
басы
4.6 мысал. z
х-n енпзу
___________________________________________1
-
з
_________________________________________________________________________________
~
1
L
г
-
-
4
1
=
№
k
,
z
С
^
1
•
6
+
Г
‘
•
«
I
I
k
•
.
7
>
]
0
'
4
2
к
функциясыньщ
мэндерін
к
1, 2, 3, ... жэне Z
0.0001-ден артық болған жағдайда
есептейік, мұндағы 0 < х < 1. Бұл
мысалда алдын ала цикл неше рет
қаиталанатынын аита алмаимыз, өиткені бізде тек к параметрінің алғашқы мэні мен қадамы ғана белгілі.
Сонымен қатар Z функциясының
0.0001-ден артық болуы циклді
қайталау шарты болып есептеледі
(Z > 0.0001). 4.10-суретте осы есептің
алгоритм схемасы көрсетілген.
-
к
к
и
ә
4.6 Программалау тілдері
жоқ
Алгоритмдерді компьютерге түсісоңы
нікті мэтін ретінде жазуға арналған
қарапаиым жасанды тіл программалау
4.10-сурет. Қадамдық
тілдері деп аталады. Әрбір компьюцикл алгоритмі
тердің өзінің машиналық программа­
лау тілі болады, оны командалар тілі
немесе кодтар (арнайы таңбалау) тілі дейді. Компьютер тек өз
тілінде, ягни машиналық тілде жазылган программаларды гана
орындай алады. Алайда, машина тілінде программа жазу күрделі
жұмыс, өйткені ол тек екілік (он алтылық) жүйедегі кодтардан
тұрады жэне эр машинада эр түрлі машиналық тіл қолданылады.
Программа жазуды жеңілдету үшін математикалық формулаларды кеңінен қолданатын, агылшын тілінің негізінде жасалган алгоритмдік тілдер Бейсик, Паскаль, Фортран, С, C++, т.б.
кеңінен қолданылады. Алгоритмдік немесе программалау тілі жазу ережелері қарапайым жасанды тіл. Оның машина тілдерінен айырмашылыгы - табиги агылшын тілі негізге алынып, кең
тараган математикалық таңбалармен толықтырылып жасалган.
Сондықтан алгоритмдік тілдерде программа жасау адамдарга эрі
жеңіл, эрі ыңғайлы болып келеді. Алгоритмдік тілдер автоматты
К
52
-
*
түрде компьютердщ көмегімен аудармашы программалар арқылы
машиналық тілге көшіріледі.
Алгоритмдік тілді машина тіліне тікелей аударатын үлкен
программаларды транслятор болып табылады. Алгоритмдік тілдерді паидалану программалауды жеңілдете отырып, компьютерде есеп шығару процесін оңаилатады, алаида онда есеп шығару
уақыты аздап көбейеді.
Алгоритмдік тілдер машинага жэне проблемага багытталган
болып екіге бөлінеді. Машинаға бағытталған тілдердің машина
тілінен айырмашылығы, олар компьютердің ерекшеліктерін есепке ала отырып әріптерді де пайдаланады. Қазіргі кезде машинаға
бағытталған тілдерде маман программалаушылар жұмыс істейді.
Оларға автокод, макроассемблер, ассемблер тэрізді тілдер жатады.
Проблемаға бағытталған тілдер шығарылатын есептердің
ерекшеліктерін еске ала отырып, есептің математикада жазылу
тіліне жақындастырылады. Бұларға - Бейсик, Фортран, Паскаль,
C/C++, т.с.с. тілдер жатады.
Қазіргі кезде бес жүзге жуық алгоритмдік тілдер тараған.
Олардың әрқайсысы белгілі бір мақсаттарда қолданылады. Мысалы, Фортран - ғылыми-техникалық (инженерлік) есептерді
шығару үшін, Паскаль - оқып үйренуде, ал C/C++ тілі үйрену
үшін де, өндірістік есептерде де, операциялық жүиелер жазу үшін
де қолданыла беретін кең қолданыстағы тіл болып табылады.
Әр түрлі процессорлар типтерінің машиналық командалары
да эр түрлі болады. Егер программалау тілі нақты бір процессор ТИП1НЩ ерекшеліктерін есепке ала отырып жұмыс істеитін
болса, онда ол төменгі деңгейдегі программмалау тілі деп аталады. Ең төменгі деңгейдегі программалау тілі ассемблер болып
саналады, ол машиналық кодтың эрбір командасын мнемоника
деп аталатын арнайы символдық белгілермен жазып шыгады.
Төменгі деңгейдегі программалау тілдері көмегімен өте тиімді
жэне ықшам программалар жасалады, мұнда программалаушы
процессордың барлық мүмкіндіктерін толық пайдалана ала­
ды. Процессорлардың эр түрлі модельдерінің өз ассемблерлері
болатындықтан, мұнда жазылган программа тек осы ортада гана
53
орындалуы тшс. Сондықтан мұндай тілдер шағын жүйелік про­
граммалар мен драйверлер жазуға ыңғайлы болып табылады.
Жоғары деңгейдегі программалау тілдері нақты бір компьютерлік архитектура ерекшеліктерін есепке алмай жұмыс істейді,
сондықтан олар процессорға сэйкес транслятор жазылған басқа
компьютерлерге оңай кошіріледі. Жогары деңгейдегі програм­
малау тілдерінде программа жазу машиналык тілдерге қараганда
анагұрлым жеңіл.
Жогары деңгейдегі программалау тілдері:
1. Фортран - өткен гасырдың 50-ші жылдары жасалган, ма­
шиналык тілге компилятор арқылы аударылатын алгашқы тіл.
Мұнда программалаудың бірсыпыра маңызды түсініктері жүзеге асырылган еді. Осы тілде статистикалық есептерге арнал­
ган қарапайым кешендерден бастап, жер серіктерін басқаруга
арналган есептерге дейін көптеген кітапханалық программалар
жасалган болатын, сондықтан ол көптеген мекемелерде осы кезге
дейін пайдаланылып келеді.
2. Кобол —өткен гасырдың 60-шы жылдары басында жасал­
ган, экономикалық есептер шыгаруца қолданьшатын, машина­
лык тілге компилятор арқылы аударылатын тіл. Коболда сыртқы
мәлімет сақтау құрылғыларында сақталатын көлемді мэліметтерді оңцеудің қуатты мүмкіндіктері жүзеге асырылды.
3. Паскаль - өткен гасырдың 70-ші жылдары аягында швейцар
математигі Никлаус Вирттің программалауды үйрету мақсатында
қолдану үшін арнайы жасаган тілі. Ол адамның алгоритмдік ойлау
қабілетін қалыптастыратын, көпшілікке түсінікті қысқа програм­
ма жазуга қолайлы, алгоритмдеудің негізгі тәсілдерін көрсетуге
жэне де ірі жобаларды да жүзеге асыра алатын тіл болды.
4. Бейсик (Basic) - бұл да өткен гасырдың 60-шы жылдары
программалауды үйренушілерге арналып жасалган қарапайым
тіл болды. Бұган да арнайы компиляторлар мен интерпретаторл ар
жасалып, ол көпшілікке кең тараган, игеруге жеңіл программалау
тілдерінің бірі болды.
5. С - 1970-ші жылдары шықты, ол алдымен көпшілікке ар­
налып жасалмаган тіл еді. С тілі нақты процессорга тәуелді емес,
қыска, эрі тиімді программалар жасайтын ассемблер орнына
пайдалану үшін жоспарланган тіл болатын. С тілінің көптеген
54
қасиеттері Паскаль тіліне ұқсас болғанымен, оның компьютер
жадымен тікелей ясұмыс істей алатын жаңа мүмкіндіктері бар еді.
Осы тілде көптеген қолданбалы жэне жүйелік программалармен
қатар Unix операциялық жүйесі де жазылып шыққан болатын.
6. C++ - объектіге бағытталған С тілінің кеңейтілген түрі, оны
1980 ж. Бьярн Страуструп жасап шығарды.
7. Java тілін 1990-шы жылдары басында C++ тілін негізге
ала отырып, Sun компаниясы шығарды. Ол C++ тілінен төменгі
деңгейдегі мүмкіндіктерді алып тастап, қолданбалы програм­
малар жасауцы оңайлату мақсатында жасалды. Тілдің басты
ерекшелігі - оның машиналық кодқа түрленбей, бірден платформалы-тәуелсіз байт-кодқа (эр команда бір байт орын алады)
түрленуі болды. Осындай код виртуалды Java-машина (JVM) ин­
терпретаторы көмегімен орындалады.
8. C# ("Си-шарп" деп айтылады) тілін Microsoft компаниясының маманы Андерс Хейлзберг (Anders Hejlsberg) жаңа
объектіге багытталган программалау тілі ретінде С, C++, Java,
Паскаль тілдерінің негізінде жасап шыгарган. C# тілі Microsoft
фирмасының .NET (дот-нет) архитектурасы үшін программалар
жазуга арналган тілі. .NET - программалау технологиясындагы
жаңа платформа, ол желіге қосылган компьютерлерге арналып
жасапган. Бұл технология Visual Studio.NET деп аталады да,
оның жұмыс ортасында Visual Basic, басқарылатын C++ жэне C#
тілдерінде программалар жасау қарастырылган, бірак ол осылармен ғана шектеліп қалмайды. C# тілінің мүмкіндігі Java тілімен
қатарлас, осы екі тіл қазіргі алдыңгы қатарлы технологияларга
жатады.
Бақылау сұрақтары
1. Алгоритм жэне алгоритмдеу ұгымдары.
2. Кампъютерде орындалатын алгоритмдердің қандай қасиеттері
балады?
3.
Алгоритм мен программаның қандай үңсастықтары мен айырмашылықтары бар?
4. Оператор, айнымалы дегеніміз не? Транслятор, компилятор, ин­
терпретатор ше?
5. Компьютерре есеп шыгару кеэеңдері.
55
6. Алгоритмдерді бейнелеу жолдары. Олардың ерекіиеліктері.
7. Алгоритмдерді графикалық жолмен бейнелеу деген не?
8. Алгоритмдердің негізгі канондық құрылымдары.
9. Алгоритм схемаларыныц эр түрлі блоктары, олардың бейнеленуі,
байланыстары.
10. Сызықтьщ, тармақталу жэне циклдік алгоритмдер.
11. Қадамдық циклдер жэне олардың ерекигеліктері.
12. Программалау тілдерінің түрлері, кең таралган тілдерге қандай
тілдер жатады ?
Тапсырмалар
1. Берілген формулалар бойынша арифметикалық өрнектерді есептейтін алгоритмдердің блок-схемаларын сызып шығыңдар:
1
+ yjx + l;
х —\
а)
э) у=( 5х2-4)( хг+7);
б) и = sin3—cosx2 + е^“х:
5
5х2+6, егер х < 5;
в> f ( x )
х 3+ 7, егер х > 5;
xtgx —sin х, егер х < 1.5;
х } + sin х, егер 1.5 < х < 2.5;
Зх3+ 5, егер х > 2.5;
Д)
z
1
х —\
+ yj x + 1;
мұнда * айнымалысы 2-ден 5-ке дейін 0,5
қадамымен өзгереді.
е) Нақты а жэне бүтін п сандары берілген
1
а
+
1
а2
+
1
1
ЙІ
2п
а
қосындысын табу алгоритмін құру керек.
ж) s = 1 + 1/2 + 1/3 б ... 1 1 / n I ... қосындысын 0,0001 дэдцігімен
56
2.
3.
4.
5.
6.
7.
8.
табу керек.
Квадрат теңдеуді (ахНЬх+с^Ю; а ^ 0) шеигу алгоритмін түрғызыңдар.
Жазықтықта үш нүкте - А (х1,у1), В(х2,у2) жэне С(х3,у3) берілген:
а) солардан үшбұрыш құруға бола ма? Егер болатын болса, Герон
формуласы бойынша оның ауданын есептеп шығаратын алгоритм
құрыңдар;
ә) бұл үшбұрыш тең кабырғалы немесе тең бүйірлі болатынын
анықтайтын алгоритм кұрыңдар.
1-ден JV-re дейінгі сандардың қосындысын есептейтін алгоритм
қүрыңдар. N- нің мэні енгізіледі.
Пернетакта арқылы 5 сан енгізіңцер. Егер сан 10-нан кем болса,
онда осы санды және оның квадратын табыңдар.
¥зындықтың 1-ден 20 дюймге дейінгі мәндерін сантиметрге
(1 дюйм = 2,54 см) айналдыратын және оны экранға шығаратын
алгоритм құрывдар.
Бүтін х жэне у сандары берілген. Егер екі сан да жұп болса оларға
1-ді косыңыз; егер тек біреуі жұп болса, онда олардың көбейтіндісін
табыңыз; калган жағдайда сандарды өзгеріссіз қалдырыңыз.
Бүтін а, Ь, с, d сандары берілген. Егер a>=b>=c>=d болса, онда
барлык сандарды нөлге теңестіріңіз; егер a<b<c<d болса, онда эр
санды 1-ге өсіріңіз; калган жагдайда эр санды 1-ге кемітіңіз.
57
5. C/C++ ТІЛДЕРІ НЕГІЗДЕРІ
С тілі 1969 - 1973 жылдары арасында АҚШ-та Bell Telephon
Laboratories компаниясының программалаушылары Дэннис Рит­
чи мен Кен Томпсон бастауымен дүниеге келді. Бұл тілдің негізі
Алголдан басталып, Паскаль жэне ПЛ/1 тілдерімен қатар пайда
болды.
',
С тілінің шығуы UNIX операциялық жүйесінде программалаумен тығыз байланысты, өйткені бұл жүйе ассемлерде жэне осы
С тілінде жазылып шыққан болатын. UNIX жұмыс істеу ортасы
С тілін жүйелік программалау тілі ретінде елге таныстырды, ол
компиляторлар мен операциялық жүйелер жазу үшін қолайлы деп
саналды, кейіннен С тілі кез келген салада программалар жазуга
да өте қолайлы тіл болып табылатыны анықталды.
Алгаш рет UNIX 1969 жылы Нью-Джерси штатындагы Bell
фирмасының лабораториясында PDP-7 компьютерінде жасалып
шықты. UNIX жүйесі PDP-7 компьютерінің ассемблер тілінде
жазылды. Бұдан соң сол лабораторияның жетекшісі Кен Томп­
сон 1970 жылы В деп аталган жаңа тілге арнап компилятор жасап
шықты. Осы тілді С (агылшынша Си) тілінің негізі деп атауга боС тілінің алгашқы нұсқасы Б.Керниган мен Д.Ритчидің "С
программалау тілі" деген кітабы арқылы бірнеше рет жарық көрді
(1985-1991 жж.). Осы кітап тілдің стандарты сияқты болды, бірақ
мұнда аздаган кемшіліктер бар екендігі анықталды. Сондықтан
оны жетілдіру мақсатында Америка ұлттық стандарттар институтында (ANSI) Техникалық комиссия құрылып, 1983 ж. ANSI
С деп аталган тіл стандарты бекітілді. Мұнда тек программалау
мәселелері гана қарастырылмай, кең таралып келе жатқан IBM
PC компьютерлеріне арналган компиляторлар жасау істері де
қамтылды.
С тілін ары қарай жетілдіріп, сол Bell Telephon Laboratories
қызметкері Бьерн Страуструп "Кластары бар С" тілін жасап
шыгарды, ол 1983-жылы C++ тілі деген атқа ие болды. C++
тілі объектіге багытталган программалау тілі болып саналады,
ол бұрынғы С тіліне кластардың енгізілуімен ерекшеленеді.
58
1986 жылы Бьерн Страуструп "C++ программалау тілі" кітабын
шығарды, сол кезден бері тілдің бірнеше нұсқалары пайда бо­
лып, ол қазіргі ең көп тараған тілдердің біріне айналды. Тілдің
халықаралық стандарты 1998 ж. бекітілді, бұл стандарт бойынша
C++ тілі С тілінің 1990 ж. бекітілген стандартына негізделеді. Бұл
оқулықтағы мысалдар осы стандартты пайдаланады.
Бірсыпыра фирмалар C++ тіліне арнап компиляторлар жазды, мысалы, Borland International фирмасы 1989 ж. жасаган
біріктірілген программалау ортасы TurboC++ жүйесін дүниеге
келтірді. Ол DOS ортасында жақсы жұмыс істеді. Ал 1992 ж.
жасалған Borland C++ жүйесі Windows ортасында да жұмыс
істейтін жақсы компилятор болып табылады.
Сонымен C/C++ программалары дайындалып орындалатын
біріктірілген (интегралданған) орта DOS ортасында да жэне Win­
dows жүйесінде де жұмыс істей береді. Біз қарастырғалы отырған C/C++ тіпдерінің негізгі ұгымдары мен операторлары кез
келген мектептің немесе жогары оку орнының компьютерлерінде
орнатылган ТурбоС біріктірілген ортасының редакторы арқылы
немесе Visual C++ программалау ортасында теріліп орындалады.
Оқулықгагы программалардың басым бөлігі С тілінде
беріледі, C++ тілінде берілген программалардың бірсыпыра
өзгешеліктері бар, сондықтан олар туралы мысалдарды талдау
кезінде қосымша ескертіліп айтылады. Қазіргі кең қолданылып
жүрген программаларды орындау ортасы C/C++ тілдерінің ком­
пиляторы болгандықтан, жалпы кітаптагы мысалдар кез келген
трансляторда (ТурбоС, BorlandC, C++) орындала береді.
5.1 C/C++ тілдерінде жазылған программаның құрылымы
С тіліндегі программа кұрылымы төмендегідей болады:
#п р еп р оц ессор директивалары
#п р еп р оц ессор директивалары
функция а ()
{операторлар >
функция Ь ()
{операторлар >
v o i d m ain ()
// программаның орындалуын бастайтын функция
59
{ о п ер а т о р л а р :
си п аттау операторлары
менш іктеу операторлары
функция
б о с оп ер атор
қүрама операторлар
таң дау операторлары
цикл операторлары
кешу операторлары
Препроцессор директивалары
программаны
түрлендіру
Т1Лфайл түрінде даярланған бастапқы программа
түрлендірудің 3 кезеңінен өтеді:
1) мәтінді препроцессорлық түрлендіру;
2) программаны компиляциядан өткізу;
3) біріктіру (байланыстарды түзету және
Бастапкы
мәтін (срр)
программа
толық мәтіні
Қосымша
файлдар (һ)
» КОМПИЛЯТОР
і
Орындалатын
код (ехе)
Біріктіргіш
(компоновщик
Объектілік
код (obj)
Стандартты кітапхана (lib)
5.1-сурет. C/C++ программасы мәтінін түрлендіру кезеңдері
программаның
орындалатын
деті - програ
түрлендіру.
өңдеу
программалаушы
сор директивалары көмегімен анықтайды. Директива # таңбасынан басталады. Мысалы:
1) # define
программа мәтініндегі алмастыру ережелерін
көрсетеді.
60
# define ZERO 0.0
Соңғы жол программадағы ZERO сөзінің әрқайсысы 0.0 санына ауысатынын білдіреді.
2) # i n c l u d e <тақырыптық файл аты> - программа
мэтініне стандарты кітапханамен бірге берілетін "Тақырыптық
файдцар" каталогынан мэтін қосылатынын білдіреді. Тақырыптық
файлдардың біреуінде С тілінің эрбір кітапханалық функциясының атына сәйкес сипаттамасы болады. Тақырыптық файлдар тізімі тіл стандартымен анықталған. Include директивасын
пайдалану соған сәйкес стандартты кітапхананы іске қоспайды,
ол тек көрсетілген тақырыптық файлдан алынатын керекті сипаттамаларды программа мэтініне енгізуге мүмкіндік оереді.
Кітапханадан алынатын қажетті кодтар программаға компиляциядан кейін орындалатын біріктіру кезеңінде қосылады. Тақырыптық файлдарда стандартты функциялардың барлығының да
сипаттамалары болганмен, программа кодына тек соның ішінде
қолданылатын функциялар гана кірістіріледі.
Препроцессорлық өңдеу кезінде программа мэтініндегі пре­
процессор директивалары (#include, #define) анықталып, программага тақырьштық файлдар каталогынан мәтіндік файлдар
қосылады немесе кейбір сөздерді алмастыру орындалады. C/C++
тілдерінің стандарты бойынша берілген функциялар бір тақырыптык файлда анықталады.
Препроцессорлык өңцеу орындалганнан кейін программа мәтінінде бірде бір препроцессорлық директива қалмайды.
Компиляция кезінде программа компьютерге түсінікті код­
тарга түрлендіріледі. Егер осы түрлендіру кезінде стандартқа
сәйкес келмейтін қателер кездессе, оны компилятор бірден
көрсетеді. Ал қате жок болса, компилятор объектілік код немесе
обьектілік модуль болып табылатын программа мэтінін береді.
Барлық программа бөліктері — функциялар компиляциядан
өткен соң, обьектілік модульдер біріктіргішке (компоновщикке)
беріледі. Ол модульдерді біріктіріп, оган стандартты кітапхана
функцияларьга косады да, функцияда қате болса, соны анықтайды.
Біріктіргіш жұмысы нәтижесінде программаныц екілік сандар
түрінде жазылган атқарылатын машиналык коды жасалады да,
ол орындалып жұмыс нәтижесін береді. Барлық программалау
тілдері осы схемамен жұмыс істейді.
61
Программа сипаттамалар мен анықтамалардан, операторлардан құрастырылған бірнеше функциялар жиынынан тұратын
мэтін түрінде болады. Сол функциялар ішінде m ain атты басты
функция міндетті түрде болуы тиіс. Ондай функциясыз про­
грамма орындалмайды. Функция атының алдында сол функция
қайтаратын мэннің типі (нэтиже типі) көрсетіледі. Егер функция
ешқандай нэтиже қайтармайтын болса, онда v o i d типі көрсетіледі, мысалы: v o i d m ain (). Әрбір функцияның, соның ішінде
main функциясының да, параметрлері болуы тиіс, бірақ олар
жақша
көрсетіледі.
жүиелі жақша ішінде
раторлары, ягни ішкі тұлгасы (денесі) орналасады. Функция
тұлғасы дегеніміз - анықтаулар, сипаттамалар, орындалатын опе­
раторлар жиынынан тұратын, жүйелі жақшаға алынған символдар тізбегі. Әрбір анықтама, сипаттама немесе оператор нүктелі
үтірмен аяқталады.
Аныцтаулар —программадағы өңделетін мэліметтерді бейнекет объектілер (объект
коиылган
мысалы, айнымалы) (
түрде
i n t у = 1 0 ; // бүтін сан түріндегі ат койылған константа
f lo a t х ; // нақты (аралас сан түріндегі) айнымалы
мұндағы // белгілерінен кейін орналасқан сөздер түсініктеме
рөлін атқарады да, программага еш әсерін тигізбейді.
Сипаттамалар - компиляторға программаныц басқа бөліктерінде жазылған объектілер мен функциялардың аттары және
қасиеттері жайлы мэлімет береді.
Операторлар - программаныц орындалатын эрбір қадамында
даи іс-әрекетгер атқарылаты
С программасының мысалы
# in c lu d e < s t d io .h > /
директива
v o x d m ain ()
// функция тақырыбы
{
II функция тұлғасының басы
p r i n t f ( " H e l l o ! " ) ; // экранга H e l l o ! сөзін шығару
}
// соңы
5.2-суретте C/C++ программаларының жалпы кұрылымы
көрсетілген.
62
С-программа
■
■
■
§ такырып
m a in ()
Операторлар
fl
Операторлар
Ч■ ■ ■ H i
SBk
£2
>
Операторлар
5.2-сурет. C/C++ программалары құрылымы
Суретке сэйкес, программа бірнеше функциялардан (і
fl, f2...) кұралады жэне олардың біреуі міндетті түрде шаі
болуы қажет. Жалпы кез келген функция оның тақырыбы
тұлғасынан (денесінен) тұрады.
Программадагы кез келген функция тақырыбы препроце*
дың директивасынан немесе функция атьгаан тұрады. Фун
атына жалгасып, жақша ішіне параметрлер жазылуы мүмкін.
де параметрлер болмайды, ондайда жақша ішіне ешнәрсе же
майды.
Функция тртасы операторлардан тұрады, олар жүйелі жа
лармен шектеледі. Әрбір оператордан кейін ; таңбасы қойыі
Енді бір программа мысалын келтірейік, олардың кейбі
жұмыс істеу тэсілдері кейінірек баяндалады:
/* Герон формуласы арқылы үшбұрьш ауданын та
# i n c l u d e < s t d i o . һ> /* енгізу/шыгару директивасы /
< m a th . һ> /* математикалық функциялар
директивасы 7
/
ы функцияны
m am
/
{ i n t a , b , с ; / * бүтін айнымалыларды сипаттау * /
сипаттау * /
flo a t p , s ;
/
63
/
p r i n t f (" \пҮшбүрыш қабырғаларын е н г і з :
s c a n f ("%d%d%d", &а, &b, &с) ;
р = (а + Ь + с )/ 2 . 0 ;
s = s q r t(р * (р -а )* (р -Ь )* ( р - с ) ) ;
p r i n t f ( " s —%f " , s ) ;
\п " );
}
такырып
^include <stdio.h>
main ()
препроцессор
директивасы
тұлғасы
[функция аты
сипаттау жолы
меншіктеу
операторы
int nt;
m=l;
pcintf (“%d нач. знач \n”, m);
стандартты
функцияны шақыру
операторы
5.3-сурет. С программасы құрамы
Программада түсініктемелер
жэне */ таңбалары
қолданылады, олардың ішіне қазақша, орысша, ағылшынша
Ал жол соңындағы түсініктемелер
бұл тэсіл C++
құрылымынан алынған
директивалары
лады, stdio.h тіркесі енгізу/шығару операциялары орындалатынын бщціреді (5.3-сурет). Ал math.h сөз тіркесі программада
стандартты математикалық функциялар пайдаланылатынын
көрсетеді.
I ' ‘
функция m ain
аргументсіз
жақша ішінде ешнэрсе көрсетілмеген. Ал функция тұлғасы,
яғни ішкі құрамы операторлардан (немесе басқа функциялардан)
тұруы
түйінді сөзі а,Ь,с айнымалыларыныц бүтін
, float түйінді сөзі р, s айнымалыларыныц н
[нын сипаттап тұр.
64
Келесі жол үшбұрыш қабырғаларын енгізуді талап ететін
сөз тіркестерін экранға шығарады, мұндағы \п таңбалары сөз
тіркесі алдында жэне одан кейін курсор бір жол төмен түсетінін
көрсетеді. Scant сөзінен басталатын жол а,Ь,с мэндерін бос
орын таңбасымен боле отырып енгізу арқылы пернелерден
қабылдайды, сонан кейін жарты периметр есептеледі, 2 санын
2.0 түрінде жазу бөлу нәтижесінің нақты сан болатындығын
білдіреді, әйтпесе бөлінді бүтін сан түрінде болады. Одан кейін
ауцан мэні анықталады да, соңғы нэтиже экранға шығарылады.
5.2 Тілдің құрамы
Кез келген табиги тілдің мәтініндегі төрт негізгі элементті
көрсетуге болады: символдар, сөздер, сөз тіркестері және
сөйлемдер. Осьшдай элементтер алгоритмдік тілдерде де болады,
мұнда бірақ сөздер - лексемдер (қарапайым конструкциялар) деп,
сөз тіркестері - өрнектер деп, ал сөйлемдер - операторлар деп
аталады. Лексемдер симолдардан тұрады, өрнектер - лексемдер
мен символдардан, ал операторлар - символдардан, өрнектерден
және лексемдерден тұрады (5.4-сурет):
Операторлар
Өрнектер
Лексемдер
Символдар
5.4-сурет. Алгоритмдік тілдің құрамы
□ Тілдің алфавиті немесе оның символдары - бұл бөлінбейтін
негізгі белгілер, солардан тілдің барлық мәтіндері құрастырылады.
□ Лексем немесе қарапайым конструкция - өзіндік мағынасы
бар тілдің ең кіші бірлігі.
□ Өрнектер белгілі бір мэнді есептеу ережесін береді.
□ Оператор белгілі бір әрекеттің аяқталған сипаттамасынан
тұрады.
Күрделі есепті шығару үшін операторлар тізбегін жазу керек.
Кейде операторлар жүйелі жақшамен қоршалған құрама операторға немесе блокқа біріктіріледі. Мұндайда олар бір оператор
тэрізді орындалады.
Операторлар атқарылатын жэне атқарылмайтын (орындалмайтын) болып бөлінеді. Атқарылатын операторлар белгілі бір
әрекетті (амалды, операцияны) орындайды. Ал атқарылмайтын
операторлар тек мәліметтерді сипаттайды, сондықтан оларды сипаттау операторлары немесе сипаттамалар деп те атайды.
Тілдің әрбір элементі синтаксиспен жэне семантикамен аныкталады. Синтаксистік анықтамалар тіл элементтерінің құрылу
ережелерін анықтайды, ал семантика олардың мағынасы мен
колдану ережелерінен тұрады.
Біртұтас алгоритм бойынша біріктірілген сипаттамалар мен
операторлар жиыны программа құрайды. Оны орындау үшін
оны процессорға түсінікті тіл —машиналық кодқа айналдыру ке­
рек. Бұл процесс бірнеше кезеңдерден тұрады. Ол үшін қажетті
кезеңдер мен іс-әрекеттер 5.5-суретте көрсетілген.
Есептің программа­
лау тілінде жазылуы
5.5 сурет. Есепті шығару кезеңдері
Транслятор құрамындағы байланыс редакторы бір модульге басқа модульдерді коса отырып, оның ішінде кез келген программада қолданылатын кітапханалық функциялар (мысалы,
экранга мәлімет шыгару үшін) бар, программаның машиналық
кодтағы атқарылатын модулін қалыптастырады. Егер програм­
ма бірнеше бастапқы файлдардан тұратын болса, олар жекежеке компиляциядан өткізіліп (аударылып), құрастыру кезецінде біріктіріледі. Атқарылатын модульдің тіркемесі .ехе больш
шыгады да, ол кәдімгі программалардаи оірден орындалады.
66
Тіл ережелерін сипаттау үшін оқулықтарда жасанды метатіл
қолданылады, мысалы, Бэкус-Наур тәсілі немесе синтаксистік
диаграммалар. Көрнекті жэне қарапайым ету мақсатында бұл
оқулықта кең таралған сипаттау тәсілі қолданылады, онда тіл
кұрылымының міндетті түрде талап етілмейтін бөліктері тік
жақшаға алынады; нақты мәнмен алмастырылатын мэтін қазақша (орысша) жазылады; ал бірнеше элементтердің бірін тандау
кезінде олар тік сызықшамен бөлініп жазылады.
Мысалы, мынадай
[ v o i d I i n t ] аты() ;
тіркесте, аты сөзі орнына тіл ережелеріне сәйкес нақты атауды
көрсету қажет, ал оның алдында v o i d немесе i n t сөзі орналасады немесе ештеңе де жазылмайды. Жүйелік жақшалар тек
бір элементі ғана таңдалып алынатын бірнеше элементтерді
біріктіріп тұрады. Егер тік жақша синтаксис элементі болып
келген жағдайда, ол туралы айрықша айтылады.
C++ тілі С тілінің жалғасы, олардың алфавиттері де, негізгі
операторлары мен ұғымдары бірдей, енді С тілін және C++
тілінің С тіліне кірмейтін бірсыпыра ерекшеліктері мен күрделі
элементтерін игере отырып, бірте-бірте объектіге бағытталған
программалау үрдістерін үйрене бастаймыз.
Тілдің алфавиті. C/C++ тілдерінің алфавиттері бірдей деуге
болады. Мұндағы түйінді сөздер (ключевое слово - keyword) мен
идентификаторларды, өрнектерді құрастыру үшін қолданылатын
символдар, яғни тіл алфавиті болып саналады.
C/C++ тілдері алфавитіне мыналар кіреді:
- агылшын алфавитінің бас жэне кіші әріптері мен астын сызу
символы кіреді;
- 0-ден 9-ға дейінгі араб цифрлары;
- арнайы таңбалар:
" { } , ! [ ] < ) + - / % * . \ ' : ? < = >!
& # -
;
А
I тіл элементтерін бір-бірінен бөліп тұратын көрінбейтін айыру символдары: босорын, табуляция символы, жаңа жолға көшу
символы.
- қазақ (орыс) алфавитінің бас жэне кіші әріптері сөз тіркестері
мен түсініктеме мэтін жазуда ғана пайдал анылады. Көбінесе олар-
ды сэйкес латын эріптерімен көрсету немесе ағылшын тіліндегі
аудармаларын пайдалану қалыптасқан, өйткені көптеген трансляторлар қазақ әріптерін бейнелемейді.
Көрсетілгендерден басқа C/C++ тілдерінде басқару тізбектері деп аталатын мәліметтер енгізу мен шығаруда қолданылатын арнайы символдар тіркесі бар. Басқару тізбеюгері кері бөлу
сызықшасы белгісінен (\) басталатын латын эріптері мен цифрлар
тізбегінен тұрады (5.1 кесте).
5.1 кесте. Басқару тізбектері
Басқару
тізбектері
\а
\Ь
\t
\п
\v
\г
\f
V'
V
\0
\\
\odd
\xddd
Он алтылық
кодтары
Атаулары
Қоңьфау •
Бір орынга кері қайтару
Горизонталь табуляция
Жаңа жолға көшу
Вертикаль табуляция
Сырғыманы (каретканы) қайтару
Форматты жылжыту
Қостырнақша
Апостроф
Нөл-символ
Кері қиғаш сызық
Сегіздік жүйедегі кодтар жиыны
Он алтылық жүйедегі кодтар жиыны
007
008
009
00А
ООВ
ООС
00D
022
027
000
05С
Кестеде көрсетілген \ddd и \xddd (мұндағы d цифр тұрғанын
көрсетеді) түріндегі тізбектер компьютердегі кодтар жиыны
арқылы өрнектелетін символды сэйкесінше сегіздік жэне он
алтылық цифрлар тізбегімен бейнелей алады. Мысалы, каретка­
ны қайтару символы бірнеше тәсілмен өрнектеле алады:
\г - жалпы басқару тізбегі,
\015 - сегіздік сандардан тұратын басқару тізбегі,
\xOD - он алтылық сандардан тұратын басқару тізбегі.
Мысалы, жеке мынадай \п (жаңа жолға көшу) басқару тізбегін
\010 немесе \хА түрінде де жазуға болады.
Басқару тізбектері тіркестер түріндегі константаларда да пайдаланылады, оларды тіркестік литералдар деп те атайды. Егер
сөз тіркесі ішінде қостырнақша тұруы керек болса, онда оның
68
алдына қиғаш сызық қойылады, осыған байланысты компилятор
оны шекарада тұратын қостырнақшадан ажырата алады, мысалы:
"\"Білім\" баспасы"
Тілдіц қарапайым объектілеріне сан, идентификатор, кон­
станта, айнымалы жэне функция, өрнек ұғымдары кіреді.
Программадағы негізгі амалдардың орындалуына керекті
мэліметтердің сандық, логикалық немесе символдық (литерлік)
мәндері болады. Олармен жұмыс істеу қолайлы болуы үшін
алгебра курсындағы белгілеулерге ұқсас шартты атаулар пайдаланылады. Бұл атаулар эр түрлі мәндерді (сандық мэн, символдық
мэн, т.с.с.) қабылдауы мүмкін, сондықтан оның типі деген ұғым
енгізіледі.
Сандар. Сандар мен айнымалылар бүтін және нақты болып
екіге бөлінеді. Бүтін сандар: +4, -100,15743,0, т.с.с. Қазіргі дербес
компьютерлер үшін қолданылатын бүтін сандар (ағылшынша
INTEGER) -32768 бен +32767 аралығында ғана жазылады, бұдан
үлкен сандар көбінесе нақты сандарга айналдырылады.
Нақты сандар кэдімгі табиғи аралас сандар тэрізді санның
бүтіні мен бөлшегін нүкте арқылы бөлген күйде жазылады.
Мысалы: 2.65, 0.5, -0.862, -6.0. Ал өте үлкен немесе өте кіші
нақты сандар көрсеткіші бар экспоненциал сандар ретінде тЕ±р
түрінде жазылады да, олардың диапазоны элде қайда кең болады,
мүндағы т - санның мантиссасы деп аталады, Е немесе е - онның
дәрежесі дегенді білдіреді, ал р —дәреженің өз мәні. Мысалы:
Кәдімгі жазылуы
145
147,125
-6,045
12*10'4
-0,52* 104
5,2*1 O'12
-45*106
С тілінде жазылуы
145
147.125
-6.045
12Е+14
-0.52е4
5.2Е-12
-45е6
Символдардан тіл лексемдері құралады, ал лексемдер константалар, айнымалылар, идентификаторлар, т.б. тұрады
Түрақты немесе константа деп программаның орындалу барысында мэндері өзгеріссіз қалатын шамаларды айтады,
олар сандық, символдық немесе тіркестік мэнді тұрақгы түрде
қабылдайтын лексем болып табылады.
Тіл ережесі бойынша бірнеше константа типтері болады, мы­
салы, символдық, бүтін, нақты жэне тіркестік константалар. Ком­
пилятор константаны лексем (қарапайым конструкция) ретінде
карастырып, оны сыртқы түріне қарай бір типке жатқызады.
Әрбір типке сәйкес константалар форматтары 5.2 кестеде
көрсетілген.
5.2 кесте. C/C++ тілінің константалары
Конс­
танта
Бүтін
Форматы
Мысалдар
Ондық: ондық цифрлэр тізбесі, нөлден
басталмайды (егер сан 0 болмаса)
8, 0, 19226
Сегіздік: нөлден басталатын сегіздік циф­
рлар (0,1,2,3,4,5,6,7)
01,020, 07155
Он алтылық: Ох немесе 0Х таңбаларынан ОхА, 0x1 В 8,0X00FF
басталатын он алтылық цифрлар (0,1,2,3,4,
5,6,7,8,9,A,B,C,D,E,F)
Нақты
Ондық:
[цифрлар].[цифрлар]
5.7, .001,35.
Экспоненциалдық
0.2Е6,. 1le-3, 5Е10
[цифрлар][.][ цифрлар] {Е|е}[+|-][ цифрлар]
СимАпостроф таңбасымен қоршалған бір не­
волдық месе екі символ
Тіркес- Тырнақшаға алынған символдар тіркесі
тік
Щ W,
'db', \0\ *\пҮ,
\012', ^07^07'
'Мұнда Азат болды",
ЛіНэпгижесіг=\0хҒ5\п”
Бүтін жэне нақты константалардың қабылдай алатын мәндер
диапазондары келесі тарауда келтірілген.
Егер теріс таңбалы бүтін немесе нақгы константа алғымыз
келсе, оның алдына сан таңбасын керіге ауыстыратын унарлық,
ягни бір орындық операция белгісі (-) қойылады, мысалы: -218,
-022, -0х4С, -4.8, -0.1е4.
,
Константа жэне сан жазылуында бос орын таңбасы болмайды
жэне де санның бүтіні мен бөлшегін айыру үшін үтір емес нүкте
койылады.
70
Бір ғана символдан тұратын символдық константалар стандартты c h a r типінде болып, компьютер жадында бір байт орын
алады. Екі таңбадан тұратын символдық константалар екі байт
орын алып, i n t типінде болады да, алғашқы символ кіші адресті
байтта сақталады.
Айнымалылар деп программаның орындалу барысында эр
түрлі мәндерді қабылдай алатын шамаларды айтады. Әрбір айнымалы мен константа программа алдында сипатталуы тиіс.
Олардың компьютер жадында алатын орны типтеріне байланы­
сты болады. Константалар мен айнымалылар идентификатормен
белгіленеді.
Айнымалы қасиеттері:
1. айнымалы белгілі бір мэнге ие болмағанша, анықталмаған
болып саналады. Оган мэн беру мынадай тэсілдермен орындалады:
• сырттан енгізу аркылы;
• константантаны меншіктеу аркылы;
• бұрын анықталған айнымалының мэнін беру аркылы;
2. кез келген сэтге айнымалының белгілі бір мэні болады не­
месе ол анықталмаган больга есептеледі;
3. айнымалыга соңгы берілген мэн оның алдыңғы мэнін жойып (өшіріп) жібереді. Айнымалыны таңдау (оқу) және оны пайдалану айнымалының мэнін өзгертпейді.
Әрбір айнымалы мен константа программа алдында сипат­
талуы тиіс. Олардьщ компьютер жадында алатын орны типтеріне
байланысты болады. Константалар мен айнымалылар идентифи­
катормен белгіленеді. C/C++ тілдеріндегі айнымалы - белгілі бір
типтегі мэліметтер сақталатын компьютер жадының ат қойылган
аймағы. Айнымалының аты мен мэні болады. Аты компьютер жа­
дында мэні сақталган мәліметті пайдалану үшін керек. Пайдалану алдында кез келген айнымалы сипатталуы тиіс. Мысалы:
i n t a ; flo a t x ;
Атау - идентификатор (identification - объектінің белгілі
бір символдар тіркесіне сэйкестігін бекіту) программаны жэне
программадағы тұрақтыларды, типтерді, айнымалыларды, функцияларды, файлдарды жэне тагы басқаларды белгілеп жазу
71
\
үшін қажет. Идентификаторлар тұрақтыларды, айнымалыларды,
олардың түрлерін, функцияларды, программаларды, файлдарды,
т.б. программа объектілерін белгілеу үшін қолданылады. Оның
ұзындығын өте үлкен етудің қажеті жоқ, өйткені атауларды теру
жэне кейіннен сақтау біраз уақыт керек етеді.
Идентификатор - латын әрпінен басталып, эріптер мен цифрлардан түратын тізбек. Мысалы, a, beta, Ь5, baga, т.с.с. Айнымалыны сипаттау мынадай нұсқада орындалады:
char f;
long z, t;
, If
int a, beta, baga;
float b5, k, n;
s . ; інг
int у = 10;
Идентификаторлар латын алфавитінің бас жэне кіші әрітерінен жэне цифрлардан қүралады. Әріп ретінде астын сызу
символын (_) қолдануға рүқсат етілген. Бас эріп пен кіші эріп
бірдей болып саналмайды, олар эр түрлі идентификаторлар бо­
лып есептеледі, мысалы, abc, ABC, A128B, a 128b төрт түрлі иден­
тификатор болып есептеледі.
Идентификатор үзындығына шек қойылмайды, бірақ оның
алғашқы 31 символы ғана мағыналы болып саналады. Идентифи­
катор оны сипаттау кезінде анықталады да, кейінгі операторларда
қолданыла береді. Сипатталатын идентификатор С тілінің алдын
ала анықталған түйінді сөздерімен сәйкес келмеуі тиіс.
Константалардан, айнымалылардан, функциялардан және
операциялар таңбаларынан өрнектер қүралады. Әрбір өрнек
арифметикальщ операциялар таңбаларымен қажетті жақшалар арқылы біріктірілген бірнеше операндтардан (сан, айнымалы, константа) тұрады. Математикадағы формулалар,
алгебрадагы көпмүшеліктер программалау тілінде тек осы өрнек
үгымы арқылы беріледі.
Егер өрнек мэні бүтін немесе нақты сан болатын болса, ол
арифметикалық өрнек болып саналады. Арифметикалық өрнектерде мынадай операциялар: | - * / % (қалдық табу)
болады. Жалпы өрнектер бір жол бойына жазылады жэне олардагы операция реттілігі жақшалармен анықталады.
Өрнектерді жазу мысалдары:
72
i ss і+ 1 ; к = 5 .3 5 ; xl= s(-b + sq rt(b * b -4 * a * c)) / (2*a) ;
у = s q r t ( s i n ( x ) + 1 ) ; с — 2 * p i* r ; R « 1 9 .3 6 ;
Қатынас таңбасы арқылы біріктірілген екі арифметикалық
өрнек мэні басқа тілдердегідей ақиқат (О-ге тең емес) немесе
жалған (О-ге тең) деп айтылады. Бірақ С тілінде логикалық тип
түсінігі айтылмайды, ол C++ тілінде бар.
Түйінді сөздер (keyword) - мағынасы алдын ала анықталған
идентификаторлар, олардың саны шектеулі. Программалаушы
айнымалы, константа, өз функциялары аттарында тілдің түйінді
сөздерін пайдаланбауы тиіс, олар тек өз мағынасында ғана
қолданылады.! *
С тіліндегі бірсыпыра түйінді сөздер тізімін келтірейік.
auto double int struct break else long switch register
tupedef char extern return void case float unsigned
default for signed union do if sizeof volatile continue
enum short while
C++ тілі бұларға тағы аздаған сөздер қосады:
asm catch class friend inline new operator private
protected public template this throw try virtual wchar_t
Бұған коса операторлар мен стандартты функциялар аттары
да түйінді сөздер тізімі секілді басқа мағынада қолданылмайды.
Стандартты функциялар. C/C++ тілдерінде алдын ала
программалары жасалып стандартты модульге жинақталып
қойылған, қажет кезінде пайдалануға болатын объектілердің
бірі стандартты функциялар болып табылады. Олар жиі кездесетін математикалық жэне басқа да функцияларды есептеу үшін
колданылады. Стандартты функцияны жазу үшін міндетті
түрде функцияныц аты жэне жақшаныц ішінде аргументі көрсегілуі қажет. Стандартты функциялар: fabs(x), sin(x), cos(x),
asin(x), acos(x), tan(x), exp(x), log(x), sqrt(x), atan(x), т.с.с. Кітап
соцындағы A қосымшасында бірсыпыра функция тізімдері мен
олардыц жазылу жолдары көрсетілген. Функцияны есептеу
барысында аргумент пен функция типтерінің эр уақытта сэйкес
келе бермейтінін есте сақтаған жөн. C/C++ тіліндегі стандартты
функцияларды пайдалану үшін < m a th .h > тақырыптық файлы
(прототипі) қолданылады.
73
I
Комментарий - түсініктеме ретінде қолдануға болатын
символдар тізбегі. С тіліндегі комментарий басы мен аяғы мынадай /* ...*/ таңбалармен шектелуі тиіс. Олар бір немесе бірнеше
жолдардан да тұра алады. Си++ тілінде жол соңында тұратын
комментарийлер // сиволдарынан кейін орналасады. С жэне Си++
тілдерінде құрастырылған есептерді бір компилятор арқылы
шығаруға болатындықтан, көбінесе түсініктемелердің жоғарыдағы екі түрін де пайдалана беруге болады. Комментарий ішінде тек C++ тілі алфавитіндегі символдарды ғана емес, компьютерде қолдануға болатын барлық символдарды пайдалана беруге
болады. Мысалы, олар ұлттық алфавиттерді де (егер ол экранда
бейнеленетін болса) пайдалана алады.
Түсініктеме ретінде мүмкіндігінше // сиволдарьшан кейін
орналасатын комментарийлерді қолдану ұсынылады, ал қос
таңбалық жақша ішіндегі /* ...* / символдар тізбегін программаны түзетіп жөндеу кезінде кодтар бөлігін уақытша орындамайтын
кездерде пайдаланған дұрыс болып табылады.
Программалау тілінің белгілі бір іс-әрекетті орындай алатын
тиянақты магынасы бар ең қарапайым сөйлемі оператор болып
табылады. Тіл объектілерін, яғни программада пайдаланылатын
мәліметтердің атаулары мен типтерін, олардың алғашқы мәндерін алдын ала тағайындау программаның сипатталуы болып
саналады.
:' ;І
^
Енді Фаренгейт градустарын Цельсий градустарына ауыстыратын С тілінде жазылган программа мэтінін келтірейік.
/ * Градустарды Ф аренгейт б і р л і г і н е н Цельсий
б і р л і г і н е алмастыру, f = 0 , 2 0 , . . . , 3 0 0 * /
# in c lu d e < s t d io .h >
# i n c l u d e < c o n io .h >
m a in ()
{
i n t tO , t n , s t e p ;
f lo a t f , c ;
tO = 0 ;
/ * т ө м е н г і тем п ература * /
tn =300;
/ * жоғарғы тем п ература * /
s t e p = 2 0 ; / * ө з г е р у қадамы * /
c l r s c r ( ) ; f = tO;
74
p r i n t f ("Град_Ф Град_Ц\п") ;
w h i l e ( f <= tn )
{
с • ( 5 .0 /9 .0 ) * ( f - 3 2 .0 ) ;
p r in tf ( " % 4 .O f % 6 .1 f\n " , f , c ) ;
f * f + step ;
>
p r i n t f ("\пА яқтау үшін ENTER басы ңы з");
g e tc h ();
)
Бұл программаны теріп орындап көруге болады, оның эрбір
жолының атқаратын қызметтерін келесі тараулардан оқып танысатын боламыз.
Бақылау сұрақтары
1. C/C++ тілдерінің қысқаша даму тарихы.
2. C/C++ программасының жалпы ңүрылымы және цүрамы.
3. Тацырыптыц файлдар, препроцессор үгымы.
4. Сипатптамалар қандай қызмет атқарады ?
5. Операторлар түсінігі.
6. Компьютерде программаларды орындау кезеңдері.
7. C/C++ тілі алфавиті, басқару тізбектер.
8. Тілдің қарапайым объектілері.
4. С/С+ + тіліндегі стандартты функциялар.
5. Тілдің алфавиті, оның құрамы.
6. С/С+ + тілінің негізгі объектілері.
7. Тұрақтылар түрлері және олардың мүмкін мәндері.
8. Айнымалылар үгымы және олардың қасиеттері.
9. Идентификатор және түйінді сөздер үгымдары.
10. С жэне C++ тілдеріндегі түсініктемелерді беру тэсілдері.
Тапсырмалар
1. Төмендегі сандардың ішіндегі бүтін сандарды көрсетіңіздер:
775; -832; 45.0; 2.98; -0.0; 2.65е02; 15248; -0.85е-01.
2. Төмендегі сандардың ішіндегі накты сандарды көрсетіңіздер:
77.5; -844.0; 43.0; -2.98; -0.0; 2.65е02; 15248; -0.85е-01.
3. Төмендегі сандардың ішіндегі сегіздік сандарды көрсетіңіздер:
775; -081; 0x43; 0541; -065; 0х76А; 244; -0654.
4. Төмендегі сандардың ішіндегі оналтылық сандарды көрсетіңіздер:
7АС1; 0Х8В; 0х4С; -0х2Ғ1; -0141; -0xD6A; 0244; -0X654.
75
5.
Мынадай арифметикалык өрнектерді программалау тілі заңдыльщтарымен жазып шыгыңыздар:
.
6)
в)
6. Келесі айнымалыларды сипапауда кандай кателер бар;
int f; с; в;
long 2z, t5;
‘
“
:з'т
c h a r а2, 2beta, b aga;
f l o a t b5, k=2, n;
i n t у = 10.0;
76
6 C/C++ ТІЛДЕРІНДЕГІ МӘЛІМЕТТЕР Қ¥РЫЛЫМДАРЫ
Мәліметтер типі концепциясы. Кез келген программаның
негізгі мақсаты мэліметтерді өңцеу болып табылады. Әр түрлі
типтегі мәліметтер компьютер жадында басқаша сақталып,
олардың өңделуінде де айырмашылықгар болады. Кез келген
алгоритмдік тілде эрбір константа, айнымалы, өрнекті немесе
функцияны есептеу нэтижесі белгілі бір типте болуы тиіс.
Бүтін (int)
— I Жиымдар
Символдық (сһаг)
— I Тізбелер
Кеңеіһілген сим­
волдык (wchart)
— I Функциялар
— I Қурылымдар
— I Сілтемелер
Накгы (float)
— I Нұскауыштар
Екі еселенген
накгы (double)
Кластар
6.1 сурет. C++ тілінің типтері құрамы
Мәліметтер типі мыналарды
мәліметтің іигкі беинелену түрт
(көлемін)
шамалардың қабылдай алатын
жиынын
шамаларға қолдануға болатын операциялар
функцияларды
программада пайдаланылатын
обьектілерді бейнелеу үшін программалаушы әрбір шамалардың
типін алдын ала таңцап алады. Типті міндетті түрде сипаттау
қажеттілігі компиляторға программадағы әр түрлі конструкция77
ларды пайдалануға болатындығын тексеру мүмкіндігін береді.
Мэліметтерді өңдеу үшін пайдаланылатын машиналық коман­
далар шамалардын типіне байланысты болып келеді.
C++ тілінің барлық типтері негізгі жэне құрама болып екіге
бөлінеді. Мұнда бүтін, нақты, символдық және логикалық шамаларды бейнелеу үшін алты негізгі тип қолданылады (6.1 сурет). Программалаушы осы типтерді негізге ала отырып, құрама
типтерді сипаттай алады. Құрама типтерге жиымдар (массивтер),
тізбелер (перечисления), функциялар, құрылымдар (структуралар), сілтемелер (ссылки), нұсқауыштар (указатели), біріктірмелер
(объединения) жэне кластар жатады.
6.1 C/C++ тілдеріндегі мәліметтер типтері
С тілінде мәліметтердің бірнеше негізгі типтері қолданылады.
Олар:
• c h a r (8 бит) - символдық, яғни таңбалық тип,
• i n t - бүтін сан типі,
• f lo a t —нақты сан типі, яғни жылжымалы нүктелі сандар,
• d o u b le - екі еселенген нақты сан типі.
Алғашқы екі тип бүтін сандарды сипаттайтын негізгі (стан­
дартты) тип, ал соңғы екеуі —жылжымалы нүктелі типтер бо­
лып табылады. Компилятордың бүтін шамаларды өңдеу үшін
жасайтын кодтары жылжымалы нүктелі сандарды өңдеу кодтарынан басқашалау болады. Төмендегі 6.1 кестеде эр түрлі типтердің
ұзындықтары көрсетілген.
|\ '
А-я C++ тіліне жоғарыдағыларға қосымша тағы екі тип:
- wchar__t - кеңейтілген символдық тип,
- b o o l - логикалық тип енгізілді.
Стандартты сандық типтердің мәндерін бейнелеу диапазонын
анықтауда төрт тип спецификаторы қолданылады, олар:
- s h o r t (қысқартылған);
- l o n g (ұзартылған);
- s i g n e d (таңбалы);
- u n s ig n e d (таңбасыз).
78
6.1.1 Бүтін сан түріндегі мэліметтерді сипаттау
Int бүтін сандар типі
I n t типін стандарт бекітпеген, ол компьютерге немесе компиляторға байланысты өзгеріп отырады. 16-разрядты процессорде ол 2 байт, ал 32-разрядтысында - 4 байт.
Егер i n t алдында s h o r t спецификатор сөзі тұрса, онда ол
эрқашан 2 байт, ал егер спецификаторы lo n g болса, 4 байт бо­
лады. Санта компьютер жадында берілген орынға қарай олардьщ
мәндері өзгереді.
s h o r t i n t - 2 байт, оның диапазоны -32768 ..+32767;
lo n g i n t - 4 байт, онын диапазоны -2 147 483 648..
+2 147 483 647.
I n t типі 16-разрядты компьютер үшін s h o r t i n t типімен
бірдей, ал 32-разрядты компьютер үшін lo n g i n t типімен бірдей.
S ig n e d жэне u n s ig n e d модификаторлары да сандар шамасына эсер етеді, олар:
u n s ig n e d s h o r t i n t —2 байт, оның диапазоны 0 ..65536;
u n s ig n e d lo n g i n t - 4 байт, диапазоны 0..+4 294 967 295.
Айнымалыларды сипаттау кезінде бүтін тұрақтылар - костанталар мэндерін де көрсетуге болады. Мысалы:
i n t k = 0 ; (бір гана сан сипатталган жэне оган мэн берілген)
i n t k l , k 3 = 0 ; (біреуі сипатталган, екіншісіне мэн берілген
U n sig n e d типі i n t , l o n g , s h o r t түйінді сөздерімен
сипатталатын типтердін модификаторы ретінде қолданылады.
Мысалы:
u n s ig n e d i n t sum=0;
Бүтін типті шаманың компьютер жадында ішкі бейнеленуі —
екілік жүйедегі код түріндегі бүтін сан. S ig n e d спецификаторын
пайдаланганда, санның ең жогарғы биті санның таңбасын (0 —оң
сан, 1 - теріс сан) көрсетеді. U n sig n e d спецификаторы тек оң
сандарды бейнелейді, өйткені оның жоғарғы разряды да санның
коды болып қарастырылады. Сонымен, i n t типті мәндердің
диапазоны спецификаторға байланысты өзгеріп отырады екен.
IBM PC тэрізді компьютерлер үшін эр түрлі спецификаторы бар
бүтін типті шамалардың өзгеру диапазоны 6.1 кестеде келтірліген.
Алдын ала келісім бойынша барлық бүтін санды типтер таңбалы болып саналады, яғни s i g n e d спецификаторын жазбаса да
болады.
79
Программада кездесетін константалардың жазылуына қарай,
яғни солардың сыртқы бейнесіне сэйкес белгілі бір тип тағайындалады. Егер ол тип, кейбір жағдайларға байланысты, программалаушыны қанағаттандырмайтын болмаса, онда санның
соңына жалғастырылып керекті типтің атына сәйкес бір эріп - L,
1 (long) немесе U, u (unsigned) жазылады. Мысалы, 32L константасының типі long жэне ол компьютердің жедел жадында 4 байт
орын алады. Қажет болса, L жэне U әріптерін қатарластыра да
қолдануға болады, мысалы, 0x22UL немесе 05Lu. Осы атаулардагы short int, Jong int, signed int жэне unsigned int типтерін
short, long, signed жэне unsigned деп қысқаша жазуға болады.
Бүтін типтердің мүмкін болатын ең кіші жэне ең үлкен мәндері компиляторға байланысты болып келеді де, C++ тілінде
<limits.h> (<climits>) тақырыптық фаилында көрсетіледі, нақты
типтердің сипаттамалары —<float.h> (<cfloat>) файлында жэне де
numericjimits класының үлгілерінде беріледі).
Щ
6.1
кесте. C/C++ тілдерінің ішкі құрамындағы мәліметтер типтері мен
олардыц ені (ұзындығы)
Мэлімет типі
Үзындыгы
Сандар диапазоны
|
_____ (бит - байт)_____
bool
t r u e жэне f a l s e 0 ... 1
1 бит
1char
8 бит - 1 байт
-128 ... +127
1
1unsigned char
8 бит - 1 байт
0 ... 255
1
1short int
16 бит - 2 байт
-32768... 32767
|
| unsigned short ____ 16 бит —2 байт
0 ... 65 535___________________
[int
16 бит- 4 байт
-32768... 32767
| unsigned [int] |
32 бит —4 байт
0 ...4294967295______________
32 бит —4 байт
Ilong
I
-2 147 483 648 ... 2 147 483 647
| unsigned long |
32 бит —4 байт
0 ... 4 294 967 295____________
[float
1
32 бит —4 байт
3.4ХІ0-38... 3.4ХІ038
|
| double
I
64 бит - 8 байт
1.7х10'308 ... 1.7х10308
1
| long double
I
80 бит —10 байт
3.4x10-4932... 3,4х 104932
1
Нақты сандар типтері үшін кестеде солардың абсолюттік шамаларының ең кіші (минимал) жэне ең үлкен (максимал) мәндері
көрсетілген.
80
Char типі
Char типін 0-255 аралығындағы таңбасыз бүтін сандарды
сипаттауда қолдануға болады, компьютер жадында бұларға бір
байт орын бөлінген. Мысалы:
char c l ;
c h a r ck = ' k ' ;
Бұл тип мэндері реттелген символдар жиыны болып табылады. Әрбір символға бір бүтін сан сәйкес келеді, ол символ коды
деп аталады. Символдық тип ені - 1 байт. Char типі де s ig n e d
жэне u n s ig n e d спецификаторларымен қолданылады. S ig n e d
c h a r типі диапазоны -128 .. +127. U n sig n e d c h a r типін
қолданғанда, оның мәндер диапазоны 0 .. 255 болады.
Символдарды кодтау үшін ASCII (American Standard Code for
International Interchange) стандарты негізге алынған. U n sig n e d
ch a r типі 256-символдық ASCII кодтар жиынының кез келген
символын бейнелеуге толық жарайды. Char типі осы сандар диапазонынан аспайтын бүтін сандарды сақтау үшін де пайдаланылады. Char символдарының 0 .. 31 кодтары басқару кодтарына
жатады, олар тек енгізу-шығару кезінде ғана қолданылады.
Char типі символдарды олардың бүтін сан түріндегі кодтары
арқылы сақтап, басқа шамалардың көрсетілген диапазоны сандарын да корсету үшін де қолданыла алады.
Кеңейтілген символдық тип (w chart)
wchar__t типі (тек C++ тілінде) бір байттан асатын символдар
жиынын кодтау үшін қолданылады, мысалы, Unicode символдары. Бұл типтің көлемі компьютерге байланысты болып келеді
де, көбінесе s h o r t типіне сәйкес келеді. w c h a r _ t типіндегі
тіркестік константалар L әрпінен басталып жазылады, мысалы,
L " b it" .
Логикалық тип (bool)
Логикалық тип (бұл да тек C++ тілінде) түйінді соз болып табылатын t r u e жэне f a l s e мәндерін қабылдайды. Компьютер
жадында false - 0 (нөл), басқа кез келген мэн true болып табылады. Бүтін типке түрлендіргенде, true 1-ге сэйкес келеді.
6.1.2
Жылжымалы нүкгелі нақты сандар типтері
Нақты сандар компьютерде 2 боліктен - дэреже мен мантиссадан тұрады. ІВМ-РС компьютерлерінде float типінің ені - 4
б-іббо
81
н
байт, оның бір разряды - сан таңбасы, 7 разряды - дэреже, 24
битЗ - мантисса.
Егер d o u b le типі аты алдында lo n g сөзі тұрса, онда оған 10
байт орын беріледі.!
Ц tl9ЩЦ1 f
Программалау практикасында көбінесе жылжымалы нүкгелі
накты (аралас) сандар пайдаланылады.
Жылжымалы нүктелі типтер компьютер жадында бүтін сандардан басқаша түрде сакталады. Нақты санның ішкі бейнесі екі
бөліктен - мантисса жэне дәрежеден тұрады. IBM PC тэрізді
компьютерлерде f lo a t типті шамалар 4 байттан тұрады, оның
ішінде бір екілік разряд мантисса таңбасын бейнелейді де, 8 раз­
ряд дәрежені жэне 23 разряд мантиссаны көрсетеді. Мантисса
- бұл 1.0-ден артық бірақ 2.0-ден аз сан. Мантиссаның алғашқы
разряды эрқашанда 1 болғандықтан, ол сақталмайды.
8 байттан тұратын d o u b le типті шамалар үшін, дәреже мен
мантиссаға сәйкесінше 11 жэне 52 разряд бөлінеді. Мантисса
ұзындығы санның дэлдігін анықтаиды, ал дәреже ені - оның
диапазонын анықтайды. 1.4 кестеден көрініп тұрғандай, flo a t
жэне lo n g i n t типтерінің ұзындықтарының байт саны бірдей
болғанымен, ішкі бейнелену формасының айырмашылығына
қарай, олардың диапазоны эр түрлі болып келеді.
Жылжымалы нүктелі константалар, келісім бойынша, double
типінде болады. Олардың типін F, f (float) жэне L, 1(long) әріптері
арқылы нақты түрде көрсету мүмкіндігі бар. Мысалы, 2E+6L константасы l o n g d o u b le типінде, ал 1.82f константасы flo a t
типінде көрсетілген.
Әртүрлі платформаларга ауысатын программалар үшін i n t
типінің ені жайлы алдын ала болжам жасауга болмайды. Оны
анықтау үшін s i z e o f операциясын пайдалану керек, оның нәтижесі сол типтің байтпен берілген еніне тең болады. Мысалы,
MS-DOS операциялық жүйесі ортасында s i z e o f ( i n t ) нәтижесі
- 2 болса, ал Windows 9X немесе OS/2 жүйесіндегі нэтижесі - 4
болады.
ANSI стандартында негізгі типтер мәндерінің диапазоны бершмеиді, тек солардың көлемдерінщ ара қатынасы гана анықтал ады:
82
s iz e o f(B o a t) £ s iz e o f(d o u b le ) ^ s i z e o f ( l o n g double)
s iz e o f ( c h a r ) £ s i z e o f ( s h o r t ) £ s i z e o f ( i n t ) £
s iz e o f ( lo n g )
Sizeof стандартты операггорын қоцдану мысалы:
p r in tf(" d o u b le т и п ін д егі мәліметтер е н і %d байт\п",
s i z e o f ( (d o u b le )) ;
Мэліметтерді бейнелеу диапазоны мен дэлдігі әр түрлі бо­
лып келетін бүтін жэне нақты типтердің осындай түрлері программалаушыға кез келген аппаратураның мүмкіндіктерін тиімді
түрде пайдалануға мүмкіндік береді, өйткені есептеу жылдамдыгы мен компьютер жадының паидаланылатын көлемі типке
тэуелді болып келеді. Бірақ компьютердің бір түріне икемделген программа басқа платформада қолдануга ыңгайсыз болуы
ықтимал, сондықтан жалпы программаларды мәлімет типтеріне
тәуелді етіп құруга тырыспау керек.
void типі
Негізгі типке жогарыда көрсетілгендерден баска v o i d типі
де жатады, бірақ бұл типтін мэндер жиыны бос болып келеді.
Олар мэн қайтармайтын функцияларды анықтау үшін қолданылады, функцияның аргументтерінің жоқ екенін білдіреді,
нұсқауыштардың негізгі типі ретінде жэне типтерді келтіру операцияларында да пайдаланылады.
6.1.3 Символдық тіркестер (жолдар, қатарлар)
С тілінде символдьщ тіркестерді сипаттау үшін арнайы тип
жоқ, олар көбінесе c h a r типтегі элементтерден тұратын жиым
(массив) ретінде қарастырылады. Өте ұзын тіркестік константаларды бірнеше жолга бөліп жазуга болады, мұндайда тасымалдау
таңбасы ретінде кері қигаш сызық қолданылады. Мысалы, мына­
дай сөз тіркесі:
"К өзің қайда көшеден м ен і і з д е г е н Д
с е з і ң қайда е к е у м із е г і з д е г е н Д
т е р е з е ң н ің алдына к е л іп тұрмын, \
к еп тер дей қысты к у н і жем із д е г е н "
төмендегі жолдармен бірдей болып саналады:
83
.і
"К өзің қайда көшеден м е н і і э д е г е н , с ө з і ң қайда
е к е у м із
е г із
д е г е н , т е р е з е ң н ің алдьша к е л іп
түрмын, к еп тер дей қысты к у н і жем із д е г е н "
Жолдық немесе тіркестік символдар компьютер жадында
көршілес ұяшықтарда сақталады да, олардың соңында ' \ 0 ' сим­
волы тұрады.
,л w
Әрбір тіркестік литерал соңына компилятор \0 тізбегімен
көрсетілетін нөлдік символ қосып жазады, сондықтан тіркес
ұзындығы сөздегі символдар санынан бірге артық болады. Сим­
волдар тіркесінің ұзындығын анықтау үшін s t r l e n ( ) функциясы қолданылады.Сонымен, бос тіркестің өзі компьютер жадынан 1 байт орын алады екен. Бір символдан тұратын сөз тіркесінен,
мысалы, "А", бір таңбадан тұратын символдық константаның 'А'
айырмашылығын білу керек. Бос символдық константа болмайды.
V>
#
d efin e - символдарды немесе солардан тұратын константаларды анықтау мақсатында қолданылады. Мысалы:
#d efin e NULL ' / 0 '
#define VNAME "КазНУ"
6.2 P r i n t f жэне s c a n f функциялары
С тілінде сыртқы ортамен мәліметтер алмасу < s t d i o . h >
енгізу-шығару функциялары кітапханасын пайдалану арқылы
орындалады. Ол тақырып файлы ретінде былай жазылады:
# in c lu d e < s td io .h >
p r i n t f () функциясы мэліметтерді экранға шығару үшін
қолданылады. Оның жалпы жазылу түрі:
p r i n t f (<формат т ір к е с і> ,< а р г у м е н т т е р т і з і м і > ) ;
(<формат т і р к е с і > - формат спецификаторларынан, бос орыннан жэне эр түрлі символдардан тұрады. Ол қостырнақшамен (")
шектеліп, аргументтердің қалай бейнеленетінін көрсетіп тұрады,
экранға (баспаға) шығару алдында барлық аргументтер формат
спецификациясына сэйкес түрлендіріледі, спецификация % символымен басталады жэне мэліметтер типін, оларды түрлендіру
тәсілін көрсететін бір эріп - спецификация коды жазылады.
Объектілер ретінде айнымалылар, константалар, өрнектер қолданылуы мүмкін. Мысалы:
84
p r i n t f (" Пи санының м ә н і = % f\n", p i ) ;
Бұл жолдың нәтижесі: Пи санының м ә н і = 3 .1 4 1 5 9
Формат соңында тұрған \ п тіркесі сан шығарылған соң,
курсордың келесі жолға көшетінін бідціреді.
Формат тіркесінде мыналар болады:
1) мэтін ретінде шығарылатын символдар тіркесі;
2) түрлендіру спецификациялары;
3) басқару символдары.
Әрбір аргументке өз спецификациясы сәйкес келуі тиіс, олар:
%d - бүтін ондық сан шығарылуы тиіс,
%і - бүтін ондық сан шығарылуы тиіс,
% f- жылжымалы нүктелі нақты ондық сан ([-Jdddd.dddd) жазылып шығады,
%е - жылжымалы нүктелі экспоненциалды сан ([-]d.dddde±dd)
шығарылады,
%Е — жоғарыдағы сияқты, тек е орнына Е ([-]d.ddddE±dd)
шығарылады,
%с - бір символ шығарылуы тиіс,
%s - символдар тіркесі (катары) шығарылуы тиіс,
%g - нақты сан, сан ұзындығына қарай %е немесе %f қолданыла
алады,
%u - таңбасыз ондық бүтін сан жазылып шығады,
%о - таңбасыз бүтін сегіздік сан шығады,
%х - таңбасыз бүтін он алтылық сан шығады.
\п - келесі жаңа жолға көшуді аткаратын басқару символы.
Мысалы:
p r i n t f ("%d%f", x , у ) ;
экранға бір бүтін (%d) —х жэне бір нақты сан (%f) - у шығару
функциясы. Форматтарда санның ені де көрсетілуі мүмкін. Ол
былай жазылады:
%9і - бүтін сан ені 9 цифрдан тұрады, сан ені аз болса, оның сол
жағында бос орындар орналасады.
% 9.3f- нақты сан ені 9 цифрдан тұрады, оның 3 таңбасы бөлшекке
беріледі, сан ені аз болса, оның сол жағында бос орындар орна­
ласады.
Әрбір спецификация % символынан басталып, түрлендіру
символымен аяқталады. Ол екеуінің ортасында мыналар тұруы
мүмкін:
85
- минус таңбасы, аргумент мэні сол жақ шетке ығыстырылып
жазылады.
- цифрлар, бүтін санның жалпы орналасу енін анықтайды.
Сан осы енге немесе одан артық болып шыгарылады. Егер ар­
гумент ені көрсетілген еннен аз болса, онда ол бос орындармен
толтырыльт жазылады.
- нүктеге дейін санныц жалпы ені, нүктеден соң бөлшек циф­
рлар ені көрсетіледі.
- L модификаторы, сәйкес аргумент мэні i n t емес lo n g
екенін білдіреді.
S c a n f () пернелерден (консольдан) мәлімет енгізу функциясы жогарыда қарастырылган түрлендіру спецификациясының
көбін пайдаланады. Жазылу ережесі:
s c a n f (<формат т ір к е с і> ,< а р г у м е н т т е р т і з і м і > ) ;
Аргументтер ретінде адрес нұсқауыштары - айнымалылар
адрестері пайдаланылады. Мысалы:
scanf("% d% f", & х,& у);
мұндагы &х, &у - х жэне у айнымалыларының компьютер
жадындагы адрестері. Бұл функция пернелерден бос орын не­
месе Enter пернесін басу арқылы бір бүтін жэне бір нақты сан
енгізуді талап етеді. Әдетте s c a n f функциясы алдына қандай
мэн енгізілетіні жайлы мэтін шыгарылады. Мысалы:
printf(Mx, у енгізіңіз:1’);
scanf("% f% f',& x,& y);
x жэне у мәндері 3,5 пен -2,5 болуы тиіс болса, экрандағы көрініс
мынадай болады:
х, у енгізіңіз: 3.5 -2.5J
мұндагы J - Enter пернесін басу белгісі.
S c a n f () функциясы форматтарыныц p r i n t f () функциясы
форматынан кейбір айырмашылықтарын атап өтейік:
1) %е жэне % f спецификациялары енгізу кезінде бірдей болып
табылады;
"
2) s h o r t типті бүтін санды енгізу кезінде %һ спецификациясы қолданылады.
ЕСКЕРТУ. Айнымалы адресін беру үшін адрестерді жазғанда,
айнымалы адресін анықтау үшін & символы қолданылады. Ал
тіркестік (жолдық) айнымалыны енгізгенде, & символы жазылмайды.
I П И Н
86
Енді С тілінде енгізу/шығару функцияларын пайдаланатын
бір мысал келтірейік.
# in c lu d e < s t d i o . h >
main ()
{
in t i;
c l r s c r () ;
p r i n t f ( " \ n Б ү т ін сан е н г і з і ң і з : " ) ;
s c a n f ("%d", & i ) ;
p r i n t f ("\п С із %d санын е н г і з д і ң і з . " , i ) ;
}
Бұл программаның алғашқы жолы - препроцессор директивасы, ол енгізу/ шығару операцияларын орындауды қамтамасыз етеді. m ain () функциясының бірінші жолы бүтін типтегі
і айнымалысын сипаттап тұр, одан кейін тұрған p r i n t f ()
функциясы жаңа жолға көшіп (\п) экранға Бүтін сан енгізіціз: деген сөздерді шығарады. s c a n f () функциясы пернеден
енгізілген санды і айнымалысына меншіктейді (& таңбасы адрес
алу операциясын көрсетеді). Келесі жол көрсетілген сөз тіркесін
ондағы спецификаторды і санының мэніне алмастыра отырып
экранға шығарады.
Программа нәтижесі экранда мынадай түрде бейнеленеді:
Бүтін сан енгізіңіз: 1256
Сіз 1256 санын енгіздіңіз.
Енді енгізілген санның көрсетілген дэрежесін есептейтін про­
грамма кұрайык.
/* Санды дәрежелеу */
# in c lu d e < с о п іо .һ >
# in c lu d e < s t d io .h >
# i n c l u d e < m ath.h>
m a in ()
{ f lo a t x , y , s ;
c lr s c r ();
p r in t f (" \n х - т і және оның дәреяоесін - у е н г і э і ң і з :") ;
scanf("% f% f", fix ,& y );
s = p o w ( x ,y ) ;
p r i n t f (" \пНәа?ижесі s=%f " , s ) ;
)
Бұл программаны орындаудағы экран бейнесі төмендегідей
болады:
(ЖШЩізлйЫ
х-ті жэне оныц дәрежесін - у енгізіңіз: 2.5 4
Нәтижесі 8=39.062500
Сонымен, s c a n f () функциясы символдарды, сандарды, сөз
тіркестерін енгізу үшін қолданылады, енгізілетін сандар, сөздер
бір-бірінен бос орын, табуляция символы немесе Enter пернесін
басу арқылы ажыратылады екен.
6.3 Cin жэне cout функциялары
C++ mini стиліндегі негізгі енгізу/шыгару функциялары оныц
кластары кітапханасын пайдаланады. Оны түсіндіру үшін бір
программа мысалын қарастырайық.
#± n clu d e < io s tr e a m .h > / / C++ т і л і н д е г і программа
i n t m a in ()
{
•
ШЩШ
in t i;
;
c o u t « "Б үтін сан е н г і з і ң і з : \ n " ;
c in » i ;
c o u t « "Сіз " « i « "санын е н г і з д і ң і з , рахмет!" ;
r e tu r n 0;
H |
Мұндағы < io s t r e a m .h > - C++ тіліндегі енгізу/шығару кітапханасының стандартты тақырып файлы. Ол программадағы мэліметтер ағымы жайлы ақпарат береді, i o s t r e a m сөзі - i n p u t /
o u t p u t s tr e a m сөздерініц қысқаша жазылуынан шыққан сөз.
Бұл файлда мэліметті пернетақтадан енгізуге арналған стан­
дартты c i n ағымы жэне экранға мәлімет шығаратын c o u t ағымы анықталып, ағымға мәлімет беру « жэне агымнан мэлімет
оқу » операциялары арқылы орындалады.
с і п - ағылшынша "С" жэне "input" сөздерінен, ал c o u t - "С"
жэне "output" сөздерінен құралган.
c o u t « "Б үтін са н е н г і з і ң і з : \n " ; жолы экранға
қос тырнақшадағы сөз тіркесін ишғарып, курсорды келесі жолға
көшіреді.
88
»
c in
i ;
жолы пернелерден ентізілғсн бүтін сайды 1 айны
малысына меишистеиді.
c o u t « "Сіз " « і << "саньш өнгіздіңіэ, рахмет *" ;
гырнакшадағы гірксс герді
», ал і айнымалысм
енгЫлгеи сандык мэнін экранға
береді.
С тілінің енгпу/інығару функцняларына Караганда, C++ гілінің ағымдары эртүрлі типтермен жены, эрі жылдам жумыс
істеуді камтамасыз ете алады деп саналады
Ағымнан мәлімет оку оны игыинан аіу деп, ал ағымға мәлімет
шыгару оларды агылші қосу деп антылады.
C++ тілінде бүтін сандармен арифметикалык амалдар орындаитын тағы оір мысал қарастыраиық.
/* іа жэне ІЬ бүтін сандарьш қосу, азайту,
көбейту жэне бөлу опөрацияларын орындау */
#include <iostream.h>
v o i d m a in ()
/ / м ю лім еттерді сипаттау
(
i n t i a , i b , i p l u s , im in u s;
flo a t d e l , m u lt;
// сандық мәндерді енгіэу
c o u t « "I n p u t i a , ib : \ n ” ;
/ / " i a , i b енгіэ:" с е з і н лыгару
c in » i a » ib ;
/ / е н г і з і л г е н м ән д ер д і i a , i b - г а меншхктеу
/ / есептеулер
ia + ib ;
ip lu s
i a - ib ;
im in u s
ib ;
m u lt =
i a / ib ;
del
/ / н әти ж ел ер ді шыгару
« i p l u s « " \n " ;
c o u t « " p lu s
" « im in u s < < " \n " ;
anus
cout «
« d e l < < " \n " ;
co u t « "del ;
« m u lt < < " \n " ;
c o u t « "m ult
}
ж
о
о
р
л
н
ы
ы
к
н
о
а
с
о
ө
н
ы
ң
і
г
с
р
і
с
с
і
и
ff
ff
ff
ff
89
г
ы
г
а
р
ы
п
Программа нэтижесі:
_
In p u t i a , ib :
ii В jI « ж # . В Ш ш Ш
4 5
p lu s = 9
m inus = -1
del m 0
m u lt = 20
Пернетақтадан ia мен ib мәндерін енгізу кезінде арасында бос
орын болуы тиіс. Мысалда 4 цифрын енгізіп, бос орынды басып,
5 цифрын теріп, Enter пернесін басу қажет.
Бөлу кезінде шығатын нәтижеге назар аударыңцар, ол дұрыс
болмайды. Бұл бүтін санды бүтін санға бөлгендегі бөлінді де
бүтін сан болатындығынан шыгып отыр. Мұндайда дұрыс нэтиже алу үшін, іа, немесе ib айнымалыларының бірінің типін float
деп корсету керек.
Ik:
Я
Бақылау сұрақтары
1. C /C ++ тілдеріндегі мэліметтер типі нелерді анықтайды?
2. С тілініц мәліметтері типтері, C++ тілінің типтері.
3. Мәліметтері типтерін аиықтауда қандай спецификаторлар цолданылады?
;> '
^
v\
4. Бүтін сан түріндегі типтер түрлері, олардың ұзындықтары.
J. char жэне wchar_t типтерінің ерекшеліктері.
6. Жылжымалы нүктелі нацты сандар типтері.
7. s i z e o f ( ) операциясының қолданылуы.
8. Символдъщ тіркестерді сипаттау жэне беру.
9. Сөз тіркестеріндегі нөлдік символдың атқаратын қызметі.
10. С тіліндегі мэліметтерді енгізу жэне шыгару функциялары.
Олардың форматтары, жазылу ерекшеліктері.
11. C++ тіліндегі мэліметтерді енгізу жэне шыгару функциялары.
Олардың форматтары, жазылу ерекшеліктері.
Тапсырмалар
1.
2.
3.
Келесі константалар қандай таптерде бейнеленген:
45 L, 08UL, -0X12Lu, 1245,67.1,-125.0,42165421,12.56e-02,2E+3L,
2. If
Төмендегі өрнектер мәні нешеге тең болады:
а) 1/3; 1.0/3; 1/3.0 ;
ә) int а=5, k=10, у; y=a/k; y=?
"Абай Құнанбаев", "Мұқағали Мақатаев", "Қасым Аманжолов",
90
I
4.
5.
6.
7.
8.
"Баубек Бұлқышев" сөздерін бір жолға, екі жолға, үш жолға және
төрт жолға шығару керек.
Төмендегі идентификаторлардың қайсысы дұрыс, қайсысы қате
жазылған: \
I
J
Zat, kun, iBas, A_arpi, лфк_12, adet rypbin, dtl5$tr, wiwa_1987_wini,
gamma_8
125 ондық санын сегіздік жэне оналтылық жүйеде экранға шығарыңдар.
printf (,f Пи санымың мәні = %4.2f\n
pi); жолы
экранға қандай мәлімет шығарады?
scanf (" %d%f ” , &а , &Ь) ; жолы қандай сандар енгізуді талап
етеді?
cout « "Бүтін сан енгізіңіэ: ”;
cin » к;
cout « к « ”тақ сан ба? ";
жолдары қандай нәтиже береді?
,f,
91
»
7 C/C++ ТІЛДЕРІНДЕГІ ҚОЛДАНУШЫ ФУНКЦИЯЛАРЫ
Кез келген C/C++ тілінің программасы бірнеше функциялар[ құралады жэне олардың біреуі міндетті түрде m ain () боЫ- Программаны орындау осы функцияның бірінші оператоіан басталады.
Көбінесе функция белгілі бір мэнді есептеу үшін қолданылады,
функция аты алдында
керекті деген мағлұматтарды
ғана қарастырамыз:
□ егер функция мэн қайтармайтыь
болады;
□ функция тұлғасы (орындалатын
(фигуралық)
алынып
□ функциялар бірінің ішіне бірі кіріп қабаттаса орналаспайды
□
нүктелі үтірмен аяқталады (құрама
басқалары)
функциялар
паидаланатын программа мысалын қарастыра__
7.1 мысал.
/* Шеңбер ұзындығын табу */
#in c lu d e < s t d io .h >
/* енгізу/шығару директивасы */
i n t m ain ()
/* басты функцияны қолдану */
in t r a d iu s ;
/* бүтін айнымалыны сипаттау */
f lo a t l e n g t h ;
/* нақты айнымалыны сипаттау */
p r i n t f (" \п Радиус м ән ін е н г і з і ң і з : \ n " ) ;
sca n f(" % d " , f i r a d i u s ) ;
l e n g t h = 2 * 3 . 1 4 1 5 9 * r a d iu s ;
p r i n t f ( "Радиусы - %d\n шеңбер ұзындығы -% f",
r a d iu s , le n g t h ) ;
}
Программада түсініктемелер беру үшін /* жэне */ таңбалары
қолданылған, олардың ішіне қазақша, орысша, ағылшынша сөз
тіркестерін жазуға болады.
92
Басты функция m ain () аргументсіз жазылған, сол себепті
жақша ішінде ешнәрсе көрсетілмеген. Ал функция тұлғасы операторлардан (немесе басқа функциялардан) тұруы тиіс. I n t түйінді
сөзі r a d i u s айнымалысының бүтін мэн қабылдайтынын, f lo a t
түйінді сөзі l e n t h айнымалысының нақты мэн қабылдайтынын
сипатгап тұр.
Келесі жол радиус мэнін енгізуді талап ететін сөз тіркестерін
экранға шығарады, мұндағы \ п таңбалары сөз тіркесі алдында
және одан кейін курсор бір жол төмен түсетінін көрсетеді.
S c a n f функциясы шеңбер радиусы r a d i u s мэнін пернелерден
қабылдайды, оның алғашқы аргументі %d енгізілетін ондық бүтін
сан екенін, ал екінші аргументі - енгізілетін сан меншіктелетін
айнымалы аты болып табылады. Оның алдындағы &(амперсанд)
символы s c a n f () функциясының дұрыс жұмыс істеуі үшін керек, ол туралы кейін айтылады. Сонан кейін шеңбер ұзындығы
есептеледі де, ол нэтиже ретінде p r i n t f () функциясы арқылы
экранға шығарылады. Функция параметрі ретінде тұрған %f фор­
мат спецификаторы (анықтауышы) l e n g t h айнымалысының
типі f lo a t екенін көрсетеді.
7.1 Қолдаиушы функциясын пайдалану
Қолданушы (тұтынушы) функциясын пайдалану үшін, өзіміз
m ain типтес шағын функция жазамыз. Ол бұрынғыша шеңбер
ұзындығын аныкгау үшін қолданылатын болсын.
7.2мысал.
/* Шеңбер ұзындығын табашн функцияны С тілінде пайдалану */
# i n c l u d e < s t d i o . h>
/* енгізу/шығару директивасы */
v o id l e n t h (flo a t r a d i u s ) ; /* lenthO функциясьш, яғни оньщ
прототипін хабарлау */
m a in ()
/* басты функцияны қолдану */
{
f lo a t r a d i u s ;
/* нақты айнымалыны сипаттау */
ra d iu s = 5 . 5 ;
l e n t h (r a d i u s ) ;
/* l e n t h функциясын шақыру */
p r i n t f ( " \ n Р ад и у с м ә н ін е н г і з і ң і з : " ) ;
sc a n f(" % f" , fira d iu s );
le n th (ra d iu s );
}
v o i d l e n t h (flo a t r ) /* lenth() функциясын анықтау */
{
p r i n t f ("Радиусы - %f\n шеңбер үэындығы -% f",
г ,2 * 3 .1 4 1 5 9 * r);
Бұл программада екі функция бар: m a in () жэне
l e n t h ( r a d i u s ) . Енгізу/шығару директивасынан кейінгі жолда l e n t h () функциясы хабарланған, С тілінің ережесі бойынша эрбір айнымалы, функция оны алғаш қолданғанға дейін
хабарлануы тиіс. Нүктелі үтірмен аяқгалып отырған бұл функ­
ция тақырыбы функция прототипі деп аталады да, ол функцияны хабарлау (жариялау) болып табылады. Main () функциясы
аяқталып жүиелі жақша жабылған соц, l e n t h ( . .) функциясы
толық сипатталып анықталуы тиіс.
l e n t h ( . .) функциясы анықтау оның атын және жақша
ішінде тиш көрсеплген аргументш жазудан тұрады, аргументтер
бірнешеу болуы да мүмкін. Функция тақырыбында, алғашқы жолында көрсетілген аргументтер формальды параметрлер деп ата­
лады. Функция тақырыбынан соң, жүйелі жақшаларға алынған
оның ішкі жұмыс операторлары орналасады, мұнда ол бір ғана оператордан кұралған. Бұл l e n t h () функциясы аргументінің нақты
мэні m ain ( ) функциясындағы оны шақыру кезінде анықталады,
оны нақгы параметр деп атайды. Функцияны шақыру кезіндегі
нақты параметр типі оның бастапқы жариялануы кезінде берілген
формальды параметрі типімен бірдей болуы тиіс.
Функцияны жариялау кезінде көрсетілген v o i d түйінді сөзі
функцияның ешқандай да мэн қайтармайтындығын білдіреді.
Көбінесе осындай қолданушы анықтаған функция оны шақырган
m ain () функциясына мэн қайтарып беруі керек. Қайтарылатын
мэн r e t u r n операторы арқылы көрсетіледі.
return операторы. Функциядан кері оралу операторы r e t u r n
функция жұмысын аяқтап, басқаруды оны шақыру нүктесінё
береді. Оператордың жазылуы:
r e t u r n [ өрнек ] ;
Егер ернек типі v o i d түрінде сипатталса, өрнек жазылмауы
тиіс.
94
С тілінің ANSI стандарты жэне C++ тілі қолданушы функциясының прототипін жариялауға қатаң талаптар қояды. Функ­
ция прототипінде оның типі, аты жэне формальды параметрлері
саны мен типтері толық көрсетіледі, параметрлердің аттарын
жазбауға да болады.
Сонымен, қолданушы функциясының прототипі былай көрсетіледі:
flo a t f u n c ( i n t n , flo a t f , lo n g d o u b le g ) ;
немесе
flo a t f u n c ( i n t , f lo a t , lo n g d o u b le ) ;
Енді осы айтылған тұжырымдарды колдана отырып, алдыңғы
мысалдың тағы бір нұсқасын келтірейік.
7.3 мысал.
/* Шеңбер ұзындығын табатын функцияны пайдалану, 2 нұсқа */
# i n c l u d e < s t d i o . h > / * енгізу/шызрару
директивасы , С т і л і н д е * /
flo a t l e n g t h ( f l o a t r a d i u s ) ; / * l e n t h ( ) функциясын, ягни оның п р ототи п ін хабар л ау * /
гоаіп()
/ * басты функцияны қолдану * /
{
flo a t r a d i u s ;
/ * нақты айнымалыны си п аттау * /
r a d iu s = 5 . 5 ;
p r i n t f ("Радиусы %f шеңбер үзындығы % f \ п " ,
r a d iu s , le n g th (r a d iu s ));
/ * l e n t h функциясын шақыру * /
p r i n t f ("Радиус е н г і з і ң і з : ") ;
s c a n f ( " % f " ,& r a d iu s ) ;
p r i n t f ("Радиусы %f шеңбер үзындыга % f\n",
r a d iu s , le n g th (r a d iu s ));
/ * l e n g t h функциясын шақыру * /
}
flo a t l e n g t h ( f l o a t r)
/ * l e n g t h функциясын анықтау * /
retu rn 2 * 3 .14159*r;
)
Бұл мысалда l e n g t h () функциясы r e t u r n
арқылы 2*3.14159*r мэнін қайтарады.
95
операторы
Сонымен, функцияны қарапайым анықтау форматы мынадай
болады:
,
. м
т и п і аты ( [ п ар ам етр л ер і ] )
{
функцияның іш к і орындалатьш операторлары
}
. , ;і
Г
Енді программалау оқулықгарында жиі кездесетін "Сэлем,
элем!" сөзін ағылпшн тілінде экранға шығаруды, C++ тілінің
қолданушы функциясы арқылы орындайық.
7.4 мысал.
# i n c l u d e < i o s t r e a m . һ>
v o i d h e l l o ()
{
Щ
c o u t « " H e llo , w o r ld ! \n " ;
>
I
v o i d m a in ()
{
h e llo ();
'Ш
......
Я
}
Щ
Ш
.I
Программаны орындау нэтижесі:
H e l l o , w o r ld !
Мұнда қолданушы функциясы толығынан негізгі m a in ()
функциясынан бұрын анықталған, сондықтан функция прототипін
жазу қажет емес, оның орнында функцияның анықталуы тұр.
Бір функция орындалуы барысында келесі басқа функцияны
шақыруы мүмкін. Мысалы, келесі программада екі функция
қолданылады. Алдымен m ain функциясы h e l l o 3 функция­
сын шақырады, ал ол функция ішінде h e l l o функциясы цикл
операторы аркылы үш қайтара шақырылады. Қолданушы функцияларын жазғанда, онда айнымалыларды пайдалану қажеттілігі туындайды. Айнымалылар m ain функциясындағы тәрізді
функцияда да жариялануы, яғни алдын ала сипатталуы қажет.
7.5 мысал.
/ / C++ т і л і н д е жазылған программа
# i n c l u d e < io s t r e a m .h >
v o i d h e l l o ()
{
c o u t « " H e llo , w o r ld ! \ n " ) ;
}
96
v o i d h e l l o _ 3 ()
{
i n t n;
f o r (n * 1 ; n <= 3 ; n++)
h e llo ();.
}
v o i d m a in ()
{
h e l l o _ 3 () ;
}
П рограмманы оры ндау нэтиж есі:
H e l l o , w o r ld !
H e l l o , w o r ld !
H e l l o r w o r ld !
Келесі бөлімдерде осы С жэне C++ тілдерінің мүмкіндіктерінің
екеуінен де мысалдар келтіріледі, бірақ бір программада бұл
екеуін араластырмай, жеке-жеке қарастыру ұсынылады.
7.2 Айнымалылар мен өрнектерді пайдалану ерекшеліктері
Айнымалылар деп мэліметтердің белгілі бір типін сақтайтын
компьютер жадының ат қойылған аймағын айтуға болады.
Қолданылудан бұрын әрбір айнымалы сипатталуы тиіс. Бүтін а
айнымалысы мен нақты х айнымалысын сипаттау мысалы:
i n t a ; flo a t x ;
Айнымалыларды сипаттау операторының жалпы жазылуы:
[жады класы] [ c o n s t ] т и п і аты [и н и ц и ал и затор ];
Осы оператордың құрамдық бөліктерінің берілу ережелерін
қарастырайық.
□ Міндетті түрде жазылмайтын жады класы мынадай мәндердің
a u t o , e x t e r n , s t a t i c жэне r e g i s t e r бірін қабылдайды. Олар жайлы төменде айтылады.
□ Модификатор болып табылатын c o n s t түйінді сөзі айнымалының мэні өзгертілмейтінін көрсетеді. Мұндай айнымальгаы атаулы константа немесе жай константа деп атайды.
□ Сипаттау кезінде айнымалыға бірден бастапқы мэн беруге бо­
лады, оны инициалдау деп атайды. Инициализатор мэнін екі
түрде жазуға болады - меншіктеу таңбасы арқылы:
= МӘНІ
немесе жай жақша ішінде:
(м ә н і)
Константалар хабарлау кезінде инициалдануы тиіс. Бір операторда типтері бірдей болып келген бірнеше айнымалыларды
үтірлер арқылы бөле отырып сипаттауға болады.
Мысалдар:
s h o r t i n t a = 1;
/ / б ү т ін а айнымалысы
c o n s t c h a r С = ' С ' ; / / символдық С константасы
s , s f = ' f 1;
/ / тек s f айнымалысы инициалданған
c h a r t (54) ;
|
/ / t - г а 5 4 - т і менш іктеу (инициалдау)
f lo a t с = 0 .2 2 ,х (3) , sum; / / жариялау, инициалдау
Егер инициалдау кезінде меншіктелген мэннің типі айнымалы
типіне сәйкес келмесе, онда белгілі бір ережелер бойынша типті
түрлендіру операциясы орындалады.
Айнымалы сипаттамасында оның типі мен жады класынан басқа келісім бойынша айнымалының әрекет ету аймагы
беріледі. Жады класы мен әрекет ету аймагы тек айнымалы сипаттамасына ғана байланысты емес, ол программадағы сипатталудың
жазылған орнына да байланысты болады.
Идентификатордың әрекет ету аймағы - бұл оның өзімен
байланысқан жады аймағымен қатынас құру үшін пайдалануға
болатын программа бөлігі. Әрекет ету аймагына байланысты ай­
нымалы локальдік (жергілікті) немесе глобальдік (ауқымды) бо­
луы мүмкін.
Егер айнымалы блок ішінде (блок жүйелі жақшалармен шектелген бөлік) анықталган болса, онда ол локальдік болып табылады, оның әрекет ету аймағы - сипатталу нүктесінен бастап, осы
блок соңына дейін, бұған ішкі блоктар да кіреді. Егер айныма­
лы кез келген блоктардан тыс, солардың сыртында анықталган
болса, онда ол глобалъдік болып саналады да, оның әрекет ету
аймагы осы файлдагы сипатталу нүктесінен оның аягына дейін
болып есептеледі.
98
Айнымалының пайдаланылу мерзімі тұрақты (программаның орындалуы кезеңінде) жэне уақытша (блоктың орындалуы
кезеңінде) болуы мүмкін.
Идентификатордың көріну аймағы деп идентификатормен
байланысты жады аймағымен қарапайым қатынас кұра алатын
программа бөлігін айтады. Көбінесе көріну аймағы эрекет ету
аймағымен бірдей болады, тек ішкі блокта сыртқы аймактағы
айнымалымен аттас болып келетін айнымалы сипатталған кезде
ғана айырмашылық туындайды. Мұндайда сыртқы айнымалының
эрекет ету аймағы блоктарға да катысты болғанымен, ол ішкі
блокта корінбейді. Дегенмен, сыртқы айнымалы глобальдік бо­
латын болса, көріну аймағына қатынасу операциясын (::) қолдана
отырьга, оны пайдалануға болады.
Жады класы программалык объектінің (немесе айнымалының) пайдаланылу (өмірлік) мерзімін жэне көріну аймагын
анықтайды. Егер жады класы анык көрсетілмесе, онда компиля­
тор айнымалының хабарлану мэтініне қарай оны өзі анықтайды.
Жады класын тағайындау үшін келесі спецификаторлар қолданылады:
a u t o —автоматтық айнымалы. Бұл айнымалы үшін жады
стектен бөлінеді жэне қажеттілігіне қарай оның сипатталуы
көрсетілген оператор орындалған сайын инициалданады. Осы ай­
нымалы сипатталған блоктан шықкан кезде оған бөлінген жады
босатылады. Оның қолданылу мерзімі - сипатталуынан бастап,
блок соңына дейін жалғасады. Глобальдік айнымалыларда бұл
спецификатор қолданылмайды, ал локальдік айнымалылар үшін
ол үнсіз келісім бойынша орнатылады, сондықтан оны жазбауға
болады, яғни айнымалы үшін жады класы нақты көрсетілмеген
жагдайда, ол a u t o класына жатқызылады.
—
сипатталатын аинымалының програм
басқа жерінде (басқа файлда немесе мэтіннің кейінгі жағында) анықталғанын білдіреді. Бұл спецификатор осы айнымалы
сипатталған' программаның барлық модульдерінен оған кол
жеткізуге болатын мүмкіндік жасауда қолданылады.
- статикалық айнымалы. Қолданылу мерзімі 1 Егер айнымалы белгілі бір операторда инициалданатын болса, онда
мұндағы
«й Я
®
л .Л
%
99
ч%
L
£
явШ
1
тұрақты. Айнымалы анықталатын операторды алғашқы рет
орындаған кезде бір рет инициалданады. Статикалық айны­
малы оны сипаттайтын оператордың тұрған орнына байланы­
сты глобальдік немесе локальдік болуы мүмкін. Глобальдік
айнымалы тек өздері сипатталган модульде ғана
көрінеді.
регистрлік айнымалы, a u t o спецификато­
ры секілді, бірақ мұнда жады мүмкіндігінше процессор регистрлерінен бөлінеді. Егер компилятордың ондай мүмкіндігі болайнымалы a u t o айнымалысы сияқты
өңделеді.
i n t a;
/ / l a р л о б а л ь д ік айнымалы
i n t m a in ()
{ in t b ;
/ / 2 b л о к а л ь д ік айнымалы
e x t e r n i n t x ; / / 3 x айнымалысы б а сқ а жерде
//
s t a t i c in t с;
/ / 4 c л о к а л ь д ік статикалық
/ / айнымалы
a
/ / 5 г л о б а л ь д ік айнымалыга
1;
/ / менш іктеу
i n t a;
/ / 6 а л о к а л ь д ік айнымалы
a = 2;
/ / 7 л о к а л ь д ік айнымалыға
/ / менш іктеу
a
3;
/ / 8 ғ л о б а л ь д ік айнымалыға
/ / менш іктеу
r e t u r n 0;
}
in t X
4;
И 9 x - T i анықтау жэне инициалдау
Бұл мысалда а глобальдік айнымалысы блоктардан тыс
жарияланган. Оган жады - программа жұмысы басында мэліметтер сегментінде бөлінеді. Көріну аймағы - 6-8 жолдардан
басқа программаның толық аймағы, өйткені 6-жолда глобальдік
айнымалымен аттас локальдік айнымалы анықталған. Мұндагы
Ь жэне с
локальдік айнымалылар, олардың көріну аимағы
блок, бірақ пайдаланылу кезеңдері эртүрлі: b үшін жады блокқа
кірерде стекте бөлінеді де, одан шығарда жады босатылады. Ал
с айнымалысы мэліметтер сегментінде орналасады да, оны про­
грамма жұмыс істеп тұрғанда пайдалана беруге болады.
100
Егер айнымалыға анықталу кезінде нақты мэн берілмесе, ком­
пилятор глобальдік және статикалық айынымалыларға типтеріне
сәикес нөлдік мэн меншіктеиді, ал автоматтық аинымалыларға
мэн тағайындалмайды.
Айнымалы аты өз әрекет ету аймағында бірегей болуы тиіс
(мысалы, бір блокта аттары бірдей екі айнымалы болмауы керек).
Айнымалы аттарын магынасына қарай беруге тырысу қажет.
Оның аты сол шаманың не екенін, не істейтінін көрсетіп, жеңіл
оқылатындай дәрежеде болуы қажет. Атауларда бір-біріне ұқсас
шатастырып алатындай символдар араласпағаны дұрыс, мысалы,
1 (бір), 1 (кіші L) немесе I ( і бас эрпі). Жаңа атау табуға жалыкпай
ізденген абзал. Атаудың бөліктерін бір-бірінен айыру үшін астын
сызу таңбасын пайдалануға болады. Кеңінен қолданылатын,
көріну аймағы ауқымды айнымалыларға ұзынырақ ат (алғашқы
эрпі типті көрсететін сивол) беріп, бірнеше жолдарда ғана пайдаланылатын айнымалыларға бір символдан тұратын ат беріп,
оларға сипатталу кезінде түсініктемелер берген дұрыс.
Айнымалы сипаттамасы хабарлау немесе анъщтау түрінде
болуы мүмкін. Хабарлау компиляторға айнымалы типі мен жады
класын көрсетеді де, анықтау, оган қоса, компиляторға аинымалы типіне сәйкес жады бөлінетінін білдіреді. C++ тілінде көптеген
хабарлаулар, сонымен қатар, олардың анықтаулары да болып саналады. Жоғарыдағы мысалда 3 сипаттама берілген, олар хабар­
лау ғана, анықгау емес.
Айнымалы бірнеше рет жариялануы мүмкін, бірақ ол
программаның бір-ақ жерінде анықталады, өйткені хабарлау
айнымалының қасиеттерін сипаттайды, ал анықтау оны нақты
жады аймағымен байланыстырады.
Өрнектер. Кез келген программада есептеу жұмыстары
орындалады. Мәндерді есептеу үшін операндтардан, операция
таңбаларынан жэне жақшалардан тұратын өрнектер қажет бо­
лады. Операндтар есептеуге керекті мэліметтерді береді. Операциялар орындалуға тиіс амалдарды анықтайды. Өз кезегінде,
эрбір операнд өрнек немесе соның бір түрі, мысалы, константа
немесе айнымалы болып табылады. Операциялар приоритеттеріне (математикалық реттіліктеріне карай) сэйкес орындалады.
Олардын орындалу тәртібін өзгерту үшін жай жақшалар пайдаланылады.
101
I
Сонымен, константалардан, айнымалылардан, функциялардан жэне операциялар таңбаларынан орнектер кұралады. Әрбір
өрнек арифметикапыц операциялар таңбаларымен қажетті
жақшалар көмегімен біріктірілген бірнеше операндтардан (сан,
айнымалы, константа) тұрады. Математикадағы формулалар,
алгебрадағы көпмүшеліктер программалау тілінде тек осы өрнек
ұгымы арқылы беріледі.
Егер өрнек мэні бүтін немесе нақты сан болатын болса, ол
арифметикалық өрнек болып саналады. Арифметикалық өрнектерде мынадай операциялар: + - * / % болады. Жалпы өрнектер
бір жол бойына жазылады жэне олардағы операция реттілігі
жақшалармен анықталады. Өрнектерді жазу мысалдары:
і = і+ 1 ; k = 5 .3 5 ; x l= (-b + sq r t(Ь*Ь-4*а*с)) / (2 * а );
у = s q r t ( s i n ( х ) + 1 ); с = 2 * p i * r ; г = 1 9 .3 6 ;
Енді орнектер құрамы мен соларды жазу ережелерін қарастырамыз.
Көптеген арифметикальщ операциялар жай алгебралық өрнектердегі амалдар приоритетін (реттілігін, басымдылығьш)
сақтай отырып жұмыс істейді, алдымен көбейту, бөлу және
қалдық табу, соңынан — қосу мен азайіу орындалады.
Егер өрнекте реттілігі бірдей бірнеше амал қатар тұрса, олар
солдан оңға қарай орындалады. Мысалы, мына орнекте
i = k + d * i / m % n - l ;
арифметикалық амалдар мынадай ретпен атқарылады: көбейту,
бөлу, қалдық табу, қосу жэне азайту.
Бүтін сандарды бөлу операциясы: 7/4. Жауабы 1 болады.
Нақты жауабын алу үшін 7/4.0 немесе 7.0/4, әйтпесе (float)7/4 деп
жазу керек.
,
—»
ti,
Бөлгендегі қалдықты табу операциясы % болып белгіленеді.
Мысалы: 13%5 нэтижесі 3. % операциясын аралас, яғни нақты
сандармен орындау синтаксистік қате береді.
Арттыру, кеміту операциялары. С/С-и- тілдерінде инкре­
мент -н- (1-ге арттыру) жэне декремент — (1-ге кеміту) опера­
циялары бар. І++ - бұл постфикстік соңынан жазу формасы; ал
мынау ++j - префикстік форма (алдынан жазу. 3.1 кестеде осы
инкремент пен декремент амалдарының орындалу ережелері
көрсетілген.
102
Олардың бір-бірінен айырмашылығын төмендегі мысалдан
көруге болады:
k = а + (і+ + ) - d * (— j ) ;
мұнда амалдар мынадай реттілікпен орындалады:
— j ; k = a + i - d * j ; i = i+ + ;
7.1 кесте, Инкремент пен декремент амалдарын пайдалану
Опера­
ция
++
Операция
аты
Өрнектің
Атқарылатын әрекеттер
жазылуы
Алдымен а 1-ге артады, содан кейін
Инкременттің
++а
а-ның жаңа мәні осы а кездескен
префикстік
өрнекті есептеуде қолданылады
формасы
++
Инкременттің
постфикстік
формасы
Декременттің
префикстік
формасы
Декременттің
постфикстік
формасы
а++
Осы тіркес кездескен өрнекті есеп­
теуде а-ның ескі мэні қолданылады
да, содан кейін барып а-ның мәні
1-ге арттырылады
Ь
Алдымен b 1-ге кемиді, содан кейін
b-ның жаңа мәні осы b кездескен
өрнекті есептеуде қолданылады
—
Ь --
Осы тіркес кездескен өрнекті
есептеуде b-ның ескі мэні
қолданылады, содан кейін барып b
-ның мэні 1-ге азайтылады
Төменде көрсетілген белгі немесе белгілер тіркесі мағыналары:
= —меншіктеу оелгісі,
= - тендікті тексеру ("тең" дегенді білдіреді),
!= - теңсіздікгі тексеру ("тең емес" дегенді білдіреді),
&&- логикалық ЖЭНЕ (мысалы, мынадай шертты тексеру:
if (х>10 && х<20)),
II - логикалық НЕМЕСЕ (мысалы, мынадай шертты тексеру:
if (х — 1 II у != О».
Тағы бір мысал карастырайық.
/ * Программада C++ с т и л ін д е ә р т ү р л і арифметикалық
және
логикалық
операциялар
орындалады
*/
# i n c l u d e < io s t r e a m .h > / / ен гізу /ш ы га р у үшін
/ / тақырыптық файл
103
v o i d m a in ()
{
- ■' v<>
in t ii= 2 ,ij = 5 ,il,im ,in ;
/ * жариялау (айнымалылар т и п т е р ін к е р с е т у ) және 2 айнымалыны инициал­
д а у (бастапқы мән б ер у ) * /
d o u b le d k , da= 8 . 2 , d d = . 7 8 1 , d c = - 1 3 .1 ;
/ / жариялау, инициалдау
/* * * * * * * Арифметикалық ппррят^гя іілр орындау ****** * /
і і = 8 % і j ; cout «
"\n" « "8 % 5 = " « i l ;
/ / қалдық т а б у
dk — i i + i j * d c - 5 / i i + i j % i i ;
c o u t « " \ n " « "k = " « dk;
dk = ( i i + i j ) * d c - 5 / ( i i + i j ) % i i ;
c o u t « " k = " « dk; / * арифметикалық
операциялар р е т т іл і г і жақшалармен өзгертілхіен * /
dk = da + ( і і + + ) r dd * ( - - i i ) ;
c o u t « " k =" « dk;
dk = da + ( + + i i ) - dd * ( i i — ) ;
c o u t « " k = " « dk; / / инкремент пен д е к р е м е н т т ің
/ / п остф и к стік және п реф и к стік формалары
/*
* * * * * * * * * Логикалық операциялар *********
Мұнда i f шартты операторы қолданы лған. Егер
жақшадағы шарт ақиқат б о л с а , жақшадан к е й ін
тұр ған о п е р а т о р , ә й т п е с е одан к е й і н г і оп ер атор
орындалады * /
c o u t « "\n" « " In p u t i n t m = n = 5 ";
c i n » im » i n ;
i f (im == i n ) c o u t « "The c o n d i t i o n i s f u l f i l l e d " ;
c o u t « "\n" « " In p u t i n t m — 6 and i n t n = 3 ";
c i n » im » i n ;
i f (im != 5 && im > i n ) c o u t « "Both c o n d i t i o n s
are fu lfille d " ;
c o u t « "\n" « " In p u t i n t n = - 1 5 ";
c in » in ;
104
if
( im != 5 | | i n <= 1)
c o u t « "One o f t h e c o n d i t i o n s i s f u l f i l l e d \ n " ;
}
Программаны орындау нәтижелері:
8 %5 = 3
к = - 6 4 . 5 к = - 9 1 . 7 к = 9 .4 1 9 к = 8 .8 5 7
In p ut i n t m = n = 5 5 5
The c o n d i t i o n i s f u l f i l l e d
I n p u t i n t m = 6 and i n t n = 3 6 3
B oth c o n d i t i o n s a r e f u l f i l l e d
In p u t i n t n = -1 5 -1 5
One o f t h e c o n d i t i o n s i s f u l f i l l e d
Мұндағы үш i f операторларының да шарттары ақиқат болғандықтан, үш рет The condition is fulfilled (Шарт орындалды),
Both conditions are fulfilled (Екі шарт орындалды), One of the
conditions is fulfilled (Бір шарт орындалды) деген мәліметтер
шығарылды.
Бақылау сұрақтары
1. Стандартты функция мен қалдануиіы функциясының қандай айырмаиіылықтары бар?
2. Қалданушы функциясын анықтау дегеніміз не?
3. Формальды параметрлер мен нақты параметрлер қаида жазыяады ?
4. Функцияны жариялау кезінде көрсетілген v o id түйінді сөзі нені
білдіреді?
5. r e tu r n операторы қандай қьізмет атқарады ?
6. Функция прототипі дегеніміз не?
7. Қалдануиіы функциясын анықтау m ain () функциясына дейін орындала ма элде одан кейін атқарыла ма? Неге?
8. Қолданушы функциясын анықтау форматы қандай болады?
9. Айнымалыга бастапқы мэн беру қалай орындалады ?
10. Константалар қалай хабарланады ?
11. Айнымалының эрекет ету аймагы дегеніміз не?
12. Идентификатордың көріну аймагының оның эрекет ету аймагынан
айырмасы.
13. Жады класы түсінігі. Автоматтық айнымалылар дегеніміз не?
14. Статикалық айнымалының қандай ерекилелігі бар?
15. Класы e x te r n болып келген айнымалылар қандай болады? Регистрлік айнымалылар ше?
105
16. Глобапъдік айнымалы мен локальдік айнымалының айырмашылыгы.
17. Өрнек дегеніміз не?
^
18. Инкремент жэне декремент операциялары. Олардың префистік
дэне постфикстік формалары.
Тапсырмалар
1. Үш натурал сандар берілген. Олардың ең үлкен оргақ бөлгішін
(ЕҮОБ) анықтайтын функцияны құру керек.
2. Натурал N саны берілген. Ол екі х жэне у бүтін сандарыньщ
квадраттарының косындысына тең болатын болса N=x2+y2, онда х,
у сандарын анықтайтын функцияны құру керек.
3. Натурал N саны берілген. К2-ка бөлінетін жэне А?-қа бөлінбейтін
барлық натурал К -ларды табу керек.
4. Егер N цифрдан тұратын натурал санның цифрларыньщ косындысын п-ш\ дэрежеге шығарғанда, сол санның өзіне тең болатын болса, ондай сан Армстронг саны деп аталады (мысалы,
153-13+53+33). Екі, үш жэне торт цифрдан тұратын барлық Арм­
стронг сандарын табу керек.
5. Екі ұшбұрыштың тобелерінің координаталары берілген. Олардың
қайсысының ауданы үлкен екенін анықтау керек.
6. Жазықтықтағы үш түзу akx+bly = c k1 1 1,2,3) тевдеулерімен берілген. Егер ол түзулер қос-қостан қиылысып, үшбұрыш кұрайтын
болса, сол үшбұрыштың ауданын табу керек.
7. Екі жай санның бір-бірінен айырмашылығы 2-ге тең болса, олар
егіздер" деп аталады (мысалы, 41 және 43 сандары). [n, 2n] аралығындағы барлық "егіздерді" анықтау керек, мұндағы n-2-ден үлкен
бүтін сан.
Q
/~і т
ft і
= ~
~ анықтау керек, мұндағы nl=l '2*3#__*п, яғни п —
т!(п —т)!
'
'
саңьіньщ факториалы.
106
8 C/C++ ТІЛДЕРІНДЕ ОПЕРАЦИЯЛАРДЫ ОРЫНДАУ
Операциялар таңбалары. Операция (амал) таңбасы - бұл
операндтармен (сан, айнымалы немесе мәні анықталатын өрнек)
атқарылатын амалды анықтайтын бір немесе бірнеше символдар тіркесі. Олардыц арасына бос орын қоюға болмайды. Опе­
рациялар оған қатынасатын операндтар санына қарай унарлық,
бинарлық жэне тернарлық болып бөлінеді. Бір таңбаның өзі
тұрған орнына байланысты эртүрлі мағына беруі мүмкін.
C/C++ тілдеріндегі операциялар тізімі олардыц басымдылықгарына, яғни приоритеттеріне (приоритеттерініц кемуіне ка­
рай реттелген) байланысты төмендегі кестеде берілген. Ондағы
унарлық операция —бір орынды, бинарлық —екі орынды, тернарлы - үиі орынды операция деген ұғымды береді. Кестеге кірмеген
басқа операциялар кездескен кезінде түсіндіріледі.
8.1 кесте. C++ тілінің негізп операциялары
| Қысқаша сипатталуы____________________ _ _ J
Операция
Унаплык операциялар
++____________
_____
1-ге арттырү
1-ге кеміту
1
мәліметтің компьютер жадындағы енін (көлемін)
анықтау__________ ________ __________________
разрядтар бойынша кері жазу
логикалық терістеу
;— -\
' : арифметикалық терістеу (унарлық минус)
унарлық плюс
+__________
адресті алу________ ___________________________
&
♦
адрессіздендіру (нұсқауыш типі)_________________
компьютер жадын белу (беру)____________
new_______
_________________
1
delete_________ компьютер жадын босату
типті түрлендіру, жақша ішінде тип аты жазылады
(type)
Кинаплмк және теонарлық о п е р а ц и я л а р _________________ 1
*
көбейту_________________________ __________
б е л у ___________________________ __________
бөлгендегі қалдықты табу_____________________
%___________
қосу_______________ ________________________
+
—
азайту___________ __ _______________________ J
sizeof
•
_________
7
________________________
107
солға ығысты
оңға ығысты
кіші
кіші немесе тең (артық емес)
лкен
лкен немесе тең (кем емес)
теңД I
тең емес
азрядтар бойынша конъюнкция (ЖӘНЕ)______
разрядтар бойынша арифметикалық (аласталған)
НЕМЕСЕ
Ш Ш ЯШ Ш Ш Ш Ш Ш Ш Ш Ш
азрядтары бойынша дизъюнкция (НЕМЕСЕ)
логикалық ЖЭНЕ
логикалық НЕМЕСЕ
шартты операция (тернарлық)
меншіктеу
★
—
көбейтіп алып меншіктеу
бөліп алып меншіктеу
қалдыуты тауып алып меншікте
қосып барып меншікте
азайтып барып меншіктеу
солға ығыстырып алып меншіктеу
оңға ыгыстырып алып меншіктеу
+=
»=
орындап
меншіктеу
орындап
алып меншіктеу
разрядтар бойынша арифметикалык НЕМЕСЕ
амалын орындап алып меншіктеу
тізбектеп есептеу
А_
_
Кестедегі шартты жэне
асыра жүктеле береді.
операцияларьшан басқалары
8.1 Операцияларды орындау
- t — і -------- ------------- A
приоритеттеріне
i s j i i f i i
(басымдылығына) қарай 8.1-кестеде берілген.
орындалуын
тырайық.
чана
Л
м.
108
Арттыру немесе кеміту (инкремент жэне декремент) операциялары ++ жэне — түрінде жазылады, олар туралы жога­
рыда айтылды.
Префикстік түрде (++х н ем есе - -х ) алдымен операнд
өзгертіліп, сонан соң оның мэні өрнектің нәтижелік мэніне айналады, ал постфикстік түрде (х++ немесе х - - ) өрнек мэні
операндтьщ бастапқы мэнін қабылдайды да, операнд сонан кейін
өзгереді. Бұлар жасырьш түрдегі меншіктеу амалы болып табылады. Олар жеке оператор түрінде де жазылады:
і + + ; немесе + + і ;
Бұл екеуі де мынадай амалмен бірдей болып саналады
і = і + 1;
Мысалы:
k=10;
x=k++; // х=10 k=ll
x=++k; // x=12 k=12
Арттыру/кеміту операцияларын өрнек ішінде де орындау
мумкіндігі:
sum=a+b++ ; I I алдымен а, b қосылады, сонан соң b 1-ге артады
sum=a+ + + b ; / / алдымен b 1-ге артады, сосын барып а, b
/ / қосылады
Арттыру/кеміту операцияларының приоритеттері өте жогары,
тек жақша ішіндегі операциялардың приоритеті олардан жоғары
болады.
8 .1 м ы с а л .
# in c lu d e < s t d i o .h > / / С т і л і с т и л ін д е г і программа
i n t m a in ()
{
i n t x = 3 , У = 3;
p r i n t f ("Префикстік өрнек м ә н і: %d\n", + + х ) ;
p r i n t f ("П остфикстік өрнек м ә н і: %d\n", у + + ) ;
p r i n t f (" Ө зг ер т іл г е н х м ә н і: %d\n", х ) ;
p r i n t f (" Ө эгер т іл г ен у м ә н і: %d\n", у ) :
retu rn 0 ;
}
Программа жұмысынын нәтижесі:
Префикстік ернек м ә н і: 4
109
К
П остф икстік өрнек м ә н і : 3
Ө з г е р т іл г е н х м ә н і : 4
Ө з г е р т іл г е н у м ә н і : 4
Жалпы инкремент операциясының операнды L-мәні (L-vaІие) болды деп айтылады. Мұндай түрде мэн енгізуге болатын
белгілі бір жады аймағын нөмірлеуді (адрестеуді) жүзеге асыРатын кез келген өрнек белгіленеді. Бұлай атау меншіктеу операциясына байланысты туындаған, өйткені оның сол жақ бөлігі
(Left) операция нәтижесінің жады аймағының қай жеріне орналасатынын анықтайды. Айнымалы L-мәнінің бір түрі болып табылады.
Компьютер жадындағы мәлімет колемін (мөлшерін, енін)
анықтау операциясы — sizeof объектінің немесе типтің алатын
орнын байтпен анықтап береді, оның екі түрі бар:
s i z e o f ( тип )
Енді C++ тілінде бір мысал келтірейік.
8.2 мысал.
•<
# i n c l u d e < io s t r e a m .h >
i n t m a in ()
ел P:\MyProjects\sizeofO\Debug\sizeofO
s ize o f <float>: 4
sizeof x: 4
s i z e o f <x + 1 . 0 > : 8
Press any key to c o n t i n u e _
8.1-сурет. 8.2 -мысал нәтижесі
{
f lo a t
cout
«
cout
cout
x = 1;
« " s i z e o f (flo a t) :"
s i z e o f (flo a t) ;
« " \ n s i z e o f x :" « s i z e o f x ;
«
" \ n s i z e o f (x + 1 . 0 ) :"
110
1
I
!
« s i z e o f (x + 1 . 0 ) ;
r e t u r n 0;
}
Программа жұмысы нәтижесі 8.1 суретте көрсетілген.
Компьютер жадындағы бүтін сандар типтерінің енін анықтау
программасы төмендегідей болады.
8.3 мысал.
# in c lu d e < iostrea m .h > / / C++ т іл ін д е берілген
i n t mainQ
{ c o u t « " sh ort t y p i e n i: " « s iz e o f ( s h o r t ) «
"byte" « en d l;
cout « " in t ty p i e n i: " « s i z e o f (in t) « " byte"
« e n d l;
oout « "long ty p i eni: " « s iz e o f (long) « " byte"
« e n d l;
c o u t « "signed s h o r t t y p i e n i: " «
s i z e o f (sig n e d sh o rt) « " byte" « en d l;
c o u t « "signed i n t t y p i e n i: " « s i z e o f (sig n ed
in t)
« " byte" « en d l;
c o u t « "signed lo n g t y p i e n i: " « s i z e o f ( s i g n e d
lon g) « " byte" « en d l;
c o u t « "unsigned s h o r t t y p i e n i: " «
s i z e o f (unsigned sh o rt) « " byte" « e n d l;
c o u t « "unsigned i n t t y p i e n i: "
« s iz e o f ( u n s ig n e d i n t ) « " byte" « en d l;
c o u t « "s h o r t t y p i e n i : "
« s i z e o f (unsigned long) « " byte" « en d l;
retu rn 0;
}
Терістеу операциясы (-, ! және ~). Арифметикалық теpic mey (унарлық минус -) бүтін немесе нақты типтегі операндтың таңбасын қарама-қарсыға ауыстырады. Логикалыц
терістеу (!) операнд ақиқат болса, 0 мэнін жэне операнд нөлге
тең болмаса (нөл емес), 1 мэнін береді. Операнд бүтін немесе
нақты типте немесе нұсқауыш типінде болуы тиіс. Разрядтар
111
Ill
D:\MyProjects\sizeof\Debijg\sizeof.exe
sh o r t t y p i e n i : 2 b y te
in t t y p i e n i : 4 b y te
l o n g t y p i e itii: 4 b y t e
s ig n e d s h o r t t y p i e n i : 2 b y te
s ig n e d in t t y p i e n i : 4 b y te
s ig n e d lo n g t y p i e n i : 4 b y te
u n s ig n e d
h o r t t y p i e n i : 2 b y te
Iu n s i g n e d i n t t y p i e n i : 4 b y t e
s h o r t t y p i e n i : 4 b y te
II P r e s S А П U, ke U tn nnn^innp
any k ey to c o n tin u e
V■
I
_ж_a_
_ _
fc
w__»
^
ь**a^ ■
*■
.•
^ m—
-■
* »*
^рЗВ^вДВ
8.2-сурет. Бүтін сандар типтерінің енін аныісгау программасы нәтижесі
биттік терістеу деп аталады
бүтін
Мысалы
~11101102=00010012 = 9]0.
Бөлу (/) және қалдық таі
тикалық типтегі операндтарға
бүтін сан болса, бөлінді бүтін
118 10
арифме
V*
тағаиындалады
Қалдық табу операциясы тек бүтін типтегі операндтарға
қолданылады.
8.4 мысал.
# i n c l u d e < s t d i o . h > / / С т і л і с т и л ін д е
i n t m ain () {
in t х
4;
11, У
flo a t z
4;
p r i n t f ("Белу н ә т и ж е с і: %d %f \ n", x / y , x / z ) ;
p r i n t f ("Қалдық: %d\n", x%y) :
r e t u r n 0;
}
Программа жұмысы нэтижесі:
Белу н ә т и ж е с і: 2 2 . 7 5 0 0 0 0
Қалдық: 3
112
Ыгыстыру операциясы ( « жэне » ) бүтін сан түріндегі
операндтарға қолданылады. Олар бірінші операндтың екілік
бейнесін екінші операндта көрсетілген санға сәйкес оңга ( » )
немесе солға ( « ) ыгыстыру ісін агқарады. Солга ( « ) ыгыстыру
кезінде босаған разрядтар нөлдермен толтырылады. Ал оңга ( » )
ыгыстыру кезінде босаған разрядтар, бірінші операнд таңбасыз
типте болғанда, нөлдермен толтырылады. Егерде бірінші операнд
таңбалы типте болса, онда босаған орындар таңба разрядымен
толтырылады. Ыгыстыру операциялары толып кету (переполне­
ние) және санның дэлдігін жоғалту әрекеттерін есепке алмайды.
Қатынас операциялары (<, <=, >, >=, = , !=) бірінші операндты екінші операндпен салыстырады. Операндтар арифметикалык
немесе нұсқауыштық типте болуы мүмкін. Операция нәтижесі
true немесе false болады (нөлге тең емес кез келген мэн нәтижесі
true). Теңдікпен жэне теңсіздікпен салыстыру операцияларының
приоритеті баска салыстыру операцияларынан томен болып саналады.
Екі шаманың тең екендігін ( = ) тексеру операциясы мен
нәтижесі сол жақ операндқа берілетін мэн болып табылатын
меншіктеу операциясынын (=) айырмашылыгына назар аудару
кажет.
Екілік разрядтар бойынша орындалатын операциялар
( &, I , *) тек бүтін санды типтегі екілік жүйедегі операндтарга
қолданылады. Бұл операцияларды орындау барысында операндтар биттер бойынша қарастырылады (бірінші операндтың бірінші
биті екінші операндтың бірінші битімен, бірінші операндтың
екінші биті екінші операндтың екінші битімен, т.с.с. салыстырылады).
Разрядтық конъюнкцияда немесе разрядтық ЖЭНЕ (опе­
рация & болып белгіленеді) операциясында логикалык көбейту
амалы орындалады да, тек екі операндтың да сәйкес орындардағы разрядтары 1-ге тең болган жағдайда нәтижелік бит 1-ге тең
болады.
Разрядтық дизъюнкцияда немесе разрядтық НЕМЕСЕ (опе­
рация I болып белгіленеді) операциясында логикалык косу ама8 -1660
113
1-операнд
2-операнд
Нэтиже
0 0 1 1
0 1 0 1
0 0 0 0
1-операнд
2-операнд
Нэтиже
10 1 0 0 1 1
1 10 10 1
00 1000 1
лы орындалады да, екі операндтың тек біреуінің немесе екеуінің
де сэйкес орындардағы разрядтары 1-ге тең болган жагдай-да
нэтижелік бит 1-ге тең болады.
Разрядтар бойынша аластайтын НЕМЕСЕ (операция л бо­
лып белгіленеді) операциясында екі операндтың тек біреуінің
1-операнд
2-операнд
Нэтиже
0 0 1 1
0 1 0 1
0 1 1 1
1-операнд
2-операнд
Нэтиже
10 1 0 0 1 1
1 1 0 10 1
1 1 1 0 11 1
гана сэйкес орындарындагы разряды 1-ге тең болган жагдайда
нәтижелік бит 1-ге тең болады.
8.5 мысал.
# i n c l u d e < io s tr e a m .h >
v
1-операнд 0 0 1 1
2-операнд 0 1 0 1
Нэтиже
0 1 1 0
1-операнд 10 10 0 1 1
2-операнд
1 1 0 10 1
Нэтиже
110 0 110
i n t m a in () {
c o u t « " \n 6 & 5 = " «
(6 & 5 ) ;
c o u t « " \n 6 I 5 - " «
(6 I 5 ) ;
c o u t « " \ n 6 л 5 s* " «
(6 л 5) ;
re tu rn 0;
}
Программа жұмысының нэтижесі:
6 & 5 = 4
б I 5 = 7
б А 5 = 3
Операция:
&
1-операнд
1 10
2-операнд
10 1
Нэтиже
10 0
|
1 10
10 1
111
А
1 10
10 1
0 11
Логикалық операциялар (&& жэне ||). ЖЭНЕ (&&) мен
НЕМЕСЕ (||) логикалық операцияларының операндтары арифметикалық типте немесе нұсқауыш түрінде бола алады, мұнда
114
эрбір операциядағы операндтар таптері эр түрлі бола береді.
Операциялар орындалуы кезінде типтерді түрлендіру жасалмаиды, тек эр операндтың нөлге эквиваленттілігі бағаланады (нөлге
тең операнд false, нөлге тең емесі - true болып саналады).
Логикалық операцияның нәтижесі true немесе false болады.
Логикальщ ЖЭНЕ операциясындағы екі операндтың да мэні
true болғанда ғана оның нәтижесі true болады. Ал логикальщ
НЕМЕСЕ операциясындағы екі операндтың бірінің мэні true
болғанда, оның нәтижесі true болады. Логикальщ операциялар
солдан оңға қарай орындалады. Егер бірінші операндтың мэні
операция нәтижесін анықтауға жеткілікті болса, онда екінші
операнд мэні есептелмейді.
Сонымен, бірнеше шарттық өрнектерді біріктіру үшін келесідей логикалық операциялар қолданылады:
1) ЖӘНЕ && (and) операциясы;
fl && f2
2) НЕМЕСЕ II (or) операциясы; fl || £2 (| коды - 124 )
3) ТЕРІСТЕУ ! (not) операциясы.
!fl (!true = false,
!
! false = true)
Терістеу (EMEC) операциясының приоритеті оте жогары,
одан тек жақша ішіндегі мэндердің проритеті жогарылау бола­
ды. && операциясының приоритеті || (or) операциясымен салыстырганда жогары, ал осы екеуінің приоритеттері қатынас операцияларымен салыстырганда томен, меншіктеу операциясынан
жогары болады.
8.2 Меншіктеу операциялары
Меншіктеу операциялары символдар (=,+=, -=,*=, т.с.с.) арқылы жазылады. Меншіктеу операциясы программада аяқталган
оператор ретінде пайдаланылады. Кез келген ; таңбасымен
аяқталатын орнек меншіктеу операторы болып табылады. Өрнектің бір түріне бос оператор жатады, ол жай ; операторы.
Қарапайым меншіктеу операциясының жазылуы:
1_операнд = 2_операнд;
Бірінші операнд - L-м ән, ал екіншісі - өрнек болуы тиіс.
Алдымен оң жақта тұрган өрнек есептеледі, сонан соң оның
115
I
\
нәтижесі сол жақта көрсетіпген жады аймағына жазылады да
(мұның мнемоникалық ережесі: "меншіктеу - мэліметтерді сол
жаққа "беру"" ), онда бұрынғы сақталған мэлімет жойылады.
8.6 мысал.
# i n c l u d e < io s tr e a m .h > / / C++ т і л і н д е б е р іл г е н
i n t m a in ()
{
i n t a = 3, Ь = 5, с = 7;
a = b ; b = а ; с = с + 1;
c o u t « " а я* " « a ;
cout « " \t b = " « b;
cout « " \t с = " « с;
re tu rn 0;
>
Программа жұсысының нэтижесі:
4
а = 5Ь = 5 с = 8
C/C++ тілдерінде меншіктеу операторының бірнеше түрі бар.
Жалпы меншіктеу операциясьшың жазылу форматы мынадай
болады:
<айнымалы> = <айнымалы> < о п ер ац и я> < ө р н ек > ;
Мұны қьісқаша былай жазуға болады:
<айнымалы> < о п ер ац и я> = < ө р н ек > ;
Томенде бірнеше мысал келтірілген.
а= а+ Ь ;
а+ = Ь ;
а = а * Ь ; -> а* = Ь ;
а = а -Ь ; —> а -= Ь ;
а = а /Ь ; —> а /= Ь ;
C/C++ тілдерінде тізбектеле жазылған меншіктеу операцияларын да қолдануға болады. Мысалы:
sum = a = b ;
Мұнда меншіктеу операциясы оңнан солға қарай орында­
лады, яғни b-ның мэні а-ға меншіктеледі, ал а-ның мэні sum-ra
меншіктеледі.
■
•■
“■.п
Меншіктеу операцияларын былай да жазуға болады:
1 )а = (Ь = 1) + 2 ;
мұнда а = 3 , Ь=1.
2 )а = Ь = 1 + 2 ;
ал мұнда а = 3 , b = 3.
Тш
116
Дөңгелек жақшаға алынған кез келген меншіктеу опе­
раторы анықталған мәні бар өрнек болып табылады, мы­
салы: ( (s= 13+ 12) <=30) деген өрнек ақиқат мэнді болып табы­
лады.
Шартты операция (?:) шартты өрнек жазуға мүмкіндік береді,
яғнн берілген шартқа байланысты әр түрлі мэн қабылдайтын
иіартты өрнектер құрады. Бұл операция үшорынды болып та­
былады. Бірінші операнд арифметикалық типте немесе нұсқауыш
болуы мүмкін. Ол нөлге эквиваленттілік тұрғысынан тексеріледі
(нөлге тең операнд f a l s e , ал нөлге тең емесі - t r u e болып та­
былады). Егер оның шарты (бірінші операнд) ақиқат болса, өрнек
мэні екінші операндқа тең; егер жалган болса, онда - үшіншіге
тең. Жазылуы:
1_ оп еран д ? 2 _ о п ер ан д : 3 _ о п е р а н д ;
8.7 мысал.
# i n c l u d e < s t d i o .h >
i n t m a in (){
i n t a = 1 1 , b = 4 , m ax;
max = (b > a ) ? b : a ;
p r i n t f ( "М аксимум: %d", m a x );
re tu rn 0;
}
Программа жұмысының нәтижесі:
Максимум: 11
Тағы бір мысал келтірейік. Белгілі бір бүтін шама - і берілген п
санынан артық болмаса, бірге артады, әйтпесе бірге тең болады:
і = ( і < п) ? і + 1: 1 ;
Қалган операциялар кейін қарастырылады.
Өрнектер операндтардан, операция таңбаларынан жэне жақшалардан құралып, белгілі бір типтегі мэнді есептеу үшін қолданылады.
Өрнектерді жазу мысалдары:
і+1 5.35 (а+3.12)/5 (-b+sqrt(b*b-4*a*c))/(2*a) x & & y ||!z
Қатынас таңбасы арқылы біріктірілген екі арифметикалық
өрнек мэні ақиқат (0-ге тең емес) немесе жалган (0-ге тең) деп
айтылады. С тілінде логикалық тип түсінігі айтылмайды, ол C++
тілінде бар.
117
I
і
Операциялар өздерінің приоритеттеріне сэйкес орындалады,
приоритеттер (басымдық) жай жақшалармен реттеледі. Егер
өрнекте приоритеттері бірдей бірнеше операция - уиарлық
операциялар, шартты операция немесе меншіктеу операциясы
жазылса, олар оңнан солга қарай, ал басқалары солдан оңга
қарай орындалады. Мысалы, a=b=c тізбегі а= (b = c ) болып
саналады, ал а+Ь+с өрнегі (а+Ь) +с түрінде орындалады.
Күрделі өрнектердің ішкі мүшелерінің есептелу реттілігін анық
айту қиын, мысалы, мынадай өрнекте ( s i n (х+2) + c o s ( у + 1 ) )
синус косинустан бұрын есептеледі деп айтуға болмайды жэне
х+2 өрнегі де у+1 тізбегінен бұрын шыгарылады деп те тұжырым
жасауға болмайды.
Өрнектің есептелу нэтижесі оның мәнімен жэне типімен
сипатталады. Мысалы, а мен b - бүтін типтегі айнымалылар
ретінде мынадай түрде сипатталсын делік:
i n t а= 2 , Ь = 5 ;
, і
мұндағы а+Ь мэні 7 және типі i n t , ал a=b өрнегінің мэні a
айнымалысында орналасқан мэн болады да, оның тип де осының
типіндей болып келеді. Сонымен, C++ тілінде а=Ь—с деп жазуға
болады, мұнда алдымен b=c өрнегі есептеледі, сонан соң оның
нэтижесі а айнымалысына меншіктелетін операцияньщ оң жақ
операнды болып табылады.
Өрнекте эртүрлі типтегі операндтар қатар тұра береді. Егер
олар бір типте болса, онда нэтиже де сол типте болады, ал
үшін, қысқа типтер ұзынырақ типтерге белгілі бір ережелерге
сэйкес түрлендіріледі.
8.3
Типтерді түрлеидіру
Типтерді түрлендірудің екі түрі бар:
- шамалардың ішкі бейнесін өзгерту (дэлдікті жоғалту немесе
жоғалтпау арқылы);
1
( . ч т/
- шамалар ішкі бейнесінің тек интерпретациясын ғана озгерту.
Бірінші типке, мысалы, бүтін санды нақты санға (дэлдікті
жоғалтпай) жэне керісінше (дэлдікті жоғалту арқылы) түрлендіру
әрекеті жатады, ал екінші типке - таңбалы бүтін сандарды
таңбасыз типке ауыстыру әрекеттері жатады.
Жалпы, сандардың барлык мэндерін көрсете алатын кез кел­
ген жағдайда шамалардың c h a r , s i g n e d c h a r , u n s ig n e d
c h a r , s h o r t i n t жэне u n s ig n e d s h o r t i n t типтері i n t
типіне түрлендіріледі, ал кері жағдайда u n s ig n e d i n t типіне
ауыстырылады
Егер өрнекте эр түрлі типтегі сандар мен айнымалылар қолданылса, онда олар жалпы бір типке түрлендіріледі. Біз қарастырған
барлық негізгі типтер ішінде төменнен жоғары қарай багытталған
түрлендірілу реттілігі бар. Егер оларды оңған солға қарай реттеп
орналастырсақ, мынадай болып шығады:
char -> short -+ int -► long -> float - > double
Оң жақтағылары сол жақтағылардан гөрі жоғары дәрежелі бо­
лып табылады.
Егер char мен short типтері араласса, нэтижесі - short бола­
ды,
ал short пен int типтері араласса, нәтижесі —int болады,
ал int пен long типтері араласса, нәтижесі long,
ал long пен float типтері араласса, нәтижесі float,
ал float пен double типтері араласса, нәтижесі double болады.
Егер екі-үш тип араласып, ең үлкен дэрежелісі —float болса,
әрқаисысы да жэне нэтиже де осыган келтіршеді.
Компилятор типтерді автоматты түрде түрлендіру үшін төмендегі негізгі ережелер жиынын пайдаланады:
1. Егер операция екі түрлі типтегі мэліметтер үшін орындалатын болса, онда олар осы мәліметтер типтерінің арасындагы
"жоғарғы" типке келтіріледі.
2. "Жоғары" типтен бастап, "томен" типке дейін реттелген
типтер атгарының тізбегі келесідей түрде көрсетіледі:
d o u b le
a
flo a t
lo n g
in t
short
char
Меншіктеу операторында оң жақта орналасқан өрнектің
есептелген нэтижесі осы оператордың сол жагына жазылган
айнымалының типіне келтіріледі. Осындай процесс типтің
"жоғарысына" немесе "төменіне" келтірілуі мүмкін.
119
I
8.8 мысал.
f
# i n c l u d e < s t d i o . h > / / С т і л і стилінде
# i n c l u d e < c o n io .h >
main ()
{
j
'.Л
char ch;
K
i n t i ; f lo a t fl;
fl= i= c h = 1A 1 ;
p r i n t f ("ch=%c i=%d fl=% 6.2f\n" , c h , i , f l ) ;
/ / ch=A i= 6 5 П= 6 5 .0 0
ch=ch+1;
/ / ch=66
i= fl+ 2 * ch ;
/ / 1 = 6 5 .0 0 + 2 * 6 6 = 1 9 7
fl=2 . 0 * c h + l ;
/ / fl= 2*66+ l= 133
p r i n t f ("ch=%c i=%d fl=% 6.2f\n" , c h , i , f l ) ;
>
/ / ch=B i= 1 9 7 fl= 1 3 3 .0 0
Келтіру операциясы. Жоғарыда көрсетілген типтердің түрлендірілуі автоматты түрде орындалады. Мәліметгердің көрсетілген қажетті типіне келтіру үшін C/C++ тілінде арнайы бір
тәсіл бар. Бұл тәсілде типтерді бірыңғайлау үшін, айнымалының
алдында дөңгелек жақшада қажетті типтің аты жазылады. Жалпы
түрге келтіру операциясы мынадай болып жазылады:
(тип) ернек. Мысалы:
i n t m;
flo a t х , у ;
y=pow ( х , 2 ) + s q r t ( (double)m ) ;
Сонымен, ең қарапайым программаның өзі белгілі бір ережелерге сәйкес жазылса, ол сенімді түрде жұмыс істейтін болады
екен.
Бақылау сурақтары
1. С тілінде қандай операциялар бар?
2. Меншіктеу операторының түрлері.
3. Мениііктеу операторының жазылу форматтары.
4. Арттыру немесе кеміту (инкремент жэне декремент) операциялары.
5. Префикстік жэне постфикстік операциялар.
8. Құрама операторлар қалай ұйымдастырылады ?
9. Бос оператор деген не?
120
10. Типтер ііиінде төменнен жогары царай багытталган түрлендірілу
реттілігі.
11. Келтіру операцияларыныц жазылуы.
Тапсырмалар
1.
А-ның берілген мәндері а) а = 1.0; э) а = 4; б) а = 5 болған кездердегі
х,Ь,а мәндерін анықтау керек:
Ъ = 2.4*а;
х = (a+b)/a*b-a;
х —а/Ь % Ъ;
b = а *а-2 *а;
а = (Ь++ +2)*(Ь- 1);
2. Төмендегі операгорларда жіберілген қателерді табыңдар
а) 2-х Шk 1 4;
э )х = х < 4 ;
д) * = а/- Щ
е )у = у > 2
б)х - Ъ,1А*а\
ж) 5 = а - Ь ;
з)/7 = 5.5 % 2;
и) х = sinx + cosx;
в) 3*к = ш;
г) -w 1 1 + Ь;
3. Төмендегі өрнектерді алгоритмдік тілдерде жазындар:
*2+1
* > '"
“ V5jc-1
«X
sin 2х+ tgx
ә) У
І
In
sinfcos х )+5,4 sin \ \х
б) У
cos x -sin X
4.
Кубтың қабырғапарының ұзындығы берілген. Оның көлемі мен
қабырғасының бетінің ауданын табыңдар.
5. Тікбұрышты үшбүрыштың катеттері берілгш. Оның гипотенузасы
мен ауданын табыңыздар.
6. Теңбүйірлі үшбұрыштың жақтары берілген Үшбұрыштың ауданын
табыңыздар.
7. х,, у, жөне х2, у2 координатапарымен берілген нүктелердің ара
қашықтығын табыңыздар.
121
I
8.
Нақты х саны берілген. Тек көбейту, қосу және азайту амалдарын
қолданып 2х4 - Зх3+ 4х2- 5х + 6 есептеңіз. 4 көбейту, 4 қсэсу және 4
азайту амалын қолдануға болады.
9. Нақты х саны берілген. Тек көбейту, қосу жэне азайту амалдарын
қолданып 1 —2х + Зх2 —4х3 и 1 + 2х + Зх2 + 4х3 есептеңіз. Тек 8
операция қолдануға болады.
10. х, у нақты сандары берілген. Тек 8 көбейту, 8 қосу жэне 8 азайту
амалдарын қолданып, Зх2у2 - 2ху2 - 7х2у - 4у2 + 15ху + 2х2 - Зх +
Юу + 6 есептеңіздер.
11. х, у, z мәндері берілген, а және b мәндерін есептеңіздер.
13. х, у, z мәндері берілген, а және b мәндерін есептеңіздер.
14. а және b нақты сандары берілген. Осы сандардың қосьшдысын, айырмасын және көбейтіндісін табыңыздар.
15. Екі нақты оң сан берілген. Осы сандардың арифметикалық және
геометриялық ортасын табыңыздар.
16. Екі нақты сан берілган. Осы сандардың абсолют шамасының арифметикалық және геометриялық ортасын табыңыздар.
17. Үшбұрыштың төбелерінің координатасы берілген. Үшбұрьпптың
периметірі мен ауданын табыңыздар.
18. Берілген a, dy п мэндері бойынша арифметикалық прогрессияның
мүшелерінің
a, a + d, ..., a + ( п —1 )d
косындысын табыңыздар
19. Тікбұрышты үшбұрыштың гипотенузасы мен катеті берілген.
Оның екінші катеті мен оған іштей сызылған шеңбердің радиусын
табыңыздар.
20. Бір бірінен г арақашықтықта орналасқан, массалары т1және w, екі
дене арасындағы Ғ тартылыс күшін анықтаңыздар.
21. Тастың һ биіктіктен жер бетіне құлау уақытын анықтаңыздар.
22. Шеңбердің ұзындығы белгілі. Осы шеңбермен шектелген дөңгелектің ауданын табыңыздар.
23. Ішкі радиусы 20-ға, ал сыртқы радиусы г ( г > 20 ) болатын
сақинаның ауданын табыңыздар.
122
9 C/C++ ПРОГРАММАЛАУ ТІЛДЕРІНІҢ ТАҢДАУ ОПЕРАТОРЛАРЫ
Компьютерлерде шығарылатын есептердің күрделіленуіне
байланысты программалардың көлемдері өсіп, оларды жазу, оқу,
түзету істері күннен күнге қиындап келеді. Белгілі бір өндірістік
мэселенің, мезгіл-мезгіл қайталаньш отыратын есептеулердің
программалары ұзақ уақыт пайдаланылады, олар күнделікті өмір
талабына сәйкес өзгертіліп, түзетіліп отыруы тиіс.
Осыларға байланысты программаларды құрастыруды, түсінуді, өзгертуді жеңілдететін тэсілдер жасалган, олар құрылымдық (структуралық) жэне объектіге багытталган программалау
жолдары деп аталады.
Программаларды адамның түсіну мен қабылдауын ыңгайлы
түрде жүргізуге багытталган тәсілдер жиынын құрылымды
программалау деп атайды. Әрбір жасалган программа бөліктері
бір-бірімен тыгыз логикалық байланыста болып, оның бір жерінен
екінші бір жеріне "секірулер" болмауы тиіс.
Құрылымды программалау - "go t o операторысыз програм­
малау" болып саналады, ягни шартсыз кошу операторын мүмкіндігінше пайдаланбауга тырысу керек, ойткені ол программа
логикасын түсінуді қиындатады. Бірақ кейде g o to операторын
қолдану кажет болатын кездер болады.
Кез келген программа саны шектелген стандартты логикалык
құрылымдардан тұрады. Негізгі логикалык құрылымдар туралы
бұдан бұрын айтьшган болатын, олар: сызықтьщ, тармақталу
жэне қайталау құрылымдары. Осы уш кұрылым программалаудың
базалық негізгі конструкциялары болып саналады, олар күрделі
программаларды жіктеп қарастыру мүмкіндігін береді.
Бұлар кұрылымдардың ең көрнекті ерекшелігі - олардың
орындалу алгоритмдерінің бір кіріс жэне тек бір шыгыс сызыгы
болады. Мұндагы әрбір құрылымдық бірлік бір оператордан,
біріктірілген операторлар тобынан немесе қабаттастырылган
құрылымдардан да тұруы мүмкін. Осындай программалар оңай
оқылады, түзетіледі жэне керек болса, оңай өзгертіледі.
C/C++ тілінде циклдің үш түрі, тармақталудың екі түрі бар.
Олар программалауды жеңілдету мақсатында жасалган, сон-
дықіан эроір жағдаида өзімізге ыңғаилысын таңдап алуымыз
керек. Ең бастысы —кез келген программа айқын, эрі нақгы түрде
құрастырылган жеке блоктардан тұруы тиіс.
Программа жұмысын басқару операторларын программаның
басқарушы конструкциясы деп атайды. Олар:
құрама операторлар;
;
таңдау операторлары;
цикл операторлары;
көшу операторлары.
Нүктелі үтірмен аяқталатын
:ептейтін меншіктеу операт<
саналады. Олар алдыңғы
өрнектің
(бұл
ще пайдаланылады). Мысалдар
к++;
ациясы орындалады
а*= Ь+с;
меншіктеу операциясы
орындалады
fu n (m,n) ; // функцияны шақыру операциясы орындалады
9.1 Тармақталу операторы
Тармақталу процестері бар алгоритмдерді ұйымдастыру үшін
шартты операторлар пайдаланылады. Тармақталу белгілі бір
шарттың орындалуы немесе орындалмауына тәуелді атқарылады.
Кейде бір тармақ ішінде ешбір амал орындалмай да қала береді.
Шарт ретінде логикалық өрнектің мэні пайдаланылады. С/С++
тілінде екі шартты оператор бар, олар: i f жэне s w itc h .
Шартты оператор. I f шартты операторы — программадагы іс-әрекеттердің табиги орындалу реттілігін өзгертетін
мумкіндіктің ең кең тараган тәсілі. Оның құрылымдық схемасы 9.1 суреттегідей болып өрнектеледі де, орындалуы кезінде
есептеу жолы екіге тармақталып кетеді. Суретте көрсетілген
құрылымдарға сәйкес бұл оператор мынадай түрде жазылады:
(өрнек) 1 -о п е р а т о р ; [ e l s e 2 -о п е р а т о р ; ]
(оқылуы i f - иф, e l s e - элс). Мұндагы 1-ші жэне 2-ші опеқұрама
мүмкін.
124
Алдымен i f сөзінен соң жазылатын өрнек түрінде берілген
шарт есептеледі, ол арифметикалық типте немесе нұсқауыштық
типте болуы тиіс. Егер ол шартгың мэні t r u e (иэ), яғни ақиқат
болса, онда 1-оператор атқарылады, онда e l s e сөзінен кейінгі
2-оператор атқарылмайды. Екінші жағдайда, шарт мэні f a l s e
(жоқ), яғни жалған болса, онда e l s e сөзінен кейінгі 2-оператор
атқарылып, 1-оператор атқарылмайды. I f операторлары бірінің
ішіне бірі кіріп қабаттасып та орындала береді.
Тармақгың бірі болмайтын жағдайда, e l s e сөзінен кейінгі
2-оператор жазылмайды. Егер бір тармақта бірнеше операторларды орындау қажет болса, оларды блок түрінде жүйелі жақшаға алып жазу керек, әйтпесе компилятор тармақтын қай нүктеде аяқталатынын анықтай алмай қалады. Блокта кез келген
операторлар жазыла береді, кейде онда тағы да шартты оператор
орналасуы мүмкін.
9.1-сурет. Шарггы оператордың кұрылымдык алгоритмі
Әдетте, шарт өрнегін жазу үшін катынас (салыстыру) белгілері
= , !=, >, >=, <, <= жиі пайдаланылады. Жалпы түрде шартгы к\
®к2 түрінде қарастыруға болады, мұнда ® — салыстыру белгілерінің бірі, к \ , к 2 - тұрақты, айнымалы немесе кез келген өрнек
болуы мүмкін. Бір мезгілде бірнеше шартты, ягни күрделі құрама
шартгы жазу үшін логикалық амалдарды пайдалануға болады.
Мысалдар:
if (а<0) b * 1;
// 1
if (a<b && (a>d || а = 0 ) ) b++; else {b *= a; a = 0;} / / 2
if (а<Ъ) {if (а<с) m=a; elsem=c;}
else {if (b<c) m=b; else m=c;>
//3
if <a++) b++;
if (b>a) max = b; else max = a;
125
// 4
//5
1 жолда e l s e тармағы жоқ. Бұл аттап өту құрылымына
сэйкес келеді, мұнда шартқа байланысты меншіктеу орындалады
немесе атталып өтіледі.
Егер бірнеше шарттарды қатар тексеру керек болса, оларды
логикалық операциялар таңбаларымен біріктіреді. Мысалы, 2
жолдагы өрнек а<Ъ шарты және жақшадағы шарттардың бірі
орындалған жағдайда ғана ақиқат болады. Егер ішкі жақшаларды
алатын болсақ, онда алдымен логикалық ЖӘНЕ (&&), сонан соң НЕМЕСЕ ( И ) операциялары орындалады.
3 жолдагы оператор үш айнымалылардың ішіндегі ең кішісін анықтайды. Мұнда жүйелі жақшаларды жазу міндетті емес,
өйткені компилятор операторлардың e l s e бөлігін оған ең жақын
тұрған i f операторымен байланыстырады.
4 жол і f операторында өрнек ретінде қатынас операциялары
жиі пайдаланганымен, ол да міндетті емес екенін көрсетеді.
5 жолда көрсетілгендей конструкцияларды шартты операция
түрінде жазған көрнектілеу болып табьшады (мысалы, мұнда:
max = (Ь > a) ? b
а;).
Кейде қабаттасқан шартты операторлар кездеседі (9.2 сурет),
мысалы:...............
I
|
f у > т |
i f (1-шарт)
1 - оператор;
e
l
s
e
i
f
(2
-шарт)
1-шарт
2 - оператор;
ИӘ
e lse
жоқ
3 - оператор;
Мұнда егер 1-шарт ақиқат
±
болса,
1
-оператор
орьшдала1-оператор 2-оператор 3-оператор
ды, егер 1-шарт жалган бо­
лып, 2-шарт ақиқат болса,
2-оператор орындалады, ал
9.2-сурет. Қабаттасқан шартты
1-шарт жэне 2-шарт жалган
операторлар схемасы
болса, 3-оператор атқарылады. Ондагы кез келген else түйінді сөзі (keyword) оның алдында
ең жақын тұрган if операторына қатысты болып саналады.
Мысалы, берілген х , у - екі санның үлкенін анықтау үшін жаз­
ылган шартты операторды былай жазуга болады:
1
126
і£
(х > у ) т а х = х ;
e l s e тах==ү;
Ал х, у, z сиякты үш санның үлкенін табу үшін, қабаттаскан шартты операторлар
жазылады (9.3 сурет).
i f (х> у)
( i f (x>z) ш а х = х ;
elзе maxsz;}
e l s e i f (y > z ) m ax=y ;
e l s e max=z;
жок
жок
max z
max*x
жок
max*y
Үш санның үлкенін
табу схемасы
Логикалық ЖЭНЕ операциясын пайдалана отырып, бұл есепті
мынадаи түрде жаза аламыз.
i f ( ( х > у ) &&(x>z))
оасьі
max=x;
x,y,z енгізу
e lse i f
((y>z)&&(y>x)) max=y;
max=x
e l s e m ax=z;
9.1 мысал. Осы алгоритмді
y>max
толығынан қысқаша шартты
max=y; |
жок
оператор аркылы орындаудың
блок-схемасы (9.4-сурет) мен
программасын келесі түрде
m ax=z
жок
жазып шығаиык.
# in c lu d e < s td io .h >
/ / С * іл і
# i n c l u d e < c o n io .h >
О
max
СОНЫ
9.4-сурет. Үш саннын үлкенін табу
схемасының екінші түрі
c lr s c r ();
i n t m ax^x^y^;
p r i n t f ("3 б ү т ін сан е н г і з і ң і з : " ) ;
s c a n f ("%d%d%d", fix, &y, &z) ;
127
i f (y>max) max=y;
i f (z>max) m ax= z;
p r i n t f ( "m ax=% d",m ax);
g e tc h ();
}
9.2
мысал. Формула арқылы берілген төмендегі у функциясын
есептеу программасын құрастыру керек.
# i n c l u d e < s t d i o . h > / / С т і л і с т и л ін д е
# i n c l u d e < c o n io .h >
m ain ()
{
c l r s c r ();
flo a t x , y ;
p r i n t f ( " x нақты санын е н г і з і ң і з : " ) ;
s c a n f ("%f" , & x);
i f (x<0) y=x+2;
e l s e y=2*x*x*x;
p r i n t f ("\ny=% f" ,y ) ;
g e tc h ();
}
9.3
мысал. Программаға бір жыл нөмірін енгізіп, сол жылдың
кәбисә (366 күн) немесе қарапайым жыл (365 күн) екендігін
анықтау керек. Ол үшін жылды төртке бөлеміз, егер қалдық 0-ге
тең болса, ол кәбисә жыл, эйтпесе қарапайым жыл болады.
# in c lu d e < s td io .h >
# i n c l u d e < c o n io .h >
m ain ()
{ in t g il;
i n t r ; /* g i l -ды 4 -к е б ө л г е н д е г і қалды қ * /
c lr s c r ();
p r i n t f ("Жылды, мысалы, 2007 е н г і з і п , E n t e r
128
r= g il % 4;
i f (r)
p r i n t f ( " % i жыл - қарапайым \ n " , g i l ) ;
e ls e
p r i n t f ( " % i жыл - к әб и сә \ n " , g i l ) ;
p r i n t f ("\п А я қ т а у үшін E n te r б а с ы ң ы з" );
g e tc h ();
}
9.4
мысал. Квадрат теңдеуді шешу программасын құру керек.
/* К вадрат т е ң д е у д і шешу * /
# in c lu d e < s t d i o .h >
# in c lu d e < c o n io .h >
# in c lu d e < m a th .h >
m ain ()
{
f lo a t a , b , c ;
f lo a t x l , x 2 , d ;
c lr s c r ();
p r i n t f ( " \ n * К вадрат т е ң д е у д і шешу * \ n " ) ;
p r i n t f (" a ,b , с мәндерін е н г і з і п , E n te r басыңыз: " ) ;
sc a n f(" % f% f% f" , & a,& b,& c);
d = b * b -4 * a * c ;
i f (d < 0)
p r i n t f ("Т е ң д е у д ің шешуі жоқ \ n " ) ;
e ls e {
x l= (-b + s q rt(d )) / (2 * a );
x 2 = (-b -s q rt(d )) / (2 * a );
p r i n t f ( "Т еңдеу т ү б і р л е р і : xl= % 3. 2 f
x2=%3. 2 f \ n " , x l , x 2 ) ;
}
p r i n t f ("\п А я қ т а у үшін E n te r б а с ы ң ы з");
g e tc h ();
}
9-1660
129
9.5 мысал. Төмендегі функция мэнін кез келген х үшін есептеу
керек.
О,
егер х < О
х2 - х, егер О< х < 1
sinnx2, егер х > 1
У
# in c lu d e < s td io .h >
# i n c l u d e < m a th .h >
#define p i 3 .1 4 1 5 9
m ain ()
{
f lo a t x , y ;
0 ;
p r i n t f ("Нақты сан т ү р ін д е г і x мәнін е н г і з і ң і з : ");
s c a n f(" % f" , & х);
,j
i f (х <= 0)
0;
У
e l s e i f (x < 1)
x*x - x ;
У
s in ( p i * x * x );
У
%10. 6 f \ n " , x , y ) ;
%f б о л ға н д а , у
p rin tf(" x
r e t u r n (0 );
}
9.6 мысал. Төменде алынған баллга сэйкес бағаны анықгау
программасы келтірілген.
бага
A
В
С
D
F
'А ,
В,
^ С,
D,
F,
егер
егер
егер
егер
егер
VO
•
•
•
О
балл
90...100
75...89
60...74
50...59
90
75
60
50
0
<
<
<
<
<
b a ll
b a ll
b a ll
b a ll
b a ll
130
<
<
<
<
<
100
90
75
60
50
# in c lu d e < s t d i o .h >
# in c lu d e < c o n io .h >
m ain ()
{
in t b a ll;
char baga;
c lr s c r ();
p r i n t f ("Балл мөлшері: " );
s c a n f(" % i" , S h a l l ) ;
i f ( b a l l >= 90)
b a g a « 'А ' ;
e l s e i f ( b a l l >= 75)
b a g a «* ' В ' ;
e l s e i f ( b a l l >= 60)
baga = 'С ';
e l s e i f ( b a l l >= 50)
b a g a m ' D' ;
baga = ' F ';
p r i n t f ("Б ағасы - %c, балл мөлш ері - %i
\n " ,b a g a ,b a ll) ;
p r i n t f ( " \пАяқтау үшін E n te r басыңыз" ) ;
g e tc h () ;
)
9.2 Switch көп нұсқалы таңдау операторы
Программада кездесетін бірнеше нұсқаның бірін таңдап
алу керек болған жағдайда, switch ауыстырғыш операторы қолданылады. Оператордың орындалу схемасы төмендегі 9.5 суретте
келтірілген. Оның жалпы жазылу форматы:
s w itc h < б ү т ін т и п т і өрнек>;
{
c a se б е л г іі: операторлар; b re a k ;
c a se б е л г і2 : операторлар; b re a k ;
[ d e f a u l t : о п е р а т о р л а р ;]
)
131
•в2
Мұнда switch сөзінен кейінгі өрнек мәні есептеледі, ол бүтін
санды (сһаг типі де) типте болуы тиіс. Сол мэн c a s e сөздерінен
кейін жазылған константалар мәндерімен салыстырылады. Егер
олардың біріне тең болса, сол жол орындалады, жол соңында
кошу операторы болмаса, келесі жолдар толық орындалады. Ал
бір жолды орындап болған соң, switch операторынан шығу үшін
b r e a k операторы қолданылады. Егер s w i t c h сөзінен кейінгі
өрнек мәні ешбір константамен сәйкес келмесе, онда d e f a u l t
сөзінен кейінгі операторлар атқарылады. Кейде d e f a u l t сөзі
болмауы да мүмкін.
|§8|
Өрнек?
1-белгі:
<операторлар>;
break;
2-белгі:
<операторлар>;
break;
3-бел гі:
<операторлар>;
n-белгі:
<операторлар>;
break;
break;
І
~
ш
9.5-сурет. Switch операторының орындалу схемасы
D e f a u l t созі болмаса, онда switch операторынан кейінгі
келесі операторлар орындала береді. Switch операторындағы
орнек түрінде нақгы типтегі мэліметтерді, соз тіркестерін (жол­
дарды) пайдалануға болмайды. Кейде бүтін мәндермен үйлестірілген мәліметгердің құрылымдық (структуралық) элементтері
қолданылуы мүмкін.
9. 7 мысал. Екі бүтін сан енгізіп, олармен арифметикалық 4 амалдың бірін орындау қажет.
# in c lu d e < s td io .h > / / С т іл ін д е
# i n c l u d e < c o n i o .h >
c h a r sym b ol;
in t x ,y ,z ;
c lr s c r ();
ijg c. gS
p r i n t f ("Екі б ү т ін сан е н г і з і ң і з : " );
s c a n f ("%і%і", & у,& z);
p r i n t f ("Қандай амал орындау керек: " ) ;
132
sca n f(" % s" , s y m b o l) ;
s w it c h (sym bol)
{ c a s e 1- ' : x = y - z ; b r e a k ;
c a s e ' + ' : x= y+ z; b r e a k ;
case
: x = y * z; b r e a k ;
case ' / ' : х = ү /z ; b reak ;
d e f a u l t : p r i n t f ( " б е л г і с і з о п е р а ц и я \п " );
p r i n t f ("\пН әтиж есі - % d\n",x);
g etch ();
)
9.8
мысал. Шығыс календары бойынша жылға сэйкес жануар
атын аныктау.
# i n c l u d e < io s t r e a m .h > / / C++ т і л і н д е
main ()
{
in t god;
c o u t « " Жылды е н г і з і ң і з : \ n " ;
c i n » god;
sw i t c h (god % 12)
c o u t « "Мешін жылы";b r e a k ;
{ case 0
c o u t « "Тауық жылы"; b r e a k ;
case 1
c o u t « "Иф жылы"; b r e a k ;
case 2
c o u t « "Доңыз жылы"; b r e a k ;
case 3
c o u t « "Тышқан жылы"; b r e a k ;
case 4
c o u t « "Сиыр жылы"; b rea k ;
case 5
c o u t « "Барыс жылы"; b rea k ;
case 6
c o u t « "Қоян жылы"; b r e a k ;
case 7
c o u t « "Үлу жылы"; b rea k ;
case 8
c o u t « "Жылан жылы"; b r e a k ;
case 9
c a s e 10 : c o u t « "Жылқы жылы"; b r e a k ;
c a s e 11 : c o u t « "Қой жылы"; b r e a k ;
d e f a u l t : c o u t « "Таңбасыэ б ү т ін сан е н г і з і ң і з
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
133
Switch орындалуы кезінде цикл аяқталмай-ақ одан шығып,
қалған операторларды аттап өтіп, осы цикл параметрінің келесі
мәніне көшу үшін continue операторы қолданылады, яғни циклдің
келесі итерациясына - қадамына басынан бастап ауысу жүзеге
асырылады.
9.9мысал:
Ма«*ж»Г
- -r г
'* ■у"» ' ПГПІ1-Уі
# in c lu d e < s td io .h > / / С т іл ін д е
m ain ()
{
in t i;
" 1
-ft**?-- ■
p r i n t f ( " \п Б ү т ін с а н е н г і з : ) " ;
s c a n f ( " % і" , & і) ;
s w itc h (і)
{ c a s e 1: p r i n t f ( " \п С ан б і р г е т е ң ! " ) ;
c a s e 2: p rin tf(" \n 2 * 2 = % d " , і * і ) ;
c a se 3: p r in tf ( " \n 3 * 3 = % d " ,i* i;b r e a k ;
c a s e 4 : p r i n t f ( " \ n Сан т е р т к е т е ң ! " ;
d e f a u l t : p r i n t f ( " \п А я қ т а л д ы ";
}
Бұл программаның жұмыс нэтижесі:
1 енгізілгенде мыналар шыгарылады:
Сан бірге тең!
2* 2=1
3*3=1
2 енгізілгенде мыналар шыгарылады:
2*2=4
3*3=4
3 енгізілгенде мыналар шыгарылады:
3*3=9
4 енгізілгенде мыналар шыгарылады:
Сан т ө р т к е т е ң !
Қалган сандар енгізілсе:
А яқталды !
сөзі шыгарылады.
134
Бақылау сұрақтары
1. Құрылымдыц программалау ұгымы.
2. Шартты оператордың тольщ және қьісқа түрлері.
3. Қабаттасцан іиартты операторлардыц жазылуы. Олар ңандай
жагдайларда пайдаланылады?
4. Шарттық өрнектерді біріктіретін логикалық операторлардыц
қолданылуы.
5. Шартты операторды пайдаланып у=1/(х-1)+1/(х-2) мәнін есептейтін программа құрыңдар.
6. Шартты операция дегеніміз не?
7. Көп нұсқалы тацдау операторы не үгиін қажет ? Оныц жазылу
форматы қандай?
8. Көп нүсцалы тацдау операторына мысал келтіріцдер.
Тапсырмалар
1. Тармақты алгоритмдерді программалау тәсілдерін пайдаланып, төмендегі функциялардың мәндерін есептейтін программа жазыңдар:
X
егер хх <<2
--------- ,, егер
а)у—
х
2х2+ - т= , егер х >2
V
3*
ГФі
yj(sinx + \) + lgx2t егер х< -/
sin
inxх + cos xх
в) у = < --------- , егер -1 < x < 3
cos x
e'sinx + sin х> егер x > 3
5siny-bcosy, егер y < 1
135
>[х + sin x,
егер x> 0,4
д ) у mt y j l - x + cosx,
егер - 1< x < 0,4
e5x l +lg x, егер jc<-1
2.
3.
4.
5.
6.
7.
Жазықтағы нүктенің
құрыңдар
Жазықтықта үш нүкте берілген:
В(х2,у2) жэне С(х3,у3). Осы
үш нүкте арқылы үшбұрыш құруға бола ма? Егер болса, Герон
формуласын пайдаланып оның ауданын есептейтін программа
кэдрықдар.
Квадрат теңдеуді шешу программасьш құрындар (ах2+Ьх+с=0;
а*0)
Үшбұрыштың төбелері координаталар арқылы берілген: А(хХУ
у
. Бұл үшбұрыш тең қабырғалы, тең бүйірлі
құрыңдар
Жазықтықта екі нүкте N (x xy x) және М(х2>у2) берілген. Бұлардың
қайсысы координаталар басына жақын болатынын анықтайгын
программа құрыңдар.
Бүпн п санын берілген, ол бүтін т ( т<п) санына қалдықсыз
КҰРУ
8.
9.
жұп
ірограмма құрыңдар.
жұлдызы аптаның қай күні
қандаи
күні болатынын анықтау программасын құру
10. Апта күндерінің реттік нөмірі бойынша олардың аттарын анықын программа қүру керек.
11. Нақты х, у ( х Фу ) берілген. Кішісін олардың жарты қосындысымен, ал үлкенін - екі еселенген көбейтіндісімен алмастьфыңыз.
12. Үш нақты сан бершген. Теріс емес сандарды квадраттаңыздар.
13. Егер берілген нақты х, у, z сандарының косындысы 1-ден кем
болса, онда бұл үш санның ең кішісін қалған екі санның жарты
қосындысымен алмастырыңыз, кері жағдайда х жэне у-тің кішісін
қалған екеуінің жарты қосындысымен алмастырыңыз.
14. Накты а, Ъ, с, d сандары берілген. Егер a<=b<=c<=d болса, онда
эр санды ең үлкен санмен алмастырыңыз, егер a>b>c>d болса,
садарды өзгеріссіз қалдырыңыз, кері жағдайда барлық сандарды
олардың квадратымен алмастырыңыз.
15. Бүтін х, у, z сандары берілген. Егер х_у-ке қалдықсыз бөлінсе жэне
У z-ке қалдықсыз бөлінсе, онда барлық сандарға 1-ді қосыңыз, кері
жағдайда барлық сандарды нөлге теңестіріңіз.
136
16. Накты о, b, с, d сандары берілгён. Осы сандардың терістерін квадраттап, ал он сандарын түбірден шығарьщыз.
17. Накты а, b, с, d сандары берілген. Егер кем дегенде бір сан нөлге
тен болса, ол жайлы экранға мэлімет шыгарыңыз, кері жагдайда
а-ның b-ға жэне с-ның d-ға калдықсыз бөлінетіндігін тексеріңіз.
18. Бүтін а, Ь, с сандары берілген. Егер a<=b<=c болса, онда барлық
сандарды олардын квадратымен алмастырыныз; егер а>Ь>с болса, онда эр санды ең үлкен санмен алмастырыңыз, кері жағдайда
барлық сандардың таңбасын кері таңбаға ауыстырыңыз.
19. Нақты х, у, z сандары берілген. max ( х + у + z, x*y*z) + 10 өрнегін
есептейтін программа жазыңыз.
20. Накты х, у, z сандары берілген. max( х2+ у2, у2+ z2 ) - 1 өрнегін
есептейтін программа жазыңыз.
21. Бүтін к, I, т сандары берілген. Нөлге тең сандардың санын
анықгаңыз.
22. Бүтін К I т сандары берілген. Оң сандардың квадратының
қосындысын есептеңіз. Егер бір де бір оң сан жок болса, ол жайлы
экранға мәлімет шығарыңыз.
23. Бүтін х жэне у сандары берілген. Егер екі санда жұп болса оларға
1-ді қосыңыз; егер тек біреуі жұп болса, онда олардың көбейтіндісін табыңыз; қалған жағдайда сандарды өзгеріссіз қалдырыңыз.
24. Үш сан берілген. Солардың ішінен [0;1] аралығына кіретіндерін
анмқгау керек.
25. Нақты х, у z оң сандары берілген. Қабырғаларының ұзындығы х,
yf z -ке тең үшбұрыш тұрғызуға болатынын тексеріңіз. Сандарды
енгізгенде олардың теріс емес жэне нөлге тең емес екендігін де
тексеру қажет.
26. Накты х; у z сандары берілген. min2( х +y+z/2 , х * у - z ) + 1 өрнегін
есептеңіз.
27. Бүтін a, b, с, d сандары берілген. Нөлге тең емес сандардың
көбейтіндісін табыңыз. Егер барлық сандар нөлге тең болса,
экранға мәлімет шығарыңыз.
28. Бүтін а, Ь, с сандары берілген. Тақ сандардың қосындысын табыңыз.
Егер барлық сандар жұп болса экранға мәлімет шығарыңыз.
29. Бүтін a, b, с, d сандары берілген. Егер a> = b> = c> = d болса, онда
барлық сандарды нөлге теңестіріңіз; егер a<b<c<d болса, онда эр
санды 1-ге өсіріңіз; қалған жағдайда эр санды 1-ге кемітіңіз.
30. Бүтін jc , у z ( хф у хф- z, уф z ) сандары берілген. Осы сандардың ең
кішісін тауып, оньщ жұп екендігін тексеріңіз.
31 1 мен 7 аралығындағы кез келген сан берілген. Осы санға сэйкес
апта күнінің атын шығарыңыз (1 —"дүисенбі, 2 —"сейсенбі1 жэне
T.C.C.).
137
32. К бүтін саны берілген. Осы санға сэйкес бағаның сипаттамасын шығарыңыз (1 - "нашар", 2 - "қанағаттанарлықсыз", 3 "қанағаттанарлық", 4 - "жақсы", 5 - "өте жақсы"). Егер сан 1-5
аралығында жатпаса, "қате" деген мәлімет шығарыңыз.
33. Айдың нөмірі 1—12 арасындағы бүтін сан арқылы берілген (1 қаңтар, 2 —ақпан және т.с.с.). Ай атына сәйкес жыл мезгілінің атын
шығарыңыз ("қыс", "көктем", "жаз", "күз").
34. Айдың нөмірі, 1-12 арасындағы бүтін сан арқылы берілген
(1 — қаңтар, 2 - ақпан жэне т.с.с.). Сәйкес айдағы күндер санын
анықтаңыз.
Ц
35. Арифметикалық амалдар келесідей ретпен нөмірленген: 1 —қосу,
2 —азайту, 3 —көбейту, 4 —бөлу. Амал нөмірі —N (1 -4 аралығындағы
бүтін сан) жэне нақты А мен В (В Ф 0) сандары берілген. Осы сандармен сэйкес амалды орындап, нәтижесін шығарыңыз.
36. Шеңбер элементтері келесі ретте нөмірленген: 1 - радиус (/?),
2 —диаметр {D = 2\R), 3 —ұзындық (L = 2 ті Я), 4 —шеңбер ауданы (S - n-R2). Осы элементтердің бірінің нөмірі жэне оньщ мәні
берілген. Шеңбердің қалған элементтерінің мэнін берілген реті
бойынша шығарыңыз.
138
10 ЦИКЛ ОПЕРАТОРЛАРЫ
Цикл операторлары бірнеше рет қайталанатын есептеулерді
орындау үшін кажет. Кез келген цикл сол цикл тұлғасынан
(денесінен), ягни қайталанатын операторлар тізбегінен, бастапқы
мэндер тагайындаудан, цикл параметрлерін озгертуден жэне
циклді қайталау шартьга тексеруден тұрады (10.1 сурет). Циклдің
бір рет орындалуы итерация (қадам) деп аталады. Шартты тексеру
әрбір итерация сайын - цикл тұлғасына дейін (алғы шартты цикл)
немесе цикл тұлғасынан соң (соңғы шартты цикл) атқарылады.
Олардың айырмашылығы - соңғы шартты цикл, кем дегенде, бір
рет орындалады да, содан кейін барып циклді қайталау шарты
тексеріледі. Ал, алгы шартты циклде оны қайталау шарты цикл
тұлғасынан бұрын тексеріледі, сондықган кейде ол бір рет те
орындалмай қалуы мүмкін.
а
э
10.1 сурет. Цикл операторларының құрылымдық схемасы:
а - алгы шартты цикл; ә - соңгы шартты цикл
Цикл тұлғасында мәні өзгертілетін айнымалылар цикл параметрлері болып табылады. Тұракты қадаммен эрбір итерация
сайын өзгертіліп отырылатын бүтін типтегі цикл парараметрлері
цикл санауыштары деп аталады.
Бастапқы параметрлер мәндері айқын түрде берілмеуі де
139
II
мүмкін, олар циклге кіргенге дейін оның ішінде мәндері өзергілетін айнымалылардың алғашқы мәндерін беру үшін қажет.
Цикл оны қайталау шарты орындалмаған кезде аяқталады.
Цикл қадамының немесе жалпы циклдің аяғына жетпей, доғарылатын кездері болады, олар b rea k , c o n t in u e , r e t u r n жэне
g o t o операторлары көмегімен іске асырылады. Сырттан цикл
ішіне басқаруды беру болмауы тиіс.
C/C++ тілдерінде ыңғайлылығына қарай қолданылатын үш
түрлі цикл операторлары бар, олар - w h i l e , do w h i l e жэне
10.1 Алғы шартты цикл (while —әзірше)
Орындалу саны алдын ала белгісіз болатьш циклдер құру
кезінде шарттары алдын ала немесе соцынан тексерілетін екі
цикл түрі бар. Шарты алдын ала тексерілетін цикл операторыныц
орындалу схемасы Ю.іа-суретте корсетілген. Оныц жазылуы:
w h i l e (шарт- өрнёк ) о п е р а т о р ;
Мұнда шарт ретінде қатынас таңбалары кіретін шартты
өрнек пайдаланылуы мүмкін. Өрнек типі арифметикалық немесе
соған келтірілетін түрде болуы тиіс. Оператор қарапайым неме­
се құрама болуы мүмкін. Ол құрама оператор болса, онда операторлар жиыны жүйелі жақшаға алынып жазылады. W h ile опе­
раторы орындалғанда, алдымен жақша ішіндегі өрнек есептеліп
тексеріледі. Егер орнек мәні ақиқат болса немесе жалпы
жағдайда 0-ге тең болмаса, онда оператор атқарылады. Содан
соң жақшадағы өрнек тағы да есептеледі. Егер өрнек мәні жалған
болса (немесе жалпы жағдайда 0-ге тец болса), онда w h i l e цикл
операторы өз жұмысын аяқтайды.
Мұнда шарт-орнек құрамына кіретін айнымалы цикл ішінде
өзгеріп отырады.
10.1 мысал (10.2 сурет).
/ * 1-ден 100-ге дейінгі бүтін
сандар қосындысы */
#include <stdio.h>
#include <conio.h>
140
main (>
{
int s,k;
elrscrO;
s=0; k=l;
while (k<=100)
{s+=k;
k++;
}
printf("s= %d",s);
printf("\nAHKTay үшін Enter
басыңыз\п");
getchO;
10.2 мысал. y=-2.4x2 +5x-3
функциясы мэндерін оның аргументі
х -ден х -ға дейін қадамы d x болып
0
*
10.2-сурет. Бүтін сандарды
өзгерген кездерде аныкгау керек.
косу алгоритм,
Мұнда программа С тілі стилшде
жазылып, цикл алдында параметрге алғашқы мэн меншікгеледі де, параметр цикл ішінде берілген қадамға өзгеріп отырады
(10.3-сурет). Жалпы функция кез келген түрде беріле алады. Ол
параметр мэніне байланысты тармақгалып кететін функция да
болуы мүмкін.
/ * х тұрақты қадаммен хО-ден xk - г а д е й ін ө з г е р г е н д е , функция м ән д ер і кесФ есін а л у ,
x O , x k , d x (га д а м ) п е р я е л е р д е н е н г і з і л е д і * /
# in c lu d e < s t d io .h >
# i n c l u d e <m ath.h>
# i n c l u d e < c o n i o . h>
main () {
flo a t x , y , x O , x k , d x ;
c l r s c r ( ) ; / * экранды а?азалау * /
p r i n t f ( " х - т ің бастапқы, соңгы м ә н д е р і: " );
scanf("% f% f" , &x0, &xk);
fife
141
p r i n t f ("х-т ің ө з г е р у қ а д а м ы dx:
");
scanf("%f",&dx);
printf("—
\n") ;
x
y\n");
("
printf("-\n") ;
x=xO;
while (x<=xk)
{
y=-2.4*x*x+5*x-3*sqrt(fabs(x));
printf("%6.2f I %6.2f\n",x,y);
x+=dx;
}
\n") ;
I
C"
getch();
}
Келесі мысалда енгізілген num бүтін санының барлық
С++
10.3 мысал.
/* Бүтін оң санның бөлгіштерім анықтау */
#include <iostream.h>
int main(){
int num;
cout « "\nSan engizingiz:
cin » num;
int half
num/2;
// санның жартысы
int div
2;
// алгашқы бөлгіш
//санды таңдау
while (div <= half) {
if (!(num % div))
cout « div «"\n";
div++;
}
return 0;
10.3-сурет. Функция мәндерін j
есептеу алгоритмі
142
Программалауда жиі қолданылатын
тәсілдердің бірі —шексіз цикл ұйымдастырып, одан белгілі бір шарт бойынша
шығу болып табылады, ол үшін цикл
басында while (true) немесе while
(1) сөздері жазылады. While түйінді
сөзінен кейінгі жақша ішіне циклде ғана
қолданылатын айнымалыны сипаттауды
жазып қоюға болады, мысалы:
w h i l e ( i n t x = 0)
{ :■
/* х - т ің пайдаланылу аймагы * /
—
do
1
j 1-оператор
j 2-оператор
І
■
§
1-----
—
Ф- л
I
1
H i i
J-----------
І
-■ ,-4
1w
п-оператор
while
шарт
жоқ
}
10.2 Сонғы шартты цикл (do .. while)
10.4-сурет. Шарты
Шаргы соңынан тексерілетін do |
соңынантегсерілетін
w h i l e (орындау .. әзірше)
циклінің
орындалу схемасы 10.4-суретте корсетілген. Осыған сәйкес оператордың жалпы жазылу түрі:
do
{
1 - оператор;
2 - оператор;
• • •
• • •
•••
n -о п ер а т о р ;
>
w h ile (ер н ек );
Цикл тұлғасы ретінде қарапайым немесе құрама оператор
қолданылуы мүмкін. Жақшадағы өрнек цикл тұлғасынан кейін
тексеріледі. Сондықтан do w h i l e ц и к л түлғасы ең болмағанда
бір рет орындалады. Цикл тұлғасынан кейін жазылған өрнек
ақиқат болса (яғни ол 0-ге тең болмаса), цикл тұлғасы қайтадан
орындалады. Ал өрнек жалған болса (немесе 0-ге тең болса), циюі
аяқталады. Өрнек типі арифметикалық немесе соған келтірілетін
типте болуы тиіс. Енді мысалдар келтірейік.
10А мысал.
Ц Е н гізіл ген сандардың үзпсенін (максимумын) табу
#in c lu d e < s t d io .h >
143
# i n c l u d e < c o n i o .h >
main ()
i n t a , max;
)Гc l r s c r ();
p r i n t f (" \ n Сандар максимумын т а б у \ n " ) ;
p r i n t f ( "Аяқтау үшін 0 е н г і з і ң і з \n " ) ;
max = - 3 2 0 0 0 ;
/ / алдын ала максимумды ең к іш і б ү т ін г е т ө ң е й м із
do
{
p r i n t f ("Сан е н г і з і ң і з : " );
s c a n f ("%і", &а);
<
i f (a > max) max = a;
}
w h ile (a != 0 );
p r i n t f ( "Сандардың максимумы: %i" ,m );
g e t c h () ;
;
-
10.5 мысал. Келесі программада шексіз сандар қосындысын
v 1 ,
1
1
1
1
1
_Т + ^ " + ' Т + _Т + - + “ Т +
і= \Г
2
З2 4
5
п2
алдын ала берілгін дәлдікпен е=10 5 анықтау керек, яғни келесі
мүшесі
аяқталады
#include <stdio.h>
#include <conio.h>
#define epsilon le-5
main ()
{
int i; float a,s;
clrscr();
s=0; i=l;
do
{a=l.0/i*i;
о_
-
144
}
w h ile ( a > e p s ilo n ) ;
p r in t f ( " s = % 7 . 4 f ", s ) ;
g e tc h ();
}
10.6
мысал. Төмендегі программада енгізілген бүтін санның
тақ немесе жұп екендігі анықталады.
/* Саиның жүп е к е н д і г і н анықтау * /
# in c lu d e < s td io .h >
# i n c l u d e < c o n io .h >
main ()
{
i n t k;
/ * е н г і з і л е т і н сан * /
ch a r sym bol;
te x tc o lo r (R E D );
textbackground(W H IT E );
c lr s c r ();
p r in t f ( " \n * Санның жұп/тақ ек ен д ігін анықтау * \ n " ) ;
do
{ p r i n t f (" \п Б ір б ү т ін сан е н г і з і ң і з : " );
s c a n f ("%i" , &k);
p r i n t f ("Бұл %i саны - " , k ) ;
i f (k % 2 = 0)
p r i n t f ( "жуп с а н . " ) ;
e lse
p r i n t f ("тақ с а н . " ) ;
p r i n t f ("\пТагъі да е н г і с е с і з бе? И ә -'Ү' ,Жоқ-'Н':") ;
sc a n f(" % s" , fisy m b o l);
}
w h i l e ( ( s y m b o l = ' Y ') | | ( s y m b o l = 'у 1) ) ;
}
10.7мысал. Бұл программада енгізілген нақты аргумент - х-тің
түбірін берілген дэлдікпен - e p s жуық шамамен итерациялық
формула арқылы анықтаймыз:
у п = (уп-1 + х / у п1) ,
10-1660
145
мұндағы y n l - түбірдің алдыңғы жуық мэні (есептеу алдын­
да бұл мэн кез келген он сан ретінде таңдалады), y n - түбірдің
келесі табылған жуық мэні. Есептеу процесі түбірдің анықталған
екі жуық мәндері айырмасының абсолюттік мәні берілген дэлдіктен төмен болған сәтте тоқталады. Абсолюттік мэнді табу үшін
стандартты f a b s ( ) функциясы қолданылады, ол <m ath. h>
тақырыптық файлында анықталады.
# i n c l u d e < i o s t r e a m .h > / / C++ т і л і с т и л ін д е
# i n c l u d e <m ath.h>
i n t m ain () {
d o u b le x , e p s ; //а р г у м е н т пен д ә л д ік
d o u b le Y p ,Y = l; / / т ү б і р д і ң алдыңры және к е л е с і
жуық м ән д ер і
c o u t « "Аргумент пен д ә л д і к т і е н г і з і ң і з :
/
c in » X »
do{
IV »
fl^urtent pen daldikti engisingiz: 8 0.0001
Tybirding juik mani: 2.82843
Press any key to continue
10.5-сурет. 10.7 мысал нәтижесі
үр
ү
Ү;
(Үр + х/Ү р) / 2 ;
}
w h i l e ( f a b s ( Y - Үр) >= e p s ) ;
c o u t « "\п Т ү б ір д ің жуық м ән і
r e t u r n 0;
}
I!
«
e n d l;
10.3 For цикл операторы
For операторы айнымалы ретінде берілген цикл параметрінің
алғашқы, соңғы мэні мен өзгеру қадамы белгілі болғанда, соған
сэйкес бір немесе бірнеше операторларды қайталап орындау
146
кезінде қолданылады. Бұл оператор параметрлі цикл операторы
немесе арифметикалық цикл деп аталады.
Параметрлі циклдің орындалу схемасы:
For цикл операторының жалпы жазылу түрі:
f o r (х=хО; x<=xk; x=x+dx)
{
<1-оператop>;
< 2 -о п е р а т о р > ;
Ф
Ф
Ф
< п -о п ер а т о р > ;
)
Мұнда х=хО - цикл айнымалысының бастапқы мэні, x<=xk
- циклдің орындалу шарты, x=x+dx —цикл айнымалысының
қадамы. х=хО цикл операторы орындаларда бір рет есептеледі,
x<=xk ақиқат болса немесе 0-ге тең болмаса, цикл тұлғасы
ретіндегі операторлар атқарылады. Содан соң x=x+dx
есептеледі жэне х<=хк мэні қайта анықталады. х<=хк мэні
жалган болса немесе жалпы жағдайда ол 0-ге тең болса, f o r
операторының жұмысы аяқталады. Сонымен цикл тұлғасының
келесі орындалуы немесе орындалмауы оның атқарылуы алдында
анықталады.
147
>I
%
СОҢЫ
10.7-су рет. Қосынды
табу алгоритмі
с
басы
I
п енпзу
і = п.2 ,-1
СОНЫ
10.8-сурет. Факториал
табу алгоритмі
10.8 мысал (10.7 сурет).
/ * 1 - д е н 1 0 0 - г е д е й і н г і сандар
қосьшдысьш анықтау * /
# in c lu d e < s td io .h >
# i n c l u d e < c o n io .h >
m ain ()
{ in t s = 0 ,i;
c l r s c r ();
p r i n t f (" 1 -д е н 1 0 0 - r e
д е й і н г і сандар қосындысы: " ) ;
fo r (i= l;i< = 1 0 0 ;i+ + )
s+ =i ;
p r in t f ( " s = % d " , s ) ;
p r i n t f ("\пАяқтау үшін E n te r
ба сы ң ы з\п " );
g etch () ;
}
10.9 мысал. Бүтін сандардың көбейтіндісін өрнектейтін п\ мэнін, яғни
я!=1*2*... п табу қажет.
Бұл алгоритмді құру барысында for
операторының кері қараи есептеитін
мүмкіндігін пайдаланайық (10.8 сурет).
# in c lu d e < s td io .h >
# i n c l u d e < c o n i o .h >
main ()
{ in t p = l,i;
in t n;
*
c l r s c r ();
p r i n t f ( " n санын е н г і з і ң і з д е , E n te r б а сы ң ы з:" );
scan f(" % d " , &n);
p r i n t f ("1-ден n- г е д е й ін г і сандар к ө б е й т ін д іс і:" );
fo r (і= п ;і> 1 ; i - - )
P * = i;
! ’Щ
p r i n t f (" % d",p);
g e tc h ();
}
148
10. W мысал.
/* x айнымалысы б е р іл г е н алғашқы
мәннен (хО) соңғы мәнге (хк) д е й ін түрақты
қадаммен (dx) ө э г е р і п оты рғанда, у функциясының
м эн дерін анықтау * /
# in c lu d e < s td io .h >
# in c lu d e < c o n io .h >
main ()
{ flo a t x , y ,x 0 , x k ,d x ;
c lr s c r ();
p r i n t f ( " х - т і ң алғашқы, соңғы м ән д ер і : " );
scanf("% f% f" , &x01&xk);
p r i n t f ( " х - т і ң ө з г е р у қадамы dx: " );
s c a n f(" % f" , &dx);
x=xO;
\n " ) ;
p r i n t f ("
x
I
y \n " );
p r i n t f ("
\n " ) ;
p r i n t f ("
f o r (x=xO;x< = xk ;x+=dx)
{ y = - 2 . 4 * x * x + 5 * x -3 ;
/ * функция * /
p rin tf(" % 6 . 2 f
I %6. 2 f \ n " , x , y ) ;
}
\n " ) ;
p r i n t f ("--------------------------------------- \n"
p r i n t f ("ХпАяқтау үшін E n te r басыңыз");
g e tc h ();
}
10 ;2
# in c lu d e < s t d io .h >
#define n 10
main ()
{
in t i;
flo a t s = 0 ;
for(i=l f i<=n ;i++)
149
s + = i* i/2 ;
p r i n t f (" нәтиж е= % f \ n " , s ) ;
F o r цикл операторындағы жақша ішіндегі соңғы өрнек ретінде жалпы дұрыс жазылган кез келген өрнекті пайдалануға бо­
лады.
||
1
Мысалы:
f o r (d—0 . 1 ; d < 5 0 ; d*=5)
p r in tf ( " % f " ,d ) ;
F o r цикл операторындағы жақша ішіндегі бір немесе бірнеше өрнектерді жазбауға да болады, бірақ мұндайда ; символын
міндетті түрде өз орындарына жазып отыру керек, мысалы:
х = 2 ; f o r (п = 4 ; х < = 1 0 0 ;)
х= х*п ;
Т у 1! «1
.«
F o r цикл операторында құрама өрнектерді " , " операциясы арқылы жазуға да болады, " , " операциясы - құрама өрнекті
ұйымдастыру үшін қолданылады. Осы операцияны қолданғанда,
үтір арқылы бөлекгенген орнектер сол жақтан оң жаққа қарай
есептеледі. " , " операциясы цикл операторының тиімді болуы
үшін жиі пайдаланылады. Мысалы:
m ain ()
{
in t х ,у ;
f o r (х = 1 ,у = 9 ;х < = 1 0 ; х + + ,у — )
p r in tf ( " % d % d \n " , х , у ) ;
}
Мұнда алғашқы ; белгісіне дейін жэне соңғы өрнек арқылы
осы цикл операторында екі параметр мэні беріліп (х = 1 , у = 9 ;),
олар х , у айнымалыларын өзгерту үшін қолданылып отыр.
4%
Q
Күрделі циклдер
Кейбір есептерді шьн-ару үшін бірінің ішінде бірі жатқан
күрделі деп аталатын қабаттаса орналасқан циклдерді пайдлануга тура келеді. Бұндай программаларды құрганда ішкі цикл
толығымен сыртқы циклдіц ішінде орналасуы қажет. Ішкі циклдіц
150
өзі де басқа ішкі циклдерді қамтуы мүмкін. Күрделі циклдің
құрылымын төмендегі мысалдан көруге болады.
10.12
мысал. х - 1,2,3 жэне у = 2,4,6,8 болган кездерде z =
(2у+х) / 1 п х функциясы мәндерін есептейтін программа кұру
керек.
/* z=(2у+х)/1п(ху) функциясы мәндерін
х=1,2,3 жэне у=2,4,6,8 болганда табу керек
*/
#include <stdio.h> // С тілі стилінде
#include <conio.h>
#include <math.h>
void lin() // сызық сызу функциясы
{ printf ("------------- \n") ;}
main()
// басты функция
{ int x, у;
float z;
clrscr();
printf(" x у
z\n");
lin();
for(x=l;x<=3;x++)
{ y*2; « smlrt
while(y<=8)
{ z=(2*y+x)/log(x*y);
printf("%2d%4d%8.2f\n",x ,у ,z);
y+=2;
}
lin() ;
}
getch();
}
Программа нэтижесі:
x
у
1
1
1
1
z
2
4
6
8
7.21
6.49
7.26
8.18
151
2
2
2
2
2
4
6
8
4.33
4.81
5.63
6.49
3
3
3
3
2
4
6
8
3.91
4.43
5.19
5.98
10.13
керек.
мысал. Көбейту кестесін шығаратын программа құру
I
' • ''
і '•
- с-х с г*
/ / Толық к өбейту к е с т е с і
# i n c l u d e < io s t r e a m .h > / / C++ ф і л і стилінде
v o i d l i n ( i n t n)
/ / п сызықша сызу функциясы
{ f o r ( i n t k = l ; k<=n;k++)
cout «
'-';
- ,
c o u t « " \n " ;
v,
}
•; :
i n t m a in ()
/ / басты функция
{ c o u t « "\ t \ t \ t K e 6 e ^ y к е с т е с і « e n d l
« " 1 \ t 2 \ t 3 \ t 4 \ t 5 \ t 6 \ t l \ t 8 \t9 "
« e n d l;
lin (6 6 );
/ / көлденең 66 сызықша
f o r ( i n t i = l ; i < 10; i+ + )
{ c o u t « i « " I ";
f o r ( i n t j = 1; j < 1 0 ; j++)
cout « j * i «
'\t f;
c o u t « e n d l;
)
r e t u r n 0;
---- -- - ~*—
}
v *
I
152
10.4 Программаның орындалу тәртібін өзгерту операторлары
С-н- тілінде программа жолдарының, ягни есептеу процесінің
табиғи реттілігін өзгертетін төрт оператор бар:
• шартсыз көшу операторы - g o to ;
• циклден шығу операторы —b re a k ;
• циклдің келесі қадамына көшу операторы - c o n tin u e ;
• функциядан кері оралу, ягни қайту операторы - r e t u r n .
Шартсыз кешу - g o to операторы
Программаньщ орындалу реттілігін ешбір шартсыз өзгертетін
g o to операторыньщ форматы;
g o to < б е л г і> ;
Программа ішінде осы белгі көрсетілген төмендегідей бір
жол болуы тиіс:
б е л г і : о п ер а т о р ;
Бұл оператор белгіленген жолга көшу эрекетін орындаиды.
Белгі —осы функция (программа) іилінде пайдаланылатын қарапайым идентификатор. Жалпы дұрыс (құрылымдық) програм­
малау ережесі бойынша бұл операторды қолданбауга тырысу
керек. Ол программаны оқып түсіну ісін қиындатады. Бұл опе­
раторды құрылымдық тэртіппен құрылған программа ішінде
пайдалануга болмайды. Сондықтан оны барынша аз қолдануга
тырысып, мыналарды есте сақтаган жөн:
• оператор пайдаланьшган жагдайда (онсыз программа кұру
мүмкіндігі жоқта гана), оны программа мэтіні бойынша тек
томен қарай кошу үшін пайдаланган жөн; бұл операторды
кері қайту үшін қолдану қажет болса, шартты оператормен
алмастыруга тьфысу керек;
• белгі тұрған орын мен кошу операторыньщ арасы мэтін
бойынша бір беттен (немесе дисплей экраны биіктігінен)
аспауы тиіс.
G oto операторын қолданган шақта оның қатарына жүйелі
жақша ішіне неліктен басқа қатарга көшу қажет екендігін түсіндіріп кету керек немесе оның орнына шартты кошу опера­
торын пайдаланган абзал.
Бұл операторды цикл ішіне жэне i f , sw i t c h операторларының
ішіне кошу үшін қолданбау қажет.
153
i n t к = - 4 ; ...
, щц
,
, v;
g o to b e l g i ; J
1]
{ i n t a = 3 , b = 4;
к = a+ b ;
*■: 'SXj :<н<Ца
b e l g i : i n t m = к + 1 ; ...
* i
}
■ \
B reak операторы
Циклдің (немесе s w it c h ) қайталану саны аяқталмай-ақ,
оның ішінен сыртқа (одан кейін орналасқан жолға) шығу үшін
b r e a k операторы қолданылады.
10.14 мысал. Нақты х аргументінің гиперболалық синусын оны
шексіз қатарға жіктейтін төмендегі формула арқылы есептейтін
программа құрайық.
1
s h х = 1 + х 3/ 3 ! + х 5/ 5 ! + х 7/ 7 ! + . . .
мұндағы есептеу қатардың келесі мүшесінің абсолюттік мэні
берілген дәлдіктен - 8 кіші болған сәтте тоқталады.
Я
# i n c l u d e < i o s t r e a m .h > / / C++ т і л і с т и л ін д е
# i n c l u d e <m ath.h>
i n t m a in ( ) {
c o n s t i n t M axiter
500; / / итерация санын шектеу
d o u b le x , e p s ;
J
v
c o u t « "\пАргумент пен д ә л д і к т і е н г і з і ң і з :
c in » х » eps;
b o o l flag — t r u e ;
/ / дурыс е с е п т е у б е л г і с і
d o u b le У = x , c h = x ; / / қосынды және қатардың
/ / 1-м үш есі
f o r ( i n t n = 0 ; f a b s ( c h ) > e p s ; n++) {
ch *= х * х / (2 * n + 2 )/ ( 2 * n + 3 ) ; / / қатардың
/ / к е л е с і мүшесі
у += сһ ;
І-: •
i f (n > M a x l t e r ) {
c o u t « "\пҚосынды ш е к с із д ік к е ұмтылады!";
flag = f a l s e ; b r e a k ; }
}
i f (flag) c o u t «
"\пФункция м ә н і : " « у ;
r e t u r n 0;
}
C o n tin u e операторы
154
Цикл орындалуы кезінде оның атқарылып жатқан қадамы
аяқталмай-ақ, қалған операторларды аттап өте отырып одан
шыгып, цикл параметрінің келесі мэніне көшу үшін continue
операторы қолданылады, яғни циклдің келесі итерациясына қадамына басынан бастап ауысу жүзеге асырылады.
10.15
мысал. ІІрограммаға 10 бүтін сан енгізіп, солардың
ішіндегі тақ сандар қосындысын аныктау керек.
/* енгізілетін 10 бүггін сандар ішіндегі тақ
сандар қосындысын табу */
#include <iostream.h> // C++ тілі стилінде
#include <conio.h>
main ()
{
int num, sisdrO;
clrscr();
for(int i=l;i<=10;i++)
{ cout «"Бүтін сан енгізіңіз: "; cin » num;
if (num % 2 = 0) continue;
sum+=num;
)
cout « "\пЕнтізілген тақ сандар қосындысы : "
g e tc h ();
)
Бақылау сұрақтары
1. Алгы шартты цикл операторыньщ орындалу схемасы мен оныц
жазылуы.
2. while цикл операторының ішкі тұлгасы бір де біррет орындалмауы
мүмкін бе?
3. while цикл операторыньщ шарты қатынас тацбаларысыз жазыла
ма?
4. while цикл операторы цац кезде шексіз цикпге айналады ?
5. while цикл операторының түлгасында оныц шартына эсер ететін
өрнектер жазыла ма?
6. Соцгы шартты do ... while цикпініц орындалу схемасы мен
жазылуы.
155
do ... w i f e цикл операторының ііикі түлгасы бір де бір рет
орындалмауы мүмкін бе?
8 . do ... while цикл операторының иіартында қатынас таңбасы болмаса, оның ақиқат немесе жалган екенін қалай анықтауга бола­
ды?
]
' ' '" ;:Г-'*•
^:
7.
9.
do ... while цикл операторының ішкі түлгасында иіартсыз көиіу
операторын қолдануга бола ма?
10. Параметрлі циклдің орындалу схемасы мен жазылуы.
11. Параметрлі циклде "модификатор" блогын пайдалану ерекилеліктері.
12. Параметрлі цикл бір де бір рет орындалмауы мүмкін бе?
13. fo r операторының параметрі қандай типтерде бола алады?
14. fo r операторы параметрінің алгаиіқы мэні оның соңгы мэнінен
кіиіі бола ма?
ш rJ
15. Параметрлі цикл операторының неше рет қайталанатынын ал­
дын ала білуге бола ма, болса —ол цалай анықталады?
16. fo r цикл операторындагы жаціиа ішіндегі бір немесе бірнеиіе
өрнектерді жазбауга бола ма?
17. for цикл операторы нүктелі үтірмен аяқтала ала ма?
18. fo r цикл операторында қай кезде қүрама операторлар қолданылады?
.
. '
~ v I щйШ Ш
19. for цикл операторы қай кезде іиексіз циклге айналады?
20. fo r цикл операторында бірнегие қүрама өрнектерді үтір арқылы
цалай жазуга болады?
21. Қабаттаса орналасқан циклдерді пайдаланудың ерекшеліктері.
22. goto операторы цай кездерде қолданылады?
23. Белгі дегеніміз не?
24. break операторы цикл соңына көиліре алама? Неге?
25. Циклдің келесі қадамына көшу операторының жүмысы. Ол қай
кездерде пайдаланылады?
Тапсырмалар
1. 1-ден TV-ге дейінгі сандардың қосындысын есептейтін программа
құрыңдар. N -нің мәні пернетақтадан енгізіледі.
2. 1-ден TV-ге дейінгі сандардың көбейтіндісін есептейтін программа
құрыңдар. А^-нің мәні пернетақгадан енгізіледі.
3. Пернетақтадан N сан енгізіледі. Енгізілген сандардың ішіндегі
теріс, оң сандардың жэне нөлдердің санын анықтайтығ программа
құрыңдар.
4. Ұзындықтың 1-ден 20 дюймге дейінгі мәндерін сантиметрге (1
дюйм = 2,54 см) айналдыратын жэне оны экранга шығаратын про­
грамма құрындар.
156
Банктегі жылдық өсімі 9 пайыздық (процентгік) салымға S теңге
салынды. N жылдан кейін салынған ақша неше теңгеге жетеді?
6. Пернетақтадан 10 бүтін сан енгізіп, солардың квадраты мен кубын
аныктаңыз.
7. 20-дан 50-ге дейінгі натурал сандар берілген. Олардың ішіндегі
3-ке бөлінетін, бірак 5-ке бөлінбейтін сандарды анықтандар.
8. 35-тен 87-ге дейінгі натурал сандар берілген. Олардың ішінде 7-ге
бөлгенде, 1-ге, 2-ге немесе 5-ке тең қалдық қалатын сандарды
5.
табыңдар.
9.
1-ден 50-ге дейінгі натурал сандар берілген. Олардың ішіндегі 5-ке
немесе 7-ге бөлінетін сандардың косындысын табыңдар.
10. Пернетақтадан 10 сан енгізіңдер. Егер олардың ішінде 15-тен асқаны бар болса, онда оларды 15-пен алмастырыңдар. Сандарды
экранға шығарыңдар.
11. Пернетақтадан он теріс жэне он сан енгізіцдер. Барлық теріс сан­
дарды олардың модульдерімен алмастьфып сандарды экранға басып шығарындар.
12. Екі орынды сандардың ішіндегі 4-ке бөлінетінін, бірақ 6-ға бөлінбейтінін табыңдар.
13. 13-ке қалдықсыз бөлінетін екі орынды тақ сандардың көбейтіндісін
табындар. 5
14. 100-ден 200-ге дейінгі сандардың ішіндегі 17-ге қалдықсыз бөлінетін сандардың қосындысын табыңдар.
15. Пернетақтадан 10 сан енгізіңдер. Егер сан 100-ден кем болса, онда
осы санды жэне оньщ квадратын табындар.
16. 1-ден бастап өздерің енгізген бүтін п санына дейінгі сандардың
квадраттарының қосындысын есептейтін программа құрыңдар.
17. 200-ге дейінгі 5-ке бөлгенде 4 қалдық қалатын сандар нешеу екенін
. табу керек.
18. 200-ге дейінгі бүтін сандардың 25-ке қалдықсыз бөлінетін сандары
нешеу екенін анықгавдар.
19. 20-дан үлкен және 100-ден кіші 3-ке қалдықсыз бөлінетін оң сандардьвд қосындысын табу керек.
20. Берілген а накты жэне b бүтін сандарының мәндері бойынша а*
өрнегінін мэнін pow() функциясын пайдаланбай табатын програм­
ма жазыңдар.
21. Төмендегі есептерде бір өлшем бірлігін екінші өлшем бірлігіне
түрлендіру қажет (цикл санауышы мәні 1-ден 20-ға дейін өзгереді).
а) футпен берілген ұзындық өлшемін метрге (1 фут = 0,3048 м);
э) драхмды граммға (1 драхм = 3,7325 г;
б) унцияны граммға (1 унция = 29,86 г);
в) фунтты килограммға (1 фунт = 0,40951 кг);
157
I
г) аршынды метрге (1 аршын = 0,7112 м);
д) қадақты граммға (1 қадақ = 400 г);
е) қарысты сантиметрге (1 қарыс = 18 см);
ж) дюймді миллиметрге (1 дюйм 1 25,3995 мм).
22.
Төмеңдегі функциялар мэндерін х айнымалысы хО-ден xk-ға дейін
dx қадамымен өзгерген кезде анықтаңдар.
5sinx+cosx, егер х < 1
а) г -
х —2jc —5
, егер 1 < д: < 4
мұндағы x0= -l, г =5, dx =0.5
•Jx2 +5 + lgx, егер x > 4
sin22x 1 5x2, егер x > 1,66
э) У
61-v/jc-17
, егер x <1,66 *¥ВДағы XQ=0,5, x ,= 3 , dx =0.5
V ? + x2+ cos 4x
+ sin x,
УІ2 x,
б) у
Sx-\
егер x > 0,4
егер
1 < x < 0,4
мұндағы x0 -2,xk= l , d x
+ lg\x\, егер x < -1
23. Төмендегі жалпы мүшесі берілген қатардың 10 мүшесінің
дысын табыңдар:
а)
ап
0.25
0~4п
е
э)
ап
б)
аП
КОСЫ Н-
2 Пп\
fl
п
24. Жалпьі мүшесі төменгі өрнекке сәйкес қагар қосыңдысын е=10^
дәлдігімен анықтау керек.
1
a)
(-ІГ '
= -— л—
л aЖШ
п
®) ап
э) ап = — +
ч
1
2" Ъп
(2 п - 1)
2"
1
г>
10”
П:
158
б) а, =
д) °,
1
((Ъп - 2 ) ( 3 п + 1))
Пt
(2 п ) !t
11 ЖИЫМДАР ЖЭНЕ НҮСҚАУЫШТАРДЫ ПАЙДАЛАНУ
C/C++ тілдерінде негізгі типтерден бөлек, солар арқылы жасалатын туынды типтерді де пайдалануға болады. Туынды типтердің үш түрі бар, олар:
элементтер
объектіге н
фун
Жиым немесе массив - бір типтегі элементтердің реттелЖиымның
дынан нақты орын беріледі. Бір жиым элементтері тізбектеле
қатар тұрған жады ұяларында орналасады. Жиым элементтері
саны оның өлшемі (ені) болып табылады. Компьютер жадынан
>тт ^лттіп
\лпті« wuuMHkiH Апшемін білү кеоек. Жиымға
программаны
атқарылады
C/C++ тілдерінде жиымды анықтау
Г'
Щ]
Жиым бір атаумен - идентификатормен аталады да, индексті
айнымалы үгымына сэйкес келеді. Мысалы, бүтін сандардан
тұратын а100жиымы былай анықгалады:
int a[100] ;// бүтін типтегі 100 элементтен
// тұратын а жиымы
мүнпа sizeof (а) операциясының мэні 400 болады, яғни
эрқайсысы 4 байттан тұратын 100 элемент.
Жиым элементтері 0-ден бастап нөмірленеді.
Жиым элементін пайдалану үшін оның нөмірін (индексін)
көрсету керек:
а [ 0 ] - индекс константа түрінде берілген,
а [55] - индекс константа түрінде берілген,
а [і ] - индекс айнымалы түрінде берілген,
a [2*i] - индекс өрнек түрінде берілген.
Мысалы, мынадай тізбек
159
I
О 1 1 2 3 5 8 1 3 21
құрайды (алғашқы
таңцап алып, келесі санды алдыңғы
►
. Ал мынаү ӨЧІне жэне fiinre ЯпттІ№
алғашкы
13 5711 13 17
сгі тізбектерді жиым түрінде сипаттап
инициалдау үшін былай жазамыз:
fib [8 ]= {0 ,
i f 2 , 3, 5, 8, 13, 21};
немесе
fib []= {0 , 1 , 1, 2 , 3 , 5 , 8 , 13, 2 1 };
i. мұндағы fib —жиым аты, оның элементтерінің
типі i n t . ал ені, яғни ұзындығы — 9, жиым элементтерінің
индекстері 0-ден бастап нөмірленеді, сол себепті 9 элемент 8 индекспен көрсетіледі. Мэндері толық көрсетілсе, индексті жазбаса
да болады.
Ал
f i b [ 8 ] = { 0 , 1 , 2 , 3 } ; қалған элементтері
саналады.
n = 1 0 ; к=2; fib [n -k ] = { 0 , 1, 2 , 3 } ; десе де болады.
Жоғарьщағы тізбектің 7-ші элементін бір бүтін айнымалыға
меншіктеу үшін былай жазамыз.
i n t a = f ib [ 6 ] ; / / a = 8
Жиымды сипаттау кезінде оның ені нақты санмен көрсетіледі,
мысалы, а [20] , ал индексті а [ n ] деп жазу үшін алдын ала
#define n 2 0 ; жолы көрсетіледі немесе
c o n s t п = 20;
болып жазылады.
11.2 Бір өлшемді жиымдарды өңдеу
Жиым элементтерін енгізу немесе оларды түрлендіру үшін
цикл операторлары қолданылады. Төменде 10 элементі бар жи­
ымды 0-ден 9-ға дейінгі сандармен толтырып, сонан кейін оларды
кері бағытта экранға шығару мысалы көосетілген:
main
(in t
in t
fo r
()
і а [1 0 ];
!
in d e x ;
( in d e x = 0; in d e x < 10; in d e x ++)
[ in d e x ] = in d e x ;
160
f o r ( in d e x - 9 ; in d e x >= 0 ; in d e x — )
p r i n t f (" % i", i a [ i n d e x ] ) ;
} ~
C/C++ тілдерінде жиымды жиымға бірден теңестіруге болмайды, мысалы, av ау а2, ... , а9жэне cff су с2, ... , с9жиымдары
үшін а = с деп жазуға рұқсат етілмейді. Олардың элементтерін
цикл іпіінде бір-біріне біртіндеп теңестіру керек.
Мысалы, мьгаадай цикл жазылуы тиіс:
i n t a [1 0 ], с [1 0 ];
f o r ( i n t і= 0 ; і< 9 ; + + і)
а [і]= с [і];
11.3 Ұзындығы өзгермелі динамикалық жиымдар
Жиымды сипаттау кезінде міндетті түрде оның элементтері
санын көрсету керек. Сол арқылы компилятор компьютер жадынан оған керекті орын бөледі. Бұл онша ыңғайлы емес,
өйткені жиымдағы элементтер саны есепке байланысты өзгеріп
отыруы мүмкін. Сондықтан C/C++ тілінде ұзындықтары өзгеріп
отыратын динамикалық жиымдар қарастырылған (олар төменде
айтылған).
Ал динамикалық жиымға ұқсас мүмкіндікті былай да жүзеге
асыруға болады:
1) жиымды анықтау кезінде оған компьютер жадынан артығымен орын оөлінеді, мысалы:
c o n s t i n t n = 1 0 0 ; / / а т қойылган к о н с т а н т а
i n t b [n ] ;
2)
программалаушы жұмыс барысында жиым элементтері
санын n-нен аз етіп алады.
i n t m; / / С т і л і н д е
p r i n t f ( " \n J y im e l e m e n t t e r i s a n i : ” ;
s c a n f(" % d rt, &m);
немесе
i n t m; / / C++ т і л і н д е
c o u t « " \n E n te r th e s iz e o f a r r a y ”
« m « "
c i n » m;
11-1660
161
I
3) мұнан кейінгі жұмыс жиымның осы ш элементімен ғана
орындалады,
.
яғни жиымның тек белгілі бір бөлігі ғана (m<n) пайдаланылады.
11.4 Жиымды толтыру үшін кездейсоқ сандарды пайдалану
C/C++ тілдерінде кездейсоқ сандар беретін функциялар бар.
Олар:
: § '•4 - ' - ^ I I - і |
)
1
i n t r a n d () - 0..RAND MAX аралығынан кез келген кездейсоқ бүтін сан береді, мұндағы RAND MAX константасы (бас
эріптемен жазылуы тиіс) ең үлкен бүтін санға 32767-ге тең болып
саналады;
ft
Ш
■Шt .• .
. вдж р Ж
i n t random (п) функциясы 0..п аралыгьшан кез келген кездейсоқ бүтін сан береді, мұндагы п - кез келген бүтін сан.
Осы функцияларды пайдалану < s t d l i b . һ> тақырып файлы
арқылы орындалады.
11.1 мьісал:
ыейНЩ' ІШТШІІН
/ / a [ n ] жиымына к е з д е й с о қ с а н д а р е н г і з у
# i n c l u d e < с о п іо .һ >
# in c lu d e < s td io .h >
# in c lu d e < s td lib .h >
v o i d m a in ()
{ i n t a [1 0 0 ];
in t n ;
p r i n t f (" \n E n te r th e s iz e o f a r r a y : " , n ) ;
s c a n f ( " % i " , & n);
ja
f o r ( i n t 1 * 0 ;I < n ; I++)
{ a [I]= ra n d ()% 1 0 0 -5 0 ;
/* 0 . . 5 0 аралы ғы ндағы оң және т е р і с с а н д а р ал у * /
p r i n t f (" %i " , а [ I ] ) ; }
g e tc h ();
)
162
/ / жиым э л е м е н ф т е р ін
/ / э к р а н ғ а шығару
11.5 Ж иымды өңдеу есептерінің түрлері (кластары)
Жиымды өңдеу есептері көбінесе бірыңғайланған төрт түрге
бөлінеді.
1) Есептердің 1-түріне жиым элементтерінің барлығын неме­
се көрсетілгендерін бірдей бір тәсілмен өндеу есептері жатады.
2) Есептердің 2-түріне (класына) жиым элементтерінің орналасу реттілігін өзгерту тэсілдері жатады.
3) Есептердің 3-класына бірнеше жиымдарды қатар өңдеу не­
месе бір жиымның ішкі элементтерін бірнеше топқа бөліп жекежеке өңцеу тэсілдері жатады. Жиымдар бір тәсілмен - синхронды
өңделеді немесе эр түрлі тәсілмен - асинхронды түрде өңделеді.
4) Есептердің 4-класына жиымның берілген санға тең бірінші
элементін табу, яғни іздеу есептері жатады.
11.5.1 1-түрдегі есептер
11.2
мысал. Бүтін сандардан тұратын а10жиымының ең үлкен
элементін - максимумын және оньщ индексін анықтау керек.
/* Жиым максимумын табу */
# i n c l u d e < c o n i o .h >
# in c lu d e < s td io .h >
#define n 10
main ()
{ in t i,t,a [n ]= { 6 ,5 ,9 ,8 ,7 ,4 ,l,2 ,3 ,0 } ,m a x ;
t e x t c o l o r (BLUE);
// мәтін түсі көк
textbackground(YELLOW);
// экран түсі сары
c lr s c r ();
p r i n t f ( " a [10] элементтері : ");
f o r ( i = 0 ; i < n ; i+ + )
p r i n t f (" %d ", a [ i ] ) ;
max=a[0 ]; t = 0 ; // max - максимум,
// t - оньщ индексі
f o r ( i —1 ; i < n ; i+ + )
i f ( a [ i ] > max)
{max = a[i]; t=i;}
printf("\nmax = %d, индекс! = %d\n", max, t);
g e tc h ();
)
163
I
11.3
мысал. Жиымның жұп индексті элементтері косындысын
анықгау.
,
/* 0, 2,4... индексті элементтер қосындысын табу */
# i n c l u d e < c o n i o .h >
# in c lu d e < s td io .h >
# in c lu d e < s t d lib .h >
v o i d m a in ()
{ i n t a [1 0 0 ];
*
i n t n;
' '
p r i n t f (" \n E n te r t h e s i z e o f a r r a y : " , n ) ;
s c a n f( " % i" , &n);
f o r ( i n t I= 0;I< n ;I+ + )
{ a [I ] = r a n d ()% 1 0 0 -5 0 ;
p r i n t f (" %i ", a [ I ] ) ; }
i n t Sum=0;
f o r (1=0; I < n ; I+ = 2 )
Sum+=a[I] ;
p r in t f ( " \n S u m = %i ", Sum);
g e tc h ();
Соңғы циклді басқаша да құрастыруға болады:
// Бкінші тәсіл
f o r ( 1 = 0 ; I < n ; I+ + )
i f (I% 2 = 0 ) Sum+=a[I] ;
p r i n t f ("\nSum= %i ", Sum);
11.5.2 2-түрдегі есептер
Жиым ішіндегі екі элементтің бір-бірімен орнын ауыстыру
үшін қосымша тағы бір айнымалы керек болады. Мысалы, a[I]
жэне a[J] элементтерінің орнын ауыстыру үшін қосымша R айнымалысы керек:
R = a [ I ] ; a [ I ] = a [ J ] ; a [J ]= R ;
Жиым элементтерін кері бағытта орналастыру былай орын­
далады:
Щ
*
f o r ( i n t і= 0 , j = n - l; і < j ; і+ + , j — )
{in t r = a [ i] ;
a [i]= a [ j] ;
a [ j ] = r ;}
164
11.4 мысал. Жиымның қатар тұрған екі элементін: 1 жэне 2, 3
жэне 4, 5 жэне 6, т.с.с. элементтерін бір-бірімен орын ауыстыру
есебі:
f o r ( i n t і = 0 ; i < n - l ;і+ = 2 )
{ in t r = a [ i ] ; а [ і] = а [ і+ 1 ] ; a [i+ l]= r;>
11.5 мысал. Жиым элементтерін к орынға солға (оңға)
ығыстыру, яғни жылжыту.
in t k ,i,t,r ,n ;
p r i n t f ( " k = ") ;
skanf("% d" , &k) ;
f o r (t = 0 ; t < k ; t+ + )
{
r= a [0 ];
f o r ( i n t i = 0 ; i < n - l ; i+ + )
a [i]= a [i+ l];
a [n -l]= r;
}
11.5.3 3-класс есептері
Жиымдарды синхронды түрде өңдеуде жиымдар элементін
қарастыру кезінде индекстер бірдей қадамға өзгереді. Мыса­
лы, бүтін сандардан құралған п элементтерден тұратын 2 жиым
берілген делік. Жаңа с жиымы мынадай формула арқылы алынады: с[І1=а[І1+Ь[І].
f o r ( i n t 1=0; I< n ; І++)
c [I]= a [I]+ b [I];
Жиымдарды асинхрондық өңцеу кезінде эр жиым индексі өз
реттілігімен өзгеріп отырады.
11.6 мысал. Бүтін сандардан кұралған жиымдағы теріс элементгердің барлығын оның бас жағына орналастыру керек.
i n t b [ 1 0 ] ; //қосы мш а жиым
in t i,j= 0 ;
f o r ( i = 0 ; i < n ; i+ + )
if ( a [ i] < 0 ) { b [ j] = a [ i] ; j+ + ;}
/ / а - д а н b - ғ а т е р і с э л е м е н т т е р д і к ө ш ір іп ж азу
f o r (і = 0 ; i < n ; і+ + )
i f ( a [ i ] > = 0 ) { b [ j ] = a [ i ] ; j ++;}
165
/ / а -д а н b - г а оң э л е м е н т т е р д і көш іріп жаэу
f o r ( i = 0 ; i < n ; i + + ) p r i n t f ( ” %d и , b [ I ] ) ;
11.7 мысал. Жиымның барлық жұп элементтерін жою керек.
i n t b [1 0 ];
,
in t i,j= 0 ;
f o r (i = 0 ; i < n ; i + + )
if(a [i]% 2 != 0 ){b [j]= a [i];j+ + ;}
f o r ( i = 0 ; i < j ; i+ + ) p r i n t f (" %d ", b [ I ] ) ;
p r in t f (" \n " );
*^
11.5.4 4-класс есептері
Іздеу есептерінде берілген шартқа сэйкес келетін элементті
іздеп табу керек. Ол үшін жиым элементтерін біртіндеп тізбектей
қарастырып отырып шартты тексеріп шьну қажет. Осьшай ету барысында циклден шьнудың екі жолы бар:
- керекті элемент табылғаннан кейін;
- жиым элементтері тегіс қаралып шықты, керекті элемент
табылмады.
11.8 мысал. Берілген k санына тең жиымның алғашкы
элементін табу.
i n t k;
p r in tf(" \n K = " );
s c a n f(" % i" , &k);
i n t o k = 0 ; //э л е м е н т табылғаны
/ / табылмағаны б е л г і с і
i n t i,n o m ;
f o r (i = 0 ; i < n ; i+ + )
i f ( a [ i ] = = k ) {o k = l ; n o m = i;b r e a k ;}
i f ( o k = l ) p r i n t f (" \nnom=" , nom) ;
e l s e p r i n t f ( " \ n k - r a тең элем ент ж о қ !" );
11.6 Жиымды сурыптау (іріктеу, реттеу)
Сұрыптау - берілген объектілер жиынын (сандарды) ұсынылған реттілікпен қайта теріп орналастьфу процесі.
Жиымдарды сұрьштау жылдамдығы эр түрлі болады. Қарапайым сұрыптау тәсілдері п*п рет салыстыруды керек етеді,
мұндағы п - жиым элементтері саны; ал жылдам сұрыптау
166
тәсілі n*ln(n) рет салыстыруды қажет етеді. Қарапайым тэсілдер
түсінуге жеңіл, өйткені алгоритмі түсінікті. Күрделі тэсілдер аз
әрекеттер санын керек еткенмен, операциялары күрделірек болады, сондықтан элементтер саны аз жиымдарға қарапаиым
тәсілдерді қолданған дұрыс.
Қарапайым тәсілдер 3 топқа бөлінеді:
- жай таңдау жолымен сұрыптау;
- жай енгізу тәсілімен сұрыптау;
алмастыру
♦
Жай таңдау
аныкталады
Қалған элементтермен
қаиталанады.
44
55
12
минимум
42
94
18
i n t i ,m i n ,n _ m i n , j ;
fo r (i= 0 ;i< n -l;i+ + )
m in = i; / / минимумды і з д е у
f o r ( j = i + l ; j< n ;j+ + )
[ j]< m in )
m in = j ; }
/ / алмастыру
m in l= a [i];
a [i]= m in ;}
11.6.2 Жай енгізу (i
бастапкы
Жиым элементтері
________ _
адымда 1=2 нөмірінен бастап, бастапқы
берілген тізбектен І-ші элемент алынады да, ол дайын тізбектің
керекті жеріне орналастырылады. Мүнан кейін І-ге 1 қосылады
да, сол эрекеттер қайталанады.
Керекті орынды іздеу кезінде оң жақтағы келесі элементпен
алып алынған
орын ауыстыру карастырылады
167
I
мент сұрыпталғандардың J=I-1 нөмірінен басталатын кезекті
элементімен салыстырылады. Егер таңцалып алынған элемент
а[І]-ден артық болса, онда ол сұрыпталғандар ішіне қосылады,
әйтпесе a[J] бір орынға ығысады да, таңдалған элемент сұрыпталғандар ішіндегі келесі элементпен салыстырылады. Керекті
орынды іздеу эрекеті екі жағдайда:
- егер а[JJ>a[I] болатын элемент табылса;
- дайын тізбектің сол жақ шетіне жеткен кезде аяқталады.
Мысалы:
. •
I
in t і , j ,х ;
f o r (і= 1 ;і< п ;і+ + )
{ х = а [ і ] ; / / ауысатын э л е м е н т т і е с т е са қ т а у
j= i-i;
w h i l e ( х < а [ j ] &&j>=0) / / к е р е к т і орынды і з д е у
{ a [j+ l]= a [j]$
/ / о ң г а жылжыту
3
}
a [j+ l]= x ;
/ / э л е м е н т т і к і р і с т і р і п қою
>
.
...
т ,щ
ш
—
11.6.3 Жаи алмастыру арқылы сұрыптау
Мұнда ең соңғьщан бастап, екі элемент салыстырылады
да, қажет болса, орындары апмастырылады. Осындай әрекет
нәтижесінде ең кіші элемент жиымның ең сол жақ шетіне ығысады.
Қалған жиым элементтері үшін де осы процесс қайталанады.
44
55
12
42
94
18
f o r ( i n t i= l;i< n ;i+ + )
fo r(in t j= n -l;j> = i;j— )
if(a [j]< a [j-1 ])
{ in t r = a [j ] ; a [ j ] = a [ j - 1 ] ; a [ j - l ] = r ; }
11.9
мысал. Бүтін он жэне теріс сандардан тұратын a[n]
жиымының жұп номірлі элементтерінің қосындысын табу ке­
рек, мұнда п саны енгізіледі, ал жиым элементтерінің мэндері
кездейсоқ бүтін сандардан тұрады.
r a n d () функциясы 0...32767 аралығындағы бүтін сан береді.
168
Оны иайдалану үшін s t d l i b . h
басы
С
директивасын, яғни тақырып файУ п енгізу У
'
1
лын қолдану қажет. Жиым эле»<C^i=0;
i<n;
і-н
-^
>
менттері екі разрядты оң және
теріс сандардан тұруы үшін алынған кездейсоқ сан 100-ге бөлініп,
калдығынан 50 алып тасталынған
sum=0
(11.1-сурет).
/ *жиымның жұп э л е м е н т т е р і
қосындысы*/
sum=sum+a[i];
# in c lu d e < s t d i o .h >
# in c lu d e < s t d l i b . h >
sum
# in c lu d e < c o n io .h >
соңы
көруге
m ain ()
{
11.1-сурет. Жиымның жұп
i n t a [5 0 ];
элементтерін қосу
in t n ;
p r i n t f ( " \пЖиымда неше элем ен т б а р ? " ) ;
s c a n f ( " % d " , & n);
p r i n t f ( "Жиым э л е м е н т т е р і: \ n " ) ;
f o r ( i n t i= 0 ;i< n ;i+ + )
{
a [ i ] = r a n d () %100-50;
/* жиымға 0 -5 0 аральиъшдағы кездейсоқ
сандарды меншіктеу *1
printf(f,%d, ",a[i]>;
// сандарды экранда бейнелеу
}
int sum=0;
for(i=0;i<n;i+=2)
sum-H^ali];
// 0,2,4... индексті элементтерді қосу
ргіпіД"\пЖиымның жұп элементтері
қосындысы: %d",sum);
getchO; // нәтижелік экранды жапқызбай, көруге мүмкіндік беру
Iр
у ‘
}
169
11.10
мысал. Бүтін сандардан
құралған А(10) бір өлшемді жиымы
берілген. Сол жиым элементтерінің
арифметикапық ортасын табу керек
(11.2 сурет).
/ * А [ 10 ] жиымынын арифметикалық ортасын т а б у * /
# i n c l u d e < c o n i o .h >
# in c lu d e < s td io .h >
#define n 10
m ain ()
{i n t i = 0 , s = 0 ;
in t a [n ];
te x tc o lo r (R E D );
11.2-сурет. Жиымның
// экран символдары кызыл тусті
арифметикалық ортасын
textbackground(G
R
E
E
N
);
анықтау
// экран фоны жасыл түсті
c lr s c r ();
p r i n t f ("Жиым э л е м е н т т е р ін
- 10 сан е н г і з і ң і з : \ n " ) ;
L
w h i l e (i< n )
p r in tf(" a [% i]= " ,i) ;
s c a n f(" % i" ,& a [i]);
s= s+ a [i];
i= i+ l;
,(-r;
-
p r i n t f (”Жиым арифметикалық ортасы : %5. 2 f ",
(float) s /n ) ;
p r i n t f ("\пАяқтау ушін E n te r басыңыз" );
g e t c h () ;
f
‘ ! ' , n ''
}
11.11
мысал. Нақты сандардан тұратьга А[15] жиымы берілген. Жиымның оң элементтерінің геометриялық ортасын анықтау керек.
. ■. к
N санның геометриялық ортасы мынадай өрнекпен анықталады:
170
/* Нақты сандардан түратын А [15] жиымының оң
э л е м е н т т е р ін ің геометриялық ортасын та б у керек
*/
V
# i n c l u d e < c o n i o .h >
# in c lu d e < s td io .h >
# in c lu d e < s t d lib .h >
# define n 15
main ()
{in t i ;
flo a t a [n] i
r a n d o m iz e ( ) ; / / к езд е й со қ сандарды ө з г е р т і п
/ / отыру функциясы
textcolor(M AGENTA); textbackground(W H IT E );
c lr s c r ();
p r i n t f ("\пЖиым э л е м е н т т е р і: \ n " ) ;
f o r ( i = 0 ; i < n ; i+ + )
{ a [ i ] = ( f l o a t ) ( r a n d () % 100 - 5 0 ) / 1 0 ;
p r i n t f (" %5. I f " , a [ i ] ) ; )
/ / к ө б е й т ін д і мен оң эл ем ен т т ер д ің
/ / санын т а б у
і= 0 ;
/ / бастапқы индекс = 0
flo a t р=1; / / оң элем енттер к ө б е й т і н д і с і
i n t k = 0 ; / / оң элем енттер саны
do
{
i f ( a [ i ] > 0 ) { k++; p * = a [ i ] ; >
i+ + ;
)
w h ile ( i< n ) ;
p r i n t f (" \п о ң элем енттер саны : % d\n",k);
p=pow (p, 1 . 0 / k ) ;
p r i n t f ("геометриялық орта = %f ", p) ;
g e tc h ();
>
* І|
171
х енпзу
mm
mm
x-Ti шығару
соңы
i
M
r
.3-сурет. Жиым элементтерін
өсуі бойынша реттеу
11.12
мысал. Берілген жиым
элементтерін - х]0 сол жиымда осу
реті бойынша орналастыру керек
(11.3 сурет).
# in c lu d e < s td io .h >
#include <stdlib.h>
# i n c l u d e < c o n io .h >
m ain ()
{ i n t x m in ,x [1 0 ];
in t n ,k , i ;
c lr s c r ();
I
p r i n t f (" \п Б е р іл г е н жиым
э л е м е н т т е р і: " ) ;
f o r (k=0; k < 1 0 ; k++)
{ x [ k ] = r a n d () % 100;
/* 32767-ге д е й ін г і
к езд е й со қ сандар * /
p r i n t f (" % i " , x [ k ] ) ;
}
f o r (k=0; k<9; k++)
{ x m in = x [k ];n = k ;
f o r ( i = k + l ; k<10; k++)
i f ( x [ i ] < xmin)
{ x m in = x [i];
n * i;
}
x [ n ] = x [ k ] ; x [k ]= x m in ;
)
p r i n t f ( " \п Р ет т ел г ен жиым
э л е м е н т т е р і: " ) ;
f o r (k=0; k<10; k++)
p
r
i
n
t
f
("
%i"
,
x
[
k
]
)
;
^
| 9
g e tc ih () ,
172
I
11.7 Адрестік операциялар
Адрестік операциялар үшін C/C++ тілінде екі арнайы опера­
тор қолданылады.
& - адресті анықтау үшін қолданылатын операция;
* - адрес арқылы қатынас жасау үшін қолданылатын опера­
ция.
& операциясы берілген айнымалының адресін қайтарады. Мы­
салы, программа мэтінінде sum айнымалысы былай сипатталған
болсын:
i n t sum;
онда &sum жазуы осы айнымалыныц компьютер жадындагы
орналасқан ұясының адресі болып табылады.
Нүсқауыштар. Нұсқауыш мэліметтердің адресін сақтайтын
айнымалы болып табылады. Жалпы алғанда, нұсқауыш адрестің
символдық кескінделуі болып саналады. Қарастырылатын мысалда &sum - эглп атты айнымалыға сілтейтін нұсқауыш болып
табылады. Нақгы адрес ретінде белгілі бір сан тұрады, ал &sum
нұсқауыш типті константа болып табылады.
C/C++ тілінде нұсқауыш типті айнымалылар да бар. Нұсқауыш
типті айнымалылар мэні болып белгілі бір шаманың адресі сана­
лады.
Мысалы, нұсқауыш типті айнымалы p t r идентификаторы
арқылы белгіленген болсын, онда төмендегі оператор sum айнымалысының адресін p t r атты нұсқауыш типті айнымалыға меншіктейді. p t r атгы нұсқауыш типті айнымалы басқа да объектіге
сілтеуі мүмкін.
Мысалы:
i n t * p tr;
ptr= & sum ; ptr=& m ax;
* операциясы - адрес арқылы қатынас жасау үшін пайдаланылатын операция. Мысалы, p t r нұсқауыш типті айнымапысында max айнымалысына нұсқайтын сілтеме сакталған болсын.
Осы айнымалының мэнін білу үшін * адресі бойынша қатынас
жасау операциясын қолдануга болады. p t r нұсқауышы мэнін
аныктау үшін келесі операцияны орындау қажет: r e s = * p t r ;
Нұсқауышты сипаттау. Нұсқауыш типті айнымалыны сипаттағанда берілген нүсқауыш қандай типті айнымалыға сілтейтінін
173
көрсету қажет. Өйткені эр түрлі типті айнымалыға компьютер жадында ұялардың эр түрлі саны бөлініп беріледі.
in t * ip tr ;
char * c p t r ;
' >!
flo a t * f p t r ;
Функциялар арасында байланыс жасау үшін
нұсқауыштарды пайдалану
11.13
мысал. Бұл программада айнымалының мәндерін ауыстыру үшін нұсқауыштар пайдаланылған:
# in c lu d e < s td io .h >
# i n d u d e < c o n i o .h >
v o i d ch a n g e ( i n t * u , i n t *v)
{i n t tem p ; temp = * u ; *u = * v ; * v = tem p ; }
main ()
{ in t x=5, y=10;
c l r s c r () ;
^ ’ ,J
p r i n t f ("x=%d y = % d \n " ,x ,y ) ;
ch a n g e ( &x, &y) ;
■1
p r i n t f ("x=%d y = % d \n " ,x ,y ) ;
g etch () ;
}
Нэтижесі:
x=5 y=10
x=10 y=5
^
,
r inm tt
,„ ,, s
'
J
i,* /
11.8 Жиымдар және жиымдарға қолданылатын нұсқауыштар
Жиымдарды сипаттағанда, элементтер типі жэне жалпы жағайда компьютер жадының қажетті класы көрсетіледі. Қарапайым
айнымалыларда қарастырылатын қасиеттер жиымдарды да си­
паттау кезінде қолданылуы мүмкін. Мысалы:
in t b [30];
main ()
{ f lo a t a [30] ;
s t a t i c char c [ 2 0 ] ;
ex tern b [];
}
174
Жиымдарды инициалдауды қарастырайық. Жиым сипатталуында тек сыртқы немесе статистикалык жиымдар гана инициалдануы мүмкін. Мысалы, 8 топтагы студентгер саны stu d [8 ]
жиымы ретінде көрсетілген:
#i n c l u d e < c o n io . h>
#i n c l u d e < s t d i o ,h >
i n t s t u d [ 8 ] = { 1 5 ,1 6 ,1 4 ,1 8 ,1 5 ,2 0 ,1 7 ,1 9 } ;
m a in ()
I in t i ;
c l r s c r (} ;
e x te rn i n t s t u d [ ] ;
f o r (i = 0 ; i< 8 ; i+ + )
p r i n t f ( " N %i тобында %i с т у д е н т \п " ,
i+ 1 , s t u d [ i ] ) ;
I
Жиымның нұсқауыштарын қарастырайық. Мысалы:
i n t *а;
Жиым аты нұсқауышты қолданған жағдайда, жиымның 0-ші
элементін аныктайды, яғни а жиымы сипатталган болса, про­
грамма мэтініндегі а идентификаторы 0-ші элементті көрсетеді
деп саналады:
а == &а[0] ;
бұл тендеудің екі бөлігі де —а да жэне &а [ 0 ] де жиымның 0-ші
элементінің адресін аныктайды. Осы екі белгілеу де нұскауыш
типті константа болып табылады. Сондыктан оларды мэн ретінде
нұскауыш типті айнымалыға меншіктеуге болады немесе кажет
болса, нұсқауыш типті айнымалынын мәнін өзгертуге болады.
11.14 мысал. Нұскауыштын мэніне санды косуға болапгынын
көрсететін программа карастырайық.
m a in ()
{ in t a [4 ], * p ti, i ;
f lo a t b [ 4 ] , * p t f ;
p ti= a ;
p tf= b ;
f o r ( i= 0 ; i < 4 ; i+ + )
p r i n t f ("нұсқауыштар+% d : %8u % 1 0 u \ n " , i , p t i + i ,
p tf+ i);
}
175
Мұның нәтижесі:
нүсқауыштар + 0:
65518
65498
нұсқауыштар + 1 :
65520
65502
нұсқауьшгтар + 2 : 65522
65506
нүсқауыштар + 3:
65524
65510
Келесі мысалды қарастырайық.
(а+2) — &а[2] ;
* (а+2) = а [2] ;
Бұлар нұсқауыштар мен жиымның арасындағы байланысты
анықтайды, яғни жиымның жеке элементін анықтау үшін немесе
оның мэнін пайдалану үшін нұсқауышты қолдануға болады.
11.9 Нұсқауыштарды пайдаланып жиымдармен жүмыс істеу
Жиымдарды функция арқылы қарастырып, содан кейін осы
функцияны нұсқауыштарды пайдаланып жазып шығу керек болсын.
77.75 мысал. Функция арқылы жиым қосындысын табу.
/ / функция арқылы жиым қосындысын т а б у
# i n c l u d e < c o n io .h >
# i n c l u d e < s td io .K >
i n t f l ( i n t a [ l , i n t t)
{
i n t i,s u m = 0 ;
f o r ( і= 0 ; i < t ; i+ + )
s u m + = a [ i] ;
c l r s c r ();
s= fl(b ,1 0 );
printf("s= % d",s);
g e tc h ();
}
Негізгі программада f l функциясын шақыру үшін нақты
параметрлерді жазып, функция келесі түрде шақырылып отыр:
fl(b,10);
176
11.16
мысал. Нұсқауышты функцияда ( f l ) пайдалану прог-
раммасын жазайық.
// функцияда нусқауыш арқылы жиым қосындысын
табу
# in c lu d e < c o n io .h >
#include <stdio.h>
i n t f 1 ( i n t *pa, i n t t)
<
i n t i , suin=0;
f o r (issO; i < t ; i++)
sum+=* (p a + i) ;
r e t u r n (sum) ;
)
m ain ()
{ i n t i,s ,b [ 1 0 ] = { 5 ,6 ,1 4 ,1 2 ,3 0 ,5 ,9 ,7 ,1 5 ,5 } ;
c lr s c r ();
s = f l( b ,1 0 ) ;
p r i n t f ( "s=% d", s ) ;
g e tc h ();}
программада осы f 1 функциясын шақыру үшін, нақты параметрлер бұрынғыдай жазыла береді: f 1 ( b , 1 0 ) ;
11.10 Нұсқауыштарға қолданылатын операциялар
C/C++ тілінде нұсқауыш типті айнымалыларға бес негізгі опе­
ратор қолдануға болады:
1. меншіктеу операциясы. Нұсқауышқа адресті меншіктеуге
болады. Жиымның атын қолданып немесе адресті анықтайтын &
операторын пайдаланып, әдетте адресті меншіктеуге болады;
2. мэнді анықтау. Берілген адрес бойынша кейбір ұяшықта
сақталатын мэнді аньщтау үшін * операциясы қоланылады;
3. нұсқауыштың адресін анықтау. Кез келген айнымалылар
сияқгы нұсқауыш типті айнымальшар мэні немесе адресі болуы
мүмкін. & операциясы арқылы нұсқауыштың адресін анықтауға
болады;
4. нұсқауыштарды арттыру. Бұл амал эдеттегі + операция­
сы комегімен немесе арттыру операциясы арқылы орындалуы
мүмкін. Нұсқауышты арттьфып, жиымның келесі элементіне
12-1660
177
өтуге болады (кажет болса, нұсқауыш мәнін кемітуге де болады);
5. нүсқауыштардың айырмасы. Бір жиымның элементіне
сілтейтін нұсқауыштың айырмасын табуға болады. Жиым элементінің арасындағы ара қашықтығын анықтау үшін нұскауыштың айырмасын есептеуге болады.
11.17мысал.
- . z - . ' j . w . - ' - #•
/* Жиымның максимумын тауы п, одан к е й і н г і э л е м е н т т е р ін к е м у і бойынша р е т т е п орналасты ру * /
# in c lu d e < с о п іо .һ >
#i n c lu d e < s t d i o .h >
# in c lu d e < m ath .h >
#define n 1 0
m ain ()
{ in t i , j , t , c ;
i n t a [n ]= { 6 ,5 ,9 ,8 ,7 ,4 ,1 ,2 ,3 ,0 } ;
i n t * p a,m ax ;
c l r s c r () ;
/ ; Ь.-іі
p r i n t f (" a [ 1 0 ] э л е м е н т т е р і : " ) ;
f o r ( i= 0 ; i< n ; i+ + )
p r i n t f (" %d ” , a t i j ) ;
p a = a ; m ax=*pa; t = 0 ; //м акси м ум мен оның
//и н д е к с ін т а б у
f o r ( i = l ; i< n ; i+ + )
i f ( ( * ( p a + i ) ) > (max))
{max = ♦ ( p a + i ) ; t = i ; }
p r i n t f ("\nm ax = %d оның и н д ек сі = % d\n", max, t ) ;
f o r ( i = t ; i < n - l ; i+ + ) / / э л е м е н т т е р д і к ем у і
/ / бойынша р е т т е у
f o r ( j = i + l ; j< n ; j+ + )
if(*(pa+i) < * (pa+j))
{ c = * ( p a + i ) ; / / жиымньщ 2 э л е м е н т ін алмастыру
* (p a + i)= * (p a + j);
* ( p a + j) = c ;
}
p r i n t f ( " \пнәтиж е : " ) ;
178
f o r (1=0; i < n ; i+ + )
p r i n t f ( " % d ", * ( p a + i ) ) ;
g e t c h () ;
>
11.11 Динамикалық айнымалылар
Программада жарияланған барлық айнымалылар мэлі меггер
сегменті (64Кбайт) деп аталатын жедел жадының үздіксіз бір
аймағында орналасады. Мұндай айнымалылар программа орын­
далуы барысында өз көлемін өзгертпейді де, статикалық айныма­
лылар деп аталады. Жиымдардың көлемі үлкен болған жағдайда,
мәліметгер сегментіне олар сыймай қалуы мүмкін. Осындай
сэтгерде динамикалық жады қолданылады.
Динамикалық жады - бұл программаға мэліметтер сегментінен тыс бөлініп берілген стек (тізбекті) түріндегі жады,
онда программанын жэне оның ішкі функцияларының жергілікті
айнымалылары орналасады.
Динамикалық жадымен жұмыс істеу үшін нұсқауыштар қоданылады. Солар арқылы динамикалық айнымалы деп аталатын
динамикалық жады мэліметтерін қолдануға болады. Динамикалық
айнымалылар арнайы функциялар мен операциялар көмегімен
жасалады. Олар программа жұмысы аяқталғанша немесе арнайы
функциялар мен операциялар арқылы жойылғанша қолданылады.
C/C++ тілдерінде динамикалық айнымалыларды қолдану (жа­
сау) үшін new операциясы қоланылады:
нүсқауыш = new тип_аты[инициализатор];
мұндагы инициализатор —жай жақшадағы орнек.
new операциясы берілген типке сәйкес динамикалық жадыны
пайдалануга мүмкіндік береді. Егер инициализатор берілген бол­
са, онда осы жады аймагына инициапизаторда көрсетілген мэн
жазылады.
int *x=new int(5);
Динамикалық айнымалыларды жою (ошіру) үшін delete
операциясы қолданылады:
delete нүсқауыш;
179
мұндағы нұсқауыш бұрын new операциясы арқылы бөлінген
жады аймағынын адресін көрсетеді.
delete х;
gj
C/C++ тілінде динамикалық жадымен жұмыс істеуді анықтайтьш кітапханалық функциялар анықталған, олар <stdlib.h>
тақырып файлында орналасқан:
1 ) void *malloc (unsigned s) - нұскауышты ұзындығы
s байт болып келетін динамикалык жады аймағының басына
қайтарады, қателік болған жағдайда NULL мэнін береді;
2 ) void *calloc (unsigned n, unsigned m) —нұсқауышты әрқайсысы ш байттан тұратын п элемент орналасатын
динамикалық жады аймағының басына қайтарады, қателік болған жағдайда NULL мэнін береді;
3) void *realloc(void * р , unsigned s) - бұрын
бөлініп берілген динамикалық жады аймағының көлемін s байтқа
дейін өзгертеді, р - өзгертілетін блок адресінің басы, қателік
болған жағдайда NULL мэнін береді;
4) void *free (void *p) - бұрын бөлініп берілген
динамикалық жады аймағын босатады, - сол аймақ басының
адресі.
Мысалы:
|
''' ^ 4 •*'1■'*•■
-:
int *u= (int*)malloc (sizeof (int)) ; /* функцияға
керекті жады көлемі байтпен беріледі, бірақ функция void *
типіндегі мэн қайтаратын болғандықтан, оны нұсқауыш типіне
(int *) түрлендіру керек */
f r e e (u) ; // бөлініп берілген жады аймағын босату
р
Бақылау сұрақтары
1.
2.
3.
4.
5.
6.
7.
8.
9.
Жиым дегеніміз не?
Жиымдарга бастащы мәндер қалай тагайындалады ?
Жиымды сипаттау тәсілдері.
Жиым элементтерін енгізу жэне экранга шыгару жолдары.
Кездейсоқ сандарды қалай иіыгаруга болады?
Жиымга кездейсоқ сандарды мениііктеу цалай орындалады?
Жиымды өңдеу есептерінің түрлері (кластары).
Жиымның ең үлкен (ең кіші) элементін анықтау.
Жиым элементтері қосындысын табу.
180
10? Жиым ііиіндегі екі элементтің бір-бірімен орнын алмастыру.
11. Жиым элементтерін кері багытта орналастыру.
12. Жиымның көрсетілген элементтерін өңдеу тәсілдері.
13. Жиымды сүрыптау (сорттау, реттеу) жолдары.
14. Адрестік операциялар түсінігі.
15. Нұсқауыш дегеніміз не? Ол қалай сипатталады?
16. Функциялар арасында байланыс жасау үшін нұсқауыштарды пайдалану.
17. Жиымдарга қолданылатын нүсқауыиітар.
18. Нұсқауыштарга қолданылатын операциялар.
19. Динамикалық жады ұгымы.
20. Динамикалық айнымалыларды қолдану операциялары.
w
і
Тапсырмалар
Жиымдарды өңдеу кезінде төмендегі ережелерді есте сақтаған жөн.
1. Жиым өлшемі (ені, көлемі) тек константа немесе констангалык
өрнек бола алады. Жиым өлшемін идентификатор түріндегі (ат
қойылған) константа арқылы беру дұрыс деп саналады.
2. Жиым элементтері нөлден бастап нөмірленеді, сол себепті элементтің ең үлкен нөмірі элементтер санынан бірге кем болады.
3. Индекс нөмірлерінің жиым шекарасынан асып кетпеуін программа
қадағаламайды, оны программалаушы өзі бақылауы тиіс.
4. Нұсқауыш — жедел жады аймағының адресін сақтайтын айныма­
лы.
5. Жиым аты оның О-элементіне нұскауыш болып табылады.
6. Егер программаға енгізілетін элементтер мәні алдын ала белгілі
болса, онда жиымды сипаттау кезінде оның мәндерін көрсетіп (ини­
циалдау) кету керек. Жиымды глобальді айнымалы емес, локальді
айнымалы етіп сипаттаған дұрыс.
7. Жиым элементтерін пернеден енгізгеннен гөрі randQ және
randomO функцияларын пайдаланып, кездейсоқ сандар тізбегін
беру арқылы енгізген ыңғайлы болады.
8. Жиымдарды сұрыптау алгоритмдерінің жұмыс істеу жылдамдығы,
алатын көлемі және қолданылу аимағы эр түрлі оолып келеді.
Тапсырмаларды орындауға арналған нусқаулар
A. Әрбір студент журналдағы өз нөміріне сәйкес (мұғалімнің көрсетуі
бойынша) төрт есеп шығаруы тиіс.
B. Әр есептің блок-схемасы жэне соған сэйкес программасы құрылып,
компьютерде сол программаның нәтижесін алу керек.
C. Екі блок-схема Word программасындағы Сурет салу-Автофигура-
181
лар-Блок-схемалар мүмкіндігімен сызылып көрсетілуі тиіс.
D. Берілген жиым элементтері мен нәтижелік элементтерді экранға
шығарып, нәтижелерді жазып алу қажет немесе нәтижені бірден
файлға жазуға тырысу керек.
Есептер
1. Кез келген сандардың бірөлшемді Л(10) жиымындағы оң элементтерді екі есе кемітіңдер, ал теріс элементтері болса, онда оларды
индекстерінің мәнімен ауыстырыңдар.
2. Бірөлшемді Л(10) жиымындағы теріс элементтердің ең үлкенін
табыңдар.
3. Бірөлшемді А(20) жиымындағы -5-тен кіші элементтердің қосындысын және олардың жалпы санын, сонымен бірге 5 санына
бөлінетін элементтердің нөмірлерін анықтаңдар.
4. Бірөлшемді Л(10) жиымындағы оң элементтердің квадраттарының
арифметикалық ортасын есептеңдер.
5. Бірөлшемді Л(100) жиымындағы теріс элементтердің санын
анықтаңдар.
6. Бірөлшемді жиым мэндері берілген диапазонда жататын элементтерінің нөмірін оасып шығарыңдар.
7. Бірөлшемді ^4(10) жиымындағы оң элементтердің ішінде мәні ең
кішісін жэне оның индексін (нөмірін) табыңдар.
8. Бірөлшемді жиымда 2-элементті бірінші орынға, 3-ні 2-шімен жэне
т.б. алмастырулар орындай отырып, 1-элементті соңғы орынға
қойыңдар.
9. Берілген оң сандар тізбегіндегі қосындысы берілген саннан асып
кетпейтін элементтердің санын табыңдар.
10. Ұтыс билетінің нөмірі алты орынды сан. Билет "бақытты" (алдыңгы
жэне соңғы үш цифрының қосындысы өзара тең) немесе "табысты" (жұп орындарда тұрған цифрлардың қосындысы тақ орында
тұрғандардың қосындысына тең) болатындығын анықтаңдар.
11. Оң жэне теріс сандар тізбегіндегі бірінші теріс санға дейінгі
орналасқан сандар тізбегінің өсу ретімен орналасатындығын анықтаңдар.
12. N кәсіпорынның бір жылғы электр энергиясын тұтынуы туралы
дерек бар. Осы бойынша энергия тұтынудың арифметикалық орта­
сын жэне энергияны ең көп үнемдеген кэсіпорынды анықтақдар.
13. 14 аудан бойынша жанармай қорының мөлшері белгілі. Жанармаймен ең жақсы қамтылған үш ауданды анықтаңдар.
14. Берілген Д 1 5 ) жиымы бойынша мына шарттарды қанағаттандыратын В жиымын құрыңдар:
В(0) =А( 1); 5(1) = А( 1) *А(3); В(2) = А( 1) * ^1(3)* А( 5);...
Щ 7 ) ~ А ( І ) * А(3) •
* А(1Э)
182
15. Берілген 4( 14) жиымы бойынша мыиа шаргтарды каиагаттан*
иыратын В жиымын кұрынлар :
В{0) * >4(0); Я( 1)» А(0) * 4 (2);... В(7)*,4(0) • 4 (2) • ... ♦ 4 ( 0 )
16. Бершген 4(15) жиымм бойынша мыиа шарттарды канагаттандыратын В жиымын құрындар:
В{0) - 4(0) - 4 ( 14); В{ 1) - Л( I) - 4( 13); В{2) - 4(2) - 4 ( 12);...
Щ В(7 ) - 4 ( 7 ) - 4 ( 8 )
17. Берілгеи 4(16) жиымы бойынша мыиа шарпгтарды канагаттаидыратын В жиымын кұрыңдар:
Д (0)- 4(0)/4( 15); В( 1) - 4( 1)/4( 14); Я(2) - 4(2)/4( 13 ) , ...
В(7) * 4(7)/4(8)
18.4( 14) жиымы берілген. Жиым ілементтерінің арифметикапык ортасын жэне ол мэнге еңжакын элементтін нөмірін аныктандар.
19. 4(14) жиымы берілген. Екі жиым кұрындар: онын біріншісі
индекстері жұп сандар, ал екінші жиым индекстері так сан болатын
элсменттер болсын.
20. N элементтен тұратын бірөлшемді жиым берілген. Әрбір жолында
L элемент болатын екіөлшемді жиым құрастырындар.
21. 4(17) жиымы берілген. 7-ден үлкен барлык элементтерді берілген
жиымның ең үлкен элементімен ау ыстырыңдар.
22. 4(16) жиымы берілген. Алғашқы оң элементке дейінгі теріс элементтердің санын аныктаңдар.
23. 4(18) жиымы берілген. 2-ден кіші барлык элементтерді 3 санымен
ауысгырыңдар.
24. 4(17) жиымы берілген. 0-ден үлкен барлык элементтерді 5-ке, ал
қалғандарын 0-ге ауыстырыңдар.
25. 4(14) жиымы берілген. 4 жиымының барлык так элементгері ин­
декс нөмірлерімен ауыстырылатын В жиымын кұрындар.
26. 4(34) жиымы берілген. Так нөмірлі индекстерде тұрған элементтердің ең үлкенін аныктаңдар.
27. A(N) жиымы берілген. Алғашкы ең кіші (минимал) элементтің орнын (индексін) аныктаңдар.
2 8 .4(А0 жиымы берілген. Соңғы ен кіші элементгің орнын анықтаңдар.
29. 4(N) жиымы берілген. Соңғы ен үлкен (максимал) элементтің ор­
нын аныктаңдар.
30. A(N) жиымы берілген. Алғашкы ен үлкен элементгің орнын аныктаңдар
A(N) жі
анықтаңдар
- 0
SIN(4(/)) формуласы
183
жиымын құрастырыңдар жэне Р = А( 0) * В( 11) + А( 1) * В( 10) + ... +
А{\ 1) * 5(0) өрнекті есептеп шығарыңдар.
33. Пернетақтадан жиымға бес бүтін мэн енгізіндер. Олар бір жолға
үтір арқылы жазылады. Жиымның арифметикалық ортасын табыңдар.
і* :
*Ы ш т
:ы -.
34. Пернетақтадан X жиымының бес бүтін мэнін енгізіңдер. Жиым
элементтерінің эрқайсысының түбірінің мэнін жэне квадратын
экранға шығарыңдар.
35. Кездейсоқ сандар генераторының көмегімен А[0.Л] жиымын құрыңдар жэне оны экранға шығарыңдар. Оның барлық элементтерін
2 есеге арттырыңцар.
36. Кездейсоқ сандар генераторының көмегімен элементтері -1 0 мен
10 сан аралығында болатын л([0..8] жиымын құрыңдар жэне оны
экранға шығарындар. Жиымның теріс элементтерінің санын
есептендер.
. :. .. V .
:
37. Кездейсоқ сандар генераторының көмегімен элементтері -2 0 мен
10 саны аралығында болатын А[0..12] жиымын құрыңдар жэне оны
экранға шығарыңдар. Жиымның барлық теріс элементтерін 0-ге
ауыстырыңдар.
38. Кездейсоқ сандар генераторы аркылы элементтері -1 5 пен 30 саны
аралығында болатын бүтін саннан А[0.. 15] жиымын құрастырыңдар
жэне оны экранға шығарыңдар. Жиымның ең үлкен элементін жэне
оның индексін анықтаңдар.
39. 8 сағ-тан 20 сағ-қа дейінгі уақыт аралығында ауа температурасы
сағат сайын өлшенеді. Осы аралықта температураның төмендегені
мэлім. Температураның алғашқы теріс мэні қай сағатта пайда
болғандығын анықтаңдар.
40. Қараша айында он күн бойына ауа температурасы туралы деректер жиымда сақталған. Температураның -10-нан қанша рет төмен
болғанын анықтаңдар.
41. Балқаш көлі жағалауының температурасы туралы мәлімет қыркүйек айында он күн бойы жиымда сақталған. Осы уақыт ішінде
неше күн шомылуға қолайлы болатынын анықтаңдар.
42. Сәуір айының он күндік ауа температурасы мен жауын-шашын
мөлшері туралы мәлімет жиымда сақталады. Осы он күнде жауған
жаңбыр жэне қардың мөлшерін анықтандар.
43. Желтоқсан айының он күндік ауа температурасының мәліметі жиым­
да сақталған. Он күндік температура мәліметі бойынша қанша рет
орта температурадан жоғары ауытқу болатындығын анықтандар.
44. Қараша айының он күн ішіндегі желдің (солтүстік, оңтүстік, шығыс,
батыс) бағыты жэне соғу күшінің мәліметтері жиым түрінде
сақгалған. Неше күн желдің жылдамдығы 8 м/с-тан артық жылдамдықпен соққандығын анықтаңдар?
Чр I
184
45* Бүтін саннан тұратын 15 элементті жиым құрыңдар және олардың
©расындағы ең кіші элементті анықтаңдар.
46. Жерге еркін түсу кезінде дененің 1 , 2 , . . . , 10 с ішінде жүріп өткен
қашықтыктарынан құралатын нақты сандардың сызықтык жиымын құрыңдар.
47. Бүтін сандардың сызыктық жиымы берілген. Оның кему ретімен
орналасқандығын тексеріңдер.
48. Бүтін сандардың сызықтық жиымындағы оң элементтердің қосындысын табыңдар. Жиымның өлшемі — 10. Жиымды пернетақтадан толтырыңдар.
49. Бүтін сандар жиымындағы жұп нөмірлі элементтердің қосындысын
табыңдар. Жиымның өлшемі 20. Жиымды 100 бен 200 арасындағы
кездейсоқ сандармен толтырыңдар.
50. Бүтін сандар жиымындағы 7-ге қалдықсыз бөлінетін элементтердің
көбейтіндісін табьгңдар. Жиым өлшемі 15. Жиымды 10 мен 50
арасындағы кездейсоқ сандармен толтырыңдар.
51. Нақты сандар жиымындағы тақ нөмірлі элементтердің косындысын
табыңдар. Жиым өлшемі 20. Жиымды 100 бен 200 арасындағы
кездейсоқ сандармен толтырыңдар.
52. Бүтін сандар жиымындағы барлық 0-ден кіші элементтердің көбейтіндісін табыңдар.
53. Бүтін сандар жиымында: "2-ге бөлгенде қалдық 3-ке тең" шартын
қанағаттандыратын барлық элементтердің косындысын табыңдар.
Жиымның өлшемі 20. Жиымды 200 бен 300 аралығындағы кездейсоқ сандармен толтырыңдар.
54. Нақты сандар жиымындағы берілген саннан кіші барлық элементтердің қосындысын табыңдар. Жиымның көлемі 20. Жиымды
50 мен 100 аралығындағы кездейсоқ сандармен толтырыңдар.
55. Накгы сандар жиымындағы берілген саннан кіші барлық элементтердің көбейтіндісін табыңдар. Жиымның көлемі 10. Жиымды
50 мен 100 аралығындағы кездейсоқ сандармен толтырындар.
56. Жиымдағы 3 пен 9-ға қалдықсыз бөлінетін элементтердің көбейтіндісін табыңдар. Жиымның көлемі 10. Жиымды 5 пен 500 аралығындағы кездейсоқ сандармен толтырыңдар.
57. Бүтін сандар жиымында элементтердің арифметикалық ортасынан кіші болатын барлық элементтердің қосындысын табыңдар.
Жиымның көлемі 20. Жиымды 150 мен 300 аралығындағы кездейсоқ сандармен толтырындар.
58. Бүтін сандар жиымында 5-ке де, 8-ге де бөлінетін элементтердің
косындысын табыңдар. Жиымның көлемі 30. Жиымды 100 бен 500
аралығындағы кездейсоқ сандармен толтырыңдар.
59. Науқастың тәулік бойы температурасын талдайтын програм­
ма жазыңдар: температураның минимал, максимал және ариф-
185
і
метикалық орта мәнін анықтаңдар. Температура тәулік бойына 6
рет өлшенеді және нәтиже пернетақтадан Т жиымына енгізіледі.
60. Сызықтық жиымға бір жылдың эрбір 12 айының жауын-шашын
мөлшері туралы мэлімет тіркелген. Жыл бойы жауған жауыншашынның мөлшерін, оның орта айлық мөлшерін, құрғакшылық
(жауын-шашын мөлшері 30 мм-ден аз) болған айлардың санын,
жылдың ең қэдрғақ айын анықтайтын программа жазыңдар.
61. Бірөлшемді жиымда берілген а санына тең алғашкы жұп
элементтердің санын табықдар.
186
12. ЕКІ ӨЛШЕМДІЖИЫМДАР
■
Екі өлшемді жиымды —матрицаны пайдалану үшін тік жақI шалар ішінде олардың екі өлшемінің де енін көрсету керек. Мы> сапы:
[
int a [4][3];
алғашкы сан жолдар санын, ал екінші сан баганалар санын
көрсетеді, а жиымы 12 элементтен тұрады. Оларға бастапқы
мэнді былай береміз:
int а[4][3]={
{0 , 1 ,2 },
{3,4,5},
{6,7,8},
{9,10,11}
ішкі жүйелі жақшаларды қоймаса да болады:
int а[4][31 = {0,1,2,3,4,5,6,7,8,9,10,11};
Келесі түрде сипаттау жолдардың тек бірінші элементтерін ғана
аныктайды, қалған элементтер 0 -ге тең болып саналады:
int a[4]|3J={ {0},{3},{6},{9}};
Егер ішкі жүйелі жақшалар алынып тасталса, онда мағынасы
өзгереді.
L*.
int а[4][ЗН 0,3,6,9};
мұнда бірінші жолдың 3 элементі мен екінші жолдың бірінші
элементі аныкталады да, қалғандары 0 болып саналады.
Екі өлшемді жиымды инициалдау қабаттасқан циклдер арқылы
орындалады.
12Л-мысал.
/* а[3][4] жиымы элементтерін rand(
енгізу және экранга шыгару */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main О
{
const int jol=3, bag=4;
187
) арқылы
int a[jol][bag];
clrscr();
for (int i=0; i<jol; i++)
for (int j=0; j<bag; j++)
a[i] [j]=*rand()%100-50;
printf("\na[3][4] жиым элементтері мәндері:")
for (i=0; i<jol; i++)
for (j=0; j<bag; j++)
printf(" %i",a[i][j]);
getch();
n ;.
}
12.1-сурет. Жиым элементтерін енгізу - шығару
Матрицаларды өңдейтін негізгі алгоритмдер ретінде бір өлшемді жиымдарды өңдеу кезінде қолданылған алгоритмдер саналады. Жалпы матрицаларды өңдейтін барлық алгоритмдерді екі
топқа бөліп қарастыруға болады, олар:
1 . матрицаның барлық элементтерін өңдейтін алгоритмдер.
2 . матрицаның эр жолы немесе әр бағанасы элементтерін
жеке-жеке өңдейтін алгоритмдер.
188
I
12.1 Матрицаныц барлық элементтерін өңдейтін
алгоритмдер
12.2-мысал. Нақты сандардан тұратын а46матрицасы берілген
Мынадай өрнекті Z
Р1
есептеу керек, мұндағы Р1 и Р2
Р2
*
•
алынған матрицаның оң жэне теріс элементтерінщ
көбейтіндісі.
=pl/
/ а.[4][6] матрицасы
теу керек, рі және р2 - матрицаның
элементтерінің көбейтіндісі */
finclude <math.h>
#include <conio.h>
#include <stdio.h>
void line()
\n " ) ;
{printf("---------------------return;}
main ()
{
static int a[4][6]={
{ 5 ,- 1 1 ,4 ,- 2 ,5 ,6 } ,
{3,3,-12,-5,7,8},
{2,3,-3,14,-9,-3},
{-9,3,-6,14,9,-3}
}
int i,j;
float p i , p 2 , z ;
clrscr();
printf("Берілген матрица :\n");
line () ;
for (i=0; i<4; i++)
{for (j=0; j<6; j ++)
printf(" %3i ", a[i][j]);
printf("\n");}
line () ;
189
/* Матрицаны өңдеу */
pi = 1;
p2 = 1;
f o r ( i= 0 ; i< 4 ; i+ + )
f o r ( j = 0 ; j < 6 ; j ++)
{if (a[i][j]>0) pi = pl*a[i][j];
if (a[i][j]<0) p2 = p2*a[i][j];
}
z = p l/a b s (p 2 ) ;
p r i n t f ("
z = % f \ n " ,z ) ;
lin e ();
g e tc h ();
Матрица мынадай түрде беріледі:
А(0,0)
А (1 ,0)
А (2 ,0)
А(3, 0)
• • •
А(0,1)
А(1,1)
А (2 ,1)
А (3 ,1
• • •
А(0,2)
А(0,3)
А(1, 2) А (1 ,3)
А(2,2) А (2 ,3)
А(3, 2) А (3 ,3
• • •
• • •
...
...
...
• • •
А(п-2,0) А(п-2,1) А(п-2,2) А(п-2,3) ...
А(п-1,0) А(п-1,1) А(в-1,2) А(п-1,3) ...
А(0, j)
A(0,n-1)
A (l, j)
А(2, j)
A (l, n-1)
A(2, n-1)
А(3, j)
A(3, n-1)
A(i, j)
A(n-2, j)
A(n-1, i)
• • •
A(n-2, n)
A(n-1, n-1)
Бас диагональ элементтері белгісі:
і= j
Бас диагональдан жоғары тұрған элементтері белгісі: і< j
Бас диагональдан томен тұрган элементтері белгісі: і> j
Қосалқы диагональ элементтері белгісі:
i+j = п-1
Қосалқы диагональдан жогары элементтер белгісі: i+j < п-1
Қосалқы диагональдан томен элементтер белгісі:
j+j > n-1
12.3-мысап. Бүтін сандардан тұратын квадрат b55 матрицасы берілген. Оның бас диагоналының сол жагында және оң жагында
орналасқан нөлге тең элементтері санын анықтап, солардың
айырмасының модулін табу керек.
Мынадай белгілеулер енгізейік:
L1 - бас диагональдың сол жағында (төменінде) орналасқан эле­
менттер саны;
L2 - бас диагональдың оң жагында (жогарысында) орналасқан
190
элементтер саны;
L= |L1-L2| - солардың айырмасы модулі.
#include <math.h>
# in c lu d e < c o n io .h >
#include <stdio.h>
void line()
{printf ("------------------------ \n")
return;}
main ()
{ static int b[5][5]={
{5,0,0,0,0},
{0,3,12,0,0},
{0,33,13,14,0},
{0,23,0,14,0},
{35,0,13,14,9},
};
int i,j;
int Ll,L2,L ;
clrscr();
printf("Берілген матрица :\n");
line () ;
for (i=0; i<5; i++)
{for (j=0; j<5; j ++)
printf(" %3i ", b[i][j]);
printf("\n");}
line () ;
Ll = L2 * 0;
for (i=0; i<5; i++)
for (j=0; j<5; j ++)
if (b[i][j]=0)
{if (i>j) Ll = Ll+1;
if (i<j) L2 = L2 +1;
}
L= abs(Ll - L2);
printf("
L = %i ", L);
getch();
}
191
12.2 Екінші типтегі есептер алгоритмдері
Бүтін сандардан тұратын а
матрицасы
жолдарының алғашқы элементін осы жолдың минимальды элементімен алмастыру керек. Нэтижелік а}6 матрицасы
элементтерін экранға шығару қажет.
/* а [3] [ 6 ] матрицасы жолдарының алғашкы эл ем ен тін
осы жолдың минимальды эл ем ен тім ен алмасты ру к е ­
р е к . Н атиж елік X матрицасы э л е м е н т т е р ін э к р а н ғ а
шығару к а ж е т . * /
# in c lu d e < m ath .h >
# in c lu d e < c o n io .h >
# in c lu d e < s t d i o .h >
v o id l i n e ()
{ p r i n t f ( " ---------------------------------------------------- \ n " ) ;
r e t u r n ;}
m ain ( )
{ s t a t i c i n t a [ 3 ] [ 6 ]={
{ 5 , - 1 1 , 4 , - 2 , 5 , 6 },
{ 2 ,3 ,- 3 ,1 4 ,- 9 ,- 3 } ,
i
{ - 9 ,3 ,- 6 ,- 1 4 ,9 ,- 3 }
};
| | i
i n t i , j , jm in ,m in ;
•
C irS C r ( ) ;
;.
*;
p r i n t f ( " Б е р іл г е н матрица : \ n " ) ; l i n e ( ) ;
f o r (i= 0 ; i< 3 ; i++)
{ f o r (j = 0 ; j < 6 ; j ++)
p r i n t f (" %3i " , a [ i ] [ j ] ) ;
p rin tf(" \n " );
}
lin e ( ) ;
4"
f l
id
%r
f o r (i = 0 ; i< 3 ; i++)
{ min=+lE6;
f o r ( j= 0 ; j < 6 ; j ++)
i f < a [ i] [ j] < m in )
{ m in = a[i] [ j ] ;
jm in = j;
12.4-мысал.
192
I
I
j
I
a[i][jmin]=a[i][0];
a [ ij[ 0 3 = ® in ;
printf("Өңделген матрица :\n");line();
for (i=0; i<3; i++)
{for (j=0; j<6; j ++)
printf(" %3i ", a[i][j]);
printf("\n");
} line() ;
getch();
12.5-мысал. Бүтін сандардан тұратын а} 4 матрицасының эрбір
бағаналарының арифметикалық орташа мэнін анықтап, оларды
бір өлшемді s4 жиымы ретінде бейнелеу керек.
/* а[3][4] матрицасының әрбір баганаларының
арифметикалық орташа мәнін анықтап,оларды бір
өлшемді s [4] жиымы ретінде бейнелеу керек. */
//әрбір бағана қосындысы және солардың орташа мәні
#include <сопіо.һ>
#include <stdio.h>
main ()
{ static int a[3][4]={
{5,11,4,2},
{3,3,12,5},
{2,3,3,14}
};
int i ,j ;
float s [4];
clrscr();
printf("Берілген матрица :\n");
printf ("--------------------- \n") ;
for (i=0; i<3; i++)
{for (j=0; j<4; j ++)
printf(" %3i ", a[i][j]);
printf("\n");}
/* матрицаны өңдеу */
printf ("--------------------- \n") ;
13-1660
193
p r i n t f ("");
f o r (j = 0 ; j< 4 ; j++)
{ s [ j ]= 0 ;
f o r ( i = 0 ; i < 3 ; i ++) s [j ] + = a [ i ] [ j ] ;
p r i n t f (" % 4 .2 f" , s [ j ] / 3 ) ;
>
p r i n t f ( " \ n -------------------------------------- ") ;
g e t c h () ;
Aa
t
"J
Бұл программада s[j] жиымының эрбір элементін есептеуде
қабаттасқан екі цикл қолданылған, онда j индексі сыртқы цикл
параметрі, ал і индексі —ішкі цикл параметрі. Осы тәсіл матрица
элементтерін бағаналар бойынша өндеу ісін жүзеге асырады.
12.6-мысал. Берілген жиымның эрбір жолындағы элементтері
қосындыларын жэне сол қосындылардың орташа мэнін анықтау
керек.
// эр жол қосындысы жэне солардың арифметикалық ортасы
# in c lu d e < с о п іо .һ >
# in c lu d e < s t d i o .h >
m ain ()
{ s t a t i c i n t a [ 3 ] [4 ]= {
{ 5 ,3 ,4 ,2 } ,
( 3 ,3 ,4 ,5 ) ,
{2 ,3 ,3 ,4 }
};
i n t i , j , s= 0 ;
flo a t c= 0 ;
c lr s c r ();
s
’
f o r ( i= 0 ; i< 3 ; i+ + )
{ f o r ( j= 0 ; j < 4 ; j ++) s + = a [ i ] [ j ] ;
p r i n t f ("% і-жол косындысы:% i\n " , i + 1 , s ) ;
c+ = s;
}
p r i n t f ( " -----------------------------------") ;
p r i n t f ("\п ар и ф м .о р тасы % 5 /2 f" , c /4 ) ;
>
194
12,7-мысал. Берілген жиымның эрбір бағанадағы элементтері
қосындыларын жэне сол қосындылардың орташа мэнін анықтау
керек.
// әрбір бағана қосындылары мен солардың орташа
мэнін анықтау
#include <сопіо.һ>
#include <stdio.h>
main ()
{
static int a[3][4]={
{5,11,4,2},
{3,3,12,5},
{2,3,3,14}
};
int i ,j ,s ; float с ;
clrscr();
printf("Берілген матрица :\n");
printf ("--------------------- \n") ?
for (i=0; i<3; i++)
{for (j=0; j<4; j ++)
printf(" %3i ", a[i][j]);
printf("\n");}
/* Матрицаны өңдеу */
printf ("--------------------- \n") ;
printf("s=");
for (j=0; j<4; j++)
{ s=0 ;
for (i=0; i<3; i ++) s+=a[i][j];
printf("%3i ",s); // қосынды s
c+=s;
}
printf ("\n--------------------- ") '
printf<"\n арифм. ортасы %5.2f",c/4);
g e tc h ();
}
195
12.8-мысал. Берілген а44 жиымының бас диагоналындағы
элементтерді нөлге, ал қосалқы диагоналындағы элементтерді бірге теңестіру программасы.
#include <stdio.h>
#indude <stdlib.h>
#include <conio.h>
main ()
{
int a[4][4]={
{6,8,9,2},
{5,3,4,2),
{3,3,4,5),
{2,3,3,4}
};
'
. r, I
жЩ ИИД
int i,j;
clrscr();
printf("Берілген матрица :\n");
for (i=0; i<4; i++)
{for (j=0; j<4; j ++)
printf(" %2i ", a[i][j]);
printf("\n");}
/* Матрицаны өңдеу */
for (i=0; i<4; i++)
a[i][i]=0;
for (i^O; i<4; i++)
for (j=0; j<4; j ++)
if (i+j=3) a[i] [j]=l;
/* Өңделген матрица элементтерін шығару */
printf("Нәтижелік матрица :\n");
for (i=0; i<4; i++)
{for (j=0; j<4; j ++)
printf(" %2i ", a[i][j]);
printf("\n");}
getch() ;
EXflSwN jjg
)
196
12.9-мысал. Берілген а
жиымыньщ бас диагоналынан төмен
орналасқан элементтер қосындысын анықтау программасы.
# in c lu d e < c o n io .h >
{[in clu d e < s t d i o .h >
m ain ()
{
s t a t i c i n t a [ 3 ] [3] = {
( 0 , 1 , 2 ),
{ 3 ,4 ,5 } ,
{ 6 ,7 ,8 }
};
in t i , j , r , s ;
c lr s c r ();
p r i n t f ( " Е н г із іл г е н а [ 3 ] [3] жиым элем ен ттер i : \ n " ) ;
f o r ( i= 0 ; i< 3 ; i+ + )
{ f o r (j = 0 ; j< 3 ; j++)
p r i n t f (" %2 i " , a [ i ] [ j ] ) ;
p rin tf(" \n " );
}
/* б ас ди агон алдан төмен орн аласқан элем ен ттер
қосындысын анықтау * /
s= 0 ;
for (і=0; і<3; і++)
for (j=0; j<3; j++)
if (j<i) s+=a[i][j];
printf("\ns=%i",s) ;
g e tc h ();
}
12.10-мысал. Берілген a3J жиымының эрбір жолындағы эле-
менттерді өсуі бойынша реттеп орналастыру программасы.
# in c lu d e < s t d i o .h >
# in c lu d e < s t d l i b . h >
# in c lu d e < c o n io .h >
m ain ()
197
I
{ static int a[3][3] =
{
{8,7,6},
{5,4,3},
{2 ,1 ,0}
Щ
};
int i,j,r,s,n=3,amin,m,k;
clrscr();
printf("Берілген матрица:\n");
for (i=0; i<3; i++)
{for (j=0; j<3; j++)
printf(" %2i",a[i][j]);
printf("\n");
}
for (i=0; i<n; i++) //жолды таңдау
{
//мин тауып алмастыру
for (к=0; к<п-1; к++)
{ amin=a[i][к];m=k;
for (j=k+l; j<n; j++)
if (a[i][j] < amin)
{amin=a[i][j]; m = j;}
a[i][m]=a[i][k]; a[i][k]=amin;
}
}
printf("\пНәтижелік матрица:\n");
for (i=0; i<3; i++)
{for (j=0; j<3; j++)
printf(" %2i",a[i][j]);
printf("\n");
}
getch();
•\
*
'f-
т
I
?> . **-*•5*,'.
'
.%*->
V
ф
1
12.11-мысал. Берілген a3} жиымының эрбір бағанасындағы
элементтерді өсуі бойынша реттеп орналастыру программасы.
# in c lu d e < s t d i o .h >
# in c lu d e < s t d l i b . h >
198
#include <conio.h>
main <)
{ static int a[3][3]= {
{8,7,6},
{5,4,3},
{2 ,1 ,0 }
};
int i ,j ,r ,s ,n=3;
int amin;
int m,k;
clrscr();
printf("Берілген матрица:\n");
for (i=0; i<3; i++)
{for (j=0; j<3; j++)
printf(" %2i",a[i][j]);
printf("\n");
}
for (j=0; j<n; j++)
//багананы таңдау
{for (k=0; k<n-l; k++) //мин тауып алмастыру
{ amin=a[к][j];m=k;
for (i=k+l; i<n; i++)
if (a[i][j] < amin)
{amin=a[i][j]; m = i;}
a[m][j]=a[k][j]; a[k][j]=amin;
}
}
printf ("ХпСұрьшталган матрица элементтері:\n") ;
for (i=0; i<3; i++)
{for (j=0; j<3; j++)
printf(" %2i",a[i][j]);
printf("\n");
}
getch();
)
199
12.3 Екі өлшемді жиымдармен жумыс істеу кезінде
нүсқауыштарды қолдану
Аза жиым берілген болсын. Олар бүтін сандар, яғни
in t a [3 ][2 ];
i n t * p ri;
p r i = a ; / / бүл p r i = a [ 0 ] [ 0 ] д е г е н с ө з
a — жиымның аты немесе а [ 0 ] [ 0 ] элементінің адресі
a=& a[ 0 ] [ 0 ] ;
pri нұсқауышына 1-ді қоссақ, ргі+ 1 деген нұсқауыш а[0 ][1 ]
элементіне сілтеиді. ьұл жиымды қарастырғанда, келесі теңдеулер
дұрыс болып табылады:
p r i = &a[ 0 ] [ 0 ] ;
p r i + l = = &a[ 0 ] [ 1 ]
p r i + 2 == & a [ l ] [ 0 ]
p r i+ 3 = = & a [ l ] [ 1 ]
p r i+ 4 = = &a[ 2 ] [ 0 ]
p r i+ 5 = = &a[ 2 ] [ 1 ]
Екі өлшемді жиым бір өлшемді жиымдардан құрастырылған
жиым ретінде қарастырылуы мүмкін. Яғни берілген екі өлшемді
жиым үш жолдан тұрады, ал эрбір жол екі элементтен тұратын
жиым болып табылады.
Бірінші жол аты - а[0),
екінші жол аты - a m ,
үшінші жол аты - а[2 ].
Жиымның аты берілген жиымның нұсқауышы болып табыла­
ды, яғни ол жиымның 1-элементіне сіптейді.
Екі өлшемді жиымның осы қасиеті бір өлшемді жиымға
арналған функцияны екі өлшемді жиыммен жұмыс істеуге мүмкіндік береді.
12.12-мысал. Төмендегі Ь[3][4] матрицасы жолдарының арифметикалық ортасын табатын программада функция қолданылған.
/* b [ 3 ] [4] матрицасы жолдарының қосындысы * /
# in c lu d e < c o n io .h >
# in c lu d e < s t d i o .h >
f lo a t £ l ( i n t x [ ] , i n t n)
{ i n t k ; f lo a t s ;
200
fo r
(k = *0, s » 0 ; k < n ; k + + )
^в+в х [ к ] ;
r e tu r n (s /n );
}
m a in
{ in t
()
i,b[3][4]={
{6,4,3,3},
V I
{7,5,3,3},
Ы
{8,4,2,6}
};
c lr s c r ();
fo r (i= 0 ;i< 3 ;i+ + )
p r i n t f ( " % d ж олы ны ң о р т а ш а м ә н і : % f \ n " ,
i , f l ( b [ i ] ,4));
g e tc h ();
}
Бақылау сұрақтары
1. Екі өлшемді жиымды - матрицаны сипаттау, бастащы мэндерді
тагайындау тәсілдері.
2. Екі өлшемді жиымды инициалдауды қабаттасқан циклдер арқылы
3.
4.
5.
орындау.
Матрица элементтерін тольщ өңдейтін алгоритмдер.
Матрицалардың көрсетілген элементтерін өңдеу тәсілдері.
Матрицалардың диагоналына байланысты орналасқан элемент-
терін өңдеу жапдары.
6. Матрицалардың жолдарының және баганаларының ең үлкен
(кіиіі) элементтерін, қосындыларын, көбейтінділерін табу.
7. Матрицалардың жолдарында және баганаларында орналасқан
элементтерді өсуі (кемуі) бойынша реттеу алгоритмдері.
Тапсырмапар
1. Екіөлшемді Л( 10,10) жиымда әрбір жол үшін оң элементтердің
қосындысын есептеп шығарыңдар.
2. Екіөлшемді /1(10,10) жиымындағы оң элементтердің санын есептеп
3.
шығарыңдар.
Екіөлшемді /1(10,10) жиымындағы ең үлкен элементгі анықтаңцар.
201
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Екіөлшемді ,4(10,10) жиымы берілген. А жиымының әрбір жолындағы элементтердің көбейтіндісіне тең болатын бірөлшемді В жиымын алыңдар.
Екіөлшемді Л(10,10) жиымы берілген. А жиымының әрбір жолындағы ең үлкен элементтің мэндеріне тең болатын бірөлшемді В
жиымын алықцар.
jg
Екіөлшемді Аі 10,10) жиымы берілген. А жиымының эрбір жолындағы теріс элементтің мәндеріне тең болатын бірөлшемді В жиы­
мын алыңдар.
Екіөлшемді ,4(10,10) жиымында теріс элементтері бар жолдардың
санын есептеп шығарыңдар.
Екіөлшемді жиым жолдарындағы ең үлкен элементтердің косын­
дысын есептеп шығарыңдар.
Екіөлшемді жиым әрбір бағанадағы (тік жолдағы) элементтердің
косындысын есептеп шығарыңдар.
Екіөлшемді жиымның әрбір жольшдағы теріс сандардың санын,
косындысын жэне арифметикалық ортасын есептеп шығарыңцар.
Екіөлшемді А(4,4) жиымындағы индекстерінің қосындысы 4-ке тең
болатын элементтерінің косындысын есептеп шығарыңдар.
Екіөлшемді ^(4,7) жиымындағы оң элементтердің арифметикалық
ортасын жэне нөлге тең элементтердің санын есептеп шығарыңдар.
Екіөлшемді ,4(10,10) жиымының бас диагоналі бойындағы элементтердің ең үлкенін табыңдар.
Екіөлшемді ,4(10,10) жиымының косымша диагоналі бойындағы ең
үлкен элементті табыңдар.
Екіөлшемді /1(10,10) жиымының қосымша диагоналі бойындағы ең
үлкен элементті табыңцар.
Екіөлшемді А(4,7) жиымының эрбір жолындағы берілген диапазонда жататын элементтердің арифметикалық ортасын есептеп
шыгарыңдар.
Екіөлшемді ,4(10,10) жиымында элементтердің арифметикалық
ортасы жиымның барлық элементтерінің арифметикалық ортасынан кем болатын бағананың нөмірлерін анықтаңдар.
Екіөлшемді ^4(10,10) жиымында 3- жэне 1-жолдардың орындарын
ауыстырыңдар.
Екіөлшемді Л(7,7) жиымында бас диагональдагы элементтерді
эрбір жолдың ең үлкен мәнімен алмастырыңдар.
Екіөлшемді Л(10,10) жиымында бас диагональдан жоғарғы жэне
төмен орналаскан элементтердің косындысын есептеп шығарыңдар.
Екіөлшемді жиымда берілген жолдың ең үлкен элементінің мэнін
жэне нөмірін анықтаңдар.
Екіөлшемді жиымда әр бағана үшін берілген бағананың мэнінен
202
1
кіші болатын элементтердің арифметикалык ортасын есептеп
шығарыңдар.
23. Бүтін сандардан құралған 10X10 матрицасынын ең үлкен элементінің жолы мен бағана нөмірін шығарып беретін программа
жазыңдар.
24. /4(5,5) жиымы жэне к саны берілген. Әрбір жолдын элементтерін
осы жолдағы бас диагональда орналасқан диагональдық элементке
ш
бөліндер.
25. /4(10,10) жиымы берілген. Осы жиымның бас диагоналінің элементтерінен тұраггын бірөлшемді жиым кұрыңдар .
26. /4(10,10) жиымы берілген. к- жэне 1-жолдардың орындарын ауыс-
тырындар.
27. /4(10,10) жиымы берілген. Одан бірөлшемді жиым құрастырындар.
28. Бүтін санды х (0...5,0...4] жиымы берілген. Оның 5-тен кіші барлык
элементтерін 111 санымен ауыстырыңдар.
29. Бүтін санды В [0...4, 0...3] жиымы берілген. Оның элементтерін
олардың квадраттарымен ауыстырыңдар.
30. Нақты сандар жиымы Л[0...5, 0...3J берілген. Оның теріс элементтерінің индекстерін басып шығарыңдар.
31. Екіөлшемді бүтін санды /4[0..10,0..7] жиымын құрыңдар және оның
екі так санды индекстерінің барлық элементтерінің қосындысын
табыңдар.
32. Бүтін санды/І [0..10,0..7] жиымы берілген. Жиымның 5-ке қалдыксыз бөлінетін элементтерінің қосындысьш табындар.
33. 3x3 матрицаның бүтін сандық элементгерін пернетақтадан енгізіңдер жэне әрбір баған элементтерінің қосындысын есептеп шығарыңдар.
34. Бүтін санды Д[0..5,0..5] жиымы берілген. Оның диагональдарынан
сол және оң жақта орналасқан элементтерін анықгаңдар.
35. Бүтін санды В [0..5, 0-5] жиымы берілген. Бас диагональдың оң
жақтағы элементтерінің қосындысын, сол жақтағы элементтерінің
көбейтіндісін табыңдар.
36. Бүтін санды В [0..5, 0..5] жиымы берілген. Жиымның ең үлкен
элементін табындар жэне оның диагоналының қай жағында
орналасқаны туралы хабарды экранға шығарындар.
37. Бүтін санды В [0..5, 0..5] жиымы берілген. Жиымның ең кіші
элементін табыңдар және оның бас диагональдің кай жағында
орналасқаны туралы хабарды экранға шығарыңдар.
38. Бүтін санды В [0..5,0..5] жиымы берілген. Жиым диагоналінің сол
жағынан жоғары орналасқан элементтердің қосындысын табыңдар.
39. Бүтін санды В [0..5,0..5J жиымы берілген. Жиым диагоналінің сол
203
I
жағынан төмен орналасқан элементтердің көбейтіндісін есептеп
шығарыңдар.
40. Бүтін санды В [0..5,0..5] жиымы берілген. Жиым диагоналінің сол
жағынан төмен орналасқан теріс таңбалы элементтерінің санын
табыңдар.
s , _
J'
41. Бүтін санды 2?[0..5,0..5j жиымы берілген. Жиым диагоналінің сол
жағьшан жоғары орналасқан оң таңбалы элементтерінің санын
табындар.
Щт
^
42. Бес цехтың эрқайсысының 4 бөлімшесіндегі барлық шикізат туралы
мәлімет кестесі берілген. Шикізаты ең аз цехтың нөмірін анықтаңдар.
' ; - ;
^ -1
43. А[0..390..15] жиымы берілген. Оның ішінде өзаратең екі элементтің
индекстерін басып шығарыңдар.
44. a l9 av аъсандары берілген. Элементтері B[iJ] = а .-З а . болатын бүтін
санды В [0..3, 0..3] жиымын анықтақдар.
45. Нақты аг щ ... | a lQ, bp Щ ..., b20 сандары берілген. Элементтері a . . =
i +2\j болатын бүтін санды A [0..10,0..12] жиымын алындар.
46. Өлшемдері 5*5 матрицаның эрбір элементінің мәні қиылатын жол
мен бағана нөмірінің қосындысына тең болатын элементтерінің
қосындысын есептеңдер.
47. Нақты [0..7, 0...7] жиымын алыңдар, оның 1-жолы ац = 2. + 3 формуласымен, 2-жолы a2j = j + 3/(2+/) формуласымен беріліп, содан
кейінгі әрбір жол алдыңғы екі жолдың қосындысына тең болатын
болсын.
48. Натурал п саны берілген. Егер a. = sin(/+//2) болса, A [0../1,0..я] жиымында қанша оң элемент болатындығын анықтаңдар.
49. Бүтін санды А[0,А, 0..5] жиымы берілген. Әрбір бағанның арифметикалық ортасын табыңдар.
50. Барлық элементтері нөлге тең емес п..т өлшемді нақты жиым
берілген. Бұл жиымның модулі бойынша ең үлкен элементіне басқа
барлық элементтерін бөлу арқылы жаңа жиым алыңдар.
51. Бүтін санды А[ 0..4, 0..5] жиымы берілген. Соңғы жолдан басқа
жолдарды эрбір элементі бойынша азайту арқылы матрицаны
түрленд іріңдер.
52. Екіөлшемді С жиымының әрбір жолын өсу ретімен орналастьфатьш
программа құрыңдар.
53. т..п өлшемді матрицаның әрбір жолын кему ретімен орналастыратын программа құрыңдар.
54. Бүтін санды А [0..4,0..5] жиымы берілген. Құрылымында кем дегенде бір рет 10-ға тең элементі бар жолдардың нөмірін анықтаңдар.
55. пи.п өлшемді матрицаның эрбір бағанасын өсу ретімен орналастыратын программа құрьщдар.
56. у4[0..5, 0..5] жиымы берілген. Бұл жиымның әрбір жолының эле-
204
меютерш диагональдщ сол жагында орналасқан элементтерге
бөлу жолымен алынган жаңа жиым құрыңдар.
57. /4[0..5, 0..6] жиымы берілген. Оньщ бірінші жэне соңгы жолдарының орындарын ал маетырывдар.
58. А[0..5, 0..6) жиымы берілген. Оның бірінші жэне соңғы бағаналарының орныи алмастырыңдар.
59. Тікбұрышты матрица берілген. Элементгерінік қосындысы ең үлкен болатын жолды табыңдар.
60. Тікбұрышты матрица берілген. Элементтерінің көбейтіндісі ең үлкен болатын бағананы табыңдар.
61. Өлшемі 4x8 болатын бүтін сандар жиымындагы барлык жұп нөмірлі элементтерінің қосындысын табыцдар.
62. Бүтін сандардың 5x5 өлшемді жиымындагы бас диагональда орналасқан барлық элементтердін қосындысын табындар.
63. Бүтін сандардың 7x4 өлшемді жиымындағы максимал элементтің
жолы мен бағана нөмірлерін табыңдар.
64. Бүтін сандардың 6x5 екіөлшемді жиымы бар. Элементтерінің арифметикалық орта мэні максимал болагын жолдың нөмірін табыңдар.
65. Бүтін сандардың 5x9 өлшемді жиымында бірдей нөмірлі жол мен
багананың орнын алмастырындар.
66. Бүтін сандардың екі өлшемді жиымындағы әрбір жолдың максимал
элементтерінің арасындағы минимал элементті табыңдар.
67. Бүтін сандардың екіөлшемді жиымында максимал элементі бар
бағананы өшіріп тастаңдар.
68. Бүтін сандардың екіөлшемді жиымындағы қайталанбаитын барлық
элементтерді табыңдар.
69. Екіөлшемді жиымды 1-ден 100-ге дейінгі бүтін сандармен орама
(спираль) бойымен толтырындар.
70. Бүтін сандардың екіөлшемді жиымының барлық элементтерін сол
жолдардағы элементтердің қосындысынан солардың ішіндегі ең
кіші элементтер айырмасымен алмастырындар.
71. Бүтін сандар жиымының жолдарын кему реті бойынша сұрыптандар.
72. Жиымнын тақ орьшдардағы бағаналарында тұрған элементгерді
өсу ретімен орналастыра отырып сұрыптандар.
73. Шеберханада шығарылған түрлі тетік бөлшектер мен олардың
бағасы берілген. Осы мэліметтерді а) бағалардың өсуі жэне э) тетік
бөлшек атауларын алфавитпк реті бойынша сұрыптандар.
74. Студентгердің аты-жөні жэне олардьщ телефон нөмірлері көрсетілген екіөлшемді жиым берілген. Студенттің фамилиясы бойынша
оның телефон нөмірін табыңдар.
75. Екі матрица берілген. Олардың көбейтіндісін табыңдар.
205
I
76. Екіөлшемді жиымның элементтері сикырлы квадрат (сикырлы квадратта барльіқ вертикаль, горизонталь және екі диагональ бойынша
сандардың қосындысы бірдей болады) қүрайтындығын тексеретін
программа қүрыңдар.
77. Матрицаның элементтері қосалқы диагональ бойынша симметрия
құра отырып орын алмастыратын программа құрыңдар .
78. Екіөлшемді к жиымының бағаналарын циклді түрде, оның і-ші
бағанасын / + 1 бағанасымен алмастыра отырып, соңғы бағана
бірінші болып орналасатындай деңгейге жеткізетін программа
құрыңдар.
79. Екіөлшемді А жиымының нөлге тең элементтері жоқ жолдарының
оң элементтерінің косындысын есептеп шығаратын программа
құрыңдар.
80. Квадрат пішінді кестенің ең кіші элементін анықтап, соған сэйкес
жол мен бағана элементтерінің орындарын алмастырыңдар.
81. Бүтін сандардың екіөлшемді жиымы берілген. Сол жиымның ең
кіші элементі орналасқан жолы мен бағанасын жойыңдар.
82. Тікбұрышты кестенің екінші қатарынан бастап, ондағы эрбір
жолдың ең кіші элементін алдыңғы жолдың ең үлкен элементімен
алмастырыңдар.
83. Бүтін сандардың 10x12 өлшемді матрицасы берілген. Оның барлық
ершік нүктелерінің индекстерін басып шығарыңдар. (Ершік нүкте
деп өзінің жолында ең кіші, бірақ бағанасында ең үлкен немесе,
керісінше, өзінің жолында ең үлкен, бірақ өз бағанасында ең кіші
болатын элементті айтады).
206
13. СӨЗ ТІРКЕСТЕРІН ӨҢ ДЕУ
өңдеу
арнайы тип - string бар. Ал С тілінде мұндай арнайы тип жоқ. Сөз
тіркестері char тигіті бір өлшемді жиым ретінде қарастырылады,
яғни сөз тіркесі - нөлдік байтпен аяқгалатын char типті бір
өлшемді жиым. Нөлдік байт - барлық биттері де нөлге тең байт,
ол ' \ 0 ' символдық константасымен аныкталады
белгісі немесе нөл-терминатор). Сондықган егер тіркесте к сим­
вол болса, онда жиымды сипаттауда к+ 1 элемент көрсетілуі тиіс.
Мысалы, char а[71 деген сипаттау тіркестің 6 символдан тұраал
(жолдык) константа - қос тырнақшаға алынган
ны. Мысалы, "Берілген тапсырма" тіркесі, оның соңына нөлдік
байтты компилятор автоматты түрде өзі жазады.
Айнымалы мәні болатын сөз тіркесін сипаттау кезінде бірден
көрсетуге болады, мысалы,
char S I [10]= "123456789", S2[]="Болат";
Соңгы сөз ұзындығы тіркестің символдары санымен
анықталады.
үшін екі стандартты
ал
функция —scanf () немесе
файлы
13.1 Символдық таңбаларды енгізу/шығару
Символдарды біртіндеп енгізу/шығару үшін printfO жэне
scanfO функцияларынын %c форматы қолданылады.
getch () - параметрсіз функция, басылған перненің кодын (int)
береді, экранға ешқандай символ шығармайды.
11 8 параметрсіз функция. Пернеден символдарды бірбірлеп енгізеді. Сөз тіркесі <Enter> пернесі басылғанша енгізіле
береді, оған дейін оны өзгертуге де болады.
p u tch (c) - бір символды (с - символды* айнымалы
танта), яғни бір таңбаны ғана экранға шығарады.
p u tc h a r(c ) - бұл да тек бір таңбаны экранға шь
207
I
Бұлар сопіо.һ тақырып файлы бойынша жұмыс істейді.
Символдық таңбаларды өңдеу туралы мәліметтер Ә қосымшасында келтірілген.
:*Ц
Мысалы, латын алфавиті эріптерін экранға шығару программасы төмендепдеи оолады:
#include <сопіо.һ>
#include <stdio.h>
void main()
{ char z;
'
clrscr();
1
for(z='A ';z<—' Z ';z++)
putchar(z);
getch() ;
’
}
Нәтижесі:
\
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Ал енді осы символдарды ASCII-кодтарымен бірге шығаратын
мына программаны көрейік.
/* латьш алфавит!*/
#include <conio.h>
#include <stdio.h>
void main()
{
char z ;
*
clrscr () ;
- i f ft
for(z=1A ';z<='Z ';z++)
{
if (z='K' И z='U') printf ("\n") ;
printf(" %c-%d ",z,z);
}
g e tc h ( ) ;
}
Программа жұмысы нэтиже ci:
А-65 В-66 С-67 D-68 Е-69 F-70 G-71 Н-72 1-73 J-74
К-75 L-76 М-77 N-78 0-79 Р-80 Q-81 R-82 S-83 Т-84
U-85 V-86 W-87 Х-88 Y-89 Z-90
208
Кедесі программа 0 мен 9 арасындағы цифрлық символдарды
жэне олардың ASCII кодтарын басып шыгарады:
#include <conio.h>
# in c lu d e < s t d i o .h >
void main()
char z ;
clrscr();
f o r ( z= ' 0 ' ; z < —’ 9 ' ; z++)
{
if (z=' 0' || z = '5 1) printf ("\n") ;
printf (" %c-%b " , z , z ) ;
}
getch();
}
Жұмыс нәтижесі:
0 -4 8 1 - 4 9 2 - 5 0 3 - 5 1 4 - 5 2
5 - 53 6 - 54 7 - 55 8 - 56 9 - 57
13.2 Символдық тіркестер
Символдық жолдарды немесе тіркестерді бірнеше тәсілмен
өңдеуге болады, олардың негізгілері:
1. Тіркестік константаларды қолдану;
2 . Сһаг тапті жиымды қолдану;
3 . Char типіне сілтейтін нұсқауыштарды пайдалану;
4. Символдық тіркестерден тұратын жиымдарды қолдану.
Сөз тіркестері немесе тіркестік (жолдық) константа қостырнақшаға алынып жазылады. Тырнақшаға алынатын символдар
тізбегінің ең соңына автоматты түрде '\ 0 ' символы жазылады.
Компилятор жолдық символдарды компьютер жадына жазганда,
олардың көлемін анықтау үшін сол символдар санын есептейді.
Символдық константа осы сөз тіркесі жазылган жады аймагына
сілтейтін нұсқауыш болып табылады. Символдық тіркестер
жиымын (массивін) беру кезінде компилятор компьютер жадынын қажетті көлемін аныктау үшін жиымды сипаттаганда, оны
тіркестік константа аркылы инициалдауга болады. Мысалы:
char с[]= "Атырау, Алтай - жеріміз";
14-1660
209
1
\
Әдеттегі жиым қолданылатын жағдайлар сияқты бұл жиым
аты с осы жиымның 1-элементіне сілтейтін нұскауыш болып та­
былады.
' 'Щ
с ==&с[ 0 ] ;
*с ==' 0 ' ;
Г ліаш Ь Щ
*(с+1) == с [1] == 'п 1;
*]
Сөз тіркестерін анықтау үшін нұсқауыштарды мынадай түрде
сипаттауға болады:
I
c h a r * c l = " \п с т у д е н т т е р сан ы ";
осы сипаттауға эквивалентті болып келесі сипаттау есептеледі:
s t a t i c c h a r c l [ ] = " \ n с т у д е н т т е р сан ы ";
Осы қарастырылған екі сипаттау да cl тіркесінің нұсқауыш
екенін білдіреді. Компьютер жадының қажетті көлемін айкын
корсетуге де болады. Мысалы, сыртқы сипаттауда келесі жолдьщ
мынадай түрде жазылғаны көрсетілген.
c h a r с [ 2 5 ] = " Б іл ім - ө м ір шырағы";
Элементтердің саны жолдың ұзындығынан бір символ артык
болуы керек, яғни оның ең соңында *\0 ’ символы болуы тиіс.
Статикалық немесе сыртқы жиымдағы бұрынғы қарастырылған эдеттегі жиымдар оларды қолдану кезінде автоматты
түрде 0-мен инициалданған болатын. Ал сөз тіркестерін пайда­
лану кезінде де статистикалық немесе сырткы жиымдар солар
тэрізді 0 символымен инициалданады.
Келесі мысалды қарастыралық:
# in c lu d e < s t d i o .h >
# in c lu d e < s t r i n g . h >
m ain ()
{
c h a r m s g [ 3 0 ];
s tr c p y ( m s g , "С елем , А з а т ! " ) ;
p u ts (m s g );
}
Мұндағы msg сөзінен соң тұрған [301 саны компиляторға 29
символ үшін, яғни char типіндегі 29 айнымалыдан тұратын жиым
үшін жады бөлуді қамтамасыз етеді (30-орын нолдік символмен \0 толтырылады). msg айнымалысының символдық мэні жоқ; ол
210
тек char типіндеп 29 айнымалының алғашқысының адресін (ком­
пьютер жадындағы белгілі бір орын адресі) сақтайды.
Компилятор strcpy(msg, "Сәлем, Азат!”) операторын кездестіргенде, екі түрлі эрекет орындайды:
- "Сәлем, Азат!" тіркесі соңына (\0) символын (ASCII коды 0)
қосады.
- strcpy функциясын орындап, msg айнымалысы нұсқап
тұрған жады аимағына сол сөз тіркесі символдарын оіртіндеп
көшіреді. Ол тіркесті көшіруді сөз соңындағы нолдік символдан
кейін барып аяктайды.
puts(msg) функциясын орындағанда, оған msg мэні, яғни
тіркес кұрамындағы бірінші символ адресі беріледі. Одан кейін
puts сол символдың нөлдік символ емес екенін анықтап, ары
қарай адреске бірді қосып, келесі симводы оқиды, т.с.с. тіркес
соңына дейін жетеді. Нолдік символға жеткен соң, puts жұмысты
аяқгайды;
Осындай тәсіл тіркес ұзындығына шек қоймай, нөлдік символга дейінгі символдарды біртіндеп оқуды жүзеге асырады.
13.3
Символға нұсқауышты пайдалану
Екінші тәсіл - символдарға нұсқауыш жасау. Программаны
келесі түрге келтіреиік:
#include <stdio.h>
#include <string.h>
main ()
{
char *msg;
msg = "Сэлем, Азат!";
puts(msg);
)
msg алдындағы жұлдызша (*) компиляторға оның символға
нұсқауыш екенін білдіреді, яғни msg белгілі бір символ адресін
сақтай алатын айнымалы. Бірақ мұнда компилятор символдар
үшін ешқандай орын бөлмейді жэне msg да ешқандай мәнге ие
болмайды.
211
Компилятор strcpy(msg, "Сэлем, Азат!") операторын кездестіргенде, ол тағы екі түрлі эрекет орындаиды:
- объектілік код файлы ішіндегі бір орынға соңына (\0 ) симво­
лы қосылған "Сәлем, Азат!" тіркесін (ASCII коды 0) жазып қояды.
- сол тіркестің алғашқы символы адресін msg айнымалысына
меншіктейді.
. ,й
strcpy функциясын орындапып, puts(msg) командасы бұрынғыша нөлдік символға дейінгі мэліметті көшіреді.
Енді символдъщ тіркестерден тұратын жиымдарды карастыралық. Бұл жиымдардың әрбір жолы символдық жиым болып
табылады. Мысалы, статикалық жиымның сипатталуы келесідей
түрде жазылуы мүмкін:
* т [ 4 ] = { " р е г и с т р " , "ж ады ", " к у р с о р " , " э л е м е н т " };
бұл жиым символдық тіркестерге сілтейтін 4 нұсқауыш больш табылады. Сонымен, символдық тіркестер жиымдар болып
табылатын болса, онда осы жиымдарға сілтейтін 4 нұсқауыш
қарастырылады. 1-жолға сілтейтін 1-нұсқауыш болып m[0]
есептеледі, т [1 ]- 2 -жолға сілтейтін 2 -нұсқауыш больш табылады.
Сонымен, эрбір нұсқауыш соған сэйкес жолдың немесе қатардың
ең бірінші символына сілтейді.
♦ т С О З ^ 'р ’ ; * т [1 ] = 'ж ' ; * т [2 ] — ' к ' ; * т [3 ] = , э ' ;
Тіркестерден құрылған жиымдарды сипаттағанда, символдық
тіркестер көлемін корсетуге де болады жэне бұл сипаттауда
тіркестердің ұзындығын келесідей түрде корсетуге болады:
static char m[ 10];
Символдар тіркестерін енгізу/шығару үшін printfO жэне
scanfO функцияларының %s форматы қолданылады.
Тағы мысалдар келтірейік.
/ * символдық т і р к е с т і шығару * /
# in c lu d e < с о п іо .һ >
# in c lu d e < s t d i o .h >
v o id m a in ()
{ c h a r Ь []= " С е з а м , ашыл! " ;
c lr s c r ();
-г
p r in tf ( " % s " ,b ) ;
g e tc h ();
}
212
Мұндағы b жиымының ұзындығы 13 символ, яғни сөздер
ұзындығынан 1-ге артық.
Енді бір сөйлем енгізіп, соның соңғы сөзін экранға шығарайық.
#in c lu d e < с о п іо .һ >
# in c lu d e < s t d i o .h >
v o id m ain ()
{
c h a r s , s s ; / / s - е н г і з і л е т і н символ
/ / s s — алдыңғы символ
c h a r a [ 8 0 ] ; / / с е з жиымы
in t i,k ;
/ / k - сөз ен і
c lr s c r ();
p r i n t f (" Соңындa н ү кте бар сөйлем е н г із ің д е р :\п " ) ;
f o r ( і = ' 0 ’ , s ==1 ' , k= 0 ; і< = 7 9 ; і++)
{
ss= s; s = g e tc h a r();
i f (s= = ' ') c o n tin u e ;
i f (s—
br eak;
i f ( s s = 1 ' ) k= 0 ;
a [ k ] = s ; k++;
>
/ /н ү х т е д е н к е й ін шығу не т ір к е с б іт к е с ін шығу
i f (і= 8 0 I I k = 0 )
p r i n t f ("сей лем дүрыс ем ес \ n " ) ;
{
a [ k ] = '\ 0 ' ;
/ / жол соңы
p r i n t f ("е ң соңғы с ө з : % s", а ) ;
}
g e tc h ();
}
мұнда символдар біртіндеп getcharO функциясы арқылы енгізіледі. Егер бос орын енгізілсе continue операторы келесі қадамға
көшіреді. Нүкте енгізілсе цикл токгалады, бірақ алыңғы k символда соңғы сөз сақталады. Егер символ нүкте де, бос орын да
213
емес болса, онда алдыңғы символ қарастырылады. Егер ол бос
орын болса, онда келесі сөз енгізіліп, к нолге тең болады. Циклден шығу нүкте арқылы немесе 80 символ енгізілген сон орын­
далады.
■. -1
Келесі мысалда соз тіркесінің ұзындығы екі тәсілмен
анықталады.
һ <м
#include <сопіо.һ>
#include <stdio.h>
#include <string.h>
void main()
{
char st[80];
int i;
clrscr();
puts("Ces тіркесін енгізіп, Enter басыңыз:");
gets(st);
i;‘
i=0 ;
while (st[i++]) •
*
■■
1Э|
f
Ү'
ІЩ' ^
i
^
F'
«r#*
'5
printf ("Енгізілген тіркес үзындығы: %i\n" ,i-1) ;
puts("Ce3 тіркесін енгізіп, Enter басыңыз
gets(st);
printf("Енгізілген тіркес үзындыгы: %i\n",
strlen(st));
■
getch();
s '
}
Енді бір соз тіркесін енгізіп, оның ішінде "т" символының
неше рет кездесетінін табайық.
#include <сопіо.һ>
#include <stdio.h>
#include <string.h>
void main()
{
char str[80];
int s=0;
214
c lrs c r();
p u ts ( " C e 3 т ір к е с ін (сөйлем) е н г і з і ң і з : " ) ;
g e ts (s tr);
f o r ( i n t i = 0 ; i < s t r l e n ( s t r ) ; i++)
i f ( s t r [ i ] = ' т ' ) s + = l;
p r i n t f ( " ' т ' с и м в о л ы %i р е т к е з д е с е д і \ п " , s ) ;
g e tc h ( ) ;
}
Ендігі мысалда енгізілген сөздің палиндром (алды-артынан
оқығанда, мэні бірдей - керек, қазақ) екенін анықтайық.
# in c lu d e < с о п іо .һ >
# in c lu d e < s t d i o .h >
# in c lu d e < s t r i n g . h >
v o id m a in ()
{
c h a r s t r [8 0 ];
i n t k ,s = 0 ;
c lr s c r ();
p u t s ( " B i p с е э (палиндром) е н г і з і ң і з : " ) ;
g e ts (s tr);
k = s trle n (s tr);
f o r ( i n t i = 0 ; i < k / 2 ; i++)
i f ( s t r [ i ] == s t r [ k - i - l ] ) s + = l;
i f (s = = k / 2 )
p u t s (" Сеэ - палиндром . " ) ;
e l s e p u ts (" C e 3 - палиндром е м е с ." ) ;
g e tc h ();
)
13.4 Сөз тіркестерін енгізу функциялары scanf(), gets(str)
S c a n f () функциясы тіркестік айнымалылар мэнін %s фор
матымен енгізеді, бірак ол тіркесті тек бірінші босорын таңба
сына дейін ғана енгізе алады.
Ал g e t s ( s t r ) функциясы арасында босорыны бар тіркес
терді енгізеді, енгізу ENTER пернесімен аякталады.
215
Екі функция датіркес соңына нөлдік байт қосып жазады. Оның
үстіне тіркес - символдық жиым болып, ал жиым аты - оның
компьютер жадындағы алғашқы адресіне сілтеме болғандықтан,
тіркестік айнымалы атының алдына "&" символы жазылмайды.
13.S Сөз тіркестерін шығару функциялары
cprintfO,putsO,cputsO
p r i n t f () —экранға формат арқылы сөз тіркесін шығарады;
c p r i n t f () - экранға p r i n t f () сияқты формат арқылы сөз
тіркесін шығарады, тек олардың түстерін t e x t c o l o r () жэне
te x tb a c k g r o u n d () функциялары арқылы озгертуге мүмкіндік
береді;
с
*>.
p u t s ( s t r ) —экранға сөз тіркесін шығарып, курсорды бірден
келесі жолдың басына алып барады, мұндағы str —тіркестік кон­
станта немесе тіркестік айнымалы. Бұлар stdio.h тақырып файлы
бойынша жұмыс істейді.
I
Екі функция да символдық жиымды нолдік байтқа дейін
шығарады. p r i n t f () функциясы символ тіркесі шығарылған
соң, курсорды келесі жолға көшірмейді, ол үшін арнайы формат
(\п) жазылуы тиіс. Ал p u t s () функциясы символдар шығарылған
соң, автоматты түрде курсорды келесі жол басына көшіреді.
/ / p u t s функциясьш пай далану мысалы
# in c lu d e < s t d i o .h >
# in c lu d e < c o n io .h >
m a in ()
{ char s tr l[ ] = "abc";
c h a r s t r 2 []= " d e f \ n g h i \ n " ;
char s tr3 []= " jk l" ;
,' 1 : . ^
p u ts (s trl);
p u ts (s tr2 ) ;
p u ts (s tr3 ) ;
}
Нэтижесі:
abc
def
ghi
jkl
216
c p u t s ( s t r ) - экранға сөз тіркестерін шығарып, олардың
түстерін t e x t c o l o r () жэне te x tb a c k g r o u n d () функциялары арқылы өзгертуге мүмкіндік береді, с о п і о . һ тақырып файлы
бойынша жұмыс істейді.
Сөз тіркестерімен орындалатын басқа операциялар да стан­
дартты функциялар арқылы атқарылады. Ол функциялар жұмыс
істеуі үшін s t r i n g . һ тақырыптық файлы қажет.
Жалпы сөз тіркестеріне қолдану үшін s t d l i b . h немесе
s t r i n g . һ тақырыптық файлдары қолданылады.
13.6 Сөз тіркестерімен ж р ы с істейтін өзге функциялар
1)
strlen(str) функциясы str сөз тіркесіндегі символдар санын (соңғы нөлді есепке алмайды), яғни жолдың ұзындығын
анықгайды, оның типі int, тақырыптық файлы < s t r i n g . һ>.
Мысалы. Бірнеше сөз тіркестерінің ұзындығын анықтайтын
программа құру керек.
/ / s t r l e n ( s t r ) функциясын пайдалану
# in c lu d e < c o n io .h >
# in c lu d e < s t d i o .h >
# in c lu d e < s t r i n g .h >
m ain ()
{
s t a t i c c h a r t [ ] - " С туденттер жайлы х а б а р л а м а ." ;
c lr s c r ();
p r in tf ( " % d \n " ,s tr le n ( t) );
p r i n t f ( " % d \n ", s t r l e n (" С туденттер жайлы
хабарлам а. " ) ) ;
p r i n t f ( " % d \ n " , s t r l e n ("аль-Ф араби а т .К а з Ү У " ));
p r in tf ( " % d \n " ,s tr le n (" " ));
g e tc h ();
}
Мұның нәтижесі:
27
27
19
О
2) strcat(stroka 1,stroka2) функциясы қатарларды біріктіру
үшін қолданылады. Ол strokal жэне stroka2 тіркестерін бірікті217
I
pin, нәтижені strokal айнымалысына меншіктейді, stroka2 тіркесінің мэні өзгермейді
Мысалы:
.
.
и і і,ій
/ / s t r c a t ( s t r l , s t r 2 ) функциясын п ай далан у
# in c lu d e < с о п іо .һ >
# in c lu d e < s t d i o .h >
# in c lu d e < s t r i n g . h >
m ain ()
{
c h a r s t r l [ 5 0 ] = " C т і л і н оқимыз, " ;
c h a r s t r 2 [ ] ="жақында емтихан тапсы рам ы з. " ;
c l r s c r ();
p r in tf ( " % s \n " ,s tr c a t( s tr l,s tr 2 ) );
p u ts (s trl);
/ / қатарды э к р а н ғ а шығару
p u t s ( s t r c a t ("Е гер жақсы оқы сақ, " , s t r 2 ) ) ;
g e tc h ( ) ;
}
Мұның нэтижесі:
і- s
\
С тілін оқимыз, жақыңда емтихан тапсырамыз.
С тілін оқимыз, жақында емтихан тапсырамыз.
Егер жақсы оқысақ, жақында емтихан тапсырамыз.
Келесі мысалда студенттің аты пернелерден енгізіліп, ол
екінші тіркеспен оіріктіріледі.
/ / s t r c a t ( s t r l , s t r 2 ) функцияларын п ай далан у
# in c lu d e < с о п іо .һ >
# in c lu d e < s t d i o .h >
# in c lu d e < s t r i n g . h >
m ain ()
{
J
c h a r nam e[ 8 0 ] ;
c h a r s t u d []= " - КазҮУ с т у д е н т і" ;
c l r s c r ();
p u t s ( " атын е н г і з : " ) ;
g e ts (n a m e );
s tr c a t( n a m e ,s tu d ) ;
p u ts ( n a m e ) ;
218
getcb() ;
}
\
3)
strcmp(strokal,stroka 2 ) функциясы екі сөз тіркесін салыстыру үшін қолданылады. Егер олар бірдей болса, функцияның
мэні 0 -ге тең болады, әйтпесе ол екі тіркестің айырмасын береді.
Егер strokal<stroka 2 болса, нэтиже 0 -ден кіші, ал strokal > stroka2 болса, нэтиже 0-ден артык болады. Кобінесе бұл тэсіл екі
тіркестің бірдей еместігін анықтау үшін ғана қолданылады.
Мысалы:
main ()
{
printf("%d\n",strcmp("Селем" ,"Сәлем")) ;
p r i n t f ( " % d \n ", s tr c m p ( " A z a t" , " I z a t " ) ) ;
p r i n t f ("% d\n" , s tr c m p ("Абайда" ,"Абайла")) ;
getch() ;
}
Мұнын нэтижесі:
О
-8
-7
Алғашқы екі сөз бірдей, нэтижесі — 0, келесі екі сөздің
алғашкы әрпі эр түрлі, олардың ASCII-кодтарының айырмасы —
-8 (А - 65,1 - 73), ал 3-жолы -7 (д - 164, л - 171, олардың кодтарының айырмасы 164-171 = -7).
// strcmp(strl, str2) функциясын пайдалану
#include <conio.h>
#include <stdio.h>
#include <string.h>
#define NAME "Ритчи"
main ()
{
char f [20];
puts("C тілінің авторы кім:");
gets(f);
w h ile (strc m p (f,N A M E )!= 0 )
{puts("басқа кім болуы мүмкін:");
219
I
g e ts ( f ) ;
Щ4 *,лэйтш
}
•>
'Э
p u t s ( "Жауап дүры с! " ) ;
g e t c h () ;
,
jJ
}
Нәтижесі:
:
<
С т і л і н і ң авторы к і м :
Керниган
б а с қ а к ім болуы м үм кін:
Ритчи
Жауап д ү р ы с!
4)
strcpy(strl,str2) функциясы сөз тіркесінің көшірмесін алу
үшін қолданылады, мұнда str 2 айнымалысындағы сөз тіркесі strl
айнымалысына көшіріледі. Мысалы:
/ / s t r c p y ( s t r l , s t r 2 ) функциясын п ай далан у
# in c lu d e < c o n io .h >
# in c lu d e < s t d i o .h >
# in c lu d e < s t r i n g . h >
m ain ()
{
char s t r l [ 2 1 ];
s t r c p y ( s t r l , "Хал қ а л а й , А з а т ? " ) ;
p u ts (s trl);
s t r c p y ( s t r l , "Тамаша! " ) ;
p u ts (s trl);
g e tc h ();
" о
> ь r
*
}
, '
V
Нэтижесі:
Хал қалай, Азат?
' ‘
Тамаша!
2 -мысал:
/ / s t r c p y ( s t r l , s t r 2 ) функциясын п ай далан у
# in c lu d e < c o n io .h >
# in c lu d e < s t d i o .h >
# in c lu d e < s t r i n g . h >
*
220
# d e fin e s t r o k a
" к ө ш ір у ф ункциясы "
m ain ()
{
c h a r * p tr= s tro k a ;
c h a r r e s [2 5 1 ;
c lr s c r ();
p u ts (p tr);
p u ts (re s );
s tr c p y ( r e s ,p tr ) ;
p u ts (p tr);
p u ts (re s );
g e tc h ( ) ;
}
Нәтижесі:
көшіру функциясы
көшіру функциясы
кешіру функциясы
Мұнда ptr айнымалысы көшіру функциясы сөзін береді,
res айнымалысы бос жол береді, ал келесі жолы екеуі де көшіру
функциясы сөзін береді.
5 ) strstr(strl,str 2 ) функциясы 2 -ші көрсетілген жолды 1-ші
жолдың ішінен іздейді.
6 ) strset(str,ch) функциясы берілген қатардағы барлық символдарды көрсетілген символға (сһаг сһ) ауыстырады.
7 ) strtod(strl,str 2 ) функциясы берілген қатарды double типті
санға ауыстырады.
8 ) strchr(str,c) функциясы берілген қатардағы коды көрсетілген символдьщ позициясын анықтайды.
9 ) strrev(str) функциясы берілген қатардың барлық символдарын керісінше бейнелейді.
10 ) strpbrk(str 1 ,stг2 ) функциясы 2 -ші қатардыц кез келген
символьга 1-ші қатардан іздейді.
Соз тіркесін өңдейтін функциялар туралы мәліметтер Б қосымшасында келтірілген.
221
I
Бақылау сұрақтары
1. Тіркестік айнымалылардың сипатталу тәсілдері қандай?
2. Тіркестік айнымалы қандай идентификатормен жэне қалай анықталады?
«
3. Бір тіркестік айнымалыга немесе тұрацтыга қанша символ
жазуга
болады?
✓
4. Тіркестік айнымалының ұзындыгьі қалай анықталады ?
5. Тіркестік өрнектер дегеніміз не?
6. Тіркестік айнымалылар мен тұрақтыларга қандай амалдар қолданылады?
'
~
7. Тіркестің ііикі символдарын цалай бөліп алуга болады?
8. С тілінде сөз тіркестерін өңдейтін қандай функциялар бар? Оларды қалай пайдаланады жэне олар қалай жазылады ?
Тапсырмалар
1. Бір топтағы фамилиялары бірдей студенттерді табыңдар.
2. Ton студенттері фамилиялары мен аттарының бірінші эрпін шығарындар.
3. Әрбір сөзден кейін бір бос орын қалдырылған сөйлемдер берілген.
Құрамында дауысты әріптер ең көп кездесетін сөзді табыңдар.
4. Әрбір сөзден кейін бір бос орын калдырылған сөйлемдер берілген.
Құрамында берілген әріптен басталатын сөздердің санын анықтаңдар.
Д
5. Әрбір сөзден кейін бір бос орын қалдырылған сөйлем бфілген.
Сөйлемдегі ең ұзын сөзді табыңдар.
6. Әрбір сөзден кейін бір бос орын қалдырылған сөйлем берілген.
Сөйлем ішіндегі жақшалардың дұрыс қойылғанын тексеріңдер.
7. Әрбір сөзден кейін бір бос орын қалдырылған сөйлемдер берілген.
Сөйлем ішіндегі жақшаға алынған мәтіндерді өшіріңдер.
8. Берілген сөз тіркесіндегі эрбір нүктені көп нүктемен (яғни үш
нүктемен) алмастырыңдар.
9. Алдыңгы есеп шартындағы қатар келген нүктелердің эрбір тобын
бір нүктемен алмастырыңдар.
10. Дүкендегі кассир көмекшісіне арналған программа құрыңдар.
Программа тауардың бағасын, мөлшерін, сатып алынған тауарлар
багасының қосындысын есептеп, сатып алушының берген ақшасының мөлшерін сұрап, оған қайтарылатын соманы да анықтайды.
11. Әрбір сөзден кейін бір бос орын қалдырылған сөйлем берілген.
Барлық сөздерді керісінше жазып шығыңдар.
12. Пернетақтадан енгізілген сөздердегі эріптердің санын есептейтін
программа жазындар. Тапсырманы do ... while циклында орындандар.
13. Натурал п саны және 5,, S2, ... Sn символдары берілген. Осы символдардың арасында неше рет + символы кездесетінін анықтаңдар.
222
14. Натурал п саны жэне Sv Sv ... Sn символдары берілген. Осы символдардың арасында * символдарының санын есептеңдер.
15. Натурал п саны жэне S]9 S2, ... Sn символдары берілген. Осы символдардың арасында қандай символдар көгі: + немесе * символы
ма?
16. Сөз тіркесі енгізілгеннен кейін оның құрамында бір символ қалғанша, тіркесті цикл сайын бір символға кысқарта отырып,
сөздердің барлық нұсқаларын экранға шығаратын программа
жазы ңдар\ |
^
v
_
17. Енгізілген сөз тіркесіндегі сөздердің санын аныктайтын програм­
ма жазыңдар. Бір сөз екіншісінен бір бос орын арқылы айырылады
деп санау керек.
18. Мэтіні пернетактадан енгізілген телеграмманың бағасын есептейтін программа жазыңдар.
19. Берілген сөзде бірінші жэне соңғы әріптердің қайсысы көп кездесетінін анықтайтын программа жазыңдар.
20. V әрпімен аяқталатын атау септігіндегі зат есім берілген. Осы
сөзді септеп, басып шығарыңдар.
21. Берілген сөздің жұп нөмірлі орындарында қанша о эрпі бар екендігін аныктайтын программа жазыңдар.
22. Студенттің фамилиясы, есімі жэне экесінің аты бос орындармен
бөлініп берілген. Студенттін аты-жөнінің инициалдарын (алғашқы
эріптерін) басып шығаратын программа жазыңдар.
23. Сөз тіркесіндегі а эрпін өшіретін программа жазыңдар.
24. Мэтіндегі соңғы әріппен бірдей әріптерді жоятын программа жазыңдар.
25. Z, X сөздері берілген. Z сөзінде кездесетін барлық әріптерді X сөзінен өшіріп тастайтын программа жазыңдар.
26. Берілген сөздегі эр түрлі эріптердің санын есептейтін программа
жазыңдар.
27. Сөздердің эрбір үшінші эрпін жоятын программа жазындар.
28. Берілген мәтіндегі "Айна" сөзін "Асыл” сөзіне өзгертетін программа
жазыңдар.
29. Пернетактадан енгізілген символды жазылған сөз тіркесінен өшіретін программа жазыңдар. Өшіру процесін жеке функция етіп
карастырындар.
30. Берілген мәтіндегі кездесетін "а" эрпін "о" эрпіне ауыстырыңдар.
31 Енгізілген сөз тіркесін керіге айналдыратын, яғни символдарды кері тэртіпте орналастыратын программа құрыңдар.
32. Енгізілген сөздің палиндром болатынын/болмайтынын аныкгайтын программа кұрыңдар.
33. Пернетактадан енпзілген символдарды ASCII кестесінде нөмірлерінін өсу реп бойынша сүрыптайтын программа жазыңдар.
223
I
34. Бос орындармен бөлініп жазылған үш сөзден тұратын сөйлемдегі
ең қысқа сөздің ұзындығын есептеп шығаратын программа жазыңдар.
пжымалы жолды шығаратын программа жазыңдар.
жүйелі жақшаға алынған мәтіндерді және жақшаның
құрыңдар
символдан
құрастырьщдар
38. Сөз тіркесіндегі кездесетін "а" әрпін "ә" әрпімен ауыстыратын
Қ¥РУ
39. Пернелерден енгізілген сөздің ұзындығын анықтайтын программа
жазу қажет. Программаны while do циклі арқылы ұйымдастырып,
программа жұмысын аяқтауды ’999* тіркесін енгізу арқылы жүзеге
асыру керек.
құрамындағы
жазылған деп есептеп, олардың ішіндегі ең ұзын сөзді табу керек.
41. Берілген мэтінде өзің қалап алған сөз қанша рет кездесетінін анықтау керек.
42. Берілген мәтін сөздерінде ең көп кездесетін әріпті табу қажет.
43. Берілген мәтін сөздерінің ең жиі ұшырасатын алғашқы эрпін анықтау керек.
44. Берілген сөз тіркесіндегі "а" эрпінің санын анықтайтын программа
құрыңцар.
45. Берілген мәтін сөздері арасындағы бос орынды үтірмен алмастырыңдар.
46. Берілген мәтіннің сөздері бір-бірінен бірнеше бос орын таңбасымен бөлініп жазылған, сол сөздердің арасына тек бір бос орын
таңбасын қалдырып, қайта жазып шығыңдар.
47. Берілген мэтіннің неше сөзден тұратынын табу керек (сөздер арасындағы бос орын түратынын пайдаланыңдар).
48. Берілген мэтінде "ае" тіркесі қанша рет кездеседі?
49. Берілген мәтіндегі "а" әрпімен аяқталатын сөздерді экранға шығару
керек.
50. Енгізілген сөз тіркесі сан болатынын немесе болмайтынын анықтау
қажет
51. Енгізілген үш сөздің ішіндегі ең қысқасының неше символдан тұратынын анықтаңдар.
52. Енгізілген мэтіннің жұп орында тұрған сөздерінің ішінде қанша 'е*
әрпі кездесетінін табыңдар.
224
53 Енгізілген сөзде қандай әріптер қанша рет кездесетінін анықтау ке\р ек .
54. Сөзбен енгізілген сан аттарын цифр түрінде жазып шығатын прог­
рамма құрыңдар.
55. Сөз тіркесі түрінде санмен енгізілген мәліметті цифрсыз жазылған
сөз тіркесіне айналдырыңдар, мысалы, '56* - ’елу алты', *-125' - 'ми­
нус бір жүз жиырма бес1, т.с.с.
Щ Шк
Есептер
1 нусқа
1. Құрамына сандар кіретін сөз тіркесінің ұзындығын - L анықгап,
егер L жұп сан болса, онда тіркестегі барлық екілік сандарды
өшіріп тастаңдар.
2. Берілген сөз тіркесінің дәл ортасында тұрған сөзді керісінше жазып
шығыңдар.
2 нұсқа
1. Берілген сөз тіркесінің ұзындығын - L анықтап, егер L жұп сан
болса, онда тіркестегі алғашқы сөзді өшіріндер, ал тақ сан болса,
соңғы сөзді өшіру керек.
2. Берілген сөз тіркесінде палиндром сөз бар екенін анықтап, ол жай­
лы мәлімет беру керек.
3 нусқа
1. Берілген сөз тіркесінің ішінде ДОС сөзіне кіретін символдардың
нешеу екенін анықтаңдар.
2. Берілген сөз тіркесінің ұзындығын - L анықтап, егер L >10 болса,
соңғы сөзді өшіріп тастаңдар.
4 нұсқа
1. Берілген сөз тіркесінің ұзындығын - L анықтап, егер L тақ сан бол­
са, онда тіркестің дэл ортасындағы символды анықтау керек, ал
жұп болса - тіркес ортасындағы екі символды анықтау керек.
2. Берілген сөз тіркесінің ішіндегі барлық ! белгісін ? белгісіне
алмастырыңдар.
5 нұсқа
1. Берілген тіркес ішіндегі бос орын таңбаларын астын сызу ( _ )
таңбасына алмастырыңдар.
2. Берілген сөз тіркесінің ұзындығын - L аныктап, егер L >10 болса,
соңғы сөзді өшіріп тастаңцар.
6 нұска
1. Берілген сөз тіркесінің ұзындығын - L анықтап, егер L 3-ке қалдықсыз бөлінетін болса, тіркестегі екінші сөзді өшіріп тастаңдар.
2. Берілген сөз тіркесінің ұзындығын - L анықтап, егер L 5-ке
калдықсыз бөлінетін болса, тіркестегі барльщ жақша түрлерінің са­
нын анықтаңдар.
15-1660
225
і
I
7 нүсқа
1. Екі сөйлемнен тұратын сөз тіркесінің сөйлемдерінің орындарын
алмастырыңдар.
? ^ ‘| щ
^
2.
Берілген сөз тіркесінің ұзындығын - L аныктап, егер L 3-ке
қалдықсыз бөлінетін болса, тіркестегі екінші сөзді өшіріп тастаңдар.
8 нүсқа
1.
Берілген сөз тіркесінің алғашқы нүктесіне дейінгі символдарды "с"
әрпіне алмастырыңдар.
2. Берілген сөз тіркесіндегі бірінші және соңғы сөзді керісінше жазып
шығыңдар.
9 нүсқа
1. Берілген сөз тіркесінің алғашқы сөзі мен екінші сөзін керісінше жа­
зып шығындар.
^
2. Бірнеше сөйлемнен тұратын сөз тіркесіндегі екінші сөйлем ішіндегі
"Е" эрпінің санын анықтаңдар.
10
1.
2.
вдсқа
Берілген сөз тіркесіндё жақшалар бар. Алғашкы жакшалар ішіндегі
сөзді анықтаңдар.
Берілген сөз тіркесіндегі ең ұзын сөздің енін тауып, оны керісінше
жазып шығыңдар.
11 нүсқа
1.
2.
Сөз тіркесі берілген. Оның ішіндегі леп белгілерін нүктемен алмастырып, нүктелер санын анықтаңдар. Леп белгісі жоқ болса, ол тура­
лы мәлімет беріңдер.
Құрамына сандар кіретін сөз тіркесінің ұзындығын - L анықтап,
егер L жұп сан болса, онда тіркестегі барлық екілік сандарды
өшіріп тастаңдар.
12 нусқа
1.
2.
Сөз тіркесі берілген. Оның ішіндегі нүктелерді үш нүктемен алмастырып, нүктелер санын анықтаңдар, нүкте жоқ болса, ол жайлы
мәлімет беріңдер.
Берілген сөз тіркесінің ұзындығын - L аныкгап, егер L тақ сан бол­
са, онда тіркестің соңғы сөйлемін анықтау керек, ал жұп болса тіркес ортасындағы символды аныктау керек.
13 нүсқа
1.
2.
Сөз тіркесі берілген. Оның ішінде үтірлер бары белгілі. Алгашкы
үтір мен соңғы үтірдің қай позицияда тұрғанын жэне оларды ара­
сында неше символ бар екенін анықтаңдар.
Бірнеше сөйлемнен тұратын сөз тіркесіндегі соңғы сөйлем ішіндегі
"А" әрпінің санын анықтаңдар.
226
14 вдсқа
1.
2.
Сөз тіркесі берілген. Оның ішінде нүктелер бары белгілі. Сол тіркесте неше нүкте бар екенін жэне бірінші нүктемен екінші нүкте
арасында неше символ орналасқанын анықгау керек.
Берілген сөз тіркесінің ұзындығын - L анықтап, егер L жұп сан
болса, онда тіркестегі алғашқы сөзді өшіріңдер, ал тақ сан болса,
соңғы сөзді өшіру керек.
15 нұсқа
1.
2.
Сөз тіркесі берілген. Оның ішінде қатар орналасқан бірдей символдар бар екенін анықтау керек. Ондай символдар жоқ болса, ол
туралы мәлімет беру керек.
Берілген сөз тіркесінің ішінде ДОС сөзіне кіретін символдардың
нешеу екенін анықтаңдар.
16 нусқа
1.
2.
Берілген сөз тіркесінде неше бос орын бар екенін анықтап, сол
тіркестегі ең ұзын сөздің енін табу керек.
Берілген сөз тіркесінде "бамсөзі неше рет кездесетінін анықтау ке­
рек, ондай тіркес жоқ болса, ол туралы мәлімет беріңдер.
17 нүсқа
1.
2.
Берілген сөз тіркесінде неше арифметикалык амалдар таңбасы бар
екенін табыңдар.
Берілген сөз тіркесінің ұзындығын - L анықтап, егер L так сан бол­
са, онда тіркестің дәл ортасындағы символды анықтау керек, ал
жұп болса - тіркес ортасындағы екі символды анықтау керек.
18 нусқа
1.
2.
Берілген сөз тіркесінде неше нүкте бар екенін жэне нүктелер ара­
сында неше символ орналасқандарын анықтау керек.
Берілген сөз тіркесінің ішіндегі барлык ! белгісін ? белгісіне
алмастырыңдар.
19 нүсқа
1.
2.
Берілген сөз тіркесіндегі барлық "А" эріптерін алып тастаңдар да,
ИЕ" әріптерінің орнына "Э" эріптерін жазып шығыңдар.
Берілген сөз тіркесінің ұзындығын - L анықтап, егер L 5-ке
калдықсыз бөлінетін болса, тіркестегі барлық жақша түрлерінің са­
нын анықтаңдар.
20 нусқа
1.
2.
Берілген сөз тіркесіндегі екінші сөйлемді экранға шығарыңдар
және оның неше символы бар екенін анықтаңдар.
Берілген сөз тіркесінің ұзындығын - L анықтап, егер L 5-ке
бөлінетін сан болса, онда тіркестің дәл ортасындағы символды
анықтау керек, ал жұп болса - тіркес ортасындағы сөзді анықтау
керек.
21 нусқа
1. Берілген сөз тіркесіндегі (кириллица) бас эріптерді кіші эріптерге
айналдырыңдар.
2. Берілген сөз тіркесінің ұзындығын - L анықтап, егер L 3-ке бөлінетін
сан болса, онда тіркестің бірінші сөйлемін экранға шығарыңдар,
әйтпесе тіркестің дәл ортасындағы символды анықтау керек.
22 нұсқа
11 Берілген сөз тіркесінің ішіидегі бос орын таңбаларын астын сызу
( _ ) таңбасына алмастырыңдар.
2. Берілген сөз тіркесіндегі "Г" әріптерінің барлығын "G" латъга
эріптеріне айналдырындар.
23 нұсқа
1. Берілген сөз тіркесіндегі (кириллица) кіші эріптерді бас әріптерге
айналдырындар.
2. Екі сөйлемнен тұратын сөз тіркесінің сөйлемдерінін орындарын
алмастырындар.
228
14 ҚОЛДАНУШЫ АНЫҚТАЙТЫН МӘЛІМЕТТЕР ТИПТЕРІ
МЕН Қ¥РЫЛЫМДАРДЫ ПАЙДАЛАНУ
Практикалық есептерде оңцелуте тиіс мэліметтердің құрылымы күрделі де болуы мүмкін. Соларды айқын, эрі анық бейнелеу үшін қарапайым типтер, жиымдар жэне нұсқауыштар
негізінде жасалған мэліметтер типтері қолданылады. C++ тілі
программалаушыға өз типін анықтап, солармен жұмыс істеу
ережелерін де анықтауға мүмкіндік береді. Бұлар қолданушы не­
месе программалаушы анықтайтын типтер деп аталып жүр.
14Л Типтердің атын өзгерту (typedef)
Программа жұмысын түсінуді жеңілдету үшін, typedef
түйінді сөзі арқылы типке жаңа ат беріледі:
typedef тип жаңа_ат [ өлшемі ];
typedef сөзі тип спецификаторын анықтайды. Мұндай сипаттама (хабарлау) қолданушы анықгаған типтерге кысқа жэне
мағыналы аттар беру үшін қолданылады. Мысалы:
typedef char name [100];
мұндағы тік жақша синтаксис элементі болып табылады. Өлшемі
көрсетілмеуі де мүмкін. Мысалдар:
typedef unsigned int UINT;
typedef char sg[10];
Осылай енгізілген атаулар стандарттық типтердің аттары
сияқты қолданылады:
UINT і, j ;// unsigned int типті 2 айнымалы
sg а;
// символдардан тұратын а [10] жиымы
Тағы бір мысал:
typedef char Massiv[20];
typedef struct {
char £Lo[30] ;
int date, code;
double zarplata;} Worker;
Осылай енгізілген тип атын кейіннен пайдалануга болады:
Massiv str[10]; /* өрқайсысы 20 символдан
тұратын 10 жолы бар массив * /
229
W orker s o t r u d n i k i [ 5 0 ] ; /* 50 қурылымнан т у р а тын м ассив * /
14.2 Тізбелер (перечисления - enum)
Программа жазу кезінде бір типтегі эр түрлі мэндер қабылдай
алатын шамаларды анықтау да кездесіп жатады. Ол үшін тізім
түріндегі мәліметтер типін - тізбелерді қолданған жөн. Enum
түйінді сөзі арқылы жасалган тізбелер программаны оқып
түсінуді жеңілдетеді. Тізбелерге кіретін константалар i n t
типінде болады. Келісім бойынша бірінші константа 0-ге тең,
келесісі —1-ге, сонан соң - 2-ге, т.с.с. бола береді. Бір тізбедегі
барлық константалардың аттары эр түрлі болуы тиіс. Тізбенің жазылу форматы:
enum [тип_аты] {к о н с т а н т а л а р _ т із ім і};
Тип аты программада осы типтегі айнымалыларды анықтау керек болган жагдайда беріледі. Компилятор осындай айнымалылардың константалар тізіміндегі мэндерді гана қабылдауын
қамтамасыз етеді. Константалар бүтін санды типте болуы тиіс
жэне олар алгашқы мэндерді кэдімгідей түрде қабылдауы (инициалдануы) керек. Инициалдану болмаса, бірінші константа
нөл болып саналады да, келесісі алдыңгысынан бірге артык мән
қабылдайды. Мысалы:
enum (tw o - 2 , t h r e e , f o u r , t e n = 1 0 , e l e v e n ,
fifty = te n + 4 0 );
мұнда t h r e e жэне f o u r константаларына 3 жэне 4 мәндері, ал
константасына - 11 мэні меншіктеледі.
enum c o l o r { r , g , b } ; / / r = 0 , g = l, b = 2
enum c o l o r {r = 2 , g = 4 ,b = 6 }; / / т и п т і ж ариялау
/ / жене инициалдay
enum c o l o r { r ,g = 3 ,b } ; / / r= 0 , g= 3, b=4
Компилятор i n t жэне епглп типтерінің арасында айырмашылық бар деп есептемейді, сондықтан тізбе типіндегі айнымалыларга программада бүтін санды мәндер меншіктеле
береді. Бірақ C++ тілінде мұндай меншіктеу типті нақты түрде
келтіру арқылы орындалады, әйтпесе компилятор ескертпе жасайды. Мысалы:
Щ
230
enum weekdays { /* жұмыс күндер: */ Monday,
Tuesday, Wednesday, Thursday, Friday};
/* Monday - 0 , T uesday - 1, т . с . с . * /
weekdays today; today = (weekdays)1;
Тізбедегі константалар аттары бірегей (қайталанбайтын) бо­
луы тиіс, ал мәндері бірдей де бола береді. Тізбелерді колданудың
жай константаларды және #define директивасын пайдаланудан
артықшылығы байланысқан константалардың көрнекілігінде
жатыр жэне компилятор константаларға бастапкы мэн бергенде
олардың типін тексере алады.
Келесі программада С тілінде тізбемен жұмыс істеу мысалы
көрсетілген.
#include <stdio.h>
enum Months { /* айлар */
January = 1, February, March, April, May, June,
July, August, September, October, November, De­
cember } months;
/* мүнда тізбе түрінде 1-ден 12-ге дейінгі сан
тізбегі алынған, өйткені January айнымалысына 1
менші ктелген */
void main ()
{int present_month;
int diff;
/* үстіміздегі ай нөмірін (1 ... 12) енгізу */
printf ("Input the present month number (1-12) : ") ;
scanf ("%d",&present_month);
months = December;
diff = (int) months - presentjnonth;
/* жыл соңьша дейін ... ай қалды */
printf ("There are %d months till the end of the
year\n", diff);
}
Программаны орындау нәтижесі:
Input the present month number (1-12): 5
231
T h e re a r e 7 m onths t i l l t h e e n d o f t h e y e a r
P r e s s an y k ey t o c o n tin u e
14.3 Құрылымдарды пайдалану
С тіліндегі жиымдар бір типтегі мәліметтерді сақтайтын
болса, құрылымдар өзара логикалық байланысқан эртүрлі типті
мэліметтерді байланыстырады.
Мысалы, бір жиымда 50 қызметкердің жалақысын сақтай
аламыз. Егер солармен байланыстыра отырып, қызметкерлердің
аты-жөнін, жасын, реттік (табельдік) нөмірін сақтайтын болсақ,
мынадаи мәліметтер типтерін жазуға тура келеді:
c h a r nam e;
/ / фамилиясы
in t age;
//
f lo a t s a l a r y ;
/ / жалақысы
u n s ig n e d em p lo y ee_ n u m b er;
/ / р е т т і к н ө м ір і
Мұндайда байланысқан эртүрлі мэліметтерді бір атаумен
сақтау мүмкіндігін беретін құрылымды пайдаланады. Мысалы:
s t r u c t Em ployee {
c h a r nam e[ 6 4 ] ;
/ / фамилиясы
i n t ag e
/ / жасы
f lo a t s a l a r y ;
/ / жалақысы
u n s ig n e d em p lo y ee_ n u m b er;
/ / р е т т і к н ө м ір і
Бұл құрылымның аты Employee идентификаторы болып табылады. Оны құрылымның тәгі деп, ал оның ішкі элементтерін
құрылым өрістері деп те атайды. Өрістер кез келген типте не­
месе соларға нұсқауыш түріндегі құрылымның адресі арқылы
қатынасу амалы ретінде де бола береді.
}
;
"
З
Ш
Н
Я
И
Н
І
Н
14.4 Қүрылымдарды сипаттау
Мэліметтердің кұрылымдық типтері келесі сипаттаумен
анықталады:
: ^
wt ;^ ,
struct кұры лы м аты
{элемеиттерді сипаттау;};
Құрылымның атауын, ягни тэгті жазу міндетті емес. Егер
құрылым атаусыз болса, онда оны сипаттау кезінде осы типке
кіретін бірнеше айнымалылардың аты бірден көрсетіледі:
232
/ / Құрылымдар жиымын жэне қүрылымға нүсқауышты
анықтау
s tru c t {
/ / фамилиясы
c h a r name [64] ;
/ / жасы
i n t age;
/ / жалақысы
flo a t s a l a r y ;
u n s ig n e d em ployee_num ber; / / қы зм еткердің
р е т т ік н ө м ір і
} s t a f f [ 5 0 ] , * p s ; /* бүл қүрылымды ж ариялаудан
к е й ін г і айнымалыларды анықтау * /
Құрылымдар типіндегі айнымалыларды сипаттау екі жолмен
жүзеге асырылады. Алғашқы тәсіл:
s t r u c t Shape { /* ф игуралар * /
i n t t y p e ; / / 0 - ш еңбер, 1 - к в а д р а т , 2 - үшбұрыш
/ / түсі
i n t c o lo r;
/ / радиусы
flo a t r a d i u s ;
/ / ауданы
flo a t a r e a ;
flo a t p e r i m e t e r ; / / п ери м етрі
};
Shape n ew _ sh ap e, o ld _ s h a p e ;
Екінші тэсіл:
ф
игуралар
*
/
құрылым
аты
{ /
i n t ty p e ; / / 0 - ш еңбер, 1 - к в а д р а т , 2 - үшбүрыш
/ / тусі
i n t c o lo r;
/ / радиусы
flo a t r a d i u s
/ / ауданы
flo a t a r e a ;
flo a t p e r i m e t e r ; / / п ери м етрі
} new s h a p e , o l d s h a p e ;
түрде
топ
*
/
қүрылым
аты
s tru c t gr
/
аты
-ж
ен
і
/
( c h a r f lo [ 3 0 ] ; /* қүрылым
/
c h a r f a k [ 2 5 ] ; / * құрылым
/
i n t nom er; /* қүрылым
}
/
/ * құрылымдық айнымалы
g ru p p a l;
s t r u c t g r g ru p p a 2 ; /* құрылымдық аинымалыны
б арлау * /
233
I
Құрылымға компьютер жадынан орын бөлу үшін кұрылымдық аинымалыны сипаттау керек:
struct құрылым_аты айнымалыаты;
Мұндайда кұрылым жарияланған соң оның атын бірден
пайдалануға болады (анықтауды кейінірек беруге болады),
бірақ мұндай тэсіл компиляторға құрылым мөлшерін білу қажет
етілмейтін кездерде колданылады:
s t r u c t S econd {
F i r s t *p;
}; s t r u c t F i r s t { /* F i r s t құрылымын•анықтау * / };
Бұл құрылымның байланысқан тізімдерін құру мүмкіндігін
береді.
***
‘ і‘
" «Н и
Құрылымды инициалдаудың (құрылым өрістеріне мэн берудің) бір жолы - оның элементтерін сипатталу реттілігімен
жүйелі жақша ішінде біртіндеп беру болып табылады:
s t r u c t Em ployee {
c h a r nam e[ 6 4 ] ;
//
фамилиясы
i n t age
//
f lo a t s a l a r y ;
//
жалақысы
u n s ig n e d em ployee__num ber; / /
р е т т і к н ө м ір і
} new_eraployee = {"Kadyrov", 32, 3 0 0 .5 , 1122};
Құрылымдағы жиымдарды инициалдау кезінде олардың э
менттерін жүйелі жақшалар арқылы бөліп, құрылым өрістер
мысалы
s t r u c t c o m p le x {
u n s ig n e d c o d e ;
f lo a t s a l a r y ;
} comp [ 2 ] [3]={ {{1021, 301}, {1031, 289}, {1041,
250}}, {{1121, 300}, {1131, 222}, {1141, 220}}};
немесе төмендегідей түрде де инициалдау мүмкіндіктері бар:
s t r u c t d a t e { i n t d a y , m o n th , y e a r ; };
d [5 ]= {
{ 1 ,3 ,1 9 8 0 } ,
{ 5 ,1 ,1 9 9 0 } ,
{1 , 1 , 2 0 0 2 } };
234
Қүрылымдарды анықтау барысында олардың элементтеріне
бастапқы мәндерді пернелерден енгізіп те меншіктеуге болады.
Құрылым элементтерінің мэндерін енгізу үшін ағымдық енгізу
операторы с іг і» (C++ стилінде) немесе форматпен енгізу опера­
торы —scanf колданылады.
Егер құрылымды сипаттау жолы программадағы барлық
функциялардын алдында орналасса, онда ол кұрылымды осы
программадағы барлық функциялар пайдалана алады.
14.5 Қурылым өрістерін пайдалану
Құрылымның элементін, яғни орістерін пайдалану үшін
нүкте (.) қою жолымен (тікелей ену) немесе -> таңбалары арқылы
нұсқауыш бойынша ену амалы қолданылады, мысалы:
s tru c t f r u it {
c h a r name [15] ;
in t c a lo rie s ;
In­
s t r u c t v e g e ta b le {
c h a r name [15] ;‘
in t c a lo rie s ;
};
f r u it a;
v e g e ta b le b ;
Құрылымды осылай жариялап алған соң оның өрістерін
a . c a l o r i e s жэне b . c a l o r i e s деп, келесісін a . name жэне
b . name деп пайдалана береміз.
Енді бір программаны толығырақ қарастырайық.
14.1
мысал. new _em ployee атты құрылым өрістерін пайда­
лану
#i n c l u d e < io s tr e a m .h >
s t r u c t Em ployee {
c h a r nam e[ 6 4 ] ;
i n t age;
f lo a t s a l a r y ;
u n s ig n e d em ployee_num ber;
235
} new _em ployee • {"K adyrov", 3 2 , 3 0 0 . 5 , 1 1 2 2 } ;
v o i d m a in ()
t
{
a
c o u t « n ew _ em p lo y ee. name « e n d l «
n ew _ em p lo y ee. a g e « e n d l «
n ew _ e m p lo y ee. s a l a r y « e n d l «
n ew _ em p lo y ee. em ployee_num ber « e n d l ;
}
Программа жұмысы нәтижесі:
Kadyrov
32
3 0 0 .5
1122
• >ги
ЗиИптГДгrriTIS 9I
Тағы бір мысал:
г , ftr t
А
/ * ойын карталарын сипаттайтын құрылымды анықтау
*/
enum s u i t { c l u b s ,.d i a m o n d s , h e a r t s , s p a d e s } ;
/ * шыбын, қиық, т а б а н , қарга * /
t y p e d e f i n t p i p s ; / * p i p s (упайлар) i n t синонимі
р е т ін д е * /
s t r u c t card {
s u it s;
4 « !
p i p s p ; / * 1 - д е н 1 3 -к е д е й ін сан дар р е т т і л і г і
Т у з , 2 , 3 , . . . , 1 0 , В а л е т , Дама, К орольдерге
сэйкес
келеді * /
};
,
щ
’ -- !-1-> ' * ' - } inn і
Келесі анықтаулар c a r d типіндегі ml, m2 идентификаторларына орын бөледі:
,. :
card m l ,m2;
,| , . ,s, b a , f*
Құрылымның m l жэне m2 өрістерін пайдалану үшін нүкте
арқылы жазылатын таңдау жолын қолданамыз, m l өрісіне екілік
қиық, ал m2 өрісіне қарғаның дамасын тағайындағымыз келеді
делііс:
. V J I rS6
m l .s = diamonds;
236
m2 . s - s p a d e s ;
m2 . p = 12 ;
Келесідей анықтаулар мен меншіктеу амалдарын қарастырайық:
c a r d c d , *рс = &cd;
c d .p - 2;
c d .s = spades;
>
Құрылым элементтерін пайдалануды нұсқауыш
операторы арқылы да орындауға болады
Қурылым элементтерін пайдалану
14.1-кесте
Оның басқаша
Мәні
жазылуы_________________________ ____
c d .p
c d .s
рс -> р
рс -> s
(* p c ).s
рс -> s
2
sp a d e s (3)
enum арқылы шығады.
sp a d e s (3)
Құрьілымдар объектіге бағытталған программалаудың
ұғымдарының бірі f кластар құру негізі болып саналать
мэліметтер
14.6 Қүрылымдар жасау
Құрылымдар жасауға толығырак бір мысал келтіреиік
14.2 мысал. Қайық атын, шыққан жылын жэне бағасын құ
рылым түрінде жазу
/ * struct__2
Құрылым жасау мысалы * /
# in c lu d e < s td io .h >
define STR15 16 / * аяқтау н е л і үшін б і р символ
қ осу * /
/ / Қайық қурылымы
{ ch a r m o d el[S T R 1 5 ]; / / м о д ел і
237
in t year;
/ / шығарылган жылы
flo a t p r i c e ;
/ / бағасы
} b o a t;
/ / қайық
v o i d m a in ()
{ / * қайық м о д ел ін е н г і з у * /
p r i n t f ( " \ n I n p u t a m odel o f t h e b o a t : ") ;
g e ts (b o a t.m o d e l);
^
/ * шығарылган жылын е н г і з у * /
p r i n t f ( " \n I n p u t t h e y e a r o f t h e c r e a t i o n o f t h e
b o a t : ") ; sca n f(" % d " , & b o a t .y e a r ) ;
/ * бағасын е н г і з у * /
p r i n t f ( " \ n I n p u t t h e p r i c e o f t h e b o a t : ") ;
s c a n f(" % f" , s b o a t . p r i c e ) ;
/ * барлық е н г і з і л г е н м ә л ім е т т е р д і шығару * /
p r i n t f (" \n \n T h e b o a t %s, t h e y e a r o f t h e c r e ­
a t i o n %d\n", b o a t .m o d e l , b o a t . y e a r ) ;
p r i n t f ( " T h e b o a t was s o l d f o r % 8.2f t e n g e . \ n " ,
b o a t.p r ic e );
}
Программаны орындау жұмысының нәтижесі:
I n p u t a m odel o f t h e b o a t : T u lp a r
I n p u t t h e y e a r o f t h e c r e a t i o n o f t h e b o a t : 2009
I n p u t t h e p r i c e o f t h e b o a t : 168000
The b o a t T u lp a r , t h e y e a r o f t h e c r e a t i o n 2009
The b o a t was s o l d f o r 1 6 8 0 0 0 .0 0 t e n g e .
Құрылымды функция аргументі ретінде беру тәсілін қарастырайық. Мұнда құрылым аргумент ретінде мэні бойынша
функцияға беріледі, яғни функцияға тек мәліметтер көшірмесі
ғана жіберіледі.
V
14.3
мысап. Геометриялық фигуралар түрлерін құрылым
түрінде жазу
/* s t r u c t _ 3
Құрылымды функция аргум енті р е т ін д е қолдану * /
# i n c l u d e < s t d i o . h > #define PI 3 .1 4
s t r u c t Shape { / * фигура * /
i n t ty p e;
/ / 0 - ш еңбер, 1 - к в адр ат,
2 - үшбүрыш
238
ch ar c o l o r ;
/ / тусі
flo a t r a d iu s ;
/ / радиусы
d o u b le a r e a ; / / ауданы
>;
v o id s h o w _ s tr u c t
(Shape ) ;
/*
s h o w _ s tr u c t
(қүрылымды к өр сету) функциясы п рототи п і * /
v o id m a in ()
{
Shape c i r c l e ;
c i r c l e . ty p e = 0;
c i r c l e . c o lo r = ' r ' ;
c i r c l e . r a d iu s = 5 .0 ;
c i r c l e . a r e a = PI * c i r c l e . r a d iu s * c i r c l e . r a ­
d iu s ;
show_s t r u c t ( c i r c l e ) ; / * функцияны шақыру * /
}
/* функцияны си п аттау * /
v o id s h o w _ s tr u c t (Shape sh ap e)
{
p r i n t f ("s h a p e . ty p e %d\n", s h a p e . t y p e ) ;
p r i n t f ( " sh a p e . c o l o r % c\n", s h a p e . c o l o r ) ;
p r i n t f ( " sh a p e . r a d iu s % f\n", s h a p e . r a d i u s ) ;
p r i n t f ("s h a p e . a r e a % f\n", s h a p e . a r e a ) ;
)
Программа жұмысының нәтижесі
(14.1-сурет):
s h a p e . ty p e 0
s h a p e .c o lo r r
__________________________
s h a p e . r a d iu s 5 .0 0 0 0 0 0
s h a p e .a r e a 7 8 .5 0 0 0 0 0
P r e s s any k ey t o c o n tin u e
14.1-сурет
Құрылымдарға нұсқауыш ретінде берілетін мәліметтерді
қарастырып, функция ішінде кұрылымды өзгерту тәсіліне прог­
рамма құрып көрейік.
14.4 мысал. Геометриялык фигуралар түрлерін құрылым
түрінде жазу
239
I
/* stru ct_ 4
Құрылым ө р і с т е р і н і ң м ән дер ін
б о л с а , онда қүрылым р е т і н д е г і айнымалы мэн
бойынша е м е с , с іл т е м е бойынша б е р і л у і т и і с .
Функция іш ін д е қүрылым ө р і с т е р і н пайдалану ->
амалы арқылы орындалады * /
# in c lu d e < s td io .h >
#define PI 3.14
{
i n t ty p e; /* 0 ■
к в а д р а т ,2 - т е ң б ү й ір л і
үшбүрыш * /
char c o lo r ;
/ / тусі
flo a t r a d i u s ;
/ / радиусы н ем есе қабырғасы
d o u b le a r e a ;
/ / ауданы
} c i r c l e = { l , ' b ' , 2 , 4 } ; / * бастапқы мән б е р іп
инициалдау * /
v o i d c h a n g e _ s t r u c t (Shape *) ; /
функциясы п р ототи п ! (ағылш. құрылым ө з г е р т у ) * /
v o i d m ain ()
{ / * функцияға м әл ім ет б е р у г е д е й ін * /
(" B e fo r e \n " );
p r i n t f ( " c i r c l e . ty p e %d\n", c i r c l e . t y p e ) ;
p r i n t f ( " c i r c l e . c o l o r % c\n", c i r c l e . c o l o r ) ;
p r i n t f ( " c i r c l e . r a d iu s % f\n", c i r c l e . r a d iu s )
p r i n t f ( " c i r c l e . a r e a % f\n", c i r c l e . a r e a ) ;
c h a n g e _ s tr u e t ( S c i r c l e ) ; / * функцияны шақыру * /
/ * функциязга мэн бер ген н ен к е й ін * /
p r in tf(" A fte r \n " )
printf("circle.type %d\n", c i r c l e . t y p e ) ;
p r i n t f ( " c i r c l e . c o l o r %c\n", c i r c l e . c o l o r ) ;
.radius %f\n", circle.radius) ;
printf("circle.area %f\n", circle.area);
}
/ * функцияны си п аттау * /
v o i d c h a n g e _ s t r u c t (Shape *sh a p e)
{
-> ty p e = 0 ;
_
240
-> radius =5.0;
->
PI
-> area
}
Программа жұмысы нәтижесі
(14.2-сурет):
->
'D; \MyPro jects\st ruct4\Debug\struct., *
BED
lefora
ire le .ty p e
1
ire le .c o lo r b
ire le .ra d iu s
2.Ө00ОӨ0
i r e l e . area
4 .Q00000
f te r
ire le .ty p e
0
irc le .c p lo r
r
i r e l e , radius
5.000000
ire le .a re a
78.50Ө00Й
ss any key to continu rz
'ress
c i r c l e . ty p e 1
c o lo r b
c i r c l e . r a d iu s 2 .0 0 0 0 0 0
4 .0 0 0 0 0 0
Ж
c i r c l e . ty p e
14.2-сурет
0
r
c i r c l e . r a d iu s 5 .0 0 0 0 0 0
7 8 .5 0 0 0 0 0
P r e s s any k ey t o c o n t in u e
Құрылымдардың өрістерінің өздері де құрылым бола алады.
Енді соған бір мысал келтірейік.
14.5 мысал. Қызметкерлер туралы мэліметтерді құрылым
түрінде жазу
s t r u c t Employee { / * "Қызметкер" құрылымы /
// фамилиясы
ch a r name[ 6 4 ] ;
i n t age;
//
u n s ig n e d ел^>1оуее number; / / р е т т ік н е м ір і
// датасы
s t r u c t D a te {
// күні
i n t day;
// айы
i n t month;
//жылы
in t year;
//
жүмысқа
алынған
мерзімх
>
//жалақысы
flo a t s a l a r y ;
//жаңа
қызметкер
em
p
loyee
>
икі құрылым элементін пайдалану үшін,
анылады. Алдымен сыртқы кұрылым :
құрылым элементі көрсетіледі. Мысалы
12;
d a t e . month
em p loyee
16-1660
241
Құрылымдар жиымын кұруға да бір мысал келтірейік.
14.6 мысал. Құрылымдар жиымы
/ * s t r u c t _ 6 Қүрылымдар жиымын құру * /
# in c lu d e < s td io .h >
# define STR15 16
#define MAX 50
s t r u c t b o a t / / "қайық" құрылымы
{
c h a r m o d el[S T R 1 5 ];
in t year;
flo a t p r i c e ;
v o i d m ain ()
{ i n t i , k;
b o a t Boats[M A X ];
Ср| •,
/ * Қанша қайық бар? * /
p r in tf(" H o w many b o a t s ? " );
s c a n f ("%d", &k) ;
Щ
•
f o r ( i = 0; i < k; i+ + )
{
' ■
: !
_ f l u s h a l l ( ) ; / * б у ф ер д і а?азалау алдыңгы
s c a n f () функциясын орындаудан қалған к і р і с
ағынындаагы жаңа жолға көшу символын алып
т а с т а у үшін керек * /
/ * қайық м о д ел ін е н г і з у * /
p r i n t f ( " \ n I n p u t a m odel o f t h e b o a t : " );
g e ts (B o a ts [i].m o d e l);
/ * қайықтың шыққан жылын е н г і з у * /
p r i n t f ("\ n I n p u t t h e y e a r o f t h e c r e a t i o n o f
th e b o a t : " );
scan f(" % d " , S B o a t s [ i ] . y e a r ) ;
/ * қайықтың бағасын е н г і з у * /
p r i n t f ("\ n I n p u t t h e p r i c e o f t h e b o a t : " ) ;
s c a n f(" % f" , & B o a t s [ i ] . p r i c e ) ;
}
p r in tf(" \n \n " );
/ * циклде барлық қайықтар туралы м әл ім ет
242
шыгару * /
f o r ( i = 0; i < к; i+ + )
{
p r i n t f ( " T h e b o a t %s, t h e y e a r o f th e c r e a t i o n
%d\n",
B o a ts [i].m o d e l, B o a t s [ i ] .y e a r ) ;
p r i n t f ( " T h i s b o a t was s o l d f o r % 8.2f $ . \ n " ,
B o a ts [i].p r ic e );
}
I
Программаны орындау нэтижелері:
How many b o a t s ? 3
In p u t a m odel o f t h e b o a t: Guldyz
I n p u t t h e y e a r o f t h e c r e a t i o n o f t h e b o a t:
I n p u t t h e p r i c e o f t h e b o a t: 142200
I n p u t a m odel o f t h e b o a t: T u lp ar
I n p u t t h e y e a r o f t h e c r e a t i o n o f t h e b o a t:
I n p u t t h e p r i c e o f t h e b o a t: 162000
I n p u t a m odel o f t h e b o a t : S u p e r i
I n p u t t h e y e a r o f t h e c r e a t i o n o f th e b o a t :
I n p u t t h e p r i c e o f t h e b o a t : 284000
The b o a t G u ld yz, t h e y e a r o f t h e c r e a t i o n
T h is b o a t was s o l d f o r 1 4 2 2 0 0 .0 0 t e n g e .
The b o a t T u lp a r , t h e y e a r o f t h e c r e a t i o n
T h is b o a t was s o l d f o r 1 6 2 0 0 0 .0 0 t e n g e .
The b o a t S u p e r i, t h e y e a r o f t h e c r e a t i o n
T h is b o a t was s o l d f o r 2 8 4 0 0 0 .0 0 t e n g e .
2006
2009
2011
2006
2009
2011
14.7 Құрылым жиымдарын функция аргументі
ретінде пайдалану
Егер кұрылымдар орнына оларға арналған нұсқауышты жазатын болсақ, онда құрылымдар функцияларға мәні бойынша
беріледі де, программаның орындалуы жылдамдайды, өйткені
м үндяйдя
бастапқы мәліметгердің көшірмелері жасалмайды.
Келесі мысалда құрылымдар орнына нұсқауышты пайдалану
көрсетілген.
243
)
1
/ / stru ct_ 5
құрылымдар орнына оған арналған нүсқауышты
қолдану мысалы
# i n c l u d e < io s t r e a m .h >
# define STR15 16
#define MAX 50
in t k ;
str u c t boat
{ c h a r m o d el[S T R 1 5 ];
in t year;
flo a t p r i c e ;
};
f с ,, *
v o i d p r i n t _ d a t a ( b o a t *) ;
v o i d m a in ()
{ in t i;
,
. . j. ,
b o a t Boats[M A X ],
= & B oats[ 0 ] ;
c o u t « "How many b o a t s ? ";
c i n » k;
.
,\ M
.
f o r ( i = 0; i < k; i+ + )
{
.
_ 11
c o u t « "\ n I n p u t a m odel o f t h e b o a t : ";
c i n » p a s t B o a t s - > m od el;
c o u t « " \n I n p u t t h e y e a r o f t h e c r e a t i o n
t h e b o a t : ";
c in » p a stB o a ts -> y ea r;
c o u t « " \n I n p u t t h e p r i c e o f t h e b o a t : "
c in » p a stB o a ts -> " p r ic e ;
/
}
= & B oats[ 0 ] ;
p r in td a ta (p a stB o a ts);
>
v o i d p r i n t _ d a t a ( b o a t * p tr _ b o a t)
{
in t i;
c o u t « " \n " ;
244
f o r ( 1 = 0 ; i < к; i+ + ) / * к айнымалысының
к өріну аймагына н азар салыңдар * /
{
c o u t « "The b o a t " « p t r j b o a t - > m odel « "
th e y e a r o f t h e c r e a t i o n " « p t r _ b o a t - > y e a r
« e n d l;
c o u t « " was s o l d f o r " « p t r _ b o a t - > p r i c e
« "$" « e n d l;
ptr__boat++;
}
}
Программаның орындалу нэтижесі:
How many b o a t s ? 3
I n p u t a m odel o f t h e b o a t: Yakor
In p u t t h e y e a r o f t h e c r e a t i o n o f t h e b o a t: 1987
I n p u t t h e p r i c e o f t h e b o a t : 18234
In p u t a m odel o f t h e b o a t : B lu e
In p u t t h e y e a r o f t h e c r e a t i o n o f t h e b o a t : 2003
I n p u t t h e p r i c e o f t h e b o a t : 44321
I n p u t a m odel o f t h e b o a t: V olna
In p u t t h e y e a r o f t h e c r e a t i o n o f th e b o a t: 2000
In p u t t h e p r i c e o f t h e b o a t : 39876
The b o a t Yakor t h e y e a r o f t h e c r e a t i o n 1987
was s o l d f o r 18234$
The b o a t B lu e t h e y e a r o f t h e c r e a t i o n 2003
was s o l d f o r 44321$
The b o a t V oln a t h e y e a r o f t h e c r e a t i o n 2000
was s o l d f o r 39876$
P r e s s any k ey t o c o n t in u e
14.8 Біріктірмелер (объединение - union)
Біріктірмелер - бұл өрістерінің барлығы да бір адресте
орналасатын құрылымның бір түрі. Оны сипаттау форматы да
құрылымдардікі сияқты, тек s t r u c t түиінді сөзі орнына u n io n
сөзі қолданылады. Біріктірме ұзындығы оның өрістерінің ең
көлемдісінің ұзындығына тең болады. Әрбір уақыт кезеңінде
"Біріктірмелер" типті айнымалыда тек бір мэн ғана сақталады.
245
Біріктірмелерді бір сәтте бір өріс қана пайдаланылатыны белгілі
жағдайларда, тек компьютер жадын үнемдеу үшін қолданады.
Басқаша айтқанда, біріктірмелер - бұл эр түрлі уақыт кезеңдерінде эр түрлі типтегі объектілер сақталатын жады аймағы.
Кез келген сәтте біріктірмеде көп дегеннің өзінде, тек бір объект
сақталады, өйткені оның элементтері кезектесе отырып, жадының
тек бір аймағын пайдаланады. Программалаушы біріктірмедегі
мэліметті соның типіне сәйкес элементтің аты арқылы пайдаланылуын қадағалап отыруы тиіс. Біріктірмеге ең соңғы жазылған
элементтен басқаларын пайдалану нэтижесі анықталмаған болып
саналады. Енді бір мысал қарастырайық.
1-мысал
'
# i n c l u d e < io s t r e a m .h > / / C++ т і л і с т и л ін д е
v o i d m ain ()
II
карточка" н ем есе "чек" сияқты м ән д ер і
{ /
бар жаңа p t ти п ін (телем т и п і) си п аттау * /
enum p t {CARD, CHECK}>
p t ty p e;
D :\M yProjects\unionO \D ebug\unione
I n p u t i n f о . c a r d : My b a n k
u n io n paym ent
i l n p u t i n f o . c h e c k : 1234b
№
{ char c a r d [2 5 ];
[P ress a n y k e y t o c o n t i n u e .
lo n g check;
} in fo ;
14.3-сурет
= CARD;
c o u t « " In p u t i n f o . c a r d : "
c in .g e t lin e ( in f o .c a r d , 2 5 );
c o u t « " In p u t i n f o . c h e c k :
c in » in fo .c h e c k ;
s w i t c h (ty p e )
c o u t « in f o .c a r d « e n d l; break
{ c a s e CARD
c a s e CHECK: c o u t « i n f o . c h e c k « e n d l ; b r e a k
>
>
Прогамманың орындалу нэтиже (14.3-сурет)
I n p u t i n f o . c a r d : My bank
12345
I n p u t i n f o . ch ec k
90
Алынған мәннің 90 болуы біріктірме элементін пайдалану
246
нэтижесінің аныкталмаганын көрсетеді. Келесі мысалдагы біріктірмеде ең соңғы орналасқан элемент паидаланылады.
#i n c l u d e < s t d i o . h > / / С т і л і ст и л ін д е
v o i d main ()
{ enum p t {CARD, CHECK};
p t ty p e;
u n io n payment
{
ch ar c a r d [ 2 5 ] ;
lo n g c h e c k ;
} in fo ;
ty p e = CARD;
i n f o . c h e c k * 12345;
/ * Мүнда компьютер жадына соңғы больш
орналасқан б ір ік т ір м е эл ем ен т і пайдаланылып
отыр: * /
p u ts (" In p u t i n f o . c a rd :" ) ;
g e ts (in fo .c a rd );
s w itc h (ty p e )
{ c a s e CARD : p u t s ( i n f o . c a r d ) ; b r e a k ;
c a s e CHECK: p r i n t f ("%d", i n f o . c h e c k ) ; b reak
}
Программанын орындалу нәтиж
(14.4-сурет):
Input i n f o . c a r d :
My bank
My bank
P r e s s any k e y t o c o n t in u e
14.4-сурет
Бұл программада дұрыс нэтиже алынды.
Келесі мысал біріктірмелерді дұрыс пайдалану жауапкершілігі
0
толығынан программалаушыда жатқанын көрсетеді.
# i n c l u d e < io s t r e a m .h > / / C++ т і л і ст и л ін д е
u n io n Ntimber
in t х ;
flo a t у ;
};
247
v o id m ain ()
{ Number z n a c h e n ie ;
/* соңғы болып z n a c h e n ie .у эл ем ен тi мэн
қабылдайды * /
z n a c h e n i e .х = 1 0 0 ;
' ’
z n a c h e n ie .у = 5 0 . ;
^
c o u t « " z n a c h e n ie . x : " « z n a c h e n ie .x
« " z n a c h e n ie .у : " « z n a c h e n ie .у « e n d l ;
/* соңғы болып z n a c h e n ie .x э л е м е н т і мэн
қабылдайды */
z n a c h e n ie .у = 50;
z n a c h e n ie .x = 1 0 0 ;
c o u t « " z n a c h e n ie . x : " « z n a c h e n ie .x
« " z n a c h e n ie .у : " « z n a c h e n ie .у « e n d l ;
Программа нәтижесі:
z n a c h e n ie .x : 1112014848 z n a c h e n i e .у : 50
z n a c h e n ie .x : 100 z n a c h e n ie .у : 1 .4 0 1 3 e -0 4 3
Программа орындалуы барысындагы мынадай мәліметтер
z n a c h e n ie .х : 1112014848 z n a c h e n ie .у : 50
соңғы элемент z n a c h e n ie . у болғанын көрсетеді.
Ал программадағы мынадай мәліметтер
z n a c h e n ie . х : 100 z n a c h e n ie . у : 1 .4 0 1 3 е -0 4 3
соңғы элемент z n a c h e n ie . х болғанын көрсетеді.
Біріктірмелер келесі программада көрсетілгендей компьютер
жадын үнемді пайдалану мүмкіндігін береді.
ч
# in c lu d e < i o s t r e a m .һ > / / C++ т і л і с т и л ін д е
u n io n m an y_types
{
І
1
І
і .. •
,і.
char с;
1
байт
//
i n t iv a lu e ;
4
бай т
//
flo a t f v a l u e ;
4
байт
//
d o u b le d v a lu e ;
8
байт
//
} m y _ u n io n ;
v o id m a in ()
{
v
/ / дүрыс орындалатын ен гізу -ш ы гар у операциялары
24 8
I
'Ь
my u n io n . с
c o u t « m y_ u nion. с « e n d l;
m y_uni°n . i v a l u e =1990;
c o u t « m y _ u n io n . i v a l u e « e n d l;
m y_uni°n . f v a lu e = 1 9 .9 0 ;
c o u t « m y _ u n io n . f v a lu e « e n d l ;
m y_union. d v a lu e = 987 6 5 4 .32E+13;
c o u t « m y_ u nion. d v a lu e « e n d l;
// дүрыс орындалмайтын енгізу-шығару операция
лары
c o u t « m y _ u n io n .c « e n d l;
c o u t « m y _ u n io n . i v a l u e « e n d l ;
c o u t « m y_ u nion. f v a lu e « e n d l ;
c o u t « my__union. d v a lu e « e n d l;
/* Программаның бірінші бөлігі дұрыс орындалды, ейткені біріктірмеге әр түрлі типтегі
мәліметтер бірден емес, біртіндеп меншіктелді
Ал екінші белікте тек double типті мен
раня дұрыс керсетілді, ейткені ол соңында
енгізілген болатын. */
/* біріктірменің ең көлемді элементіне тең
ұзындызғын есептеу */
c o u t « " S iz e o f t h e u n io n = "
« s i z e o f (many ty p e s ) « " b y te s " « e n d l;
Программаны орындау нәтижесі (14.5-сурет)
Iсл "D:\M yProjects\union3\Debu - ІП І
Ь
Щ
Т
'
.
7.
'
I
1990
1990
.> - ^
І1 9 .9
:"о," • V - ,/*• »\ Щ
19 ,8 7 6 5 4 е +018
1 9 .9
■\
Ш[тг£ •.. ;т
р1Б4494568
9 . 87654е+018
'- 2 .0 5 4 6 1 е *03 3
,9 .8 7 6 5 4 е * 0 1 8
Ш
■Size o f t h e u n i o n * 8 b y t e s
P r e s s any key to c o n tin u e
-154494568
bJ
- 2 . 05461е+033
14.5-сурет
9 . 87б54е+018
S iz e o f th e u n io n = 8 b y te s
P r e s s any key t o c o n tin u e
249
I
14.9 Б и тпк өрістер
Биттік өрістер - бұл құрылым өрістерінің ерекше бір түрі.
Олар мәліметтерді жинақтап, мысалы, "иә/жоқ" сияқты жалаушаларды ықшамдап орналастыру үшін қажет. Мұндағы компьютер
жадының ең кіші адрестелетін ұяшығы - 1 байт, ал жалаушаны сактау үппн оір-ақ оит жеткілікті. ьиттік өрістерді сипаттау
кезінде оның атынан соң қос нүкте қойылады да, өріс ұзындығы
битпен (бүтін оң константа) көрсетіледі:
s t r u c t O p tio n s {
,ч
b o o l c e n te r X : 1 ;
;
-J
b o o l c e n te r Y : 1 ;
, ^
u n s ig n e d i n t sh ad o w : 2 ;
г
u n s ig n e d i n t p a l e t t e : 4 ;
*f
};
Шй/Ш , >ч.«<** і-зж щ іь tw t
Биттік өрістер кез келген бүтін типте бола береді. Өріс аты
жазылмауы да мүмкін, мұндай өрістер аппараттық шекараға туралау үшін қолданылады. Өрісті пайдалану эдеттегідей оның атын
көрсету арқылы орындалады. Өріс адресін алуға болмайды, бірақ
жалпы биттік өрістерді кэдімгі құрылым өрістері сияқты пайдалана беруге болады. Жеке биттермен амалдар орындау байт пен
машиналық сөздерге Караганда, онша үнемді орындалмайды,
өйткені ол үшін компилятор арнайы кодтар жасап, программа
кодының көлемін тым арттырып жібереді. Биттік өрістертерді ком­
пьютер жадында орналастыру компиляторга жэне аппаратурага
байланысты болады.
Келесі құрылымды сипаттау мысалын қарастырайық:
s t r u c t B itC a r d {
/* к ө р с е т іл г е н цифрлар - бұл б и ттер саны * /
u n s ig n e d f a c e : 4 ; /* 0 - тұз,... ,12 - король; 4 бит О
...15 сандарын сақтай алады * /
u n s ig n e d s u i t : 2 ; /* 0 - қиық, 1 - табан, 2 - шыбын,
3 - карга; 2 бит 0 ... 3 сандарын сақтайды * /
u n s ig n e d c o l o r : 1 ; /* 0 - қызыл, 1 - қ а р а ;
мунда 1 бит ж е т к іл ік т і * /
250
I ;
Биттік өрістерді карта элементтерін сақтау үшін қолдану мы­
салы.
#i n c l u d e < io s t r e a m .h > / / C++ т і л і ст и л ін д е
# i n c l u d e < io m a n ip .h >
# in c lu d e < s td io .h >
# i n d u d e <m ath.h>
s t r u c t B itC a r d {
u n s ig n e d f a c e : 4;
/ * ағылш. f a c e - к а р т а ;0 туз, ,
12 - король * /
u n s ig n e d s u i t : 2 ;
/ * агылш. s u i t — карта
іцүрі *0 — қиық f 1 “ табан ,2 — шыбын ,3
қарра /
u n s ig n e d c o l o r : 1; / * c o l o r - т ү с і ; 0 - қыэыл,
1 - қара */
Ь*
v o i d f illD e c k ( B it C a r d * ) ; / * d eck жиымын 52
картамен толтыру * /
v o i d d e a l (B itC a rd * ) ; / * d e a l - карта тар ату;
экран 52 карта шығару * /
v o i d m ain ()
B itC ard d e c k [5 2 ]; / * 5 2 картадан түратын жиым * /
f illD e c k (deck) ;
d e a l(d e c k );
}
v o i d f illD e c k (B itC a rd *temp__deck)
fo r
( i n t i = 0 ; i < 52; i+ + )
{
temp d e c k [ i ] . f a c e = i % 13;
temp d e c k [ i ] . s u i t — i / 13;
t e m p _ d e c k [ i ] . c o l o r = i / 26;
)
}
v o i d d e a l (B itC a rd *tem p_deck)
251
{ i n t 1 = 0 ; / * б ө л іп шығару ушін * /
/ * ықшамды болуы ушін карталарды е к і б а г а н ғ а
б ө л е м із : 0 -2 5 карталар — б ір ін ш і б а ғ а н , 2 6 -5 1
карталар - ек ін ш і баған * /
fo r ( in t k l = 0, k2 = k l + 26; k l <= 25; kl++, k2++)
{ c o u t « "Card: " « s e t w ( 3 )
« tem p__deck[kl] . f a c e « " S u i t : "
« setw (2 ) « te m p _ d e c k [k l]. s u i t
« " C o lo r : " « s e t w (2)
« te m p _ d e c k [ k l ] .c o l o r ;
c o u t « " C a rd : " < < setw (3 )
« te m p _ d e c k [ k 2 ]. f a c e « " S u i t : "
« s e t w (2) « te m p _ d e c k [ k 2 ]. s u i t
« " C o lo r : " « s e t w (2)
« te m p _ d eck [k 2 ] . c o l o r « e n d l;
1+ + ;
u 7 '' ■ ; &a; : 11 ь Ц
i f (1 > 12) { /* жалғастыру үшін E n te r б а с у
керек * /
p r i n t f ( " P r e s s E n te r f o r c o n t i n u i n g 11) ;
g e t c h a r ( ) ; 1 = 0 ;}
>
}
* ^г
Программаның орындалу нәтижелepi:
Card: 0 S u it: 0 C o lo r : 0 Card 0
Card: 1 S u it: 0 C o lo r : 0 Card 1
Card: 2 S u it: 0 C o lo r : 0 Card 2
Card: 3 S u it: 0 C o lo r : 0 Card 3
Card: 4 S u it: 0 C o lo r : 0 Card 4
Card: 5 S u it: 0 C o lo r : 0 Card 5
Card: 6 S u it: 0 C o lo r : 0 Card 6
Card: 7 S u it: 0 C o lo r : 0 Card 7
Card: 8 S u it: 0 C o lo r : 0 Card 8
Card: 9 S u it: 0 C o lo r : 0 Card 9
Card: 10 S u it: 0 C o lo r : 0 Card 10
252
S u i t : 2C olor:
S u it : 2 C o lo r :
S u i t : 2 C o lo r:
S u it : 2 C o lo r :
S u i t : 2C olor:
S u i t : 2 C o lo r:
S u i t : 2 C o lo r:
S u i t : 2C olor:
S u i t : 2C olor:
S u i t : 2C olor:
S u i t : 2 C o lo r:
Card: 11 S u it: 0 Color: 0 Card:11 S u it:2C olor:
Card; 12 S u it: 0 Color: 0 Card:12 S u it: 2Color:
P ress Enter fo r co n tin u in g
Card: 0 S u it: 1 Color: 0 Card: 0 S u it: ЗСоІог
Card: 1 S u it: 1 Color: 0 Card: 1 S u it: ЗСоІог
Card: 2 S u it: 1 Color: 0 Card: 2 S u it: ЗСоІог
Card: 3 S u it: 1 Color: 0 Card: 3 S u it: ЭСоІог
Card: 4 S u it: 1 Color: 0 Card: 4 S u it: ЗСоІог
Card: 5 S u it: 1 Color: 0 Card: 5 S u it: ЗСоІог
ЗСоІог
Card: 6 S u it: 1 Color: 0 Card: 6 S u it:
7 Suit: 3 Color
Card: 7 S u it: 1 Color: 0 Card
8 Suit: 3 Color
Card: 8 S u it: 1 Color: 0 Card
9 Suit:3 Color
Card: 9 S u it: 1 Color: 0 Card
10 Suit:3 Color
Card: 10 S u it: 1 Color: 0 Card
Card: 11 S u it: 1 C o lo r: 0 Card: 11 S u i t :3 Color
Card: 12 S u it: 1 C o lo r : 0 Card: 12 S u i t :3 Color
P ress Enter fo r co n tin u in g
P ress any key to con tin u e
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Биттік өрістің адресін аііуға болмайды, ал бұдан баскасында
олар құрылым өрістері сияқты пайдаланыла береді. Енді қарастырылған құрылымдардың бірсыпыра ерекшеліктерін атап
өтейік.
■ Құрылым анықталғанда, компьютер жадында орын бөлінбейді.
■ Құрылымды жариялаудьі аяқтаған соң, нүктелі үтір қоюды
ұмытпау керек.
■ Біріктірмелерде биттік өрістер болмайды.
Құрылымдар тек айнымалылар емес функцияларды да қамти ала­
ды (тек C++ ортасында). Құрылым функциялары осы кұрылым
ішіндегі айнымалылармен ғана жұмыс істейді. Құрылым мүшет т А п іш и
ПЯ ЯП ТМ К б о Л Ы П СЗ.НШ ІЗ.ДЫ .
Бақъиау сұрақтары
1 . T y p e d e f түйінді сөзі не үгиін керек? Епит түйінді сөзі ше.
2. Тізбе түріндегі айнымалылар цапай сипатталып, олар цапай инициалданады ?
3. Жиымдар мен цұрылымдардың цандай айырмаіиылыгы бар?
253
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
С тілінде құрьілымдар қандай тәсілдермен сипатталады? Олардың бір-бірінен айырмашылықтарын түсіндіріңдер.
Құрылым элементтерін қалай инициалдауга болады?
"Құрылымга нұсқауыш " термині нені білдіреді?
Құрылымның элементін пайдалану кезінде нүкте (.) немесе ->
таңбалары не үшін қолданылады?
Құрылымдардың өрістерінің өздері құрылым бола ала ма?
Нұсқауыштарды кұрылымдарға қатысты қолдану ерекшеліктері
қандай?
. і
Құрылымдарды функция аргументі ретінде пайдалануға бола ма?
Құрылымдармен жұмыс істеуде қандай амалдар қолданылады?
Құрылымдар жиымдарын қалай құруға болады?
Құрылым элементтерін экранға шығару мүмкіндіктерін көрсетіңдер.
Біріктірмелердегеніміз не? Олар қалай сипатталады?
Биттік өрістер не үшін қажет?Олар компьютер жадынан қанша
орын алады?
Биттік өрістерді сипаттау қалай атқарылады?
Тапсырмалар
Келесі мәліметтерден құралған торт студент туралы ақпаратты енгізіңіз:
- тегі жэне инициалы;
- туған жылы;
- оқуға түскен жылы;
- бірінші семестрдің бағасы:
- физика;
- жоғарғы математика;
- информатика;
1. Әліпби бойынша реттелген студенттердің тізімін шығару керек.
2. Туған жылы бойынша реттелген студенттердің тізімін көрсету ка­
жет.
‘
'
• ' ч' • \
і
3. Окуға түскен жьшы бойынша реттелген озат студенттердің тізімін
шығару керек.
4. Сессияны 4 және 5-ке тапсырған студенттердің анкеталық мәліметтері шығарылуға тиіс.
5. Тегі (фамилиясы) Б әрпінен басталатын студенттердің тізімін жэне
олардың барлық пәндер бойынша бағаларын көрсету керек.
6. Оқу озаттарының анкеталық мәліметтерін шығару қажет.
7. Тегі А әріпінен басталатын студенттердің тізімін жэне олардың
туған жылдары көрсетілуі тиіс.
8. Сессияда "3” деген бағалары бар студенттердің анкеталық мэліметтерін шығару керек.
254
9.
Тегі В жэне Г әрпінен басталатын студенттердщ тізшін жэне
ьлардың бағаларын шыгаратын программа құру керек.
10. Сессияны "үштік" бага алмай, емтихан тапсырған студенттердің
тізімін жэне олардың туган жылдарын шыгару керек.
11. Барлык студенттердің жалпы орта балын жэне осы орта балдан
жогары балл жинаган студентгердің тізімі көрсетілуі тиіс.
12. Барлық студештердің жалпы орта балын жэне осы орта балга тең
балл жинаган студенттердің тізімін шыгару керек.
13. Сессияда "екілік" алган студентгердің анкеталық мэліметгерін шы­
гару керек.
14. Информатика пәнін 5-ке тапсырган студенттердің анкеталык мэліметтерін экранга шыгару кажет.
15. Физиканы 4-ке жэне жогаргы математиканы 5-ке тапсырган студенттердің анкеталык мэліметтері шыгарылуы тиіс.
1В
Төмендегідей іс-эрекетгерді лабораториялык жұмыстар кезінде
орындау керек.
1 нүсқа
Flat (бөлмелер саны, көлемі, қабаты, мекен жайы, багасы) кұрылымын
сипатгаңыз. Пернетақтадан жиымга бес элементтен тұратын Flat
типіндегі мэндер енгізіңіз. Экранга багалары (пернетақтадан)
енгізілген саннан аспайтын пәтерлер жайлы ақпаратгы шыгару
керек. Егер, ондай пәтер болмаса, программа экранга сәйкесінше
хабарламаны шыгаруы тиіс.
2 нұсқа
с. .
PEREVOZKI (үтняк типі, рейстер саны, осы кезге деиінгі сагатпен
берілген ұшқан мерзімі, мың километрмен берілген ұшқан қашыкгыгы) кұрылымын сипаттаңыз. Пернетактадан жиымга алты
элементтен тұратын PEREVOZKI типіндегі мэндер енгізіңіз.
Экранга ұшкан мерзімі (пернетактадан) енгізілген саннан артық
ұшақгар жайлы акпаратгы шыгару керек. Егер, ондай ұшақ болма­
са, программа экранга сәйкесінше хабарлама шыгарылуы тиіс.
3 нұсқа
AVTO (машина маркасы, түсі, багасы, максималды (максимум)
жылдамдыгы) кұрылымын сипатгаңыз. Пернетактадан жиымга
алты элементтен тдеатын AVTO типіндегі мэндер енгізщіз. Экранга
жылдамдыгы (пернетактадан) енгізілген саннан (аспайтын) кем
болатын машиналар жайлы акпаратты шыгару керек. Егер, ондай
машина болмаса, программа экранга сәйкесінше хабарламаны
шығаруы тиіс.
255
4 нұсқа
*
TELEFON (абоненттің ЖАТ, телефон нөмірі, телефонға төлеген төлемі,
орнатқан жылы) құрылымын сипаттаңыз. Пернетактадан жнымга
бес элементтен тұратын TELEFON типіндегі мэндер енгізіңіз.
Экранға орнатылған жылы (пернетактадан) енгізілген саннан
(аспайтын) артық болатын телефондар жайлы ақпаратты шығару
керек. Егер, ондай телефон болмаса, программа экранга сэйкесінше
хабарламаны шығаруы тиіс.
5 нұсқа
D E T SA D (бала бақша нөмірі, бүлдіршіндер саны, қала ауданы, бір
айлық төлемі) құрылымын сипаттаңыз. Пернетақтадан жиымға
алты элементтен тұратын DET SAD типіндегі мэндер енгізіңіз.
Экранға көрсетілген аудандағы (ауданның аты пернетактадан
енгізіледі) бала бақшалар жайлы ақпаратты шығару керек. Егер, бұл
ауданда балабақшалар элі болмаса, программа экранға сәйкесінше
хабарлама шыгарылуы тиіс.
6 нұсқа
MUSEUM (мұражай аты, жұмыс жасау уақыты, билеттің құны, мекен
жайы) кұрылымын сипаттаңыз. Пернетактадан жиымға алты элементген тұратын MUSEUM тнпіндегі мэндер енгізіңіз. Экранға
билетінің қріы (пернетактадан) енгізілген саннан (аспайтын)
аспайтын мұражайлар жайлы ақпаратты шығару керек. Егер, он­
дай мұражай болмаса, программа экранға сәйкесінше хабарламаны
шығаруы тиіс.
7 нұсқа
TOUR (елі, турдың ұзақтығы, транспорт түрі, бағасы) кұрылымын
сипаттаңыз. Пернетактадан жиымга жеті элементтен тұратын TOUR
типіндегі мәндер енгізіңіз. Экранға билет кұны (пернетактадан)
енгізілген саннан (аспайтын) аспайтын елдер жайлы ақпаратты
шығару керек. Егер, ондай ел болмаса, программа экранға сәйкесінше хабарламаны шығаруы тиіс.
8 нұсқа
PRICE (тауардың аты, құны, дүкеннің аты) кұрылымын сипаттаңыз.
Пернетактадан жиымга жеті элементтен тұратын PRICE типіндегі
мэндер енгізіңіз. Экранга пернетактадан енгізілген дүкендегі тауарлар жайлы барлық ақпаратты шығару керек. Егер, ондай дүкен
болмаса, программа экранга сәйкесінше хабарламаны шығаруы
тиіс.
9 пуска
FRIDGE (тауардың аты, дайындаған фирмасы, қоймадагы саны,
бағасы) кұрылымын сипаттаңыз. Пернетактадан жиымга бес эле­
менттен тұратын FRIDGE типіндегі мэндер енгізіңіз. Экранға
256
бағасы (пернетақтадан) енгізілген саннан (аспайтын) аспайтын
гоңазытқыштар жайлы акпаратты шығару керек. Егер, ондай
тоңазытқыш болмаса, программа экранға сәйкесінше хабарламаны
шығаруы тиіс.
10 нұсқа
ZODIAK (жұлдыз бойынша зодиак белгісі, аты жэне жөні, туылған
күні) құрылымын сипаттаңыз. Пернетақтадан жиымға жеті элементтен тұратын ZODIAK типіндегі мэндер енгізіңіз. Экранға
жұлдызы "мерген" болатын адамдардың жөнін, атын жэне туылған
күнін шығару керек. Егер, ондайлар жоқ болса, программа экранға
сәйкесінше хабарламаны шығаруы тиіс.
11 нусқа
STUDENT (оку орнының аты, студенттің тегі жэне инициалдары,
топ нөмірі, бес бағадан тұратын жиым-үлгерімі) құрылымын
сипаттаңыз. Пернетақтадан жиымға алты элементтен түратын
STUDENT типіндегі мэндер енгізіңіз. Экранға орта балы
(пернетақгадан) енгізілген саннан артык болатын студенттер жай­
лы ақпаратгы шығару керек. Егер, ондай студент болмаса, програм­
ма экранға сәйкесінше хабарламаны шығаруы тиіс.
12 нұсқа
WORKER (жұмысшының тегі жэне инициалдары, қызметі, жұмысқа
орналасқан жылы, үш бағадан тұратын жиым-аттестатция нэтижесі) кұрылымын сипаттаңыз. Пернетактадан жиымға бес элементген түратын WORKER типіндегі мәндер енгізіңіз. Экранға
аттестациясының орта балы (пернетактадан) енгізілген саннан
(аспайтын) төмен болмайтын жұмысшылар жайлы ақпаратты
шығару керек. Егер, ондай жүмысшы болмасы, программа экранга
сэйкесінше хабарламаны шығаруы тиіс.
17-1660
257
15 ФАЙЛДАРДЫ ПАЙДАЛАНУ
Файл - сыртқы есте сақтау кұрылғыларында (магниттік дискілерде) орналастырылған жэне мэлімет өндеу, тасымалдау кездерінде біртұтас күйде қарастырылатын мэліметтер жиыны.
Файлдармен жұмыс істеу үшін оларды, алдымен, ашу керек,
яғни файл туралы мәліметті - атын, адресін программаға белгілі
етуқажет.
”
Я
С тілінде файл ашу fopenQ функциясы арқылы орында­
лады. Ол сыртқы қүрылғыдағы физикалық файлды, мысалы,
A:\NUR.DAT, программадағы оның логикалық атымен байла­
ныстырады. Логикалық ат дегеніміз —файлға нұсқауыш, яғни
файл туралы мәлімет сақталатын жады аймағына сілтеме жасау.
Файлға нүсқауыш сипатталуы тиіс.
;
Сонымен, файлдармен жүмыс істегенде нүсқауыштар қолданылады. Файлға нүсқауыш мынадай түрде сипатталады:
FILE * f p ;
мүндағы FILE типі - <stdio.h> тақырыптық файлында анықталған
қүрылым. Бұл нүсқауышты көрсетілген файлмен сол файл ашылғаннан бастап, байланыстырып қоюға болады. Ол үшін келесі
функция пайдаланылады:
£ореп("файл а д р е с і/а т ы " , "қатынасу т и п і " ) ;
ол файлға нүсқауыш мэнін қайтарады немесе қате болса,
NULL мэнін береді.
с
Мысалы, мынадай оператор орындалуы нәтижесінде
f p = f o p e n ( " e x l . t x t " , "w ");
жұмыс бумасындағы exl.txt файлы оған мэлімет жазу (write)
үшін ашылады, ал программада бұл файлды fp нүсқауышы
арқылы пайдаланамыз (яғни fopen() функциясы файлдың сыртқы
атын оның программада қолданылатын ішкі логикалық атымен
байланыстырады).
-щ
Сонымен, файлды ашатын fopenO функциясының жалпы
жазылуы:
1|
f p = fo p e n (n a m e , mode)
мүнда f p - файлға сілтейтін нүсқауыш; name - файлдың адресін
де көрсетуге болатын аты, көбінесе символдық тіркес арқылы жа258
зылады; mode —файл қандай режимде қолданылатынын көрсететін параметр, бұл да символдар тіркесімен төмендегідей түрде
жазылады:
"г" - файлды оқу үшін ашу (файл бұрын ашылған болуы тиіс);
"w" - бос файлды информация жазу үшін ашу;
"а" - файл соңына мәлімет қосып жазу үшін оны ашу;
"г+"—файлдан информация оқу жэне оған информация жазу
үшін ашу);
"w+"_ бос файлдан информация оку жэне оған мэлімет жазу
үшін файл ашу (бұрын файл болса, ол өшіріледі);
"а+"- файлдан информация оқу жэне оның соңына информа­
ция қосып жазу үшін ашу).
"t" - файл мәтіндік (текстік) режимде ашьшады, ол rt, wt, at,
т.с.с. болып көрсетіле береді.
"b" - файл екілік режимде ашылады, rb, wb, ab, т.с.с. болып
көрсетіле береді.
Келісім бойынша файл көбінесе мэтіндік режимде ашылады.
Файлмен жұмыс істеп болған соң, оны жабу үшін келесі функ­
ция колданылады:
f c l o s e (файл_нүсқауышы).
Файлға мэлімет жазу/оқу үшін жалпы енгізу/шығару функция­
лары тәріздес бірсыпыра функциялар пайдаланылады:
f p r in t f о ,fs c a n f( ) ,fp u ts (),fg e ts (),g e tc () ,
p u t с ( ) , f g e t c ( ) , f p u t c ()
Бұлардыц ішіндегі g e t c () / f g e t c () , p u t c () / f p u t c ()
функциялары әрекеттері ұқсас, айырмашылықтары тек g e t c ()
пен p u t c () макроанықтаулар да, ал f g e t c () жэне f p u t c () —
нағыз функциялар болып табылады.
Барлық файлдык функциялар прототиптері <stdio.h> файлында орналасқан.
Файлдардан мэлімет жазу/оқу эрекеттерін үш топка белуге
болады:
- символдарды енгізу/шығару операциялары;
- сөз тіркестері жолдарын енгізу/шығару операциялары,
- блок бойынша енгізу/шығару операциялары.
Символдарды енгізу/шығару операцияларында файлдан
бір гана символ оқылады немесе оған бір символ жазылады. Мы­
салы:
259
f g e t c (FILE * fp ) ;
ашылған файлдан символ оқиды.
f p u t c ( i n t с һ , FILE * f p ) ;
ch символы кодын
файлға жазады.
Сөз тіркестері жолдарын енгізу/шығару операцияларында бір мәлімет алмасуы кезінде файлдан сөз тіркесі жолдары
оқылады немесе оған сөз тіркесі жазылады. Мысалы:
gets(char *S); файлдан мэлімет байттарын '\п' символы кездескенше біртіндеп оқиды да, оларды S тіркесіне орналастырып, '\п'
символьш '\0' (нол-терминатор) белгісіне айналдырады.
fgets(char *S,int га,FILE *fp); fp түрінде сипатталған файл­
дан байттарды оқып, оларды '\п' символы кездескенше немесе т
байт оқылып біткенше S тіркесі мэні ретінде жазып шығады.
Блок бойынша енгізу/шығару операцияларында мәліметтер алмасу олардың бір блогын толык қамтиды. Мысалы:
f r e a d ( v o id * p t v , i n t s i z e , i n t n , FILE * fp ) ;
мүндя fp файлынан эрқайсысы size байттан тұратын мэліметгің
п блогы ptv нұсқауышы көрсетіп тұрған жады аймагына оқылады
(оқылатын блок үшін алдын ала орын дайындап қою қажет).
f w r i t e ( v o i d * p t v , i n t s i z e , i n t n,FIL E * f p ) ;
мұнда ptv нұсқауышы корсетіп тұрған жады аймағында
орналасқан әрқайсысы size байттан тұратын мәліметтің п блогы
ашық тұрған f р файлына жазылады.
15.1 fprintf және fscanf функцияларын пайдалану
f p r i n t f файлга информация жазу үшін, ал f s c a n f файл­
дан информация оқу үшін қолданылады. Олардың жалпы жазылу
түрі:
‘■ «л
f p r i n t f ( f p , "спецификация шаблоны", р ) ;
мұндағы р - орнек;
f s c a n f ( f p , "спецификация шаблоны", а д р е с ) ;
Мысал: Бүтін сандар тізбегін (п=5) пернелерден енгізіп, олар­
ды файлга жазу керек болсын.
ЩрявщЯ
/ / файл ашып, оған 5 сан ж азу
# in c lu d e < s td io .h >
# i n c l u d e < c o n i o .h >
m ain ()
{ i n t k ,i,n = 5 ;
c h a r f n a m e [ ] = " a : \ \ n u m .t x t \ 0 " ;
260
c lrs c r();
FILE * fp ;
fp = fo p e n (fn a m e , "w") ;
p r i n t f (" Е н г із іл г е н сандар %s файлына жазылады
\ n " , fn a m e );
p u t s ("Эр сан е н г і з і л г е н со ң , E n te r басьщыэ\п") ;
f o r ( i = 0 ; i< n ;i+ + )
{ s c a n f(" % i" ,& k );
f p r in tf ( f p ," % d " ,k ) ;
>
fc lo s e (fp );
p r i n t f ("Енгізілген сандар %s файлына жазыпды\п",
fname) ;
g e tc h ();
}
Нәтижесі:
Енгізілген сандар a:\num.txt файлына жазылады
Эр сан енгізілген сон, Enter басыңыз
1
2
3
4
5
Енгізілген сандар atVnum.txt файлына жазылды
Файлдағы мзлімет: 12 3 4 5
Бес бүтін санды п=5 бұрыннан бар f i l e l . t x t файлына жазу
керек, сол файлды мәлімет косу үшін ашып, оған 5 сан жазып, сонан соң ондағы мәліметті оқып тексеру керек.
/ * файлга м әл ім еттер қ осу * /
#in c lu d e < m ath . h>
#in c lu d e < s t d i o .h >
#in c lu d e < c o n io .h >
m ain О
{ i n t i , k= 0 , s= 0 , n = 5 , y , x ;
c h a r fn am e[ ] = " f i l e l . t x t " ;
c lr s c r ();
FILE * f p ;
fp = fo p e n ( " f i l e l . t x t " , " a t " ) ;
261
i f ( ( f p = f o p e n ( f n a m e ," a t" ) ) ~ NULL)
{ p r i n t f ( " ХпФайлды ашуда қ а т е б о л д ы ");
g e tc h ( ) ;
г і
r e t u r n (0 ) ;
1
)
■'
-'
р / ...* / Щ
p u t s ( " E n t e r арқылы б ө л іп , 5 сан е н г і з і ң і з : " ) ;
f o r ( i = l ; і< = п ;і+ + )
|
{ s c a n f ("% і", &х) ;
^
f
Щ
f p r i n t f ( f p , " % d " , x ) ;}
f c l o s e (fp ) ;
щ
g e t c h () ;
^ 7 t.7 Г 1
}
"
‘ч 4
Нэтижесі:
j
E n te r арқылы б е л і п , 5 сан е н г і з і ң і з :
11
j
I
22
i
=
,
шШ
33
;
, ;7:'
44
55
•
5
I I
Файлдағы мәлімет: 1 2 3 4 5 11 22 33 44 55
Дискідегі filel.txt файлын мэліметтер оқу үшін ашып, ондағы
мәліметті оқып, файлдағы тақ сандардың қанша екенін жэне
қосындысын табу керек.
}
/* файлдан м әл ім еттер оқу * /
# in c lu d e < m ath .h >
# in c lu d e < s t d i o .h >
# in c lu d e < c o n io .h >
m ain ()
\
{ i n t i , k = 0 ,s = 0 ,n = 5 ,y ,x ;
*
c h a r f n a m e [ ] = " f ile l. t x t " ;
§
c lrs c r ();
no:
nX; A
FILE * f p ;
и izam
fp = fo p e n (fn a m e , " r " ) ;
/* Оқу үшін файл ашу * /
fp = fo p e n ("f p " , " r t " ) ;
262
.I
i f ( ( f p = f o p e n ( f n a m e ," r t" ) ) — NULL)
{ p r i n t f ( " \ n Файл ашуда қ а т е болды ");
g e tc h ();
r e t u r n (0 ) ;
}
p u t s ("Файлдан оқылған с а н д а р :" ) ;
w h ile ( ! f e o f ( f p ) )
{f s c a n f ( f p , " % i", & y);
p r i n t f (" %i " /У ) ;
i f (y%2 = 0 ) { s + = y ;k = k + l;}
}
fc lo s e (fp );
p r i n t f ("\п Т а қ сандар қосындысы s = % i ,
олардың саны k=% i", s , k) ;
g e tc h ();
}
15.2 fgets жэне fputs функцияларын пайдалану
Сөз тіркестерімен жұмыс істегенде fgets жэне fputs функциялары қолданылады:
f g e t s функциясының жалпы жазылу түрі:
fgets(Hycxaybm,MAXLEN,fp);
нұсқауыш - компьютер жадындағы орынға сілтейтін нұсқауыш;
MAXLEN - оқылатын тіркестің максимальды ұзындығы; fp файл нұсқауышы.
Мысалы:
#define L 20
m ain ()
{
FILE * fp ;
char ^ s t[ n ] ;
fp = fo p e n (" s tro k a " , " r " ) ;
w h i l e ( f g e t s ( s t , L, fp ) != NULL)
p u ts ( s t ) ;
Файлдарға сөз тіркестерін жазу үшін fputs функциясы келесі
түрде қолданылады:
263
status=fputs(KaTap нусқауышы, fp);
status - бүтін сан, оның мэні eof функциясында
р ҒриІвОфункциясы файлдың соңі
функциясы
волын жазбайды.
Төменде осы функцияларды пайдалану мысалы келтірілген.
# in c lu d e < s td io .h >
v o i d m a in ()
{
.
_.
I
i n t n;
1
c h a r s t r [ 5 0 ] , s t r l [ 5 0 ] , ch ;
FILE * fp ;
11 Файлға м әл ім ет ж азу
f p = f o p e n ( " e x . t x t " , "w ");
puts("BY TiH сан е н г і з і ң і з : " ) ; sca n f(" % d " , &n);
fp r in tf(fp ," % d \n " ,n );
®
p u t s ("Символ е н г і з і ң і з : " ) ; c h = g e t c h a r ( ) ;
p u t c (c h , f p ) ;
Ц
p u t s ("Сөз т і р к е с і н е н г і з і ң і з : " ); g e t s ( s t r ) ;
fp u ts (s tr,fp );
’■
‘
fc lo s e (fp );
1 !
Я
/ / Файлдан м әл ім ет оқу
i f ( ( f p = f o p e n ( " e x . t x t " , " г " ) ) != NULL)
J
f s c a n f ( f p , "%d", &n); p r i n t f ("n=%d\n", n) ;
ch = g e t c ( f p ) ; p u tc h a r ( c h ) ;
f g e t s ( s t r l , 50, f p ) ; p u ts ( s t r l ) ;
f c l o s e (fp ) ;
*
} e l s e p r i n t f ("\пФайлдан м әл ім ет оқылмайды! ") ;
}
Мұндағы f g e t s () функциясының екінші параметрі N
де қосылады. Бұл
функция өз жұмысын N-1 символын оқығаннан кейін немесе
'\0' белгісі кездескенде аяқтайды. Екеуінде де сөз тіркесі соңына
'\0' белгісі қосылады. f g e t s () функциясы
файл
NULL белгісін береді.
264
f p u t s () функциясы эрекет дұрыс орындалса, соңғы оқылған
символ кодын қайтарады, ал кате болса, EOF (файл соңы) белгісін
береді. Бұл функция курсорды автоматты түрде келесі жолға
көшірмейді.
Жогарыдагы функциялар файл мәліметтерін біртіндеп, символдан соц келесі символды қарастыра отырып өңдейді. С тілі
файлдармен жиым сияқты жұмыс істеуге де мүмкіндік береді,
яғни кез келген байтты жеке өңдеуге де болады. Файл ішіндегі
белгілі бір орынды айқындау үшін мына функция қолданылады:
fseek^aiLira нұсқауыш, бастапқы нүктедеи ығысу,
бастапқы нүкте);
Екінші аргумент типі long, оныц мэні он да, теріс те болуы
мүмкін. Ол бастапқы нүкгеден қанша орынға (байтпен) ығысу
керек екендігін көрсетеді. Үшінші аргумент файлдагы бастапқы
нүкте орнын анықгайтын код болып табылады. Осы код үшін мы­
надай мэндер тагайындалган:
0
- файл басы;
1
- агымдагы позиция;
2
- файл соңы.
Дұрыс орындалганда, fseek() функциясы 0 мэнін береді, ал
егер кате (мысалы, файлдын сол жак шекарасынан ары аспақшы
болганда) болса, онда 1 береді.
15.3
fwrite жэне fread функцияларын пайдалану
Құрылымдарды пайдаланатын файлдармен жұмыс істеу кезінде f r e a d ( ) / f w r i t e () функцияларын пайдаланган ьщғайлы. Олардьщ жазылуы:
fre a d (p tr, s iz e , n, f p ) ;
мүнда f p файлынан әрқайсысы s i z e байттан тұратын мэліметтщ
п блогы p t v нұскауышы көрсетіп түрган жады аймагына оқылады
(оқылатын блок үшін алдын ала орын дайындап қою қажет).
fw rite (p tr,s iz e ,n , fp );
мұнда ptr нұсқауышы көрсетіп тұрган жады аймагында орналасқан эркайсысы size байттан тұратын мэліметтің п блогы ашық
тұрған f р фаилына жазылады.
Осы функцияларды қолданудың бір мысалын келтірейік:
265
typedef struct
c h a r a u th o r [30] ;
,,
char t i t l e [5 0 ];
• r^
i n t p ages;
} BOOK;
BOOK b l= { " K ern igh an " , "C L an gu age" , 256 } , b2;
FILE * fp ;
v o i d m a in ()
f p = f o p e n ( " s t r u c t . t x t " , "w+") ;
/ / файл ә р і о қ у , ә р і ж азу үшін ашылды
f w r i t e ( & b l , s iz e o f(B O O K ), 1 , f p ) ;
f s e e k ( f p , 0 , 0 ) ; / / маркер файл басына
fr e a d (& b 2 , s iz e o f(B O O K ), 1 , f p ) ;
p r i n t f ( "Авторы - %s,aTbi - % в,6еттер
%d\n",Ь 2 . a u t h o r , b 2 . t i t l e , b 2 . p a g e s ) ;
саны -
Бақылау сурақтары
1. Файл дегеніміз не? Ол не үшін пайдаланылады?
2. Файл ңайда орналасады жэне қалай белгіленеді?
3. Файл аіиу функциясы қалай жазылады ?
4. Файл атын программада цалай анъщтаймыз?
5. Файлдың қолданылу режимдері қалай көрсетіледі?
6. Файлга мэлімет жазу/оңу функциялары.
7. Файлга жаңа элемент қалай ңосылады ?
8. Мэлімет оқылган файлга мәлімет жазуга бола ма?
9. Файлдан аппарат оку үшін не істеу керек?
10. Файлга ақпарат жазу үшін не істеу керек?
11. Символдар мен сөз тіркестерін файлга жазу үшін не істеу керек?
12. Құрылымдарды пайдаланатын файлдар қандай функцияларды
пайдаланады?
Тапсырмалар
1. Файлдан сандар оқып, солардың ішіндегі теріс сандар қанша екенін
анықтайтын программа құру керек.
2. Файлдан сөз тіркесін оқып, солардың ішіндегі 6 символдан артық
сөздерді экранға шыгарып, басқа файлга жазып шығыңдар.
266
3.
Файлдан сандар оқып, солардың арифметикалық ортасын файл
\ соңына қосып жазу керек.
4. Файлдан сөз тіркесін окып, солардың керісінше жазьшған нұсқасын
баска бір файлға жазып шығыңдар.
5. Файлдан сандар оқып, солардың максимумын анықтайтын прог­
рамма кұру керек.
6. Файлдан сөз тіркесін оқып, солардың ішіндегі бос орын орнына
сызықша жазып оны басқа бір файлға жазып шығу керек.
7. Файлдан сандар оқып, солардың минимумын анықтайтын програм­
ма құру керек.
8. Бір файлда екі сөйлем жазылган, соның екінші сөйлемін басқа
файлға жазып шығу керек.
9. Файлдан сандар окып, солардың көбейтіндісін анықтайтын про­
грамма құру керек.
10. Сөз тіркесінен тұратын файлдағы бас эріптерді кіші эріптерге айналдырып, баска файлға жазып шыгу керек.
11. Файлдан сандар оқып, солардың нешеуі 5-тен аргық екенін анықтау
керек
12. Сөз тіркесінен тұратын екі файл берілген. Осы екі файлдағы сөз
тіркестерін біріктіріп, үшінші файлға жазып шығыңдар.
13. Файлдан сандар оқып, солардың қосындысын анықтау керек
14. Сөз тіркесінен тұратын екі файл берілген. Осы екі файлдағы сөз
тіркестерінің орнын ауыстырып жазып шығу керек.
15. Файлдан сөз тіркесін оқып, солардьщ ішіндегі ең ендісін анықгап,
соның неше символдан тұратынын анықтау қажет.
16. Файлдан сандар окып, солардың тақтарын бір файлға, жұптарын
екінші файлга жазып шығыңдар.
17. Файлдан бірнеше сөйлем окып, сол сөйлемдердін "м" әрпінен басталатын бір сөйлемін ғана экранга шығарып, соның ұзындығын
аныктайтын программа кұру керек.
18. Файлдан сандар окып, солардың барлығын да бірге арттырып, шыққан сандарды басқа бір файлга жазып шығыңдар.
19. Файлдан бірнеше сөйлем оқып, сол сөйлемдердің ең соңгы сөйлемін
ғана экранға шыгарып, соның ұзындығын аныктайтын программа
құру керек.
. . .
20. Файлдан сандар оқып, соларды керісінше тэртіппен екінші бір
файлға жазып ншғындар.
21. Файлдан сандар оқып, солардың цифрларын экранға ^сөзбен
шыгаратын программа кұру керек, мысалы, 0 орнына нөл , 1 ор­
нына "бір", т.с.с. 9 орнына "тоғыз" деп жазатын болуы тиіс.
22. Файлдан сөз тіркесін окып, солардын бірінші сөзі мен соңғы сөзін
алмастырып, екінші бір фаилға жазып шыгыңдар.
267
23. Файлдан сөз тіркесін оқып, соларды керісінше жазып шығатын
программа құру керек.
j
24. Файлдан сандар оқып, солардың алғашқы жартысы мен соңғы
жартысының орнын ауыстырып, нәтижесін жаңа файлга жазып
шығу керек.
25. 10 бүтін саннан тұратын файл жасайтын программа құру керек. Сол
файлдағы сандарды оқып, олардың қосындысын анықтаңдар.
26. While операторы арқылы Char типті элементтерден тұратын файл
жасау қажет. Циклден шығу шарты - z әрпін енгізу. Сол файлдың
көшірмесін екінші бір файлга жазып, жазылған мәліметтерді
экранға да шыгару керек.
27. Integer типті N саннан тұратын файл жасап, сол файлдагы жұп сан­
дарды экранга шыгару қажет.
28. Бүтін сандардан тұратын файл жасап, сол сандарды басқа бір файл­
га кері тәртіппен жазып шыгу керек.
•
«Е
29. Мынадай құрылымдағы бірнеше қатарлары бар файл жасау керек:
- реттік нөмірі;
- фамилиясы, аты-жөйі;
- жалақысы.
'һ
Осы файлга бес адам туралы мэліметтер енгізіп, басқа файлга
осылардың ішіндегі ең көп жалақы алатын адам туралы мэлімегп
көшіріп жазу керек.
30. Файлдағы мэтінді түгел оқып шыгып, ондагы ,fo,f әрпін "а" әрпімен
алмастыратын программа құрыңдар.
31. Файлдагы мэтіндік ақпаратты экранга жэне қагазга шыгаратын
программа жасау керек.
32. Файлда N бүтін сан жазылган. Соларды өсуі бойынша реттеп, екінші файлга жазып шыгару қажет.
33. Нақты сандардан тұратын бір өлшемді жиым элементтерін пернелерден енгізе отырып, бір файлга жазып шыгып, сол жиымның жұп
индексті элементтерін екінші файлга жазатын программа құрыңыздар.
34. Топтагы студенттердің үлгерімін бір файлга мынадай түрде жазу
керек: рет нөмірі, аты-жөні, 5 сабақтың аты, әр сабақтан алган 3
багасы. Программаға енгізілетін мәліметтер пернелерде теріліп,
файлга жазылуы қажет. Жақсы оқитын студенттер тізімін екінші
бір файлға бөлек жазып шығу керек.
268
f
16. ГРАФИКАЛЫҚ РЕЖИМДЕ ЖҮМЫС ІСТЕУ
С тілінде растрлық графика жүмыс істейді, оның тақырыптык
файлы g r a p h i c s . һ. График нүктелерден - пиксельдерден
тұрады. Пиксель —экранның адрестелетін ең кіші элементі. Ал­
дымен, графика шығара алатын бейнережимді іске қосу керек.
Мұнда экранный пиксельмен берілген мөлшері жэне түстер саны
беріледі.
Графикада үш координаталық жүйе: абсолюттік, салыскөлденең өстер бойынша пиксельдер саны экран типіне байла­
нысты болады.
Абсолюттік координатада координаталар басы —(0;0) нүктесі
сол жак жоғарғы бүрышта болып саналады, х координатасы солдан оңға қарай, у координатасы жоғарыдан томен қарай өседі.
Салыстырмалы режимде координаталар басы экранный кез
келген нүктесіне ауыстырыла алады.
16.1-сурет. Экрандағы нүктелердщ координаталары
экран бетінде масштабталган
координаталар беруге болады, онда х пен у өстері бойынша мини­
мум жэне максимум мэндер енгізіп, жұмыс істеуге мүмкіндік бар.
Жалпы абсолютгік графикалык режимде (16.1 сурет)
М асш табталатын режимде
269
- эрбір пиксель берілген 16 түстщ біріне боялады;
- (0,0) - экранный сол жақ жоғарғы бұрышы координатасы;
і
(639,479) - оң жақ төменгі бұрышының координатасы бо­
лады;' *
*1
Ji.J*.. .♦
- эртүрлі фигураларды экранға шығару үшін алдьш ала графикалық режимді іске қосып алу керек.
Жалпы, дисплей адаптерлері графикалық режимде 200, 350,
600 нүктелерден тұратын экран жолдарының әрқайсысында
640, 720, 800 нүктелер тізбегін бейнелей алады. Мұндагы нүкте
деп отырғанымыз - көлемі 0 ,8x 1 мм2 шамасында болып келген
(CGA) кішкентай тіктөртбұрыш, ягни пиксель. Әрбір нүктенің
координаталары екі бүтін санмен (х, у) аныкталады. Дисплей
экранына график салу үшін оның нүктелерінің координаталарын
корсету қажет. Координаталар басы (0,0) болып экранның сол жак
жоғарғы бұрышы есептеледі. X координаталары (бағаналар неме­
се позициялар нөмірлері) солдан оңға қарай, ал у мәндері (жолдар немесе қатарлар) жоғарыдан томен қарай өсіп отырады. Мы­
салы, VGA адаптерінің экран бұрыштарының координаталарын
;t=0..799, y= 0..599 аралыгында корсету қажет. Экранда х өсі сол­
дан оңға қарай, Ү өсі жоғарыдан томен қарай бағытталған, ал
оның шеткі нүктелерінің координаталары суретте көрсетілген.
Олардың ең жоғарғы мәндері пайдаланылған экран адаптеріне
тәуелді болады, яғни (0,0)..(320x200), (0,0)..(640x480), (0,0)..
(800x600) аралықтарында жэне т.б. болуы мүмкін. Сонымен,
графикалық режимде экрандагы кез келген объект көрініп тұрган
нүктелер тобынан тұрады. Мэтіндік режимнен графикалық режимге кошкенде экран тазартылады. Графикалық режимде экран­
ная курсор көрінбейді. Дисплей экранының бетіне (кейін қагазга)
нүкте, түзу немесе қисық сызық, шеңбер, эллипс жэне кез кел­
ген тұйық сызық сызып шыгаруга болады. Сонымен қатар тұйық
сызықтардың ішін эртүрлі түске бояп қою мүмкіндіктері де бар.
Сызықтарды жылжыту, айналдыру жэне басқа орынга көшіру
арқылы көрнекі бейнелер мен мультфильмдер жасауга болады.
График тұргызу үшін оны шыгару немесе бастау нүктесін
корсету қажет. Мэтіндік режимде ол курсор позициясы болып
саналады, ал графикалық режимде көрініп тұратын курсор жоқ,
бірақ экранда көрінбейтін курсор тэрізді сілтеме белгі CP (current
270
pointer) бар. Негізінде оны да курсор деп қабылдауға болады.
Графикалық режимдегі жұмыстарды атқаратын Турбо С
нұсқасында бірсыпыра графикалық функциялар бар, енді біз
солардың негізгілеріне тоқталып өтеміз.
Графикалық режимде жұмыс істеу былай басталады:
#±nclude <stdio.h>
#include <conio.h>
#include <graphics.h>
void main()
{int gdriver = DETECT;
//драйвер
int gmode;
//режим аты
int errorcode;
I I қате коды
initgraph (figdriver,&mode,"C:\\TCbgi\\");
errorcode = graphresult();
if errorcode != grOk)
//іске қосу қатесі
{printf("Қате: %d\n", errorcode);
puts("Аяқтау үшін ENTER басыңыз");
getch();
return;}
Ары қарай программа мәтіні...
getch();
closegraph ();
}
16.1. Графикалық режим орнату, одан шығу, мәтін жазу,
сызық салу функциялары
Графикалык режим драйверін іске қосу
функциясы initgraph(SDriver, &Mode, Path),
Driver параметрі бейнелік жүие драйверін анықтайды, Mode
параметрі бейнелік жүйе жұмыс режимін береді, ал Path параметрі
драйвер файлының орньш көрсетеді. Көбінесе Driver параметрі
мэні ретінде detect болатын бүтін константа қолданылады.
Мұндайда initgraph функциясьшың озі графикалык драйвер типін
аныктап, ен дұрыс режимді тандап алады. Тақырыптык файлы.
<graphics.һ>
Драйвер дұрыс оқылған соң, initgraph() функциясы 4К көлемінде (келісім бойынша) ішкі графикалык буфер ұйымдастырады
271
да, экран түсі, сызықтар түсі анықталып, дисплей адаптері гра­
фикалык режимге кіреді. Экран тазаланып, курсор сол жак жоғарғы бұрышка орнатылады.
Егер BGI-файлдар ағымдағы бумада болса, initgraphO функциясының үшінші параметрі ретінде бос орын мэнін беруге болады
I
„I
initgraph(&Driver,&Mode," ");
*
Графикалық режимнен шызгу жэне оған бөлініп берілген
жады бөлігін босату үшін, яғни бейнеадаптер буферін тазартьш,
бұған дейінгі мэтіндік режимді қалпына келтіру мақсатында
мына функция қолданылады
closegraph () ;
Графикалык режимде сызық түстерін, тұйық сызықтар ішін
түрлі түске бояуға болады. Ол үшін мэтіндік режимдегідей түстердің кодтары жэне олардың ағылшынша атаулары қолданылады.
Графикалык режимнен уақытша мәтіндік режимге ауысу
мақсатында мынадай функция қарастырылған
restorecrtmode();
Ол initgraph() функциясын пайдаланғанға дейін болған мәтіндік режимді қайта орнатады, буферде (экран көрінісі де)
сақталған мәтін қалпына келмейді, өйткені ол i n i t g r a p h O
функциясы арқылы өшірілген болатын.
Графикалық режимге қайтып оралу мына функция
арқылы атқарылады
setgraphmode(gm);
Функция аргументі ретінде колданылған драйверге қатысты
режимнің бүтін сан түріндегі нөмірі қарастырылады.
Курсор орнын анықтау функциялары - getx();
gety() ;
:
.
"
Функциялары курсор тұрған орын координаталарын х (у)
береді.
-. „ "1:' 'і
шахх(); getmaxy();
getmaxxO функциясы экранный оң жақтағы ец шеткі нүктесінің х
координатасын анықтайды, ал getmaxyO функциясы - экранный
ең төменгі у нүктесініц координатасын анықтайды.
Сызықтар тусін тагайындау функциясы
setcolor(col);
мұндағы col - түс атауы немесе түс коды. Сызық және мәтіндер
түсі осы функциямен беріледі. Ал сызықтипі setlinestyle ()
функциясы арқылы тағайындалады.
272
Түстер бүтін сан түріндегі кодпен немесе константа түрінде
бас әріппен жазылатын ағылшынша түс атауларымен беріледі.
Түстердің стандартты белгіленулері төмендегідей:
Кодтары
Ашық түстер
Кодтары
Көк (BLUE)
Жасыл (GREEN)
0
1
Қара қошқыл (DARKGRAY)
Көкшіл (LIGHTBLUE)
8
9
2
Ак жасыл (LIGHTGREEN )
10
Кегілдір (CYAN)
3
Ақшыл кек (LIGHTCYAN)
И
Қызыл (RED)
Күлгін (MAGENTA)
4
12
5
Қызғылт (LIGHTRED)
Қызғыш (LIGHTMAGENTA)
Қоңыр (BROWN)
6
Сары (YELLOW)
Көмескі түстер
Қара (BLACK)
13
14
Мысалы: s e t c o l o r (YELLOW) ; s e t c o l o r ( 3 ) ; s e t c o l o r ( 5 ) ;
Экранның фоны т ү с ін өзгерту функциясы
s e t b k c o lo r ( т ү с і ) ;
Мысалы: se tb k c o lo r (BLUE); se tb k c o lo r (14);
Мәтін шығару функциялары
Графикалық режимде экранға мэтін шығарарда символдар көлемін, бағытын (тік, көлденең), бекітілген бірнеше қаріп
түрінің бірін таңдау мүмкіндіктері бар. Осындай символдар
параметрлері мынадай функция арқылы беріледі:
settextstyle(Қ а р іп , Багыты, К ө л е м і);
outtextxy және outtext функциялары аркылы шығарылатын
мәтіндердің қаріп түрін, көлемін жэне бағытын тағайындайды.
Қаріп (шрифт) параметрі ретінде төмендегі константалардың
бірін пайдалануға болады.
ІКонстанта
DEFAULTF ONT
rRIPLEXFONT
SMALLJFONT
BAN SSERIF_FONT
O0THIC_F0NT
18-1660
Мәні
Қаріп типі
0
Стандартты. Әрбір символ 8 x 8 пиксел
көлемдегі квадрат ішіне шығарылады.
1
2
3
4
Triplex шрифті (TRIP.CHR файлы)
Майда шрифт (LITT.CHR файлы)
SansSerif тік шрифті (SANS.CHR файлы)
Готикалық шрифт (GOTH.CHR файлы)
273
стандартты түр де
шығарылады. Бағыты параметрі берілген мэтінді тік немесе
көлденең беруді тагайындайды, оның мәндері:
HORIZ DIR 0 Символдар солдан оңға карай жазылады
VERT DIR
1 Символдар төменнен жоғары карай жазылады
Көлемі 1-ден 10-ға дейін өзгере алады. Бұл шама DEFAULT FONT стандартты қарпі (8x8 пиксел) үшін эр символды
неше есе үлкейту керек екендігін көрсетеді (стандартты матри­
ца 8*8 болғандықтан, егер көлемі 4 болса, онда символдар 32*32
пикселдік матрицаға дейін үлкейеді). Ал қалған қаріптер үшін
бұл параметр сызықгық емес, экспоненциалдық масштабтау шканұсқасы
саналады
егер 8 болса - 3 есе; ал 9 болса - онда 4 есе ұлғаяды. Символдар
әрқашанда үздіксіз жіңіппсе сызықтармен жазылады.
Э кранға м ә т ін шыгару функциясы o u t t e x t (" М ә т ін " );
қостырнақшага алынган мэтінді курсор тұрган орыннан бастап
экранга шыгарады. Мэтін ішінде басқару символдары болмауы
тиіс, мысалы, \п. Шыгарылатьш символдар түсі setcolor, шрифт
типі — settextstyle функцияларымен беріледі. Мысалы:
( 4 ) ; m o v e to ( 2 5 0 ,1 0 ) ; o u t t e x t (" Омаро
Марат
функциясы
o u t t e x t x y ( x , у , " м ә т ін ")
алдымен х, у нүктесіне орналастырып алып
курсор
қалады
Шыгарылатын символдар түсін — setcolor(), қаріп типін
) функциясымен беруге болады. Мысалы
( 4 ) ; o u t t e x t x y ( 2 5 0 ,2 ,"Омарова Айман
функциясы
p u t p i x e l (х , у , Т ү сі)
координатасы (х, у) пиксел-нүктені Түсі санына байланысты бояп
Бұл
274
функцияны цикл ішіне орнатып, сызықтар сызуга болады. Мы­
А(20,100)
В(200,100)
салы:
s e tc o lo r(B L U E );
f o r (х= 2 0 ; х<= 2 0 0 ; х++)
p u t p i x e l ( х ,1 0 0 , BLUE);
f o r (у= 1 0 0 ; у<=28 0 ;у++)
С(200,280)
p u t p i x e l (2 0 0 ,у , BLUE);
l i n e ( 2 0 0 ,2 8 0 ,2 0 ,1 0 0 ) ;
16.2-су рет. Экранга үшбұрыш салу
салу үш функция арқылы орындалады
1) l i n e ( x l , y l , х 2 , у 2 ) ;
x l,y l нүктесінен х2,у2 нүктесіне дейін сызық сызады, біраь
мұнда курсор орны өзгермейді.
2) l i n e t o ( х , у ) ;
Курсор тұрған нүктеден х,у нүктесіне дейін сызық салады
мұнда курсор бұрынғы орнынан жаңа орынға ауысады.
3) l i n e r e l (d x , d y ) ;
Курсор тұрған х, у нүктесінен x+dx, y+dy нүктесіне дейіі
сызык салады, яғни сызық координаталары салыстырмалы түрді
Мұнда да курсор бұрынғы
ды.
Сызықтар осыған дейінгі setcolor() функциясы тагайындаган
түспен жэне setlinestyle() функциясы арқылы орнатылган стиль
мен сызылады. Мысалы, ромб сызудың екі тәсілін келтірейік.
1 тәсіл
(GREEN);
m o v e to ( 1 0 0 , 1 0 ) ; l i n e t o ( 5 0 , 9 0 ) ; l i n e t o ( 1 0 0 ,1 7 0 ) ;
(RED)
2 тәсіл
setb k co lo r(W H IT E ); setco lo r(G R E E N );
l i n e ( 1 0 0 ,1 0 ,5 0 ,9 0 ) ; l i n e (5 0 ,9 0 ,1 0 0 ,1 7 0 );
s e t b k c o l o r (RED);
l i n e ( 1 0 0 ,1 7 0 ,1 5 0 ,9 0 ) ;l i n e (1 5 0 ,9 0 ,1 0 0 ,1 0 ) ;
275
16.2. Сызық стильдерін беру
Геометриялық фигуралар сызықтарының қалыңдығы
мен түр сипатын беру функциясы
setlinestyle(tip,obr,tol);
' *|
сызықгар стилін береді, мұндагы tip —алдын ала анықталған
константа, ол сызық ти-пін береді. t o l —сызық қалыңдығьш
анықтайтын константа (NORM_WIDTH —қалыпты, ТНІСК_
WIDTH - қалыңырақ). Егер программалаушы анықтаған сызык
типі қолданылатын болса, онда o b r мэні төрт таңбалы оналтылык
константа жэне ұзындығы 16 пиксел сызық кесіндісін кодтау
үЛГІСІ болуЫ ТИІС.
£1
~
t i p константасының мүмкін мәндері
(сызықтық элементтер үшін)_____________ <
0 SOLID LINE
(жайсызық)
1 DOTTEDLINE (пунктир сызық - нүктелерден тұрады)
2 CENTER LINE (шігрих-пунктир сызық - нүкгелер мен
сызықшалардан тұрады)
3 DASHED LINE (DOTTED LINE сызығынан үзындау
келген пунктир сызық)
4 USERBIT LINE (программалаушы анықтаган сызық)
tol - қалыңдық параметрінің мүмкін мәндері
1 NORM WIDTH (қалындығы бір пиксел)
3 THICK WIDTH (қалыңдығы үш пиксел)
O br параметрі tip константасы мэндері 4-ке тең болғанда
ғана жұмыс істейді (қалған жағдайларда ол карастырьшмайды,
сондықтан оны 0 деп алуга болады). Оның көмегімен кез келген
периодты түрде қайталанатын сызық түрін бере аламыз, оның пе­
риоды 16 пиксел болуы тиіс. Егер сызықта жарықтанатын пиксел
керек болса, үлгіде 1-ге тең бит, болмаса - 0-ге тен бит алу керек.
Сонымен, o b r мәні торт таңбалы оналтылық константа болып,
ол ұзындыгы 16 пиксел сызық кесіндісін кодтау үлгісі болуы тиіс.
Мысалы, пунктир сызық үшін алынган үлгі мынадай болуы
мүмкін: 0x3333, бұл мынадай биттер тізбегіне сэйкес келеді
0011 0011 0011 0011.
Л
Графикалык режимде экрандагы тұйық сызық іші белгілі бір
түспен боялуы мүмкін.
276
Штрихтау сызықтарын тағайындау жэне тұйық
аймақты бояу функциясы
setfillstvle (stil,col)
алдын ала
мұндағы
анықталған
гі кестеде көрсетілген; col - түс кодына сәйкес бүтін
функциясын
көрсетілген
Бояу тәсілін анықтайтын stil параметрінің мүмкін мәндері
аймақты фон түсімен толтыру
0
EMPTYFILL
көрсетілген түспен толтыру
1
SOLIDFILL
көлденең
штрих
сызықтармен
2
LINE FmLL
толтыру
киғаш
4
LTSLASH FILL 3
сызықтармен толтыру
45
градус
оңға
қиғаш
қалың
штрих
4
SLASH FILL
сызықтармен толтыру
45 градус солға қиғаш жіңішке
5
BKSLASHFILL
сызықгармен
толтыру
штрих
45 градус солга қигаш қалың
LTBKSLASHFILL 6
сызықтармен
толтыру
штрих
торсызықты
штрихтармен
толтыру
7
HATCHFILL
45
градус
оңга
қигаш
сирек
штрих
8
XHATCH FILL
сызықтармен толтыру
45
градус
қигаш
жиі
штрих
тор
9
INTERLEAVE
сызықтармен толтыру
сирек
нүктелермен
толтыру
10
WIDE
жиі нүктелермен толтыру
CLOSE DOT FILL 11
түсі көптеген функцияларда (bar,bar3d
мысал
мысалы#іпс1^е
Өртүрлі сызықтар са
<graphi.cs.һ>
#include <сопіо.һ>
#include <stdio.h>
main(){
int gdriver=DETECT;
int gmode;
int x, y, xk = 500;
277
i n i t g r a p h ( S g d r i v e r , S g m o d e ," C : \\T C \\b g i" ) ;
se tc o lo r (R E D ); x=80; y=30;
m o v e t o ( x ,y ) ; o u t t e x t ("жай сызық - SOLID_LINE");
s e t lin e s t y le ( S O L I D _ L I N E , 0 ,NORM_WIDTH);
y+ = 20 ; l i n e ( x , у , x k , у ) ;
y+ = 40; m o v e t o ( x , y ) ;
'
o u t t e x t ("пунхтир сыэық — DOTTED_LINE") ;
s e t l i n e s t y l e (DOTTED_LINE, 0 , NORM_WIDTH) ;
y+ = 20; l i n e ( x , y , x k , y ) ; y+ = 40; m o v e t o ( x , y ) ;
o u t t e x t ("штрих- пунктир сызық - CENTER_LINE" );
s e t l i n e s t y l e (CENTER_LINE, 0 , NORM_WIDTH);
y+ = 20; l i n e ( x , y , x k , y ) ;
y+ = 40; m o v e t o ( x , у ) ;
o u t t e x t ( "штрихі үзынша пунктир сызық") ;
se tlin e sty le (D A S H E D _ L IN E , 0 , NORM_WIDTH) ;
y+ = 20; l i n e ( x , y , x k , y ) ;
у+ = 40 ; m oveto ( х , у ) ;
o u t t e x t ("қалың сы зы қ");
s e t lin e s t y le ( S O L I D _ L I N E , 0 , THICK__WIDTH);
y+ = 20; l i n e ( x , y , x k , y ) ;
g e t c h (); c lo se g r a p h ();}
16.3. Тұйық сызықтар салу
Тіктербұрыш контурын са л у үшін
r e c ta n g le (x l,y l ,х 2 ,у2);
функциясы қолданылады, ол сол жақ
жоғарғы бұрышы - х і.у і, оң жақ төменгі бұрышы - х2,у2 болып келетін
төртбұрыш сызады. Сызық типі
setlinestyle функциясымен, ал түсі setcolor функциясымен анықталады.
Іш і боялган тіктөрбүрыш
са л у ушін
b a r ( x l,y l, х 2 ,у2 );
функциясы пайдаланылады, xl, y l сол
жақ жоғарғы бұрыштың, ал х2 , у2 - оң 16.3 сурет. Параллелепипед
салу
жақ төменгі бұрыштыц координаталары.
278
^
■'f
Щ
I
Л
Мұның қабырғалары өстерге параллель болады, контуры
көреетілмейді. Оны бояу стилі setfillstyle() функциясымен анықталады.
Алдыңғы жақ б е т і боялган параллелепипед салу
функциясы
b a r 3 d (xl,yl,x2,y2,Қалыңдығы, Ж_Беті);
сыргқы контуры сызылған паралелепипед салады (16.3 сурет),
мұндағы х і.у і параметрлері сол жақ жоғарғы бұрыштың, ал х2,у2
- оң жак төменгі бұрыш координаталары. Қалыңдыгы параметрі алдыңғы жэне артқы жақтарының ара кашыктығы, егер ол 0 бол­
са, онда айналасы сызылған төртбұрыш салынады. Ж Беті пара­
метр! - жоғарғы жақ шеттерін сызуды (1 - TOP_ON ) көрсетеді.
Егер ол 0 (TOP_OFF) болса, сызықтар сызылмайды (бірінің
үстіне бірі қойылған бірнеше параллелепипед салу кезінде қажет
болады).
Мысалы, бірінің үстіне бірі койылған бірнеше паралелепипед
салу:
s e t b k c o l o r (WHITE);
s e t c o l o r (GREEN);
b a r3 d (2 3 0 ,5 0 ,2 5 0 ,1 5 0 ,1 5 ,1 ) ;
b a r 3 d ( 2 2 0 Д 5 0 , 2 6 0 ,1 8 0 ,1 5 ,1 ) ;
b a r 3 d ( 3 0 0 ,1 5 0 ,3 4 0 ,1 8 0 ,1 5 ,0 ) ;
b a r 3 d ( 3 0 0 ,5 0 ,3 4 0 ,1 5 0 ,1 5 , 1 ) ;
Көпбүрыш салу функциясы
d r a w p o ly (НүктелерСаны, Координаталары);
түзу сызыктардан түратын тұйык аймакты көпбұрыш сызады. НүктелерСаны параметрі көпбұрыш төбелері санын, Координаталары параметр! сол төбелер координаталарын жиым
элементтері ретінде береді. Жиымның 0-ші жэне 1-ші элементгері
алғашкы нүкге координаталары, 2-ші, 3-ші элементтері - екінші
нүкге координаталары, т.с.с. Енді осы функцияны пайдаланып,
алты бүрыш салайық.
/ / көпбүрыш сал у
# i n c l u d e < g r a p h ic s .h >
# i n c l u d e < c o n io .h >
#in c lu d e < s td io .h >
279
main() {
i n t gdriver=D ETECT; i n t gmode;
in itg ra p h (Sgdriver,Sgmode, "C:\\T C \\b g i" ) ;
i n t x , y , t [ 1 4 ]= { 4 5 0 ,1 5 0 ,5 0 0 ,3 5 0 ,4 0 0 ,4 0 0 ,
1 5 0 ,4 0 0 ,5 0 ,1 5 0 , 25 0,80, 450,150 };
s e tc o lo r(W H IT E ); d ra w p o ly ( 7 , t ) ;
s e t t e x t s t y l e ( 3 ,HORIZ_DIR,1 ) ;
o u t t e x t x y ( 4 5 8 ,1 3 5 ,"C ( 4 5 0 ,1 5 0 ) " ) ;
o u t t e x t x y ( 5 0 8 ,3 3 5 ,"D ( 5 0 0 ,3 5 0 ) " ) ;
o u t t e x t x y ( 4 0 0 ,4 0 0 ," E ( 4 0 0 ,4 0 0 ) " ) ;
|
o u t t e x t x y ( 1 5 0 ,4 0 0 ," F (1 5 0 ,4 0 0 )" ) ;
o u t t e x t x y ( 3 8 ,1 3 8 ,"A ( 5 0 ,1 5 0 ) " ) ;
o u t t e x t x y ( 2 4 3 ,5 5 ,"B ( 2 5 0 ,8 0 ) " ) ;
g e tc h ( ) ; c lo s e g ra p h ();}
Іші боялған көпбүрыш салу ушін қолданылатьш
функция fillp o ly (НүктелерСаны, координаталары) ;
мұндағы НүктелерСаны - төбелердің саны, координата­
лары - жиым элементтері түрінде берілген төбе координата­
лары. Әрбір төбе координатасы екі бүтін санмен беріледі. Бұл
функция төбелердің алғашқы нүктесін соңғы нүктесімен қосып,
сызықтарды тұйықтап, ішін бояйды. Сызық типі мен бояу түсі
selfillstyleO жэне setfillpattem() функцияларымен анықталады
Шеңбер сызу функциясы circle(x,y,r);
радиусы г (бүтін сан), центрінің координаталары (х, у) болатын
шеңбер сызады.
Сызық түсі s e t c o l o r () функциясымен беріледі. Мысалы,
қызыл түсті 5 шеңбер сызайық:
99т
s e tc o lo r ( R E D ) ;
f o r (г = 5 ;r< = 2 5 ; r+ = 5 )
c i r c l e ( 3 2 0 ,2 4 0 ,г ) ; . . .
Дога сызу функциясы
arc(х,у ,БүрышБасы,БұрышСоңы, Радиус);
центрінің координатасы (х, у), радиусы берілген доға сыза­
ды. БұрышБасы, БүрышСоңы параметрлері бұрышгы градуспен горизонталь х өсінен бастап, сағат тіліне қарсы бағытта
280
береді. Радиус параметрі доға радиусын бүтін санмен береді.
Бұрьіштар мэні периодына сэйкес эквивалента түрде [0..360]
интервалындағы мэндерге келтіріледі. Мысалы, arc(x,y,-45,45,r)
жэне агс(х, у, 675, -315,r) шеңбердің бір ширегіне сэйкес бір
доғаның екі түрде берілуін көрсетеді.
Эллипс доғасын сызу функциясы
ellipse(х,у,БүрышБасы,БүрышСоңы,гх,гу) ;
центрінің координаталары (х, у) эллипс немесе эллипс доғасын
(16.4 сурет) сызады. БүрышБасы, БұрышСоңы параметрлері
доғаның басы мен соңын градуспен сағат тіліне қарсы береді.
гх, гу параметрлері эллипстің көлденең жэне тік радиустарын
береді. Эллипс өстері координаталар өстеріне параллель болады.
БүрышБасы
БүрышБасы
БурышСоңы
БурышСоңы
16.4
сурет. Эллипс доғасын салу
Іші боялған контурлы эллипс салу функциясы
fillellipse (x,y, rx,ry);
мұндағы x ,y —центр координаталары; rx, ry —пикселмен берілген
эллипс жарты өстері радиустары. Эллипс өстері координат
өстеріне параллель болады. Эллипс ағымдагы түспен боялып
шығады.
Іші боялган дөңгелек сектор сызу функциясы
радиусы Радиус, центрі (х,у) нүкгесіндегі дөңгелек сектор сы­
зады. БұрышБасы,БүрышСоңы параметрлері шеңбер секторының бастапқы жэне соңғы бұрыштарын градуспен сағат тіліне
қарсы анықгайды. Егер БүрышБасы = 0, ал БурышСоңы 360 болса, онда pieslice функциясы шеңбер сызып шығады.
Бұрыштарды [0..360] шегіне (диапазонына) келтірген соң, сектор
281
мэні кіші бұрыштан мэні үлкен бұрышка қарай сызылады, сол
себепті ОХ өсінің оң жақтағы бағытын кесіп өтетін сектор салуға
Буры ш С оңы
Б уры ш Б асы
БурышСоңы
Б уры ш Б әсы
16.5 сурет. Секторлар салу
болмайды. Сектор контуры (доға мен екі радиус) сектор боялған соң сызылады, ал сызық типі мен қалындығы setlinestyleQ
функциясымен анықгалады. Егер контурсыз сектор салу керек
болса, мынадай тәсілді пайдалануға болады (16.5 сурет):
s e tc o lo r (B L A C K ); setb k co lo r(B L U E ) ;
s e t w r i t e m o d e (XOR_PUT) ;
s e t f i l l s t y l e (WIDE__DOT_FILL, RED) ;
p i e s l i c e (2 0 0 ,1 0 0 ,4 5 ,9 0 ,5 0 ) ;
Іш і боялған контурлы эллипс секторын салатын
функция s e c t o r ( х , у , бүрыш_басы,
бұрыш_соңы, r x , r y ) ;
Бұл функция pies Iice () функциясы тэрізді жұмыс істейді.
/ / Жазуы бар секторлар s e c t o r 2 . c p p
# in c lu d e < s td io .h >
# in c lu d e < s t d lib .h >
# i n c l u d e < c o n io .h >
# i n c l u d e < g r a p h i c s . h>
v o i d m ain () {
i n t gd=DETECT, gm, i , x , у ;
i n i t g r a p h ( & g d ,& g m ," c : \\T C \\b g i" ) ;
s e tc o lo r (B L A C K ); s e t b k c o lo r ( B L U E ) ;
setw ritem ode(X O R _P U T );
s e t f i l l s t y l e ( W I D E DOT FILL,RED);
282
p i e s l i c e (2 0 0 ,1 0 0 ,4 5 ,9 0 ,5 0 ) ;
s e tb k c o lo r (B L U E ); s e t c o l o r ( R E D ) ;
s e t f i l l s t y l e ( 1 ,3 ) ;
x = g etm a x x ( ) / 2 ; y = g e tm a x y ( ) / 2 ;
p i e s l i c e ( x , y , 2 7 0 , 3 6 0 , 1 0 0 ) / s e t f i l l s t y l e ( 1 ,2 ) ;
p i e s l i c e ( x , y , 0 ,2 7 0 ,1 0 0 ); s e t t e x t s t y l e ( l , 0 , 2 ) ;
m o v e t o ( x - 2 0 , y - 4 0 ) ; o u t t e x t ("75%");
m o v e t o ( x + 2 0 ,y + 2 0 ) ; o u t t e x t ("25%") ;
g e t c h ( ) ; c lo se g r a p h ();}
Түйық сызықпен қоршалған аймақтың
іш ін бояу функциясы floodfill( х , у ,шек а р а ) ;
мұндағы х, у - боялатын аймақ ішіндегі нүкте координатасы.
Тұйық аймақты қоршаған сызық контурында тесік болмауы тиіс,
эйтпесе бояу бүкіл экранды сол түске бояп жібереді. Контур түсі
ш екара түсімен бірдеи болуы тиіс. Бояу түсі мен типі setfillstyleQ
функциясымен орнатылады. Енді бір мысал келтірейік.
/ /боялган шеңберлер, эллипстер cany — kr_krug.cpp
# i n c lu d e < c o n io .h >
# in c lu d e < s t d lib .h >
# i n c l u d e < g r a p h ic s .h >
v o i d m a in ( ) {
i n t gd=DETECT,gm ,r,x=120,y=240;
in it g r a p h ( & g d , &gm, "C:\\TC\\BGX ) ,
se tc o lo r (R E D );
//сы эы қтар қызыл т ү с т і
s e tb k c o lo r (B L U E );
//ф о н кек т ү с т і
f o r (r = 0 ; r < 8 0 ; r++) //к о н ц е н т р л і
c ir c le (x ,y ,r );
/ / 8 0 қызыл шеңбер сал у
s e t f i l l s t y l e (SOLID_FILL, RED) ;
x + = 2 0 0 ; c i r c l e ( x , y , 8 0 ) ; //кыэыл шеңбер
f l o o d f i l l ( x , у , RED) ;
/ / іш і д е қызыл
х+=200;
f i l l e l l i p s e ( x , y - 1 5 0 , 8 0 , 5 0 ) ; //қыэыл эллипс
s e t f i l l s t y l e (SOLID__FILL,GREEN) ;
f i l l e l l i p s e ( x , y , 8 0 ,5 0 );
//ж асы л эллипс
setfillstyle(SO L ID _FIL L ,Y E L L O W );
283
f i l l e l l i p s e ( х ,у + 1 5 0 , 8 0 , 5 0 ) ; //с а р ы эллипс
g etch ();
ш •
(ЯИИИП 1 о о
clo seg rap h (); }
«*|
Терезе ашу функциясы
Графикалық режимде экран ішінде өз координаталық жүйесі
бар төртбұрышты басқа терезені ашуда қолданылатын келесі
функция қолданылады:
s e tv ie w p o r t(x l,y l,х 2 ,у 2 , c l i p ) ;
Мұндағы xl, уі - терезенің сол жақ жоғарғы бұрышы координакоординаталары
талары
- қию параметрі.Егер clip параметрі 1 болса, онда терезеге сыймайтын бейне элементтері қиылып алынып тасталады; ал егер
де ол 0 болса, терезе шекаралары есепке алынбай, бейне толық
экранда көрсетіледі. Бұл функция дұрыс орындалса, графикалық
курсор терезенің координаталар басына орналасады.
Терезені тазалау функциясы c l e a r v i e w p o r t () ;
Тағы бір мысал келтірейік.
//Диагональ сызу, жаңа терезелер
# in c lu d e < s td io .h >
# in c lu d e < s t d lib .h >
# i n c l u d e < c o n i o .h >
# i n c l u d e < g r a p h i c s . h>
v o i d m a in ( ) {
i n t gd=DETECT, gm, x , у ;
i n i t g r a p h ( & g d ,& g m ," c : \ \ T C \ \ b g i " ) ;
//жасыл экранда қалыңдығы 3 пиксел диагональ сызу
setb k c o lo r (G R E E N ); s e t c o l o r ( R E D ) ;
s e t lin e s t y le ( S O L I D _ L I N E , 0 , 3 ) ;
x = g etm a x x ();
(" xmax=%d ymax=%d n ,x.,y) ;
l i n e ( 0 , 0 , x , y ) ; / / 6 i p перне басы п ,эк р ан т а з а л а у
g e tc h ();
“
c l e a r d e v i c e ( ) ; / / т е р е з е ашу, оны т а з а л а у
s e tv ie w p o r t(1 0 0 ,1 0 0 ,6 0 0 ,4 0 0 ,1 );
c l e a r v i e w p o r t ( ) ; s e tc o lo r (G R E E N );
r e c t a n g le (1 0 ,3 0 ,4 5 0 ,2 5 5 );
c i r c l e (2 3 0 ,1 4 5 ,5 5 );
284
settextstyle(DEFAULT_FONT,HORIZ_DIR, 3 ) ;
//орыс әріптері тек DEFAULT_FONT қарпінде
setbkcolor(BLUE);
setcolor(WHITE);
//Мәтін терезенің сол жақ жоғарысында
outtextxy(1,1, "Жаңа тереэе");
getch();
closegraph();}
Бақылау сұрақтары
1. IBM PC компъютерлері бейнемониторының қандай түрлері бар?
Олардың айырмашылыгы неде?
2. Графикалық режимн ің атқаратын қызметі қандай ? Оны программада қалай іске қосады ?
3. Графикалықрежим қандай функция арқылы орнатылады?
4. Адаптерлердің мынадай типтерінің CGA, EGA, VGA бір-бірінен
айырмашылызы неде?
5. Монитордың мәтіндік жэне графикалық режимдерінің мүмкіндіктері неге эртүрлі болады ?
6. Драйвер деп нені айтады? Графикалық драйвер ше? Ол қандай
қызмет атцарады ?
7. Экранның түсін және оган шыгарылатын жол символдарының
түсін қалай өзгертпуге болады?
8. Графикалық режимде курсор бола ма?
9. Символдарды қалай жыпылықтатып қоюга болады?
10. Курсорды экранның кез келген нүктесіне қалай көигіреміз?
11. Графикалық режимде экранда қалай терезе қүруга болады ?
12. Графикалықрежимде экранды қалай тазартуга болады?
13. Clrscr, Clreol, Delline жэне Insline функцияларының ортақ қасиеттері мен айырмашылъщтары.
Тапсырмалар
1
Уақытты есептеп отыратын сикыршымен кездестіңдер делік және
ол сендерге жұлдыздар сырын ашып береді деп ойлайық. Неге
аспанда жұлдыздар жымыңдайды? Аспандағы эрбір жұлдыз — бір
адамның өмірі. Сендерге көне жұлдыздарды дэл уақытында өшірш,
жанасын дер кезінде жағып отыру керек. Уақыт есептеушінщ
жұмысын көрсететін программа жазу керек. Есеп модель құрудан
басталады: экрандағы эрбір жұлдыз нүктемен керсетіледі жэне
барлығы 20 жұлдыз жанып тұрсын делік (кездейсоқ түрде тандап
алынган): жанып тұрған бірінші нүктені өшіріп, оны кез келген
285
басқа орыннан жандыру керек, содан кейін екіншісін, т.с.с. Жиырмасыншы жүлдыз өшкеннен кейін қайтадан біріншісіне көшу ке­
рек.
'
2. "Жаңбыр" программасын жазыңдар — экранда (кездейсоқ күйде) 50
нүкте жоғарыдан төменге қарай қозғалып келе жаткандай болуы
тиіс. Нүктелердің бірі экранның төменгі шекарасына жеткенде, ол
қайтадан экранның жоғарғы бөлігінде пайда болуы керек.
3. "Жаңбыр" программасын кейбір нүктелер шапшаң, кейбіреулері баяу
қозғалатындай етіп өзгертіқдер.
4. "Жаңбыр" программасын нүктелер өз қозғалысын төменгі сол жак
бұрыштан бастап, жоғарғы оң жақ бұрышта аяқталатындай етіп
өзгертіндер.
5. Қағазға оралған "кәмпиттің" бейнесін: диагональдары жүргізілген
горизонталь тіктөртбұрыш пен оның екі жағына жалғасып жатқан
тең қабырғалы үшбұрыштар салыңдар. Тіктөртбұрыштың сол жақ
төменгі төбесінің координатасы (х, у), биіктігі д-ға, ұзындығы
2я-ға тең болсын. Үшбұрыштың биіктіктері at2. Тікбұрыштың
диагональдары мен қабырғаларынан пайда болған қарама-қарсы
екі үшбұрышты бояңдар.
6. Үш тісті жэне жарты дөңгелек пішінді аркасы бар мұнара салындар. Мұнараның сол жақ төменгі төбесінің координатасы (х,
у), табанының ұзындығы а. Қалған өлшемдерін а арқылы өрнектеп
табыңдар. Мұнараны бояңдар.
7. Куб салыңдар. Кубтың алдыңғы сол жақ төменгі төбесінің коорди­
натасы (х, у), бүйір қыры а. Жоғарғы бүйір бетін бояңдар, оң жақ
бүйір бетінде диагональ жүргізіңдер.
8. Алтыбұрышты тік пирамида салындар. Табанының алдыңғы сол
жақ төбесінің координатасы ( jc, у), табанындағы қыры а . Қалған
өлшемдерін а арқылы өрнектеп табыңдар. Пирамиданың екі бүйір
жақтарын бояң дар.
9. Тіктөртбұрышты қиық пирамида салыңдар. Пирамида табанының
төменгі сол жақ төбесінің координатасы (х^у), табанындағы қыры
а, жоғарғы жақтың қыры — a ll. Қалған өлшемдерін а арқылы
өрнектеп табыңдар. Пирамиданың оң жақ бүйір бетін бояндар.
10. Қарайтылған "Е" эрпі тэрізді фигура салатын программа құрыңдар.
Әріп құрайтын нүктелердің абсциссалары мен ординаталары жиым
элементтері ретінде берілген. Сурет салу үшін циклге енгізілетін
тек қана бір LINE операторын пайдаланыңдар.
11. Экранда боялған шырша салатын программа жазындар. Сурет элементтерін жиымда сақтап, өшіріп және содан кейін қайтадан экранға
шыгарыңдар.
12. Боялған 7 шыршаның суретін салатын программа жазыңдар. Шыршалар бір-біріне ұқсас, горизонталь бойында бір қалыпта орналасады, шыршалардың биіктігі солдан оңға қарай сызықтық түрде
286
өсуі керек. Шыршаларды бойлап Қызыл Телпек оларды уақытша
"үсіп қалмасын" деп бір затпен жауып шығатын болсын.
13 Графикалық режимде ESC пернесін басқанша монитор экраныва кездейсоқ күйде бірсыпыра нүктелер шығаратын программа
қдоыңдар.
14. Графикалык режимде ESC пернесін басқанша монитор экранында
(100, 100) I (300, 200) тіктөртбұрышының нүктелерін кездейсоқ
күйде жоятын программа құрыңдар.
15. Графикалык режимде ESC пернесін басқанша монитор экранының
центрі (200, 200) нүктесімен дэл келетін жэне радиусы 80 болатьш
дөңгелек нүктелерін кездейсоқ күйде жоятын программа кұрындар.
16. Шахмат такгасының бейнесін салыңдар.
17. Экранда қарайтылған М эрпі пішіндес фигура салатьга жэне
бағыттауыш тілсызык (—>, ♦—,Т, ^) пернелер арқылы басқарылып,
фигураның көлемін + жэне - пернелерінің көмегімен өзгертетін
программа құрыңдар.
18. Цшслдік операторды пайдаланып 10 баскышы бар саты салыңдар,
оның жұп жэне так нөмірлі басқыштарының көлемі әртүрлі бола­
тын программа құрыңдар.
19. Шеңберге іштей бесбұрышты жұлдыз салыңдар.
20. Қызыл экранга 0..9 аралығындағы 1000 кездейсок санды ақ түспен
шығару қажет. Мұнан соң экран түсін жасылға бояп, сандарды
сары түспен шығарыңдардар.
21. Экранды барлык (8) фон түстеріне 5 секунд кідіріспен бояп шығыңыздар. Экранный сол жақ жоғарғы бұрышына оның нөмірін жа­
зып кою керек.
22. Қара экранға 1-ден 16-ға дейінгі сандарды 16 түрлі түске бояп
шығару қажет. Эрбір сан бөлек жолда орналасатын болсын.
23. Алдын ала тазаргылған экранды ак түске бояп, жеті атаңыздың аттарын жеті түрлі түспен шығарыңдардар.
^|
24. Қара экранға өзгеріп отыратын кездейсок түстер арқылы 200 "+"
белгісін кездейсок түрде берілетін координаталық нүктелерге басып пшғару керек.
25. Экранный жоғаргы жагына екі терезе салып, оның біріншісінің
ішіне өз атыңызды, екіншісіне - фамилияңызды жазып қойыңыз.
10 секундтан кейін терезелер ішін тазартып, өз аты-жөніңіздің орнына досыңыздың аты мен фамилиясын орналастырыңыз.
26. Экранный сол жак шетіне көк түсті терезе салып, оны он жакка
карай кадамын бір символ етіп жылжытып отыратын программа
куру керек.
27. Экранга біртіндеп үлкейе бастайтын шағын кызыл терезе салу
кажет. Үлкею кадамын X координатасы үшін 3, ал У координатасы
үшін 1 етіп алыныздар.
287
17 С ПРОГРАММАСЫН ОРЫНДАУ ОРТАСЫ
17.1. Турбо С редакторынын терезесі
/рбо С программалау жүйесі С тиннде программа құрастыоны орындауға мүмкіндіктер береді. Жалпы, тұтынушы мыІ әрекеттерді орындай білуі керек:
программаның мэтінін жазып, дискіде программа файлы
ретінде сақгау;
- программаны компиляциядан өткізіп, егер синтаксистік
қателері бар болса, оларды түзету;
- программаны орындап, нәтижесін алу. Сонымен, кез келген
программа оны теру, компиляциялау, құрастыру, атқарылушы
модульді жасау жэне орындап нэтиже алу сатыларынан өтуі тиіс.
С тілінің біріктірілген (интегралданган) ортасында программа
орындау томендегідей қадамдардан тұрады:
1) компилятор қажет файлдарды іздеп тауып алуы үшін ортаның параметрлерін тағайындау;
программалық файлды редактор ортасына жүктеу
теру;
3) атқарылатын модульді (орындалатын файлды) жасау;
4) программаны іске қосу жэне орындау;
5) программада қате болса, оны жөндеп түзету. Программа
куру үшін, ең алдымен, Турбо С біріктірілген ортасымен жұмыс
істей білу керек.
Турбо С ортасы - арнайы көп терезелі мэтіндік редак­
тор. Ол көбінесе C:\TC\BIN\tc.exe файлын іске қосу арқылы
немесе соның жарлықтарының бірін іске қосу жолымен
ва
жүктеледі:j
_ ТС.ЕХЕ _
__
^
ТС.ЕХЕ файлының жұмыс істеу барысында экранда Турбо С
ортасының негізгі терезесі ашылады (17.1-сурет).
Турбо С ортасын автоматты түрде жүктеп, орыс (қазақ) әріптерін теру мүмкіндігін беретін C.bat пакеттік файлының мэтінін
мынадай түрде құрастыруга болады:
с:
cd TC\BIN
rk.com
tc.exe
288
C.bat файлын немесе оның жарлығын шерту арқылы да Турбо
С ортасы ашылады. Ол іске қосылған соң, орыс эріптеріне жэне
ағылшын әріптеріне ауысу қос Shift пернелерін (ол басқаша да
болуЫ мүмкін) қатар басу арқылы орындалады. Турбо С редакто­
ры DOS ортасында жұмыс істейтін көкшіл экранға шығады. Ол
экран төрт бөліктен түрады (17.1-сурет):
- меню жолы,
- түзету/теру терезесі,
- мәлімедеме хабарлар терезесі,
- қалып қатары.
Терезені үлкейту үшін Alt+Enter пернелерін басу керек,
редактор терезесін экранды толық алатындай етіп үлкейту үшін,
оның оң жақ жоғарғы бұрышындағы тілсызық [] батырманы
сол
жақ
жоғарғы
шеттеп
шерту
төртбұрышты батырманы [■] шертеміз. Турбо С-ден шығу үшін
Alt жэне X (латын) пернелерін қатар басу керек.
Түзету/теру терезесі
С - Яриъ
Debug
P ro je c t
Ions
w in d o w
H ell
fUDENT\PROBA3.CPP
m ain О
{ float x;
float y;
textсо lor(RLD);
textbackground(WHITE);
clrccrO;
1
,,л
printfС
У '»
printfC"
—
**
for(x=l; x<-5;x=x+^
)
{ y=x*x+sin(x)4-log(x)-tan(2 x)+
print f С
*‘ '•* ' ■
! 1 і хі У)і
g e t c h Q;
2*
ШІ 11ii ll ІИДШ
ДtilШ
ҺГУІ
ШШІ HІіГІГДIММГ
N e x t M sg
A l< ^ |Щ Р г е у И Я
F9 С в в о П е
Г9 М
Қалып қатары
17.1-сурет. Турбо С біріктірілген ортасы
орналасады
9 ) көшу үшін:
Керекті
- Alt+О пернелерін басқанда шығатьш терезелер тізімінен
керектісін таңдау арқылы;
- Alt+5 деп терезе нөмірін 5-ті енгізіп көшу;
19-1660
289
IF 6 пернесі аркылы терезелердің бірінен біріне көшуге бола­
ды;
үлкеитуге
реитуге
кызметтер
тандағанда, оның ішкі командалары
ігенін таңдап орындай аламыз.
17.2 Меню командалары
Программа іске қосылып, терезе ашылғаннан кейін, курсор
жұмыс алабында тұрады.Меню қатарына F 10 пернесі арқылы
шығып, ESC арқылы жұмыс алабына ораламыз. Меню қатарының
командаларын жэне төменгі сатылы командаларының қажеттісін
I
—►I бағыттауыштары арқылы таңдай аламыз. Команданы
орындау үшін Enter пернесін басамыз.
Осы әрекеттерді тышқан қолтетігімен де қалыптағыдай етіп
орындауға болады.
Командалар тізімі
•Е - қосымша әрекеттер орындау.
•File (файл) - файлдармен жұмыс істеу.
•Edit (түзету) - ашық терезедегі мәтінді түзету режимдерін
орындау.
•Search (іздеу) - іздеп табу әрекеттерін орындау.
•Run (атқару) - программаны орындау.
•Compile (компиляция) - программаны компиляциядан өткізу.
•Debug (түзету) - программаны жөндеу.
•Options (нұскалар) - орта параметрлерін тагайындау.
•Windows (терезе) - тереземен жұмыс істеу.
• Help (көмек) - анықтамалық жүйеден көмек алу.
Қосымша әрекеттер жұмыс істеп тұрган файлдарды анықтау, ішкі Ассемблерді іске қосу сияқты эрекеттерді орындайды.
File менюінің ішкі командалары (17.2-сурет):
Open F3 —
бұрын жазылган файлды ашу {A:\LB1.C}
New
—
жаңа файл ашу
Save F2 —
файлды дискіге жазып сақтау
Save as ... файлды басқаша түрде жазып сақтау
Save all барлыгын да жазып сактау
290
директорииды өзгерту
Change dir
ашық терезедегі файлды қағазға басу
Print
DOS-қа (Turbo С-ден) уақытша шығу
Dos shell
Turbo С-ден шығып кету
Exit Alt-X
Файлды дискіге өзщіз қоиған атпен сақтауға арналған
Басқаша сақтау (Save as - Сохранить как...) терезесі төмендегі
17.2-суретте көрсетілген.
Р C.bat
17.2-сурет. Дискіге мэлімет жазу терезесі
командалары
Undo (болдырмау) Alt + Bksp - соңғы орындалған команданың
алып
Redo Shift +Alt + Bksp - Undo командасының кері қайтарған
командасы эрекетін қайтадан іске қосады. Cut (қиып алу)
буферге қиып алады
Shift+Del
зда қалмайды).
буферге
Copy (көшіру) Ctrl+Ins - белгіленген бө
кур
рынғы орнында сақталады). Paste (кірі
Iорналасқан жерге буфердегі ақпаратты
енгізеді.
Clear (өшіру) Ctrl+Del - белгіленген бөлікті өшіру.
Copy Examples - мысалды көшіру.
редактор терезесінен буфер
(буферді
алынған
Search менюінің ішкі командалары:
291
қажетті
Find (табу)
сұхбат
іздейтін мәтін мен оны
алмастыру)
алмастыратын мэтінді енгізу мүмкіндігін беретін сұхбат
ашады.
Search Again (қайтадан іздеу) Ctrl+L - Find немесе Replace
командаларының соңғы әрекетін қайталайды.
Go to line number (нөмір қатарына бару) - курсорды нөмірі
көрсетілген қатарға орналастырады.
C.bat
Search
fcun
C o n p ile D e b u
Pi Help I undo the previous editor action
17.3-сурет. Edit менюінің ішкі командалары
Previous error Alt+F7 - алдыңғы қате орнына бс
Next error Alt+F8 - келесі қате орнына бару.
Run менюінің ішкі командалары:
ілған параметрлерді қолдана
Run (орындау) Ctrl+F9
іінді программаны орындайпрограммы) - жөндеушінің
flbi.Program
программаға бөлінген орынфайлдарды
екпінді терезедегі программа(курсорға өту)
тарган
(қосалқы программаға
программадағы
орындайды^ер over (программаны қадам бойынша орындау)
программа мэтінінің бір жолына сэйкес келетін кезекті операто
ды біртіндеп орындайды.
292
Compile менюінің ішкі командалары (17.4-сурет):
Compile АҺ+Ғ9 - екпінді терезедегі программаның қатесін
тексереді. Снтаксистік қате жөнінде хабарлама береді де, кур­
сор қате жіберілген орынға орналасады. Қате жоқ болса,
компйлляцияның сэтті болғаны жөнінде хабарлама береді.
Make (программаны жинақтау). Егер негізгі программада не­
месе негізгі модульде қолданылатын жеке модульдердің мэтінінде
обьектілік файлды алғаннан кейін өзгеріс болса, соған сәйкес модульдер кайта тексеріледі, одан кейін негізгі программа немесе
негізгі модульден тұратын файл қайта құрылады.
Build all (Программа құру) - бұл команда орындалғанда,
негізгі программа және негізгі модульде қолданылатын барлық
модульдер қайта компиляциядан өткізіледі.
C-bat
File
S ea rch
E d it
Run ■ В В В В Г О е Ы ід
[I
fl
P r o je c t
O
°j ptions
Window
■
Help
=E*3=П
Link
B u ild a l l
in О
I n f o r m a t io n .* .
9 ,k
int
lo n g n .
clrscrO*
scanf <
n*k*n;
do
j
, i £8 > R , a ! i l
,8tn>;
<k-n;
n ^ k x lH ; .1 [ i 1=n;
n><k n ) / i 8 ;
>
w h ile
>;
<pj?-0>;
p r in tf<
n OMMTfta
1 4 :4 6 = : Г ' , .
1 Fl He"
Cowplle t U f i b
in t h e a c t i v e E d it window
17.4-сурет. Compile менюінің ішкі командалары
командалары
объектілер
Inspect... (АҺ+Ғ4)
талдауга көмектеседі
Evaluate/modify... (Ctrl+F4) үш өрісі бар терезе ашады:
Expression, Result, New value — олар айнымалы мәндерін көріп,
оларды өзгерту мүмкіндігін береді.
Call stack (Ctrl+F3) - программада қолданылган функция­
лар тізбегін —стекті көрсететін қосалқы программа терезесін
көрсетеді.
Watches 8 суырылып шыгатын менюді ашып, жаңа өрнектер
енгізіп, оның нәтижесін көрсете алады.
293
Breakpoints... - түзету режимінде тоқтау нүктесімен жұмыс
істеу мүмкіндігін беретін терезе ашады.
Project командалары қажет болғанда, жобалар ашу, толықтыру
жэне жабу ісін атқарады.
Жоба — бір-бірімен байланысты файлдар жиыны, бірнеше
объектілік файлдар бірден компиляциядан өткізіліп, атқарылатын
бір программа жасайды. Жоба коп файлды программалар кезінде
керек. Кейде бір файлмен жұмыс істегенде де қолданылады.
Модульдік программалау барысында көпфайлдық компиляциялаусыз жұмыс істеу мүмкін емес. Көлемі үлкен программалармен жұмыс істеу кезінде ол программаның бөліктерін бірнеше
файлдарга сақтау анағұрлым ыңгайлы. Әрбір файл бүтіндей бір
немесе бірнеше функцияны қосуга тиіс. Ол файлдардың аттары арнайы файл-жобага жазылады, IDE ол ақпараттан мэтіндік
файлдардың қайсысын орындалатын файлга (.EXE) біріктіру ке­
рек екендігінен хабардар болады.
V
Файл-жобалармен жұмыс істеуге қажетті бұйрықтардың
барлыгы Project менюіне қосылган.
Файл-жобаларды ұйымдастыру үшін ол файл-жобаны ашу
керек. Ол үшін Project\Open Project... командасы орындалады
жэне IDE экранның төменгі жагындагы арнайы Project терезесін
іске қосады. Қажетті файл-жобаны жүктейтін немесе берілген
атпен жаңа файл-жоба қүратын диалог терезесі ашылады. Жаңа
файл-жоба қүрылган болса, Project терезесі бастапқьща бос бо­
лады. Жобага файлдарды қосу немесе оларды жою ProjectVAdd
item... жэне ProjectYDelete item бұйрықтарымен орындалады.
Меңзер (курсор) Project терезесінде орналасқан жагдайда осы
мақсатта Ins жэне Del батырмаларын басса да жеткілікті. Файл­
дарды жобага қосу кезінде қажетті файлды тақдауга мүмкіндік беретін диалог терезесі ашылады. Project терезесі жобага
қосылган бір файлдан оларды редакциялау барысьгада келесісіне
кошуді жеңілдетеді. Ол үшін Project терезесіндегі қажетті жолга
меңзерді (курсорды) апарып ENTER пернесін басса жеткілікті.
Borland C++ ортасында жүмыс істеу кезінде программа бір гана
файлдан түрганның озінде жобаны қолданган ыңгайлы.
Options менюінің командалары (17.5-сурет) Турбо С ортасының келісім бойынша тагайындалатын параметрлерін көру
жэне оларды өзгерту мүмкіндігін береді. Олардың көптеген
294
17.5-сурет. Option менюінің ішкі командалары
мәндерін өзгертпей, калдыруға болады. Мұнда түйінді сөздер
аркылы түстерді (16 түс) өзгерту мүмкіндігі бар (Options/Enviroment/Colors/Syntax).
Directories командасы тақырыптық файлдар каталогын
(Include Directories), кітапханалық функциялар (Library
Directories) каталогын жэне терілген файлдар мен олардың
нэтижелік файлдары (Output Directory) кайда орналасатынын
көрсетіледі.
Мысалы, егер ТС программаторы C:\TC каталогында орналасса, онда Include Directories өрісінде C:\TC\INCLUDE деп
көрсеткен дұрыс болады, ал Library Directories өрісіне — C:\TC\
LIB деп жазу керек. Output Directory жолына нәтижелік файлдар орналасатын каталогты, мысалы, C:\TC\BIN\STUDENT деп
көрсеткен ыңгайлы болып саналады немесе C:\TC\BIN катало­
гын қалдыру үшін — нүкте енгізе салу керек. Керекті параметрлер енгізілген сон, оларды Options —Save... командасымен есте
сактап кою кажет.
Window (Терезе) меню командалары терезені ашу, жабу,
экранды жылжыту эрекеттерін орындау мүмкіндігін береді.
терезе көлемі мен орны
Ctrl+F5
Size/Move
терезені ұлгаиту
F5
Zoom
сатылы (каскадты)
Tile
келесі терезе
F6
Next
295
Close
Alt+F3
- терезені жабу
нәтижелік терезе
Output
User screen
Alt+ F5
- тұтынушы экраны
List All
Alt+0
- басқа терезелерді ашу
Help (көмек) 'меню командалары жүйедегі анықтамалық
паратты оқу мүмкіндігін береді.
Contents (экранға шығарылган ақпарат жөнінде мәлімет)
ағымдағы уақытта экранга шығарылған мәлімет жөнінде (екпінді
терезе, тандалған меню командасы, жіберілген қате) мәліметті
сұхбат терезеге шығарады. Index (түйінді сөздер) Shift+Fl жүйеде бар барлық анықтамалық ақпарат тізімін эліпбилік
ретімен түйінді сөздер бойынша шығарады. Topic search (сөз
бойынша іздеу) Alt+Fl —курсор орналасқан сөз жонінде анықтамалықгы шығарады. Егер сол соз жонінде анықгамалық жоқ
болса, алғашқы символдарының саны коп сэйкес келетін түиінді
создер тізімін береді. Prevoius topic (алдыңғы тақырып) алдыңғы
сұранысқа сәйкес келетін анықтамалықты шығарады. Жүйе 20
алады
мәліметтері
компиляциядан
щ Ш ___
, жаилы толық мэлімет береді. Қате кездескен кезде орта автоматты түрде бастапқы программа мэтінін
экранга шыгарып, курсорды қате табылган орынга орналастьфады жэне редактордың жогаргы жольшда диагностикалық
мэлімет пайда болады. Fl пернесінен баска кез келген пернеге
бассаңыз, жогаргы жол бастапқы қалпына келіп, интегралданган
орта редакциялау режиміне ауысады. Егер қате жайлы мәлімет
шыққаннан кейін F1 пернесін басқанда, экранда қатені түзету
жайлы нұсқаулар жазылган анықтама қызметінің терезесі пайда
болады. Кейбір қателер бірден емес, программа мэтінін талдау
анықталады
Қате
нөмірі
Қате түсінігі
(Жады
ф
296
Duplicate identifier (Идентификатор қайталанган)___________
Syntax error (Снтаксистік
қате)_______________ |___________
Щ
Error in real constant (Нақты тұрақтыда цате бар)__________
Error in integer constant (Бүтін тұрақтыда қате бар)________
String constant exceeds line (Тіркестік тұрақты берілген
аймақтан тыс жатыр)__________________ _______________
Too many nested files (Кіріктірілген файлдар саны тым көп)
Unexpected end o f file (Файл соңы табылмады)_______________
Line too long (Tым ұзын жол)________________ _____________
Type identifier expected (Tun идентификаторы қажет)________
Too many open files (Аиіылган файлдардың саны көп)_________
Invalidfile name (Файл аты дұрыс емес)____________
File not found (Файл табылмады)________ ______ ________ ___
Disk full (Диск толып кеткен)_____________ ______________ .
Invalid compiler directive (Компилятор директивасы цате)
Too manyfiles (Файлдардың саны тым көп)_________________
Undefined type in pointer definition (Көрсеткіш сипаттауында
тип көрсетілмеген)____________ ____________ ______ _-----Variable identifier expected (Айнымалының иденфикаторы жоң)
m
17.3.1
—
— —
—
яш т яш т т т т ^т т т т т т —
—
— — —
—
—
Программа орындалу кезінде шығатын қателер
Программа орындалу кезінде анықталатын кейбір қателер
экранда Runtime error nnn at xxxx:yyyy (xxxx:yyyy адресі бой­
ынша nnn кезеңін орындаудағы қате) мәлімдемесінің шығуына
әкеледі, мұнда nnn — қате нөмірі; хххх:уууу — адрес (сегмент
немесе жылжу). Бұл мәлімдемеден кейін программа өз жұмысын
токгатады. Программа орындалу кезінде шыгатын қателер төртке бөлінеді: СОЖ (сұхбатгы операцнялық жады) анықтайтын
кателер (1-ден 99-га дейінгі қателер), енгізу-шығару қателері
(100-ден 149-га дейінгі қателер), дағдарысты қателер (крити­
ческие ошибки) (150-ден 199-га дейін) жэне фаталды қателер
(200-ден 255-ке дейінгі қателер).
17.3.2 Операциялык жүйе анықтайтын қателер
Кате №
/
2
3
ШШг
Аты
_________________
Invalid function number (Функция нөмірі дүрыс жазылмаган)—
File not found (Файл табылмады)__________________________
Path not found (Жол табылмады)____________ ______________
297
4
5
6
12
15
16
17
Too many open files (Ашылган файлдардың саны көп)
File access defined ( Файта цол жеткізуге рүцсат жоқ)
Invalidfile handle (Ретсіз файлдық канал)
Invalidfile access code (Файлга цол жеткізудің коды нацты
емес)
,
Invalid drive number (Дискжетек нөмірі ретсізj
Cannot remove current directory (Агымдагы каталогты
өиііруге болмайды)
Cannot rename across drives (Атты ауыстырганда эртүрлі
дискжетек аттарын корсетуге болмайды)
17.3.3 Енгізу-шығару қателері
Егер операторлардың біреуі {$1+} директивасымен компиляциядан өтсе, онда енгізу-шығару қатесі программаның орындалуын тоқтатады. {$1-} қалпында программа орындалуын
жалғастырып, қате IORESULT функциясымен қайтарылады.
Қате №
1
100
101
102
103
104
105
106
Аты
Disk read error (Дискіден оку кезінде қате кетті)
Disk write error (Дискіге жазу кезінде цате кетті)
File not assigned (Файлга am берілмеген)
File not open (Файл аіиылмаган)
File not open fo r input (Файл енгізу үшін аиіылмаган)
File not open fo r output (Файл жазу үшін аиіылмаган)
Invalid numeric form al (Сан форматы дурыс емес)
17.3.4 Дағдарысты қателер
Қате №
150
151
152
153
154
155
156
157
158
1
Аты
Disk is write protected (Диск жазудан сақталган)
Unknown unit (Белгісіз модуль)
Drive not ready (Дискенгізгіш "дайын емес" қалып күйінде)
Unknown command (Бейтаныс команда)
CRC error in data (Бастащы мәндерде қате бар)
Bad drive request structure length (Дискіден мәлімет аларда
құрылым ұзындыгы дұрыс көрсетілмеген)
Disk seek error (Дискіден оцитын цүрылгы бастарын дискке
орнату операциясы кезінде цате кетті)
Unknown media type (Тасымачдауыш muni белгісіз)
Sector notfound (Сектор табылмады)
298
159
160
161
І62
17.3.5
Printer out o f paper (принтерде қагаз бітті)
Device write fault (Құрылгыга жазу кезінде цате кетті)
Device readfault (Қүрылгыдан оқу кезінде цате кетті)______
Hardware failure (Аппаратура жұмыс істемей тур)
Фаталды қателер Бұл қаталер программа жұмысы-
ның бірден тоқталуын жүзеге асырады.
ҚатеМ
200
202
204
206
208
209
210
212
214
Аты
Division by zero (Нөлге бөлу)
Range check error (Шекраларды тексеру кезінде цате
шыцты)
Stack overflow error (Стек толып кетті)
Heap overflow error (Мэлімет толып кетті)
Invalid pointer operation (Көрсеткішпен орындалатын
белгісіз операция)
Floating point overflow (Жылжымалы нүктемен жұмыс
жасау кезінде мэндер берілген аймацтан шыгып кетті)
Floating point underflow (Жылжымалы нүктемен жұмыс
жасау кезінде реті бұзылды)
Invalidfloating point operation (Жылжымалы нүктемен
жұмыс жасауга болмайтын операция)
Overlay
|
жүйесі орнатылмаган)
Overlay file г
жіберілген).
Object not initialized (Объект инициалданбаган)
Call to abstract method (Абстракты ережені шацыру)
Stream registration error (Тіркеуге any агынында цате бар)
Collection index out o f range (Tгрілген индекс диапозон шека
расынан тыс жатыр)
Collection overflow error (Коллекция толып кеткен)
Бақылау сұрақтары
1. Turbo С біріктірілген программалау жүйесі цандай цызмет
атцарады жэне оның терезесі неше бөліктен тұрады?
2. Turbo С ортасында программа орындау цандай цадамдардан
түрады ?
3. Turbo С ортасы терезесін үлкейту/кішірейту үшін не істеу керек?
4. Turbo С ортасында программа теру үшін неше терезе пайдаланылады? Кеоекті терезеге цалай квшуге болады?
299
5.
Меню қатарына жэне ж умы с алабына ауысу үіиін не істеуге бо­
лады ?
|
6. File менюінің ішкі командалары қандай?
7. Файлды дискіге жазу/оқу үіиін қандай командалар мен пернелер
қолданылады?
8. Файлды басқаіиа атпен сақтау қалай орындалады ?
9. Edit менюінің ішкі командалары қандай цызметтер атқарады?
10. Turbo С терезесінде ерекіиеленген бөлікті буферге қалай қиып
(көшіріп) алады?
1. Курсор орналасқан жерге буфердегі ақпаратты қалай кірістіріп
қояды?
1'
.4
12. Turbo С терезесінде ерекшеленіп белгіленген бөлікті қалай өшіріп
тастайды?
13. Программа мэтіні ішінен тауып алуга ңажетті сөзді қандай
сүхбат терезеге жэне қалай енгізуге болады ?
14. Run менюінің іилкі командалары қандай қызметтер атқара алады?
15. Орнатычган параметрлерді қолдана отырып, редактор терезесіндегі екпінді программаны қай команда орындайды?
16. Options менюінің командалары қандай ?
1 7. Window (Тгрезе) меню командалары қандай қызметггіер атқарады ?
18. Программаны компиляциялауда шыққан қателер жайлы мэлімет
қалай алынады?
"
". 5 і
79. Программа орындалу кезінде шыгатын қателер қандай топтарга
бөлінеді?
' " jlF 5 v
k-y-Ш_.Ь
20. Қатені түзету жайлы нұсқауларды қайдан аяуга болады?
300
18. ПРОГРАММАЛАУ ТІЛДЕРІНІҢ ДАМУ ТАРИХЬІ
Компьюгердің машиналық тілінде жұмыс істеу программалаушының өте жоғары деңгейін талап етеді. Есептеу машиналарының бірте-бірте көбеюіне байланысты онымен қарымқатынас жасауды оңайлату қажеттілігі пайда болды. Біріншіден
істелген іс - компьютер жадын бөлу жұмысы автоматтандырылды
және машиналық командалар үшін адамға түсінікті белгілеулер
енгізілді. Осылаи паида болған компьютермен қатынасу тілі Ас­
семблер тілі деп аталды. Кейіннен көптеген тілдер дүниеге келіп,
олар уақыт талабына сай мүмкіндігінше жетілдіріліп отырылды.
Программалау тілдерін жасау жэне дамыту жұмысының
басында АҚШ-тағы атакты IBM фирмасы тұрды. Бұл фирма
кэсіби программалаушылардан баска да мамандарға алгебралық
формулалармен жұмыс істеуге дағдыланған ғылыми қызметкерлер
мен инженерлерге жеңіл қолдануга болатын компьютерлер
шығаруға тырысты.
1953 жылы Джон Бэкус компьютерлердің ІВМ-704 атты
нұсқасына арнап программалауцы оңайлататын жаңа тіл ойлап
шығаруды ұсынды1Осыган орай жаңа тілдің сөйлемдерін (операторларын) машиналык кодқа түрлендіретін программаны - трансляторды да жасап шығару керек болды.
Алдыңғы кезде мамандар Бэкустың жұмыс тобына үлкен
сенімсіздікпен қараған болатын, өйткені машиналық кодты
жетілдіру істерінің алғашқы үсыныстары айналасында, адам
тілінде сөйлейтін" компьютерлер болады деген эңгіме-сөз коп
болган еді.
Әйтсе де, FORTRAN (FORmula TRANslator — формулаларды
түрлендіргіш) деп аталган тіл 1957 жылдың сәуірінде дайын
болды жэне ол машина тіліне тек "формулаларды аударып" қана
қоймай, циклдерді ұйымдастыру істерін де автоматгандыра білді.
Бұл жүйенің табысы күткен мүмкіндіктен бірнеше есе асып
түсті, 1958 жылдын өзінде-ақ ІВМ-704 компьютерлеріндегі ма­
шиналык командалардың жартысынан астамы қолмен емес, осы
Фортран тілінің трансляторы арқылы алынды.
301
Негізінде, Фортран жаңа программалау кұралы емес, бұрынғы нақты машинаға көмекші ретінде, оны сату ісін арттыратын
мүмкіндіктің бірі ретінде ғана жасалған жұмыс болатын.
Бірсыпыра кемшіліктерінің болуына қарамастан, мысалы,
кейбір программалау идеологтары Фортранды "зердені тұйыққа тірейтін, синтаксис ережелерімен біріккен бұтақшалардың
тізбегі, оны оқып үйренуге тиым салу" керек деп шулағанымен,
бұл тіл көпшілікке кең таралып кетті жэне оны басқа машиналарға да икемдеп енгізу ісі жүргізіле бастады.
Икемдеу ісі (адаптация), Фортран тілінен басқа машина тілдеріне транслятор программалар жасау арқылы жүргізілді, әрине,
ол оңай іс емес болатын.
Дегенмен, программалау тарихында түңгыш рет програм­
маны жақсы қойылган тапсырма ретінде (Фортран тілінің
ережелерімен) жасау, "не жазарыңды білмейтін" тілде жазганнан
гөрі элдеқайда жеңіл, эрі арзан екенін корсете білді. Басқаша
айтканда, ешқандай программалаусыз-ақ есепті ықшам түрге
келтіріп, оны түсінікті етіп қоя білу де үлкен өнер саналып,
жоғары бага ала бастады.
Фортран тілі басқа да бір маңызды рөл атқарды: ол эртүрлі
компьютерлер бір-бірімен ортак тіл таба алатын тамаша қүралга
айналды.
Фортран бірнеше рет толықтырылып, өткен гасырдың сексенінші жылдарына дейін кең пайдаланылды. Сонан кейін оны
жаңа тілдер ыгыстыра бастады. Соңгы кездерге дейін ол АҚШтың Аэронавтика мен гарыштық зерттеулер жүргізетін ұлттык
басқармасының (NASA) компьютерлерге арналган программалар
жасайтын негізгі тілі болды. Оның эртүрлі нүсқалары осы кездерде де қуатты компьютерлер үшін есептеу программаларын жасау
мақсатында кең қолданылып келеді.
Фортранның осындай кенеттен ашылган қасиеттері, оның
эртүрлі компьютерлер үшін әмбебап тіл бола алатын мүмкіндіктері
программалау идеологтарын қарапайым ойын программаларын
жазудан босатып, оларды өмірдің кез келген кезеңінде пайдага
асатын "әмбебап, жақсы, қолайлы тамаша" тіл жасау ісіне бет
бүргызды. Оның үстіне трансляторларды жазатын олар емес,
басқалар екені етенеден белгілі еді.
302
Программа жасаушылардың "Ең жақсы - жақсының жауы"
деген ұранына қарамастан, Алгол (ALGOrithmic Language) деп
аталган жаңа тілді жасау ісі екі жылдан аса уақыт алды және ол
негізінен Европада ғана кең қолданыста болды. Бұл, сірэ, Европада да программалау тілдерінің мамандары бар дегенді дәлелдеу
үшін жасалган сияқты болды.
Алгол туралы белгілі информатик мамандардың бірі Грейс
Хоппер былай деген болатын: "Ол үлкен поэмага ұқсас: мате­
матика тұргысынан қарапайым, эрі түсінікті, бірақ практикалык
тұргыдан олай дей алмаймыз".
Осылай программалау саласындагы европалық аналитиктер тілдің эмебаптыгына көңіл бөлсе, біртіндеп компьютер
шыгарушылардың элемдегі көш басшысына айналган IBM фирмасы одан да мықгы тіл шыгаруга бет алды.
IBM фирмасы 1964 жылы PL/1 (Programming Language One
— Нөмірі Бірінші Программалау Тілі) тілін дүниеге келтірді.
Сол кездегі АҚІТІ мамандары осы тілді В программалау тілдерін
жасаушылар ойлап тапқан мүмкіндіктердің аскар шыңы болар
деп үміттенді. Солай болды да. Бұл тілге көптеген жаңалықтар
енгізілген еді.
Әйтсе де, супер эмбебап программалау тілдерін жасау идеясы
кір жугыш машинасы бар теледидар жасаган сияқты біраз жерде артық кетіп жатты, оның көптеген мүмкіндіктерін пайдалану
оңай болмады.
Программалау тілдерінің ең жақсысын жасаймыз деп зерделерін жұқартып жатқан теоретиктер жұмысы алаңдагы жалгыз
допты қуалаган футбол командасы тэрізді болды - солардың
жасаған тілін ең жақсы, эрі әмбебап деп айтсын деуге ұмтылган
жарысушылар күйінде жүрді.
Ал бұдан шыгатын жол бұрыннан-ақбелгілі болатын. Балаларга
арналган эңгімедегі "Хоттабыч шалдың" эрбір футболшыға бірбір доп сыйлаганы тэрізді эрбір тілдің өз қолданылу аясы болуы
керек еді.
Осындай "доптардың" алгашқысы қазіргі программалау
ісінің эжесі —Грейс Мюррей Хоппер атымен тыгыз байланыста
болды.
303
Жеті жасында-ақ Грейс суперпрограммалаушы қасиеттерінен белгі берді: ол үйіндегі барлық оятқыш сағаттардың қалай
істелгенін білмек болып бұзып, артынан жинай алмай қойыпты.
Екінші дүниежүзілік соғыс қызып тұрған кезде математика
докторы Грейс Хоппер АҚШ-тың соғыс-теңіз флотына кіріп, 1944
жылғы маусымда офицер атағын алады. Оның әскерде адмирал
шеніне дейін жеткенін айта отырып, программалау саласындағы
табыстарына токталайық.
Хоппер сол кездердегі "Марк-1" машинасына арнап прог­
рамма жазумен шұғылданған. Ол сегіздік санау жүиесінде жұмыс
істеген.
Бірде өзінің банктегі есебін анықгағысы келіп (математика
докторы үшін қиын мәселе), Хоппер өзінің банкге істейтін бауырынан көмек сұрайды. Банкир інісі Грейстің жазбаларын қарап
отырып, оның барлық есептеулерді сегіздік жүйеде орындағанын
көріп таң қалады. Ал банк болса, бұрынғыша ондық жүйені пайдаланатын еді.
Осы кездерден бастап, Хоппер машинамен адам тіліне
жақын тілмен катынас кұруға болатын мүмкіндіктерді зерттеумен айналыса бастайды. Оның еңбегінің нэтижесі ретінде А-1,
А-2, А-3, В-0, т.б. трансляторларды келтіруге болады. Бірак осы
трансляторлардың барлығында да қолданылган тіл адам тілінен
әлдеқайда алшақ болатын.
Грейс Хоппердің мақсаты агылшын тілінде жасалган про­
граммалау мүмкіндігін табу болатын.
Банк есептерімен болтан жагдай оның программалаудагы
жұмысын физиктерге арнаута немесе эмбебап программалау
тілдерін жасауга емес, қарапайым экономикалық есептерді шыгаруды жеңілдетуге арнаута бет бұргызды.
Осы жобага байланысты болган жайтгардың барлык бүгешігесіне тоқгамай-ақ, тек Хоппердің согыс-теңіз флотымен байланысы арқасында оның АҚШ әскери министрлігін қолданбалы
іс жүйесінде пайдаланылатын тілдермен айналысуга көндіргенін
айту жеткілікті. Ол кезде бұл министрліктің қол астында көбінесе
экономикалық есептеулермен айналысатын мыңнан аса эртүрлі
компьютерлер бар болатын.
304
Осының нәтижесінде 1959 жылы жаңа тіл жасау комитеті
құрылды. 1960 жылдың сәуірінде сол комитет тілдің сипаттамаларын құрастырып, жариялаған болатын. Ал сол жылдың аяғында
бірнеше фирма бұл тілдің трансляторларын да жасап үлгерді.
COBOL (СОттоп Business Oriented Language — бизнеске
арналған әмбебап тіл) тілі бірден Американың іскерлері ортасынан өз бағасын алды. Эрине, программалау ісінің мықтылары
оны көп сөзді жэне өте көлемді деп санайды, бірақ онда ағылшын
тілінің қарапайым сөздері қолданылатындықтан, программа коды
түсінпеп
ды.
Бүгіннің өзінде, шыққанына жарты ғасырдан асса да, ол элі
қолданыс табуда. Бұл тілде жазылған программалардың жалпы
бағасы 50 млрд доллар шамасында деп саналады. Экономикалык
есептер шығарудағы оның тиімділігі элі де жоғары деңгейде. Ко­
бол тілінің негізінде казіргі кездегі мәліметтер базасымен жұмыс
істеуге арналған Clarion тілі жасалып шықты.
Егер алгашқы программалау мамандары тіл жэне оган транс­
лятор жасау жұмыстарын бөле жарып қарамайтын болса, кейіннен
теоретиктердің күш салуы арқасында бұл екі жұмыс бір-бірінен
ажыратылды да, теоретиктерге де арнайы жұмыс табылды. Тілді
біреулер жасап, трансляторларды басқалар жазатын болды.
Дегенмен компьютер тұтынушылары үшін программаларсақталганы дұрыс
багалы
Мысалы. біп типтегі компьютерлерге арналып
программалар басқа компьютерлерде де жақсы жұмыс
істеуі тиіс.
сипаттамаларын
тугызды, ойткені кейіннен оларга арнап басқа фирмалар
трансляторлар
үш багытта жүмыс істеуге
тура келді:
1. Тілді жасау.
2. Тілдің стандартын анықтау.
3. Программалау тіліне транслятор жазу.
Оның үстіне ақпарат өңдеуге арналган адамзаі
эр саласының өз программалау тілі болганы дұрыс
20-1660
305
дәлелдеді (міне, эр ойыншыға бір-бір доп деген осы шығар), мы­
салы:
'
%
- қолданбалы іскерлік аймақтарга арналған тіл (COBOL);
I ғылыми-техникалық есептерге арналған тіл (FORTRAN);
- кестелерді өңдеуге арналған тіл (APL —A Programming Lan­
guage - программалау тілі - жай гана атау);
- металл өңдеуге арналған қондырғыларға (станоктарга)
арналган программалау тілі (APT —Automatically Programmed
Tools —автоматты түрде программаланатын аспаптар);
- мамандардың айтуы бойынша, ми жұмысын модельдейтін
жэне жасанды зерде (интеллект) жасауга болатын тіл (IPL —Infor­
mation Processing Languages - ақпарат өңдеу тілдері);
- әмбебаптықтан да аздап үміті бар, нақты уақыт режимінде
жұмыс істейтін объектілерді басқару тілі (ADA);
- жедел жадтан өте аз орьш алып, барынша жылдам істейтін
программалар алуга мүмкіндік беретін жүиелік программалаушыларга арналган "орта" деңгейдегі тіл (C/C++);
- нақты уақыт режимінде жұмыс істейтін "сындарлы" (критикалық) есептерге жэне борттагы компьютерлерге арналган тіл
(FORTH);
; '•
;ь ■ л..,,
- программалауды үйренуге арналган тіл (PASCAL);
- студенттерге арналган программалау тілі (LOGO);
- программалауды үйренуге қабілеті болмаса да, өте программадагысы келетіндерге арналган тіл (BASIC), тагы да сол
сияқгы жалгасып кете береді.
АҚШ әскери министрлігінде өткен гасырдың 70 жылдары
450-дей жогары деңгейдегі тілдер мен солардың диалектілері
қолданыста болганын айту жеткілікті шыгар. Осы жайт әмбебаптықтан үміткер ADA тілінің шыгуына себепкер болған.
Компьютерлердің қуаты артқанмен, олардың багалары те­
ракты түрде төмен түсіп жатқан заманда, программалаудың
мыкты теоретигі Эдсгер Дийкстра айтқандай, трансляторлар
көптеген "ысқырықгар мен сылдырмақтармен" толыктьфылып,
жаңа мүмкіндіктерге ие болып жатыр. Сол сылдырмақтар мен
ысқырықтар программалаушылардың жап-жақсы өмірін одан да
көріктендіре түспек. Ол қандай болмақ —бұл жагынан пікір айтушылар аспан мен жердей алшақтықпен айтысып келе жатыр.
306
Программалау тілдері туралы ой өрбіткенде, құрылымдық
программалау идеологиясы жайлы айтпауға болмайды, бұл
идеологияны алғаш ұсынған да сол Дийкстра болатын. Осы
құрылымдык программалау ұгымы оқулыгымыздың негізінде
жатыр. Ал Паскаль тілінің конструкциясы Дийкстра ұсынган,
қазіргі кездегі кең қолданыста жүрген барлық процедурага
багытталган құрылымдық тілдердің ядросы болып саналады.
Жақсы ұйымдастырылган құрылымдық тілдердің басты белгісі
- онда GOTO операторының, ягни шартсыз басқаруды беру
операторының болмауы немесе оның сирек колданылуы болып
есептеледі.
Дийкстра программаларда нақты математикалық логикалык
құрылымның жоқ екеніне көңіл оөліп, зерделі мамандардың жиі
қайталайтын пікіріне көбірек назар аудару қажеттілігін басып
айтқан болатын. Оның идеяларын жүзеге асыра отырып, ГОМ
фирмасы "Нью-Йорк таймс" газетінің мәліметтер банкін жасау
кезінде жұмыс багасының әжептеуір арзандаганын жэне оны
орындау мерзшшщ де оіраз қысқарганын анықтады.
Бір қараганга өте қарапайым көрінетін Дийкстраның осы идеясының өзі көптеген елдерде миллиардтаган долларды үнемдеуге
көмектесті. Қазіргі кезде жогарыдан томен қарай жүргізілетін
құрылымдық багыттагы жобалауды жүзеге асыра алмайтын
бірде-бір программалау тілі қолданысқа кіріп, өмірден өз орнын
таба алмайды.
Сонымен, жүйелік программалау маманы Харлан Миллс
айтқан: "Ғарыш кемелерінің ұшуының өзі де құрылымдық программалауды пайдаланбай жүзеге асқан деп ойламаймын", - деген
сөзінде шындық бар.
Pascal тілі де құрылымдык программалау тәсілдерін үйрететін
оқыту құралы гана болуга тиіс еді. Бірақ бірсыпыра себептерге
байланысты ол бұл аядан шығып, әлемдегі ең негізгі тілдердің
біріне айналды.
Құрылымдық программалау тілдері табиги тілдің сөздерін
және грамматикасын кеңінен пайдалану жолымен дамыды,
бірақ оның негізінің түп тамыры болатын программалаудың
процедуралық стиліне тиіскен жоқ. Осы процедуралық стиль
сөзі компьютердің командаларды атқарушы рөлінде болатынын
307
және оған нэтиже алуға қажетті барлық әрекеттер (процедуралар) тізбегін толык эрі дэлме-дэл сипаттап беру керек екендігін
бідціреді. Оған коса, компьютердің фон-Нейман архитектурасынын өзі де оларды қуатты, бірак ақылсыздау робот ретінде
карастыруды ұсынады.
1972 жылы шотланд ғалымы РКовальский осындай мүмкіндігі бар тіл ретінде түжырымдамалар және олармен орындалатын операцияларды өңдей алатын математикалық логика тілін
жетілдіріп пайдалануды ұсынды. Бұл идеяны Франция, Португа­
лия, Ресей, т.б. елдердің галымдары жалпы түрде қарастырып,
практикалық түрде жүзеге асырмақшы болды.
Осындай максатта жасалган программалау тілі PROLOG
(французша — PROgramming et LOGicque) деп аталды. Оны
жасауга жэне дамытуга жаңа гылыми багыттын накты түрдегі
корьп ындысы (прологы) ретінде пайда болган логикалык про­
граммалау ғылымы үлес косып келеді.
Логикалык программалау компьютер есепті адам сиякты жолмен шыгаруы керек деген ойды негізге алады. Логикалык профу
фу
I раммалау деп аталады.
Функционалдык программалаудың алғашқы тілі 1960 жылдардыи басында шыккан L1SP тілі болып табылады. LISP сөзі ағылшынның LISt Processing деген сөз тіркесінің кыскартылган
нүсқасы. Бүл да кең гаралган тілдердің бірі. Ол жасанды зерде
мэселелерін шешу жолында, әсіресе АҚШ-та көп қодцанылады.
Казіргі кезде компъютерлердің көбісіне арналган LISP тілінің
бірнеше нұсқалары бар. Бірак бұл тіл функционалдык профаммалаудың жалғыз f ана кұралы емес. Оган ұксас тілдерге Miranda,
Hope, ҒР тілдері жатады.
Өткен ғасырдын 80-жылдары программалауда тағы да бір
жаңа агым пайда болды. Енді компьютерге бастапкы мэліметтер
мен нэтиже арасында байланыс орнату ісі жүктелді. Біз компью­
терге ол жұмыс істеуге тиіс объектілер сипаттамасын енгіземіз,
ал компьютердің өзі сол объектілердің калай байланысқанын
анықгауы керек болды.
?
308
Объектілер қасиеттерін сипаттаудың осы түрі объектіге
бағытталған программалау деп аталды. Объектіге бағытталған
программалау тілдеріне C++ жэне Smalltalk тілдері жатады.
Бұлардың бэрі бүгінгі күн тұргысынан туындаған көзқарастар
болатын. Ал тарихи тұрғыдан объектіге багытталган программа­
лау компьютердің мүмкіндіктерінің жетілдірілуі мен ол шыгара
алатын есептер аймагының кеңуі арқасында пайда болды.
Алгашқы программалау тілдері тек бір санды гана өңдей ала­
тын еді. Ал сан жиымдары цикл арқылы өңделетін.
Кейіннен машина бір оператор арқылы жүздеген жэне мыңдаган сандарды коса алатын, жиым ішінен максимумын табатын,
оларды реттейтін, т.с.с. мүмкіндіктерге ие болды Сандар жиы­
мы, программалаушы тұргысынан Караганда, эртүрлі амалдар
орындауга болатын бір гана объект түрінде қарастырылатын кезге жеттік.
Бірак нақты өмірде біз тек сандык ақпаратпен гана жұмыс істемейміз. Мысалы, студентті тек оның жасы емес, аты, фамилиясы,
тобы, үй адресі, т.б. сипаттайды. Әртүрлі типтегі мәліметтерді
біріктіріп, мәліметтер қүрылымын алуга мүмкіндік (қажеттілік)
туды. Осындай эрбір кұрылымды біртұтас күйде өндеуге бола­
тын болды.
Осындай кұрылымдар олармен орындауга болатын эрекеттермен бірге сипаттауга арналган жасанды тіл объектілері мен
олардыц қасиеттері атауларынан тұрады. Мұндай қасиеттер компьютерге осы объектілерді қалай түрлендіруге болатындыгы жай­
лы сигнал береді. Бұл тілде программалау объектілерді сипаттау
жэне бастапқы мәліметтер мен нэтижелерді осындай обьектілерге
құрылымдау ісіне келш тіреледі.
Құрылымдар мен объектілердің күрделілігін, практикалық
тұрғыдан алганда, шектеусіз арттыру ісі (мысалы, құрылымдар
объектісі болатын жаңа объект жасау ісі) ақпараттың өте үлкен
көлемімен жүмыс істеуге мүмкіндік береді. Сол себепті компьютерлер де күннен-күнге күрделіленіп келе жатқан есептерді
шыгаруга пайдаланылып келеді.
309
Бақылау сұрақтары
1. Программалауды оңайлататын жаңа тіл ойлап шышруды алгаіи
рет кім үсынды ?
2. Фортран mini қай жылы іиықты жэне оның ерекіиелігі қандай бол­
ды? Алгол, PL/1, Кобол тілдері ше?
3. Программалау тілдерін жасауды стандарттау қажеттілігі неге
байланысты туындады?
4. Грейс Хоппердің программалау саласындагы еңбектері.
5. Программалау тілдерінің саны неге кэп болып кетті?
6. Құрылымдъщ программалау тілдерінің ерекшелігі неде?
7. Программалау теоретигі Эдсгер Дийкстра қандай багытты
ұстану қажеттілігі туралы айтты?
8. Обьектіге багытталган программалау тілдері қандай болады?
310
ҚОЛДАНЫЛҒАН ТЕРМИНДЕРДЩ ТҮСІНДІРМЕЛІК СӨЗДІГІ
A S tlI-кодтар (American Standart Code for Information Interchange) - символдсф кодтарының негізі болып табылатын америкалық кодтар стандарты
Айнымалы - программа орындалуы барысында өз мэнін өзгерте алатын
объект
Айнымалылар - идентификаторлармен белгіленіп, программаның орында­
лу барысында әртүрлі мэндерді қабылдай алатын шамалар
Айнымалын ың қасиеттері:
1) кез келген сэтте айнымалының белгілі бір мэні болады немесе ол
анықталмаған болып есептеледі;
2) айнымалыға соңғы берілген мэн оның алдыңғы мэнін өшіріп
жібереді.
3) айнымалыны таңцау (оқу) жэне оны пайдалану айнымалының
мәнін өзгертпейді
Айнъшалылардың әрекет ету аймагы - программаның ағымдағы эрекеттеріне кандай мәліметтердің қатынасуға болатынын аныктау аймағы
Айыру белгілері - бос орын, барлык басқару символдары, ENTER (келесі
жолға көшіру) пернесін басу белгісі жэне түсініктемелер
Алгоритм - алға қойған мақсатқа жету немесе берілген есепті шешу бағытында атқарушыға біртіндеп қандай әрекетгер жасау қажеттігін эрі түсінікті
әрі дәл етіп көрсететін нұсқаулар жиыны
Алгоритм - берілген есептің шығару жолын реттелген амалдар тізбегі
түріне келтіру
Алгоритм - берілген мәндерді пайдаланып қажетті нэтижеге жетуді жүзеге
асыратын әрекеттердің орындалу ережесі
Алгоритм атқаруиіы - көрсетілген іс-эрекеттер тізбегін бұлжытпай
орындай отьфып, керекті нэтиже алуды жүзеге асыратын машина, кұрылғы
немесе адам
Алгоритмді өрнектеу түрлері:
1) табиғи тіл арқылы жазу;
2) белгілі бір түйінді сөздер - терминдер (псевдокодтар - жалган код­
тар) аркылы қыскаша тізбекті түрде жазу (қарапайым алгоритмдік
тілде);
3) график жолымен (блок-схема арқылы) жазу;
4) программалау тілдерінде жазу
Алгоритмдік тіл немесе программалау mini - жазу ережелері қарапайым
болып келетін жасанды тіл
Алгоритмнің қасиеттері:
1) алгоритмнің айкын, дәл өрнектелу қасиеті;
2) алгоритмнің үздіктілік қасиеті;
3) алгоритмнің нәтижелілік қасиеті;
4) Алгоритмнін жалпылық немесе ортақтық қасиеті
311
I
Алгоритмыің формалды орындалуы —орындаушы алгоритм командаларын
орындай отырып, өзі атқарып отырған істің мән-жайына көңіл аудармай,
әрекеттерді ретімен атқара отырып, белгілі бір нәтиже алуы
Атқаруиіының командалар жүйесі —алгоритм атқарушы орындай алатын
командалар жиыны
Ауыстыргыіи оператор (switch) —бершген өрнек мәні бойынша програм­
мада кездесетін бірнеше нұсқаның бірін таңдап алуға мүмкіндік беретін
шартты оператор
Басқару операторлары —шартсыз жэне шартты көшу операторлары, цикл
(қайталау) ұйымдастыру операторлары
Басцару тізбектері —мәліметтер енгізу мен шығаруда қолданылатын ар­
найы символдар тіркесі (C/C++ тілінде)
Бейнемонитор (немесе дисплей) —электрондық сәулелік түтікшеден не­
месе сұйык кристалды тақтадан тұратын мәтін жэне графикалык бейнелер
шығарылатын компьютер құрылғысы
Бос оператор - ешқандай да әрекеттің орындалмайтынын көрсететін
оператор
'ирт синтаксистік диаграммасы — тіл ережелерін графикалық түрде
бейнелейтін синтаксистік диаграмма (Н. Вирт көп қолданған)
Драйверлер - дербес компьютерлердің техникалық құрылгыларын басқаратын арнайы программа
Енгізу/иіыгару операторы —адам мен компьютер арасында мәлімет алмасу
мақсатында алдын ала анықталған printfQ, scanfO функцияларын ( С тілінде) колданып, берілген мэндерді пернетактадан енгізіп, алынған нәтижені
дисплей экранына шыгару операторлары
Жиым (массив) - бір атаумен белгіленіп, реттеліп біріктірілген бір типтегі
мәліметтер жиыны
Идентификатор - міндетті түрде әріптен басталатын сандар мен әріптер
(астын сызу белгісінің де) тізбегі
Көгиу (немесе шартсыз көшу) операторы - операторлардың рет-ретімен
орналасуын бұзып, келесі атқарылуды белгісі бар жолға беру операторы
Қабатталган циклдер - бір цикл тұлгасы ретінде (цикл ішінде) басқа
циклдік құрылым тұратын күрделі циклдерді ұйымдастыру тәсілі
Қолданушы функциясы - белгілі бір ат қойылып, жеке программа түрінде
бөлек жазылған, қажет кезінде оны қайталап пайдаланып отыруга болатын
негізгі программаның арнайы бөлігі. Осындай алдына ала ат қойылган
командалар тобын программаның кез келген жерінен оның атын корсету
арқылы шакырып орындауга болады
Құрама оператор - бір-бірінен нүктелі үтір арқылы бөлінген бірнеше
операторларды { жэне } таңбаларымен (С тілінде) шектей отырып, оларды
бір оператор тэрізді орындалатын етіп біріктіру жолы
312
Құрылымдар - С тіліндегі өзара логикалық байланысқан эртүрлі типті
мэліметтерді байланыстыру
Құрыльшдық операторлар - басқа операторларды белгілі бір ережелер
бойынша біріктіру жолымен құрастырылған операторлар тобы. Олар үш
топқа - кұрама, шартты жэне қайталау операторларына жіктеледі
Логикалық амалдар:
AND
- жэне (логикалық көбейту);
OR
- немесе (логикалық қосу);
NOT
- емес (терістеу немесе жоққа шығару);
XOR
- арифметикалық немесе амалы;
Машинага багытталган тілдер компьютердің ерекшеліктерін есепке ала
огырып әріптерді де пайдаланатын тілдер
Мәлімет енгізу - бастапқы мәндерді пернетақтадан, днскілерден немесе
енгізу-шығару поргтарынан оқу аркылы жүзеге асыру
Мәліметтер - белгілі бір процесс көмегімен тасымалдап, өндеуге болатын,
формальды түрде бейнеленген фактілер мен идеялар
Мәліметтер - сан мәндерін, мэтін ретіндегі сөз тіркестерін де мэн ретінде
қабылдай алатын тұрактылар (константалар), айнымалылар, тағы осылар
тәрізді кұрылымдар немесе солардьщ адрестері
Меншіктеу операторы - жазылған өрнектердің мэнін есептеп, оны айнымалыға (функцияға) беру операторы
Нақты сандар —аралас сандардың бүтіні мен бөлшегін нүкте (немесе Е)
арқылы бөліп жазу тэсілі
Нэтиже алу (иіыгару) —аралық немесе қорытынды мәліметтерді экранға,
дискіге немесе енгізу-шығару порттарына жазу
Нұсқауыш - С тіліндегі мәліметтердің адресін сактайтын айнымалы, яғнн
адрестін символдық түрде кескінделуі
Оператор - операциялар мен мәндерді көрсететін немесе солардың элементтерінің қай жерде орналасқанын білдіретін символдар жиьшы
Оператор - программалау тілінің белгілі бір іс-эрекетгі орындай алатын
тиянакты мағынасы бар ең қарапайым сөйлемі
Операциялар немесе амал-әрекеттер — берілген, есептелген мәндерді
меншіктеу, соларды өңдеу, салыстыру істерін орындау
Өрнек — арифметикалық немесе логикалық амалдар таңбасымен біріктірілген айнымалылар, атаулар, функциялар, жиымдар тағы да басқа
мағынасы бар сөздер тізбегі
Параметрлі цикл операторы (for) — параметр өзінің алғашқы мәнінен
соңғы мәніне дейін берілген қадаммен өзгеру барысында циклге кіретін бір
немесе бірнеше әрекеттерді кайталап орындау ісін атқаратын оператор
Паскаль т ш - 1968-1971 жылдары Швейцарияда профессор Никлаус
Вирт жасап шығарған оқып үйренуге қолайлы программалау тілі
313
Пиксель - экранный адрестелетін ең кіші элементі
Проблемага багытталган тілдер шығарылатын есептердің ерекшеліктерін
еске ала отырып, есептің математикада жазылу тіліне жақындастырылған
тілдер
Программа - алгоритмді машинаға түсінікті нұскаулар тізімі ретінде жазу
Программалау тілінің түйінді сөздері - бір-бірімен айыру белгілерімен
бөлініп, программада алдын ала анықталған белгілі бір мағынасы бар сөз
тіркестері
тілдерінде
құрастырып, оны орындауға мүмкіндік
Процедура - программадағы бірнеше операторларды олардың бастапкы
параметрлерін өзгерте отырып, бірнеше рет қайталап орындауды жүзеге
асыратын қосалқы программалар түрі
Рекурсия - процедура немесе функция операторларының орыкдалуы
барысында оның өзін-өзі, яғни осы қосалқы программаның өзін өзінің ішінде
пайдалану тәсілі
С - программалық жабдықтамалар жасауға және эртүрлі есептер шығаруға
арналған құрылымдық программалау тілі
Стандартты функциялар - жиі кездесетін математикалық жэне басқа да
функциялардың программалау тілінін ішкі объектісі ретінде берілуі
КҰРЫ
бірінен кейін бірі орындалып тізбектеле орналаскан
бірнеше эрекеттер (операторлар) жиыны
^
^
^
*
W
W
*
^
^
Ш
Ш шЖ
т ш
w
^
^
^
• •
тт
^
^
•
шт т а
«
і
м
г
•
% |
Таңдау операторы (switch) - бірнеше тармақты операторлардың ішінен
берілген өрнекгің мэніне байланысты біреуін таңдауды жүзеге асыратын
оператор
Тармақты құрылым - шартқа байланысты екі оператордың бірінің орындалуы
Тип (мэліметтердің немесе іиамалардыц типі) - программалау оюъектілерінің қабылдай алатын мәндерінің жэне солармен орындауға болатын
амалдардьщ жиыны, яғни шамалардың қабылдайтын мәндеріне берілетін
сипаттама
Транслятор - программалау тілін машина тіліне аударатын программалар
тобы
Тұрацты (немесе константа) - программаның орындалу барысында
мәндері өзгеріссіз қалатьш шамалар
Тілдіц әліпбиі - программаның элементтерін құруда қолдануға болатын
символдар жиыны
Тілдің қарапайым объектілері - сан, идентификатор, константа, айнымалы,
функция, өрнек ұғымдары
314
Тіркестік (жолдық) константа - С тіліндеп қос тырнақшаға алынған сим­
волдар жиыны
Тірке&пік айнымалы - мэн ретінде апострофтармен қоршалған сөз
тіркестерін қабылдайтын айнымалы
Тіркестік өрнек - амал белгілері, тіркестік тұрактылар, айнымалылар жэне
функция атауларынан кұралган, ұзындыгы 256 символдан артпайтын сөз
тіркестерінен құралған тізбек
Файл - сыртқы есте сақтау кұрылғыларында (магнитгік дискілерде)
орналастырылған жэне мэлімет өңдеу, тасымалдау кездерінде біртұтас
күйде қарастырылатын мәліметтер жиыны
Файл (file) - магниттік дискілерде тізбектеле орналасқан жеке элементтерден тұратын белгілі бір ат койылған ақпараттар тобы.
Функция - жұмыс нәтижесінде бір ғана мэнді анықтайтын қосалқы прог­
раммалар (операторлар тізбегі) түрі
Цикл —белгілі бір шарт орындалса (кейде орындалмаса), көрсетілген командалардың бірнеше рет қайталанып апгқарылуы немесе шарт көрсетілмейақ алдын ала олардың неше рет қайталанатынын бүтін санмен беру
Цикл - операторлар бөлігінің бірнеше рет қайталана орындалуы
Шартты оператор (if) - тармақгалу процестері бар алгоритмдерді ұйымдастырагын, белгілі бір шарттың орындалуы немесе орындалмауына байланысты екі мүмкіндіктің бірін таңдау операторы
Шартты операция (? :) - берілген шартқа байланысты эртүрлі мэн
қабылдай алатын шартты өрнектер құратын үшорынды операция (C/C++
тілінде).
Шартын алдын ала тексеретін цикл операторы (while) - орындалар
яттпынпя қайталану шартының мэні есептеліп, соның ақиқат/жалған
болуына байланысты циклді ұйымдастыру операторы.
Шартын соңынан тексеретін цикл операторы (do..while) - цикл тұлғасы
орындалғаннан кейін қайталану шартының мәні есептеліп, соның ақиқат/
жалған болуына байланысты циклді ұйымдастыру операторы.
315
ҚОЛДАНЫЛҒАН АТАУЛАРДЫҢ
ҚЫСҚАША ОРЫСША-ҚАЗАҚША СӨЗДІГІ
А
Аргумент заданный по умолчанию Келісім бойынша берілген аргумент
Арифметикалық амалдар
Нұсқауыштар арифметикасы
Арифметические операции
Арифметика указателей
Б
Библиотека
В
Ввод
Ввод данных
Ввод текста
Вывод
Вывод данных
Вывод текста
Выражение сравнения
Данные
Двоичный поиск
Двоичное число
Динамическая память
Динамическое распределение
памяти
Документация
з
Кітапхана
Енгізу
Мэліметтерді енгізу
Мәтінді енгізу
Шығару
Мәліметтерді шығару
Мэтінді шығару
Салыстыру өрнегі
Мэліметтер
Екілік түрде іздеу
Екілік сан
Динамикалық жады
Жадты динамикалық түрде бөлу
Құжаттама
2 д ЩВ
Знаки
И
Инициализация
Интегрированная среда
Таңбалар
Бастапқы мэн беру, инициалдау
Біріктірілген (интегралданған) орта
Айнымалы атауы
Именование переменной
К
Классы памяти
Ключ
Ключевое слово
Ключевые понятия
Конкатенация строк
Константы с плавающей точкой
Константы символьные
Константы целочисленные
Жады кластары
Кілт (кілтипан), түйін
Түйінді (өзекті) сөз
Өзекті ұғымдар (түсініктер)
Сөз тіркестерін біріктіру
Жылжымалы нүктелі тұрақтылар
Символдық тұрақтылар (конс­
танталар)
Бүтін тұрақтылар
Л
Логика
Логические выражения
Логика, қисын
Логикалық өрнектер
316
м
Массив
Массив двумерный
Массив динамический
Метод
Жиым
Екіөлшемді жиым
Динамикалық жиым
Тәсіл, эдіс
Н
Наследование
Мұралау
О
Оборудование
Область имен
Объединение
Объект
Объектно-ориентированное про­
граммирование
Операция декремента (—)
Операция инкремента (++)
Жабдық
Атаулар аймагы
Біріктіру
Объект, нысан
Объектіге багытталган программалау
Декремент 1-ге кеміту) операциясы (—)
Инкремент (1 -ге арттыру) операциясы
(++)
Операция приведения типов
Оператор присваивания
Оператор составной
Оператор цикла
Оператор цикла с предусловием
Оператор цикла с постусловием
Опертор выбора
Оператор условный
Освобождение памяти
Основание
Основание системы счисления
Основной тип
Отношение
П
Память автоматическая
Память статическая
распределение памяти
Переменная автоматическая
Переменная внешняя
Переменная временная
Переменная глобальная
Переменная локальная
Переменная ссылочная
Перестановки
Перечисления
Типтерді келтіру операциясы
Меншіктеу(тағайындау) операторы
Құрама оператор
Цикл операторы
Алгы шартты цикл операторы
Соцгы шартты цикл операторы
Тавдау операторы
Шартты оператор
Жадты босату
Негіз
Санау жүйесінің негізі
Негізгі тип
Қатынас
Автомапы жады
Статикалық жады
жадты бөлу (үлестіру)
Автоматты айнымалы
Сыртқы айнымалы
Уақытша айнымалы
Аукымды (жалпылама) айнымалы
Жергілікті айнымалы
Сілтеме айнымалысы
Орын ауыстыру (апмастыру)
Тізбелер
317
Последовательность
Преобразование
Преобразование типов данных
Приведение типов
Приоритет операции
Присваивание
Программа
Программа вложенная
Программа линейная
Программа разветвленная
Программа циклическая
Программирование
Программное обеспечение
Программная систем
Тізбек
Түрлендіру
Мәліметтер типтерін түрлендіру
Типтерді келтіру
Амалдар үстемділігі (приоритеті)
Меншіктеу, тағайындау
Программа (бағдарлама)
Қабаттасқан (кіріктірілген) программа
Сызықтық программа
Тармақталған программа
Циклдік (қайталау) программа
Программалау
Программалық жабдықтама
Программалық жүйе
Р
Рекурсия
С
—^
Случайные
Символ новой строки (\п)
Символ константы
Символические
Сстема счисления
Сортировка
Составной тип
Сравнение строк
Ссылка
Л
Строка
Строковая переменная
Структура
Т
Таблица
Тип данных
Тип данных без знака
Тип данных основной
Тип данных с плавающей точкой
Тип данных символьный
Тип данных целочисленный
Рекурсия, функцияның өзін-өзі
шақыруы
Кездейсоқ
Жаңа жолға көшу символы
Тұрақты символы
Символдық
Санау жүйесі
Сұрыптау, іріктеу, реттеу
Құрама тип
Тіркестерді салыстьфу
Сілтеме, сілтеу
Тіркес, сөз тіркесі
Тіркестік айнымалы
Құрылым
Кесте
Мәліметтер типтері
Таңбасыз мәліметтер типі
Негізгі мәліметтер типі
Жылжымалы нүктелі мәліметтер типі
Символдық мәліметтер типі
Бүтін мәліметтер типі
318
У
Указатель
Указатель на функцию
Управляющие
последовательности языка С
Установка
Установочные параметры
Ф
Форматирование
Функция определенная
пользователем
Функция со многими аргумента­
ми
Функция сравнения
ц
Целочисленная константа
Цикл
Цикл вложенный
Цикл с параметром
Ч
Число с плавающей точкой
Число с фиксированной точкой
Число шестнадцатеричное
Число восьмеричное
Нұсқауыш
Функцияға нұскауыш
С тілінің басқару тізбектері
Орнату (тағайындау)
Тағайындау параметрлері
Пішімдеу, форматтау
Тұтынушы анықтаған функция
Коп аргументті функция
Салыстыру функциясы
Бүтін мэнді тұрақгы
Цикл, қайталау
Қабаттасқан (кіріктірілген) цикл
Параметрлі цикл
Жылжымалы нүктелі сан
Бекітіпген (тұракты) нүктелі сан
Он алтылық сан
Сегіздік сан
Ш
Шаг цикла
Цикл қадамы, адымы
Я
Язык программирования
Программалау тілі
319
С ТІЛІНДЕ ПРОГРАММАЛАУДАН ТЕСТ СҮРАҚТАРЫ
1. Идентификатор дегеніміз не?
1) программадағы объектінің аты
2) динамикалык жады
3) жиыннан тұратын массив
4) программаның берілу жолы
5) компиляторға арналған сөздер
2. Символдық типтегі шамаларга компилятор жадында канша
байт орын бөлінеді?
1)1
2)2
3 )1 0
4 )8
5) 27
: ' '
:
3. Жиым (массив) дегеніміз не?
1) ұяшықтарда орналасқан мәліметтер
2) бір атаумен аталған бір типті мәндер тізбегі
3) өлшемді анықтайтын тип
4) динамикалық жадыны пайдаланатын көрсеткіш
5) сілтемені анықтайтын типтер жиынтығы
4. Қандай да бір әрекеттер гізбегін орындайтын операциялар мен
сипаттамалардың айқындалған тізбегін ... деп атайды.
1) процедура
•
І'
« Ш ІІІІІ|
.>і1
2) рекурсия
3) функция
4) дұрыс жауап жоқ
5 )1 ,2
*•••■ ’ :
5. Фуикцияиыц сипаттамасы басыидагы параметрлер қалай ата­
лады?
1) формальды
2) фактілі
3) аргумента
4) 2,3 жауап дұрыс
5) дұрыс жауап жоқ
6. С тілінде кез келген программаның орындалуы қай функциядан
басталады?
1) random
2) main()
3) randomizeO
4) clrscrO
5) Әр программада эртүрлі
320
7. Өзін-өзі шақыратын функцияны не деп атаймыз?
V 1) процедура
2) функция
3) рекурсия
4)1Д
5) дұрыс жауап жок
8. Кітапханалык функциялар қайда орналасқан?
1) кітапханалық файлдарда
2) С ішінде
3) компьютерде
4) дұрыс жауап жоқ
5) интернетте
9. С әліпбиі:
1) араб цифрі: 0-9
2) арнайы белгілер
3) түйіңді сөздер
4) операциялар таңбалары
5) барлығы дұрыс
10. Латын әріптерінен, цифрлардан тұратын тек әріптерден басталуы тиіс тацбалар тізбегін ... деп атайды.
1) тұрақты
2) айнымалы
3) идентификатор
4) дұрысы жоқ
5) функция
И . а[3] = {13-.5} жиымы берілсіи делік. Осы жиымды экранға
шығаратын программаны көрсетіціз...
1) int і, a[3] = {1,3,5};
for(i=0;i<3;i++)
printf(" %d",a[i|);
2) int a[3] = {1,3,5), i;
for(i=0; i<3;i++)
printf(" %f*,a[i]);
3) int a[i]= {1,3,5}, i;
for(i=0;i<3,i++)
printf (" %k",a[i]);
4) int a[3], i;
for(i=0;i<3;i-H-)
printf(" %i",a[i+l]);
5) int a[3], i;
21-1660
321
for(i=0;i<3;i++)
printfC' %c",a[i]);
,f l
12. С тілінде түрақтыларды сипаттау үшін кандай түйінді сөз
қолданылады?
1)ы
'
Ш
I
2)var
'
й
3) const
4) procedure
5) дұрысы жоқ
13. return (өрнек) операциясынын қызметі:
1) функцияны шақырған операторға өрнектің мәнін қайтарады
2) С тілінде ондай оператор қолданылмайды
3) функция мэн кайтармаған кезде қолданылады
4) программаға эсемдік береді
5) қызметі анықталмаған, заң бойынша программа соңында түруы ке­
рек
14. randO функциясының такырыптық файлда орналасқан про­
тотип! қандай?
1) <math>
'
2) <string>
3) <stdlib>
4) <cmath>
5 ) rand
,
15. Функцияның ішінде ғана белгілі, сонын ішінде анықталатын
айнымалы қалай аталады
1. ауқымды (глобальді) айнымалы
2. жергілікті айнымалы
3. белгісіз айнымалы
4. белгілі айнымалы
5. рекурсивті айнымалы
16. Егер float пен double типтері араласса, нәтиж есі... болады;
1. float;
2. long;
3. double;
4. int;
5. short;
17. Кез келген блоктан немесе функциядан тыс хабарланған айны­
малы...
'
'п '
1. аукымды (глобальді) айнымалы
2. жергілікті айнымалы
3. программалық айнымалы
4. базалық айнымалы
5. унарлык ай нымалы
322
18.... компиляторға функция арқылы берілетін аргументтердің са­
нын, типін, ретін анықтауға көмектеседі.
1. функцияның идентификаторы
2. функцияныц прототипі
3. файлдың прототипі
4. жергілікті прототип
5. аумақтық идентификатор
19. Функцняның тақырыбында void түйінді сөзі не үшін қолданылады?
1. функция мән қайтаратынын көрсету үшін
2. функцияның тақырыбында void түйінді сөзі қолданылмайды
3. дұрыс жауабы жоқ
4. функцияның ешқандай мән қайтармайтынын көрсету үшін
5. функция мән сақтайтынын көрсету үшін
20. Қандай айнымалылар өзі сипатталған функцнядан шыққаннан
кейін де өз мәнін сақтайды?
1. static секілді хабарланған жергілікті айнымалылар
2. аумақты айнымалылар
3. extern секілді хабарланған жергілікті айнымалылар
4. static секілді хабарланған ауқымды айнымалылар
5. жергілікті айнымалылар
21. Блок дегеніміз не?
1. функцияның екінші аты
2. айнымалыларды сипаттауы бар құрама оператор
3. кездейсоқ оператор
4. қатені анықтайтын оператор
5. дұрыс жауап жоқ
22. Айнымалы дегеніміз не?
1. белгілі бір атауы бар жады аймағы, онда анықталған типтің
мәліметтері сакталады
2. аныкталмаған тип мәліметтерінің жадыда сақталуы
3. дұрыс жауабы жоқ
4. жады кластарының бірнеше бөліктерге бөлінуі
5. операндадан, операция белгісінен, жақшадан тұратын, аныкталған
типтің мағынасын білдіруі
23. Шартты операция форматын көрсетіңіз:
1. операнд і? операнд_2 : операнд_3
2. операнд_ 1 := операнд ^
3 .1 ,2
4. if (өрнек)оператор_1:[е1зе оператор_2;]
5. if (тұрақты өрнек)!:[оператор тізбегі]
323
24.Жадыкластарыи беруүшінқандай спецификатор колданылады?
1.auto
'
2. extern
3. static
4. register
5. барлығы дұрыс
25. С тілінде қайталау операторының қандай түрлері бар?
1. while (өрнек) оператор;
2. d o ... while (өрнек)
3. дұрыс жауап жоқ
4 .1 ,2 ,5
5. £эг(инициализадиялау; өрнек; модификация) оператор;
26. Тармакталу операторы дегеніміз не?
1. Алгоритмнің белгілі бір шарттыц орындалуына немесе орындалмауына байланысты тармақталып, бірнеше жолдарға бөлінуі
2. дұрыс жауап жоқ
3. бір ғана шаргтың орындалуын тексеретін оператор
4. шаргтардың орындалмауын тексеретін оператор
5. операторлардың тармакталуын тексеретін оператор
27. #include директивасын қолданған кезде бүрыштық
жақшанын орнына тырнақшаларды қолдануға болады ма, болса оныц
мәні неде?
1. болмайды
2. болады, бірақ одан ештеңе озгермейді
3. болады, бұл уақытта файлды іздеу эрекеті бастапқы файлы бар каталогта жүргізіледі, сосын стандартты каталогтан іздейді
4. болады, онда файлды стандартты каталогтан іздейді
5. болады, бұл жағдайда файлды стандартты каталогтан іздейді, сосын
бастапкы файлы бар каталогты қарастырады
28. Бастапкы ".һ-файлдыц" кұрамына не кіреді?
1. типтің, тұрактылардың, кіргізілген функциялардың, шаблондардың,
тізімдердің анықталуы
2. функцияның, мэліметтің, шаблонный, аттың сипатталуы
3. атау кеңістігі
4. процедуралардың директивалары
5. көрсетілген жауаптыц бәрі дұрыс
29. #define директнвасы не үшін қолданылады?
1. тұрақтының мәнін беру үшін
2. макростар үшін
3. шартты компиляторды баскаруга арналган символ үшін
4. символдык константа үшін
5. берілген жауаптың бәрі дұрыс
324
30. Қүрамында функциялары немесе анықталған мәліметтері
бар бастапқы (тақырыптық) файлдардың кеңейтілуі қандай және ол
файлдар қалай аталады?
t- ".htp", ".htp-файлдары"
2. ".һ", ".һ-файлдары"
3. ".с" ".с-файлдары"
4. ".f' ".f- файлдары"
5. ".ехе", ".ехе- файлдары"
31. Соз тіркесініц (жолдыц) үзындығы қай функцияның көмегімен
анықталады?
1. strlen
2. src
3. return
4. template
5. mainO
32.10
накты саннан тұратын массивті сипаттау қай нүсқада дүрыс
берілген?
1. int а[10];
2. float а(10);
3. float а[10];
4. float а[1..10];
5. int а[1..Ю];
33. Операндтардан, операция танбаларынан, жақшалардан түратын .... мәндерін есептеу үшін қолданылады. Көп нүктенін орнындағы сөзді табыңдар.
1. өрнектер
2. айнымалылар
3. тұрактылар
4. логикалық типтер
5. жады класы
34. Айнымалы дегеніміз не?
1. программа орындалуы барысында әртүрлі мэндер қабылдайтын
шама
2. жады класының бірнеше аймақтарға бөлінуі
3. программалар тізбегі
4. алгоритмнің белгілі бір шартының орындалуы
5. дұрыс жауабы жок
35. Тацдау операторы (нүскауы) қай сөз аркылы беріледі?
1) switch
2) return
3) for
4) if
5) class
325
36. Егер long пен float типтері араласса, нәтижесі... болады.
1) char;
2) short;
*
3) in t;
4) float;
5) double.
Н Я ‘
37. Болгендегі қалдык табу операциясы қалай беріледі?
1.%
2. /
3. *
4 .«
й : і!
•■;Щ 0 jф * • ъ т л й » т
Щ
Л -' Щ
5. &
38. Блок ішінде анықталған айнымалы қалай аталады?
1. ауқымды
2. тұрақгы
3. жергілікті
4. тұрақсыз
5. сілтеуіш
39. Блоктың ішінде сипатталған идентификатор калай аталады?
1. глобальды корініске ие
2. локальді идентификатор
3. оператордың белгісі
4. функцияның прототипінде көрсетілген параметр
5. көрсетілген типтің айнымалысы кұрылғаннан бастап, ол жойылғанша
омір сүреді
"
40. а атты бүтін айнымалынын дұрыс сипатталуы:
l.in t e ;
2. a int;
3. integer a;
'v ‘"• *
4. float a;
^
5. char a.
41. Блоктан тыс анықталган айнымалы калай аталады?
1. аукымды (глобальды)
2. жергілікгі
3. символды
4. тұрақты
5. жергіліксіз
42. Қай нұсқада sizeof жазылуы дұрыс?
1. sizeof тип
2. sizeof [тип]
3. sizeof (тип)
4. sizeof: тип
5. sizeof тип
326
43. Логикалык терістеу кай нусқада д.үрыс берілген?
1.*
2. ~
4 і!
5 .-44. extern спецификаторы нені білдіреді?
1. айнымалы программа ішінде аныкталганын
2. айнымалы программадан тыс аиыкталғаиын
3. айнымалы анықталмағанын
4. айнымалы автоматты түрде аныкталғанын
5. дұрыс жауабы жоқ
45.12 бүтіи саннан тұратын а массивінін дұрыс сипатталуы:
1. float а[ 12];
2. int а[12];
3. float а[10];
4. char а[ 12];
5. int а(12);
46. Функция тулғасы қандай танбалармен коршалып түрады?
1 .0
2. 1 /
3. {>
4 **
4 7 .0...255 сандар диапазоны кай типке жатады?
1. double
2. unsigned char
3. bool
4. float
5. signed char
48. Goto нускауыныц дүрыс жазылуы:
1. Goto 65
2. Goto m65
3. Goto белгі
4. Goto ?65
5. Goto printf
49. Келесі операциялардыи кайсысы тренарлы (үш операндты)?
1. !
2. &
3. <=
4. !=
5. ?:
327
50. С тілінде комментарийді қандай тацбалар ішіиде жазады?
\. и II
2. (* *)
3 . /**/
1
II
4. < >
$ >
4 '^
- Щ'
5. { }
51. Программанын барлык объектілері үшін ортак мәліметтерді
сақтау үшін кандай класс колданылады?
1. статикалык
2. тұрақты
3. рекурсивті
4. айнымалы
5. аукымды (глобальді)
52. Егер short пен int типтері араласса, нэтижесі —... болады
1. char;
2. short;
n
'
3. int;
4. float;
5. double.
53. Нүсқауыштарды сипаттау форматы кай нүскада дүрыс көрсетілген?
1. аты *типі
2. *аты типі
3. типі*аты
*»
.. - 1- . і
4. & аты типі
5. типаты
54. float в[10]; нені білдіреді?
1. 1-ден 10-ға дейінгі бүтін сандар тізбегін сипаттау
2. 1-ден 10-ға дейінгі нақты сандар тізбегін сипаттау
3.10 нақты саннан түратын а массивін сипаттау
4. 10 мәнді қабылдай алатын а жиымын сипаттау
5. 10x10 олшемді а матрицасын сипаттау
55. switch операциясынан шығу үшін кай нүскау колданылады?
1. do
2. break
3. case
4. return
5. default
56. Типтерді түрлендіру мысалы. Программа орындалганда экранга не
шыгады:
main ()
{ char ch;
328
i n t i ; flo a t fl;
f
l
=
i
=
c
h
=
’
A
'
;
p r i n t f (" %c %d %6. 2 f\n " , ch, i , f l ) ; }
1. A 65 65.00 ;
2. В 66 65.000;
3. В 63 63.000;
4. В 62 62.000;
5. A A 65.00.
57. *= операциясы нені білдіреді?
1. көбейту
2. меншікгеу
3. эр элементін көбейту
4. көбейтіп барып меншіктеу
5. комментарий
58. Лексем дегеніміз не?
1. сөз тіркестері
2. сөйлемдер
3. тілдіц өзіндік мағынасы бар ец кіші бірлігі
4. програмамның түлғасы
5. бетті ауыстыру
59. " int п;” жазуы нені білдіреді?
1. п класы берілгенін
2. п спецификаторы берілгенін
3. п айнымалысы нақгы мэн қабылдайды
4. п айнымалысы бүтін мән қабылдайды
5. дұрыс жауабы жоқ
60. string.h - бұл мынадай функциялардың кітапханасы
1. сөз тіркесі функциялары
2. стандаргты функциялар
3. енгізу/шығару базалық кітапханасы
4. графикалык функциялар
5. буфермен жұмыс істеу функциялары
61. graphics.h - бұл мынадай функциялардың кітапханасы
1. сез тіркесі функцияларының
2. стандартты функциялардың
3. енгізу/шығару базалық кітапханасының
4. графикалык функциялардыц
5. буфермен жұмыс істеу функцияларының
62. С тілінде айнымалылар программаныц мынадай аймағында
сипагталады
1. басында
2. аяғында
3. оргасында
329
4. кез келген жерінде
5. еш жерінде си патт ал майды
63. С тіліндс бір танбамен белгіленген бас жэне кіші эріптер мані...
1. әртүрлі болып саналады
2. бірдей болып саналады
3. компнляторга байланысты өзгереді
4. тілдің нұсқасына байланысты өзгереді
5. барл ығы да дұрыс
64. Айнымалыларға, тұрақтыларға, мәліметтер типіне және
функцияларға қойылған атау былай аталады...
1. идентификаторлар
2. түйінді сөздер
' '
4 , г *и и ’Г.
'
I
3. директнвалар
4. нұсқауыштар
5. дұрыс жауап көрсетілмеген
65. Келесі сөздер ішіндегі нақты сандар тнптерін аныктайтын
түйінді сөздерді корсету керек:
1) char, 2) int, 3) float, 4) double, 5) long, 6) long int, 7) short, 8) signed,
9) unsigned
1. 1,4,6,7
2.2,3,4,8
3. 1,7,8,9
4. 3,4,6
5 .3 ,4
66. Келесі сөздер ішіндегі бүтін сандар типтерін аныктайтын
түйінді сөздерді көрсету керек:
1) char, 2) int, 3) float, 4) double, 5) long, 6) long double, 7) short, 8)
signed, 9) unsigned
1.1.2.5.7.8.9
2.5.6.7.9
.
3.1.2.3.6.9
4.2.5.7.9
5.2.7.8.9
67. Директиваныц дұрыс жазылған жолын керсетіңіз:
1.#define PI = 3.1415
2. #define PI ==3.1415
3.#DEFINE = 3.1415
4. #define PI —3.1415;
5. #define PI 3.1415
68. sizeofO операциясы мынаны анықтайды:
1. литерлік өрнекті
2. константалық тұракты өрнекті
330
.
3. операнд типіне бөлініп берілетін байттар санын
4. операнд орналасатын байттар санын
■5. логикалық өрнекті
69. Программа нәтижесі нешеге тең болады?
void mainO
{int i = 5;
switch (i++) {case 5: printf("%d %d", 1 , i); break;
case 6: printf("%d %d", 2 , i); break;
default: printf("%d %d", 3 , i) ; }}
1.1 5
'
2.2 6
3 .2 5
4 .3 6
5.1 6
70. Программа нәтижесі нешеге тең болады?
void mainO
{int i = 5;
switch (++i) {case 5: printf("%d%d", 1 , i); break;
case 6: printf("%d%d", 2 , i); break;
default: printf("%d%d", 3 , i) ; }}
1.1 5
2.2 6
3 .2 5
4 .3 6
5.1 6
71. int a[5] массивінде қандай элемент жоқ?
1.a[l]
2. a[2]
3. a[3]
4. a[4]
5. a [5]
72. Томендегі қай функция файлға мәлімет жазады?
1. fread()
2. fscanfO
3. getsO
4. fprintfO
5. seekO
73. Томендегі кай функция файлдан мәлімет оқиды?
f. fprintfO
2. fscanfO
3. freadO
331
4. fwriteO
'
5. seekO
Ц •
-
•
■■■
74. Файлды одан мәлімет оқу үшін ашу (режимін көрсету керек)
1. Г
2.W
I V». .•<(»<}
^
JI
>
3. а
, r ,, j
.'
4.1+
; !
5. W+
j
-Ж * ? .'-іД
-м
I •
•;
й 4 .#8 J
:- і
75. М әлімет жазатын файл ашу қажет, егер файл бұрыннан бар бол­
са, ондағы мәлімет жойылады (режимін көрсету керек).
1. г
- с
2. w
Щ1 г £ Щ
3. а
■ ;
Ш
4.1+
ё t *
5. w+
'
'
I
76. Мәлімет қосу: файл соцына мәлімет жазу үшін оны ашу қажет
(режимін көрсету керек).
1.г
*/
2. w
^
3. а
4.1+
_ ‘ і:,! ‘ ; л'
'
-I
5. w+
' 'л
77. Файлдагы мәліметгі оқып, оган мәлімет жазу: оқу жэне жазу
(режимін корсету керек).
1. г
2. w
>, fj
3. a
4. Г+
' *•
•
5.w+
I •Ь I
78. Файлды жаңарту үшін оны ашу, егер файл бүрыннан болса,
оныц мәліметі жойылады (режимін көрсету керек)
1. г
!~ L ;
2. w
3. а
. ... .
-11
и-
s
*
4- 1+
. ГІФк-Ц . ;
5. w+
79. Мәлімет қосу: файлды ашып, оны жацартады, мәлімет бүрнгыныц соцына жазылады (режимін көрсету керек).
1.г
2 .W
»Iivs* ?
у
10 Г ІІІ Иm ill II і
3. a
4.Г+
5. а+
i S S
І И
9
'X
332
80. Төмендегі функция файлдан сөз тіркесін оқиды
1. fread()
\ 2. fgetsO
V fgetcO
4 fputs()
5. fputc()
81. Төмендегі функция файлға сөз тіркесін жазады
1. iVriteO
2. fgetsO
3. fgetcO
4. fputsO
5. fputcO
82. printfO функциясыныц сөз тіркесін шығару кезіндегі форматы
кандай?
1. %d
2. %с
3. %s
4. %f
5. %х
83. printfO функциясыныц нақты сан шығару кезіндегі форматы
қандай?
1.%d
2.%с
3.%s
4.% f
5.%x
84. printfO функциясыныц тацбасыз ондық бүтін сан шығару
кезіндегі форматы:
1. %d
2. %u
3. %o
4. %x
5. %f
85. printfO функциясыныц тацбасыз сегіздік бүтін сан шыгару
кезіндегі форматы қандай?
1. %d
2. %o
3. %x
4. %c
5. %f
333
86. printfO функциясыныц танбасыз он алтылык бүтін сан шығару
кезіндегі форматы қандай?
1. %d
у. ,,
2. %0
3. %х
4. %С
Щ ж
'
’.М
Я-іЩ I vI
5. %f
t
..| § § | ?t£!, ,
trvm m f.U
I
87. printfO функциясыныц экспоненциал нақты сан шығару
кезіндегі форматы кандай?
L %d
1
; !" ;v'
2. %о
( ■К
-і
3. %е
.
' '
4 о/оС
I
5. %f
§Р
'
88. Егер char мен short типтері араласса, нәтижесі қандай болады?
1.char;
2 .sh ort;
''
3. float;
4. lo n g ;
5. int;
>
89. Мәліметтердіц бір еселік дәлдікпен берілетін накты санды типі
қалай сипатталады?
1. float
2. double
3. char
4. int
5. struct
«
90. Мәліметтердіц екі еселік дәлдікпен берілетін нақты санды типі
қалай сипатталады?
1. float
2. double
3. char
4. int
5. struct
91. Мәліметтердіц символдық типі қалай сипатталады?
1. float
2. double
3. char
4. int
5. struct
92. Такырып файлдары нұсқаулары қай жерде орналасады?
1. шаіп() функциясы алдында
2. mainQ функциясы артында
334
3. main() функциясы ішінде (тұлғасында)
4. жеке файлда
5. керекті функция шақырылатын блокта
93. < және > символдарымен қоршалып тұратын тақырып файл
аттары компиляторға бүл файл қандай каталогта орналасқанын
білдіреді?
1.ЬЮ
2. BIN
3. INCLUDE
4. BGI
5. TVISION
94. " жэне " символдарымен қоршалып түратын тақырып файл
аттары компиляторға бұл файл қандай каталогта орналасқанын
білдіреді?
1. LIB
2. BIN
3. INCLUDE
4. жұмыс істеп тұрған каталогта
5.TVISION
95. С программасы мәтіндері қандай типті файлдарда сақталады?
Ц .txt, .doc
2. .срр, .с
3. .pas, .bas
4. .h, .htm
5. .html, .xtml
96. Программалардыц обьектілік кодтары қандай типті файлдарда
сақталады?
1. .ехе
2. .obj
3. .срр, .с
4. .com
5. .txt
97. Программалардыи атқарылатын екілік кодтары қандай типті
файлдарда сакталады?
1. .ехе
2. .com
3. .obj
4. .срр, .с
5. .txt
98. Түйінді сөздер (ключевые слова) дегеніміз не?
1. карапайым идентифи каторлар
2. арнайы қорға енгізілген сөздер
335
3. операциялар
4. функциялар
5. макрокомандалар
99. С тілініц int типті бүтін саны 16 разрядты процессорда кандай
орын алады?
1.2 байт;
.
2 .4 байт;
3. 8 байт;
4 .6 байт;
j
5. 10 байт;
j
v 10?$
100. С тілінің int типті бүтін саны 32 разрядты процессорда кандай
орын алады?
1.2 байт;
2 .4 байт;
3. 8 байт;
4. 6 байт;
-1
5. 10 байт;
336
Қолданылған әдебиеттер
Павловская Т.А. C/C++. Программирование на языке высокого уровня.
-СПб.: Питер, 2011. -461 с.
2. Павловская ТА. Щупак Ю.А. C/C++. Структурное и объектно-ориенти­
рованное программирование: Практикум.-СПб.: Питер, 2011. -352 с.
3. Сэмюел П. Харбисон, Гай Л. Стил. Язык программирования Си. Пер. с
англ. -М .: ООО "Бином-Пресс", 2004. -528 с.
4. Липпман С., Лажойе Ж. Язык программирования C++. Вводный курс,
3-е изд. Пер с англ. -СПб. -М .: Невский диалект - ДМК Пресс, 2003.
-1104 с. \
\
5. Шиманович Е.Л. C/C++ в примерах и задачах.-Мн.: Новое знание,
2004. -528с.
6. Керниган Б., Ритчи Д., ФьюэрА. Язык программирования Си. -М .: Фи­
нансы и статистика, 2004. -271 с.
7. Страуструп Б. Язык программирования C++, спец. изд. Пер. с англ.
-М .: БИНОМ; -СПб.: Невский диалект "БИНОМ", 2008. -288 с.
8. Вирт Н. Алгоритмы и структуры данных: Пер. с англ. 2-е изд., испр.
-СПб.: Невский диалект,2008. -352с.
9. Абрамов С.А., Гнездилова Г.Г., Капустина Е.И., Селюн М.И. Задачи по
программированию. -М.: Наука, Гл. ред. физ.-мат. лит. 1988. -224 с.
10. Культин Н.Б. C/C++ в задачах и примерах. 2-е изд., перераб. и доп.
-СПб.: БХВ-Петербург, 2009. -368 с.
11. Березин Б.И., Березин С.Б. Начальный курс С и C++ . -М: ДИАЛОГМИФИ, 2004.-288с.
12. Подбельский В.В., Фомин С.С. Программирование на языке Си. -М.:
-600
C++
14. Костюкова Н.И., Калинина Н.А. Язык Си и особенности работы с ним.
-М .: "Интернет-университет информационных технологий - ИНТУИТ.
1.
WWW,
А нисимов А
WWW,
16. Бөрібаев Б., Дүйсебекова К. Си тілінде программалау: Оқу-әдістемелік
құрал. -Алматы: Қазақ университеті, 2007. -208 б.
17. Бөрібаев Б. Программалау тілдеріне кіріспе: Жоғары оку орындарына
арналган окулық . -Алматы: АЭСА, 2008. -376 б.
18. Құралбаев 3.1С Алгоритмдеу жэне программалау тілдері. -Алматы:
"TST-corapany" баспасы, 2008. -354 б.
құралы. -Ал
Борібаев Б. Компьюгердің арифметиі
маты: Қазақ университеті, 2009. -80 б.
20. Балапанов Е., Бөрібаев Б., Бекбаев А.,т.б. Информатика терминдерінің
қазақша-ағылшынпіа-орысша, орысша-қазақша-агылшынша, ағылшынша-ооысша-қазакша сөздігі. -Алматы: Сөздік-Словарь,1998. -176 б.
22-1660
337
А КОСЫМ ШАСЫ
Стандартты математикалык функциялар
стандартты математикалык
~ен, оларды программа құру
тақырып файлынді
функциялардың анықтаулары бер
кезінде дұрыс жаза білу керек (Қ1
M ath .һ
ҚІ.І-кесте
Функция прототипі
Қайтаратын мэні
d o u b le a c o s ( d o u b l e x)
d o u b le a s i n ( d o u b l e x)
d o u b le a t a n ( d o u b l e x)
d o u b le a t a n 2 ( d o u b l e
x , d o u b l e y)
do u b l e c e i l ( d o u b l e x )
d o u b le c o s ( d o u b l e x)
d o u b le c o s h ( d o u b l e x)
(d o u b le x)
d o u b le
( d o u b le x)
d o u b le
d o u b le flo o r ( d o u b le x )
d o u b le l o g ( d o u b l e x)
d o u b le l o g l O ( d o u b l e x)
m a x ( a ,b )
arccos x
arcsin x
arctg x
arctg (y/x)
min(a,b)
d o u b le p o w ( d o u b le x
d o u b le _____
d o u b le p o w l O ( i n t p)
d o u b l e s i n ( d o u b l e x)
d o u b le s i n h ( d o u b l e x)
d o u b le s q r t ( d o u b l e x )
d o u b le t a n ( d o u b l e x)
d o u b le t a n h ( d o u b l e x)
d o u b le h y p o t ( ( d o u b le x ,
d o u b l e __________
d o u b le p o l y ( d o u b l e x , i n t
n , d o u b le
d o u b le l d e x p ( d o u b l e x ,
i n t n)
"жогары" қарай дөңгелектеу
cos x
ch x
X
"төмен" қарай деңгелектеу
In х
максимум (a,b) типі үлкен аргумент
типімен бірдей болады
минимум (a,b) типі кіші аргумент
типімен бірдей болады__________
sin х
sh x
х-тің квадрат түбірі
thx____
х2+у2 квадрат түбірі
полином мәні
x*2n
338
Бұл
функциялар
функция
түрінде s t d l i b . h т а қырып файлындаберілген.
Аргументтері типі де, өз типі де d o u b le болып келген
функциялардың lo n g d o u b le типіндегі
типіндегі аналогтары бар. Олараттары жоғарғы кестеде көрсетілген фунісция аттарынан
алынады, мысалы, ( f a b s ,
fabsl) ,
(acos, a c o s l ) , т.с.с.
C e i l ( x ) жэне floor (x) функцияларынь
алғашқысы
ал
бүтін
функция да d o u b l e форматындағы бүтін санды қайтаратынын
есте сақтаган жөн. Мысалы:
c e i l (0.1) = 1 . 0
floor(0.1) = 0.0
c e i l (0.5) =1 .0
floor(0.5) = 0.0
c e i l (0.9) =1 .0
floor(0.9) = 0.0
c e i l (-0.9)=0.0
floor( - 0 . 9 ) = - 1 . 0
ceil(-0.5)= 0.0
floor( - 0 . 5 ) = - 1 . 0
ceil(-0.1)= 0.0
floor( - 0 . 1 ) = - 1 . 0
Көбінесе
программалаушылар
дөңгелектеу
үшін
floor (х+0.5 ) функциясын пайдаланады. Бірақ ол кейде
математикадағы ұғымнан алшақ кетіп жатады, мысалы,
floor (-0 .5+0 .5) =0.
Эрине, C/C++ тілдерінде Паскаль тіліндегідей round
функциясының баламасы жоқ, дегенмен ондай функцияны қолдан
жасап алуға да болады:
i n t r o u n d ( d o u b l e x)
{ in t res;
res=(x<0)? x -0 .5 : x+0.5;
return res;
Егер нақты санның бірнеше бөлшек таңбаларын (к) алып
дөңгелектеу керек болса, онда ол санды 10к-ға көбейтіп алып,
бүтін санга дейін дөңгелектеп, қайтадан 10 к-ға бөлу керек.
Math. һ тақьірып файлында стандартты константалардың да
КҰРУ
пайдалана білу керек (Қ1
339
Қ1.2-кесте
s
1
M
1
Константа
М_РI
М PI 2
M 2 PI
M_1_SQRTPI
M_2_s QRTp i
Константа
M_E
M_LOG2E_______
M_LOG10E
M_LN2
M_LN10
1 / ________________
M_SQRT2
2 / Уж______
M_SQRT_2
Мәні_________________
я _________________________
я /g ____________________
Я/4________
2/я
340
Мэні
e = 2 .71828...
lo g 7e
lo g e
In 2
“
In 10
72=1.414...
4 5 / 2 ________
Ә ҚОСЫМШАСЫ
мәліметтер
Жеке берілген символдық мэліметтер (константалар мен
айнымалылар) компьютер жадында сол символдардың ASCIIкодтарына сэйкес бүтін сандық мэндер жазылған бір-бір байт
орын алады. Соларды экранға шығару үшін келесі программаны
орындауға болады:
#include <stdio.h>
#include <conio.h>
void main()
{
int ij;
gotoxy(37,l);
printf("ASCII");
for(i=32; i<=52; i++)
{ gotoxy(l,i-29);
for(j=i; j<=255; j+=21)
printf("%c %3d "j j);
}
getchO;
}
Бұл программа жұмысының нэтижесі:
С - Ярлык
ASCII
32 : 5
33 6
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
7
8
І9
jfШ\
^*
<
53
54
55
56
57
58
59
74
к 75
L 76
M 77
H 78
e
79
p 80
Q 81 i
3
a
b
$
d
e
85
96
97
98
99
100
101
102
60
f
Ш 61 ft 82
101
104
№ 62 |s 1 83 1
•
W 63 T 84 Wj 105
0 64 0 85
106
A 65 v ! 86 a 107
8 66 w 87 T 108
С 67 X 88 m 109
0 68 Y 89 n 1 1 0
W 69 z 90 o 111
i . 79
91 p 112
l e 71 К 92 я 1 1 3
M 72 J
93 Г 114
$2
X 73 A
94 s 115
-
t 116
и 117
V 118
w 119
X 120
у 121
z
€
1
1
Ш
В
r
Д
Ё
no
123
124
125
126
a 127
A 128
6 129
131
132
Hi
V 134
3 135
Й 136
Й 137
К 138
A 139
i 140
H 141
0 142
ю 158
(
Я 159 4
a 160
4
6 161 1
в 162 i
r 163 t
Л 14ЭЙ A 164 1
p 144 e 165 1
с 145 я 166 i
T 146
3 167 1
У 147 и 168 *
■♦ 1 4 8 ii l t f ^ J
X 149 к 170 n
u 150 д 171 1
4 151 m 172 ±
Ш 152 h 173 t
w 153 e 174 b
. b 154 и 175 У 155
b 156
1
I
3 157 1 Ш
I
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
Қ1.2-сурет. Жеке символдық мэліметтердің ASCIІ-к о д т ы қ
1
(code page 866)
_____
________________ -
341
к естесі
Кестедегі символдар "босорын" таңбасы кодынан - 32-ден
(0x20) басталады, оған дейінгі символдар басқару кодтарына
сэйкес келеді. Орыс әліпбиінің бас эріптері 128 (0x80) кодынан
басталады ( ' Ё ' эрпі басқа орында тұр), ал кіші эріптері 160-тан
175-ке (а-дан п-ға) дейін, сонан соң 224-тен 239-ға (р-ден я-ға)
дейін орналасқан. Олардың арасында кестелер салу кезінде
қолданылатын графикалық символдар орналасқан. Қазақ әріптерін
пайдалану үшін Unicode кестесіне көшу керек, сондықтан C/C++
тілдерінде экранға қазақ әріптері шығарылмайды.
Бірбайттық символдық константалардың мәндері жалқы
тырнақшаға (' — апострофқа) алынып жазылады да, үш түрлі
тәсілмен беріледі. Олардың алғашқысы экранда бейнеленетін
A SCII-код кестесінің символдарына (Қ1.2-суретті қ.) қатысты
айтылады, бұлар апострофқа алынып жазылады:
» ТТ» I
С
I Q. I
,
о
/
I t
У
I
/
I т_т I
Ы
,
1 C !
D
I
f
і I
т
,
V VI V
I
f
1
4
/
I о
/ 1
I
#
I
I
Соңғы константа "босорын" таңбасы. Апостроф таңбасын
мұндай тәсілмен жаза алмаймыз. Сондықтан басқа тәсілді
қолданамыз.
Екінші тэсіл кері киғаш сызық (слеш) таңбасынан кейін
керекті символдың оналтылық кодын жазу арқылы беріледі:
1\х 2 7 ' ("апостроф" символының коды, 3910= 2716)
1\х5С ' (кері қиғаш сызық \ символының коды, 9210= 5С16)
Он алтылық кодтың алдыңғы нөлсіз жазылатынына назар
аударыңдар (оналтылық сандар түрінде берілген константаларды жазу кезінде \0х болып бейнеленеді). Осы тэсілді ASCIIкод кестесінің бас жагында (1-31 кодтары) орналасқан басқару
кодтарының кез келгенін жазу үшін қолдануға болады. C/C++
тілдеріндегі Escape-тізбектері болып табылатын басқару кодтары
(4.6-кестені қ.) да осы тәсілмен жазылады. Мысалы:
' \ * ' - "апостроф" символы
1\ \ * —"кері слеш" символы
Үшінші тэсіл "кері слеш" таңбасынан соң, символдың сегіздік
кодын жазу болып табылады:
' \ 4 7 1 ("апостроф" символының коды, 39,0 - 47g)
' \ 1 3 4 ' (Хсимволының коды, 92)0 = 134g)
Мұндағы сегіздік кодтың да алдыңғы нөлсіз жазылатынына
назар аударыңдар (сегіздік сандар түрінде берілген константалар342
ды жазу кезінде олардың алдында \0 таңбасы жазылады). Апо­
строф ішіндегі сегіздік код [0, 377] аралығында болуы тиіс.
Символдық айнымалылар олардың типін көрсететін c h a r не­
месе u n s i g n e d c h a r спецификаторы (түйінді сөзі) арқылы жарияланады. Оларға бірден мэн беруге, яғни айтылған тәсілдердің
біоімен инициалдауға болады:
char c h l = 'Я',с һ 2 = '\х9Ғ',с һ З = '\237',
сһ4= 0х9Ғ,сһ5=0237,сһб=159;
Осылай сан арқылы мэн тағайындау тәсілі DOS-қосымшаларында да жэне Windows ортасында да символдардың дұрыс
бейнеленуіне кепілдік бере алады. Windows ортасында консолдық программалар құру кезінде символдық мэндер тағайындау
тэсілі ASCI I -код кестесінің тек бірінші жартысында орналасқан
символдар үшін ғана дұрыс жұмыс істей алады.
343
Б ҚОСЫМШАСЫ
Сөз тіркестерінен тұратын мәліметтермен операциялар орындау
:
Бірөлшемді символдық жиымдар (массивтер) түрінде берілетін сөз тіркестерін өңдеу үшін C/C++ тілдерінің жүйелік
функциялар кітапханасында бірсыпыра амалдар (операциялар)
қарастырылған. Олардың прототиптері s t r i n g . һ тақырыптық
файлына жинақталып, көбісінің атаулары s t r (ағылш. s t r i n g
- т і р к е с сөзінің алғашқы әріптері) таңбаларынан басталады.
Тіркестерді өңдейтін функцияларды қарастыру үшін, қолданылатын аргументтер мен олардың типтері жайлы ортақ белгілеулер
туралы бірсыпыра түсініктер бере кетейік:
S,
S I , S2 - символдық жиымға нұсқауыш (көбінесе жиым
аты);
..
j ЦОД
'*'• : : ---'Hi*»
CS - c o n s t c h a r * типіндегі нұсқауыш (яғни өзгермейтін
жиым немесе бастапқы мэліметтер түрінде берілген тіркестік
константа);
..
.
;
сһ - символ коды, көбінесе i n t типіндегі сандық мән;
к —символдар саны.
,
V вь
ҚІ.З-кесте
Функция
Атқарылатын операция
Сөз тіркесінің (тіркестің) үзындығын анықтау
s t r l e n (CS)
S тіркесіндегі символдар санын береді
Тіркестерді қалыптастыру
s tr c p y (S I ,C S 2 )
CS2 тіркесін S l - r e кошіреді, нұсқауышты
S l - r e қайтарады
s t r n c p y ( S I , C S 2 f k)
CS2 тіркесінің алғашқы k символын S l- r e
көшіреді, нұсқауышты S l - r e қайтарады
s t r s e t ( S ,c h )
S тіркесін сһ символдарымен толтырады,
нұсқауышты S - к е қайтарады
s tr n s e t (S,ch,k)
S тіркесінде сһ символын к рет
қайталайды, нұсқауышты S- к е
қайтарады
Тіркестерді біріктіру (конкатенация)
strcat(SI,C S2)
CS2 тіркесін S1 тіркесінің соңына қосып
жазады, нұсқауышты S l-r e қайтарады (S1
тіркесінің ұзындығы екі тіркес сиятындай
көлемді болуы тиіс)
344
s t r n c a t ( S I , C S 2 , к)
CS2 тіркесінің алғашқы к символын
Бітіркесіне қосып жазады да, нұсқауышты
S l - r e қайтарады
Регистрді ауыстыру
stilw r(S)
S тіркесі символдарын кіші әріптерге
ауыстыру, тек латын әліпбиі эріптеріне
эсер етеді
______
strupr(S)
S тіркесі символдарын бас эріптерге ауы­
стыру, тек латын әліпбиі әріптеріне эсер
етеді
Тіркесті керісінше жазып шығу
strrev(S)
S тіркесіндегі символдарды кері бағытта
жазып шығады
Сандық мәліметке түрлендіру
s t r t o l ( C S , p t r , г)
s t r t o u l ( C S , p t r , г)
strtod(C S,ptr)
Тіркестерді салыстыру
s t r c m p ( C S 1 , CS2)
s t r n c m p ( C S 1 , CS2, k)
stricmp(CS1,CS2)
түрде
бейнеленіп, негізі г болып келетін санау жүйесінде жазылған сан lo n g
типіндегі машиналық форматтағы санға
түрлендіріледі. p t r нұсқауышына
түрлендіруді токтатқан (үзген) символ
адресі жазылады. Қайтарылатын мэн ілендіру нәтижесі________________
Жоғарыдағыдай түрлендіру ісі екі еселенген таңбасыз бүтін сан үшін атқарылады
Нақты санды символдық түрден d o u b le
типіндегі машиналық форматқа түрленді
Егер СS 1 =С S 2 болса, функция 0 мәнін
қайтарады,
егер CS1 >CS2 болса, функция 0-ден
артык мэн, ал
erepCSl<CS2 болса, функция 0-ден
кіші мэн қайтарады
CS1 жэне CS2 тіркестерінің алгашқы k
символдары гана салыстырылады
Салыстыру кезінде бас эріптер мен кіші
эріптер кодтарының эртүрлілігі есепке
алынбайды__________________________
Жоғарыдагы операция сияқты, тек функ­
ция аты гана басқаша
•
strcmpi(CS1,CS2)
345
«
s t r n i c m p ( C S 1 , C S 2 , к)
strncmpi(CS1,CS2,k)
Символды іздеу
strchr(C S,ch)
strrchr(C S,ch)
Ішкі тіркесті іздеу
strstr(C S1,C S2)
Арнайы іздеу
strpbrk(CS1,CS2)
strspn(CS1,CS2)
strcspn(CS1,CS2)
s t r t o k (SI,CS2)
Екі тіркестің алғашқы k символдарын бас әріп пен кіші әріп кодтарының
аиырмашылығын есепке алмаи салыстыады________________________________fc
Жоғарыдағы операция сияқты, тек функ­
ция аты ғана басқаша
CS тіркесі солдан оңға қарай с һ символы
табылғанша біртіндеп қарастырылады.
Егер ол табылса, нұсқауыш CS тіркесіндегі
осы символды (позициясын) көрсетіп
тұрады, егер оңдай символ табылмаса,
онда нұсқауыш n u l l (яғни 0) мэнін
қаитарады
Жоғарыдағы операция сияқты, тек сим­
волды іздеу CS тіркесінің соңынан басына
қарай жүргізіледі
CS2 тіркесін CS1 тіркесінің құрамынан
іздеу (алғашқы кіруін анықтау). Егер ол
табылса, нұсқауыш табылған тіркестің
алғашқы символын көрсетеді, табылмаса,
о л п и іі мәнін береді
CS2 символының CS1 тіркесіндегі
алғашқы кездесуі ізделеді. Табылған
символға нұсқауыш немесе null
қайтарылады
Толығынан CS2
тұратын
CS1 тіркесініц бастапқы фрагментінің
ұзындығы анықталады (символдар
іеттілігі ешқандай рөл атқармайды)
CS2
құрамына
кірмейтін CS1 тіркесінің бастапқы
фрагментінің ұзындығы анықталады
S1 тіркесі ішінен CS2 символдарымен
бөлінген лексемдерді іздеу
ҚІ.З-кестесінде көрсетілген функцияларға
түсініктер бере кетейік.
Санның символдық бейнеленуін соған I
машиналык
форматқа түрлендіретін s t r t o l жэне s t r t o u l функцияла
346
рында оның негізін г=0 деп те беруге болады. Мұндайда санау
жүйесінің негізі санның символдык жазылуымен анықталады.
Егер тіркес ' 0 ' символынан басталып, ары қарай 7-ден аспайтьго цифрлар орналасатын болса, онда ол сегіздік сан болып сана­
лады. Ал егер сөз тіркесі ' Ox' немесе ' OX' символдарынан ба­
сталып, ары қарай оналтылық цифрлар орналасатын болса, онда
г= 16 болып есептеледі.
S t r t o k функциясында лексем болып ажыратқыш символдарының бірімен (босорын, үтір, нүкте, т.с.с.) аяқталатын сим­
волдар тіркесі саналады. Ол функцияны алгашқы рет пайдалану
кезінде S1 тіркесінде бастапқы лексем орналасып, қайтарылатын
мэн оныц бірінші символына нұсқауыш болып саналады. Осымен қатар S1 тіркесіндегі анықталған ажыратқыш символ орнына нөлдік байт жазылады. Бұл табылған лексеммен кейіннен сөз
тіркесі ретінде жұмыс істеуге мүмкіндік береді. Мұнан кейінгі
s t r t o k функциясын пайдалану кезінде келесі лексемдерді іздеу
үшін бірінші аргумент орнына нөлдік аргумент жазуга болады.
Сонда функция енгізілген нөлдік байттан оң жақта орналасқан
келесі лексемді іздеп табуга кіріседі. Осы тэсілмен S1 тіркесіне
кіретін барлық лексемдерді біртіндеп тауып алуға болады.
Түсіндіру үшін бір мысал келтірейік:
# in c lu d e < s t d i o . h >
# in c lu d e < c o n i o . h >
#include <string.h>
void mainO
{ char *ptr;
ptr=strtok("FEB.14,2009",
while(ptr!=NULL)
{ printf("ptr=%s\ii",ptr);
ptr=strtok(NULL,
}
getchO;
}
Бұл программа нэтижесі
ptr=FEB
ptr=14
ptr=2009
347
МАЗМҮНЫ
КІРІСПЕ......................................................................................... 3
1 ДЕРБЕС КОМПЬЮТЕРЛЕРДЩ
ПРОГРАММАЛЫҚ ЖАБДЫҚТАМАЛАРЫ................................................... 5
1.1 Программалар мен олардың түрлері................................................... 6
1.2 Программалык жабдықтама деңгейлері................. ......... ..................7
1.3 Программалык жабдықтамалардың жікгелуі..................................10
1.4 Программаларды коммерхщялық түрде тарату...............................12
2 АҚПАРАТТЫҚ ТЕХНОЛОГИЯ ЖЭНЕ ТЕХНИКА.................................15
2.1 Ақпараттық технология түсінігі................................................ ........ 15
2.2 Ақпараттық ресурстар және өнімдер................................................ 20
3 ПРОГРАММАЛАУ ТЕХНОЛОГИЯЛАРЫ.................................................24
3.1 Құрылымдық программалау.............................................................. 25
3.2 Модульдік программалау........................................................... 1......... 28
3.3 Мәліметтер абстракциясы.... .............................................................. 29
3.4 Объектіге багытталган программалау түсінігі............... ................30
4. МӘЛІМЕТТЕРДІ ӨҢДЕУ ПРОЦЕСІН АЛГОРИТМДЕУ............. ........ 36
4.1 Негізгі түсініктер мен анықтамалар................................
.36
4.2 Компьютерде есеп шығару кезеңдері........................... ............. .,„.37
4.4 Алгоритмдердің негізгі канондық құрылымдары....................... ..44
4.5 Қарапайым алгоритмдер құру...........................................„................ 46
4.6 Программалау тілдері................................................... ....................... 52
5. C/C++ ТІЛДЕРІ НЕГІЗДЕРІ.......................................................................... 58
5.1 C/C++ тілдерінде жазылган программаның қ ұ р ы л ы м ы ....:..59
5.2 Тілдің кұрамы............................................................................................
6 C/C++ ТІЛДЕРІНДЕГІ МӘЛІМЕТТЕР ҚҮРЫЛЫМДАРЫ.....................77
і%
6.1 C/C++ тілдеріндегі мэліметтер типтері............................................ 78
348
6.2 Printf жэне scanf функциялары......................................................... 84
6.3 Cin жэне cout функциялары............................................................... 88
7 C/C++ ТІЛДЕРІНДЕГІ ҚОЛДАНУШЫ ФУНКЦИЯЛАРЫ....................92
7.1 Қолданушы функциясын пайдалану................................................ 93
7.2 Айнымалылар мен өрнектерді пайдалану ерекшеліктері............97
8 C/C++ ТІЛДЕРШДЕ ОПЕРАЦИЯЛАРДЫ ОРЫНДАУ.......................... 107
8.1 Операцияларды орындау.................................................................. 108
8.2 Меншіктеу операциялары.............................. ................................. 115
8.3 Типтерді түрлендіру.................................... ......................................118
9 C/C++ ПРОГРАММАЛАУ ТІЛДЕРІНІҢ ТАҢДАУ
ОПЕРАТОРЛАРЫ........................................................................................ 123
9.1 Тармақгалу операторы...................................................................... 124
9.2 Switch коп нұскалы тандау операторы...........................................131
10 ЦИКЛ ОПЕРАТОРЛАРЫ........................................................................ 139
10.1 Алгы шартты цикл (while - әзірше)............................................. 140
10.2 Соңғы шартты цикл (do .. while)................................................... 143
10.3 For цикл операторы..........................................................................146
10.4 Программанын орындалу тәртібін озгерту операторлары.......153
И ЖИЫМДАР ЖЭНЕ НУСҚАУЫШТАРДЫ ПАЙДАЛАНУ.................159
11.1 C/C++ тілдерінде жиымды аныктау............................................. 159
11.3 Ұзындығы өзгермелі динамикалык жиымдар...........................161
11.4 Жиымды толтыру үшін кездейсоқ сандарды пайдалану..........162
11.5 Жиымды оқдеу есептерініц түрлері (кластары)........................163
11.6 Жиымды сұрыптау (іріктеу, реттеу).............................................166
11.7 Адрестік операциялар......................................................................173
11.8 Жиымдар жэне жиымдарға қолданылатын нұсқауыштар.......174
11.9 Нұсқауыштарды пайдапанып жиымдармен жұмыс істеу.........176
349
11.10 Нұсқауыштарға қолданылатын операциялар............................177
11.11 Динамикалық айнымалылар.......................................................... 179
12. ЕКІ ӨЛШЕМДІ Ж ИЫ М ДАР............................................................. 187
12.1 Матрицаның барлық элементтерін өңцейтін алшритмдер..... 189
12.2 Екінші типтегі есептер алгоритмдері............................................ 192
12.3 Екі өлшемді жиымдармен жұмыс істеу кезінде
нұсқауыштарды қолдану.......................................................................... 200
13. СӨЗ ТІРКЕСТЕРІН ӨҢДЕУ.................. ..........................................207
13.1 Символдық таңбаларды енгізу/шығару....................................... 207
13.3 Символға нұсқауышты пайдалану
..................... 211
13. 4 Сөз тіркестерін енгізу функциялары scanfO, gets(str).............. 215
13.5 Сөз тіркестерін шығару функциялары cprintf0,puts0,cputs() ..216
14 ҚОЛДАНУШЫ АНЫҚТАЙТЫН МӘЛІМЕТТЕР ТИПТЕРІ
МЕН Қ¥РЫ ЛЫ МДАРДЫ ПАЙДАЛАНУ...................................... 229
14.1 Типтердің атын өзгерту (typedef)....................................................229
14.2 Тізбелер (перечисления - enum).....................................................230
14.3 Құрылымдарды пайдалану.............................................................. 232
14.4 Құрылымдарды сипаттау..................................................................232
14.5 Құрылым өрістерін пайдалану........................................................235
14.6 Құрылымдар жасау........................................................................... 237
14.7 Құрылым жиымдарын функция аргументі
ретінде пайдалану.......................................................................................243
14.8 Біріктірмелер (объединение - union)............................................. 245
14.9 Биттік өрістер..............................................................................
250
15 ФАЙЛДАРДЫ ПАЙДАЛАНУ............................................................. 258
15.1 fprintf және fscanf функцияларын пайдалану..............................260
15.2 fgets жэне fputs функцияларын пайдалану...,..............................263
15.3 fwrite жэне fread функцияларын пайдалану................................265
350
%
16. ГРАФИКАЛЫҚ РЕЖИМДЕ Ж ¥М Ы С ІСТЕУ............................269
16.1. Графикалык режим орнату, одан шығу, мэтін жазу,
сызык салу функциялары........................................................................271
16.2. Сызык стильдерін беру.................................................................. 276
17 С ПРОГРАММАСЫН ОРЫНДАУ ОРТАСЫ................................ 288
17.1. Турбо С редакторының терезесі.................................................. 288
17.2 Меню командалары..........................................................................290
17.3 Қателер коды жэне олардың мэліметтері................................... 296
18. ПРОГРАММАЛАУ ТІЛДЕР1НІҢ ДАМУ ТА РИ Х Ы ................. 301
ҚОЛДАНЫЛГАН ТЕРМИНДЕРДЩ ТҮСІЩЦРМЕЛІК СӨЗДІГІ..... 311
ҚОЛДАНЫЛҒАН АТАУЛАРДЫҢ
ҚЫСҚАША ОРЫСША-ҚАЗАҚША СӨЗДІГІ.........................................316
С ТІЛІНДЕ ПРОГРАММАЛАУДАН ТЕСТ СҮРАҚТАРЫ.................. 320
Қолданылған эдебиеттер.............................................................................. 337
А ҚОСЫМШАСЫ.........................................................................................338
Ә ҚОСЫМШАСЫ.........................................................................................341
Б ҚОСЫМШАСЫ..........................................................................................344
351
Б. Бөрібаев
ПРОГРАММАЛАУ ТЕХНОЛОГИЯЛАРЫ
Оқулық
Басуға 21.12.11. қол қойылды. Қағазы офсеттік.
Қаріп түрі “Таймс” Пішімі 60x90/16. Баспа табағы 22.
Таралымы 2100 дана. Тапсырыс 1660.
Тапсырыс берушінің дайын файлдарынан басылып шықты.
АӨУІР
ЖШС РПБК «Дәуір», 050009,
Алматы қаласы, Гагарин д-лы, 93а.
E-mail: rpik-dauir8 l@mail.ru
Документ
Категория
Без категории
Просмотров
1
Размер файла
20 117 Кб
Теги
bribaev, 3476, tehnologiyalari, programmalau
1/--страниц
Пожаловаться на содержимое документа