Б.Бӛрібаев ПРОГРАММАЛАУ ТЕХНОЛОГИЯЛАРЫ. Оқулық

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Б.Бӛрібаев ПРОГРАММАЛАУ ТЕХНОЛОГИЯЛАРЫ. Оқулық"

Transcript

1 Б.Бӛрібаев ПРОГРАММАЛАУ ТЕХНОЛОГИЯЛАРЫ Оқулық Алматы, 2011

2 ISBN ББК Пікір берушілер: Ақпараттық технологиялар университетінің профессоры, техника ғылымдарының докторы Сейкетов А.Ж. Әл-Фараби ат. Қазақ ҧлттық университетінің доценті, физикаматематика ғылымдарының докторы Жомартова Ш. Ә. Бӛрібаев Б. Программалау технологиялары: Оқулық. Алматы: ҚР ЖОО ассоциясы, б. Программалау технологиялары оқулығы жоғарғы оқу орындарындағы техникалық бағытта білім алып жатқан студенттерге арналған, мҧнда С және С++ тілдерін негізге ала отырып программалау тәсілдерінен теориялық мағлҧматтар беріліп, әрбір тақырып бойынша жинақталған тапсырмаларда студенттердің ӛз беттерімен орындауларына арналған есептер келтірілген. Ҧсынылып отырған оқулық С/С++ тілдерінде программалауды ӛз бетінше оқып ҥйренгісі келетін оқырмандардың да қажетіне жарайды деген сенімдеміз. Бӛрібаев Б. 2

3 КІРІСПЕ Ӛткен ғасырдың 80-ші жылдары басында UNIX операциялық жҥйесінің басқаруымен жҧмыс істейтін компьютерлер әлемінде ең белгілі тілдің бірі С (си) тілі болды. Содан бері ол дербес компьютерлер мен мейнфреймдер (ҥлкен компьютердер) жҧмыс істейтін негізгі тілдердің біріне айналды. Программалық жабдықтамалармен айналысатын кӛптеген фирмалар бҧл тілді мәтіндік процессорларды, электрондық кестелерді, компиляторларды қҧру ҥшін кең қолданып келеді. Соңғы кездерде С/С++ тілдері ең кең таралған тілдерге айналды. С/С++ тілдерінің артықшылықтарына ондағы программалардың тез орындалуы, мәтінінің қысқа болуы, тҥйінді сӛздерінің аз болуы, тс.с. жатады. Бҧл тілдердің ассемблерге ҧқсас басқару мҥмкіндіктері де бар. Программаларды ӛз қалауыңызша максималды орындау жылдамдығына немесе жадты тиімді пайдалануға ҥйлестіруіңізге болады. Белгілі бір операциялық жҥйеге арнап жазылған программаларды басқа жҥйелерге кедергісіз немесе аздаған ӛзгертулер енгізе отырып кӛшіре аласыз. Ол аппараттық жабдықтамалар жҧмысына тікелей араласып, жедел жадтың жекелеген биттерімен арифметикалық және логикалық амалдар орындау мҥмкіндігін туғызады. Функциялардың кӛлемді кітапханасы программалаушылар алдында тҧрған кҥрделі мәселелерді жеңіл және жылдам шешуге мҥмкіндік береді. С++ тілінде программалауды ҥйрену компьютерлік технологияларды игергісі келетін әрбір маманның алғашқы қадамдарының бірі болуы тиіс. Олай дейтініміз С/С++ және осыларға ҧқсас тілдер қазіргі кезде ҥздіксіз даму ҥстінде. Сол себепті назарларыңызға ҧсынылып отырған оқу қҧралының алдына қойған мақсаты студенттерді тиімді де қысқа мәтінді программалар жазуға және олардың нәтижелерін алып, тҥрлендіру істеріне машықтандыру болып табылады. Оқу қҧралы тҧтынушының программалау дәрежесінің кез келген деңгейіне арналған. Программалауды енді ҥйрене бастаған студенттер ҥшін ол оқулық болса, тәжірибелі программалаушылар ҥшін анықтамалық қҧрал ретінде пайдаланылуы мҥмкін. Бҧл оқулық ӛмір талабына сай жазылып, жаратылыстану ғылымдары мен техникалық салада білім алу барысында жеке оқу пәндері болып қалыптасқан Алгоритмдер және мәліметтер құрылымы, Алгоритмдеу және программалау тілдері, Программалау технологиялары, Объектіге бағытталған программалау сабақтарында қолдану ҥшін шығарылып отыр. Мҧнда алгоритм қҧру жайлы тҥсініктер беріліп, қазіргі кездегі кең тараған С/С++ тілдерінің ерекшеліктері қарастырылып, есептерді компьютерде орындау шаралары жҥзеге асырылады. Оқу қҧралында теориялық мағлҧматтардың кӛптеген нақты мысалдар мен жаттығулар арқылы тҥсіндіріліуі кітаптың негізгі бір ерекшелігі деуге болады. Мемлекеттік тілімізге әлі информатика терминдері толық аударылып, олардың стандарты бекітілмегендіктен, кітап соңында қолданылған терминдердің бірсыпыра аудармасы келтірілген. Қазақ тілінде жарық кӛріп отырған бҧл оқу қҧралы тӛл тілімізде дәріс алып жатқан студенттеріміз ҥшін программалау негіздерінің қыры мен сырын меңгеру жолында кӛмекші қҧрал бола алады деген сенімдеміз. 3

4 1 ДЕРБЕС КОМПЬЮТЕРЛЕРДІҢ ПРОГРАММАЛЫҚ ЖАБДЫҚТАМАЛАРЫ ХХ ғасырдағы ғылым мен ӛндірістің жедел ӛркендеп дамуы адамға керекті ақпараттың тез артуына әкелді. Бҧдан ақпаратты жіктерге (кластарға), тақырыптық топтарға бӛліп, оларды сақтау, қажет кезінде шапшаң іздеп таба білу және ақпараттың ӛзгеру заңдылықтарын зерттеу қажеттігі туды. Осы мәселелерді ғылыми тҧрғыдан зерттейтін техника саласын алдымен кибернетика, ал кейіннен оның ақпарат ӛңдеуге қатысты бӛлігін информатика деп атады. Бҧл сӛз француз тіліндегі "Іnformatіgue" деген ҧғым атауынан шыққан, ал ағылшын тілінде сӛйлейтін елдердегі "Computer scіence" деп аталатын ғылым саласы да осы информатика сӛзінің баламасы болып табылады. Cонымен, ақпаратты қабылдау, сақтау, тҥрлену және тасымалдау жолдарын зерттейтін информатиканың негізгі аппараты электрондық есептеуіш машинасы, яғни компьютер болып саналады. Сол себепті компьютерді зерттеу ілімдерін де информатика деп тҥсінген жӛн. Информатика 1.1-суретте кӛрсетілген ҥш бӛліктен тҧрады. Техникалық жабдықтамалар (ағылшынша hardware) мен программалық жабдықтамалар (ағылшынша software) әрбір оқулықта егжей-тегжейлі тҥсіндірілетін болса, ал осы екеуінің негізі болып есептелетін алгоритмдік бӛлік соңғы кезде ғана толық тҥрде бір жҥйеге келтіріліп, информатиканы оқытудың ӛзекті мәселесі ретінде кеңінен қарастырыла бастады. Егерде информатиканың мағынасын толық ашатын болсақ, оны 1) ақпаратты автоматты тҥрде жинау, сақтау, іздеу және тасымалдау, 2) ақпаратты ӛңдеу және тҥрлендіру тәсілдерін жасау (ойлап табу), 3) ақпаратты ӛңдейтін электрондық Алгоритмдiк бӛлiк есептеуіш техникасын дамыту жолдары деп тҥсіну керек. Қазіргі кезде кез келген ғылым саласында ӛте кӛп ақпарат жинақталған. Мысалы, физика, химия, математика, т.б. салаларда ӛте кӛп формулалар, ҧғымдар, схемалар бар. Оларды оқып-ҥйрену ҥшін информатиканы кеңінен қолдануға болады. Осы тҧрғыдан алғанда информатиканы оқытудың негізгі мақсаты компьютерлердегі ақпаратты сақтау, ӛңдеу жолдарымен танысу және ҥйрену; қалаған мамандықты игеру жолында кездесетін есептерді шығару ҥшін компьютерді кеңірек қолдана білу. Сондықтан есептер шығару кезінде информатиканың алгоритмдік және программалық бӛліктерінің атқаратын маңызы зор. Бірақ бҧл екеуінің жҧмыс нәтижесін компьютерсіз алу мҥмкін емес. Енді информатиканың программалық бӛлігін толығырақ қарастырайық. 1.1 Программалар мен олардың түрлері Компьютердегі информация екі ҥлкен топтан тҧрады: Программалар алгоритмдердің компьютерге түсінікті командалар немесе операторлар тізбегі түрінде жазылған нұсқасы. 4 ИНФОРМАТИКА Программалық бӛлiк Техникалық бӛлiк 1.1-сурет. Информатиканың қҧрамы

5 Мәліметтер (данные, операнды) программалар өңдейтін немесе солардың жұмысы нәтижесінде пайда болатын информациялар жиыны, құжаттар. Кез келген программаның міндеті, атқаратын жҧмысы аппараттық қҧралдарды басқару. Компьютерде программаның дҧрыс жҧмыс істеуі ҥшін ол қатесіз, дҧрыс қҧрастырылып, ӛзінің жеке тҥсініктеме қҧжаты (документация) болуы тиіс. Сондықтан оны программалық жабдықтама деген терминмен атайды. Компьютердің программалық жабдықтамасы қҧрамы программалық конфигурация деп аталады. Программалық жабдықтама қызметі: компьютер жҧмысын қамтамасыз ету; тҧтынушы мен компьютер байланысын жеңілдету; есептеу жҥйесінің мҥмкіндігін кеңейту; қҧрылғыларды пайдалану тиімділігін арттыру; адамның жҧмыс сапасы мен ӛнімділігін кӛтеру. Программа жасауға қатысатындар: Тұтынушы, пайдаланушы (user) есепті, мәселені қоюшы. Ол программа жазбайды, бірақ қай есепті шығарып, қандай нәтиже алу керектігін біледі. Программалаушы программа жасаушы, яғни оны жазатын адам. Ол тҧтынушының талабына сәйкес компьютерге нҧсқаулар дайындап, соларды машина командалары ретінде жазып шығады. Компьютер командаларды атқарушы, орындаушы құрал. Ол командаларға сәйкес тҧтынушы мәліметтерін жылдам ӛңдейді. Мәліметтер мен программаларды ӛзіне тҥсінікті екілік (он алтылық) жҥйеге алмастырып, программаны орындап, нәтижесін алып, оны да екілік жҥйеден тҧтынушыға тҥсінікті тілге тҥрлендіріп береді. Дербес компьютер деп бір адамның жеке пайдаланатын есептеу машинасын айтады. Программалар жазу үшін үш тіл қажет: 1. Машиналық кодтар тілі компьютерге тҥсінікті тіл (екілік және 16-лық кодтар тҥрінде жазылады). Ассемблер тілі осыған жақын. 2. Программалау тілі программалаушыға тҥсінікті тіл (мәтін, сӛз, команда тҥрінде жазылады). Бейсик, Паскаль, Си, Си++, Ява (Java) тілдері. 3. Бейнелер (образдар) тілі тҧтынушыға тҥсінікті тіл (мәтін және графика), яғни қарапайым кітап тілі деуге негіз бар. Біз екінші топты қарастырамыз. 1.2 Программалық жабдықтама деңгейлері Программалар арасында ӛзара байланыс болады, яғни кӛптеген программалар жҧмысы тӛменгі деңгейдегі программалар жҧмысына негізделіп жасалады. Программаралық интерфейс программалардың бір-бірімен байланысты бірнеше деңгейлерге бӛлінуі. Программалық жабдықтама деңгейлері пирамида тәріздес, жоғары деңгей алдыңғы (тӛменгі) деңгейлерге сҥйенеді. 5

6 1.2 сурет. Программалық жабдықтама қҧрылымы Базалық деңгей Базалық деңгей ең тӛменгі деңгей. Ол негізгі аппараттық қҧралдармен байланысу ісін атқарады. Базалық программалық жабдықтамалар базалық аппараттық құралдар құрамындағы тұрақты жады микросхемаларында жазылып сақталады да, базалық енгізу-шығару жҥйесін (BIOS) қҧрайды. Программалар мен мәліметтер аппараттарды зауыттан шығару кезінде микросхемаларға жазылады, кейіннен ӛзгертілмейді. Жүйелік деңгей Жүйелік деңгей ӛтпелі деңгей. Бҧл деңгей программалары басқа программаларды тӛменгі базалық программалармен және тікелей аппаратурамен байланыстырады. Осы программаларға байланысты компьютердің қызмет ету кӛрсеткіштері қалыптасады. 6

7 Компьютерге жаңа қҧрылғы қоссақ, сол қҧрылғының жүйелік деңгей программасы басқа программаларды осы қҧрылғымен байланыстырады. Бір қҧрылғыны осылай басқа программалармен байланыстыру программасы драйвер деп аталады (принтер, тышқан, диск, дисплей драйверлері болады). Тағы бір жҥйелік деңгей программасы қҧрылғыны адаммен байланыстырады. Соның кӛмегімен компьтерге мәлімет енгіземіз, басқарамыз, нәтиже ала аламыз. Бҧлар тҧтынушы интерфейсін басқару қҧралдары, осылар компьютер жҧмыс ӛнімділігін, тиімділігін қамтамасыз етеді. Жҥйелік деңгейдегі программалар жиыны компьютер операциялық жүйесінің (системасының) ядросын қҧрайды. Операциялық система (ОС) ядросының болуы адамның компьютермен жҧмыс істеуінің алғашқы шарты. ОС ядросы компьютер жадын, енгізу-шығару процесін, файл жҥйесін, командаларды ӛңдеуді басқару, т.б. жҧмыстар атқарады. Қызметтік деңгей Бҧл деңгей программалары базалық деңгей программаларымен де және жҥйелік деңгей программаларымен де байланыса алады. Қызметтік программалар (утилиттер) жҧмысы компьютерлік жҥйені тексеру мен баптау (параметрлерін тағайындау) жҧмыстарын автоматтандыру және де жҥйелік программалар жҧмысын жақсарту. Утилиттер жиі қайталанатын операцияларды мысалы, магниттік дискіні форматтау, дискіні дефрагментациялау, файлдарды архивтеу, вирустарды тауып аластау, т.б. істерді орындайды. Қызметтік программаларға 1. файл диспетчерлері; 2. архиваторлар; 3. диагностикалық программалар; 4. инсталляция жасау программалары; 5. коммуникациялық программалар, т.б. жатады. Қолданбалы деңгей Қолданбалы деңгей нақты есептер шығаратын қолданбалы программалар жиынынан (ӛндіріс, шығармашылық, ойын және оқыту) тҧрады. Қолданбалы және жҥйелік программалар арасында тығыз байланыс бар. Қолданбалы программаларға мәтіндік редакторлар, мәтіндік процессорлар, графикалық редакторлар, мәліметтер базасын басқару жҥйелері (МББЖ), электрондық кестелер, автоматтандырылған жобалау жҥйелері, баспа жҥйелері, аударма программалары, браузерлер, HTML-редакторлар, бухгалтерлік жҥйелер, т.б. жатады. 1.3 Программалық жабдықтамалардың жіктелуі Жҥйелiк программалар компьютердің жҧмыс істеуі ҥшін керек. Олар операциялық жҥйелерге, драйверлер мен утилиттерге және тест программаларына бӛлінеді. Операциялық жүйелер немесе системалар (ОС) компьютердi басқаратын және құрылғыларды қолданбалы программалармен байланыстыратын 7

8 программалар тобы. Дербес компьютерлерде кең тараған операциялық жҥйелерге MS (PC) DOS, WINDOWS 95/98, WINDOWS 2000/ХР, WINDOWS 7, OS/2, UNIX, т.б. жатады. 1.3 сурет. Программалық жабдықтамалардың жіктелуі Программалық қоршаулар дербес компьютер мен жҧмыс істеуші адамның арасындағы іс-әрекеттерді жеңілдететін программалар. MS DOS ҥшін әдетте Norton Commander қоршауы, ал Windows ортасы ҥшін Norton Desktop, Norton Navigator, FAR пайдаланылады. Драйверлер ОС жҥйелерін сыртқы қҧрылғылармен (принтерлермен, дискілермен, пернетақтамен) байланыстыратын программалар тобы. Утилиттер ОС-ны кеңейтіп, қосымша қызмет атқаруға керектi программалар тобы. Оларға орыс-қазақ әріптерін енгізуді, антивирустiк (вирустерге қарсы) программаларды, мәлiметтердi архивтеу (қысу) программаларын келтiруге болады. Тест программалары компьютердiң жҧмыс iстеу қабiлетiн (диагностика) тексеретiн программалар, олар ақауы бар қҧрылғыларды анықтап, экранға мәліметтер шығарады. Программалау жүйелері программалау тілдері мен трансляторлардан (тҥрлендіргіш программалар) тҧрады, олар арқылы жҥйелік және қолданбалы программалық жабдықтамалар жасалады. Программалау тілдері ФОРТРАН, ПАСКАЛЬ, БЕЙСИК, ЛИСП, С, С++, АДА, ПРОЛОГ, ЯВА, т.б. Олар ағылшын тіліне жақын жасанды тілде жазылады да, кейіннен трансляторлар кӛмегімен машиналық кодтарға тҥрлендіріледі. Трансляторлар интерпретаторларға және компиляторларға бӛлінеді. Интерпретаторлар әрбір команданы машина тліне аудара салып, бірден орындайтын трансляторлар тобы, олардың артықшылығы тҧтынушымен диалог режимінде жҧмыс атқарады, кемшілігі жҧмыс ӛнімділігі тӛмен болады. 8

9 Компилятор командаларды орындамай тҧрып, машиналық кодтарға толық аударатын программа. Осының нәтижесінде объектілік модуль деп аталатын программа жасалады, олардың бірнешеуін біріктіру арқылы жҥктеу модулі жасалып барып, осы модульді орындау арқылы мәселе (есеп) шешіледі. Программалық жҥйелер жасайтын мықты фирмаларға Microsoft Corporation және Borland International жатады. Microsoft фирмасы: Quick Basic, Visual Basic, Microsoft С++ программаларын, ал Borland фирмасы Turbo Basic, Borland C, Turbo Pascal программалық тiлдерiн жасап таратуда. Қолданбалы программалар Қолданбалы (кәделi) программалық жабдықтамалар белгiлi бiр мамандық саласында нақты есептер шығара алатын программалар жиыны. Оларға қарапайым программадан бастап кҥрделi есептердi шығара алатын қуатты мамандандырылған жҥйелердi (мәтіндік процесссор, графикалық редактор, баспаханалық жҥйелер т.б.), экономикалық, ғылыми мәселелерге арналған және жалпы кӛпшiлiкке қызмет ету кешендерiн де жатқызуға болады. Дербес компьютерлердiң кең тарауына басты себеп болған қолданбалы программалардың кең таралуы едi, бҧл программалар тек бiр есептi шығарып қана қоймай, белгiлi бiр мамандық саласында есеп жҧмыстарын тҥгел автоматтандыруды немесе информацияның белгiлi бiр тҥрлерiн ӛңдеудi тҥгел қамти алатын болды. Офистік программалар осы қолданбалы программаларға жатады. Олар мынадай тҥрлерге жiктеледi: мәтін редакторлары (Блокнот, WordPad, Word, PageMaker, т.с.); графикалық редакторлар (Paint,Fotoshop, CorelDraw); электрондық кестелер (кестелік процессорлар Excel, Lotus, Works, т.с.с.); мәліметтер базасы (Access, Dbase, FoxPro, т.б.); Интернетпен жҧмыс істейтін программалар тобы (Netscape Navigator, Internet Explorer, Opera, т.б.); автоматтық жобалау программалары (AutoCad); оқыту және ойнау программалары, т.б. 1.4 Программаларды коммерциялық түрде тарату Программаларды қызметтеріне қарай жіктеуден басқа оларды тарату, сату істеріне қарай да жіктеуге болады. Тегін таратылатын программалар (freeware) кӛптеген программалаушылар жасайтын шағын утилит-программалар және басқа сатылатын программаларға тегін қосымша толықтырмалар. Бҧлар Интернеттен кӛшіріп алынады. Коммерциялық программалар (commercialware) сатылатын программалар, бҧларға барлық ірі-ірі программалық дестелер кіреді. Интернет-дҥкендерде, сайттарда несиелік карточкалар (кәртішкелер) арқылы және қолма-қол ақшаға сатылады. Шартты тҥрде тегін программалар (shareware) кӛп тараған программалар тобы, утилиттер, кейде керекті кӛлемді программалар да осыған кіреді. Бҧларды шамалы мерзім ішінде тегін қолданып, сонан кейін аздап ақша тӛлеу 9

10 керек.егер сол мерзімде ақша тӛленбесе, олар мҥмкіндіктерінің біразын орындамай қояды немесе жиі-жиі ақша сҧрап мазаны алады. Тәжірибелік нҧсқалар дҧрыс жҧмыс атқаратын, сатылатын программалар. Біраз уақыт ӛткен соң, жҧмыс істемей, ақша сҧрайды. Кейбір мамандар оны бҧзып, ішіне кіріп уақытын ҧзартып алады немесе сағаты мен датасын кейінге ауыстырып қойып пайдаланады. Ал кейбірі бҧрынғысын деинсталлятормен ӛшіріп, қайтадан жазып алады немесе кӛшіріп аларда жҥйелік мерзімін алдағы уақытқа ауыстырады, сонда ол ҧзақ уақыт тегін істейді. Демоверсиялар (demoware) жарнамалық нҧсқалар, жҧмыс істегенмен, нәтижесін дискіде сақтамайды немесе қолдану мерзімі аз ғана уақытқа жасалады. Соңғы кезде информатика саласында программалық және аппараттық қҧралдардаға байланысты ақпараттық технология деген термин жиі айтылып жҥр. Бақылау сұрақтары 1. Информатиканың қҧрамы қандай? Информатиканың негізгі аппараты не? 2. Информатиканың толық мағынасы. 3. Программа дегеніміз не? Мәліметтер ше? 4. Программалық конфигурация ҧғымы. 5. Программалық жабдықтама қандай қызмет атқарады? 6. Программа жасауға кімдер қатынасады? 7. Программаралық интерфейс тҥсінігі. 8. Программалық жабдықтама деңгейлері. Базалық деңгей деген не? 9. Жҥйелік және қызметтік деңгйлер сипаттамалары. 10. Қолданбалы деңгйдің атқаратын қызметі. 11. Программалау жҥйелері деген не? Оның қҧрамы. 12. Программалық жабдықтамалар қалай жіктеледі? 13. Операциялық жҥйелер қызметі. 14. Программалық қоршаулар деген не? 15. Драйверлер, утилиттер ҧғымы. 16. Тест программалары қандай қызмет атқарады? 17. Интерпретатор, компилятор тҥсініктері, олардың ҧқсастықтары мен айырмашылықтары. 18. Қолданбалы (кәделi) программалық жабдықтамалар ҧғымы. 10

11 2 АҚПАРАТТЫҚ ТЕХНОЛОГИЯ ЖӘНЕ ТЕХНИКА 2.1 Ақпараттық технология түсінігі Технология грек тілінен аударғанда (techne) ӛнер (искусство), шеберлік, білгірлік деген сӛз, ал мҧны қазірде процесс ҧғымымен де беруге болады. Процесс алдағы мақсатқа жету жолында атқарылатын белгілі бір әрекеттер жиыны. Процесс адамдар таңдап алған стратегиямен анықталуы тиіс, ол әр тҥрлі қҧралдар және тәсілдер кӛмегімен жҥзеге асырылады. Ақпарат кәдімгі материалдық ресурстар мҧнай, газ, пайдалы қазба байлықтар тәрізді қоғамның аса бағалы ресурстарына жатады, сондықтан оны ӛңдеу процесін материалдық ресурстарды ӛңдеу сияқты технология деп қабылдауға болады. Материалдық ресурстар Мәліметтер Материалдық ӛндіріс технологиясы Ақпараттық технология Ӛнім Ақпараттық ӛнім 2.1 сурет. Ақпараттық технологияны материалдық ресурстарды ӛңдеу технологиясының аналогы тәрізді қарастыру Ақпараттық технология объектінің, процестің немесе қҧбылыстың (ақпараттық ӛнімнің) қалып-кҥйі жайлы жаңа сападағы ақпарат алу мақсатында мәліметтерді (алғашқы ақпаратты) жинау, ӛңдеу және тасымалдау қҧралдары мен тәсілдері жиынын пайдаланатын процесс. Ақпараттық технология компьютердің көмегімен ақпаратты жинау, енгізу, тасымалдау, сұрыптау, іздеу, реттеу, өзгерту және өңдеу жұмыстарының тізбегі деп те айтуға болады. Материалдық технология ӛндірісінің мақсаты адамның немесе жҥйенің талаптарын қанағаттандыратын ӛнім алу. Ақпараттық технологияның мақсаты адамдар талдай алатын ақпарат ӛндіру, соның негізінде белгілі бір әрекетті орындауға қажет шешім қабылдау ісі атқарылады. Ақпараттық технологияның ӛндірістік технологиядан айырмашылығы оны адамның қатысуынсыз роботтар, компьютерлер іске асыратын ҥздіксіз процеске айналдыруға болмайды. Ӛйткені ол қҧжаттың кӛшірмесін алу, есепке енгізу, есеп шығару секілді жҧмыстармен қатар шығармашылық ізденісті талап ететін шешімдер қабылдау, мәселені жҥргізу жолын ӛзгерту, бірнеше мҥмкіндіктерді салыстыра отырып, олардың ішінен ең тиімдісін іріктеп алу сияқты таңдау жҧмыстарын кеңінен жҥргізумен ӛте тығыз байланысты болады. Сондықтан ақпараттық технология "адамдық факторға" ҥлкен кӛңіл бӛледі және оның шеберлік деңгейінің ӛсуіне әсер етеді. Бір материалдық ресурсқа әр тҥрлі технологиялар қолдану арқылы әр тҥрлі бҧйымдар, ӛнімдер алуға болады. Дәл осындай тҧжырым ақпарат ӛңдеу технологияларына да сәйкес келеді. 11

12 Ӛнімдер алуға арналған технологиялар құрамы Ақпараттық технология қоғамдағы ақпараттық ресурстарды пайдалану процесінің маңызды қҧраушысы болып табылады. Қазіргі кезге дейін ол ғылыми-техникалық прогрестің дамуына және ақпарат ӛңдейтін жаңа техникалық қҧралдардың шығуына байланысты бірнеше эволюциялық кезеңдерден ӛтті. Қазіргі ақпарат ӛңдеу технологиясының негізгі техникалық қҧралы компьютер болып саналады, ол технологиялық процестің қҧрылу концепциясына және нәтижелік ақпарат сапасына да бірсыпыра әсерін тигізді. Дербес компьютердің ақпараттық ортаға енуі және байланыстың телекоммуникациялық қҧралдарын пайдалану ақпараттық технологияның жаңа кезеңі келгенін анықтады. Осыған орай технология атауына синоним сӛздер болып табылатын "жаңа", "компьютерлік" немесе "заманауи" тәрізді тіркестер қосылып қолданыла бастады. "Жаңа" сӛзі бҧл технологияның эволюциялық сипатын емес новаторлық мҥмкіндігін айқындайды. Оның новаторлық мҥмкіндігі мекемелердің әр тҥрлі жҧмыстарының мазмҧндарының да жаңаруына сәйкес пайда болды. Жаңа ақпараттық технология ҧғымына ақпаратты тасымалдайтын телефон, телеграф, телекоммуникация, факс тәрізді қҧрылғылардан тҧратын коммуникациялық технологиялар да кіреді. Жаңа ақпараттық технологиялардың негізгі сипаттамалары Методологиясы (әдіснамасы) Жаңадан шыққан ақпарат ӛңдеу қҧралдары Біртҧтас технологиялық жҥйелер Ақпаратты мақсатқа сәйкес тҥрде жасау, тасымалдау, сақтау және бейнелеу Негізгі белгісі Басқару технологиясына "кірістіру" Мамандар мен менеджерлер қызметін интеграциялау Әлеуметтік орта заңдылықтарын есепке алу Нәтижесі Коммуникациялардың жаңа технологиясы Ақпарат ӛңдеудің жаңа технологиясы Басқару шешімдерін қабылдаудың жаңа технологиясы 12

13 Жаңа ақпараттық технология дербес компьютерлер мен телекоммуникациялық қҧралдарды пайдаланатын, қолданушылармен "жылы жҥзді" интерфейс арқылы жҧмыс істейтін ақпараттық технология тҥрі. Жаңа ақпараттық технологияның ҥш негізгі қағидасы (принципі) бар, олар: компьютермен интерактивті режимде жҧмыс істеу; басқа программалық ӛнімдермен бірігуі (байланысы, қатынас жасауы); мәліметтерді де, мәселені қоюды да ӛзгерту процесінің икемділігі. Ақпараттық технологиялар оның негізгі ортасы болып табылатын ақпараттық жҥйелермен тығыз байланысты. Ақпараттық технологиялар компьютерде сақталатын мәліметтермен шектелген ережелерге сәйкес орындалатын кез келген операциялардан, әрекеттерден, кезеңдерден тҧратын процесс. Ақпараттық технологияның негізгі мақсаты алғашқы мәліметтерден белгіленген әрекеттерді орындау нәтижесінде қолданушыға керекті ақпарат алу. Ақпараттық жҥйенің қҧраушы элементтері компьютерлер, компьютерлік желілер, программалық ӛнімдер, мәліметтер базасы, адамдар, байланысудың техникалық және программалық жабдықтары болып келетін орта болып табылады. Ақпараттық жҥйенің негізгі мақсаты ақпаратты сақтау мен ӛңдеуді ҧйымдастыру. Ақпараттық жҥйе мәлімет ӛңдеудің адамдық-компьютерлік жҥйесі болып табылады. Ақпараттық жҥйеге бағытталған ақпараттық технологияны білмей, жҥйе функцияларын жҥзеге асыру мҥмкін емес. Ақпараттық технология ақпараттық жҥйе аймағынан тыс жҧмыс істей береді. Екі ақпараттық технологияны басқару және компьютерлік технологияларды сәйкестендіре білу ақпараттық жҥйенің табысты жҧмыс істеуінің кепілі бола алады. Осы айтылғандарды есепке ала отырып ақпараттық технология және ақпараттық жҥйе ҧғымдарының бҧрынғы анықтамаларын толықтыра тҥсуге болады. Ақпараттық технология компьютерде мәлімет ӛңдеу кезінде персоналдың мақсатқа жету жолында атқаратын нақты анықталған әрекеттер тізбегі. Ақпараттық жүйе компьютерлік ақпараттық технологияларды пайдалану арқылы шешім қабылдауды сҥйемелдеу және ақпараттық ӛнім ӛндіру істерінің адамдық-компьютерлік жҥйесі. Қазіргі кездегі ақпараттық технология ҧғымын мәліметтер ӛңдеуге байланысты ҥш тҥрге жіктеуге болады, олар: есепке алу, талдау және шешім қабылдау. Осы уақытқа дейін бҧл жҧмыстар адамның басқаруымен қағазға жазылған қҧжатты ӛңдеу тҥрінде ӛтетін, ал енді басқару, ҧйымдастыру жҧмыстарын компьютер кӛмегімен автоматты тҥрде атқару жаңа ақпараттық технологияның тууына себепші болды. Бҧл жаңа технологияның бҧрынғы технологиядан (қҧжатты машинкада басу, байланысты телефонмен жҥргізу, сӛзді диктофонға жазу) айырмашылығы тізбектеле орналасқан ақпараттық техника, "жылы жҥзді" программалық жабдықтама және дамытылған компьютерлік байланысты кеңінен қолдану. Сонымен жаңа ақпараттық технология тӛмендегі мынадай мҥмкіндіктерді орындауы тиіс: әрбір адам мәліметтерді дҧрыс орналастыра білуі (программалау емес) керек; мәліметті ӛңдеу барысында оларды ӛрнектеу, сақтау, іздеу, бейнелеу және 13

14 ӛзгерістен қорғаудың бірыңғай ҥлгісіне келтіріп, жинақталған мәліметтер қоймасын пайдаланатын ақпараттық қолғабыс кӛрсету; кез келген қҧжатты қағазсыз ӛңдеу ісін ҧйымдастыру, мҧнда қағазға қҧжаттың ең соңғы нҧсқасы ғана тҥсіріледі, ал басқалары электрондық машинаның мәлімет жинақтағыштарында (дискілер) сақталады да экранда кӛрсетіледі; адам ҥшін кӛптеген жеңілдіктері бар есепті шығарудың сҧхбаттасу режимін (интерактивті режим) жҥргізу; бір-бірімен байланысқан компьютерлерді пайдалана отырып, қҧжатты ҧжымдық тҥрде даярлау; есепті шығару барысында мәліметтерді бейнелеу тәсілін жылдам ӛзгерту мҥмкіндігі болу. Бҧл кҥндері жаңа ақпараттық технология информатиканың негізгі бір саласы болып ЭЕМ Телегаф Магниттiк Теледидар, жазу радио, телефон табылады, оның болашақта басқа салаларда істейтін мамандар жҧмысына тигізетін әсері зор болады деп кҥтілуде. Ақпараттық техника ақпаратты ӛңдеуге керекті техникалық аспаптар жиыны. 1.4-суретте кӛрсетілген алғашқы екі техника тҥрі ҥздік-ҥздік цифр тҥрінде берілген дискретті мәліметтермен жҧмыс істейді, олар: Компьютерлер ҥшін екілік сандар, ал телеграфияда морзе әліппесі. Қалған техника тҥрлері ҥздіксіз электр сигналы ретінде берілетін мәліметтерді пайдаланады. Болашақта дискретті мәліметтермен жҧмыс істейтін аспаптар кӛбейе тҥсуі тиіс, ӛйткені олар жоғары дәлдікпен сенімді тҥрде тыңғылықты қызмет атқарады. Сол себепті қазіргі кезеңде цифрлы телефондар мен теледидарлар шығарыла бастады. Халық шаруашылығында ақпаратты кең қолдану ҥшін оны сақтайтын, жеткізетін және ӛңдейтін қҧралдарды кӛптеп жасау керек болды. Соның нәтижесінде ақпараттық техника кҥннен-кҥнге кӛбеюде, әсіресе оның ішінде электрондық машиналарға ӛте кӛп кӛңіл бӛлінуде, ӛйткені ақпаратты жылдам ӛңдеу ҥшін қолданылатын негізгі электрондық тетік есептеу машинасы болып табылады. Сонымен қазіргі кезде информатиканы кеңінен қолданатын орындарға мыналарды жатқызуға болады: 1) еңбек ету аспаптарын басқару, яғни станоктарды, роботтарды, машиналарды басқару; 2) ғылыми-зерттеу жҧмыстарын жҥргізуді автоматтандыру; 3) компьютерлерді халық шаруашылығындағы экономикалық ҧйымдастыру, басқару жҧмыстарында пайдалану; 4) компьютерлерді оқыту және халық шаруашылығына керекті мамандар даярлауда қолдану; 5) компьютерлерді халыққа ақпараттық қызмет кӛрсетуге пайдалану (медицина, сауда, тҧрмыс қажетін ӛтеу, энергетика т.б.). Информатиканың дамуы елдің экономикалық қҧрылымының және еңбек 14 АҚПАРАТТЫҚ ТЕХНИКА 2.2-сурет. Ақпараттық техника қҧрамы

15 ӛнімділігінің ӛсу деңгейін кӛрсетеді, сол себепті ол елдің экономикалық қуаттылығының кӛрсеткіші бола алады. 2.2 Ақпараттық ресурстар және ӛнімдер Ресурстар сақтаулы заттар, белгілі бір нәрселердің шығу көздері деген мағына береді. Мҥмкіндіктердің басым бӛлігі материалдық ӛндіріске бағытталған біздің қоғамда классикалық экономикалық категориялар (санаттарға) болып саналатын ресурстардың бірнеше негізгі тҥрлері бар, олар: материалдық ресурстар қоғамдық ӛнім ӛндіру процесінде пайдалануға арналған еңбек заттары, мысалы, шикізат, материалдар, отын, энергия, полуфабрикаттар (жартылай шикізаттар), қҧралдар, т.б.; табиғи ресурстар адамдардың материалдық және рухани талаптарын қанағаттандыру ҥшін пайдаланылатын объектілер, процестер, табиғи жағдайлар; еңбек ресурстары қоғамда жҧмыс істеу ҥшін жалпы және кәсіби білімі бар адамдар; қаржылық ресурстар мемлекеттік немесе коммерциялық қҧрылымдардың қолындағы ақшалық қаржылар; энергетикалық ресурстар энергия кӛздері, мысалы, кӛмір, мҧнай, мҧнай ӛнімдері, газ, гидроэнергия, электр энергиясы, т.б. Ақпараттық қоғамда дәстҥрлі ресурс тҥрлерінен гӛрі ақпараттық ресурстарға кӛбірек назар аударылады. Олар бҧрыннан болғанменен, кезінде, экономикалық немесе басқа категориялар ретінде қарастырылмаған; ешкім олар туралы арнайы пікір айтпаған, әрине олар жайлы анықтамалар, тҥсініктер де болмаған еді. Қазіргі ақпараттық қоғамға ӛту кезеңіндегі ең ӛзекті тҥсініктердің бірі "ақпараттық ресурстар" ҧғымы болып отыр. Бҧған соңғы кезде кӛптеген соны пікірлер, анықтамалар, тҥсініктер беріліп келеді. Ақпараттық ресурстар жеке қҧжаттар және жеке қҧжаттар жиымдары, ақпараттық жҥйелердегі (кітапханаларда, мҧрағаттарда, қорларда (фондтарда), мәліметтер банктерінде, басқа да ақпараттық жҥйелерде) қҧжаттар мен қҧжаттар жиымдары. Ақпараттық ресурстар қоғамдағы әлеуметтік мақсатта пайдалануға арналған және белгілі бір материалдық жинақтауышта тіркелген адамдардың дайындаған білімдері. Қоғамның ақпараттық ресурстары білім ретінде оларды жасаған, жинақтаған, талдаған адамдардан бӛлек сақтала береді. Адамзат білімі қҧжаттар, мәліметтер базасы, білім базасы, алгоритмдер, компьютерлік программалар және де ӛнер, әдебиет шығармалары, ғылыми еңбектер тҥрінде жазылып сақтала береді. Мемлекеттің, аймақтың, ҧйымның ақпараттық ресурстары шикізат, энергия қорлары, пайдалы қазба байлықтар сияқты стратегиялық ресурстар ретінде қарастырылады. Ақпараттық ресурстар ақпараттық өнім жасаудың негізгі базасы болып табылады. Кез келген ақпараттық ӛнім оны жасаушының ақпараттық моделін бейнелейді де, оның қарастырып отырған нақты пәндік аймағы жайлы жеке кӛзқарасын кӛрсетеді. 15

16 Ақпараттық ӛнім адамның интеллектуалдық еңбегінің нәтижесі бола отырып, белгілі бір материалдық мәлімет жинақтайтын кітап, программа, мақала, қҧжат, т.с.с. тҥрінде тіркеліп қалуы тиіс. Ақпараттық ӛнім заттық немесе заттық емес формада таратуға арнай отырып, ақпаратты жасаушы адам қалыптастырған мәліметтер жиыны. Ақпараттық ӛнім кез келген материалдық тауар (ӛнім) сияқты қызмет кӛрсету жолымен таратыла алады. Кӛрсетілетін қызмет тҥрлері ақпараттық ресурстарды пайдалану аймағындағы оның кӛлемімен, сапасымен, қолданылу бағытымен және солардың негізінде жасалатын ақпараттық ӛнімдер арқылы анықталады. Ақпараттық қызмет тек компьютерлік немесе компьютерлік емес нҧсқадағы мәліметтер базасы болған кезде ғана туындайды. Мәліметтер базасы ақпараттық қызмет кӛрсетудің негізгі кӛзі және шикізаты болып табылады. Мәліметтер базасы дәл осылай аталмағанмен, компьютерлік кезеңге дейін де кітапханалар, мҧрағаттар, анықтамалық бюролар тҥрінде болған еді. Оларда оқиғалар, қҧбылыстар, объектілер, процестер, жарияланымдар жайлы барлық мәліметтер сақталатын болатын. Мәліметтер базасы ҧйымдастыру ережелері мәліметтерді сипаттау, сақтау, ӛңдеу қағидаларына негізделіп, бір-бірімен байланысқан мәліметтер жиыны. Компьютерлер пайда болған соң, мәліметтер базасының кӛлемі тез ҧлғайды және соған сәйкес ақпараттық қызмет кӛрсету аймағы да кеңейді. Қызмет кӛрсету мекеменің немесе жеке адамның басқа бір адамның не мекеменің әр тҥрлі ӛнімдерді пайдалану талаптарын қанағаттандыруға бағытталған ӛндірістік емес іс-әрекеттерінің нәтижесі. Ақпараттық қызмет кӛрсету ақпараттық ӛнімдердің қолданушы (тҧтынушы) қолына пайдалануға берілуі. Ақпараттық қызмет кӛбінесе компьютер арқылы берілетін қызмет тҥрі болып саналады, бірақ одан оның ауқымы кең. Қызмет кӛрсету кезінде оны беруші мен алушы арасында келісім-шарт жасалып, онда қызмет кӛлемі, бағасы, қолданылатын ӛнім кӛрсетіледі. Ақпараттық қызмет кӛрсету компьютер немесе басқа бір мҥмкіндік арқылы мәліметтер базасы тҥрінде беріледі. Енді ақпараттық технология ҧғымымен сабақтас программалау технологиясы мәселелеріне кеңірек тоқталайық. Бақылау сұрақтары 1. Технология, процесс ҧғымдары. 2. Ақпараттық технология мен материалдық технология айырмашылықтары. 3. Ақпараттық технология дегеніміз не? Ақпараттық жҥйе ше? 4. Жаңа ақпараттық технология ҧғымы. 5. Ақпараттық техника қҧрамы. 6. Ақпараттық ресурстар және ӛнімдер ҧғымдары. 7. Ақпараттық қызмет кӛрсету дегеніміз не? 16

17 3 ПРОГРАММАЛАУ ТЕХНОЛОГИЯЛАРЫ Программалау программа қҧру процесі, алгоритм ҧғымымен тығыз байланысты информатика саласының бір бӛлігі. Бҧл соңғы кезде ӛте жылдам дамып келе жатқан пән саласы. Бҧрынғы программалық және техникалық қҧралдарды дамыту мен жаңа мҥмкіндіктердің пайда болу тәжірибесі программалауды тҧрақты жетілдіріп келеді, осының нәтижесінде жаңа тәсілдер мен технологиялар шығып, олар қазіргі программалық жабдықтамаларды жасауға жаңа негіздеме болып табылады. Жаңа технологиялар жасау процесін зерттеу және олардың негізгі даму бағытын анықтау ісін жҥргізуді қазіргі технологияларды программалау деңгейімен салыстыра отырып, қолда бар программалық және аппараттық қҧралдар ерекшеліктерін қолдану арқылы жетілдіру қажет. Программалау технологиясы деп программалық жабдықтамаларды жасау процесінде пайдаланылатын қҧралдар мен тәсілдер жиынын айтады. Кез келген басқа технологиялар сияқты программалау технологиясы да тӛмендегі мҥмкіндіктерді қамтитын технологиялық нҧсқаулардан тҧрады: - технологиялық операцияларды орындау тізбегін кӛрсету; - кез келген операцияда орындала алатын шарттарды нақтылау; - әрбір операцияны олардың әрқайсысы ҥшін анықталған бастапқы мәліметтер, нәтижелер және де нҧсқаулар, нормативтер, стандарттар, бағалау критерийлері мен әдістері, т.б. арқылы сипаттау. Технология, операциялар мен олардың тізбегінен бӛлек, жобаланатын жҥйенің сипаттамасын, яғни оның жасалатын нақты кезеңінде пайдаланылатын моделін сипаттау тәсілін анықтайды. Технологиялар кӛбінесе мынадай екі тҥрге бӛлініп қарастырылады: 1) программа жасау процесінің нақты кезеңдерінде пайдаланылатын технология немесе осы кезеңдердегі жеке есептерді шығару; 2) бірнеше кезеңдерді біріктіретін немесе барлық кезеңдерді толық қамтитын технология. Алғашқы технология негізінде кӛбінесе нақты есепті шығара алатын шектеулі тҥрде қолданылатын тәсіл жатады. Ал екіншісінің негізі ретінде программа жасаудың әртҥрлі кезеңдерінде пайдаланылатын тәсілдер жиынын анықтайтын базалық тәсіл, яғни ортақ кӛзқарас (парадигма) немесе әдіснама (методология) қарастырылады. Программалаудың даму тарихында бір-бірінен айырмашылығы бар бірнеше парадигмалық сатылардың болғаны туралы айтылады. 3.1 Құрылымдық программалау Ӛткен ғасырдың 60 жылдары программалаудың «стихиялық» даму кезеңінде программа қҧрылымы, мәліметтер типтері сияқты ҧғымдар болмады. Сол себепті программалар қайшылықтары кӛп, тҥсінуге қиын кодтардан тҧратын еді. Ол кездегі программалау ӛзінше бір ӛнер тәрізді болып кӛрінетін. Программалаудағы сондай қиындықтан шығу ҥшін программалаудың қҧрылымдық парадигмасына кӛшу керек болды. Бҧрынғы прогаммалау тілдері пайда болған кездерден бастап, мынадай парадигма ҥстемдік еткен болатын. 17

18 «Қандай процедуралар керек екендігін анықтап алып, қолдануға болатын ең тиімді алгоритмдерді пайдаланыңыз». Прогаммалау тілдерінде осы парадигма параметрлерді қабылдап алып, нәтижелік мән қайтаруды қамтамасыз ететін функциялар арқылы сҥйемелденеді. Стильдің бҧл тҥрі оқулықтарда параметрлер функцияға қалай беріледі, параметрлердің, функциялардың (процедуралар, ішкі программалар, макроанықтаулар) әртҥрлі типтері қалай ажыратылады, т.с.с. пікірталас тҥрінде беріліп келеді. Фортран алғашқы процедуралық тіл; Алгол60, Алгол68, Паскаль және С сол нҧсқаға сәйкес кейінгі шыққан тілдер болып табылады. «Жақсы программалау стилінің» бір мысалы функцияның аргументпараметрі ретінде берілген санның квадрат тҥбірін табу функциясы; егер функцияның аргументі (параметрі) берілсе, ол нәтиже береді. Мҧндай есеп белгілі математикалық есептеулер арқылы шығарылады. Мысалы: double sqrt ( double arg) { // квадрат тҥбірді табу программалық коды void some_function () { double root2 = sqrt(2); // Мҧндай функция алгоритмдер қоймасына белгілі бір тәртіп орнатады да, оның атқаратын жҧмысы осы есептеумен аяқталады. Сонымен, программаны қҧрудың негізгі әдістемесі процедура болып табылады. Бҧл әдістеменің негізі алгоритм. Программа кӛлемінің ҧлғаюына байланысты ҥлкен кӛлемдегі есептерді бірнеше есептерге бӛлу мәселесі туындады. Сондықтан программалауда процедура тҥсінігі енгізілді. Процедура программалық кодтардың кӛлемін азайтуға мҥмкіндік туғызды. Программалаудағы құрылымдық көзқарас программалық жабдықтаманы жасаудың барлық кезеңдерін орындауды қамти отырып, қолдануға болатын технологиялық әдістер жиыны. Қҧрылымдық программалау негізінде кҥрделі жҥйелерді декомпозициялау (бӛліктерге бӛлу) тәсілі жатыр, мҧнда кӛлемді программа шағын ішкі программаларға бӛлініп барып, соларды жеке-жеке орындалу жолымен іске асырылады. Декомпозициялаудағы басқа да әдістердің (объектілік, логикалық, т.б.) пайда болуына байланысты бҧл тәсіл процедуралық декомпозиция деп аталды. Процедуралық декомпозицияның екінші бір ерекшелігі ретінде программа қҧруда тек базалық алгоритмдік қҧрылымдарды пайдаланып, GOTO операторын қолдануға тиым салынғанын айтуға болады. Негізгі үш базалық алгоритмдік құрылымдарға тізбекті, тармақты және қайталау алгоритмдері жатқызылды. Тізбекті қҧрылым кӛрсетілген кезекпен орныдалатын екі командадан тҧрады да, ары қарай солай жалғаса береді: <алдыңғы команда>; <келесі команда>. Тармақты құрылымның толық түрі белгілі бір шарттың орындалуы немесе 18

19 орындалмауына байланысты екі мҥмкіндіктің бірінің ғана атқарылуын кӛрсетеді. Бҧл қҧрылым С тілінде мынадай тҥрде жазылады: if <шарт> <шарт орындалғанда, атқарылатын команда>; else <шарт орындалмағанда, атқарылатын команда>; Тармақты құрылымның қысқаша түрі алдыңғы команданың дербес тҥрі, мҧнда шарт орындалмаған жағдайда, ешқандай команда атқарылмай, кезек келесі командаларға беріледі. Бҧл қҧрылымның С тіліндегі жазылуы: if <шарт> <шарт орындалғанда, атқарылатын команда>; Қайталау құрылымы (цикл) команданың белгілі бір параметрінің ӛзгеруі барысында, қайталанып бірнеше рет орындалатын операциялар тобын ыңғайлы тҥрде жазу ҥшін қолданылады. Мысалы, «әзірше (while)» қайталау қҧрылымы С тілінде былай жазылады: while <қайталану шарты> do <қайталанатын команда>; Цикл тұлғасы деп қайталанатын командалар тізбегін айтады, ол кейде бос та болуы мҥмкін (сирек кездесетін жағдай). Қайталау циклінің орындалу ережесі: егер шарт орындалмаса (жалған болса), циклді қайталау тоқтатылады; ал егер шарт орындалса (ақиқат болса), онда цикл тҧлғасы атқарылып, қайтадан шартты тексеру жҥргізіледі. Қҧрылымдық программалау есепті шағын қҧрылымдарға бӛліп, олардың әрқайсысын жеке қарастыруды қажет етеді. Мҧнда жобалау «жоғарыдан-тӛменге» қарай жҥргізілді де, жалпы қҧрылым идеясын жҥзеге асырып, ішкі интерфейс программаларын орындауды талап етті. Бҧған қоса, алгоритм конструкцияларына шектеулер қойылып, оларды формалды модель тҥрінде сипаттау ҧсынылды және алгоритм қҧрудың арнайы тәсілі қадамдық рҥрде орындау тәсілі қолданылды. Қҧрылымдық программалау қағидасын сҥйемелдеу процедуралық программалау тілдерінің негізіне жатқызылды. Олар кӛбінесе негізгі басқаруды беру «қҧрылымдық» операторларын қолдану, ішкі программаларды пайдалану және мәліметтердің «кӛріну» аймағын шектеу тәрізді мҥмкіндіктерді сҥйемелдеді. Бҧл топтағы кең таралған тілдер ретінде PL/1, ALGOL-68, Pascal, С тілдерін атауға болады. Программалық жабдықтамаларды ары қарай кӛлемінің ӛсуі, кҥрделілігінің артуы мәліметтерді қҧрылымдауды да дамытуды талап етті. Осының нәтижесінде қолданушының мәліметтер типін анықтау мҥмкіндігі пайда болды. Оған қоса, программаның ауқымды (глобальді) мәліметтерін пайдалануға шек қойып, олармен жҧмыс істеу кезінде шығатын қателерді азайту мақсатында жҧмыстар істеле бастады. Сондықтан бара-бара жаңа технология модульдік программалау технологиясы жетіле бастады. 3.2 Модульдік программалау Уақыт ӛте келе программаларға деген кӛзқарас ӛзгеріп, бҧрынғыдай процедуралар қҧрудан гӛрі мәліметтерді ҧйымдастыру жағына кӛңіл бӛліне 19

20 басады. Бҧған басты себеп болған жайттардың бірі программалар кӛлемінің ҧлғаюы болды. Бір-бірімен ӛзара байланысқан процедуралар мен солар арқылы ӛңделетін мәліметтер жиынын кӛбінесе модуль деп атайтын еді. Сондықтан программалау парадигмасы аздап ӛзгеріске ҧшырады: «Ӛзіңізге қандай модуль керек екендігін анықтап алыңыз да, мәліметтер модуль ішінде кӛрінбей тұратындай етіп программаны бірнеше бӛліктерге бӛліңіз». Бҧл қағида «мәліметтерді пайдалануды шектеу» деген атпен тарала бастады. Мәліметтер оларды ӛңдейтін программалармен бірікпеген жағдайда бҧрынғы процедуралық программалауды қағидасын қолданатын болды. Модула-2 тілі модульдік программалау тҧжырымын тікелей сҥйемелдейтін деңгейде қҧрылды, ал С тілі болса, оны тек пайдалану мҥмкіндігін ғана беретін дәрежеде болды. Мәліметтер программадағы жасырылып қойылатын элементтердің тек біреуі ғана болғандықтан, мәліметтерге қол жеткізуді шектеу, яғни «ақпаратты жасыру» қағидасын енгізгеннен кейін, оған қоса айнымалылар, константалар, функциялар және олардың типтерін де бір модуль ішінде ғана белгілі болатындай етіп, шектеу мҥмкіндігі туды. С++ тілін жасауда модульдік программалауды енгізуге арнайы кӛңіл бӛлінбесе де, С++ кластары ҧғымы, негізінде, модульділікті сҥйемелдейтін мҥмкіндік болып шықты. Оның ҥстіне С++ тілі программа бӛліктерін жеке-жеке компиляциялау ісін орындайтын болғандықтан, С тіліне қарағанда, мҧны модульдік тіл деп айтуға толық негіз бар еді. Модульдік программалау ауқымды айнымалылардың белгілі бір тобын қолданатын ішкі программалар жиынын жеке копиляцияланатын модульдерге (ішкі программалар кітапханасы) бӛліп қарастыру тәсілі болып табылады. Бҧл технологияда модульдер арасындағы байланыс арнайы интерфейс арқылы жҥзеге асырылады да, сол модульдердің ӛздерін пайдалануға (ішкі программалар командаларын және олардың «ішкі» айнымалыларын) тиым салынады. Бҧл технологияны Pascal, С/C++, Ада, Modula тілдерінің соңғы нҧсқалары сҥйемелдейді. 3.3 Мәліметтер абстракциясы Модульдерді пайдаланып программалау, ақырында, бір типтегі барлық мәліметтерді бақылауды бір басқару блогында жинақтауға әкеліп соқтырды. Бҧл дәстҥрлі, кластарды пайдаланбай жҧмыс істейтін кӛзқарасты жетілдіру, бірақ бҧлай ҧйымдастырылған типтер тіл қҧрамындағы негізгі типтерден басқаша болып шықты. Мҧндайда, біріншіден, белгілі бір типтегі мәліметтерді басқаратын әрбір модульдің осы типтегі айнымалыларды енгізетін бӛлек механизмі болуы керек. Екіншіден, жаңа типтегі айнымалылар компилятор мен программалау ортасына белгісіз болып келеді, ақырында, мҧндай «айнымалылар» кӛріну аймағының бҧрынғы ережелеріне бағынбайды және олар функцияларға қарапайым параметр ретінде беріле алмайды. Модуль тҥрінде жасалатын осындай типтер негізгі типтерден басқаша болады және олар сҥйемелдеудің де тӛменгі деңгейінде орналасады. Осыдан 20

21 барып компилятор да бірсыпыра тӛменгі қателерді таба алмайтын болады. Басқаша айтқанда, мәліметтерді жасыра алатын модульдер концепциясы мәліметтерді абстракциялауды толық кӛлемде атқара алмайды. Сонымен, осыған орай, программалау парадигмасы тағы да ӛзгеріске ҧшырап, енді былай айтылатын болды: «Ӛзіңізге қандай типтер керек екенін анықтап алыңыз да, әрбір тип үшін операциялардың толық жиынын дайындаңыз». Мҧндай ортада әрбір типтегі объект тек біреу болған жағдайда, модульдік программалауды пайдалана беруге болады. Арифметикалық типтер, мысалы, рационал комплекс сандар қолданушы анықтаған типтердің нақты мысалы бола алады. Класты сипаттауда, яғни қолданушы анықтаған complex типінде комплекс сандарды бейнелеу форматы мен олармен орындалатын операциялар жиыны толық кӛрсетіледі. Мҧндайда мәліметтер жабық әрі жекеше (приватты) болып саналады. Бірақ бірсыпыра модульдер (барлығы емес) қолданушы анықтаған типтер ретінде кӛрсетіле алады. 3.4 Объектіге бағытталған программалау түсінігі Дәстҥрлі процедураға бағытталған программалау тәсілдері кҥрделі программалардың талаптарын қанағаттандыра алмады. Сондықтан объектіге бағытталған программалау ҧғымы пайда болды. Объектіге бағытталған программалау (ОБП) бҧл жаңа технология. Мҧнда қҧрылымдық программалаудың ең тиімді жақтары алынып, олар жаңа идеялармен толықтырылады. Объектіге бағытталған тіл деп программалары ӛзара байланысқан объектілер тізімінен және солардың жҧмысын сипаттаудан тҧратын программалау тілін айтады. ОБП ерекшеліктері: программалық жабдықтамалардың кҥрделілік дәрежесін тӛмендету; программалық жабдықтамалардың сенімділігін жоғарылату; программалық жабдықтамалардың кейбір компоненттерін қайтадан қолдану мҥмкіндігін қамтамасыз ету. ОБП негізгі ҧғымдарының бірі объект. Объект мәліметтердің логикалық бірлігі ретінде программада қҧрастырылған жаңа типтегі айнымалы. Объектінің атқаратын басты міндеті мәліметтерді және оларды ӛңдеуге арналған тәсілдердің (ережелердің) бірігуі. С++ тілінде мәліметтерді ӛңдеу тәсілдер, яғни функциялар арқылы атқарылады. Сондықтан С++ программалау тілінде объект мәліметтерден және соларға қолданылатын функциялардан тҧрады. Объектіге негізделген мәліметтер мен функциялар жабық (private), қорғалған (protected) және ашық (public) бола алады. ОБП технологиясының негізгі тӛрт сипаттамасы бар: инкапсуляция; мҧралау; полиморфизм; типтердің абстакциясы. 21

22 Мҧралау Инкапсуляция ОБП Полиморфизм Типтер абстракциясы 3.1 сурет. ОБП негізгі қасиеттері Инкапсуляцияда программа бірлігі ретінде мәліметтер және функциялар тобының бірлестігі қарастырылады. Объектіде мәліметтер қорғалған болып саналады, егер мәліметтер мен функция-мҥшелер жабық немесе қорғалған деп айтылатын болса, онда олар программаның басқа бӛлігінен кӛрінбейтін болады. Программа сенімді жҧмыс істеуі ҥшін объектінің ӛрісін тікелей пайдалану қажет емес. Сондықтан мҧндайда оның мазмҧнын ашық тәсілдерді шақыру арқылы қалыптастыру керек. Белгілі бір класс ішінен ішкі класс қҧрастыру мұралау болып табылады. Мҧралау кезінде бір объектінің атрибуттары мен қасиеттерін екіншісінің иемденуіне мҥмкіндік беріледі. Егер бҧрынғы кластан аз ғана айырмашылығы бар жаңа класс қҧрғымыз келсе, онда бастапқы кластың бҧрынғы айнымалылары мен тәсілдерін қайтадан сипаттап жазу қажет емес. Сонда базалық класс аталық, ал жаңадан пайда болған класс оның ұрпағы (туындысы) деп аталады. Ҧрпақ кластың, қажет болса, ӛз қҧрамына жаңа айнымалылар мен тәсілдер қосу мҥмкіндігі бар. Мҧралау ӛз кезегінде объектілердің иерархиясын қҧрастыруға жағдай туғызады, соның нәтижесінде жалпыдан жалқыға кӛше алады, ол объектіні нақтылайды, айқындайды. Полиморфизмде кластың бір атаулы функция-мҥшесі әр тҥрлі, бірақ ӛзара логикалық байланысқан мақсаттарда пайдаланылады. Мысалы, sum(x,y) функциясы х + у қосындысын табады делік. Аргументтерінің типіне қарай функция әр тҥрлі типтегі мәнді қайтара алады. Бҥтін немесе нақты типті х пен у айнымалылары ҥшін атаулары әр тҥрлі екі функцияны тағайындаудың орнына бір sum(x,y) функциясын сипаттау тиімді болады. Мҧндағы + амалы х пен у типтеріне тәуелді болады. С++ тілінің негізгі ҧғымдарының бірі класс болып табылады. Класс дегеніміз қҧрамында мҥшелері (айнымалылары) мен тәсілдері (функциялары) бар тіл қҧрылымы. Кластық қҧрылым программалаушының ӛзі анықтайтын тип. С++ тілінде объектіні анықтау ҥшін алдымен оның форматын class тҥйінді сӛзімен белгілеу керек. Кластың анықталуы қҧрылымның (struct) анықталуына ҧқсайды. Қҧрылымның кластан айырмашылығы оның қҧрамындағы барлық мҥшелер мен тәсілдердің ашық сипатталуында жатыр. Программалау парадигмасын енді мынадай тҥрде айтуға болады: «Ӛзіңізге қандай кластар керек екендігін анықтап алыңыз да, әрбір класс үшін барлық операциялар жиынын дайындаңыз; жалпы қасиеттерді айқын түрде кӛрсетіп, мұралауды пайдаланыңыз» 22

23 Жалпы стандарт бойынша, кластың барлық элементтері (мҥшелері мен тәсілдері) жабық болып табылады. Жабық элементтерді осы кластан тыс ешбір сыртқы класс немесе функция пайдалана алмайды. Бҧл инкапсуляция қағидасына сәйкес келеді. Инкапсуляция мәліметтерге программа кодынан қол жеткізуді бақылау, оларды жабық деп жариялау арқылы жҥргізіледі. ОБП қолданбалы программалауда жедел дамып келе жатқан бағыттардың бірі болып табылады. 3.5 Программалау технологияларының даму кезеңдері Программалау технологияларының онжылдықтар бойынша кӛрсетілген даму кезеңдеріне қысқаша тоқталайық. Ӛткен ғасырдың 50-ші жылдары компьютерлер қуаттылығы (ЭЕМ-дердің алғашқы буыны) онша жоғары болған жоқ, ал олар ҥшін программалау машиналық кодтар арқылы жҥргізілді. Негізінен, ғылыми-техникалық есептер есептер (формулалар бойынша) шығарылды, программалауға берілген тапсырмалар нақты есептер қойылымынан тҧратын еді. Кӛбінесе программалаудың интуитивтік технологиясы қолданылатын, мҧнда бірден тапсырма бойынша программа қҧруға кірісетін, оның ҥстіне жҧмыс барысында тапсырмалар ӛзгертіліп те отыратын еді, қажетті қҧжаттама программа жҧмыс істеген кезде барып қҧрастырылатын. Соған қарамастан, программалау технологиясының іргелі тҧжырымдамасы болып саналатын модульдік программалау осы кезеңде (машиналық кодта программалаудың қиындығын жеңу мақсатында) пайда болды. Алғашқы жоғары деңгейде программалау тілдері пайда бола бастады, солардың ішіндегі ФОРТРАН тілі одан кейін де ҧзақ уақыт пайдаланылып келеді шы жылдары бірсыпыра жоғары деңгейде программалау тілдерінің (АЛГОЛ 60, ФОРТРАН, КОБОЛ, т.б..) ӛте жылдам дамығанын кӛреміз, сол кездерде программалау технологиясындағы олардың орны ӛте жоғары бағаланылып жҥрді. Бірақ осы тілдер кӛлемді программалар жазуда барлық мәселелерді шешеді деген ҥміт ақталмады. Компьютерлердің қуаты артып, программалау тәжірибелері де жинақталған кездерде жоғары деңгейде программалау тілдерінің мҥмкіндіктері шектеулі екендігі белгілі болды. Осының нәтижесінде программаларды модульдік тҥрде ҧйымдастыру жҥзеге асырыла бастады. Тек ФОРТРАН тілі ғана пайдаланыла берді, ӛйткені ол бҧрыннан-ақ модульдік қағидамен жасалған еді және дайындалған программалар кітапханасы да ӛте бай болатын. Осы кездерде программаны қай тілде қҧру емес, қалай қҧру керек деген сауалдың маңызды екені тҥсінікті болды. Мамандар енді программалау технологиялары мен олардың әдіснамаларына кӛңіл бӛле бастады. Екінші буын компьютерлеріндегі жҧмысты уақытша тоқтатып, программаларды ҥзе тҧру мҥмкіндігінің пайда болуы мультипрограммалау ісінің жетілдіріліп, ҥлкен программалық жҥйелер жасауға себепші болды. Бҧлардың бәрі программаларды ҧжым болып жасаудың әсерінен туындады да, кӛптеген жаңа технологиялық мәселелер пайда болды. 23

24 Ӛткен ғасырдың 70-ші жылдары ақпараттық жҥйелер мен мәліметтер базасы кең етек жайды. Бҧған итермелеген негізгі себеп компьютердің мәлімет жинақтауыштарындағы бір бит ақпаратты сақтау қҧны бҧрынғы дәстҥрлі мәлімет сақтаудан арзан болып кетті. Программалау технологиялары жылдам алға басып, қҧрылымдық программалаудың дамуы (мысалы, мәліметтер қҧрылымын жасыра алатын модульдердің шығуы), мәліметтердің абстракты типтерінің жетілдірілуі, программалық жабдықтамалардың сенімділігі мен мобильдігін қамтамасыз етілуі, ҧжымдық тҥрде программа қҧруды басқару әдістемесінің шығуы, программалау технологияларын сҥйемелдейтін саймандық программалық қҧралдардың пайда болуы жалпы осы бағыттағы жҧмыстар тҥрін жаңа сатыға кӛтерді. 80-ші жылдар жеке пайдаланылатын дербес компьютерлердің адам ӛмірінің әртҥрлі салаларына кең араласуымен, программалық жабдықтамаларды пайдаланушылар санының шҧғыл артуымен сипатталды. Осылардың нәтижесінде қолданушы интефейстерінің жылдам жетіліп, программалық жабдықтамалар сапасы деген тҧжырымдаманың туындауына әкелді. Программау технологияларының жаңа талаптарына жауап бере алатын программалау тілдері (мысалы, Ада) жасалды. Программалау жабдықтамаларын спецификациялау тәсілдері мен тілдері дамыды. Алдыңғы қатарға объектіге бағытталған программалар жасау тәсілдері шықты. Компьютерлік желілер тҧжырымдамасы пайда болды. Ӛткен ғасырдың соңы мен жаңа ғасырдың басында бҥкіл әлемді қамтитын ғаламтордың кеңеюі арқасында барлық дербес компьютерлер Интернет желісіне қосылды. Бҧл компьютерлік-желілік ақпаратқа қол жеткізуді реттеу ҥшін мамандар алдына бірсыпыра тығыз шешімін табатын мәселерді (технологиялық, заңнамалық және этикалық сипаттағы) қойды. Желі бойынша тасымалданатын компьютердегі ақпаратты қорғау ӛзекті мәселеге айналды, программалық жабдықтамалар жасайтын компьютерлік технологиялар (CASE-технология) дамытылып, программалар спецификацияларын тығыз байланысты сауалдар туындады. Сонымен, қоғамды толық ақпараттандыру мен компьютерлендірудің шешуші кезеңі басталды. Бақылау сұрақтары 1. Программалау технологиясы деген не? Оның программалаудан айырмашылығы. 2. Қҧрылымдық программалау және оның парадигмасы. 3. Жҥйелерді декомпозициялау деген не? 4. Модуль, модульдік программалау ҧғымдары және оның парадигмасы. 5. Мәліметтерді абстракциялау және оның парадигмасы. 6. Объектіге бағытталған программалау технологиясы тҥсінігі. 7. ОБП технологиясының негізгі сипаттамалары. 8. Инкапсуляция тҥсінігі. 9. Мҧралау деген не? 10. Полиморфизм ҧғымы. 11. Программалау технологияларының даму кезеңдері. Олардың ерекшеліктері. 12. Қазіргі программалу тілдерінің ерекшеліктері. 24

25 4. МӘЛІМЕТТЕРДІ ӚҢДЕУ ПРОЦЕСІН АЛГОРИТМДЕУ 4.1 Негізгі түсініктер мен анықтамалар Алгоритмдеу есепті шығару алгоритмін құрастыру процесі, мҧның нәтижесінде мәліметтерді ӛңдеу процесінің кезеңдері айқындалады да, кезеңдер мазмҧны формальды (жасанды) тҥрде жазылып, солардың орындалу реттілігі анықталады. Алгоритм бастапқы айнымалы тҥрде берілген мәліметтерден қажетті нәтижеге қол жеткізу жолында атқарылатын есептеу процесін анықтайтын дәлме-дәл нҧсқаулар жиыны. Алгоритм қасиеттері: 1. детерминділік (анықтылық, бір мәнділік) басқаша тҥсінуге жол бермей, тек қана кӛрсетілген әрекеттерді айқын тҥрде орындауға арналған нҧсқаулар дәлдігі; 2. дискреттілік есептеу процесін жекеленген қарапайым операцияларға бӛлу қасиетінің болуы, яғни кҥрделі есепті атқарылуына кҥдік келтіруге болмайтын шағын бӛліктерге жіктеу мҥмкіндігінің болуы; 3. нәтижелілік белгілі бір әрекеттер саны атқарылған соң, процестің қажетті нәтижесін алып, оны аяқтау мҥмкіндігінің болуы немесе есептеу процесін ары қарай жалғастыруға болмайтындығы жайлы мәлімет алу; 4. жалпылық алгоритмнің осы сияқты кӛптеген басқа да есептерге қолданылу мҥмкіндігінің болуы Алгоритмдік тіл алгоритмдерді жазуға арналған символдар мен сол символдардан тҧратын конструкцияларды қҧрастыру және тҥсіндіру ережелерінің жиыны. Программалау тілі компьютерлерде программаларды орындау ісін атқарады. Программа машинаға тҥсінікті тҥрде жазылған алгоритм. Программада берілген мәліметтердің сипаттамаларымен бірге оларды ӛңдейтін командалар болады. Командалар қандай мәліметтер қандай операцияларға қатынасатынын, олар қандай реттілікпен орындалатынын және нәтиженің қандай тҥрде шығарылатынын кӛрсетеді. Бҧлар операторлар арқылы жҥзеге асырылады. Мәліметтер белгілі бір процесс кӛмегімен тасымалдап, ӛңдеуге болатын, формальды тҥрде бейнеленген фактілер мен идеялар. Айнымалы программа орындалуы барысында ӛз мәнін ӛзгерте алатын шама. Оператор операциялар мен мәндерді кӛрсететін немесе солардың элементтерінің қай жерде орналасқанын білдіретін символдар жиыны. Мысалы: а = b + с; // а, b, с айнымалылар; k = 2; if (t<0)... Бұл пәннің заттық негізі болып (компьютерде шығару мақсатында) программаларды қҧрастыру тәсілдері мен қҧралдары саналады. Программалар қҧру ҥшін программалау жҥйелері пайдаланылады. 25

26 Программалау жүйесі программалауды автоматтандыру қҧралдары. Олар программалау тілінен, осы тілдің трансляторынан, қҧжаттамаларынан және де программаларды дайындау, әрі орындау қҧралдарынан тҧрады. Транслятор бір тілді екінші тілге аудару программасы. Ол интерпретатор және компилятор сияқты екі топқа бӛлінеді. Интерпретатор бҧл командаларды аударып, оларды бірден орындауға арналған трансляторлық программа. Компилятор бҧл алгоритмдік тілдің конструкцияларын толығымен машиналық кодқа тҥрлендіретін программа. Есептің нәтижесін алу тҥшін машиналық кодты орындау керек. 4.2 Компьютерде есеп шығару кезеңдері Компьютерде есеп шығару кҥрделі процесс болып есептеледі, ол тӛмендегі кезеңдерден тҧрады: 1. Берілген есепті математикалық тҥрде ӛрнектеу, яғни есепті мәселе ретінде қоя білу. 2. Есепті шығарудың компьютерге ыңғайлы сандық тәсілдерін анықтау. 3. Есепті шығару жолын алгоритм тҥрінде бейнелеу. 4. Есепті компьютерде шығару программасын жасап, оның қателерін тҥзету. 5. Есепке керекті мәліметтер дайындау. 6. Компьютерде есепті шығару және шыққан нәтижені іс жҥзінде қолдану. Берілген есепті математикалық тҥрде ӛрнектеу дегеніміз есептің берілген мәндерін математикалық таңбаларды қолданып жаза білу және керекті математикалық формулаларды анықтау болып саналады. Кҥрделі формулаларды, теңдеулерді арифметикалық амалдар тізбегіне айналдыру есепті шығарудың сандық тәсілдерін табу не анықтау жолы болып есептеледі. Қазіргі кезде барлық есептердің шығару жолының сандық тәсілдері белгілі десе де болады, тек солардың ішінен ӛзімізге тиімді жолын таңдап алуымыз керек. Бҧл мақсатта есепті шығару дәлдігін, нәтижені жылдам табу мҥмкіндігін, мәліметтерді дайындау мен есепті шығарудың бағасын салыстыра отырып қарастыру қажет. Есептің алгоритмін жасағанда, оның шығару жолын тізбектелген ісәрекеттер ретінде схема тҥрінде ӛрнектеледі. Программа жасағанда қазірде кеңінен тараған программалау тілінің бірінде алгоритм нақты тҥрде жазылады. Бізде кең тараған тілдерге Паскаль, Дельфи, С/С++ жатады. Жазылған программаның қатесін тҥзету компьютердің кӛмегімен шешіледі, ӛйткені жіберілген қателерді тек компьютер ғана жылдам аңғарып, тҥзету мҥмкіндігін береді. Есепті шығаруға керекті деректерді сҧрыпталған кҥйінде алдын ала қағазға, әйтпесе магниттік дискіге жазып, компьютердің жадына реттей отырып енгіземіз. Есептің нәтижесін алған соң шешім қабылдау және оны іс жҥзінде қолдану мамандардың жҧмысы. Тек солар ғана белгілі бір шешім қабылдай алады. Бірақ оқып-ҥйрену барысында кездесетін, яғни студенттерге арналған есептерде жоғарыда кӛрсетілген сатылардың бірсыпырасы болмайды, ӛйткені олар бірден формула кҥйінде беріледі, шығарудың сандық тәсілі формулада 26

27 айқын кӛрініп тҧрады (интеграл, туынды болмаса), нәтижені алған соң, оны жазып алу жеткілікті. Мәселені шешудің немесе есеп шығарудың кӛрсетілген алты сатысы кҥрделі ӛндірістік есептерде, дипломдық немесе курстық жҧмыстарда жиі кездеседі. 4.3 Алгоритмдерді бейнелеу тәсілдері Алгоритмдерді бейнелеудің негізгі тәсілдеріне оларды жазудың келесідей түрлері жатады: табиғи тіл сӛздері арқылы; формулалық-сӛздік тәсіл арқылы; графикалық тҥрде бейнелейтін блок-схемалар арқылы; псевдокодтар (жалған кодтар) арқылы; программалау тілі арқылы. Алгоритмдерді табиғи тіл сӛздері арқылы бейнелеуде есептеу кезеңдері мазмҧны кез келген тҥрде табиғи тілде жазылады. Осы тәсілмен келесі мысалдың алгоритмін жазып шығайық. 1-мысал.Сандар жиымы (массиві) берілген делік. Осы жиым сандарының кӛрсетілген аралықта, яғни интервалда толығынан жататынын немесе жатпайтынын тексеру керек. Интервал ӛзінің шекаралық А және В мәндерімен берілген. 1. Бірінші санды аламыз. 2. Осы сан A-дан В-ға дейінгі интервалға кіретінін салыстыру жолымен тексереміз; егер жауабы «Иә» болса, онда 3-пунктке кӛшу, әйтпесе (жауабы «Жоқ» болса) 6-пунктке кӛшу. 3. Жиымның барлық элементтері қарастырылды ма? Егер жауабы «Иә» болса, онда 5-пунктке кӛшу, жауабы «Жоқ» болса, 4-пунктке кӛшу. 4. Келесі элементті қарастырамыз. 2-пунктке кӛшу. 5. Мынадай хабарлама шығару: барлық элементтер осы интервалға кіреді. 7- пунктке кӛшу. 6. Мынадай хабарлама шығару: элементтер интервалға толығынан кірмейді. 7. Соңы. Бҧл тәсілде кӛрнекілік жоқ, яғни толық формальдау мҥмкіндігі жоқ. Алгоритмдерді формулалық-сӛздік тәсіл арқылы бейнеленуі тапсырманың математикалық символдар мен ӛрнектердің және сӛздердің араласуымен берілуі болып табылады. 4.2 мысал. Ҥшбҧрыш ауданын оның берілген (a, b,c) ҥш қабырғасының ҧзындығы арқылы есептеу алгоритмін Герон формуласы арқылы қҧру керек болсын делік. Мҧны былай кӛрсете аламыз. 1. ҥшбҧрыштың жарты периметрін есептеу p=(a+b+c)/2 ; 2. ҥшбҧрыштың ауданын есептеу S p( p a)( p b)( p c) ; 3. нәтиже ретінде S мәнін шығарып, алгоритм жҧмысын аяқтау. Бҧл тәсілді пайдаланғанда, алгоритмді кез келген деңгейде айқындап кӛрсетуге болады, бірақ формальды тҥрде анық бейнелеу қиын. 27

28 Алгоритмді графикалық түрде блок-схемалар арқылы кӛрсету оның логикалық қҧрылымын графикалық тҥрде бейнелеу болып саналады. Мҧнда мәліметтерді ӛңдеудің әрбір кезеңі атқарылатын операцияға сәйкес әр тҥрлі геометриялық фигуралар (блоктар) тҥрінде кӛрсетіледі (1.1-кесте). Сонымен алгоритм блоктармен немесе геометриялық кӛпбҧрыштар тҥріндегі фигуралармен ӛрнектеледі. Әр блоктың ішіне орындалатын іс-әрекеттің (амалдың) мазмҧны жазылады. Символдардың (блоктардың) бір кіру және бір шығу сызықтары болуға тиіс. 4.1 кесте. Алгоритмдерді бейнелеу блоктары Іс-әрекет аты Блоктың пішімі Атқаратын жұмысы Процесс a Математикалық ӛрнектерді есептеу b Басы соңы R=0,25a 0,5a Алгоритмдерді бастау, аяқтау b Алдын ала анықталған процесс (подпрограмма) 0,25a b a Қосалқы программаларға кіру және шығу Шешім b a Есеп шығару жолын таңдау Енгізу-шығару a Мәліметтерді енгізу және шығару b а Модификация a Цикл басы b 28

29 Қҧжат a Нәтижені баспаға (қағазға) шығару b Тҥсініктеме a 0,5a Схеманы, формулаларды тҥсіндіру 4.1-мысалды графикалық тәсілмен орындау келесі 4.1-суретте бейнеленген. басы N,x,A,B i :=1 A x B иә жоқ 2 хабар Элементтер толығынан диапазонға кірмейтіні жайлы хабарлама шығару i := i+1 иә i N жоқ 1 хабар соңы Элементтер толығынан диапазонға кіретіні жайлы хабарлама шығару 4.1 сурет. Алгоритмді блок-схема арқылы графикалық тҥрде бейнелеу Жалған кодтар (псевдокодтар) нақты программалау тілінің синтаксистік ерекшеліктерін есепке алмай, тек формальды тҥрде программа логикасын бейнелеуге мҥмкіндік береді. Бҧл тәсіл программалау тілінің операторлары мен табиғи тіл сӛздерінің араласуы арқылы қҧрастырылып, блоксхема орнына пайдалануға болатын программа логикасын бейнелеу қҧралы болып табылады. 29

30 Алдыңғы 4.1 мысалдағы алгоритмді псевдокод арқылы былай жазуға болады: Бірінші элементті таңдаймыз ( i := 1) IF A > x i немесе x i > B THEN хабарлама шығару және алгоритм соңына кӛшу ELSE келесі элементке кӛшу (i := i +1) IF жиым біткен жоқ (i N) THEN интервалды тексеруге кӛшу ELSE интервалға элементтер толық кіретіні жайлы хабарлама шығару Соңы Ал қарапайым алгоритмдік тіл деп аталып, алгоритмді программалау тілінің терминдерін қазақ (орыс) тілінде жазу арқылы да ӛрнектеу жалған кодтар арқылы жазу сияқты алгоритмді компьютерге дейін жазу ҥшін кеңінен қолданылып жҥр. Мҧны олардың ағылшын тіліне негізделіп жасалған программалау тілдеріне жақындығымен тҥсіндіруге болады. 4.3 мысал. Z = ax 2 +bx+cos(ax 2 +b)-tg(ax 2 +b) функциясының мәнін есептеп шығару алгоритмін жасау керек болсын делік. Мҧнда алдымен a, b, x нақты мәндерін енгізіп, жақшада тҧрған ax 2 +b ӛрнегін есептеп алу керек, соңынан Z функциясының мәні нәтиже ретінде шығарылуы тиіс. алг Z функциясын есептеу нақ a, b, x, t, z арг a, b, x нәт z басы a, b, x енгізу t := ax 2 + b z := t+cost-tgt x, z шығару cоңы Программалау тілдері программаларды компьютерде тікелей орындауға арналған алгоритмдерді жазу тәсілі. Программа алгоритмнің компьютерге түсінікті түрде жазылуы. Әрбір машинаның ӛз тілі (машиналық тіл) болады және ол тек осы тілдегі программаларды, яғни командалар тізбегін орындай алады. Программаларды машиналық тілде жазу ӛте кҥрделі, әрі адамды шаршататын жҧмыс болып табылады. Программалаушылардың жҧмыс ӛнімділігін арттыру мақсатында жасанды тілдер, яғни программалау тілдері қолданылады. Мҧндайда жасанды тілде жазылған программа машиналық тілге аударылуы тиіс. Аудару жҧмысын, яғни программаны бір тілден екінші тілге тҥрлендіру ісін транслятор атқарады. Жиі қолданылатын, тікелей интерпретация жасайтын транслятор тҥріне Бейсик тілінің трансляторы жатады, ол командаларды аударады да, оны бірден орындайды. Мҧндай транслятор 30

31 жҧмысының қорытындысы қажетті нәтижелерді алу болып табылады. Паскаль, С/С++ тілдерінің трансляторы компилятор тҥрінде болады. Мҧнда бастапқы жазылған программа мәтіні машина тіліне аударылады да, объектілік модуль деп аталатын программа коды шығарылады. Сонан соң объектілік модуль программа аралық байланыс редакторы деп аталатын программа арқылы ӛңделгеннен кейін барып қана жҧмыс істеуге дайын болады. 4.4 Алгоритмдердің негізгі канондық құрылымдары Программалаудың ең негізгі әрі кҥрделі кезеңі алгоритм қҧру болып табылады. Программалауды ҥйретудің басында алгоритмді тілдермен байланыстырмай, блок-схема немесе псевдокод тәрізді тәсілдермен қҧруды тҥсіндіру керек. Осындай «таза» алгоритмдеу жолын меңгерген студенттер кейін программалау тіліне оңай кӛшеді. Бҧл тарауда алгоритмдерді блок-схема немесе алгоритм схемасын қҧру арқылы қҧру негіздері қарастырылады. Программалау теориясында кез келген кҥрделі есептің шығару жолын, яғни кез келген программаны тӛмендегідей ҥш тҥрлі басқару қҧрылымын пайдалану арқылы жазып шығуға болатындығы дәлелденген: сызықтық қҧрылым немесе операторлар тізбегі; тармақты қҧрылым немесе шартты оператор; қайталау немесе циклдік оператор. Осындай канондық қҧрылымдардан тҧратын программаны регулярлық программа деп атайды, олардың бір ғана кіру нҥктесі мен бір ғана шығу нҥктесі болады. Дәл осы ҥш қҧрылым қҧрылымдық программалаудың базалық конструкциялары деп аталады. Программадағы кез келген операторды оның кіру нҥктесі арқылы тауып орындауға болады (осы тәсілмен табылмайтын операторлар және шексіз циклдер болмауы тиіс). Мҧндай программаны басқару ісі жоғарыдан тӛмен қарай жҥргізіледі. Тҥсініктеме мәтін (комментарий) қосылған осындай программалар оқуға және тҥсінуге жеңіл болып есептеледі. 1) сызықтық құрылым (4.2 а сурет), ол программалау тілдері арқылы былай жазылады: A; B; (Паскаль, C/C++ тілдерінде) мҧндағы А және В әрекеттері мыналардың бірі болуы тиіс: кез келген жеке оператор; белгілі бір функцияны шақырып, одан кері оралу; басқа бір басқару қҧрылымы. 2) тармақты құрылым (1.2 ә сурет), программалау тілдерінде: if P then A else B; (Паскаль тілінде) if P A; else B; (С/С++ тілдерінде) P-ны тексеру предикат болып табылады, яғни ол мәні ақиқат (true) немесе жалған (false) бола алатын логикалық ӛрнектен немесе шарттан тҧратын функция тҥрінде болады. Бҧл қҧрылым толымсыз (қысқаша) тҥрде болуы мҥмкін, онда логикалық ӛрнектің мәні жалған болғанда ешқандай әрекет орындалмайды. Мҧндай қҧрылым тҥрі тӛменде кӛрсетілген (1.2 б сурет), ал программалау тілдерінде: 31

32 if P then A ; if P A ; (Паскаль, Бейсик тілдерінде) (С/С++ тілдерінде) А false P true P true B B A false А а) сызықтық ә) толық тармақты б) толымсыз тармақты қҧрылым қҧрылым қҧрылым 4.2 сурет. Алгоритмдерді бейнелеудің канондық қҧрылымдары Енді циклдік қҧрылымдарды қарастырайық, олар алгоритмнің белгілі бір бӛлігін бірнеше рет қайталау ісін жҥзеге асырады. Циклдік алгоритмдердің бірнеше тҥрі бар. 3) қайталау «әзірше» циклі (1.3 а сурет) while P do A ; (Паскаль, C/C++ тілдерінде) Мҧнда А әрекеті Р предикат мәні ақиқат болып тҧрса, қайталана береді. Сондықтан А әрекеті орындалуы кезінде Р-ға әсер ететін айнымалылар мәні ӛзгеруі тиіс. Бҧлай болмаған жағдайда шексіз цикл орын алады. Предикат мәні А әрекетіне дейін анықталады, сол себепті кейде А әрекеті бір де бір рет орындалмауы да мҥмкін. қайталау «дейін» циклі (4.3 ә сурет) repeat A until P; (Паскаль тілінде) do A while P; (С/С++ тілдерінде) Мҧндағы қайталау кем дегенде бір рет орындалады, ӛйткені шарт А әрекетінен кейін тексеріледі. А әрекеті предикат мәні жалған болған кезде орындалмайтын болады. 4) таңдау switch (case) ауыстырғыш (кӛп тармақты) қҧрылымы программалауды жеңілдететін мҥмкіндік болып табылады. Таңдау қҧрылымы бірнеше мҥмкіндіктердің біреуін ғана орындау кезінде қолайлы болып табылады (4.3 б сурет), ал программалау тілдерінде: Паскаль тілінде: С/С++ тілдерінде: case P of switch (P) A: операторлар; { case A: операторлар; break; В: операторлар; case B: операторлар; break N: операторлар; case N: операторлар; break end; Р мәніне байланысты А, В,, N әрекеттерінің бірі орындалады да, сонан соң мҧнан кейін орналасқан қҧрылымдар атқарылады. 32

33 false P А P true А true P false А B.... N а) «әзірше» циклдік ә) «дейін» циклдік б) таңдау тармақты қҧрылымы қҧрылымы қҧрылымы 4.3 сурет. Алгоритмдерді бейнелеудің циклдік және таңдау қҧрылымдары 4.5 Қарапайым алгоритмдер құру Кҥрделі алгоритмдерді қҧру ҥшін қарапайым канондық (бірыңғайланған) алгоритмдік қҧрылымдар қолданылады. Олар сызықтық, тармақталу және цикл қҧрылымдарынан тҧрады. Программалау теориясында кез келген кҥрделі программаны осы ҥш тҥрлі қҧрылымнан қҧрастыруға болатыны дәлелденген. Сызықтық құрылым бірінен кейін бірі орындалып тізбектеле орналасқан бірнеше операторлардан тҧрады. Тармақты шартқа байланысты екі оператордың бірінің орындалуы. Цикл операторлар бӛлігінің бірнеше рет қайталана орындалуы. Негізгі конструкцияларды пайдалану мақсаты қарапайым қҧрылымды программа алу болып саналады. Мҧндай программалар оңай оқылады, тҥзетіледі және керек болса, оңай ӛзгертіледі. 1. Сызықтық құрылымды алгоритм немесе қарапайым сызықтық алгоритм іс-әрекеттердің орындалу ретіне қарай тізбектеле орналасқан блоктардан тҧрады. Амалдардың бҧлай бірінен соң бірі реттеліп орындалу тәртібін табиғи атқарылу дейді. 4.4 мысал. y = a+b формуласы бойынша y -ті табу керек болсын. Мҧнда формула бойынша есептеу тіктӛртбҧрыш арқылы кескінделетін есептеу блогы (3-блок) арқылы ӛрнектеліп, нәтижені қағазға басу ҥшін кӛпбҧрышты қҧжат алу блогын (4-блок) пайдаланып, оның ішіне нәтиженің атауларын жазамыз. Осы кӛрсетілген y=a+b формуласын есептеу ҥшін a және b-ның сандық мәндерін программаға енгізіп (2-блок), содан кейін қосу амалын орындап, ақырында y-ті экранға (қағазға) басып шығарып, жҧмысты тоқтатамыз. Осы алгоритмнің схемасы 1.4-суретте кӛрсетілген, ал оның жанында Паскаль және С тіліндегі программасы жазылған. Программа мәтінін қҧру жолдарын келесі тарауларда қарастырамыз. 2. Тармақталу алгоритмдері. Тҧрмыста кездесетін алгоритмдер әр тҥрлі болып келеді. Олардың жиі кездесетін тҥріне алгоритмнің белгілі бір шарттың орындалуына не орындалмауына байланысты тармақталып бірнеше жолдарға бӛлінуі жатады. 33

34 Паскальдағы программа: Program P(іnput,output); var a,b,y: integer; begin wrіte('a, b='); readln(a,b); y:= a + b; wrіteln('y=',y:6:3); readln; end. С тіліндегі программа: #include <stdio.h> #include <conio.h> main() { int a,b,y; printf("a, b ="); scanf("%i%i",&a,&b); y = a + b; printf("y = %i", y); getch(); 2 a,b енгізу 4.4-с урет. Алгоритм схемасы Тармақталу алгоритмінің қҧрылымы қарапайым болып келеді. Мҧнда арифметикалық теңсіздік (теңдік) тҥрінде берілген логикалық шарт тексеріледі. Егер ол орындалса, онда алгоритм бір жолмен, ал орындалмаса екінші жолмен жҥзеге асырылады, яғни есепті шығару жолы тармақталып екіге бӛлініп кетеді. Тармақталу алгоритмдеріне шартты тексеру блогы міндетті тҥрде кіреді. Ол ромб тҥрінде кескінделіп, басқа блоктармен 1 кіру және 2 шығу сызықтары арқылы байланысады. Кӛбінесе тармақталу алгоритмдері екі тҥрде кездеседі, олар жоғарыда кӛрсетілген канондық қҧрылымдардың толымды және толымсыз тҥрлеріне сәйкес келеді де, "таңдау" және "аттап ӛту" мҥмкіндіктерін іске асыруға кӛмектеседі. "Таңдау" жолымен тармақталуда берілген шарт тексеріледі (1.5-сурет), егер шарт орындалса (шарт ақиқат - true болса), онда 2-амал орындалып, содан кейін келесі 3-амалға кӛшеміз. Ал, егерде шарт орындалмаса (орындалу мҥмкіндігі жалған - false болса), онда 1-амал атқарылып, сонан соң 3-амал атқарылады басы 3 y := a+b 4 5 y соңы шарт? иә шарт? иә жоқ жоқ 1 - амал 2 - амал 1 - амал 2 - амал 3 - амал 3 - амал сурет. "Таңдау" алгоритмі 4.6-сурет."Аттап ӛту" алгоритмі... 34

35 "Аттап ӛту" (4.6-сурет) алгоритмінде шарт орындалса, 1-амалды аттап ӛтіп, бірден 2-амалды, содан кейін 3-амалды орындаймыз. Ал шарт жалған болса, онда 1-амал міндетті тҥрде орындалып, одан кейін 2- және 3-амалдар жҥзеге асырылады. Тармақталу кезеңінде шартты тексеру блогы орындалуы барысында, алгоритмнің екі мҥмкіндігінің тек біреуі ғана таңдап алынып жҥзеге асырылады да, ал екінші таңдап алынбаған тармақ біріктіру нҥктесіне дейін орындалмай қалады. Енді осыған нақты мысалдар келтірейік. 4.5-мысал. y функциясын тӛмендегі формула бойынша есептеп шығарайық. y x x, 1, x 0 x 0 Мҧнда x айнымалысының таңбасына (оң, теріс) байланысты не жоғарғы, не тӛменгі формуланы таңдап алып, сол арқылы у функциясының мәнін табамыз (4.7 сурет). 2- x 2 2 y x 1 жоқ басы 2 x енгiзу x x, y соңы 4.7-сурет. Тармақталу алгоритмі блоктың орындалу барысында х айнымалысына белгілі бір мән беріледі де, ол мән енгізу операторлары арқылы программаға енгізілуі тиіс. Бҧдан кейін енгізілген мәннің оң немесе теріс екендігі ҥшінші шартты тексеру блогы арқылы айқындалады. Шарттың "ақиқат" (иә) немесе "жалған" (жоқ) болуына байланысты 4- не 5-блоктардың бірі ғана орындалып, "таңдау" орындалады. 6- блок х айнымалысының және у функциясының сандық мәндерін экранға немесе қағазға басып шығарады. 3. Циклдік алгоритмдер. Математикада, экономикада кӛптеген есептерді шығару кезеңінде бір теңдеуді пайдаланып, ондағы айнымалының ӛзгеруіне байланысты оны бірнеше рет қайталап есептеуге тура келетін сәттер де жиі кездеседі. Осындай қайталап орындалатын есептеу процесінің белгілі бір бӛліктерін цикл деп атайды. Осы бірнеше рет қайталанатын бӛлігі бар алгоритмдер тобы циклдік алгоритмдерге жатады. Циклдік алгоритмдерді пайдалану оларды кейіннен программаларда цикл операторы тҥрінде қысқартып жазу мҥмкіндігін береді. Циклдер қайталану санының алдын ала белгілі және белгісіз болуына байланысты екі топқа бӛлінеді. Қайталану сандары алдын ала белгілі болып келген циклдер тобы арифметикалық цикл болып есептеледі, ал орындалу саны белгісіз циклдер қадамдық (итерация) цикл болып аталады. Практикада белгілі бір айнымалының сандық мәніне байланысты орындалатын арифметикалық циклдер жиі кездеседі. Мҧнда арифметикалық прогрессияға ҧқсас болып келетін циклдер ең қарапайым арифметикалық цикл болып табылады. иә y x x 35

36 3 4 басы 2 x0,xк,dx енг. x := x0 х xk иә 5 y:=f(x) 6 1 x; y 7 x := x + dx жоқ 8 соңы 4.8-сурет. Қарапайым циклдік алгоритм Оны басқару қайталану кезеңінде прогрессияның заңына сәйкес тҧрақты шамаға ӛзгеріп отыратын цикл параметрінің сандық мәнімен байланысты болуы тиіс. Цикл орындалуы алдында оның айнымалы аргументі параметрі (х) алғашқы мәнге (x0) ие болуы керек, сонан кейін қайталану кезеңінде цикл параметрі белгілі бір шамаға (dx қадамға) ӛзгере отырып, ол алдын ала берілген ең соңғы мәнге (xk) дейін жетуі қажет. Алгоритмнің орындалу барысында цикл параметрі, мысалы, х ӛзінің ең алғашқы х0 мәнінен ең соңғы хk мәніне дейін тҧрақты шамаға (dx) ӛзгеріп отырады. Осының нәтижесінде х мынадай мәндерді қабылдайды: x0, x0+dx, x0+2dx,..., x0+(n-1)dx, xk, мҧндағы n циклдің қайталану саны, ол былай анықталады: xk - x0 n = 1, dx мҧнда [...] ӛрнектің бҥтін бӛлігі алынатынын кӛрсетеді, n циклдің қайталану саны әрқашанда бҥтін натурал сан болуы тиіс, егер ол аралас сан болса, онда оның бӛлшегі алынып тасталады. 1 басы 2 x0, xк, dx енгізу 4 3 x:=x0,xk,dx 5 y:= f (x) x, y 6 соңы 4.9-сурет. Модификаторлы циклдік алгоритм Арифметикалық цикл ҥшін y=f(x) функциясының есептелу жолы алгоритм ретінде 4.8-суретте кӛрсетілген. Мҧндағы 3-ші, 4-ші, 7-блоктар циклді ҧйымдастыру ҥшін қажет. Олар цикл параметрінің алғашқы мәнін, ӛзгеру қадамын белгілеп және оның ең соңғы мәніне жеткен-жетпегенін тексереді. Ал 5- және 6-блоктар бірнеше рет қайталанып циклдің ӛзін қҧрайды. 4-блок шартты тексеріп қайталану процесін ҧйымдастырады. Алгоритм схемасын салуды және программаны жазуды жеңілдету ҥшін цикл алгоритмдері ықшамдалған тҥрде "модификатор" немесе "цикл басы" блогын пайдалану арқылы жазылады. Онда 4.8-суретте кӛрсетілген 3-ші, 4- ші, 7-блоктардың орнына "цикл басы" блогы орналасады. Ол алтыбҧрыш тәрізді геометриялық фигурадан тҧрады және оның міндетті тҥрде екі кіру және екі шығу сызығы болуға тиіс. Осы блокты пайдалану арқылы жоғарыда келтірілген алгоритм 4.9-суретте кӛрсетілген тҥрде кескінделеді. Параметрдің алғашқы х0 мәні оның соңғы хk мәнінен кем болса, онда оның қадамы dx оң сан 36

37 болады. Керісінше, параметрдің алғашқы мәні оның соңғы мәнінен артық болса, онда қадам теріс сан болады. 4. Қадамдық циклдер. Циклді орындаудың алдында, оның қайталану саны белгісіз болған жағдайда қадамдық циклдер пайдаланылады. Мҧнда циклді жазу ҥшін тек "шартты тексеру" блогын қолдану қажет, ол циклді аяқтау ҥшін белгілі бір шартты тексереді. Қадамдық циклдердің схемасын сызғанда модификаторды (алтыбҧрышты) қолдана алмаймыз, себебі алдын ала циклдің неше рет қайталанатыны белгісіз. Енді осындай циклдерге мысал келтірейік. 4.6 мысал. x k k 2 Z функциясының мәндерін k = 1, 2, 3,... және Z ден артық болған жағдайда есептейік, мҧндағы 0 х 1. Бҧл мысалда алдын ала цикл неше рет қайталанатынын айта алмаймыз, ӛйткені бізде тек k параметрінің алғашқы мәні мен қадамы ғана белгілі. Сонымен қатар Z функциясының ден артық болуы циклді қайталау шарты болып есептеледі (Z > ) суретте осы есептің алгоритм схемасы кӛрсетілген. 4.6 Программалау тілдері Алгоритмдерді компьютерге тҥсінікті мәтін ретінде жазуға арналған қарапайым жасанды тіл программалау тілдері деп аталады. Әрбір компьютердің ӛзінің машиналық программалау тілі болады, оны командалар тілі немесе кодтар (арнайы таңбалау) тілі дейді. Компьютер тек ӛз тілінде, яғни машиналық тілде жазылған программаларды ғана орындай алады. Алайда, машина тілінде программа жазу кҥрделі жҧмыс, ӛйткені ол тек екілік (он алтылық) жҥйедегі кодтардан тҧрады және әр машинада әр тҥрлі машиналық тіл қолданылады. Программа жазуды жеңілдету ҥшін математикалық формулаларды кеңінен қолданатын, ағылшын тілінің негізінде жасалған алгоритмдік тілдер Бейсик, Паскаль, Фортран, С, C++, т.б. кеңінен қолданылады. Алгоритмдік немесе программалау тілі жазу ережелері қарапайым жасанды тіл. Оның машина тілдерінен айырмашылығы табиғи ағылшын тілі негізге алынып, кең тараған математикалық таңбалармен толықтырылып жасалған. Сондықтан алгоритмдік тілдерде программа жасау адамдарға әрі жеңіл, әрі ыңғайлы болып келеді. Алгоритмдік тілдер автоматты тҥрде компьютердің кӛмегімен аудармашы программалар арқылы машиналық тілге кӛшіріледі. Алгоритмдік тілді машина тіліне тікелей аударатын ҥлкен программаларды транслятор болып табылады. Алгоритмдік тілдерді пайдалану программалауды жеңілдете отырып, компьютерде есеп шығару процесін оңайлатады, алайда онда есеп шығару уақыты аздап кӛбейеді басы 2 x-ті енгізу 8 k := 1 z:=x k /k 2 k, z k:=k+1 z>10-4 жоқ соңы иә 4.10-сурет. Қадамдық цикл алгоритмі

38 Алгоритмдік тілдер машинаға және проблемаға бағытталған болып екіге бӛлінеді. Машинаға бағытталған тілдердің машина тілінен айырмашылығы, олар компьютердің ерекшеліктерін есепке ала отырып әріптерді де пайдаланады. Қазіргі кезде машинаға бағытталған тілдерде маман программалаушылар жҧмыс істейді. Оларға автокод, макроассемблер, ассемблер тәрізді тілдер жатады. Проблемаға бағытталған тілдер шығарылатын есептердің ерекшеліктерін еске ала отырып, есептің математикада жазылу тіліне жақындастырылады. Бҧларға Бейсик, Фортран, Паскаль, С/С++, т.с.с. тілдер жатады. Қазіргі кезде бес жҥзге жуық алгоритмдік тілдер тараған. Олардың әрқайсысы белгілі бір мақсаттарда қолданылады. Мысалы, Фортран ғылымитехникалық (инженерлік) есептерді шығару ҥшін, Паскаль оқып ҥйренуде, ал С/С++ тілі ҥйрену ҥшін де, ӛндірістік есептерде де, операциялық жҥйелер жазу ҥшін де қолданыла беретін кең қолданыстағы тіл болып табылады. Әр тҥрлі процессорлар типтерінің машиналық командалары да әр тҥрлі болады. Егер программалау тілі нақты бір процессор типінің ерекшеліктерін есепке ала отырып жҧмыс істейтін болса, онда ол төменгі деңгейдегі программмалау тілі деп аталады. Ең тӛменгі деңгейдегі программалау тілі ассемблер болып саналады, ол машиналық кодтың әрбір командасын мнемоника деп аталатын арнайы символдық белгілермен жазып шығады. Тӛменгі деңгейдегі программалау тілдері кӛмегімен ӛте тиімді және ықшам программалар жасалады, мҧнда программалаушы процессордың барлық мҥмкіндіктерін толық пайдалана алады. Процессорлардың әр тҥрлі модельдерінің ӛз ассемблерлері болатындықтан, мҧнда жазылған программа тек осы ортада ғана орындалуы тиіс. Сондықтан мҧндай тілдер шағын жҥйелік программалар мен драйверлер жазуға ыңғайлы болып табылады. Жоғары деңгейдегі программалау тілдері нақты бір компьютерлік архитектура ерекшеліктерін есепке алмай жҧмыс істейді, сондықтан олар процессорға сәйкес транслятор жазылған басқа компьютерлерге оңай кӛшіріледі. Жоғары деңгейдегі программалау тілдерінде программа жазу машиналық тілдерге қарағанда анағҧрлым жеңіл. Жоғары деңгейдегі программалау тілдері: 1. Фортран ӛткен ғасырдың 50-ші жылдары жасалған, машиналық тілге компилятор арқылы аударылатын алғашқы тіл. Мҧнда программалаудың бірсыпыра маңызды тҥсініктері жҥзеге асырылған еді. Осы тілде статистикалық есептерге арналған қарапайым кешендерден бастап, жер серіктерін басқаруға арналған есептерге дейін кӛптеген кітапханалық программалар жасалған болатын, сондықтан ол кӛптеген мекемелерде осы кезге дейін пайдаланылып келеді. 2. Кобол ӛткен ғасырдың 60-шы жылдары басында жасалған, экономикалық есептер шығаруда қолданылатын, машиналық тілге компилятор арқылы аударылатын тіл. Коболда сыртқы мәлімет сақтау қҧрылғыларында сақталатын кӛлемді мәліметтерді ӛңдеудің қуатты мҥмкіндіктері жҥзеге асырылды. 3. Паскаль ӛткен ғасырдың 70-ші жылдары аяғында швейцар математигі Никлаус Вирттің программалауды ҥйрету мақсатында қолдану ҥшін арнайы жасаған тілі. Ол адамның алгоритмдік ойлау қабілетін қалыптастыратын, 38

39 кӛпшілікке тҥсінікті қысқа программа жазуға қолайлы, алгоритмдеудің негізгі тәсілдерін кӛрсетуге және де ірі жобаларды да жҥзеге асыра алатын тіл болды. 4. Бейсик (Basic) бҧл да ӛткен ғасырдың 60-шы жылдары программалауды ҥйренушілерге арналып жасалған қарапайым тіл болды. Бҧған да арнайы компиляторлар мен интерпретаторлар жасалып, ол кӛпшілікке кең тараған, игеруге жеңіл программалау тілдерінің бірі болды. 5. C 1970-ші жылдары шықты, ол алдымен кӛпшілікке арналып жасалмаған тіл еді. C тілі нақты процессорға тәуелді емес, қысқа, әрі тиімді программалар жасайтын ассемблер орнына пайдалану ҥшін жоспарланған тіл болатын. C тілінің кӛптеген қасиеттері Паскаль тіліне ҧқсас болғанымен, оның компьютер жадымен тікелей жҧмыс істей алатын жаңа мҥмкіндіктері бар еді. Осы тілде кӛптеген қолданбалы және жҥйелік программалармен қатар Unix операциялық жҥйесі де жазылып шыққан болатын. 6. С++ объектіге бағытталған C тілінің кеңейтілген тҥрі, оны 1980 ж. Бьярн Страуструп жасап шығарды. 7. Java тілін 1990-шы жылдары басында С++ тілін негізге ала отырып, Sun компаниясы шығарды. Ол С++ тілінен тӛменгі деңгейдегі мҥмкіндіктерді алып тастап, қолданбалы программалар жасауды оңайлату мақсатында жасалды. Тілдің басты ерекшелігі оның машиналық кодқа тҥрленбей, бірден платформалы-тәуелсіз байт-кодқа (әр команда бір байт орын алады) тҥрленуі болды. Осындай код виртуалды Java-машина (JVM) интерпретаторы кӛмегімен орындалады. 8. С# («Си-шарп» деп айтылады) тілін Microsoft компаниясының маманы Андерс Хейлзберг (Anders Hejlsberg) жаңа объектіге бағытталған программалау тілі ретінде С, C++, Java, Pascal тілдерінің негізінде жасап шығарған. С# тілі Microsoft фирмасының.net (дот-нет) архитектурасы ҥшін программалар жазуға арналған тілі..net программалау технологиясындағы жаңа платформа, ол желіге қосылған компьютерлерге арналып жасалған. Бҧл технология Visual Studio.NET деп аталады да, оның жҧмыс ортасында Visual Basic, басқарылатын С++ және С# тілдерінде программалар жасау қарастырылған, бірақ ол осылармен ғана шектеліп қалмайды. С# тілінің мҥмкіндігі Java тілімен қатарлас, осы екі тіл қазіргі алдыңғы қатарлы технологияларға жатады. Бақылау сұрақтары 1. Алгоритм және алгоритмдеу ұғымдары. 2. Компьютерде орындалатын алгоритмдердің қандай қасиеттері болады? 3. Алгоритм мен программаның қандай ұқсастықтары мен айырмашылықтары бар? 4. Оператор, айнымалы дегеніміз не? Транслятор, компилятор, интерпретатор ше? 5. Компьютерде есеп шығару кезеңдері. 6. Алгоритмдерді бейнелеу жолдары. Олардың ерекшеліктері. 7. Алгоритмдерді графикалық жолмен бейнелеу деген не? 8. Алгоритмдердің негізгі канондық құрылымдары. 9. Алгоритм схемаларының әр түрлі блоктары, олардың бейнеленуі, байла- 39

40 ныстары. 10. Сызықтық, тармақталу және циклдік алгоритмдер. 11. Қадамдық циклдер және олардың ерекшеліктері. 12. Программалау тілдерінің түрлері, кең таралған тілдерге қандай тілдер жатады? Тапсырмалар 1. Берілген формулалар бойынша арифметикалық ӛрнектерді есептейтін алгоритмдердің блок-схемаларын сызып шығыңдар: 1 x 1 а) z x 1; ә) y=(5x 2-4)( x 2 +7); б) 3 2 ax u sin cos x e ; 2 5x 6, егер x 5; 3 x 7, егер x 5; в) f x г) 1 x 1 x 5 xtg sin x, егер x 1.5; 3 f ( x) x sin x, егер 1.5 x 2.5; 3 3x 5, егер x 2.5; д) z x 1; мҧнда х айнымалысы 2-ден 5-ке дейін 0,5 қадамымен ӛзгереді. e) Нақты а және бҥтін n сандары берілген. s n қосындысын табу алгоритмін қҧру керек. ж) s = 1 + 1/2 + 1/ /n + қосындысын 0,0001 дәлдігімен табу керек. 2. Квадрат теңдеуді (ax 2 +bx+c=0; a 0) шешу алгоритмін тҧрғызыңдар. 3. Жазықтықта ҥш нҥкте - A(x 1,y 1 ), B(x 2,y 2 ) және C(x 3,y 3 ) берілген: а) солардан ҥшбҧрыш қҧруға бола ма? Егер болатын болса, Герон формуласы бойынша оның ауданын есептеп шығаратын алгоритм қҧрыңдар; ә) бҧл ҥшбҧрыш тең қабырғалы немесе тең бҥйірлі болатынын анықтайтын алгоритм қҧрыңдар ден N-ге дейiнгi сандардың қосындысын есептейтiн алгоритм қҧрыңдар. N- нiң мәнi енгiзiледi. 5. Пернетақта арқылы 5 сан енгiзiңдер. Егер сан 10-нан кем болса, онда осы санды және оның квадратын табыңдар. 6. Ҧзындықтың 1-ден 20 дюймге дейiнгi мәндерiн сантиметрге (1 дюйм = 2,54 см) айналдыратын және оны экранға шығаратын алгоритм қҧрыңдар. 7. Бҥтін x және y сандары берілген. Егер екі санда жҧп болса оларға 1-ді қосыңыз; егер тек біреуі жҧп болса, онда олардың кӛбейтіндісін табыңыз; қалған жағдайда сандарды ӛзгеріссіз қалдырыңыз. 8. Бҥтін a, b, c, d сандары берілген. Егер a>=b>=c>=d болса, онда барлық сандарды нӛлге теңестіріңіз; егер a<b<c<d болса, онда әр санды 1-ге ӛсіріңіз; қалған жағдайда әр санды 1-ге кемітіңіз. 1 a 1 a 1 a 1 a 40

41 5. С/C++ ТІЛДЕРІ НЕГІЗДЕРІ C тілі жылдары арасында АҚШ-та Bell Telephon Laboratories компаниясының программалаушылары Дэннис Ритчи мен Кен Томпсон бастауымен дҥниеге келді. Бҧл тілдің негізі Алголдан басталып, Паскаль және ПЛ/1 тілдерімен қатар пайда болды. C тілінің шығуы UNIX операциялық жҥйесінде программалаумен тығыз байланысты, ӛйткені бҧл жҥйе ассемлерде және осы С тілінде жазылып шыққан болатын. UNIX жҧмыс істеу ортасы C тілін жҥйелік программалау тілі ретінде елге таныстырды, ол компиляторлар мен операциялық жҥйелер жазу ҥшін қолайлы деп саналды, кейіннен С тілі кез келген салада программалар жазуға да ӛте қолайлы тіл болып табылатыны анықталды. Алғаш рет UNIX 1969 жылы Нью-Джерси штатындағы Bell фирмасының лабораториясында PDP-7 компьютерінде жасалып шықты. UNIX жҥйесі PDP-7 компьютерінің ассемблер тілінде жазылды. Бҧдан соң сол лабораторияның жетекшісі Кен Томпсон 1970 жылы В деп аталған жаңа тілге арнап компилятор жасап шықты. Осы тілді C (ағылшынша Си) тілінің негізі деп атауға болады. С тілінің алғашқы нҧсқасы Б.Керниган мен Д.Ритчидің С программалау тілі деген кітабы арқылы бірнеше рет жарық кӛрді ( жж.). Осы кітап тілдің стандарты сияқты болды, бірақ мҧнда аздаған кемшіліктер бар екендігі анықталды. Сондықтан оны жетілдіру мақсатында Америка ҧлттық стандарттар институтында (ANSI) Техникалық комиссия қҧрылып, 1983 ж. ANSI С деп аталған тіл стандарты бекітілді. Мҧнда тек программалау мәселелері ғана қарастырылмай, кең таралып келе жатқан IBM PC компьютерлеріне арналған компиляторлар жасау істері де қамтылды. С тілін ары қарай жетілдіріп, сол Bell Telephon Laboratories қызметкері Бьерн Страуструп «Кластары бар С» тілін жасап шығарды, ол 1983-жылы С++ тілі деген атқа ие болды. С++ тілі объектіге бағытталған программалау тілі болып саналады, ол бҧрынғы С тіліне кластардың енгізілуімен ерекшеленеді жылы Бьерн Страуструп «С++ программалау тілі» кітабын шығарды, сол кезден бері тілдің бірнеше нҧсқалары пайда болып, ол қазіргі ең кӛп тараған тілдердің біріне айналды. Тілдің халықаралық стандарты 1998 ж. бекітілді, бҧл стандарт бойынша С++ тілі C тілінің 1990 ж. бекітілген стандартына негізделеді. Бҧл оқулықтағы мысалдар осы стандартты пайдаланады. Бірсыпыра фирмалар C++ тіліне арнап компиляторлар жазды, мысалы, Borland International фирмасы 1989 ж. жасаған біріктірілген программалау ортасы TurboC++ жҥйесін дҥниеге келтірді. Ол DOS ортасында жақсы жҧмыс істеді. Ал 1992 ж. жасалған Borland C++ жҥйесі Windows ортасында да жҧмыс істейтін жақсы компилятор болып табылады. Сонымен С/С++ программалары дайындалып орындалатын біріктірілген (интегралданған) орта DOS ортасында да және Windows жҥйесінде де жҧмыс істей береді. Біз қарастырғалы отырған С/C++ тілдерінің негізгі ҧғымдары мен операторлары кез келген мектептің немесе жоғары оқу орнының компьютерлерінде орнатылған ТурбоС біріктірілген ортасының редакторы арқылы немесе Visual C++ программалау ортасында теріліп орындалады. 41

42 Оқулықтағы программалардың басым бӛлігі С тілінде беріледі, С++ тілінде берілген программалардың бірсыпыра ӛзгешеліктері бар, сондықтан олар туралы мысалдарды талдау кезінде қосымша ескертіліп айтылады. Қазіргі кең қолданылып жҥрген программаларды орындау ортасы С/С++ тілдерінің компиляторы болғандықтан, жалпы кітаптағы мысалдар кез келген трансляторда (ТурбоС, BorlandC, C++) орындала береді. 5.1 С/С++ тілдерінде жазылған программаның құрылымы С тіліндегі программа қҧрылымы тӛмендегідей болады: #препроцессор директивалары #препроцессор директивалары функция а() {операторлар функция b() {операторлар void main () // программаның орындалуын бастайтын функция {операторлар: сипаттау операторлары меншіктеу операторлары функция бос оператор құрама операторлар таңдау операторлары цикл операторлары кӛшу операторлары Препроцессор директивалары программаны компиляциядан ӛткізгенге дейінгі тҥрлендіру ісін басқарады. С/С++ тілдерінде мәтіндік файл тҥрінде даярланған бастапқы программа тҥрлендірудің 3 кезеңінен ӛтеді: 1) мәтінді препроцессорлық тҥрлендіру; 2) программаны компиляциядан ӛткізу; 3) біріктіру (байланыстарды тҥзету және жинақтау). Бастапқы мәтін (cpp) Қосымша файлдар (h) ПРЕПРОЦЕССОР программа толық мәтіні КОМПИЛЯТОР Орындалатын код (exe) Біріктіргіш (компоновщик) Объектілік код (obj) Стандартты кітапхана (lib) 5.1-сурет. С/С++ программасы мәтінін тҥрлендіру кезеңдері 42

43 Осындай ҥш кезеңнен ӛткен соң (5.1-сурет), программаның орындалатын екілік коды қалыптасады. Препроцессордың міндеті программа мәтінін компиляцияға дейін тҥрлендіру. Препроцессорлық ӛңдеу ережелерін программалаушы препроцессор директивалары кӛмегімен анықтайды. Директива # таңбасынан басталады. Мысалы: 1) #define программа мәтініндегі алмастыру ережелерін кӛрсетеді. #define ZERO 0.0 Соңғы жол программадағы ZERO сӛзінің әрқайсысы 0.0 санына ауысатынын білдіреді. 2) #include <тақырыптық файл аты> программа мәтініне стандартты кітапханамен бірге берілетін «Тақырыптық файлдар» каталогынан мәтін қосылатынын білдіреді. Тақырыптық файлдардың біреуінде С тілінің әрбір кітапханалық функциясының атына сәйкес сипаттамасы болады. Тақырыптық файлдар тізімі тіл стандартымен анықталған. Include директивасын пайдалану соған сәйкес стандартты кітапхананы іске қоспайды, ол тек кӛрсетілген тақырыптық файлдан алынатын керекті сипаттамаларды программа мәтініне енгізуге мҥмкіндік береді. Кітапханадан алынатын қажетті кодтар программаға компиляциядан кейін орындалатын біріктіру кезеңінде қосылады. Тақырыптық файлдарда стандартты функциялардың барлығының да сипаттамалары болғанмен, программа кодына тек соның ішінде қолданылатын функциялар ғана кірістіріледі. Препроцессорлық ӛңдеу кезінде программа мәтініндегі препроцессор директивалары (#include, #define) анықталып, программаға тақырыптық файлдар каталогынан мәтіндік файлдар қосылады немесе кейбір сӛздерді алмастыру орындалады. С/С++ тілдерінің стандарты бойынша анықталған функциялар бір тақырыптық файлда анықталады. Препроцессорлық ӛңдеу орындалғаннан кейін программа мәтінінде бірде бір препроцессорлық директива қалмайды. Компиляция кезінде программа компьютерге тҥсінікті кодтарға тҥрлендіріледі. Егер осы тҥрлендіру кезінде стандартқа сәйкес келмейтін қателер кездессе, оны компилятор бірден кӛрсетеді. Ал қате жоқ болса, компилятор объектілік код немесе объектілік модуль болып табылатын программа мәтінін береді. Барлық программа бӛліктері функциялар компиляциядан ӛткен соң, объектілік модульдер біріктіргішке (компоновщикке) беріледі. Ол модульдерді біріктіріп, оған стандартты кітапхана функцияларын қосады да, функцияда қате болса, соны анықтайды. Біріктіргіш жҧмысы нәтижесінде программаның екілік сандар тҥрінде жазылған атқарылатын машиналық коды жасалады да, ол орындалып жҧмыс нәтижесін береді. Барлық программалау тілдері осы схемамен жҧмыс істейді. Программа сипаттамалар мен анықтамалардан, операторлардан қҧрастырылған бірнеше функциялар жиынынан тҧратын мәтін тҥрінде болады. Сол функциялар ішінде main атты басты функция міндетті тҥрде болуы тиіс. Ондай функциясыз программа орындалмайды. Функция атының алдында сол функция қайтаратын мәннің типі (нәтиже типі) кӛрсетіледі. Егер функция ешқандай нәтиже қайтармайтын болса, онда void типі кӛрсетіледі, мысалы: void 43

44 main(). Әрбір функцияның, соның ішінде main функциясының да, параметрлері болуы тиіс, бірақ олар жоқ та болуы мҥмкін, ондай жағдайда жақша ішінде (void) сӛзі кӛрсетіледі. Функция тақырыбынан соң, жҥйелі жақша ішінде оның операторлары, яғни ішкі тҧлғасы (денесі) орналасады. Функция тҧлғасы дегеніміз анықтаулар, сипаттамалар, орындалатын операторлар жиынынан тҧратын, жҥйелі жақшаға алынған символдар тізбегі. Әрбір анықтама, сипаттама немесе оператор нҥктелі ҥтірмен аяқталады. Анықтаулар программадағы ӛңделетін мәліметтерді бейнелеуге қажет объектілер (объект компьютер жадының ат қойылған аймағы, мысалы, айнымалы) енгізеді. Анықтаулар тӛмендегідей тҥрде болады: int y = 10; // бҥтін сан тҥріндегі ат қойылған константа float x; // нақты (аралас сан тҥріндегі) айнымалы мҧндағы // белгілерінен кейін орналасқан сӛздер тҥсініктеме рӛлін атқарады да, программаға еш әсерін тигізбейді. Сипаттамалар компиляторға программаның басқа бӛліктерінде жазылған объектілер мен функциялардың аттары және қасиеттері жайлы мәлімет береді. Операторлар программаның орындалатын әрбір қадамында қандай ісәрекеттер атқарылатынын анықтайды. С программасының мысалы: #include <stdio.h> // препроцессорлық директива void main() // функция тақырыбы { // функция тҧлғасының басы printf( Hello! ); // экранға Hello! сӛзін шығару // соңы 5.2-суретте С/С++ программаларының жалпы қҧрылымы кӛрсетілген. С-программа # тақырып main() f1 f2 Операторлар Операторлар Операторлар 5.2-сурет. С/С++ программалары қҧрылымы 44

45 Суретке сәйкес, программа бірнеше функциялардан (main, f1, f2 ) қҧралады және олардың біреуі міндетті тҥрде main() болуы қажет. Жалпы кез келген функция оның тақырыбы мен тҧлғасынан (денесінен) тҧрады. Программадағы кез келген функция тақырыбы препроцессордың директивасынан және функция атынан тҧрады. Функция атына жалғасып, жақша ішіне параметрлер жазылуы мҥмкін, кейде параметрлер болмайды, ондайда жақша ішіне ешнәрсе жазылмайды. Функция тҧлғасы операторлардан тҧрады, олар жҥйелі жақшалармен шектеледі. Әрбір оператордан кейін ; таңбасы қойылады. Енді бір программа мысалын келтірейік, олардың кейбірінің жҧмыс істеу тәсілдері кейінірек баяндалады: /* Герон формуласы арқылы үшбұрыш ауданын табу */ #include <stdio.h> /* енгізу/шығару директивасы */ #include <math.h> /* математикалық функциялар директивасы */ main() /* басты функцияны қолдану */ { int a,b,c; /* бҥтін айнымалыларды сипаттау */ float p,s; /* нақты айнымалыларды сипаттау */ printf("\nүшбұрыш қабырғаларын енгіз: \n"); scanf("%d%d%d",&a,&b,&c); p=(a+b+c)/2.0; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf("s=%f",s); препроцессор директивасы тақырып #include <stdio.h> main ( ) функция аты сипаттау жолы меншіктеу операторы 5.3-сурет. С программасы қҧрамы функция тұлғасы int m; m=1; printf ( %d нач. знач \n, m); стандартты функцияны шақыру операторы Программада тҥсініктемелер беру ҥшін /* және */ таңбалары қолданылады, олардың ішіне қазақша, орысша, ағылшынша сӛздер жазуға болады. Ал жол соңындағы тҥсініктемелер қос қиғаш сызықтан (// ) кейін жазылады, бҧл тәсіл С++ тілінің қҧрылымынан алынған. Препроцессор директивалары #include сӛзінен кейін жазылады, stdio.h тіркесі енгізу/шығару операциялары орындалатынын білдіреді (5.3-сурет). Ал math.h сӛз тіркесі программада стандартты математикалық функциялар пайдаланылатынын кӛрсетеді. 45

46 Басты функция main() аргументсіз жазылған, сол себепті жақша ішінде ешнәрсе кӛрсетілмеген. Ал функция тҧлғасы, яғни ішкі қҧрамы операторлардан (немесе басқа функциялардан) тҧруы тиіс. Int тҥйінді сӛзі a,b,c айнымалыларының бҥтін мән қабылдайтынын, float тҥйінді сӛзі p, s айнымалыларының нақты мән қабылдайтынын сипаттап тҧр. Келесі жол ҥшбҧрыш қабырғаларын енгізуді талап ететін сӛз тіркестерін экранға шығарады, мҧндағы \n таңбалары сӛз тіркесі алдында және одан кейін курсор бір жол тӛмен тҥсетінін кӛрсетеді. Scanf сӛзінен басталатын жол a,b,c мәндерін бос орын таңбасымен бӛле отырып енгізу арқылы пернелерден қабылдайды, сонан кейін жарты периметр есептеледі, 2 санын 2.0 тҥрінде жазу бӛлу нәтижесінің нақты сан болатындығын білдіреді, әйтпесе бӛлінді бҥтін сан тҥрінде болады. Одан кейін аудан мәні анықталады да, соңғы нәтиже экранға шығарылады. 5.2 Тілдің құрамы Кез келген табиғи тілдің мәтініндегі тӛрт негізгі элементті кӛрсетуге болады: символдар, сӛздер, сӛз тіркестері және сӛйлемдер. Осындай элементтер алгоритмдік тілдерде де болады, мҧнда бірақ сӛздер лексемдер (қарапайым конструкциялар) деп, сӛз тіркестері өрнектер деп, ал сӛйлемдер операторлар деп аталады. Лексемдер симолдардан тҧрады, ӛрнектер лексемдер мен символдардан, ал операторлар символдардан, ӛрнектерден және лексемдерден тҧрады (5.4-сурет): Тілдің алфавиті немесе оның символдары бҧл бӛлінбейтін негізгі белгілер, солардан тілдің барлық мәтіндері қҧрастырылады. Лексем немесе қарапайым конструкция ӛзіндік мағынасы бар тілдің ең кіші бірлігі. Ӛрнектер белгілі бір мәнді есептеу ережесін береді. Оператор белгілі бір әрекеттің аяқталған сипаттамасынан тҧрады. 5.4-сурет. Алгоритмдік тілдің қҧрамы Кҥрделі есепті шығару ҥшін операторлар тізбегін жазу керек. Кейде операторлар жҥйелі жақшамен қоршалған қҧрама операторға немесе блокқа біріктіріледі. Мҧндайда олар бір оператор тәрізді орындалады. Операторлар атқарылатын және атқарылмайтын (орындалмайтын) болып бӛлінеді. Атқарылатын операторлар белгілі бір әрекетті (амалды, операцияны) 46

47 орындайды. Ал атқарылмайтын операторлар тек мәліметтерді сипаттайды, сондықтан оларды сипаттау операторлары немесе сипаттамалар деп те атайды. Тілдің әрбір элементі синтаксиспен және семантикамен анықталады. Синтаксистік анықтамалар тіл элементтерінің қҧрылу ережелерін анықтайды, ал семантика олардың мағынасы мен қолдану ережелерінен тҧрады. Біртҧтас алгоритм бойынша біріктірілген сипаттамалар мен операторлар жиыны программа қҧрайды. Оны орындау ҥшін оны процессорға тҥсінікті тіл машиналық кодқа айналдыру керек. Бҧл процесс бірнеше кезеңдерден тҧрады. Ол ҥшін қажетті кезеңдер мен іс-әрекеттер 5.5-суретте кӛрсетілген. Есептің программалау тілінде жазылуы Транслятор (аудармашы) Есептің машина тілінде жазылуы Есепті шығару 5.5 сурет. Есепті шығару кезеңдері Транслятор қҧрамындағы байланыс редакторы бір модульге басқа модульдерді қоса отырып, оның ішінде кез келген программада қолданылатын кітапханалық функциялар (мысалы, экранға мәлімет шығару ҥшін) бар, программаның машиналық кодтағы атқарылатын модулін қалыптастырады. Егер программа бірнеше бастапқы файлдардан тҧратын болса, олар жеке-жеке компиляциядан ӛткізіліп (аударылып), қҧрастыру кезеңінде біріктіріледі. Атқарылатын модульдің тіркемесі.ехе болып шығады да, ол кәдімгі программалардай бірден орындалады. Тіл ережелерін сипаттау ҥшін оқулықтарда жасанды метатіл қолданылады, мысалы, Бэкус-Наур тәсілі немесе синтаксистік диаграммалар. Кӛрнекті және қарапайым ету мақсатында бҧл оқулықта кең таралған сипаттау тәсілі қолданылады, онда тіл қҧрылымының міндетті тҥрде талап етілмейтін бӛліктері тік жақшаға алынады; нақты мәнмен алмастырылатын мәтін қазақша (орысша) жазылады; ал бірнеше элементтердің бірін таңдау кезінде олар тік сызықшамен бӛлініп жазылады. Мысалы, мынадай [ void int ] аты(); тіркесте, аты сӛзі орнына тіл ережелеріне сәйкес нақты атауды кӛрсету қажет, ал оның алдында void немесе int сӛзі орналасады немесе ештеңе де жазылмайды. Жүйелік жақшалар тек бір элементі ғана таңдалып алынатын бірнеше элементтерді біріктіріп тҧрады. Егер тік жақша синтаксис элементі болып келген жағдайда, ол туралы айрықша айтылады. C++ тілі С тілінің жалғасы, олардың алфавиттері де, негізгі операторлары мен ҧғымдары бірдей, енді С тілін және С++ тілінің С тіліне кірмейтін бірсыпыра ерекшеліктері мен кҥрделі элементтерін игере отырып, бірте-бірте объектіге бағытталған программалау ҥрдістерін ҥйрене бастаймыз. Тілдің алфавиті. С/С++ тілдерінің алфавиттері бірдей деуге болады. Мҧндағы тҥйінді сӛздер (ключевое слово keyword) мен идентификаторларды, ӛрнектерді қҧрастыру ҥшін қолданылатын символдар, яғни тіл алфавиті болып саналады. C/C++ тілдері алфавитіне мыналар кіреді: 47

48 - ағылшын алфавитінің бас және кіші әріптері мен астын сызу символы кіреді; - от 0-ден 9-ға дейінгі араб цифрлары; - арнайы таңбалар: - " {, [ ] ( ) + - / % *. \ :? < = >! - & # ~ ; ^ - тіл элементтерін бір-бірінен бӛліп тҧратын кӛрінбейтін айыру символдары: босорын, табуляция символы, жаңа жолға кӛшу символы. - қазақ (орыс) алфавитінің бас және кіші әріптері сӛз тіркестері мен тҥсініктеме мәтін жазуда ғана пайдаланылады. Кӛбінесе оларды сәйкес латын әріптерімен кӛрсету немесе ағылшын тіліндегі аудармаларын пайдалану қалыптасқан, ӛйткені кӛптеген трансляторлар қазақ әріптерін бейнелемейді. Кӛрсетілгендерден басқа С/C++ тілдерінде басқару тізбектері деп аталатын мәліметтер енгізу мен шығаруда қолданылатын арнайы символдар тіркесі бар. Басқару тізбектері кері бӛлу сызықшасы белгісінен (\) басталатын латын әріптері мен цифрлар тізбегінен тҧрады (5.1 кесте). 5.1 кесте. Басқару тізбектері Басқару тізбектері Атаулары Он алтылық кодтары \a Қоңырау 007 \b Бір орынға кері қайтару 008 \t Горизонталь табуляция 009 \n Жаңа жолға кӛшу 00A \v Вертикаль табуляция 00B \r Сырғыманы (каретканы) қайтару 00C \f Форматты жылжыту 00D \" Қостырнақша 022 \' Апостроф 027 \0 Нӛл-символ 000 \\ Кері қиғаш сызық 05C \ddd Сегіздік жҥйедегі кодтар жиыны \xddd Он алтылық жҥйедегі кодтар жиыны Кестеде кӛрсетілген \ddd и \xddd (мҧндағы d цифр тҧрғанын кӛрсетеді) тҥріндегі тізбектер компьютердегі кодтар жиыны арқылы ӛрнектелетін символды сәйкесінше сегіздік және он алтылық цифрлар тізбегімен бейнелей алады. Мысалы, каретканы қайтару символы бірнеше тәсілмен ӛрнектеле алады: \r жалпы басқару тізбегі, \015 сегіздік сандардан тҧратын басқару тізбегі, \x00d он алтылық сандардан тҧратын басқару тізбегі. Мысалы, жеке мынадай \n (жаңа жолға кӛшу) басқару тізбегін \010 немесе \xa тҥрінде де жазуға болады. Басқару тізбектері тіркестер тҥріндегі константаларда да пайдаланылады, оларды тіркестік литералдар деп те атайды. Егер сӛз тіркесі ішінде қостырнақша тҧруы керек болса, онда оның алдына қиғаш сызық қойылады, 48

49 осыған байланысты компилятор оны шекарада тҧратын қостырнақшадан ажырата алады, мысалы: "\"Білім\" баспасы" Тілдің қарапайым объектілеріне сан, идентификатор, константа, айнымалы және функция, ӛрнек ҧғымдары кіреді. Программадағы негізгі амалдардың орындалуына керекті мәліметтердің сандық, логикалық немесе символдық (литерлік) мәндері болады. Олармен жҧмыс істеу қолайлы болуы ҥшін алгебра курсындағы белгілеулерге ҧқсас шартты атаулар пайдаланылады. Бҧл атаулар әр тҥрлі мәндерді (сандық мән, символдық мән, т.с.с.) қабылдауы мҥмкін, сондықтан оның типі деген ҧғым енгізіледі. Сандар. Сандар мен айнымалылар бҥтін және нақты болып екіге бӛлінеді. Бүтін сандар: +4, -100, 15743, 0 т.с.с. Қазіргі дербес компьютерлер ҥшін қолданылатын бҥтін сандар (ағылшынша ІNTEGER) бен аралығында ғана жазылады, бҧдан ҥлкен сандар кӛбінесе нақты сандарға айналдырылады. Нақты сандар кәдімгі табиғи аралас сандар тәрізді санның бҥтіні мен бӛлшегін нҥкте арқылы бӛлген кҥйде жазылады. Мысалы: 2.65, 0.5, , Ал ӛте ҥлкен немесе ӛте кіші нақты сандар кӛрсеткіші бар экспоненциал сандар ретінде mе р тҥрінде жазылады да, олардың диапазоны әлде қайда кең болады, мҧндағы m санның мантиссасы деп аталады, Е немесе е онның дәрежесі дегенді білдіреді, ал р дәреженің ӛз мәні. Мысалы: Кәдімгі жазылуы С тілінде жазылуы , , * Е+14-0,52* е4 5,2* Е-12-45* е6 Символдардан тіл лексемдері қҧралады, ал лексемдер константалар, айнымалылар, идентификаторлар, т.б. тҧрады Тұрақты немесе константа деп программаның орындалу барысында мәндері ӛзгеріссіз қалатын шамаларды айтады, олар сандық, символдық немесе тіркестік мәнді тҧрақты тҥрде қабылдайтын лексем болып табылады. Тіл ережесі бойынша бірнеше константа типтері болады, мысалы, символдық, бҥтін, нақты және тіркестік константалар. Компилятор константаны лексем (қарапайым конструкция) ретінде қарастырып, оны сыртқы тҥріне қарай бір типке жатқызады. Әрбір типке сәйкес константалар форматтары 5.2 кестеде кӛрсетілген. 5.2 кесте. С/C++ тілінің константалары 49

50 Константа Форматы Мысалдар Бҥтін Ондық: ондық цифрлар тізбесі, нӛлден 8, 0, басталмайды (егер сан 0 болмаса) Сегіздік: нӛлден басталатын сегіздік 01, 020, цифрлар (0,1,2,3,4,5,6,7) Он алтылық: 0х немесе 0X таңбаларынан 0xA, 0x1B8, 0X00FF басталатын он алтылық цифрлар (0,l,2,3,4,5,6,7,8,9,A,B,C,D,E,F) Нақты Ондық: 5.7,.001, 35. [цифрлар].[цифрлар] Экспоненциалдық 0.2Е6,.11е-3, 5Е10 [цифрлар][.][ цифрлар]{е е[+ -][ цифрлар] Символдық Апостроф таңбасымен қоршалған бір немесе екі символ 'А', 'ю', '*', 'db', '\0', '\n\', \012', '\x07\x07' Тіркестік Тырнақшаға алынған символдар тіркесі "Мұнда Азат болды", "\tнәтижесіr=\0xf5\n" Бҥтін және нақты константалардың қабылдай алатын мәндер диапазондары келесі тарауда келтірілген. Егер теріс таңбалы бҥтін немесе нақты константа алғымыз келсе, оның алдына сан таңбасын керіге ауыстыратын унарлық, яғни бір орындық операция белгісі (-) қойылады, мысалы: -218, -022, -0х4С, -4.8, -0.1е4. Константа және сан жазылуында бос орын таңбасы болмайды және де санның бҥтіні мен бӛлшегін айыру ҥшін ҥтір емес нҥкте қойылады. Бір ғана символдан тҧратын символдық константалар стандартты char типінде болып, компьютер жадында бір байт орын алады. Екі таңбадан тҧратын символдық константалар екі байт орын алып, int типінде болады да, алғашқы символ кіші адресті байтта сақталады. Айнымалылар деп программаның орындалу барысында әр тҥрлі мәндерді қабылдай алатын шамаларды айтады. Әрбір айнымалы мен константа программа алдында сипатталуы тиіс. Олардың компьютер жадында алатын орны типтеріне байланысты болады. Константалар мен айнымалылар идентификатормен белгіленеді. Айнымалы қасиеттері: 1. айнымалы белгілі бір мәнге ие болмағанша, анықталмаған болып саналады. Оған мән беру мынадай тәсілдермен орындалады: сырттан енгізу арқылы; константантаны меншіктеу арқылы; бҧрын анықталған айнымалының мәнін беру арқылы; 2. кез келген сәтте айнымалының белгілі бір мәні болады немесе ол анықталмаған болып есептеледі; 3. айнымалыға соңғы берілген мән оның алдыңғы мәнін жойып (ӛшіріп) жібереді. Айнымалыны таңдау (оқу) және оны пайдалану айнымалының мәнін ӛзгертпейді. Айнымалы идентификаторлармен белгіленеді. Әрбір айнымалы мен константа программа алдында сипатталуы тиіс. Олардың компьютер жадында алатын орны типтеріне байланысты болады. Константалар мен айнымалылар идентификатормен белгіленеді. С/С++ 50

51 тілдеріндегі айнымалы белгілі бір типтегі мәліметтер сақталатын компьютер жадының ат қойылған аймағы. Айнымалының аты мен мәні болады. Аты компьютер жадында мәні сақталған мәліметті пайдалану ҥшін керек. Пайдалану алдында кез келген айнымалы сипатталуы тиіс. Мысалы: int a; float x; Атау идентификатор (іdentіfіcatіon объектінің белгілі бір символдар тіркесіне сәйкестігін бекіту) программаны және программадағы тҧрақтыларды, типтерді, айнымалыларды, функцияларды, файлдарды және тағы басқаларды белгілеп жазу ҥшін қажет. Идентификаторлар тҧрақтыларды, айнымалыларды, олардың тҥрлерін, функцияларды, программаларды, файлдарды, т.б. программа объектілерін белгілеу ҥшін қолданылады. Оның ҧзындығын ӛте ҥлкен етудің қажеті жоқ, ӛйткені атауларды теру және кейіннен сақтау біраз уақыт керек етеді. Идентификатор латын әрпінен басталып, әріптер мен цифрлардан тҧратын тізбек. Мысалы, a, beta, b5, baga, т.с.с. Айнымалыны сипаттау мынадай нҧсқада орындалады: char f; long z, t; int a, beta, baga; float b5, k, n; int y = 10; Идентификаторлар латын алфавитінің бас және кіші әріптерінен және цифрлардан қҧралады. Әріп ретінде астын сызу символын (_) қолдануға рҧқсат етілген. Бас әріп пен кіші әріп бірдей болып саналмайды, олар әр тҥрлі идентификаторлар болып есептеледі, мысалы, abc, ABC, A128B, a128b тӛрт тҥрлі идентификатор болып есептеледі. Идентификатор ҧзындығына шек қойылмайды, бірақ оның алғашқы 31 символы ғана мағыналы болып саналады. Идентификатор оны сипаттау кезінде анықталады да, кейінгі операторларда қолданыла береді. Сипатталатын идентификатор С тілінің алдын ала анықталған тҥйінді сӛздерімен сәйкес келмеуі тиіс. Константалардан, айнымалылардан, функциялардан және операциялар таңбаларынан өрнектер қҧралады. Әрбір өрнек арифметикалық операциялар таңбаларымен қажетті жақшалар көмегімен біріктірілген бірнеше операндтардан (сан, айнымалы, константа) тұрады. Математикадағы формулалар, алгебрадағы кӛпмҥшеліктер программалау тілінде тек осы ӛрнек ҧғымы арқылы беріледі. Егер ӛрнек мәні бҥтін немесе нақты сан болатын болса, ол арифметикалық ӛрнек болып саналады. Арифметикалық ӛрнектерде мынадай операциялар: + - * / % (қалдық табу) болады. Жалпы ӛрнектер бір жол бойына жазылады және олардағы операция реттілігі жақшалармен анықталады. Ӛрнектерді жазу мысалдары: і = і+1; k = 5.35; x1= (-b+sqrt(b*b-4*a*c))/(2*a); y = sqrt(sin(x)+1); c = 2*pі*r; R = 19.36; 51

52 Қатынас таңбасы арқылы біріктірілген екі арифметикалық ӛрнек мәні басқа тілдердегідей ақиқат (0-ге тең емес) немесе жалған (0-ге тең) деп айтылады. Бірақ С тілінде логикалық тип тҥсінігі айтылмайды, ол С++ тілінде бар. Түйінді сӛздер (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 Бҧған қоса операторлар мен стандартты функциялар аттары да тҥйінді сӛздер тізімі секілді басқа мағынада қолданылмайды. Стандартты функциялар. С/С++ тілдерінде алдын ала программалары жасалып стандартты модульге жинақталып қойылған, қажет кезінде пайдалануға болатын объектілердің бірі стандартты функциялар болып табылады. Олар жиі кездесетін математикалық және басқа да функцияларды есептеу ҥшін қолданылады. Стандартты функцияны жазу ҥшін міндетті тҥрде функцияның аты және жақшаның ішінде аргументі кӛрсетілуі қажет. Стандартты функциялар: fabs(x), sіn(x), cos(x), asin(x), acos(x), tan(x), exp(x), log(x), sqrt(x), atan(x), т.с.с. Кітап соңындағы А қосымшасында бірсыпыра функция тізімдері мен олардың жазылу жолдары кӛрсетілген. Функцияны есептеу барысында аргумент пен функция типтерінің әр уақытта сәйкес келе бермейтінін есте сақтаған жӛн. С тіліндегі стандартты функцияларды пайдалану ҥшін <math.h> тақырыптық файлы (прототипі) қолданылады. Комментарий тҥсініктеме ретінде қолдануға болатын символдар тізбегі. C тіліндегі комментарий басы мен аяғы мынадай /*...*/ таңбалармен шектелуі тиіс. Олар бір немесе бірнеше жолдардан да тҧра алады. Си++ тілінде жол соңында тҧратын комментарийлер // сиволдарынан кейін орналасады. С және Си++ тілдерінде қҧрастырылған есептерді бір компилятор арқылы шығаруға болатындықтан, кӛбінесе тҥсініктемелердің жоғарыдағы екі тҥрін де пайдалана беруге болады. Комментарий ішінде тек С++ тілі алфавитіндегі символдарды ғана емес, компьютерде қолдануға болатын барлық символдарды пайдалана беруге болады. Мысалы, олар ҧлттық алфавиттерді де (егер ол экранда бейнеленетін болса) пайдалана алады. Тҥсініктеме ретінде мҥмкіндігінше // сиволдарынан кейін орналасатын комментарийлерді қолдану ҧсынылады, ал қос таңбалық жақша ішіндегі 52

53 /*... */ символдар тізбегін программаны тҥзетіп жӛндеу кезінде кодтар бӛлігін уақытша орындамайтын кездерде пайдаланған дҧрыс болып табылады. Программалау тілінің белгілі бір іс-әрекетті орындай алатын тиянақты мағынасы бар ең қарапайым сөйлемі оператор болып табылады. Тіл объектілерін, яғни программада пайдаланылатын мәліметтердің атаулары мен типтерін, олардың алғашқы мәндерін алдын ала тағайындау программаның сипатталуы болып саналады. Енді Фаренгейт градустарын Цельсий градустарына ауыстыратын C тілінде жазылған программа мәтінін келтірейік. /* Градустарды Фаренгейт бірлігінен Цельсий бірлігіне алмастыру, f = 0, 20,...,300 */ #include <stdio.h> #include <conio.h> main() { int t0, tn, step; float f,c; t0 = 0; /* тӛменгі температура */ tn =300; /* жоғарғы температура */ step = 20; /* ӛзгеру қадамы */ clrscr(); f = t0; printf("град_ф Град_Ц\n"); while (f <= tn) { c = (5.0/9.0) * (f -32.0); printf("%4.0f %6.1f\n", f, c); f = f + step; printf("\nаяқтау үшін ENTER басыңыз"); getch(); Бҧл программаны теріп орындап кӛруге болады, оның әрбір жолының атқаратын қызметтерін келесі тараулардан оқып танысатын боламыз. Бақылау сұрақтары 1. C/С++ тілдерінің қысқаша даму тарихы. 2. С/С++ программасының жалпы құрылымы және құрамы. 3. Тақырыптық файлдар, препроцессор ұғымы. 4. Сипаттамалар қандай қызмет атқарады? 5. Операторлар түсінігі. 6. Компьютерде программаларды орындау кезеңдері. 7. С/С++ тілі алфавиті, басқару тізбектер. 8. Тілдің қарапайым объектілері. 4. С/С++ тіліндегі стандартты функциялар. 5. Тілдің алфавиті, оның құрамы. 53

54 6. С/C++ тілінің негізгі объектілері. 7. Тұрақтылар түрлері және олардың мүмкін мәндері. 8. Айнымалылар ұғымы және олардың қасиеттері. 9. Идентификатор және түйінді сөздер ұғымдары. 10. С және С++ тілдеріндегі түсініктемелерді беру тәсілдері. Тапсырмалар 1. Тӛмендегі сандардың ішіндегі бҥтін сандарды кӛрсетіңіздер: 775; -832; 45.0; 2.98; -0.0; 2.65е02; 15248; -0.85е Тӛмендегі сандардың ішіндегі нақты сандарды кӛрсетіңіздер: 77.5; ; 43.0; -2.98; -0.0; 2.65е02; 15248; -0.85е Тӛмендегі сандардың ішіндегі сегіздік сандарды кӛрсетіңіздер: 775; -081; 0х43; 0541; -065; 0х76А; 244; Тӛмендегі сандардың ішіндегі оналтылық сандарды кӛрсетіңіздер: 7АС1; 0X8В; 0х4С; -0х2F1; -0141; -0хD6А; 0244; -0X Мынадай арифметикалық ӛрнектерді программалау тілі заңдылықтарымен жазып шығыңыздар: x 1 a b а) t lg a b ; ә) c d a e 10 4 t; 8RT b a б), в) 1, E c R a 6. Келесі айнымалыларды сипаттауда қандай қателер бар: int f; с; в; long 2z, t5; char a2, 2beta, b_aga; float b5, k=2, n; int y = 10.0; 54

55 6 C/C++ ТІЛДЕРІНДЕГІ МӘЛІМЕТТЕР ҚҰРЫЛЫМДАРЫ Мәліметтер типі концепциясы. Кез келген программаның негізгі мақсаты мәліметтерді ӛңдеу болып табылады. Әр тҥрлі типтегі мәліметтер компьютер жадында басқаша сақталып, олардың ӛңделуінде де айырмашылықтар болады. Кез келген алгоритмдік тілде әрбір константа, айнымалы, ӛрнекті немесе функцияны есептеу нәтижесі белгілі бір типте болуы тиіс. Мәліметтер типі мыналарды: компьютер жадындағы мәліметтің ішкі бейнелену түрін (көлемін); белгілі бір типтегі шамалардың қабылдай алатын мәндер жиынын; осы типтегі шамаларға қолдануға болатын операциялар мен функцияларды анықтайды. Осыларға байланысты программада пайдаланылатын нақты объектілерді бейнелеу ҥшін программалаушы әрбір шамалардың типін алдын ала таңдап алады. Типті міндетті тҥрде сипаттау қажеттілігі компиляторға программадағы әр тҥрлі конструкцияларды пайдалануға болатындығын тексеру мҥмкіндігін береді. Мәліметтерді ӛңдеу ҥшін пайдаланылатын машиналық командалар шамалардың типіне байланысты болып келеді. C++ тілінің барлық типтері негізгі және құрама болып екіге бӛлінеді. Мҧнда бҥтін, нақты, символдық және логикалық шамаларды бейнелеу ҥшін алты негізгі тип қолданылады (3.1 сурет). Программалаушы осы типтерді негізге ала отырып, қҧрама типтерді сипаттай алады. Қҧрама типтерге жиымдар (массивтер), тізбелер (перечисления), функциялар, қҧрылымдар (структуралар), сілтемелер (ссылки), нҧсқауыштар (указатели), біріктірмелер (объединения) және кластар жатады. Типтер Негізгі типтер Бҥтін (int) Символдық (char) Кеңейтілген символдық (wchar_t) Логикалық (bool) Нақты (f loat) Екі еселенген нақты (double) Құрама типтер Жиымдар Тізбелер Функциялар Қҧрылымдар Сілтемелер Нҧсқауыштар Біріктірмелер Кластар 6.1 сурет. C++ тілінің типтері қҧрамы 55

56 6.1 С/С++ тілдеріндегі мәліметтер типтері С тілінде мәліметтердің бірнеше негізгі типтері қолданылады. Олар: char (8 бит) символдық, яғни таңбалық тип, int бҥтін сан типі, float нақты сан типі, яғни жылжымалы нҥктелі сандар, double екі еселенген нақты сан типі. Алғашқы екі тип бүтін сандарды сипаттайтын негізгі (стандартты) тип, ал соңғы екеуі жылжымалы нүктелі типтер болып табылады. Компилятордың бҥтін шамаларды ӛңдеу ҥшін жасайтын кодтары жылжымалы нҥктелі сандарды ӛңдеу кодтарынан басқашалау болады. Тӛмендегі 6.1 кестеде әр тҥрлі типтердің ҧзындықтары кӛрсетілген. Ал С++ тіліне жоғарыдағыларға қосымша тағы екі тип: wchar_t кеңейтілген символдық тип, bool логикалық тип енгізілді. Стандартты сандық типтердің мәндерін бейнелеу диапазонын анықтауда тӛрт тип спецификаторы қолданылады, олар: short (қысқартылған); long (ҧзартылған); signed (таңбалы); unsigned (таңбасыз) Бүтін сан түріндегі мәліметтерді сипаттау Int бүтін сандар типі Int типін стандарт бекітпеген, ол компьютерге немесе компиляторға байланысты ӛзгеріп отырады. 16-разрядты процессорде ол 2 байт, ал 32- разрядтысында 4 байт. Егер int алдында short спецификатор сӛзі тҧрса, онда ол әрқашан 2 байт, ал егер спецификаторы long болса, 4 байт болады. Санға компьютер жадында берілген орынға қарай олардың мәндері ӛзгереді. short int 2 байт, оның диапазоны ; long int 4 байт, оның диапазоны Int типі 16-разрядты компьютер ҥшін short int типімен бірдей, ал 32- разрядты компьютер ҥшін long int типімен бірдей. Signed және unsigned модификаторлары да сандар шамасына әсер етеді, олар: unsigned short int 2 байт, оның диапазоны ; unsigned long int 4 байт, диапазоны Айнымалыларды сипаттау кезінде бҥтін тҧрақтылар костанталар мәндерін де кӛрсетуге болады. Мысалы: int k=0; (бір ғана сан сипатталған және оған мән берілген) int k1,k3=0; (біреуі сипатталған, екіншісіне мән берілген) 56

57 Unsigned типі int, long, short тҥйінді сӛздерімен сипатталатын типтердің модификаторы ретінде қолданылады. Мысалы: unsigned int sum=0; Бҥтін типті шаманың компьютер жадында ішкі бейнеленуі екілік жҥйедегі код тҥріндегі бҥтін сан. Signed спецификаторын пайдаланғанда, санның ең жоғарғы биті санның таңбасын (0 оң сан, 1 теріс сан) кӛрсетеді. Unsigned спецификаторы тек оң сандарды бейнелейді, ӛйткені оның жоғарғы разряды да санның коды болып қарастырылады. Сонымен, int типті мәндердің диапазоны спецификаторға байланысты ӛзгеріп отырады екен. IBM PC тәрізді компьютерлер ҥшін әр тҥрлі спецификаторы бар бҥтін типті шамалардың ӛзгеру диапазоны 2.5 кестеде келтірліген. Алдын ала келісім бойынша барлық бҥтін санды типтер таңбалы болып саналады, яғни signed спецификаторын жазбаса да болады. Программада кездесетін константалардың жазылуына қарай, яғни солардың сыртқы бейнесіне сәйкес белгілі бір тип тағайындалады. Егер ол тип, кейбір жағдайларға байланысты, программалаушыны қанағаттандырмайтын болмаса, онда санның соңына жалғастырылып керекті типтің атына сәйкес бір әріп L, l (long) немесе U, u (unsigned) жазылады. Мысалы, 32L константасының типі long және ол компьютердің жедел жадында 4 байт орын алады. Қажет болса, L және U әріптерін қатарластыра да қолдануға болады, мысалы, 0x22UL немесе 05Lu. Осы атаулардағы short int, long int, signed int және unsigned int типтерін short, long, signed және unsigned деп қысқаша жазуға болады. Бҥтін типтердің мҥмкін болатын ең кіші және ең ҥлкен мәндері компиляторға байланысты болып келеді де, С++ тілінде <limits.h> (<climits>) тақырыптық файлында кӛрсетіледі, нақты типтердің сипаттамалары <float.h> (<cfloat>) файлында және де numeric_limits класының ҥлгілерінде беріледі). 6.1 кесте. С/С++ тілдерінің ішкі құрамындағы мәліметтер типтері мен олардың ені (ұзындығы) Мәлімет типі Ұзындығы (бит байт) Сандар диапазоны bool true және false 1 бит char 8 бит 1 байт unsigned char 8 бит 1 байт short int 16 бит 2 байт unsigned short 16 бит 2 байт int 16 бит 4 байт unsigned [int] 32 бит 4 байт long 32 бит 4 байт unsigned long 32 бит 4 байт float 32 бит 4 байт double 64 бит 8 байт long double 80 бит 10 байт Нақты сандар типтері ҥшін кестеде солардың абсолюттік шамаларының ең кіші (минимал) және ең ҥлкен (максимал) мәндері кӛрсетілген. 57

58 Char типі Char типін аралығындағы таңбасыз бҥтін сандарды сипаттауда қолдануға болады, компьютер жадында бҧларға бір байт орын бӛлінген. Мысалы: char c1; char ck = k ; Бҧл тип мәндері реттелген символдар жиыны болып табылады. Әрбір символға бір бҥтін сан сәйкес келеді, ол символ коды деп аталады. Символдық тип ені 1 байт. Char типі де signed және unsigned спецификаторларымен қолданылады. Signed char типі диапазоны Unsigned char типін қолданғанда, оның мәндер диапазоны болады. Символдарды кодтау ҥшін ASCII (American Standard Code for International Interchange) стандарты негізге алынған. Unsigned char типі 256-символдық ASCII кодтар жиынының кез келген символын бейнелеуге толық жарайды. Char типі осы сандар диапазонынан аспайтын бҥтін сандарды сақтау ҥшін де пайдаланылады. Char символдарының кодтары басқару кодтарына жатады, олар тек енгізу-шығару кезінде ғана қолданылады. Сhar типі символдарды олардың бҥтін сан тҥріндегі кодтары арқылы сақтап, басқа шамалардың кӛрсетілген диапазоны сандарын да кӛрсету ҥшін де қолданыла алады. Кеңейтілген символдық тип (wchar_t) wchar_t типі (тек С++ тілінде) бір байттан асатын символдар жиынын кодтау ҥшін қолданылады, мысалы, Unicode символдары. Бҧл типтің кӛлемі компьютерге байланысты болып келеді де, кӛбінесе short типіне сәйкес келеді. wchar_t типіндегі тіркестік константалар L әрпінен басталып жазылады, мысалы, L"bit". Логикалық тип (bool) Логикалық тип (бҧл да тек С++ тілінде) тҥйінді сӛз болып табылатын true және false мәндерін қабылдайды. Компьютер жадында false 0 (нӛл), басқа кез келген мән true болып табылады. Бҥтін типке тҥрлендіргенде, true 1-ге сәйкес келеді Жылжымалы нүктелі нақты сандар типтері Нақты сандар компьютерде 2 бӛліктен дәреже мен мантиссадан тҧрады. IBM-РС компьютерлерінде float типінің ені 4 байт, оның бір разряды сан таңбасы, 7 разряды дәреже, 24 бит3 мантисса. Егер double типі аты алдында long сӛзі тҧрса, онда оған 10 байт орын беріледі. Программалау практикасында кӛбінесе жылжымалы нҥктелі нақты (аралас) сандар пайдаланылады. Жылжымалы нҥктелі типтер компьютер жадында бҥтін сандардан басқаша тҥрде сақталады. Нақты санның ішкі бейнесі екі бӛліктен мантисса және 58

59 дәрежеден тҧрады. IBM PC тәрізді компьютерлерде float типті шамалар 4 байттан тҧрады, оның ішінде бір екілік разряд мантисса таңбасын бейнелейді де, 8 разряд дәрежені және 23 разряд мантиссаны кӛрсетеді. Мантисса бҧл 1.0-ден артық бірақ 2.0-ден аз сан. Мантиссаның алғашқы разряды әрқашанда 1 болғандықтан, ол сақталмайды. 8 байттан тҧратын double типті шамалар ҥшін, дәреже мен мантиссаға сәйкесінше 11 және 52 разряд бӛлінеді. Мантисса ҧзындығы санның дәлдігін анықтайды, ал дәреже ені оның диапазонын анықтайды. 1.4 кестеден кӛрініп тҧрғандай, float және long int типтерінің ҧзындықтарының байт саны бірдей болғанымен, ішкі бейнелену формасының айырмашылығына қарай, олардың диапазоны әр тҥрлі болып келеді. Жылжымалы нҥктелі константалар, келісім бойынша, double типінде болады. Олардың типін F, f (float) және L, l (long) әріптері арқылы нақты тҥрде кӛрсету мҥмкіндігі бар. Мысалы, 2E+6L константасы long double типінде, ал 1.82f константасы float типінде кӛрсетілген. Әртҥрлі платформаларға ауысатын программалар ҥшін int типінің ені жайлы алдын ала болжам жасауға болмайды. Оны анықтау ҥшін sizeof операциясын пайдалану керек, оның нәтижесі сол типтің байтпен берілген еніне тең болады. Мысалы, MS-DOS операциялық жҥйесі ортасында sizeof (int) нәтижесі 2 болса, ал Windows 9X немесе OS/2 жҥйесіндегі нәтижесі 4 болады. ANSI стандартында негізгі типтер мәндерінің диапазоны берілмейді, тек солардың кӛлемдерінің ара қатынасы ғана анықталады: sizeof(float) sizeof(double) sizeof(long double) sizeof(char) sizeof(short) sizeof(int) sizeof(long) Sizeof стандартты операторын қолдану мысалы: printf("double типіндегі мәліметтер ені %d байт\n", sizeof((double)); Мәліметтерді бейнелеу диапазоны мен дәлдігі әр тҥрлі болып келетін бҥтін және нақты типтердің осындай тҥрлері программалаушыға кез келген аппаратураның мҥмкіндіктерін тиімді тҥрде пайдалануға мҥмкіндік береді, ӛйткені есептеу жылдамдығы мен компьютер жадының пайдаланылатын кӛлемі типке тәуелді болып келеді. Бірақ компьютердің бір тҥріне икемделген программа басқа платформада қолдануға ыңғайсыз болуы ықтимал, сондықтан жалпы программаларды мәлімет типтеріне тәуелді етіп қҧруға тырыспау керек. void типі Негізгі типке жоғарыда кӛрсетілгендерден басқа void типі де жатады, бірақ бҧл типтің мәндер жиыны бос болып келеді. Олар мән қайтармайтын функцияларды анықтау ҥшін қолданылады, функцияның аргументтерінің жоқ екенін білдіреді, нҧсқауыштардың негізгі типі ретінде және типтерді келтіру операцияларында да пайдаланылады. 59

60 6.1.3 Символдық тіркестер (жолдар, қатарлар) С тілінде символдық тіркестерді сипаттау ҥшін арнайы тип жоқ, олар кӛбінесе char типтегі элементтерден тҧратын жиым (массив) ретінде қарастырылады. Ӛте ҧзын тіркестік константаларды бірнеше жолға бӛліп жазуға болады, мҧндайда тасымалдау таңбасы ретінде кері қиғаш сызық қолданылады. Мысалы, мынадай сӛз тіркесі: "Кӛзің қайда кӛшеден мені іздеген,\ сӛзің қайда екеуміз егіз деген,\ терезеңнің алдына келіп тұрмын, \ кептердей қысты күні жем іздеген" тӛмендегі жолдармен бірдей болып саналады: "Кӛзің қайда кӛшеден мені іздеген,сӛзің қайда екеуміз егіз деген,терезеңнің алдына келіп тұрмын, кептердей қысты күні жем іздеген" Жолдық немесе тіркестік символдар компьютер жадында кӛршілес ҧяшықтарда сақталады да, олардың соңында \0 символы тҧрады. Әрбір тіркестік литерал соңына компилятор \0 тізбегімен кӛрсетілетін нөлдік символ қосып жазады, сондықтан тіркес ҧзындығы сӛздегі символдар санынан бірге артық болады. Символдар тіркесінің ҧзындығын анықтау ҥшін strlen() функциясы қолданылады.сонымен, бос тіркестің ӛзі компьютер жадынан 1 байт орын алады екен. Бір символдан тҧратын сӛз тіркесінен, мысалы, "А", бір таңбадан тҧратын символдық константаның 'А' айырмашылығын білу керек. Бос символдық константа болмайды. #define символдарды немесе солардан тҧратын константаларды анықтау мақсатында қолданылады. Мысалы: #define NULL /0 #define VNAME "КазНУ" 6.2 Printf және scanf функциялары С тілінде сыртқы ортамен мәліметтер алмасу <stdio.h> енгізу-шығару функциялары кітапханасын пайдалану арқылы орындалады. Ол тақырып файлы ретінде былай жазылады: #include <stdio.h> printf() функциясы мәліметтерді экранға шығару ҥшін қолданылады. Оның жалпы жазылу тҥрі: printf(<формат тіркесі>,<аргументтер тізімі>); (<формат тіркесі> формат спецификаторларынан, бос орыннан және әр тҥрлі символдардан тҧрады. Ол қостырнақшамен (") шектеліп, аргументтердің қалай бейнеленетінін кӛрсетіп тҧрады, экранға (баспаға) шығару алдында барлық аргументтер формат спецификациясына сәйкес тҥрлендіріледі, спецификация % символымен басталады және мәліметтер типін, оларды тҥрлендіру тәсілін кӛрсететін бір әріп спецификация коды жазылады. Объектілер ретінде айнымалылар, константалар, ӛрнектер қолданылуы мҥмкін. Мысалы: printf (" Пи санының мәні = %f\n", pi); Бҧл жолдың нәтижесі : Пи санының мәні =

61 Формат соңында тҧрған \n тіркесі сан шығарылған соң, курсордың келесі жолға кӛшетінін білдіреді. Формат тіркесінде мыналар болады: 1) мәтін ретінде шығарылатын символдар тіркесі; 2) тҥрлендіру спецификациялары; 3) басқару символдары. Әрбір аргументке ӛз спецификациясы сәйкес келуі тиіс, олар: %d бҥтін ондық сан шығарылуы тиіс, %i бҥтін ондық сан шығарылуы тиіс, %f жылжымалы нҥктелі нақты ондық сан ([-]dddd.dddd ) жазылып шығады, %e жылжымалы нҥктелі экспоненциалды сан ([-]d.dddde dd) шығарылады, %E жоғарыдағы сияқты, тек е орнына Е ([-]d.dddde dd) шығарылады, %c бір символ шығарылуы тиіс, %s символдар тіркесі (қатары) шығарылуы тиіс, %g нақты сан, сан ҧзындығына қарай %e немесе %f қолданыла алады, %u таңбасыз ондық бҥтін сан жазылып шығады, %o таңбасыз бҥтін сегіздік сан шығады, %x таңбасыз бҥтін он алтылық сан шығады. \n келесі жаңа жолға кӛшуді атқаратын басқару символы. Мысалы: printf("%d%f", x, y); экранға бір бҥтін (%d) х және бір нақты сан (%f) у шығару функциясы. Форматтарда санның ені де кӛрсетілуі мҥмкін. Ол былай жазылады: %9i бҥтін сан ені 9 цифрдан тҧрады, сан ені аз болса, оның сол жағында бос орындар орналасады. %9.3f нақты сан ені 9 цифрдан тҧрады, оның 3 таңбасы бӛлшекке беріледі, сан ені аз болса, оның сол жағында бос орындар орналасады. Әрбір спецификация % символынан басталып, тҥрлендіру символымен аяқталады. Ол екеуінің ортасында мыналар тҧруы мҥмкін: - минус таңбасы, аргумент мәні сол жақ шетке ығыстырылып жазылады. - цифрлар, бҥтін санның жалпы орналасу енін анықтайды. Сан осы енге немесе одан артық болып шығарылады. Егер аргумент ені кӛрсетілген еннен аз болса, онда ол бос орындармен толтырылып жазылады. - нҥктеге дейін санның жалпы ені, нҥктеден соң бӛлшек цифрлар ені кӛрсетіледі. - L модификаторы, сәйкес аргумент мәні int емес long екенін білдіреді. Scanf() пернелерден (консольдан) мәлімет енгізу функциясы жоғарыда қарастырылған тҥрлендіру спецификациясының кӛбін пайдаланады. Жазылу ережесі: scanf (<формат тіркесі>,<аргументтер тізімі>); Аргументтер ретінде адрес нҧсқауыштары айнымалылар адрестері пайдаланылады. Мысалы: scanf("%d%f", &x,&y); мҧндағы &x,&y х және у айнымалыларының компьютер жадындағы адрестері. Бҧл функция пернелерден бос орын немесе Enter пернесін басу арқылы бір бҥтін 61

62 және бір нақты сан енгізуді талап етеді. Әдетте scanf функциясы алдына қандай мән енгізілетіні жайлы мәтін шығарылады. Мысалы: printf("х, у енгізіңіз:"); scanf("%f%f",&x,&y); х және у мәндері 3,5 пен -2,5 болуы тиіс болса, экрандағы кӛрініс мынадай болады: х, у енгізіңіз: мҧндағы Enter пернесін басу белгісі. Scanf() функциясы форматтарының printf() функциясы форматынан кейбір айырмашылықтарын атап ӛтейік: 1) %е және %f спецификациялары енгізу кезінде бірдей болып табылады; 2) short типті бҥтін санды енгізу кезінде %h спецификациясы қолданылады. ЕСКЕРТУ. Айнымалы адресін беру үшін адрестерді жазғанда, айнымалы адресін анықтау үшін & символы қолданылады. Ал тіркестік (жолдық) айнымалыны енгізгенде, & символы жазылмайды. Енді С тілінде енгізу/шығару функцияларын пайдаланатын бір мысал келтірейік. #include <stdio.h> main() { int i; clrscr(); printf("\n Бүтін сан енгізіңіз:"); scanf("%d",&i); printf("\nсіз %d санын енгіздіңіз.",i); Бҧл программаның алғашқы жолы препроцессор директивасы, ол енгізу/ шығару операцияларын орындауды қамтамасыз етеді. main() функциясының бірінші жолы бҥтін типтегі i айнымалысын сипаттап тҧр, одан кейін тҧрған printf() функциясы жаңа жолға кӛшіп (\n) экранға Бүтін сан енгізіңіз: деген сӛздерді шығарады. scanf() функциясы пернеден енгізілген санды і айнымалысына меншіктейді (& таңбасы адрес алу операциясын кӛрсетеді). Келесі жол кӛрсетілген сӛз тіркесін ондағы спецификаторды i санының мәніне алмастыра отырып экранға шығарады. Программа нәтижесі экранда мынадай тҥрде бейнеленеді: Бүтін сан енгізіңіз: 1256 Сіз 1256 санын енгіздіңіз. Енді енгізілген санның кӛрсетілген дәрежесін есептейтін программа қҧрайық. /* Санды дәрежелеу */ #include <conio.h> #include <stdio.h> #include <math.h> main() { float x,y,s; clrscr(); printf("\n х-ті және оның дәрежесін - у енгізіңіз:"); scanf("%f%f",&x,&y); 62

63 s=pow(x,y); printf("\nнәтижесі s=%f",s); Бҧл программаны орындаудағы экран бейнесі тӛмендегідей болады: х-ті және оның дәрежесін - у енгізіңіз: Нәтижесі s= Сонымен, scanf() функциясы символдарды, сандарды, сӛз тіркестерін енгізу ҥшін қолданылады, енгізілетін сандар, сӛздер бір-бірінен бос орын, табуляция символы немесе Enter пернесін басу арқылы ажыратылады екен. 6.3 Cin және cout функциялары С++ тілі стиліндегі негізгі енгізу/шығару функциялары оның кластары кітапханасын пайдаланады. Оны тҥсіндіру ҥшін бір программа мысалын қарастырайық. #include <iostream.h> // С++ тіліндегі программа int main() { int i; cout << "Бүтін сан енгізіңіз:\n"; cin >> i; cout << "Сіз " << i << "санын енгіздіңіз, рахмет!"; return 0; Мҧндағы <iostream.h> енгізу/шығару кітапханасының стандартты тақырып файлы. Ол программадағы мәліметтер ағымы жайлы ақпарат береді, iostream сӛзі input/output stream cӛздерінің қысқаша жазылуынан шыққан сӛз. Бҧл файлда мәліметті пернетақтадан енгізуге арналған стандартты cin ағымы және экранға мәлімет шығаратын cout ағымы анықталып, ағымға мәлімет беру << және ағымнан мәлімет оқу >> операциялары арқылы орындалады. cin ағылшынша «С» және «input» сӛздерінен, ал cout «С» және «output» сӛздерінен қҧралған. cout << "Бүтін сан енгізіңіз:\n"; жолы экранға қос тырнақшадағы сӛз тіркесін шығарып, курсорды келесі жолға кӛшіреді. cin >> i; жолы пернелерден енгізілген бҥтін санды i айнымалысына меншіктейді. cout << "Сіз " << i << "санын енгіздіңіз, рахмет!"; жолы қос тырнақшадағы тіркестерді ӛзгеріссіз, ал i айнымалысы орнына оның енгізілген сандық мәнін экранға шығарып береді. С тілінің енгізу/шығару функцияларына қарағанда, С++ тілінің ағымдары әртҥрлі типтермен жеңіл, әрі жылдам жҧмыс істеуді қамтамасыз ете алады деп саналады. Ағымнан мәлімет оқу оны ағымнан алу деп, ал ағымға мәлімет шығару оларды ағымға қосу деп айтылады. С++ тілінде бҥтін сандармен арифметикалық амалдар орындайтын тағы бір 63

64 мысал қарастырайық. /* ia және ib бүтін сандарын қосу, азайту, кӛбейту және бӛлу операцияларын орындау */ #include <iostream.h> void main() { // мәліметтерді сипаттау int ia, ib, iplus, iminus; float del, mult; // сандық мәндерді енгізу cout << "Input ia, ib: \n"; //"ia, ib енгіз:" сӛзін шығару cin >> ia >> ib; // енгізілген мәндерді ia, ib-ға меншіктеу // есептеулер iplus = ia + ib; iminus = ia - ib; mult = ia * ib; del = ia / ib; // нәтижелерді шығару cout << "plus = " << iplus << "\n"; cout << "minus = "<< iminus <<"\n"; cout << "del = " << del <<"\n"; cout << "mult = " << mult <<"\n"; Программа нәтижесі: Input ia, ib: 4 5 plus = 9 minus = -1 del = 0 mult = 20 Пернетақтадан ia мен ib мәндерін енгізу кезінде арасында бос орын болуы тиіс. Мысалда 4 цифрын енгізіп, бос орынды басып, 5 цифрын теріп, Enter пернесін басу қажет. Бӛлу кезінде шығатын нәтижеге назар аударыңдар, ол дҧрыс болмайды. Бҧл бҥтін санды бҥтін санға бӛлгендегі бӛлінді де бҥтін сан болатындығынан шығып отыр. Мҧндайда дҧрыс нәтиже алу ҥшін, ia, немесе ib айнымалыларының бірінің типін float деп кӛрсету керек. Бақылау сұрақтары 1. С/С++ тілдеріндегі мәліметтер типі нелерді анықтайды? 2. С тілінің мәліметтері типтері, С++ тілінің типтері. 3. Мәліметтері типтерін анықтауда қандай спецификаторлар қолданылады? 4. Бүтін сан түріндегі типтер түрлері, олардың ұзындықтары. 5. char және wchar_t типтерінің ерекшеліктері. 6. Жылжымалы нүктелі нақты сандар типтері. 7. sizeof ( ) операциясы қолданылуы. 8. Символдық тіркестерді сипаттау және беру. 9.Cөз тіркестеріндегі нөлдік символдың атқаратын қызметі. 64

65 10. С тіліндегі мәліметтерді енгізу және шығару функциялары. Олардың форматтары, жазылу ерекшеліктері. 11.С++ тіліндегі мәліметтерді енгізу және шығару функциялары. Олардың форматтары, жазылу ерекшеліктері. Тапсырмалар 1. Келесі константалар қандай типтерде бейнеленген: 45L, 08UL, -0X12Lu, 1245, 67.1, , , 12.56e-02, 2E+3L, 2.1f 2. Тӛмендегі ӛрнектер мәні нешеге тең болады: а) 1/3; 1.0/3; 1/3.0 ; ә) int a=5, k=10, y; y=a/k; y=? 3. «Абай Қҧнанбаев», «Мҧқағали Мақатаев», «Қасым Аманжолов», «Баубек Бҧлқышев» сӛздерін бір жолға, екі жолға, ҥш жолға және тӛрт жолға шығару керек. 4. Тӛмендегі идентификаторлардың қайсысы дҧрыс, қайсысы қате жазылған: Zat, kun, ibas, A_arpi, лфк_12, adet_ғҧрып, dt15$tr, wiwa_1987_wini, gamma_ ондық санын сегіздік және оналтылық жҥйеде экранға шығарыңдар. 6. printf (" Пи санының мәні = %4.2f\n", pi); жолы экранға қандай мәлімет шығарады? 7. scanf("%d%f", &a,&b); жолы қандай сандар енгізуді талап етеді? 8. cout << "Бүтін сан енгізіңіз: "; cin >> k; cout << k << "тақ сан ба? "; жолдары қандай нәтиже береді? 65

66 7 C/C++ ТІЛДЕРІНДЕГІ ҚОЛДАНУШЫ ФУНКЦИЯЛАРЫ Кез келген C/C++ тілінің программасы бірнеше функциялардан қҧралады және олардың біреуі міндетті тҥрде main() болады. Программаны орындау осы функцияның бірінші операторынан басталады. Кӛбінесе функция белгілі бір мәнді есептеу ҥшін қолданылады, сондықтан функция аты алдында оның типі кӛрсетіледі. Функция жайлы тӛменде айтылады, әзірше ең керекті деген мағлҧматтарды ғана қарастырамыз: егер функция мән қайтармайтын болса, онда оның типі void болады; функция тҧлғасы (орындалатын ішкі операторлары) бір блок болып табылады, сондықтан ол жҥйелі (фигуралық) жақшаға алынып жазылады; функциялар бірінің ішіне бірі кіріп қабаттаса орналаспайды; әрбір оператор нҥктелі ҥтірмен аяқталады (қҧрама оператордан басқалары). Енді С тілі стиліндегі енгізу/шығару ішкі функцияларын ғана пайдаланатын программа мысалын қарастырайық. 7.1 мысал. /* Шеңбер ҧзындығын табу */ #include <stdio.h> /* енгізу/шығару директивасы */ int main() /* басты функцияны қолдану */ { int radius; /* бҥтін айнымалыны сипаттау */ float length; /* нақты айнымалыны сипаттау */ printf("\n Радиус мәнін енгізіңіз: \n"); scanf("%d",&radius); length =2* *radius; printf("радиусы - %d\n шеңбер ұзындығы -%f", radius,length); Программада тҥсініктемелер беру ҥшін /* және */ таңбалары қолданылған, олардың ішіне қазақша, орысша, ағылшынша сӛз тіркестерін жазуға болады. Басты функция main() аргументсіз жазылған, сол себепті жақша ішінде ешнәрсе кӛрсетілмеген. Ал функция тҧлғасы операторлардан (немесе басқа функциялардан) тҧруы тиіс. Int тҥйінді сӛзі radius айнымалысының бҥтін мән қабылдайтынын, float тҥйінді сӛзі lenth айнымалысының нақты мән қабылдайтынын сипаттап тҧр. Келесі жол радиус мәнін енгізуді талап ететін сӛз тіркестерін экранға шығарады, мҧндағы \n таңбалары сӛз тіркесі алдында және одан кейін курсор бір жол тӛмен тҥсетінін кӛрсетеді. Scanf функциясы шеңбер радиусы radius мәнін пернелерден қабылдайды, оның алғашқы аргументі %d енгізілетін ондық бҥтін сан екенін, ал екінші аргументі енгізілетін сан меншіктелетін айнымалы аты болып табылады. Оның алдындағы & (амперсанд) символы scanf() функциясының дҧрыс жҧмыс істеуі ҥшін керек, ол туралы кейін айтылады. Сонан кейін шеңбер ҧзындығы есептеледі де, ол нәтиже ретінде printf() функциясы арқылы экранға шығарылады. Функция параметрі ретінде тҧрған %f 66

67 формат спецификаторы (анықтауышы) length айнымалысының типі float екенін кӛрсетеді. 7.1 Қолданушы функциясын пайдалану Қолданушы (тҧтынушы) функциясын пайдалану ҥшін, ӛзіміз main типтес шағын функция жазамыз. Ол бҧрынғыша шеңбер ҧзындығын анықтау ҥшін қолданылатын болсын. 7.2 мысал. /* Шеңбер ҧзындығын табатын функцияны C тілінде пайдалану */ #include <stdio.h> /* енгізу/шығару директивасы */ void lenth(float radius); /* lenth() функциясын, яғни оның прототипін хабарлау */ main() /* басты функцияны қолдану */ { float radius; /* нақты айнымалыны сипаттау */ radius = 5.5; lenth(radius); /* lenth функциясын шақыру */ printf("\n Радиус мәнін енгізіңіз: "); scanf("%f",&radius); lenth(radius); void lenth(float r) /* lenth() функциясын анықтау */ { printf("радиусы - %f\n шеңбер ұзындығы -%f", r,2* *r); Бҧл программада екі функция бар: main() және lenth(radius). Енгізу/шығару директивасынан кейінгі жолда lenth()функциясы хабарланған, С тілінің ережесі бойынша әрбір айнымалы, функция оны алғаш қолданғанға дейін хабарлануы тиіс. Нҥктелі ҥтірмен аяқталып отырған бҧл функция тақырыбы функция прототипі деп аталады да, ол функцияны хабарлау (жариялау) болып табылады. Main() функциясы аяқталып жҥйелі жақша жабылған соң, lenth(..)функциясы толық сипатталып анықталуы тиіс. lenth(..)функциясы анықтау оның атын және жақша ішінде типі кӛрсетілген аргументін жазудан тҧрады, аргументтер бірнешеу болуы да мҥмкін. Функция тақырыбында, алғашқы жолында кӛрсетілген аргументтер формальды параметрлер деп аталады. Функция тақырыбынан соң, жҥйелі жақшаларға алынған оның ішкі жҧмыс операторлары орналасады, мҧнда ол бір ғана оператордан қҧралған. Бҧл lenth() функциясы аргументінің нақты мәні main()функциясындағы оны шақыру кезінде анықталады, оны нақты параметр деп атайды. Функцияны шақыру кезіндегі нақты параметр типі оның бастапқы жариялануы кезінде берілген формальды параметрі типімен бірдей болуы тиіс. Функцияны жариялау кезінде кӛрсетілген void тҥйінді сӛзі функцияның ешқандай да мән қайтармайтындығын білдіреді. Кӛбінесе осындай қолданушы 67

68 анықтаған функция оны шақырған main()функциясына мән қайтарып беруі керек. Қайтарылатын мән return операторы арқылы кӛрсетіледі. return операторы. Функциядан кері оралу операторы return функция жҧмысын аяқтап, басқаруды оны шақыру нҥктесіне береді. Оператордың жазылуы: return [ ӛрнек ]; Егер ӛрнек типі void тҥрінде сипатталса, ӛрнек жазылмауы тиіс. C тілінің ANSI стандарты және С++ тілі қолданушы функциясының прототипін жариялауға қатаң талаптар қояды. Функция прототипінде оның типі, аты және формальды параметрлері саны мен типтері толық кӛрсетіледі, параметрлердің аттарын жазбауға да болады. Сонымен, қолданушы функциясының прототипі былай кӛрсетіледі: float func(int n, float f, long double g); немесе float func(int, float, long double); Енді осы айтылған тҧжырымдарды қолдана отырып, алдыңғы мысалдың тағы бір нҧсқасын келтірейік. 7.3 мысал. /* Шеңбер ҧзындығын табатын функцияны пайдалану, 2 нҧсқа */ #include <stdio.h> /* енгiзу/шығару директивасы, C тілінде */ float length(float radius); /* lenth() функциясын, яғни оның прототипiн хабарлау */ main() /* басты функцияны қолдану */ { float radius; /* нақты айнымалыны сипаттау */ radius = 5.5; printf("радиусы %f шеңбер ұзындығы %f\n", radius,length(radius)); /* lenth функциясын шақыру */ printf("радиус енгізіңіз: "); scanf("%f",&radius); printf("радиусы %f шеңбер ұзындығы %f\n", radius,length(radius)); /* length функциясын шақыру */ float length(float r) /* length функциясын анықтау */ { return 2* *r; Бҧл мысалда length() функциясы return операторы арқылы 2* *r мәнін қайтарады. Сонымен, функцияны қарапайым анықтау форматы мынадай болады: типі аты ([ параметрлері ]) { функцияның ішкі орындалатын операторлары 68

69 Енді программалау оқулықтарында жиі кездесетін «Сәлем, әлем!» сӛзін ағылшын тілінде экранға шығаруды, С++ тілінің қолданушы функциясы арқылы орындайық. 7.4 мысал. #include <iostream.h> void hello() { cout << "Hello, world!\n"; void main() { hello(); Программаны орындау нәтижесі: Hello, world! Мҧнда қолданушы функциясы толығынан негізгі main() функциясынан бҧрын анықталған, сондықтан функция прототипін жазу қажет емес, оның орнында функцияның анықталуы тҧр. Бір функция орындалуы барысында келесі басқа функцияны шақыруы мҥмкін. Мысалы, келесі программада екі функция қолданылады. Алдымен main функциясы hello_3 функциясын шақырады, ал ол функция ішінде hello функциясы цикл операторы арқылы ҥш қайтара шақырылады. Қолданушы функцияларын жазғанда, онда айнымалыларды пайдалану қажеттілігі туындайды. Айнымалылар main функциясындағы тәрізді функцияда да жариялануы, яғни алдын ала сипатталуы қажет. 7.5 мысал. // C++ тілінде жазылған программа #include <iostream.h> void hello() { cout << "Hello, world! \n"); void hello_3() { int n; for (n = 1; n <= 3; n++) hello(); void main() { hello_3(); Программаны орындау нәтижесі: Hello, world! Hello, world! Hello, world! Келесі бӛлімдерде осы С және С++ тілдерінің мҥмкіндіктерінің екеуінен де 69

70 мысалдар келтіріледі, бірақ бір программада бҧл екеуін араластырмай, жекежеке қарастыру ҧсынылады. 7.2 Айнымалылар мен ӛрнектерді пайдалану ерекшеліктері Айнымалылар деп мәліметтердің белгілі бір типін сақтайтын компьютер жадының ат қойылған аймағын айтуға болады. Қолданылудан бҧрын әрбір айнымалы сипатталуы тиіс. Бҥтін а айнымалысы мен нақты х айнымалысын сипаттау мысалы: int a; float х; Айнымалыларды сипаттау операторының жалпы жазылуы: [жады класы] [const] типі аты [инициализатор]; Осы оператордың қҧрамдық бӛліктерінің берілу ережелерін қарастырайық. Міндетті тҥрде жазылмайтын жады класы мынадай мәндердің auto, extern, static және register бірін қабылдайды. Олар жайлы тӛменде айтылады. Модификатор болып табылатын const тҥйінді сӛзі айнымалының мәні ӛзгертілмейтінін кӛрсетеді. Мҧндай айнымалыны атаулы константа немесе жай константа деп атайды. Сипаттау кезінде айнымалыға бірден бастапқы мән беруге болады, оны инициалдау деп атайды. Инициализатор мәнін екі тҥрде жазуға болады меншіктеу таңбасы арқылы: = мәні немесе жай жақша ішінде: ( мәні ) Константалар хабарлау кезінде инициалдануы тиіс. Бір операторда типтері бірдей болып келген бірнеше айнымалыларды ҥтірлер арқылы бӛле отырып сипаттауға болады. Мысалдар: short int a = 1; // бүтін а айнымалысы const char С = 'С'; // символдық С константасы char s, sf = 'f'; // тек sf айнымалысы инициалданған char t (54); // t-ға 54-ті меншіктеу (инициалдау) float с = 0.22,x(3),sum; // жариялау, инициалдау Егер инициалдау кезінде меншіктелген мәннің типі айнымалы типіне сәйкес келмесе, онда белгілі бір ережелер бойынша типті түрлендіру операциясы орындалады. Айнымалы сипаттамасында оның типі мен жады класынан басқа келісім бойынша айнымалының әрекет ету аймағы беріледі. Жады класы мен әрекет ету аймағы тек айнымалы сипаттамасына ғана байланысты емес, ол программадағы сипатталудың жазылған орнына да байланысты болады. Идентификатордың әрекет ету аймағы бҧл оның ӛзімен байланысқан жады аймағымен қатынас қҧру ҥшін пайдалануға болатын программа бӛлігі. Әрекет ету аймағына байланысты айнымалы локальдік (жергілікті) немесе глобальдік (ауқымды) болуы мҥмкін. 70

71 Егер айнымалы блок ішінде (блок жҥйелі жақшалармен шектелген бӛлік) анықталған болса, онда ол локальдік болып табылады, оның әрекет ету аймағы сипатталу нҥктесінен бастап, осы блок соңына дейін, бҧған ішкі блоктар да кіреді. Егер айнымалы кез келген блоктардан тыс, солардың сыртында анықталған болса, онда ол глобальдік болып саналады да, оның әрекет ету аймағы осы файлдағы сипатталу нҥктесінен оның аяғына дейін болып есептеледі. Айнымалының пайдаланылу мерзімі тҧрақты (программаның орындалуы кезеңінде) және уақытша (блоктың орындалуыкезеңінде) болуы мҥмкін. Идентификатордың кӛріну аймағы деп идентификатормен байланысты жады аймағымен қарапайым қатынас қҧра алатын программа бӛлігін айтады. Кӛбінесе кӛріну аймағы әрекет ету аймағымен бірдей болады, тек ішкі блокта сыртқы аймақтағы айнымалымен аттас болып келетін айнымалы сипатталған кезде ғана айырмашылық туындайды. Мҧндайда сыртқы айнымалының әрекет ету аймағы блоктарға да қатысты болғанымен, ол ішкі блокта кӛрінбейді. Дегенмен, сыртқы айнымалы глобальдік болатын болса, кӛріну аймағына қатынасу операциясын (::) қолдана отырып, оны пайдалануға болады. Жады класы программалық объектінің (немесе айнымалының) пайдаланылу (ӛмірлік) мерзімін және кӛріну аймағын анықтайды. Егер жады класы анық кӛрсетілмесе, онда компилятор айнымалының хабарлану мәтініне қарай оны ӛзі анықтайды. Жады класын тағайындау ҥшін келесі спецификаторлар қолданылады: auto автоматтық айнымалы. Бҧл айнымалы ҥшін жады стектен бӛлінеді және қажеттілігіне қарай оның сипатталуы кӛрсетілген оператор орындалған сайын инициалданады. Осы айнымалы сипатталған блоктан шыққан кезде оған бӛлінген жады босатылады. Оның қолданылу мерзімі сипатталуынан бастап, блок соңына дейін жалғасады. Глобальдік айнымалыларда бҧл спецификатор қолданылмайды, ал локальдік айнымалылар ҥшін ол ҥнсіз келісім бойынша орнатылады, сондықтан оны жазбауға болады, яғни айнымалы ҥшін жады класы нақты кӛрсетілмеген жағдайда, ол auto класына жатқызылады. extern сипатталатын айнымалының программаның басқа жерінде (басқа файлда немесе мәтіннің кейінгі жағында) анықталғанын білдіреді. Бҧл спецификатор осы айнымалы сипатталған 1 программаның барлық модульдерінен оған қол жеткізуге болатын мҥмкіндік жасауда қолданылады. static статикалық айнымалы. Қолданылу мерзімі тҧрақты. Айнымалы анықталатын операторды алғашқы рет орындаған кезде бір рет инициалданады. Статикалық айнымалы оны сипаттайтын оператордың тҧрған орнына байланысты глобальдік немесе локальдік болуы мҥмкін. Глобальдік статикалық айнымалы тек ӛздері сипатталған модульде ғана кӛрінеді. register регистрлік айнымалы, auto спецификаторы секілді, бірақ мҧнда жады мҥмкіндігінше процессор регистрлерінен бӛлінеді. Егер 1 Егер айнымалы белгілі бір операторда инициалданатын болса, онда мҧндағы extern спецификаторы есепке алынбайды 71

72 компилятордың ондай мҥмкіндігі болмаса, онда регистрлік айнымалы auto айнымалысы сияқты ӛңделеді. int a; // 1 а глобальдік айнымалы int main() { int b; // 2 b локальдік айнымалы extern int x; // 3 х айнымалысы басқа жерде анықталған static int с; // 4 с локальдік статикалық айнымалы а = 1; // 5 глобальдік айнымалыға меншіктеу int а; // 6 а локальдік айнымалы а = 2; // 7 локальдік айнымалыға меншіктеу ::а = 3; // 8 глобальдік айнымалыға меншіктеу return 0; int x = 4; // 9 х-ті анықтау және инициалдау Бҧл мысалда а глобальдік айнымалысы блоктардан тыс жарияланған. Оған жады программа жҧмысы басында мәліметтер сегментінде бӛлінеді. Кӛріну аймағы 6-8 жолдардан басқа программаның толық аймағы, ӛйткені 6-жолда глобальдік айнымалымен аттас локальдік айнымалы анықталған. Мҧндағы b және с локальдік айнымалылар, олардың кӛріну аймағы блок, бірақ пайдаланылу кезеңдері әртҥрлі: b ҥшін жады блокқа кірерде стекте бӛлінеді де, одан шығарда жады босатылады. Ал с айнымалысы мәліметтер сегментінде орналасады да, оны программа жҧмыс істеп тҧрғанда пайдалана беруге болады. Егер айнымалыға анықталу кезінде нақты мән берілмесе, компилятор глобальдік және статикалық айынымалыларға типтеріне сәйкес нӛлдік мән меншіктейді, ал автоматтық айнымалыларға мән тағайындалмайды. Айнымалы аты ӛз әрекет ету аймағында бірегей болуы тиіс (мысалы, бір блокта аттары бірдей екі айнымалы болмауы керек). Айнымалы аттарын мағынасына қарай беруге тырысу қажет. Оның аты сол шаманың не екенін, не істейтінін кӛрсетіп, жеңіл оқылатындай дәрежеде болуы қажет. Атауларда бір-біріне ҧқсас шатастырып алатындай символдар араласпағаны дҧрыс, мысалы, 1 (бір), l (кіші L) немесе I (i бас әрпі). Жаңа атау табуға жалықпай ізденген абзал. Атаудың бӛліктерін бір-бірінен айыру ҥшін астын сызу таңбасын пайдалануға болады. Кеңінен қолданылатын, кӛріну аймағы ауқымды айнымалыларға ҧзынырақ ат (алғашқы әрпі типті кӛрсететін сивол) беріп, бірнеше жолдарда ғана пайдаланылатын айнымалыларға бір символдан тҧратын ат беріп, оларға сипатталу кезінде тҥсініктемелер берген дҧрыс. Айнымалы сипаттамасы хабарлау немесе анықтау тҥрінде болуы мҥмкін. Хабарлау компиляторға айнымалы типі мен жады класын кӛрсетеді де, анықтау, оған қоса, компиляторға айнымалы типіне сәйкес жады бӛлінетінін білдіреді. C++ тілінде кӛптеген хабарлаулар, сонымен қатар, олардың анықтаулары да болып саналады. Жоғарыдағы мысалда 3 сипаттама берілген, олар хабарлау ғана, анықтау емес. 72

73 Айнымалы бірнеше рет жариялануы мҥмкін, бірақ ол программаның бір-ақ жерінде анықталады, ӛйткені хабарлау айнымалының қасиеттерін сипаттайды, ал анықтау оны нақты жады аймағымен байланыстырады. Ӛрнектер. Кез келген программада есептеу жҧмыстары орындалады. Мәндерді есептеу ҥшін операндтардан, операция таңбаларынан және жақшалардан тҧратын өрнектер қажет болады. Операндтар есептеуге керекті мәліметтерді береді. Операциялар орындалуға тиіс амалдарды анықтайды. Ӛз кезегінде, әрбір операнд ӛрнек немесе соның бір тҥрі, мысалы, константа немесе айнымалы болып табылады. Операциялар приоритеттеріне (математикалық реттіліктеріне қарай) сәйкес орындалады. Олардың орындалу тәртібін ӛзгерту ҥшін жай жақшалар пайдаланылады. Сонымен, константалардан, айнымалылардан, функциялардан және операциялар таңбаларынан өрнектер қҧралады. Әрбір өрнек арифметикалық операциялар таңбаларымен қажетті жақшалар көмегімен біріктірілген бірнеше операндтардан (сан, айнымалы, константа) тұрады. Математикадағы формулалар, алгебрадағы кӛпмҥшеліктер программалау тілінде тек осы ӛрнек ҧғымы арқылы беріледі. Егер ӛрнек мәні бҥтін немесе нақты сан болатын болса, ол арифметикалық ӛрнек болып саналады. Арифметикалық ӛрнектерде мынадай операциялар: + - * / % болады. Жалпы ӛрнектер бір жол бойына жазылады және олардағы операция реттілігі жақшалармен анықталады. Ӛрнектерді жазу мысалдары: і = і+1; k = 5.35; x1= (-b+sqrt(b*b-4*a*c))/(2*a); y = sqrt(sin(x)+1); c = 2*pі*r; r = 19.36; Енді ӛрнектер қҧрамы мен соларды жазу ережелерін қарастырамыз. Кӛптеген арифметикалық операциялар жай алгебралық ӛрнектердегі амалдар приоритетін (реттілігін, басымдылығын) сақтай отырып жҧмыс істейді, алдымен кӛбейту, бӛлу және қалдық табу, соғынан қосу мен азайту орындалады. Егер ӛрнекте реттілігі бірдей бірнеше амал қатар тҧрса, олар солдан оңға қарай орындалады. Мысалы, мына ӛрнекте i = k + d * i / m % n - 1; арифметикалық амалдар мынадай ретпен атқарылады: кӛбейту, бӛлу, қалдық табу, қосу және азайту. Бҥтін сандарды бӛлу операциясы: 7/4. Жауабы 1 болады. Нақты жауабын алу ҥшін 7/4.0 немесе 7.0/4, әйтпесе (float)7/4 деп жазу керек. Бӛлгендегі қалдықты табу операциясы % болып белгіленеді. Мысалы: 13%5 нәтижесі 3. % операциясын аралас, яғни нақты сандармен орындау синтаксистік қате береді. Арттыру, кеміту операциялары. С/С++ тілдерінде инкремент ++ (1-ге арттыру) және декремент -- (1-ге кеміту) операциялары бар. i++ бҧл постфикстік соңынан жазу формасы; ал мынау ++j префикстік форма (алдынан жазу. 3.1 кестеде осы инкремент пен декремент амалдарының орындалу ережелері кӛрсетілген. 73

74 Олардың бір-бірінен айырмашылығын тӛмендегі мысалдан кӛруге болады: k = а + (i++) - d * (--j); мҧнда амалдар мынадай реттілікпен орындалады: --j; k = a + i d * j; i = i++; 7.1 кесте. Инкремент пен декремент амалдарын пайдалану Операция Операция аты ++ Инкременттің префикстік формасы ++ Инкременттің постфикстік формасы -- Декременттің префикстік формасы -- Декременттің постфикстік формасы Өрнектің жазылуы ++а а++ --b b-- 74 Атқарылатын әрекеттер Алдымен а 1-ге артады, содан кейін а ның жаңа мәні осы а кездескен өрнекті есептеуде қолданылады Осы тіркес кездескен өрнекті есептеуде а ның ескі мәні қолданылады да, содан кейін барып а ның мәні 1-ге арттырылады Алдымен b 1-ге кемиді, содан кейін b ның жаңа мәні осы b кездескен өрнекті есептеуде қолданылады Осы тіркес кездескен өрнекті есептеуде b ның ескі мәні қолданылады, содан кейін барып b ның мәні 1-ге азайтылады Тӛменде кӛрсетілген белгі немесе белгілер тіркесі мағыналары: = меншіктеу белгісі, = = теңдікті тексеру («тең» дегенді білдіреді),! = теңсіздікті тексеру («тең емес» дегенді білдіреді), && логикалық ЖӘНЕ (мысалы, мынадай шертты тексеру: if (х>10 && х<20)), логикалық НЕМЕСЕ (мысалы, мынадай шертты тексеру: if (х == 1 у!= 0)). Тағы бір мысал қарастырайық. /* Программада С++ стилінде әртүрлі арифметикалық және логикалық операциялар орындалады */ #include <iostream.h> // енгізу/шығару үшін тақырыптық файл void main() { int ii=2,ij=5,il,im,in; /* жариялау (айнымалылар типтерін кӛрсету) және 2 айнымалыны инициалдау (бастапқы мән беру) */ double dk,da=8.2,dd=.781,dc=-13.1; // жариялау,инициалдау // ******* Арифметикалық операциялар орындау *********** il = 8 % ij; cout << "\n" << "8 % 5 = " << il; // қалдық табу dk = ii + ij * dc - 5 / ii + ij % ii; cout << "\n"<< "k = " << dk; dk = (ii + ij) * dc - 5 / (ii + ij) % ii; cout << " k = " << dk; // арифметикалық операциялар реттілігі // жақшалармен ӛзгертілген dk = da + (ii++) - dd * (--ii); cout <<" k =" << dk; dk = da + (++ii) - dd * (ii--); cout << " k = " << dk; // инкремент пен декременттің // постфикстік және префикстік формалары /*

75 ********* Логикалық операциялар ********* Мұнда if шартты операторы қолданылған. Егер жақшадағы шарт ақиқат болса,жақшадан кейін тұрған оператор, әйтпесе одан кейінгі оператор орындалады */ cout << "\n" << "Input int m = n = 5 "; cin >> im >> in; if(im == in) cout << "The condition is fulfilled"; cout << "\n" << "Input int m = 6 and int n = 3 "; cin >> im >> in; if(im!= 5 && im > in) cout << "Both conditions are fulfilled"; cout << "\n" << "Input int n = -15 "; cin >> in; if ( im!= 5 in <= 1) cout << "One of the conditions is fulfilled\n"; Программаны орындау нәтижелері: 8 % 5 = 3 k = k = k =9.419 k = Input int m = n = The condition is fulfilled Input int m = 6 and int n = Both conditions are fulfilled Input int n = One of the conditions is fulfilled Мҧндағы ҥш if операторларының да шарттары ақиқат болғандықтан, ҥш рет The condition is fulfilled (Шарт орындалды), Both conditions are fulfilled (Екі шарт орындалды), One of the conditions is fulfilled (Бір шарт орындалды) деген мәліметтер шығарылды. Бақылау сұрақтары 1. Стандартты функция мен қолданушы функциясының қандай айырмашылықтары бар? 2. Қолданушы функциясын анықтау дегеніміз не? 3. Формальды параметрлер мен нақты параметрлер қайда жазылады? 4. Функцияны жариялау кезінде кӛрсетілген void тҥйінді сӛзі нені білдіреді? 5. return операторы қандай қызмет атқарады? 6. Функция прототипі дегеніміз не? 7. Қолданушы функциясын анықтау main() функциясына дейін орындала ма әлде одан кейін атқарыла ма? Неге? 8. Қолданушы функциясын анықтау форматы қандай болады? 9. Айнымалыға бастапқы мән беру қалай орындалады? 10. Константалар қалай хабарланады? 11. Айнымалының әрекет ету аймағы дегеніміз не? 12. Идентификатордың кӛріну аймағының оның әрекет ету аймағынан айырмасы. 13. Жады класы тҥсінігі. Автоматтық айнымалылар дегеніміз не? 75

76 14. Статикалық айнымалының қандай ерекшелігі бар? 15. Класы extern болып келген айнымалылар қандай болады? Регистрлік айнымалылар ше? 16. Глобальдік айнымалы мен локальдік айнымалының айырмашылығы. 17. Ӛрнек дегеніміз не? 18. Инкремент және декремент операциялары. Олардың префистік дәне постфикстік формалары. Тапсырмалар 1. Ҥш натурал сандар берілген. Олардың ең ҥлкен ортақ бӛлгішін (ЕҤОБ) анықтайтын функцияны қҧру керек. 2. Натурал N саны берілген. Ол екі x және y бҥтін сандарының квадраттарының қосындысына тең болатын болса N=x 2 +y 2, онда x, y сандарын анықтайтын функцияны қҧру керек. 3. Натурал N саны берілген. K 2 -қа бӛлінетін және K 3 -қа бӛлінбейтін барлық натурал K-ларды табу керек. 4. Егер N цифрдан тҧратын натурал санның цифрларының қосындысын n-ші дәрежеге шығарғанда, сол санның ӛзіне тең болатын болса, ондай сан Армстронг саны деп аталады (мысалы, 153= ). Екі, ҥш және тӛрт цифрдан тҧратын барлық Армстронг сандарын табу керек. 5. Екі ҧшбҧрыштың тӛбелерінің координаталары берілген. Олардың қайсысының ауданы ҥлкен екенін анықтау керек. 6. Жазықтықтағы ҥш тҥзу a k x+b k y=c k (k = 1,2,3) теңдеулерімен берілген. Егер ол тҥзулер қос-қостан қиылысып, ҥшбҧрыш қҧрайтын болса, сол ҥшбҧрыштың ауданын табу керек. 7. Екі жай санның бір-бірінен айырмашылығы 2-ге тең болса, олар егіздер деп аталады (мысалы, 41 және 43 сандары). [n, 2n] аралығындағы барлық егіздерді анықтау керек, мҧндағы n 2-ден ҥлкен бҥтін сан. 8. Екі ҧшбҧрыштың тӛбелерінің координаталары берілген. Олардың қайсысының ауданы ҥлкен екенін анықтау керек. n! 9. C m n анықтау керек, мҧндағы n!= n, яғни n санының факториалы. m!( n m)! 76

77 8 С/С++ ТІЛДЕРІНДЕ ОПЕРАЦИЯЛАРДЫ ОРЫНДАУ Операциялар таңбалары. Операция (амал) таңбасы бҧл операндтармен (сан, айнымалы немесе мәні анықталатын ӛрнек) атқарылатын амалды анықтайтын бір немесе бірнеше символдар тіркесі. Олардың арасына бос орын қоюға болмайды. Операциялар оған қатынасатын операндтар санына қарай унарлық, бинарлық және тернарлық болып бӛлінеді. Бір таңбаның ӛзі тҧрған орнына байланысты әртҥрлі мағына беруі мҥмкін. С/C++ тілдеріндегі операциялар тізімі олардың басымдылықтарына, яғни приоритеттеріне (приоритеттерінің кемуіне қарай реттелген) байланысты тӛмендегі кестеде берілген. Ондағы унарлық операция бір орынды, бинарлық екі орынды, тернарлы үш орынды операция деген ҧғымды береді. Кестеге кірмеген басқа операциялар кездескен кезінде тҥсіндіріледі. 8.1 кесте. C++ тілінің негізгі операциялары Операция Қысқаша сипатталуы Унарлық операциялар ++ 1-ге арттыру -- 1-ге кеміту sizeof мәліметтің компьютер жадындағы енін (кӛлемін) анықтау ~ разрядтар бойынша кері жазу! логикалық терістеу - арифметикалық терістеу (унарлық минус) + унарлық плюс & адресті алу * адрессіздендіру (нҧсқауыш типі) new компьютер жадын бӛлу (беру) delete компьютер жадын босату (type) типті тҥрлендіру, жақша ішінде тип аты жазылады Бинарлық және тернарлық операциялар * кӛбейту / бӛлу % бӛлгендегі қалдықты табу + қосу - азайту << солға ығыстыру >> оңға ығыстыру < кіші <= кіші немесе тең (артық емес) > ҥлкен >= ҥлкен немесе тең (кем емес) == тең!= тең емес & разрядтар бойынша конъюнкция (ЖӘНЕ) ^ разрядтар бойынша арифметикалық (аласталған) НЕМЕСЕ поразрядная дизъюнкция (НЕМЕСЕ) && логикалық ЖӘНЕ 77

78 логикалық НЕМЕСЕ?: шартты операция (тернарлық) = меншіктеу *= кӛбейтіп алып меншіктеу /= бӛліп алып меншіктеу %= қалдықты тауып алып меншіктеу += қосып барып меншіктеу -= азайтып барып меншіктеу <<= солға ығыстырып алып меншіктеу >>= оңға ығыстырып алып меншіктеу &= разрядтар бойынша ЖӘНЕ амалын орындап алып меншіктеу = разрядтар бойынша НЕМЕСЕ амалын орындап алып меншіктеу ^= разрядтар бойынша арифметикалық НЕМЕСЕ амалын орындап алып меншіктеу. тізбектеп есептеу Кестедегі шартты және sizeof операцияларынан басқалары асыра жҥктеле береді. 8.1 Операцияларды орындау C++ тіліндегі операциялар тізімі олардың приоритеттеріне (басымдылы ғына) қарай 4.1-кестеде берілген. Кестеге кірмеген басқа операциялар кездескен кезінде тҥсіндіріледі. Енді негізгі операциялардың орындалуын толығырақ қарастырайық. Арттыру немесе кеміту (инкремент және декремент) операциялары ++ және -- тҥрінде жазылады, олар туралы жоғарыда айтылды. Префикстік тҥрде (++х немесе --х) алдымен операнд ӛзгертіліп, сонан соң оның мәні ӛрнектің нәтижелік мәніне айналады, ал постфикстік тҥрде (х++ немесе х--) ӛрнек мәні операндтың бастапқы мәнін қабылдайды да, операнд сонан кейін ӛзгереді. Бҧлар жасырын тҥрдегі меншіктеу амалы болып табылады. Олар жеке оператор тҥрінде де жазылады: i++; немесе ++i; Бҧл екеуі де мынадай амалмен бірдей болып саналады i = i + 1; Мысалы: k=10; x=k++; // x=10 k=11 x=++k; // x=12 k=12 Арттыру/кеміту операцияларын ӛрнек ішінде де орындау мҥмкіндігі: sum=a+b++; //алдымен a, b қосылады, сонан соң b 1-ге артады sum=a+ ++b; //алдымен b 1-ге артады, сосын барып a, b қосылады Арттыру/кеміту операцияларының приоритеттері ӛте жоғары, тек жақша ішіндегі операциялардың приоритеті олардан жоғары болады. 8.1 мысал. #include <stdio.h> //С тілі стиліндегі программа int main() 78

79 { int x = 3, у = 3; printf("префикстік ӛрнек мәні: %d\n", ++x); printf("постфикстік ӛрнек мәні: %d\n", y++); printf("ӛзгертілген х мәні: %d\n", x); printf("ӛзгертілген у мәні: %d\n", y): return 0; Программа жҧмысының нәтижесі: Префикстік ӛрнек мәні: 4 Постфикстік ӛрнек мәні: 3 Ӛзгертілген х мәні: 4 Ӛзгертілген у мәні: 4 Жалпы инкремент операциясының операнды L-мәні (L-value) болды деп айтылады. Мҧндай тҥрде мән енгізуге болатын белгілі бір жады аймағын нӛмірлеуді (адрестеуді) жҥзеге асыратын кез келген ӛрнек белгіленеді. Бҧлай атау меншіктеу операциясына байланысты туындаған, ӛйткені оның сол жақ бӛлігі (Left) операция нәтижесінің жады аймағының қай жеріне орналасатынын анықтайды. Айнымалы L-мәнінің бір тҥрі болып табылады. Компьютер жадындағы мәлімет кӛлемін (мӛлшерін, енін) анықтау операциясы sizeof объектінің немесе типтің алатын орнын байтпен анықтап береді, оның екі тҥрі бар: sizeof ӛрнек sizeof ( тип ) Енді С++ тілінде бір мысал келтірейік. 8.2 мысал. #include <iostream.h> int main() 8.1-сурет мысал нәтижесі { float x = 1; cout << "sizeof (float) :" << sizeof (float); cout << "\nsizeof x :" << sizeof x; cout << "\nsizeof (x + 1.0) :" << sizeof (x + 1.0); return 0; Программа жҧмысы нәтижесі 8.1 суретте кӛрсетілген. Компьютер жадындағы бҥтін сандар типтерінің енін анықтау программасы тӛмендегідей болады. 8.3 мысал. #include <iostream.h> // С++ тілінде берілген 79

80 int main() { cout << "short typi eni: " << sizeof(short) << " byte" << endl; cout << "int typi eni: " << sizeof(int) << " byte" << endl; cout << "long typi eni: " << sizeof(long) << " byte" << endl; cout << "signed short typi eni: " << sizeof(signed short) << " byte" << endl; cout << "signed int typi eni: " << sizeof(signed int) << " byte" << endl; cout << "signed long typi eni: " << sizeof(signed long) << " byte" << endl; cout << "unsigned short typi eni: " << sizeof(unsigned short) << " byte" << endl; cout << "unsigned int typi eni: " << sizeof(unsigned int) << " byte" << endl; cout << "short typi eni: " << sizeof(unsigned long) << " byte" << endl; return 0; 8.2-сурет. Бҥтін сандар типтерінің енін анықтау программасы нәтижесі Терістеу операциясы (-,! және ~). Арифметикалық терістеу (унарлық минус -) бҥтін немесе нақты типтегі операндтың таңбасын қарама-қарсыға ауыстырады. Логикалық терістеу (!) операнд ақиқат болса, 0 мәнін және операнд нӛлге тең болмаса (нӛл емес), 1 мәнін береді. Операнд бҥтін немесе нақты типте немесе нҧсқауыш типінде болуы тиіс. Разрядтар бойынша терістеу (~), кӛбінесе биттік терістеу деп аталады, бҥтін сан тҥріндегі операндтың екілік сан тҥріндегі бейнесінің әрбір разрядын терістейді (инверсиялайды). Мысалы, ~ = ~ = = Бӛлу (/) және қалдық табу (%). Бөлу операциясы арифметикалық типтегі операндтарға қолданылады. Егер екі операнд та бҥтін сан болса, бӛлінді бҥтін санға дейін дӛңгелектенеді, әйтпесе бӛлінді типі типтерді тҥрлендіру ережесіне сәйкес тағайындалады. Қалдық табу операциясы тек бҥтін типтегі операндтарға қолданылады. 8.4 мысал. 80

81 #include <stdio.h> // С тілі стилінде int main(){ int x = 11, у = 4; float z = 4; printf("бӛлу нәтижесі: %d %f\n", x/y, x/z); printf("қалдық: %d\n", x%y): return 0; Программа жҧмысы нәтижесі: Бӛлу нәтижесі: Қалдық: 3 Ығыстыру операциясы (<< және >>) бҥтін сан тҥріндегі операндтарға қолданылады. Олар бірінші операндтың екілік бейнесін екінші операндта кӛрсетілген санға сәйкес оңға (>>) немесе солға (<<) ығыстыру ісін атқарады. Солға (<<) ығыстыру кезінде босаған разрядтар нӛлдермен толтырылады. Ал оңға (>>) ығыстыру кезінде босаған разрядтар, бірінші операнд таңбасыз типте болғанда, нӛлдермен толтырылады. Егерде бірінші операнд таңбалы типте болса, онда босаған орындар таңба разрядымен толтырылады. Ығыстыру операциялары толып кету (переполнение) және санның дәлдігін жоғалту әрекеттерін есепке алмайды. Қатынас операциялары (<, <=, >, >=, ==,!=) бірінші операндты екінші операндпен салыстырады. Операндтар арифметикалық немесе нҧсқауыштық типте болуы мҥмкін. Операция нәтижесі true немесе false болады (нӛлге тең емес кез келген мән нәтижесі true). Теңдікпен және теңсіздікпен салыстыру операцияларының приоритеті басқа салыстыру операцияларынан тӛмен болып саналады. Екі шаманың тең екендігін (==) тексеру операциясы мен нәтижесі сол жақ операндқа берілетін мән болып табылатын меншіктеу операциясының (=) айырмашылығына назар аудару қажет. Екілік разрядтар бойынша орындалатын операциялар ( &,, ^ ) тек бҥтін санды типтегі екілік жҥйедегі операндтарға қолданылады. Бҧл операцияларды орындау барысында операндтар биттер бойынша қарастырылады (бірінші операндтың бірінші биті екінші операндтың бірінші битімен, бірінші операндтың екінші биті екінші операндтың екінші битімен, т.с.с. салыстырылады). Разрядтық конъюнкцияда немесе разрядтық ЖӘНЕ (операция & болып белгіленеді) операциясында логикалық кӛбейту амалы орындалады да, тек екі операндтың да сәйкес орындардағы разрядтары 1-ге тең болған жағдайда нәтижелік бит 1-ге тең болады. 1-операнд операнд Нәтиже операнд операнд Нәтиже Разрядтық дизъюнкцияда немесе разрядтық НЕМЕСЕ (операция болып белгіленеді) операциясында логикалық қосу амалы орындалады 1-операнд операнд да, екі операндтың тек біреуінің 2-операнд операнд Нәтиже Нәтиже немесе екеуінің де сәйкес

82 орындардағы разрядтары 1-ге тең болған жағдай-да нәтижелік бит 1-ге тең болады. Разрядтар бойынша аластайтын НЕМЕСЕ (операция ^ болып белгіленеді) операциясында екі операндтың тек біреуінің ғана сәйкес орындарындағы разряды 1-ге тең болған жағдайда нәтижелік бит 1-ге тең болады. 8.5 мысал. #include <iostream.h> int main() { cout << "\n 6 & 5 = " << (6 & 5); cout << "\n 6 5 = " << (6 5); cout << "\n 6 ^ 5 = " << (6 ^ 5); return 0; Программа жҧмысының нәтижесі: 6 & 5 = = 7 6 ^ 5 = 3 1-операнд операнд Нәтиже Операция: & ^ 1-операнд операнд Нәтиже операнд операнд Нәтиже Логикалық операциялар (&& и ). ЖӘНЕ (&&) мен НЕМЕСЕ ( ) логикалық операцияларының операндтары арифметикалық типте немесе нҧсқауыш тҥрінде бола алады, мҧнда әрбір операциядағы операндтар типтері әр тҥрлі бола береді. Операциялар орындалуы кезінде типтерді тҥрлендіру жасалмайды, тек әр операндтың нӛлге эквиваленттілігі бағаланады (нӛлге тең операнд false, нӛлге тең емесі true болып саналады). Логикалық операцияның нәтижесі true немесе false болады. Логикалық ЖӘНЕ операциясындағы екі операндтың да мәні true болғанда ғана оның нәтижесі true болады. Ал логикалық НЕМЕСЕ операциясындағы екі операндтың бірінің мәні true болғанда, оның нәтижесі true болады. Логикалық операциялар солдан оңға қарай орындалады. Егер бірінші операндтың мәні операция нәтижесін анықтауға жеткілікті болса, онда екінші операнд мәні есептелмейді. Сонымен, бірнеше шарттық ӛрнектерді біріктіру ҥшін келесідей логикалық операциялар қолданылады: 1) ЖӘНЕ && (and) операциясы; f1 && f2 2) НЕМЕСЕ (or) операциясы; f1 f2 ( коды 124 ) 3) ТЕРІСТЕУ! (not) операциясы.!f1 (!true = false,! false = true) Терістеу (ЕМЕС) операциясының приоритеті ӛте жоғары, одан тек жақша ішіндегі мәндердің проритеті жоғарылау болады. && операциясының приоритеті (or) операциясымен салыстырғанда жоғары, ал осы екеуінің приоритеттері қатынас операцияларымен салыстырғанда тӛмен, меншіктеу операциясынан жоғары болады. 82

83 8.2 Меншіктеу операциялары Меншіктеу операциялары символдар (=,+=, -=,*=, т.с.с.) арқылы жазылады. Меншіктеу операциясы программада аяқталған оператор ретінде пайдаланылады. Кез келген ; таңбасымен аяқталатын ӛрнек меншіктеу операторы болып табылады. Ӛрнектің бір тҥріне бос оператор жатады, ол жай ; операторы. Қарапайым меншіктеу операциясының жазылуы: 1_операнд = 2_операнд; Бірінші операнд L_мән, ал екіншісі ӛрнек болуы тиіс. Алдымен оң жақта тҧрған ӛрнек есептеледі, сонан соң оның нәтижесі сол жақта кӛрсетілген жады аймағына жазылады да (мҧның мнемоникалық ережесі: «меншіктеу мәліметтерді сол жаққа беру» ), онда бҧрынғы сақталған мәлімет жойылады. 8.6 мысал. #include <iostream.h> // С++ тілінде берілген int main() { int a = 3, b = 5, с = 7; a = b; b = а; с = с + 1; cout << "a = " << a; cout << "\t b = " << b; cout << "\t с = " << с; return 0; Программа жҧсысының нәтижесі: a = 5 b = 5 c = 8 С/С++ тілдерінде меншіктеу операторының бірнеше тҥрі бар. Жалпы меншіктеу операциясының жазылу форматы мынадай болады: <айнымалы> = <айнымалы> <операция> <ӛрнек>; Мҧны қысқаша былай жазуға болады: <айнымалы> <операция> = <ӛрнек>; Тӛменде бірнеше мысал келтірілген. a=a+b; a+=b; a=a*b; a*=b; a=a-b; a-=b; a=a/b; a/=b; С/С++ тілдерінде тізбектеле жазылған меншіктеу операцияларын да қолдануға болады. Мысалы: sum = a = b; Мҧнда меншіктеу операциясы оңнан солға қарай орындалады, яғни b-ның мәні a-ға меншіктеледі, ал а-ның мәні sum-ға меншіктеледі. Меншіктеу операцияларын былай да жазуға болады: 1) a = (b = 1) + 2; мҧнда a=3, b=1. 2) a = b = 1 + 2; 83

84 ал мҧнда a = 3, b = 3. Дӛңгелек жақшаға алынған кез келген меншіктеу операторы анықталған мәні бар ӛрнек болып табылады, мысалы:((s=13+12)<=30) деген ӛрнек ақиқат мәнді болып табылады. Шартты операция (? :) шартты ӛрнек жазуға мҥмкіндік береді, яғни берілген шартқа байланысты әр тҥрлі мән қабылдайтын шартты өрнектер қҧрады. Бҧл операция ҥшорынды болып табылады. Бірінші операнд арифметикалық типте немесе нҧсқауыш боуы мҥмкін. Ол нӛлге эквиваленттілік тҧрғысынан тексеріледі (нӛлге тең операнд false, ал нӛлге тең емесі true болып табылады). Егер оның шарты (бірінші операнд) ақиқат болса, ӛрнек мәні екінші операндқа тең; егер жалған болса, онда ҥшіншіге тең. Жазылуы: 1_операнд? 2_операнд : 3_операнд; 8.7 мысал. #include <stdio.h> int main(){ int a = 11, b = 4, max; max = (b > a)? b : a; printf("максимум: %d", max); return 0; Программа жҧмысының нәтижесі: Максимум: 11 Тағы бір мысал келтірейік. Белгілі бір бҥтін шама i берілген n санынан артық болмаса, бірге артады, әйтпесе бірге тең болады: i = (i < n)? i + 1: 1; Қалған операциялар кейін қарастырылады. Ӛрнектер операндтардан, операция таңбаларынан және жақшалардан қҧралып, белгілі бір типтегі мәнді есептеу ҥшін қолданылады. Ӛрнектерді жазу мысалдары: і (a+3.12)/5 (-b+sqrt(b*b-4*a*c))/(2*a) x && y!z Қатынас таңбасы арқылы біріктірілген екі арифметикалық ӛрнек мәні ақиқат (0-ге тең емес) немесе жалған (0-ге тең) деп айтылады. С тілінде логикалық тип тҥсінігі айтылмайды, ол С++ тілінде бар. Операциялар ӛздерінің приоритеттеріне сәйкес орындалады, приоритеттер (басымдық) жай жақшалармен реттеледі. Егер ӛрнекте приоритеттері бірдей бірнеше операция унарлық операциялар, шартты операция немесе меншіктеу операциясы жазылса, олар оңнан солға қарай, ал басқалары солдан оңға қарай орындалады. Мысалы, а=b=с тізбегі a=(b=c) болып саналады, aл a+b+c ӛрнегі (а+b)+с тҥрінде орындалады. Кҥрделі ӛрнектердің ішкі мҥшелерінің есептелу реттілігін анық айту қиын, мысалы, мынадай ӛрнекте (sin(x+2)+cos(y+1)) синус косинустан бҧрын есептеледі деп айтуға болмайды және х+2 ӛрнегі де у+1 тізбегінен бҧрын шығарылады деп те 84

85 тҧжырым жасауға болмайды. Ӛрнектің есептелу нәтижесі оның мәнімен және типімен сипатталады. Мысалы, а мен b бҥтін типтегі айнымалылар ретінде мынадай тҥрде сипатталсын делік: int a= 2, b = 5; мҧндағы а+b мәні 7 және типі int, ал а=b ӛрнегінің мәні а айнымалысында орналасқан мән болады да, оның тип де осының типіндей болып келеді. Сонымен, C++ тілінде а=b=с деп жазуға болады, мҧнда алдымен b=с ӛрнегі есептеледі, сонан соң оның нәтижесі а айнымалысына меншіктелетін операцияның оң жақ операнды болып табылады. Ӛрнекте әртҥрлі типтегі операндтар қатар тҧра береді. Егер олар бір типте болса, онда нәтиже де сол типте болады, ал операндтар әртҥрлі типте болса, онда олардың дәлдігін сақтау ҥшін, қысқа типтер ҧзынырақ типтерге белгілі бір ережелерге сәйкес тҥрлендіріледі. 8.3 Типтерді түрлендіру Типтерді түрлендірудің екі тҥрі бар: шамалардың ішкі бейнесін ӛзгерту (дәлдікті жоғалту немесе жоғалтпау арқылы); шамалар ішкі бейнесінің тек интерпретациясын ғана ӛзгерту. Бірінші типке, мысалы, бҥтін санды нақты санға (дәлдікті жоғалтпай) және керісінше (дәлдікті жоғалту арқылы) тҥрлендіру әрекеті жатады, ал екінші типке таңбалы бҥтін сандарды таңбасыз типке ауыстыру әрекеттері жатады. Жалпы, сандардың барлық мәндерін кӛрсете алатын кез келген жағдайда шамалардың char, signed char, unsigned char,short int және unsigned short int типтері int типіне тҥрлендіріледі, ал кері жағдайда unsigned int типіне ауыстырылады. Егер ӛрнекте әр тҥрлі типтегі сандар мен айнымалылар қолданылса, онда олар жалпы бір типке тҥрлендіріледі. Біз қарастырған барлық негізгі типтер ішінде тӛменнен жоғары қарай бағытталған тҥрлендірілу реттілігі бар. Егер оларды оңған солға қарай реттеп орналастырсақ, мынадай болып шығады: char short int long float double Оң жақтағылары сол жақтағылардан гӛрі жоғары дәрежелі болып табылады. Егер char мен short типтері араласса, нәтижесі short болады, ал short пен int типтері араласса, нәтижесі int болады, ал ал ал int пен long типтері араласса, нәтижесі long, long пен float типтері араласса, нәтижесі float, float пен double типтері араласса, нәтижесі double болады. Егер екі-ҥш тип араласып, ең ҥлкен дәрежелісі float болса, әрқайсысы да және нәтиже де осыған келтіріледі. Компилятор типтерді автоматты тҥрде тҥрлендіру ҥшін тӛмендегі негізгі 85

86 ережелер жиынын пайдаланады: 1. Егер операция екі тҥрлі типтегі мәліметтер ҥшін орындалатын болса, онда олар осы мәліметтер типтерінің арасындағы жоғарғы типке келтіріледі. 2. Жоғары типтен бастап, тӛмен типке дейін реттелген типтер аттарының тізбегі келесідей тҥрде кӛрсетіледі: double float long int short char Меншіктеу операторында оң жақта орналасқан ӛрнектің есептелген нәтижесі осы оператордың сол жағына жазылған айнымалының типіне келтіріледі. Осындай процесс типтің жоғарысына немесе тӛменіне келтірілуі мҥмкін. 8.8 мысал. #include <stdio.h> // С тілі стилінде #include <conio.h> main () { char ch; int i; float fl; fl=i=ch='a'; printf("ch=%c i=%d fl=%6.2f\n",ch,i,fl); // ch=a i=65 fl= ch=ch+1; // ch=66 i=fl+2*ch; // i= *66=197 fl=2.0*ch+1; // fl=2*66+1=133 printf("ch=%c i=%d fl=%6.2f\n",ch,i,fl); // ch=b i=197 fl= Келтіру операциясы. Жоғарыда кӛрсетілген типтердің тҥрлендірілуі автоматты тҥрде орындалады. Мәліметтердің кӛрсетілген қажетті типіне келтіру ҥшін С/С++ тілінде арнайы бір тәсіл бар. Бҧл тәсілде типтерді бірыңғайлау ҥшін, айнымалының алдында дӛңгелек жақшада қажетті типтің аты жазылады. Жалпы тҥрге келтіру операциясы мынадай болып жазылады: (тип)ӛрнек. Мысалы: int m; float x,y; y=pow(x,2)+sqrt((double)m); Сонымен, ең қарапайым программаның ӛзі белгілі бір ережелерге сәйкес жазылса, ол сенімді тҥрде жҧмыс істейтін болады екен. Бақылау сұрақтары 1. С тілінде қандай операциялар бар? 86

87 2. Меншіктеу операторының түрлері. 3. Меншіктеу операторының жазылу форматтары. 4. Арттыру немесе кеміту (инкремент және декремент) операциялары. 5. Префикстік және постфикстік операциялар. 8. Құрама операторлар қалай ұйымдастырылады? 9. Бос оператор деген не? 10. Типтер ішінде төменнен жоғары қарай бағытталған түрлендірілу реттілігі. 11. Келтіру операцияларының жазылуы. Тапсырмалар 1. А-ның берілген мәндері а) а = 1.0; ә) а = 4; б) а = 5 болған кездердегі х мәндерін анықтау керек: b = 2.4*а; х = (а+b)/а*b-а; х = а/b % b; b = а*а-2*а; а = (b++ + 2)*(b - 1); 2. Тӛмендегі операторларда жіберілген қателерді табыңдар: а) 2-х = k + 4; д) х = а/- b; ә) х = x < 4; е) y = y>2 б) х = 3,74*a; ж) 5 = а - b; в) 3*k = m; з) р = 5.5 % 2; г) -w = а + b; и) х = sіnx + cosх; 3. Тӛмендегі ӛрнектерді алгоритмдік тілдерде жазыңдар: y 2 x а) ә) sin 2x tgx 1 5x 1 ; y ; 6x ln x б) y sin(cos x) 5,4 sin cos x sin x x 4. Кубтың қабырғаларының ҧзындығы берілген. Оның кӛлемі мен қабырғасының бетінің ауданын табыңдар. 5.Тікбҧрышты ҥшбҧрыштың катеттері берілген. Оның гипотенузасы мен ауданын табыңыздар. 6. Теңбҥйірлі ҥшбҧрыштың жақтары берілген. Ҥшбҧрыштың ауданын табыңыздар. 7. x 1, y 1 және x 2, y 2 координаталарымен берілген нҥктелердің ара қашықтығын табыңыздар. 8. Нақты x саны берілген. Тек кӛбейту, қосу және азайту амалдарын қолданып 2x 4 3x 3 + 4x 2 5x + 6 есептеңіз. 4 кӛбейту, 4 қосу және 4 азайту амалын қолдануға болады. 9. Нақты x саны берілген. Тек кӛбейту, қосу және азайту амалдарын қолданып 1 2x + 3x 2 4x 3 и 1 + 2x + 3x 2 + 4x 3 есептеңіз. Тек 8 операция қолдануға болады. 10. x, y, z мәндері берілген, a және b мәндерін есептеңіздер. 87

88 11. x, y, z мәндері берілген, a және b мәндерін есептеңіздер. 12. x, y, z мәндері берілген, a және b мәндерін есептеңіздер. 13. a және b нақты сандары берілген. Осы сандардың қосындысын, айырмасын және кӛбейтіндісін табыңыздар. 14. Екі нақты оң сан берілген. Осы сандардың арифметикалық және геометриялық ортасын табыңыздар. 15. Екі нақты сан берілген. Осы сандардың абсолют шамасының арифметикалық және геометриялық ортасын табыңыздар. 16. Ҥшбҧрыштың тӛбелерінің координатасы берілген. Ҥшбҧрыштың периметірі мен ауданын табыңыздар. 17. Берілген a, d, n мәндері бойынша арифметикалық прогрессияның мҥшелерінің a, a + d,, a + ( n 1 )d қосындысын табыңыздар 18. Тікбҧрышты ҥшбҧрыштың гипотенузасы мен катеті берілген. Оның екінші катеті мен оған іштей сызылған шеңбердің радиусын табыңыздар. 19. Бір бірінен r арақашықтықта орналасқан, массалары m 1 және m 2 екі дене арасындағы F тартылыс кҥшін анықтаңыздар. 20. x, y нақты сандары берілген. Тек 8 кӛбейту, 8 қосу және 8 азайту амалдарын қолданып, 3x 2 y 2 2xy 2 7x 2 y 4y xy + 2x 2 3x + 10y + 6 есептеңіздер. 21. Тастың h биіктіктен жер бетіне қҧлау уақытын анықтаңыздар. 22. Шеңбердің ҧзындығы белгілі. Осы шеңбермен шектелген дӛңгелектің ауданын табыңыздар. 23. Ішкі радиусы 20-ға, ал сыртқы радиусы r ( r > 20 ) болатын сақинаның ауданын табыңыздар. 88

89 9 С/С++ ПРОГРАММАЛАУ ТІЛДЕРІНІҢ ТАҢДАУ ОПЕРАТОРЛАРЫ Компьютерлерде шығарылатын есептердің кҥрделіленуіне байланысты программалардың кӛлемдері ӛсіп, оларды жазу, оқу, тҥзету істері кҥннен кҥнге қиындап келеді. Белгілі бір ӛндірістік мәселенің, мезгіл-мезгіл қайталанып отыратын есептеулердің программалары ҧзақ уақыт пайдаланылады, олар кҥнделікті ӛмір талабына сәйкес ӛзгертіліп, тҥзетіліп отыруы тиіс. Осыларға байланысты программаларды қҧрастыруды, тҥсінуді, ӛзгертуді жеңілдететін тәсілдер жасалған, олар қҧрылымдық (структуралық) және объектіге бағытталған программалау жолдары деп аталады. Программаларды адамның тҥсіну мен қабылдауын ыңғайлы тҥрде жҥргізуге бағытталған тәсілдер жиынын құрылымды программалау деп атайды. Әрбір жасалған программа бӛліктері бір-бірімен тығыз логикалық байланыста болып, оның бір жерінен екінші бір жеріне секірулер болмауы тиіс. Қҧрылымды программалау go to операторысыз программалау болып саналады, яғни шартсыз кӛшу операторын мҥмкіндігінше пайдаланбауға тырысу керек, ӛйткені ол программа логикасын тҥсінуді қиындатады. Бірақ кейде goto операторын қолдану қажет болатын кездер болады. Кез келген программа саны шектелген стандартты логикалық қҧрылымдардан тҧрады. Негізгі логикалық қҧрылымдар туралы бҧдан бҧрын айтылған болатын, олар: сызықтық, тармақталу және қайталау қҧрылымдары. Осы ҥш қҧрылым программалаудың базалық негізгі конструкциялары болып саналады, олар кҥрделі программаларды жіктеп қарастыру мҥмкіндігін береді. Бҧлар қҧрылымдардың ең кӛрнекті ерекшелігі олардың орындалу алгоритмдерінің бір кіріс және тек бір шығыс сызығы болады. Мҧндағы әрбір қҧрылымдық бірлік бір оператордан, біріктірілген операторлар тобынан немесе қабаттастырылған қҧрылымдардан да тҧруы мҥмкін. Осындай программалар оңай оқылады, тҥзетіледі және керек болса, оңай ӛзгертіледі. С/С++ тілінде циклдің ҥш тҥрі, тармақталудың екі тҥрі бар. Олар программалауды жеңілдету мақсатында жасалған, сондықтан әрбір жағдайда ӛзімізге ыңғайлысын таңдап алуымыз керек. Ең бастысы кез келген программа айқын, әрі нақты тҥрде қҧрастырылған жеке блоктардан тҧруы тиіс. Программа жҧмысын басқару операторларын программаның басқарушы конструкциясы деп атайды. Олар: қҧрама операторлар; таңдау операторлары; цикл операторлары; кӛшу операторлары. «Ӛрнек» операторы. Нҥктелі ҥтірмен аяқталатын кез келген ӛрнек белгілі бір мәнді есептейтін меншіктеу операторы болып саналады. Олар алдыңғы бӛлімдерде қарастырылған болатын. Бос оператор да ӛрнектің бір тҥріне 89

90 жатады, ол жай ; операторы (бҧл синтаксис бойынша оператор қажет етілгенмен, мағынасы бойынша ол керек болмайтын кезде пайдаланылады). Мысалдар: k++; // инкремент операциясы орындалады a*= b+c; // кӛбейте отырып меншіктеу операциясы орындалады fun(m,n); // функцияны шақыру операциясы орындалады 9.1 Тармақталу операторы Тармақталу процестері бар алгоритмдерді ҧйымдастыру ҥшін шартты операторлар пайдаланылады. Тармақталу белгілі бір шарттың орындалуы немесе орындалмауына тәуелді атқарылады. Кейде бір тармақ ішінде ешбір амал орындалмай да қала береді. Шарт ретінде логикалық ӛрнектің мәні пайдаланылады. С++ тілінде екі шартты оператор бар, олар: іf және switch. Шартты оператор. Іf шартты операторы программадағы іс-әрекеттердің табиғи орындалу реттілігін ӛзгертетін мҥмкіндіктің ең кең тараған тәсілі. Оның қҧрылымдық схемасы 9.1 суреттегідей болып ӛрнектеледі де, орындалуы кезінде есептеу жолы екіге тармақталып кетеді. Суретте кӛрсетілген қҧрылымдарға сәйкес бҧл оператор мынадай тҥрде жазылады: іf (өрнек) 1-оператор; [ else 2-оператор; ] (оқылуы іf иф, else элс). Mҧндағы 1-ші және 2-ші операторлардың ӛздері қарапайым немесе қҧрама оператор болуы мҥмкін. Алдымен іf сӛзінен соң жазылатын ӛрнек тҥрінде берілген шарт есептеледі, ол арифметикалық типте немесе нҧсқауыштық типте болуы тиіс. Егер ол шарттың мәні true (иә), яғни ақиқат болса, онда 1-оператор атқарылады, онда else сӛзінен кейінгі 2-оператор атқарылмайды. Екінші жағдайда, шарт мәні false (жоқ), яғни жалған болса, онда else сӛзінен кейінгі 2-оператор атқарылып, 1-оператор атқарылмайды. Іf операторлары бірінің ішіне бірі кіріп қабаттасып та орындала береді. Тармақтың бірі болмайтын жағдайда, else сӛзінен кейінгі 2-оператор жазылмайды. Егер бір тармақта бірнеше операторларды орындау қажет болса, оларды блок тҥрінде жҥйелі жақшаға алып жазу керек, әйтпесе компилятор тармақтың қай нҥктеде аяқталатынын анықтай алмай қалады. Блокта кез келген операторлар жазыла береді, кейде онда тағы да шартты оператор орналасуы мҥмкін. иә ӛрнек? жоқ ӛрнек? жоқ 1 оператор 2 оператор иә оператор 9.1-сурет. Шартты оператордың қҧрылымдық алгоритмі 90

91 Әдетте, шарт ӛрнегін жазу ҥшін қатынас (салыстыру) белгілері =, >, >=, <, <=, < > жиі пайдаланылады. Жалпы тҥрде шартты k1 k2 тҥрінде қарастыруға болады, мҧнда салыстыру белгілерінің бірі, k1, k2 тҧрақты, айнымалы немесе кез келген ӛрнек болуы мҥмкін. Бір мезгілде бірнеше шартты, яғни кҥрделі қҧрама шартты жазу ҥшін логикалық амалдарды пайдалануға болады. Мысалдар: if (a<0) b = 1; // 1 if (a<b && (a>d a==0)) b++; else {b *= a; a = 0; // 2 if (a<b) {if (a<c) m = a; else m = c; else {if (b<c) m = b; else m = c; // 3 if (a++) b++; // 4 if (b>a) max = b; else max = a; // 5 1 жолда else тармағы жоқ. Бҧл аттап ӛту қҧрылымына сәйкес келеді, мҧнда шартқа байланысты меншіктеу орындалады немесе атталып ӛтіледі. Егер бірнеше шарттарды қатар тексеру керек болса, оларды логикалық операциялар таңбаларымен біріктіреді. Мысалы, 2 жолдағы ӛрнек а<b шарты және жақшадағы шарттардың бірі орындалған жағдайда ғана ақиқат болады. Егер ішкі жақшаларды алатын болсақ, онда алдымен логикалық ЖӘНЕ (&&), сонан соң НЕМЕСЕ ( ) операциялары орындалады. 3 жолдағы оператор ҥш айнымалылардың ішіндегі ең кішісін анықтайды. Мҧнда жҥйелі жақшаларды жазу міндетті емес, ӛйткені компилятор операторлардың else бӛлігін оған ең жақын тҧрған if операторымен байланыстырады. 4 жол if операторында ӛрнек ретінде қатынас операциялары жиі пайдаланғанымен, ол да міндетті емес екенін кӛрсетеді. 5 жолда кӛрсетілгендей конструкцияларды шартты операция тҥрінде жазған кӛрнектілеу болып табылады (мысалы, мҧнда: max = (b > a)? b : a;). Кейде қабаттасқан шартты операторлар кездеседі (3.3 сурет), мысалы: if (1-шарт) 1-оператор; else if (2-шарт) 1-шарт жоқ 2-оператор; иә else 3-оператор; Мҧнда егер 1-шарт ақиқат болса, 1- иә оператор орындалады, егер 1-шарт жалған болып, 2-шарт ақиқат болса, 2-1-оператор оператор орындалады, ал 1-шарт және 2-шарт жалған болса, 3-оператор атқарылады. Ондағы кез келген else тҥйінді cӛзі (keyword) оның алдында ең жақын тҧрған if операторына қатысты болып саналады. 2-шарт жоқ 2-оператор 3-оператор 9.2-сурет. Қабаттасқан шартты операторлар схемасы Мысалы, берілген х, у екі санның ҥлкенін анықтау ҥшін жазылған шартты операторды былай жазуға болады: 91

92 if (x>y) max=x; else max=y; Ал х, y, z сияқты ҥш санның ҥлкенін табу ҥшін, қабаттасқан шартты операторлар жазылады (9.3 сурет). if (x>y) {if (x>z) max=x; else max=z; else if (y>z) max=y; else max=z; x>y y>z жоқ жоқ иә иә x>z жоқ иә max=z; max=x; max=z; max=y; 9.3-сурет.Ҥш санның ҥлкенін табу схемасы Логикалық ЖӘНЕ операциясын пайдалана отырып, бҧл есепті мынадай тҥрде де жаза аламыз. if ((x>y)&&(x>z)) max=x; else if ((y>z)&&(y>x)) max=y; else max=z; 9.1 мысал. Осы алгоритмді толығынан қысқаша шартты оператор арқылы орындаудың блок-схемасы (9.4-сурет) мен программасын келесі тҥрде жазып шығайық. #include <stdio.h> // С тілі #include <conio.h> main () { clrscr(); int max,x,y,z; printf( 3 бүтін сан енгізіңіз: ); scanf( %d%d%d,&x,&y,&z); max=x; if (y>max) max=y; if (z>max) max=z; printf( max=%d,max); getch(); 92 max=x; жоқ жоқ басы x,y,z енгізу y>max z>max max соңы иә иә max=y; max=z; 9.4-сурет. Ҥш санның ҥлкенін табу схемасының екінші тҥрі 9.2 мысал. Формула арқылы берілген тӛмендегі у функциясын есептеу программасын қҧрастыру керек. x 2, егер x 0 y 3 2x, егер x 0 #include <stdio.h> // С тілі стилінде #include <conio.h>

93 main () { clrscr(); float x,y; printf( x нақты санын енгізіңіз: ); scanf( %f,&x); if (x<0) y=x+2; else y=2*x*x*x; printf( \ny=%f,y); getch(); 9.3 мысал. Программаға бір жыл нӛмірін енгізіп, сол жылдың кәбисә (366 кҥн) немесе қарапайым жыл (365 кҥн) екендігін анықтау керек. Ол ҥшін жылды тӛртке бӛлеміз, егер қалдық 0-ге тең болса, ол кәбисә жыл, әйтпесе қарапайым жыл болады. #include <stdio.h> #include <conio.h> main () { int gil; int r; /* gil-ды 4-ке бӛлгендегі қалдық */ clrscr(); printf("жылды, мысалы, 2007 енгізіп, Enter басыңыз: "); scanf("%i",&gil); r=gil % 4; if (r) printf("%i жыл - қарапайым \n", gil); else printf("%i жыл кәбисә \n", gil); printf("\nаяқтау үшін Enter басыңыз"); getch(); 9.4 мысал. Квадрат теңдеуді шешу программасын қҧру керек. /* Квадрат теңдеуді шешу */ #include <stdio.h> #include <conio.h> #include <math.h> main () { float a,b,c; float x1,x2,d; clrscr(); printf("\n * Квадрат теңдеуді шешу * \n"); printf(" a,b,c мәндерін енгізіп, Enter басыңыз: "); scanf("%f%f%f",&a,&b,&c); 93

94 d=b*b-4*a*c; if (d < 0) printf("теңдеудің шешуі жоқ \n"); else { x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("теңдеу түбірлері: x1=%3.2f x2=%3.2f\n", x1,x2); printf("\nаяқтау үшін Enter басыңыз"); getch(); 9.5 мысал. Тӛмендегі функция мәнін кез келген х ҥшін есептеу керек. y x 2 0, x, sin x 2 егер, егер егер x 0 0 x 1 x 1 #include <stdio.h> #include <math.h> #define pi main () { float x,y; clrscr(); printf("нақты сан түріндегі x мәнін енгізіңіз: "); scanf("%f",&x); if (x <= 0) y = 0; else if (x <= 1) y = x*x - x; else y = sin(pi * x*x); printf("x = %f болғанда, y = %10.6f \n",x,y); return(0); 9.6 мысал. Тӛменде алынған баллға сәйкес бағаны анықтау программасы келтірілген. балл баға A B C D F 94

95 A, егер 90 ball 100 B, егер 75 ball < 90 baga = C, егер 60 ball < 75 D, егер 50 ball < 60 F, егер 0 ball < 50 #include <stdio.h> #include <conio.h> main () { int ball; char baga; clrscr(); printf("балл мӛлшері: "); scanf("%i",&ball); if (ball >= 90) baga = 'A'; else if (ball >= 75) baga = 'B'; else if (ball >= 60) baga = 'C'; else if (ball >= 50) baga = 'D'; else baga = 'F'; printf("бағасы - %c, балл мӛлшері - %i \n",baga,ball); printf("\nаяқтау үшін Enter басыңыз"); getch(); 9.2 Switch кӛп нұсқалы таңдау операторы Программада кездесетін бірнеше нҧсқаның бірін таңдап алу керек болған жағдайда, switch ауыстырғыш операторы қолданылады. Оператордың орындалу схемасы тӛмендегі 9.5 суретте келтірілген. Оның жалпы жазылу форматы: switch <бүтін типті ӛрнек>; { case белгі1: операторлар; case белгі2: операторлар;... [default: операторлар;] Мҧнда switch сӛзінен кейінгі ӛрнек мәні есептеледі, ол бҥтін санды (char типі де) типте болуы тиіс. Сол мән case сӛздерінен кейін жазылған константалар мәндерімен салыстырылады. Егер олардың біріне тең болса, сол жол орындалады, жол соңында кӛшу операторы болмаса, келесі жолдар толық 95

96 орындалады. Ал бір жолды орындап болған соң, switch операторынан шығу ҥшін break операторы қолданылады. Егер switch сӛзінен кейінгі ӛрнек мәні ешбір константамен сәйкес келмесе, онда default сӛзінен кейінгі операторлар атқарылады. Кейде default сӛзі болмауы да мҥмкін. Default сӛзі болмаса, онда switch операторынан кейінгі келесі операторлар орындала береді. Switch операторындағы ӛрнек тҥрінде нақты типтегі мәліметтерді, сӛз тіркестерін (жолдарды) пайдалануға болмайды. Кейде бҥтін мәндермен ҥйлестірілген мәліметтердің қҧрылымдық (структуралық) элементтері қолданылуы мҥмкін. Ӛрнек? 1-белгі: <операторлар>; break; 2-белгі: <операторлар>; break; 3-белгі: <операторлар>; break; n-белгі: <операторлар>; break; 9.5-сурет. Switch операторының орындалу схемасы 9.7 мысал. Екі бҥтін сан енгізіп, олармен арифметикалық 4 амалдың бірін орындау қажет. #include <stdio.h> // С тілінде #include <conio.h> char symbol; int x,y,z; clrscr(); printf("екі бүтін сан енгізіңіз: "); scanf("%i%i",&y,&z); printf("қандай амал орындау керек: "); scanf("%s",symbol); switch (symbol) {case - : x=y-z; break; case + : x=y+z; break; case * : x=y*z; break; case / : x=y/z; break; default: printf ("белгісіз операция\n"); printf("\nнәтижесі - %d\n",x); getch(); 9.8 мысал. Шығыс календары бойынша жылға сәйкес жануар атын анықтау. #include <iostream.h> // C++ тілінде main() { int god; cout << " Жылды енгізіңіз:\n"; cin >> god; switch (god % 12) { case 0 : cout << "Мешін жылы";break; 96

97 case 1 : cout << "Тауық жылы"; break; case 2 : cout << "Ит жылы"; break; case 3 : cout << "Доңыз жылы"; break; case 4 : cout << "Тышқан жылы"; break; case 5 : cout << "Сиыр жылы"; break; case 6 : cout << "Барыс жылы"; break; case 7 : cout << "Қоян жылы"; break; case 8 : cout << "Ұлу жылы"; break; case 9 : cout << "Жылан жылы"; break; case 10 : cout << "Жылқы жылы"; break; case 11 : cout << "Қой жылы"; break; default: cout << "Таңбасыз бүтін сан енгізіңіз"; Switch орындалуы кезінде цикл аяқталмай-ақ одан шығып, қалған операторларды аттап ӛтіп, осы цикл параметрінің келесі мәніне кӛшу ҥшін continue операторы қолданылады, яғни циклдің келесі итерациясына қадамына басынан бастап ауысу жҥзеге асырылады. 9.9 мысал: #include <stdio.h> // С тілінде main() { int i; printf("\nбүтін сан енгіз: )"; scanf( %i,&i); switch(i) {case 1: printf("\nсан бірге тең!"); case 2: printf("\n2*2=%d",i*i); case 3: printf("\n3*3=%d",i*i;break; case 4: printf("\n Сан тӛртке тең!"; default: printf("\nаяқталды"; Бҧл программаның жҧмыс нәтижесі: 1 енгізілгенде мыналар шығарылады: Сан бірге тең! 2*2=1 3*3=1 2 енгізілгенде мыналар шығарылады: 2*2=4 3*3=4 3 енгізілгенде мыналар шығарылады: 3*3=9 4 енгізілгенде мыналар шығарылады: Сан тӛртке тең! Қалған сандар енгізілсе: Аяқталды! сӛзі шығарылады. 97

98 Бақылау сұрақтары 1. Құрылымдық программалау ұғымы. 2. Шартты оператордың толық және қысқа түрлері. 3. Қабаттасқан шартты операторлардың жазылуы. Олар қандай жағдайларда пайдаланылады? 4. Шарттық өрнектерді біріктіретін логикалық операторлардың қолданылуы. 5. Шартты операторды пайдаланып y=1/(x-1)+1/(x-2) мәнін есептейтін программа құрыңдар. 6. Шартты операция дегеніміз не? 7. Көп нұсқалы таңдау операторы не үшін қажет? Оның жазылу форматы қандай? 8. Көп нұсқалы таңдау операторына мысал келтіріңдер. Тапсырмалар 1. Тармақты алгоритмдерді программалау тәсілдерін пайдаланып, тӛмендегі функциялардың мәндерін есептейтін программа жазыңдар: sin x x 2 4 e sin e, егер x 2 2 a) y x x, егер x 2 3x б) y x sin 4x x e 1 2, егер x e 2 lg x, 2 (sin x 1) lg x, егер x -1 sin x cos x в) y, егер -1 x 3 cos x -sinx e sin x, егер x 3 5sin y cos y, егер y 1 2 y 2y 5 г) z, егер 1 y 4 y e 2 y 5 lg y, егер y 4 д) y x sin x, 2 x cos x, e 5x 1 егер егер lg x, егер x 2,4 егер x 0,4 x 1 ә) y x 2,4 мҧндағы 1 x 0,4 2 sin 2x 5x 61 x 17 4 x cos lg x y lg 2x, 4x егер x 2 x 2 2. Жазықтағы нҥктенің координаталары бойынша, оның қай ширекте жататындығын анықтайтын программа қҧрыңдар. 3. Жазықтықта ҥш нҥкте берілген: A(x 1,y 1 ), B(x 2,y 2 ) және С(х 3,у 3 ). Осы ҥш нҥкте арқылы ҥшбҧрыш қҧруға бола ма? Егер болса, Герон формуласын пайдаланып оның ауданын есептейтін программа қҧрыңдар , x, 3x, егер x 1,66 x 1,66 98

99 4. Квадрат теңдеуді шешу программасын қҧрыңдар (ах 2 +bx+c=0; a 0) 5.Ҥшбҧрыштың тӛбелері координаталар арқылы берілген: A(x 1,y 1 ), B(x 2,y 2 ), және C(x 3,y 3 ). Бҧл ҥшбҧрыш тең қабырғалы, тең бҥйірлі болатынын анықтау программасын қҧрыңдар. 6. Жазықтықта екі нҥкте N (x 1,y 1 ) және M(x 2,y 2 ) берілген. Бҧлардың қайсысы координаталар басына жақын болатынын анықтайтын программа қҧрыңдар. 7. Бҥтін n санын берілген, ол бҥтін m (m<n) санына қалдықсыз бӛлінетінін анықтайтын программа қҧру керек. 8. Егер берілген а саны жҧп болса, онда р атауына true, ал тақ болса false мәнін меншіктейтін программа қҧрыңдар. 9. Кез келген айдың бірінші жҧлдызы аптаның қай кҥні екені белгілі болғанда, сол айдың енгізілген кез келген кҥнінің аптаның қандай кҥні болатынын анықтау программасын қҧру қажет. 10. Апта кҥндерінің реттік нӛмірі бойынша олардың аттарын анықтайтын программа қҥру керек. 11. Нақты x, y ( x y ) берілген. Кішісін олардың жарты қосындысымен, ал ҥлкенін - екі еселенген кӛбейтіндісімен алмастырыңыз. 12. Ҥш нақты сан берілген. Теріс емес сандарды квадраттаңыздар. 13. Егер берілген нақты x, y, z сандарының қосындысы 1-ден кем болса, онда бҧл ҥш санның ең кішісін қалған екі санның жарты қосындысымен алмастырыңыз, кері жағдайда x және y-тің кішісін қалған екеуінің жарты қосындысымен алмастырыңыз. 14. Нақты a, b, c, d сандары берілген. Егер a<=b<=c<=d болса, онда әр санды ең ҥлкен санмен алмастырыңыз, егер a>b>c>d болса, садарды ӛзгеріссіз қалдырыңыз, кері жағдайда барлық сандарды олардың квадратымен алмастырыңыз. 15. Бҥтін x, y, z сандары берілген. Егер x y-ке қалдықсыз бӛлінсе және y z-ке қалдықсыз бӛлінсе, онда барлық сандарға 1-ді қосыңыз, кері жағдайда барлық сандарды нӛлге теңестіріңіз. 16. Нақты a, b, c, d сандары берілген. Осы сандардың терістерін квадраттап, ал оң сандарын тҥбірден шығарыңыз. 17. Нақты a, b, c, d сандары берілген. Егер кем дегенде бір сан нӛлге тең болса, ол жайлы экранға мәлімет шығарыңыз, кері жағдайда a-ның b-ға және c-ның d-ға қалдықсыз бӛлінетіндігін тексеріңіз. 18. Бҥтін a, b, c сандары берілген. Егер a<=b<=c болса, онда барлық сандарды олардың квадратымен алмастырыңыз; егер a>b>c болса, онда әр санды ең ҥлкен санмен алмастырыңыз, кері жағдайда барлық сандардың таңбасын кері таңбаға ауыстырыңыз. 19. Нақты x, y, z сандары берілген. max ( x + y + z, x*y*z ) + 10 ӛрнегін есептейтін программа жазыңыз. 20. Нақты x, y, z сандары берілген. max( x 2 + y 2, y 2 + z 2 ) 1 ӛрнегін есептейтін программа жазыңыз. 21. Бҥтін k, l, m сандары берілген. Нӛлге тең сандардың санын анықтаңыз. 22. Бҥтін k, l, m сандары берілген. Оң сандардың квадратының қосындысын есептеңіз. Егер бір де бір оң сан жоқ болса, ол жайлы экранға мәлімет шығарыңыз. 99

100 23. Бҥтін x және y сандары берілген. Егер екі санда жҧп болса оларға 1-ді қосыңыз; егер тек біреуі жҧп болса, онда олардың кӛбейтіндісін табыңыз; қалған жағдайда сандарды ӛзгеріссіз қалдырыңыз. 24. Ҥш сан берілген. Солардың ішінен [0;1] аралығына кіретіндерін анықтау керек. 25. Нақты x, y, z оң сандары берілген. Қабырғаларының ҧзындығы x, y, z-ке тең ҥшбҧрыш тҧрғызуға болатынын тексеріңіз. Сандарды енгізгенде олардың теріс емес және нӛлге тең емес екендігін де тексеру қажет. 26. Нақты x, y, z сандары берілген. min 2 ( x +y+z/2, x*y z ) + 1 ӛрнегін есептеңіз. 27. Бҥтін a, b, c, d сандары берілген. Нӛлге тең емес сандардың кӛбейтіндісін табыңыз. Егер барлық сандар нӛлге тең болса, экранға мәлімет шығарыңыз. 28. Бҥтін a, b, c сандары берілген. Тақ сандардың қосындысын табыңыз. Егер барлық сандар жҧп болса экранға мәлімет шығарыңыз. 29. Бҥтін a, b, c, d сандары берілген. Егер a>=b>=c>=d болса, онда барлық сандарды нӛлге теңестіріңіз; егер a<b<c<d болса, онда әр санды 1-ге ӛсіріңіз; қалған жағдайда әр санды 1-ге кемітіңіз. 30. Бҥтін x, y, z ( x y, x z, y z ) сандары берілген. Осы сандардың ең кішісін тауып, оның жҧп екендігін тексеріңіз мен 7 аралығындағы кез келген сан берілген. Осы санға сәйкес апта кҥнінің атын шығарыңыз (1 «дҥйсенбі, 2 «сейсенбі» және т.с.с.). 32. K бҥтін саны берілген. Осы санға сәйкес бағаның сипаттамасын шығарыңыз (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 аралығындағы бҥтін сан) және нақты A мен B (В 0) сандары берілген. Осы сандармен сәйкес амалды орындап, нәтижесін шығарыңыз. 36. Шеңбер элементтері келесі ретте нӛмірленген: 1 радиус (R), 2 диаметр (D = 2 R), 3 ҧзындық (L = 2 R), 4 шеңбер ауданы (S = R 2 ). Осы элементтердің бірінің нӛмірі және оның мәні берілген. Шеңбердің қалған элементтерінің мәнін берілген реті бойынша шығарыңыз. 100

101 10 ЦИКЛ ОПЕРАТОРЛАРЫ Цикл операторлары бірнеше рет қайталанатын есептеулерді орындау ҥшін қажет. Кез келген цикл сол цикл тҧлғасынан (денесінен), яғни қайталанатын операторлар тізбегінен, бастапқы мәндер тағайындаудан, цикл параметрлерін ӛзгертуден және циклді қайталау шартын тексеруден тҧрады (1.8 сурет). Циклдің бір рет орындалуы итерация (қадам) деп аталады. Шартты тексеру әрбір итерация сайын цикл тҧлғасына дейін (алғы шартты цикл) немесе цикл тҧлғасынан соң (соңғы шартты цикл) атқарылады. Олардың айырмашылығы соңғы шартты цикл, кем дегенде, бір рет орындалады да, содан кейін барып циклді қайталау шарты тексеріледі. Ал, алғы шартты циклде оны қайталау шарты цикл тҧлғасынан бҧрын тексеріледі, сондықтан кейде ол бір рет те орындалмай қалуы мҥмкін. Бастапқы мәндер Бастапқы мәндер Шарт? + Операторлар Операторлар Цикл параметрін ӛзгерту Цикл параметрін ӛзгерту + Шарт? а а ә б 10.1 сурет. Цикл операторларының қҧрылымдық схемасы: а алғы шартты цикл; ә соңғы шартты цикл Цикл тҧлғасында мәні ӛзгертілетін айнымалылар цикл параметрлері болып табылады. Тҧрақты қадаммен әрбір итерация сайын ӛзгертіліп отырылатын бҥтін типтегі цикл парараметрлері цикл санауыштары деп аталады. Бастапқы параметрлер мәндері айқын тҥрде берілмеуі де мҥмкін, олар циклге кіргенге дейін оның ішінде мәндері ӛзертілетін айнымалылардың алғашқы мәндерін беру ҥшін қажет. Цикл оны қайталау шарты орындалмаған кезде аяқталады. Цикл қадамының немесе жалпы циклдің аяғына жетпей, доғарылатын кездері болады, олар break, continue, return және goto операторлары кӛмегімен іске асырылады. Сырттан цикл ішіне басқаруды беру болмауы тиіс. С/C++ тілдерінде ыңғайлылығына қарай қолданылатын ҥш тҥрлі цикл операторлары бар, олар while, do while және for. 101

102 10.1 Алғы шартты цикл (while әзірше) Орындалу саны алдын ала белгісіз болатын циклдер қҧру кезінде шарттары алдын ала немесе соңынан тексерілетін екі цикл тҥрі бар. Шарты алдын ала тексерілетін цикл операторының орындалу схемасы 10.1а-суретте кӛрсетілген. Оның жазылуы: while (шарт-ӛрнек) оператор; Мҧнда шарт ретінде қатынас таңбалары кіретін шартты ӛрнек пайдаланылуы мҥмкін. Ӛрнек типі арифметикалық немесе соған келтірілетін тҥрде болуы тиіс. Оператор қарапайым немесе қҧрама болуы мҥмкін. Ол қҧрама оператор болса, онда операторлар жиыны жҥйелі жақшаға алынып жазылады. While операторы орындалғанда, алдымен жақша ішіндегі ӛрнек есептеліп тексеріледі. Егер ӛрнек мәні ақиқат болса немесе жалпы жағдайда 0-ге тең болмаса, онда оператор атқарылады. Содан соң жақшадағы ӛрнек тағы да есептеледі. Егер ӛрнек мәні жалған болса (немесе жалпы жағдайда 0-ге тең болса), онда while цикл операторы ӛз жҧмысын аяқтайды. Мҧнда шарт-ӛрнек қҧрамына кіретін айнымалы цикл ішінде ӛзгеріп отырады мысал (10.2 сурет). /* 1-ден 100-ге дейінгі бүтін сандар қосындысы */ #include <stdio.h> #include <conio.h> main () { int s,k; clrscr(); s=0; k=1; while (k<=100) { s+=k; k++; printf("s= %d",s); printf("\nаяқтау үшін Enter басыңыз\n"); getch(); басы s = 0 k = 1 k 100 иә s = s + k k = k+1 соңы 10.2-сурет. Бҥтін сандарды қосу алгоритмі 10.2 мысал. y=-2.4x 2 +5x-3 x функциясы мәндерін оның аргументі х 0 -ден х k -ға дейін қадамы dx болып ӛзгерген кездерде анықтау керек. Мҧнда программа С тілі стилінде жазылып, цикл алдында параметрге алғашқы мән меншіктеледі де, параметр цикл ішінде берілген қадамға ӛзгеріп отырады (4.6- сурет). Жалпы функция кез келген тҥрде беріле алады. Ол параметр мәніне байланысты тармақталып кететін функция да болуы мҥмкін. /* х тұрақты қадаммен х0-ден хk-ға дейін өзгергенде, функция мәндері кестесін алу, х0,хk,dx (қадам) пернелерден енгізіледі */ басы s жоқ 102 x 0,x k,dx енгізу х = x 0

103 #include <stdio.h> #include <math.h> #include <conio.h> main () { float x,y,x0,xk,dx; clrscr();/* экранды тазалау */ printf("х-тің бастапқы,соңғы мәндері: "); scanf("%f%f",&x0,&xk); printf("х-тің ӛзгеру қадамы dх: "); scanf("%f",&dx); printf(" \n"); printf(" x y\n"); printf(" \n"); x=x0; while (x<=xk) { y=-2.4*x*x+5*x-3*sqrt(fabs(x)); printf("%6.2f %6.2f\n",x,y); x+=dx; printf(" \n"); getch(); Келесі мысалда енгізілген num бҥтін санының барлық бӛлгіштері С++ тілі стилінде анықталады мысал. // Бүтін оң санның бӛлгіштерін анықтау #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; Программалауда жиі қолданылатын тәсілдердің бірі шексіз цикл ҧйымдастырып, одан белгілі бір шарт бойынша шығу болып табылады, ол ҥшін цикл басында while (true) немесе while (1) сӛздері жазылады. While тҥйінді сӛзінен кейінгі жақша ішіне циклде ғана қолданылатын айнымалыны сипаттауды жазып қоюға болады, мысалы: while (int x = 0) { /* x-тің пайдаланылу аймағы */ 103

104 10.2 Соңғы шартты цикл (do.. while) Шарты соңынан тексерілетін do.. while (орындау.. әзірше) циклінің орындалу схемасы 10.4-суретте кӛрсетілген. Осыған сәйкес оператордың жалпы жазылу тҥрі: do { 1-оператор; 2-оператор; n-оператор; while (ӛрнек); иә do 1-оператор 2-оператор n-оператор шарт while жоқ 10.4-сурет. Шарты соңынан тексерілетін цикл Цикл тҧлғасы ретінде қарапайым немесе қҧрама оператор қолданылуы мҥмкін. Жақшадағы ӛрнек цикл тҧлғасынан кейін тексеріледі. Сондықтан do while цикл тҧлғасы ең болмағанда бір рет орындалады. Цикл тҧлғасынан кейін жазылған ӛрнек ақиқат болса (яғни ол 0-ге тең болмаса), цикл тҧлғасы қайтадан орындалады. Ал ӛрнек жалған болса (немесе 0-ге тең болса), цикл аяқталады. Ӛрнек типі арифметикалық немесе соған келтірілетін типте болуы тиіс. Енді мысалдар келтірейік мысал. // Енгізілген сандардың үлкенін (максимумын) табу #include <stdio.h> #include <conio.h> main () { int a, max; clrscr(); printf("\n Сандар максимумын табу \n"); printf("аяқтау үшін 0 енгізіңіз \n"); max = ; // алдын ала максимумды ең кіші бүтінге теңейміз do { printf("сан енгізіңіз : "); scanf("%i",&a); if (a > max) max = a; while (a!=0); printf("сандардың максимумы: %i",m); getch(); 104

105 10.5 мысал. Келесі программада шексіз сандар қосындысын s i n i алдын ала берілгін дәлдікпен =10-5 анықтау керек, яғни келесі қосылатын қатар мҥшесі осы санынан кіші болғанда, қосынды табу аяқталады. #include <stdio.h> #include <conio.h> #define epsilon 1e-5 main () { int i; float a,s; clrscr(); s=0; i=1; do {a=1.0/i*i; s+=a; i++; while (a>epsilon); printf("s=%7.4f",s); getch(); 10.6 мысал. Тӛмендегі программада енгізілген бҥтін санның тақ немесе жҧп екендігі анықталады. /* Санның жұп екендігін анықтау */ #include <stdio.h> #include <conio.h> main () { int k; /* енгізілетін сан */ char symbol; textcolor(red); textbackground(white); clrscr(); printf("\n* Санның жұп/тақ екендігін анықтау *\n"); do {printf("\nбір бүтін сан енгізіңіз : "); scanf("%i",&k); printf("бұл %i саны -",k); if (k % 2 == 0) printf("жұп сан."); else printf("тақ сан."); printf("\nтағы да енгісесіз бе? Иә-'Y',Жоқ-'N':"); scanf("%s",&symbol); while ((symbol=='y') (symbol=='y')); 105

106 10.7 мысал. Бҧл программада енгізілген нақты аргумент x-тің тҥбірін берілген дәлдікпен eps жуық шамамен итерациялық формула арқылы анықтаймыз: у n = (у n-1 + x/y n-l ), мҧндағы y n-l тҥбірдің алдыңғы жуық мәні (есептеу алдында бҧл мән кез келген оң сан ретінде таңдалады), у n тҥбірдің келесі табылған жуық мәні. Есептеу процесі тҥбірдің анықталған екі жуық мәндері айырмасының абсолюттік мәні берілген дәлдіктен тӛмен болған сәтте тоқталады. Абсолюттік мәнді табу ҥшін стандартты fabs() функциясы қолданылады, ол <math.h> тақырыптық файлында анықталады. #include <iostream.h> // С++ тілі стилінде #include <math.h> int main(){ double x, eps; //аргумент пен дәлдік double Yp,Y=1; //түбірдің алдыңғы және келесі жуық мәндері cout << "Аргумент пен дәлдікті енгізіңіз: "; cin >> x >> eps; do{ Yp = Y; Y = (Yp + x/yp)/2; while (fabs(y - Yp) >= eps); cout << "\n Түбірдің жуық мәні: " << endl; return 0; 10.5-сурет мысал нәтижесі 10.3 For цикл операторы For операторы айнымалы ретінде берілген цикл параметрінің алғашқы, соңғы мәні мен ӛзгеру қадамы белгілі болғанда, соған сәйкес бір немесе бірнеше операторларды қайталап орындау кезінде қолданылады. Бҧл оператор параметрлі цикл операторы немесе арифметикалық цикл деп аталады. Параметрлі циклдің орындалу схемасы: For цикл операторының жалпы жазылу тҥрі: for (x=x0; x<=xk; x=x+dx) { <1-оператор>; <2-оператор>;... <n-оператор>; Мҧнда x=x0 цикл айнымалысының бастапқы мәні, x<=xk циклдің орындалу шарты, x=x+dx цикл айнымалысының қадамы. x=x0 цикл 106

107 операторы орындаларда бір рет есептеледі, x<=xk ақиқат болса немесе 0-ге тең болмаса, цикл тҧлғасы ретіндегі операторлар атқарылады. Содан соң x=x+dx есептеледі және x<=xk мәні қайта анықталады. x<=xk мәні жалған болса немесе жалпы жағдайда ол 0-ге тең болса, for операторының жҧмысы аяқталады. Сонымен цикл тҧлғасының келесі орындалуы немесе орындалмауы оның атқарылуы алдында анықталады. x = x0, xk, dx x > xk 1 оператор; x < = xk 2 оператор; n оператор; 10.8 мысал (10.7 сурет). /* 1-ден 100-ге дейінгі сандар қосындысын анықтау */ #include <stdio.h> #include <conio.h> main () { int s=0,i; clrscr(); printf("1-ден 100-ге дейінгі сандар қосындысы:"); for (i=1;i<=100;i++) s+=i; printf("s=%d",s); printf("\nаяқтау үшін Enter басыңыз\n"); getch(); 10.9 мысал. Бҥтін сандардың кӛбейтіндісін ӛрнектейтін n! мәнін, яғни n!=1*2*... n табу қажет. 107 басы s = 0 i = 1,100,1 s = s + i s соңы 10.7-сурет. Қосынды табу алгоритмі Бҧл алгоритмді қҧру барысында for операторының кері қарай есептейтін мҥмкіндігін пайдаланайық (10.8 сурет). #include <stdio.h> #include <conio.h> main () { int p=1,i; 10.6-сурет. For циклінің орындалу алгоритмі басы n енгізу p =1

108 int n; clrscr(); printf("n санын енгізіңіз де, Enter басыңыз:"); scanf("%d",&n); printf("1-ден n-ге дейінгі сандар кӛбейтіндісі:"); for (i=n;i>1;i--) p*=i; printf(" %d",p); getch(); мысал. /* х айнымалысы берілген алғашқы мәннен (х0) соңғы мәнге (хk) дейін тұрақты қадаммен (dx) ӛзгеріп отырғанда, у функциясының мәндерін анықтау */ #include <stdio.h> #include <conio.h> main () { float x,y,x0,xk,dx; clrscr(); printf("х-тің алғашқы,соңғы мәндері : "); scanf("%f%f",&x0,&xk); printf("х-тің ӛзгеру қадамы dх: "); scanf("%f",&dx); x=x0; printf(" \n"); printf(" x y\n"); printf(" \n"); for (x=x0;x<=xk;x+=dx) { y=-2.4*x*x+5*x-3; /* функция */ printf("%6.2f %6.2f\n",x,y); printf(" \n"); printf("\nаяқтау үшін Enter басыңыз"); getch(); i мысал. y қосындысын анықтау керек i 1 #include <stdio.h> 2 #define n 10 main () { int i; 108

109 float s=0; for(i=1,i<=n;i++) s+=i*i/2; printf( нәтиже= %f\n,s); For цикл операторындағы жақша ішіндегі соңғы ӛрнек ретінде жалпы дҧрыс жазылған кез келген ӛрнекті пайдалануға болады. Мысалы: for (d=0.1; d<50; d*=5) printf( %f,d); For цикл операторындағы жақша ішіндегі бір немесе бірнеше ӛрнектерді жазбауға да болады, бірақ мҧндайда ; символын міндетті тҥрде ӛз орындарына жазып отыру керек, мысалы: x=2; for(n=4; x<=100;) x=x*n; For цикл операторында қҧрама ӛрнектерді «,» операциясы арқылы жазуға да болады, «,» операциясы қҧрама ӛрнекті ҧйымдастыру ҥшін қолданылады. Осы операцияны қолданғанда, ҥтір арқылы бӛлектенген ӛрнектер сол жақтан оң жаққа қарай есептеледі. «,» операциясы цикл операторының тиімді болуы ҥшін жиі пайдаланылады. Мысалы: main () { int x,y; for (x=1,y=9;x<=10; x++,y--) printf( %d%d\n, x,y); Мҧнда алғашқы ; белгісіне дейін және соңғы ӛрнек арқылы осы цикл операторында екі параметр мәні беріліп (x=1,y=9;), олар x,y айнымалыларын ӛзгерту ҥшін қолданылып отыр. Күрделі циклдер Кейбір есептерді шығару ҥшін бірінің ішінде бірі жатқан күрделі деп аталатын қабаттаса орналасқан циклдерді пайдалануға тура келеді. Бҧндай программаларды қҧрғанда ішкі цикл толығымен сыртқы циклдің ішінде орналасуы қажет. Ішкі циклдің ӛзі де басқа ішкі циклдерді қамтуы мҥмкін. Кҥрделі циклдің қҧрылымын тӛмендегі мысалдан кӛруге болады мысал. x = 1,2,3 және y = 2,4,6,8 болған кездерде z = (2y+x)/lnx функциясы мәндерін есептейтін программа қҧру керек. 109

110 /* z=(2y+x)/ln(xy) функциясы мәндерін x=1,2,3 және y=2,4,6,8 болғанда табу керек */ #include <stdio.h> // С тілі стилінде #include <conio.h> #include <math.h> void lin() // сызық сызу функциясы { printf(" \n"); main() // басты функция { int x, y; float z; clrscr(); printf(" x y z\n"); lin(); for(x=1;x<=3;x++) { y=2; while(y<=8) { z=(2*y+x)/log(x*y); printf("%2d%4d%8.2f\n",x,y,z); y+=2; lin(); getch(); Программа нәтижесі: x y z мысал. Кӛбейту кестесін шығаратын программа қҧру керек. // Толық кӛбейту кестесі #include <iostream.h> // С++ тілі стилінде void lin(int n) // n сызықша сызу функциясы { for(int k=1; k<=n;k++) cout << '-'; 110

111 cout << "\n"; int main() // басты функция { cout << "\t\t\tкӛбейту кестесі << endl << " 1 \t2 \t3 \t4 \t5 \t6 \t7 \t8 \t9" << endl; lin(66); // кӛлденең 66 сызықша for (int i=1; i < 10; i++) { cout << i << " "; for (int j = 1; j < 10; j++) cout << j * i << '\t'; cout << endl; return 0; 10.4 Программаның орындалу тәртібін ӛзгерту операторлары С++ тілінде программа жолдарының, яғни есептеу процесінің табиғи реттілігін ӛзгертетін тӛрт оператор бар: шартсыз кӛшу операторы goto; циклден шығу операторы break; циклдің келесі қадамына кӛшу операторы continue; функциядан кері оралу, яғни қайту операторы return. Шартсыз кӛшу goto операторы Программаның орындалу реттілігін ешбір шартсыз ӛзгертетін goto операторының форматы; goto <белгі>; Программа ішінде осы белгі кӛрсетілген тӛмендегідей бір жол болуы тиіс: белгі: оператор; Бҧл оператор белгіленген жолға кӛшу әрекетін орындайды. Белгі осы функция (программа) ішінде пайдаланылатын қарапайым идентификатор. Жалпы дҧрыс (қҧрылымдық) программалау ережесі бойынша бҧл операторды қолданбауға тырысу керек. Ол программаны оқып тҥсіну ісін қиындатады. Бҧл операторды қҧрылымдық тәртіппен қҧрылған программа ішінде пайдалануға болмайды. Сондықтан оны барынша аз қолдануға тырысып, мыналарды есте сақтаған жӛн: оператор пайдаланылған жағдайда (онсыз программа қҧру мҥмкіндігі жоқта ғана), оны программа мәтіні бойынша тек тӛмен қарай кӛшу ҥшін пайдаланған жӛн; бҧл операторды кері қайту ҥшін қолдану қажет болса, шартты оператормен алмастыруға тырысу керек; белгі тҧрған орын мен кӛшу операторының арасы мәтін бойынша бір беттен (немесе дисплей экраны биіктігінен) аспауы тиіс. Goto операторын қолданған шақта оның қатарына жҥйелі жақша ішіне неліктен басқа қатарға кӛшу қажет екендігін тҥсіндіріп кету керек немесе оның орнына шартты кӛшу операторын пайдаланған абзал. Бҧл операторды цикл ішіне және if, switch операторларының ішіне кӛшу 111

112 ҥшін қолданбау қажет. int k = -4; goto belgi; {int a = 3, b = 4; k = a+ b; belgi: int m = k + 1; Break операторы Циклдің (немесе switch) қайталану саны аяқталмай-ақ, оның ішінен сыртқа (одан кейін орналасқан жолға) шығу ҥшін break операторы қолданылады мысал. Нақты х аргументінің гиперболалық синусын оны шексіз қатарға жіктейтін тӛмендегі формула арқылы есептейтін программа қҧрайық. sh х = 1 + х 3 /3! + х 5 /5! + х 7 /7! +... мҧндағы есептеу қатардың келесі мҥшесінің абсолюттік мәні берілген дәлдіктен - ε кіші болған сәтте тоқталады. #include <iostream.h> // С++ тілі стилінде #include <math.h> int main(){ const int MaxIter = 500; // итерация санын шектеу double x, eps; cout << "\nаргумент пен дәлдікті енгізіңіз: "; cin >> х >> eps; bool flag = true; // дұрыс есептеу белгісі double у = x, ch = x; // қосынды және қатардың 1-мүшесі for (int n = 0; fabs(ch) > eps; n++) { ch *= x*x/(2*n+2)/(2*n+3); // қатардың келесі мүшесі у += ch; if (n > MaxIter){ cout << "\nқосынды шексіздікке ұмтылады!"; flag = false; break; if (flag) cout << "\nфункция мәні: " << у; return 0; Continue операторы Цикл орындалуы кезінде оның атқарылып жатқан қадамы аяқталмай-ақ, қалған операторларды аттап ӛте отырып одан шығып, цикл параметрінің келесі мәніне кӛшу ҥшін continue операторы қолданылады, яғни циклдің келесі итерациясына қадамына басынан бастап ауысу жҥзеге асырылады мысал. Программаға 10 бҥтін сан енгізіп, солардың ішіндегі тақ сандар қосындысын анықтау керек. /* енгізілетін 10 бүтін сандар ішіндегі тақ сандар қосындысын табу */ 112

113 #include <iostream.h> // С++ тілі стилінде #include <conio.h> main() { int num, sum=0; clrscr(); for(int i=1;i<=10;i++) { cout <<"Бүтін сан енгізіңіз: "; cin >> num; if (num % 2 == 0) continue; sum+=num; cout << "\nенгізілген тақ сандар қосындысы: " << sum; getch(); Бақылау сұрақтары 1. Алғы шартты цикл операторының орындалу схемасы мен оның жазылуы. 2. while цикл операторының ішкі тұлғасы бір де бір рет орындалмауы мүмкін бе? 3. while цикл операторының шарты қатынас таңбаларысыз жазыла ма? 4. while цикл операторы қай кезде шексіз циклге айналады? 5. while цикл операторының тұлғасында оның шартына әсер ететін өрнектер жазыла ма? 6. Соңғы шартты do while циклінің орындалу схемасы мен жазылуы. 7. do while цикл операторының ішкі тұлғасы бір де бір рет орындалмауы мүмкін бе? 8. do while цикл операторының шартында қатынас таңбасы болмаса, оның ақиқат немесе жалған екенін қалай анықтауға болады? 9. do while цикл операторының ішкі тұлғасында шартсыз көшу операторын қолдануға бола ма? 10. Параметрлі циклдің орындалу схемасы мен жазылуы. 11. Параметрлі циклде «модификатор» блогын пайдалану ерекшеліктері. 12. Параметрлі цикл бір де бір рет орындалмауы мүмкін бе? 13. for операторының параметрі қандай типтерде бола алады? 14. for операторы параметрінің алғашқы мәні оның соңғы мәнінен кіші бола ма? 15. Параметрлі цикл операторының неше рет қайталанатынын алдын ала білуге бола ма, болса ол қалай анықталады? 16. for цикл операторындағы жақша ішіндегі бір немесе бірнеше өрнектерді жазбауға бола ма? 17. for цикл операторы нүктелі үтірмен аяқтала ала ма? 18. for цикл операторында қай кезде құрама операторлар қолданылады? 19. for цикл операторы қай кезде шексіз циклге айналады? 20. for цикл операторында бірнеше құрама өрнектерді үтір арқылы қалай жазуға болады? 113

114 21. Қабаттаса орналасқан циклдерді пайдаланудың ерекшеліктері. 22. goto операторы қай кездерде қолданылады? 23. Белгі дегеніміз не? 24. break операторы цикл соңына көшіре ала ма? Неге? 25. Циклдің келесі қадамына көшу операторының жұмысы. Ол қай кездерде пайдаланылады? Тапсырмалар 1. 1-ден N-ге дейiнгi сандардың қосындысын есептейтiн программа қҧрыңдар. N-нiң мәнi пернетақтадан енгiзiледi ден N-ге дейiнгi сандардың кӛбейтiндiсiн есептейтiн программа қҧрыңдар. N-нiң мәнi пернетақтадан енгiзiледi. 3. Пернетақтадан N сан енгiзiледi. Енгiзiлген сандардың iшiндегi терiс, оң сандардың және нӛлдердiң санын анықтайтын программа қҧрыңдар. 4. Ҧзындықтың 1-ден 20 дюймге дейiнгi мәндерiн сантиметрге (1 дюйм = 2,54 см) айналдыратын және оны экранға шығаратын программа қҧрыңдар. 5. Банктегi жылдық ӛсiмi 9 пайыздық (проценттiк) салымға S теңге салынды. N жылдан кейiн салынған ақша неше теңгеге жетедi? 6. Пернетақтадан 10 бҥтін сан енгiзiп, солардың квадраты мен кубын анықтаңыз дан 50-ге дейiнгi натурал сандар берiлген. Олардың iшiндегi 3-ке бӛлiнетiн, бiрақ 5-ке бӛлiнбейтiн сандарды анықтаңдар тен 87-ге дейiнгi натурал сандар берiлген. Олардың iшiнде 7-ге бӛлгенде, 1-ге, 2- ге немесе 5-ке тең қалдық қалатын сандарды табыңдар ден 50-ге дейiнгi натурал сандар берiлген. Олардың iшiндегi 5-ке немесе 7-ге бӛлiнетiн сандардың қосындысын табыңдар. 10. Пернетақтадан 10 сан енгiзiңдер. Егер олардың iшiнде 15-тен асқаны бар болса, онда оларды 15-пен алмастырыңдар. Сандарды экранға шығарыңдар. 11. Пернетақтадан он терiс және оң сан енгiзiңдер. Барлық терiс сандарды олардың модульдерiмен алмастырып сандарды экранға басып шығарыңдар. 12. Екi орынды сандардың iшiндегi 4-ке бӛлiнетiнiн, бiрақ 6-ға бӛлiнбейтiнiн табыңдар ке қалдықсыз бӛлінетін екi орынды тақ сандардың кӛбейтiндiсiн табыңдар ден 200-ге дейiнгi сандардың iшiндегi 17-ге қалдықсыз бӛлінетін сандардың қосындысын табыңдар. 15. Пернетақтадан 10 сан енгiзiңдер. Егер сан 100-ден кем болса, онда осы санды және оның квадратын табыңдар ден бастап ӛздерiң енгiзген бҥтiн n санына дейiнгi сандардың квадраттарының қосындысын есептейтiн программа қҧрыңдар ге дейінгі 5-ке бӛлгенде 4 қалдық қалатын сандар нешеу екенін табу керек ге дейінгі бҥтін сандардың 25-ке қалдықсыз бӛлінетін сандары нешеу екенін анықтаңдар дан ҥлкен және 100-ден кіші 3-ке қалдықсыз бӛлінетін оң сандардың қосындысын табу керек. 114

115 20. Берiлген а нақты және b бҥтін сандарының мәндерi бойынша а b ӛрнегiнiң мәнiн pow() функциясын пайдаланбай табатын программа жазыңдар. 21. Тӛмендегі есептерде бір ӛлшем бірлігін екінші ӛлшем бірлігіне тҥрлендіру қажет (цикл санауышы мәнi 1-ден 20-ға дейiн ӛзгередi): а) футпен берілген ҧзындық ӛлшемiн метрге (1 фут = 0,3048 м); ә) драхмды граммға (1 драхм = 3,7325 г; б) унцияны граммға (1 унция = 29,86 г); в) фунтты килограммға (1 фунт = 0,40951 кг); г) аршынды метрге (1 аршын = 0,7112 м); д) қадақты граммға (1 қадақ = 400 г); е) қарысты сантиметрге (1 қарыс = 18 см); ж) дюймдi миллиметрге (1 дюйм = 25,3995 мм). 22. Тӛмендегі функциялар мәндерін х айнымалысы х0-ден xk-ға дейін dx қадамымен ӛзгерген кезде анықтаңдар. 5sin x cos x, егер x 1 2 x 2x 5 а) z, егер 1 x 4 мҧндағы x 0 =-1, x k =5, dx =0.5 x e 2 x 5 lg x, егер x 4 ә) 2 2 sin 2x 5x, егер x 1,66 y 61 x 17 мҧндағы x 0 =0.5, x k =3, dx =0.5, егер x 1, x cos 4x б) y x sin x, егер x 0,4 2 x, егер 1 x 0,4 e 5x 1 lg x, егер x 1 мҧндағы x 0 =-2, x k =1, dx= Тӛмендегі жалпы мҥшесі берілген қатардың 10 мҥшесінің қосындысын табыңдар: а) n a n e ә) a n n n 3 n 2 n e б) an n 24. Жалпы мҥшесі тӛменгі ӛрнекке сәйкес қатар қосындысын =10-4 дәлдігімен анықтау керек. а) n 1 ( 1) 1 1 ә) a n n n a a n n n n ((3n 2)(3n 1 )) в) ( 2n 1) n an 10 n 2 г) an n! д) a n n! (2n)! n! 115

116 11 ЖИЫМДАР ЖӘНЕ НҰСҚАУЫШТАРДЫ ПАЙДАЛАНУ С/С++ тілдерінде негізгі типтерден бӛлек, солар арқылы жасалатын туынды типтерді де пайдалануға болады. Туынды типтердің ҥш тҥрі бар, олар: - берілген типтегі элементтер массиві немесе жиымы; - берілген типтегі объектіге нҧсқауыш; - берілген типтегі мән қайтаратын функция. Жиым немесе массив бір типтегі элементтердің реттелген жиыны. Жиымның әрбір элементіне компьютер жедел жадынан нақты орын беріледі. Бір жиым элементтері тізбектеле қатар тҧрған жады ҧяларында орналасады. Жиым элементтері саны оның ӛлшемі (ені) болып табылады. Компьютер жадынан орын бӛліп беру ҥшін жиымның ӛлшемін білу керек. Жиымға орын бӛліп беру программаны компиляциядан ӛткізу кезінде атқарылады С/С++ тілдерінде жиымды анықтау Жиым бір атаумен идентификатормен аталады да, индексті айнымалы ҧғымына сәйкес келеді. Мысалы, бҥтін сандардан тҧратын а 100 жиымы былай анықталады: int a[100];// бүтін типтегі 100 элементтен тұратын а жиымы мҧнда sizeof(a) операциясының мәні 400 болады, яғни әрқайсысы 4 байттан тҧратын 100 элемент. Жиым элементтері 0-ден бастап нӛмірленеді Жиым элементін пайдалану ҥшін оның нӛмірін (индексін) кӛрсету керек: a[0] индекс константа тҥрінде берілген, a[55] индекс константа тҥрінде берілген, a[i] индекс айнымалы тҥрінде берілген, a[2*i] индекс ӛрнек тҥрінде берілген. Мысалы, мынадай тізбек Фибоначчи тізбегінің 9 элементін қҧрайды (алғашқы екі санды таңдап алып, келесі санды алдыңғы екеуін қосу жолымен алады). Ал мынау ӛзіне және бірге бӛлінетін жай сандар тізбегінің алғашқы 7 элементі: Осындай бір текті тізбектерді жиым тҥрінде сипаттап, оған бастапқы мән беріп инициалдау ҥшін былай жазамыз: int fib[8]={0, 1, 1, 2, 3, 5, 8, 13, 21; немесе int fib[]={0, 1, 1, 2, 3, 5, 8, 13, 21; деп кӛрсетеміз. мҧндағы fib жиым аты, оның элементтерінің типі int, ал ені, яғни ҧзындығы 9, жиым элементтерінің индекстері 0-ден бастап нӛмірленеді, сол себепті 9 элемент 8 индекспен кӛрсетіледі. Мәндері толық кӛрсетілсе, 116

117 индексті жазбаса да болады. Ал былай болса, int fib[8]={0, 1, 2, 3; n=10; k=2; fib[n-k]={0, 1, 2, 3; қалған элементтері 0 болып саналады. 117 десе де болады. Жоғарыдағы тізбектің 7-ші элементін бір бҥтін айнымалыға меншіктеу ҥшін былай жазамыз. int а = fib[6]; // а = 8 Жиымды сипаттау кезінде оның ені нақты санмен кӛрсетіледі, мыс., a[20], ал индексті a[n] деп жазу ҥшін алдын ала #define n 20 const n=20; жолы кӛрсетіледі немесе болып жазылады Бір ӛлшемді жиымдарды ӛңдеу Жиым элементтерін енгізу немесе оларды тҥрлендіру ҥшін цикл операторлары қолданылады. Тӛменде 10 элементі бар жиымды 0-ден 9-ға дейінгі сандармен толтырып, сонан кейін оларды кері бағытта экранға шығару мысалы кӛрсетілген:... main () {int ia[10]; int index; for (index = 0; index < 10; index ++) ia[index] = index; for (index = 9; index >= 0; index --) printf(" %i", ia[index]); С/С++ тілдерінде жиымды жиымға бірден теңестіруге болмайды, мысалы, а 0, а 1, а 2,..., а 9 және с 0, с 1, с 2,..., с 9 жиымдары ҥшін а = c деп жазуға рҧқсат етілмейді. Олардың элементтерін цикл ішінде бір-біріне біртіндеп теңестіру керек. Мысалы, мынадай цикл жазылуы тиіс: int a[10], c[10]; for (int i=0; i<9; ++i) a[i]=c[i]; 11.3 Ұзындығы ӛзгермелі динамикалық жиымдар Жиымды сипаттау кезінде міндетті тҥрде оның элементтері санын кӛрсету керек. Сол арқылы компилятор компьютер жадынан оған керекті орын бӛледі. Бҧл онша ыңғайлы емес, ӛйткені жиымдағы элементтер саны есепке

118 байланысты ӛзгеріп отыруы мҥмкін. Сондықтан С/С++ тілінде ҧзындықтары ӛзгеріп отыратын динамикалық жиымдар қарастырылған (олар тӛменде айтылған). Ал динамикалық жиымға ҧқсас мҥмкіндікті былай да жҥзеге асыруға болады: 1) жиымды анықтау кезінде оған компьютер жадынан артығымен орын бӛлінеді, мысалы: const int n = 100; // ат қойылған константа int b[n]; 2) программалаушы жҧмыс барысында жиым элементтері санын n-нен аз етіп алады. int m; // С тілінде printf("\njyim elementteri sani: "; scanf("%d", &m); немесе int m; // С++ тілінде cout << "\nenter the size of array" << m << ":"; cin >> m; 3) мҧнан кейінгі жҧмыс жиымның осы m элементімен ғана орындалады, m n яғни жиымның тек белгілі бір бӛлігі ғана (m<n) пайдаланылады Жиымды толтыру үшін кездейсоқ сандарды пайдалану С/С++ тілдерінде кездейсоқ сандар беретін функциялар бар. Олар: int rand() 0..RAND_MAX аралығынан кез келген кездейсоқ бҥтін сан береді, мҧндағы RAND_MAX константасы (бас әріптемен жазылуы тиіс) ең ҥлкен бҥтін санға ге тең болып саналады; int random(n) функциясы 0..n аралығынан кез келген кездейсоқ бҥтін сан береді, мҧндағы n кез келген бҥтін сан. Осы функцияларды пайдалану <stdlib.h> тақырып файлы арқылы орындалады мысал: //a[n] жиымына кездейсоқ сандар енгізу #include <conio.h> #include <stdio.h> #include <stdlib.h> void main() { int a[100]; int n; printf("\nenter the size of array:", n); scanf("%i",&n); for(int I=0;I<n;I++) {a[i]=rand()%100-50; // аралығындағы // оң және теріс сандар алу 118

119 printf(" %i ", a[i]); // жиым элементтерін // экранға шығару getch(); 11.5 Жиымды ӛңдеу есептерінің түрлері (кластары) Жиымды ӛңдеу есептері кӛбінесе бірыңғайланған тӛрт тҥрге бӛлінеді. 1) Есептердің 1-тҥріне жиым элементтерінің барлығын немесе кӛрсетілгендерін бірдей бір тәсілмен ӛңдеу есептері жатады. 2) Есептердің 2-тҥріне (класына) жиым элементтерінің орналасу реттілігін ӛзгерту тәсілдері жатады. 3) Есептердің 3-класына бірнеше жиымдарды қатар ӛңдеу немесе бір жиымның ішкі элементтерін бірнеше топқа бӛліп жеке-жеке ӛңдеу тәсілдері жатады. Жиымдар бір тәсілмен синхронды ӛңделеді немесе әр тҥрлі тәсілмен асинхронды тҥрде ӛңделеді. 4) Есептердің 4-класына жиымның берілген санға тең бірінші элементін табу, яғни іздеу есептері жатады түрдегі есептер 11.2 мысал. Бҥтін сандардан тҧратын а 10 жиымының ең ҥлкен элементін максимумын және оның индексін анықтау керек. /* Жиым максимумын табу */ #include <conio.h> #include <stdio.h> #define n 10 main() { int i,t,a[n]={6,5,9,8,7,4,1,2,3,0,max; textcolor(blue); // мәтін түсі кӛк textbackground(yellow); // экран түсі сары clrscr(); printf("a[10] элементтерi : "); for (i=0; i<n; i++) printf(" %d ",a[i]); max=a[0]; t=0; // max - максимум, t - оның индекci for (i=1; i<n; i++) if (a[i] > max) {max = a[i]; t=i; printf("\nmax = %d, индексi = %d\n", max, t); getch(); 11.3 мысал. Жиымның жҧп индексті элементтері қосындысын анықтау. /* 0, 2, 4... индексті элементтер қосындысын табу */ #include <conio.h> #include <stdio.h> 119

120 #include <stdlib.h> void main() { int a[100]; int n; printf("\nenter the size of array:", n); scanf("%i",&n); for(int I=0;I<n;I++) {a[i]=rand()%100-50; printf(" %i ", a[i]); int Sum=0; for(i=0;i<n;i+=2) Sum+=a[I]; printf("\nsum= %i ", Sum); getch(); Соңғы циклді басқаша да қҧрастыруға болады: // Екінші тәсіл for(i=0;i<n;i++) if(i%2==0) Sum+=a[I]; printf("\nsum= %i ", Sum); түрдегі есептер Жиым ішіндегі екі элементтің бір-бірімен орнын ауыстыру ҥшін қосымша тағы бір айнымалы керек болады. Мысалы, a[i] және a[j] элементтерінің орнын ауыстыру ҥшін қосымша R айнымалысы керек: R=a[I]; a[i]=a[j]; a[j]=r; Жиым элементтерін кері бағытта орналастыру былай орындалады: for(int i=0, j=n-1; i<j; i++, j--) {int r=a[i]; a[i]=a[j]; a[j]=r; 11.4 мысал. Жиымның қатар тҧрған екі элементін: 1 және 2, 3 және 4, 5 және 6, т.с.с. элементтерін бір-бірімен орын ауыстыру есебі: for(int i=0;i<n-1;i+=2) {int r=a[i]; a[i]=a[i+1]; a[i+1]=r; 11.5 мысал. Жиым элементтерін k орынға солға (оңға) ығыстыру, яғни жылжыту. int k,i,t,r,n; printf("k = "); skanf("%d",&k); for(t=0;t<k;t++) { r=a[0]; for(int i=0; i<n-1; i++) a[i]=a[i+1]; a[n-1]=r; 120

121 класс есептері Жиымдарды синхронды тҥрде ӛңдеуде жиымдар элементін қарастыру кезінде индекстер бірдей қадамға ӛзгереді. Мысалы, бҥтін сандардан қҧралған n элементтерден тҧратын 2 жиым берілген делік. Жаңа c жиымы мынадай формула арқылы алынады: c[i]=a[i]+b[i]. for (int I=0; I<n; I++) c[i]=a[i]+b[i]; Жиымдарды асинхрондық ӛңдеу кезінде әр жиым индексі ӛз реттілігімен ӛзгеріп отырады мысал. Бҥтін сандардан қҧралған жиымдағы теріс элементтердің барлығын оның бас жағына орналастыру керек. int b[10]; //қосымша жиым int i,j=0; for(i=0;i<n;i++) if(a[i]<0){b[j]=a[i];j++; // а-дан b-ға теріс элементтерді кӛшіріп жазу for(i=0;i<n;i++) if(a[i]>=0){b[j]=a[i];j++; // а-дан b-ға оң элементтерді кӛшіріп жазу for(i=0;i<n;i++) printf (" %d ", b[i]); 11.7 мысал. Жиымның барлық жҧп элементтерін жою керек. int b[10]; int i,j=0; for(i=0;i<n;i++) if(a[i]%2!=0){b[j]=a[i];j++; for(i=0;i<j;i++) printf (" %d ", b[i]); printf ("\n"); класс есептері Іздеу есептерінде берілген шартқа сәйкес келетін элементті іздеп табу керек. Ол ҥшін жиым элементтерін біртіндеп тізбектей қарастырып отырып шартты тексеріп шығу қажет. Осылай ету барысында циклден шығудың екі жолы бар: - керекті элемент табылғаннан кейін; - жиым элементтері тегіс қаралып шықты, керекті элемент табылмады мысал. Берілген k санына тең жиымның алғашқы элементін табу. int k; printf("\nk="); scanf("%i",&k); int ok=0;//элемент табылғаны/табылмағаны белгісі int i,nom; for(i=0;i<n;i++) if(a[i]==k){ok=1;nom=i;break; if(ok==1) printf("\nnom=",nom); else printf("\nk-ға тең элемент жоқ!"); 121

122 11.6 Жиымды сұрыптау (іріктеу, реттеу) Сҧрыптау берілген объектілер жиынын (сандарды) ҧсынылған реттілікпен қайта теріп орналастыру процесі. Жиымдарды сҧрыптау жылдамдығы әр тҥрлі болады. Қарапайым сҧрыптау тәсілдері n*n рет салыстыруды керек етеді, мҧндағы n жиым элементтері саны; ал жылдам сҧрыптау тәсілі n*ln(n) рет салыстыруды қажет етеді. Қарапайым тәсілдер тҥсінуге жеңіл, ӛйткені алгоритмі тҥсінікті. Кҥрделі тәсілдер аз әрекеттер санын керек еткенмен, операциялары кҥрделірек болады, сондықтан элементтер саны аз жиымдарға қарапайым тәсілдерді қолданған дҧрыс. Қарапайым тәсілдер 3 топқа бӛлінеді: - жай таңдау жолымен сҧрыптау; - жай енгізу тәсілімен сҧрыптау; - жай алмастыру тәсілімен сҧрыптау Жай таңдау жолымен сұрыптау Жиымның ең кіші элементі анықталады да, ол бірінші элементпен орын ауыстырады. Қалған элементтермен де осы тәсіл қайталанады минимум int i,min,n_min,j; for(i=0;i<n-1;i++) { min=a[i];n_min=i; // минимумды іздеу for(j=i+1;j<n;j++) if(a[j]<min) { min=a[j];n_min=j; a[n_min]=a[i]; //алмастыру a[i]=min; Жай енгізу (кірістіру) тәсілімен сұрыптау Жиым элементтері екіге бастапқы тізбекке және дайын тізбекке бӛлінеді. Әрбір адымда I=2 нӛмірінен бастап, бастапқы берілген тізбектен I-ші элемент алынады да, ол дайын тізбектің керекті жеріне орналастырылады. Мҧнан кейін I-ге 1 қосылады да, сол әрекеттер қайталанады дайын тізбек бастапқы тізбек Керекті орынды іздеу кезінде оң жақтағы келесі элементпен орын ауыстыру қарастырылады, яғни таңдалып алынған элемент сҧрыпталғандардың J=I-1 нӛмірінен басталатын кезекті элементімен салыстырылады. Егер таңдалып алынған элемент a[i]-ден артық болса, онда ол сҧрыпталғандар ішіне қосылады, әйтпесе a[j] бір орынға ығысады да, таңдалған элемент сҧрыпталғандар ішіндегі келесі элементпен салыстырылады. Керекті орынды іздеу әрекеті екі жағдайда: 122

123 - егер a[j]>a[i] болатын элемент табылса; - дайын тізбектің сол жақ шетіне жеткен кезде аяқталады. Мысалы: int i,j,x; for(i=1;i<n;i++) { x=a[i];//ауысатын элементті есте сақтау j=i-1; while(x<a[j]&&j>=0) //керекті орынды іздеу { a[j+1]=a[j]$ //оңға жылжыту j--; a[j+1]=x;//элементті кірістіріп қою Жай алмастыру арқылы сұрыптау Мҧнда ең соңғыдан бастап, екі элемент салыстырылады да, қажет болса, орындары алмастырылады. Осындай әрекет нәтижесінде ең кіші элемент жиымның ең сол жақ шетіне ығысады. Қалған жиым элементтері ҥшін де осы процесс қайталанады for(int i=1;i<n;i++) for(int j=n-1;j>=i;j--) if(a[j]<a[j-1]) {int r=a[j];a[j]=a[j-1];a[j-1]=r; 11.9 мысал. Бҥтін оң және теріс сандардан тҧратын a[n] жиымының жҧп нӛмірлі элементтерінің қосындысын табу керек, мҧнда n саны енгізіледі, ал жиым элементтерінің мәндері кездейсоқ бҥтін сандардан тҧрады. rand() функциясы аралығындағы бҥтін сан береді. Оны пайдалану ҥшін stdlib.h директивасын, яғни тақырып файлын қолдану қажет. Жиым элементтері екі разрядты оң және теріс сандардан тҧруы ҥшін алынған кездейсоқ сан 100-ге бӛлініп, қалдығынан 50 алып тасталынған (11.1- сурет). /*жиымның жұп элементтерi қосындысы*/ #include <stdio.h> #include <stdlib.h> #include <conio.h> main() { int a[50]; int n; printf("\nжиымда неше элемент бар?"); 123

124 scanf("%d",&n); printf("жиым элементтерi:\n"); for(int i=0;i<n;i++) { a[i]=rand()%100-50; /* жиымға 0-50 аралығындағы кездейсоқ сандарды меншiктеу */ printf("%d, ",a[i]); // сандарды экранда бейнелеу int sum=0; for(i=0;i<n;i+=2) sum+=a[i]; // 0, 2, 4... индекстi элементтердi қосу printf("\nжиымның жұп элементтерi қосындысы: %d",sum); getch(); // нәтижелiк экранды жапқызбай, мҥмкiндiк беру басы n енгізу i=0; i<n; i++ i=i+1 a[i]=rand() % sum=0 i=0; i<n; i+=2 sum=sum+a[i]; sum соңы 11.1-сурет. Жиымның жҧп элементтерін қосу кӛруге мысал. Бҥтін сандардан қҧралған А(10) бір ӛлшемді жиымы берілген. Сол жиым элементтерінің арифметикалық ортасын табу керек (11.2 сурет). /* А[10] жиымынын арифметикалық ортасын табу */ #include <conio.h> #include <stdio.h> #define n 10 main () {int i=0,s=0; int a[n]; textcolor(red); // экран символдары кызыл тустi textbackground(green); // экран фоны жасыл тҥстi clrscr(); printf ("Жиым элементтерiн - 10 сан енгiзiңiз:\n"); while (i<n) { printf("a[%i]=",i); scanf("%i",&a[i]); s=s+a[i]; i=i+1; Басы n = 10; i = 0; s = 0; i < n иә a[i] енгізу s=s+a[i]; i=i+1; s/n Соңы жоқ 11.2-сурет. Жиымның арифметикалық ортасын анықтау 124

125 printf("жиым арифметикалық ортасы : %5.2f",(float)s/n); printf("\nаяқтау yшiн Enter басыңыз"); getch(); мысал. Нақты сандардан тҧратын А[15] жиымы берілген. Жиымның оң элeменттерінің геометриялық ортасын анықтау керек. N санның геометриялық ортасы мынадай ӛрнекпен анықталады: n g a a a n /* Нақты сандардан тұратын A[15] жиымының оң элементтерiнiң геометриялық ортасын табу керек */ #include <conio.h> #include <stdio.h> #include <stdlib.h> #define n 15 main () {int i; float a[n]; randomize(); // кездейсоқ сандарды ӛзгертіп отыру функциясы textcolor(magenta); textbackground(white); clrscr(); printf("\nжиым элементтері:\n"); for(i=0;i<n;i++) {a[i] = (float)(rand() % )/10; printf(" %5.1f",a[i]); // кӛбейтінді мен оң элементтердің // санын табу i=0; // бастапқы индекс = 0 float p=1; // оң элементтер кӛбейтіндісі int k=0; // оң элементтер саны do { if (a[i]>0) { k++; p*=a[i]; i++; while (i<n); printf("\nоң элементтер саны : %d\n",k); p=pow(p,1.0/k); printf("геометриялық орта = %f",p); getch(); 125

126 11.12 мысал. Берілген жиым элементтерін х 10 сол жиымда ӛсу реті бойынша орналастыру керек (11.3 сурет). #include <stdio.h> #include <stdlib.h> #include <conio.h> main() { int xmin,x[10]; int n,k,i; clrscr(); printf("\nберілген жиым элементтері:"); for (k=0; k<10; k++) { x[k] = rand() % 100; /* ге дейінгі кездейсоқ сандар */ printf(" %i",x[k]); for (k=0; k<9; k++) { xmin=x[k];n=k; for (i=k+1; k<10; k++) if (x[i] < xmin) { xmin=x[i]; n = i; x[n]=x[k]; x[k]=xmin; printf("\nреттелген жиым элементтері:"); for (k=0; k<10; k++) printf(" %i",x[k]); getch(); 11.7 Адрестік операциялар Адрестік операциялар ҥшін С/С++ тілінде екі арнайы оператор қолданылады. & адресті анықтау ҥшін қолданылатын операция; жоқ Басы х енгізу k=0,9,1 x min = x k n = k i=k+1,10,1 x i < x min иә x min = x i n = i x n = x k x k = x min х-ті шығару соңы 11.3-сурет. Жиым элементтерін ӛсуі бойынша реттеу * адрес арқылы қатынас жасау ҥшін қолданылатын операция. & операциясы берілген айнымалының адресін қайтарады. Мысалы, программа мәтінінде sum айнымалысы былай сипатталған болсын: int sum; онда &sum жазуы осы айнымалының компьютер жадындағы орналасқан ҧясының адресі болып табылады. 126

127 Нұсқауыштар. Нҧсқауыш мәліметтердің адресін сақтайтын айнымалы болып табылады. Жалпы алғанда, нҧсқауыш адрестің символдық кескінделуі болып саналады. Қарастырылатын мысалда &sum sum атты айнымалыға сілтейтін нҧсқауыш болып табылады. Нақты адрес ретінде белгілі бір сан тҧрады, ал &sum нҧсқауыш типті константа болып табылады. С/С++ тілінде нҧсқауыш типті айнымалылар да бар. Нҧсқауыш типті айнымалылар мәні болып белгілі бір шаманың адресі саналады. Мысалы, нҧсқауыш типті айнымалы ptr идентификаторы арқылы белгіленген болсын, онда тӛмендегі оператор sum айнымалысының адресін ptr атты нҧсқауыш типті айнымалыға меншіктейді. ptr атты нҧсқауыш типті айнымалы басқа да объектіге сілтеуі мҥмкін. Мысалы: int *ptr; ptr= ptr=&max; * операциясы адрес арқылы қатынас жасау ҥшін пайдаланылатын операция. Мысалы, ptr нҧсқауыш типті айнымалысында max айнымалысына нҧсқайтын сілтеме сақталған болсын. Осы айнымалының мәнін білу ҥшін * адресі бойынша қатынас жасау операциясын қолдануға болады. ptr нҧсқауышы мәнін анықтау ҥшін келесі операцияны орындау қажет: res=*ptr; Нұсқауышты сипаттау. Нҧсқауыш типті айнымалыны сипаттағанда берілген нҧсқауыш қандай типті айнымалыға сілтейтінін кӛрсету қажет. Ӛйткені әр тҥрлі типті айнымалыға ЭЕМ жадында ҧялардың әр тҥрлі саны бӛлініп беріледі. int *iptr; char *сptr; float *fptr; Функциялар арасында байланыс жасау үшін нұсқауыштарды пайдалану мысал. Бҧл программада айнымалының мәндерін ауыстыру ҥшін нҧсқауыштар пайдаланылған: #include <stdio.h> #include <conio.h> void change (int *u, int *v) { int temp; temp = *u; *u = *v; *v = temp; main () { int x=5, y=10; clrscr(); 127

128 printf ("x=%d y=%d\n",x,y); change (&x,&y); printf ("x=%d y=%d\n",x,y); getch(); Нәтижесі: x=5 y=10 x=10 y= Жиымдар және жиымдарға қолданылатын нұсқауыштар Жиымдарды сипаттағанда, элементтер типі және жалпы жағдайда компьютер жадының қажетті класы кӛрсетіледі. Қарапайым айнымалыларда қарастырылатын қасиеттер жиымдарды да сипаттау кезінде қолданылуы мҥмкін. Мысалы: int b[30]; main() { float a[30]; static char c[20]; extern b[];... Жиымдарды инициалдауды қарастырайық. Жиым сипатталуында тек сыртқы немесе статистикалық жиымдар ғана инициалдануы мҥмкін. Мысалы, 8 топтағы студенттер саны stud[8] жиымы ретінде кӛрсетілген: #include <conio.h> #include <stdio.h> int stud[8]={15,16,14,18,15,20,17,19; main() { int i; clrscr(); extern int stud[]; for (i=0; i<8; i++) printf("n %i тобында %i студент\n", i+1,stud[i]); Жиымның нҧсқауыштарын қарастырайық. Мысалы: int *а; Жиым аты нҧсқауышты қолданған жағдайда, жиымның 0-ші элементін анықтайды, яғни а жиымы сипатталған болса, программа мәтініндегі a идентификаторы 0-ші элементті кӛрсетеді деп саналады: 128

129 a == &a[0]; бҧл теңдеудің екі бӛлігі де a да және &a[0]де жиымның 0-ші элементінің адресін анықтайды. Осы екі белгілеу де нҧсқауыш типті константа болып табылады. Сондықтан оларды мән ретінде нҧсқауыш типті айнымалыға меншіктеуге болады немесе қажет болса, нҧсқауыш типті айнымалының мәнін ӛзгертуге болады мысал. Нҧсқауыштың мәніне санды қосуға болатынын кӛрсететін программа қарастырайық. main() { int a[4], *pti, i; float b[4], *ptf; pti=a; ptf=b; for (i=0; i<4; i++) printf("нұсқауыштар +% d: %8u %10u\n",i,pti+i, ptf+i); Мҧның нәтижесі: нұсқауыштар + 0: нұсқауыштар + 1: нұсқауыштар + 2: нұсқауыштар + 3: Келесі мысалды қарастырайық. (a+2)==&a[2]; *(a+2)==a[2]; Бҧлар нҧсқауыштар мен жиымның арасындағы байланысты анықтайды, яғни жиымның жеке элементін анықтау ҥшін немесе оның мәнін пайдалану ҥшін нҧсқауышты қолдануға болады Нұсқауыштарды пайдаланып жиымдармен жұмыс істеу Жиымдарды функция арқылы қарастырып, содан кейін осы функцияны нҧсқауыштарды пайдаланып жазып шығу керек болсын мысал. Функция арқылы жиым қосындысын табу. // функция арқылы жиым қосындысын табу #include <conio.h> #include <stdio.h> int f1(int a[], int t) 129

130 { int i,sum=0; for (i=0; i<t; i++) sum+=a[i]; return (sum); main() { int i,s,b[10]={5,6,14,12,30,5,9,7,15,5; clrscr(); s=f1(b,10); printf("s=%d",s); getch(); Негізгі программада f1 функциясын шақыру ҥшін нақты параметрлерді жазып, функция келесі тҥрде шақырылып отыр: f1(b,10); мысал. Нҧсқауышты функцияда (f1) пайдалану программасын жазайық. // функцияда нұсқауыш арқылы жиым қосындысын табу #include <conio.h> #include <stdio.h> int f1(int *pa, int t) { int i,sum=0; for (i=0; i<t; i++) sum+=*(pa+i); return (sum); main() { int i,s,b[10]={5,6,14,12,30,5,9,7,15,5; clrscr(); s=f1(b,10); printf("s=%d",s); getch(); программада осы f1 функциясын шақыру ҥшін, нақты параметрлер бҧрынғыдай жазыла береді: f1(b,10); Нұсқауыштарға қолданылатын операциялар С/С++ тілінде нҧсқауыш типті айнымалыларға бес негізгі оператор қолдануға болады: 1. меншіктеу операциясы. Нҧсқауышқа адресті меншіктеуге болады. Жиымның атын қолданып немесе адресті анықтайтын & операторын пайдаланып, әдетте адресті меншіктеуге болады; 130

131 2. мәнді анықтау. Берілген адрес бойынша кейбір ҧяшықта сақталатын мәнді анықтау ҥшін * операциясы қоланылады; 3. нҧсқауыштың адресін анықтау. Кез келген айнымалылар сияқты нҧсқауыш типті айнымалылар мәні немесе адресі болуы мҥмкін. & операциясы арқылы нҧсқауыштың адресін анықтауға болады; 4. нҧсқауыштарды арттыру. Бҧл амал әдеттегі + операциясы кӛмегімен немесе арттыру операциясы арқылы орындалуы мҥмкін. Нҧсқауышты арттырып, жиымның келесі элементіне ӛтуге болады (қажет болса, нҧсқауыш мәнін кемітуге де болады); 5. нҧсқауыштардың айырмасы. Бір жиымның элементіне сілтейтін нҧсқауыштың айырмасын табуға болады. Жиым элементінің арасындағы ара қашықтығын анықтау ҥшін нҧсқауыштың айырмасын есептеуге болады мысал. /* Жиымның максимумын тауып, одан кейінгі элементтерін кемуі бойынша реттеп орналастыру */ #include <conio.h> #include <stdio.h> #include <math.h> #define n 10 main() { int i,j,t,c; int a[n]={6,5,9,8,7,4,1,2,3,0; int *pa,max; clrscr(); printf("a[10] элементтерi : "); for (i=0; i<n; i++) printf(" %d ",a[i]); pa=a; max=*pa; t=0; //максимум мен оның индексін табу for (i=1; i<n; i++) if((*(pa+i)) > (max)) {max = *(pa+i); t=i; printf("\nmax = %d оның индексі = %d\n", max, t); for (i=t; i<n-1; i++) // элементтерді кемуі бойынша for (j=i+1; j<n; j++) // реттеу if(*(pa+i) < *(pa+j)) { c=*(pa+i); // жиымның 2 элементін алмастыру *(pa+i)=*(pa+j); *(pa+j)=c; printf("\nнәтиже : "); for (i=0; i<n; i++) printf("%d ", *(pa+i)); getch(); 131

132 11.11 Динамикалық айнымалылар Программада жарияланған барлық айнымалылар мәліметтер сегменті (64Кбайт) деп аталатын жедел жадының ҥздіксіз бір аймағында орналасады. Мҧндай айнымалылар программа орындалуы барысында ӛз кӛлемін ӛзгертпейді де, статикалық айнымалылар деп аталады. Жиымдардың кӛлемі ҥлкен болған жағдайда, мәліметтер сегментіне олар сыймай қалуы мҥмкін. Осындай сәттерде динамикалық жады қолданылады. Динамикалық жады бҧл программаға мәліметтер сегментінен тыс бӛлініп берілген стек (тізбекті) тҥріндегі жады, онда программаның және оның ішкі функцияларының жергілікті айнымалылары орналасады. Динамикалық жадымен жҧмыс істеу ҥшін нҧсқауыштар қолданылады. Солар арқылы динамикалық айнымалы деп аталатын динамикалық жады мәліметтерін қолдануға болады. Динамикалық айнымалылар арнайы функциялар мен операциялар кӛмегімен жасалады. Олар программа жҧмысы аяқталғанша немесе арнайы функциялар мен операциялар арқылы жойылғанша қолданылады. С/С++ тілдерінде динамикалық айнымалыларды қолдану (жасау) ҥшін new операциясы қоланылады: нұсқауыш = new тип_аты[инициализатор]; мҧндағы инициализатор жай жақшадағы ӛрнек. new операциясы берілген типке сәйкес динамикалық жадыны пайдалануға мҥмкіндік береді. Егер инициализатор берілген болса, онда осы жады аймағына инициализаторда кӛрсетілген мән жазылады. int *x=new int(5); Динамикалық айнымалыларды жою (ӛшіру) ҥшін delete операциясы қолданылады: delete нҧсқауыш; мҧндағы нҧсқауыш бҧрын new операциясы арқылы бӛлінген жады аймағының адресін кӛрсетеді. delete x; С/С++ тілінде динамикалық жадымен жҧмыс істеуді анықтайтын кітапханалық функциялар анықталған, олар <stdlib.h> тақырып файлында орналасқан: 1) void *malloc(unsigned s) нҧсқауышты ҧзындығы s байт болып келетін динамикалық жады аймағының басына қайтарады, қателік болған жағдайда NULL мәнін береді; 2) void *calloc(unsigned n, unsigned m) нҧсқауышты әрқайсысы m байттан тҧратын n элемент орналасатын динамикалық жады аймағының басына қайтарады, қателік болған жағдайда NULL мәнін береді; 3) void *realloc(void *p,unsigned s) бҧрын бӛлініп берілген динамикалық жады аймағының кӛлемін s байтқа дейін ӛзгертеді, р ӛзгертілетін блок адресінің басы, қателік болған жағдайда NULL мәнін береді; 132

133 4) void *free(void *p) бҧрын бӛлініп берілген динамикалық жады аймағын босатады, р сол аймақ басының адресі. Мысалы: int *u=(int*)malloc(sizeof(int)); /* функцияға керекті жады кӛлемі байтпен беріледі, бірақ функция void * типіндегі мән қайтаратын болғандықтан, оны нҧсқауыш типіне (int *) тҥрлендіру керек */ free(u); // бӛлініп берілген жады аймағын босату Бақылау сұрақтары 1. Жиым дегеніміз не? 2. Жиымдарға бастапқы мәндер қалай тағайындалады? 3. Жиымды сипаттау тәсілдері. 4. Жиым элементтерін енгізу және экранға шығару жолдары. 5. Кездейсоқ сандарды қалай шығаруға болады? 6. Жиымға кездейсоқ сандарды меншіктеу қалай орындалады? 7. Жиымды өңдеу есептерінің түрлері (кластары). 8. Жиымның ең үлкен (ең кіші) элементін анықтау. 9. Жиым элементтері қосындысын табу. 10. Жиым ішіндегі екі элементтің бір-бірімен орнын алмастыру. 11. Жиым элементтерін кері бағытта орналастыру. 12. Жиымның көрсетілген элементтерін өңдеу тәсілдері. 13. Жиымды сұрыптау (сорттау, реттеу) жолдары. 14. Адрестік операциялар түсінігі. 15. Нұсқауыш дегеніміз не?ол қалай сипатталады? 16. Функциялар арасында байланыс жасау үшін нұсқауыштарды пайдалану. 17. Жиымдарға қолданылатын нұсқауыштар. 18. Нұсқауыштарға қолданылатын операциялар. 19. Динамикалық жады ұғымы. 20. Динамикалық айнымалыларды қолдану операциялары. ТАПСЫРМАЛАР Жиымдарды өңдеу кезінде төмендегі ережелерді есте сақтаған жөн. 1. Жиым ӛлшемі (ені, кӛлемі) тек константа немесе константалық ӛрнек бола алады. Жиым ӛлшемін идентификатор тҥріндегі (ат қойылған) константа арқылы беру дҧрыс деп саналады. 2. Жиым элементтері нӛлден бастап нӛмірленеді, сол себепті элементтің ең ҥлкен нӛмірі элементтер санынан бірге кем болады. 3. Индекс нӛмірлерінің жиым шекарасынан асып кетпеуін программа қадағаламайды, оны программалаушы ӛзі бақылауы тиіс. 4. Нҧсқауыш жедел жады аймағының адресін сақтайтын айнымалы. 5. Жиым аты оның 0-элементіне нҧсқауыш болып табылады. 6. Егер программаға енгізілетін элементтер мәні алдын ала белгілі болса, онда жиымды сипаттау кезінде оның мәндерін кӛрсетіп (инициалдау) кету керек. Жиымды глобальді айнымалы емес, локальді айнымалы етіп сипаттаған дҧрыс. 7. Жиым элементтерін пернеден енгізгеннен гӛрі rand() және random() функцияларын пайдаланып, кездейсоқ сандар тізбегін беру арқылы енгізген ыңғайлы болады. 133

134 8. Жиымдарды сҧрыптау алгоритмдерінің жҧмыс істеу жылдамдығы, алатын кӛлемі және қолданылу аймағы әр тҥрлі болып келеді. Тапсырмаларды орындауға арналған нұсқаулар А. Әрбір студент журналдағы ӛз нӛміріне сәйкес (мҧғалімнің кӛрсетуі бойынша) тӛрт есеп шығаруы тиіс. В. Әр есептің блок-схемасы және соған сәйкес программасы қҧрылып, компьютерде сол программаның нәтижесін алу керек. С. Екі блок-схема Word программасындағы Сурет салу-автофигуралар-блоксхемалар мҥмкіндігімен сызылып кӛрсетілуі тиіс. D. Берілген жиым элементтері мен нәтижелік элементтерді экранға шығарып, нәтижелерді жазып алу қажет немесе нәтижені бірден файлға жазуға тырысу керек. Есептер 1. Кез келген сандардың бiрӛлшемдi А(10) жиымындағы оң элементтердi екi есе кемiтiңдер, ал терiс элементтерi болса, онда оларды индекстерiнiң мәнiмен ауыстырыңдар. 2. Бiрӛлшемдi А(10) жиымындағы терiс элементтердiң ең ҥлкенiн табыңдар. 3. Бiрӛлшемдi А(20) жиымындағы 5-тен кiшi элементтердiң қосындысын және олардың жалпы санын, сонымен бiрге 5 санына еселiк болатын элементтердiң нӛмiрлерiн анықтаңдар. 4. Бiрӛлшемдi А(10) жиымындағы оң элементтердiң квадраттарының арифметикалық ортасын есептеңдер. 5. Бiрӛлшемдi А(100) жиымындағы терiс элементтердiң бiрiншi тобындағы элементтердiң санын анықтаңдар. 6. Бiрӛлшемдi жиым мәндерi берiлген диапазонда жататын элементтерiнiң нӛмiрiн басып шығарыңдар. 7. Бiрӛлшемдi А(10) жиымындағы оң элементтердiң iшiнде мәнi ең кiшiсiн және оның индексiн (нӛмiрiн) табыңдар. 8. Бiрӛлшемдi жиымда 2-элементтi бiрiншi орынға, 3-нi 2-шiмен және т.б. алмастырулар орындай отырып, 1-элементi соңғы орынға қойыңдар. 9. Берiлген оң сандар тiзбегiндегi қосындысы берiлген саннан асып кетпейтiн элементтердiң санын табыңдар. 10. Ҧтыс билетiнiң нӛмiрi алты орынды сан. Билет бақытты (алдыңғы және соңғы ҥш цифрының қосындысы ӛзара тең) немесе табысты (жҧп орындарда тҧрған цифрлардың қосындысы тақ орында тҧрғандардың қосындысына тең) болатындығын анықтаңдар. 11. Оң және терiс сандар тiзбегiндегi бiрiншi терiс санға дейiнгi орналасқан сандар тiзбегiнiң ӛсу ретiмен орналасатындығын анықтаңдар. 12. N кәсiпорынның бiр жылғы электр энергиясын тҧтынуы туралы дерек бар. Осы бойынша энергия тҧтынудың арифметикалық ортасын және энергияны ең кӛп ҥнемдеген кәсiпорынды анықтаңдар аудан бойынша жанармай қорының мӛлшерi белгiлi. Жанармаймен еңжақсы қамтылған ҥш ауданды анықтаңдар. 14. Берiлген А(14) жиымы бойынша мына шарттарды қанағаттандыратын В жиымын қҧрыңдар: В(1) = A(2); B(2) = A(2) * A(4);... B(4) = A(2) * A(4) *... * А(14) 15. Берiлген А(13) жиымы бойынша мына шарттарды қанағаттандыратын В жиымын қҧрыңдар : 134

135 В(1) = А(1); В(2) = А(1) * А(3);... В(7) = А(1) * А(3) *... * А(13) 16. Берiлген А(14) жиымы бойынша мына шарттарды қанағаттандыратын В жиымын қҧрыңдар: В(1) = А(1) А(14); В(2) = А(2) А(13);... В(7) = А(7) А(8) 17. Берiлген А(14) жиымы бойынша мына шарттарды қанағаттандыратын В жиымын қҧрыңдар: В(1) = А(1)/А(14); В(2) = А(2)/А(13),... В(7) = А(7)/А(8) 18. А(14) жиымы берiлген. Жиым элементтерiнiң арифметикалық ортасын және ол мәнге еңжақын элементтiң нӛмiрiн анықтаңдар. 19. А(14) жиымы берiлген. Екi жиым қҧрыңдар: оның бiрiншiсi индекстерi жҧп сандар, ал екiншi жиым индекстерi тақ сан болатын элементтер болсын. 20. N элементтен тҧратын бiрӛлшемдi жиым берiлген. Әрбiр жолында L элемент болатын екiӛлшемдi жиым қҧрастырыңдар. 21. А(10,10) жиымы берiлген. Бас диагональдағы ең кiшi элемент пен қосымша диагональдағы ең ҥлкен элементтiң орындарын ауыстырыңдар. 22. А(10,10) жиымы берiлген. Бас диагональдағы ең ҥлкен элементi бар жолды нӛмiрi берiлген жолмен алмастырыңдар. 23. А(17) жиымы берiлген. 7-ден ҥлкен барлық элементтердi берiлген жиымның ең ҥлкен элементiмен ауыстырыңдар. 24. А(16) жиымы берiлген. Алғашқы оң элементке дейiнгi терiс элементтердiң санын анықтаңдар. 25. А(18) жиымы берiлген. 2-ден кiшi барлық элементтердi 3 санымен ауыстырыңдар. 26. А(17) жиымы берiлген. 0-ден ҥлкен барлық элементтердi 5-ке, ал қалғандарын 0-ге ауыстырыңдар. 27. А(14) жиымы берiлген. А жиымының барлық тақ элементтерi индекс нӛмiрлерiмен ауыстырылатын В жиымын қҧрыңдар. 28. А(34) жиымы берiлген. Тақ нӛмірлі индекстерде тҧрған элементтердiң ең ҥлкенiн анықтаңдар. 29. А(N) жиымы берiлген. Алғашқы ең кiшi (минимал) элементтiң орнын (индексiн) анықтаңдар. 30. А(N) жиымы берiлген. Соңғы ең кiшi элементтiң орнын анықтаңдар. 31. А(N) жиымы берiлген. Соңғы ең ҥлкен (максимал) элементтiң орнын анықтаңдар. 32. А(N) жиымы берiлген. Алғашқы ең ҥлкен элементтiң орнын анықтаңдар. 33. А(N) жиымы берiлген. Мәндерi 3 пен 11 саны интервалында жататын элементтердiң арифметикалық ортасын анықтаңдар. 34. А(12) = {2,5; 4,3; 0,57; 10,45; 1,5; 7,1; 11,4; 5,12; 4,9; 7,7; 12,3; 0,031 жиымы берiлген. В(I) = SIN(A(I)) формуласы бойынша В(12) жиымын қҧрастырыңдар және Р = А(1) * В(12) + А(2) * В(11) А(12) * В(1) ӛрнектi есептеп шығарыңдар. 35. Пернетақтадан жиымға бес бҥтiн мән енгiзiңдер. Олар бiр жолға ҥтiр арқылы жазылады. Жиымның арифметикалық ортасын табыңдар. 36. Пернетақтадан Х жиымының бес бҥтiн мәнiн енгiзiңдер. Жиым элементтерiнiң әрқайсысының тҥбiрiнiң мәнiн және квадратын экранға шығарыңдар. 37. Бес адамның аты-жӛнiнен тҧратын жиым қҧрыңдар және экранға оларды соңынан бастап баған тҥрiнде шығарыңдар. 38. Бес фамилиядан тҧратын жиым қҧрастырып, олардың iшiнен пернетақтадан енгiзiлген нақты әрiптен басталатындарын экранға шығарыңдар. 39. Кездейсоқ сандар генераторының кӛмегiмен А[1..7] жиымын қҧрыңдар және оны экранға шығарыңдар. Оның барлық элементтерiн 2 есеге арттырыңдар. 135

136 40. Кездейсоқ сандар генераторының кӛмегiмен элементтерi 10 мен 10 сан аралығында болатын А[1..8] жиымын қҧрыңдар және оны экранға шығарыңдар. Жиымның терiс элементтерiнiң санын есептеңдер. 41. Кездейсоқ сандар генераторының кӛмегiмен элементтерi 20 мен 10 саны аралығында болатын А[1..12] жиымын қҧрыңдар және оны экранға шығарыңдар. Жиымның барлық терiс элементтерiн 0-ге ауыстырыңдар. 42. Кездейсоқ сандар генераторы арқылы элементтерi 15 пен 30 саны аралығында болатын бҥтiн саннан А[1..15] жиымын қҧрастырыңдар және оны экранға шығарыңдар. Жиымның ең ҥлкен элементiн және оның индексiн анықтаңдар сағ-тан 20 сағ-қа дейiнгi уақыт аралығында ауа температурасы сағат сайын ӛлшенедi. Осы аралықта температураның тӛмендегенi мәлiм. Температураның алғашқы терiс мәнi қай сағатта пайда болғандығын анықтаңдар. 44. Қараша айында он кҥн бойына ауа температурасы туралы деректер жиымда сақталған. Температураның 10-нан қанша рет тӛмен болғанын анықтаңдар. 45. Балқаш кӛлі жағалауының температурасы туралы мәлiмет қыркҥйек айында он кҥн бойы жиымда сақталған. Осы уақыт iшiнде неше кҥн шомылуға қолайлы болатынын анықтаңдар. 46. Сәуiр айының он кҥндiк ауа температурасы мен жауын-шашын мӛлшерi туралы мәлiмет жиымда сақталады. Осы он кҥнде жауған жаңбыр және қардың мӛлшерiн анықтаңдар. 47. Желтоқсан айының он кҥндiк ауа температурасының мәлiметi жиымда сақталған. Он кҥндiк температура мәлiметi бойынша қанша рет орта температурадан жоғары ауытқу болатындығын анықтаңдар. 48. Қараша айының он кҥн iшiндегi желдiң (солтҥстiк, оңтҥстiк, шығыс, батыс) бағыты және соғу кҥшiнiң мәлiметтерi жиым тҥрiнде сақталған. Неше кҥн желдiң жылдамдығы 8 м/с-тан артық жылдамдықпен соққандығын анықтаңдар? 49. Бҥтiн саннан тҧратын 15 элементтi жиым қҧрыңдар және олардың арасындағы ең кiшi элементтi анықтаңдар. 50. Жерге еркiн тҥсу кезiнде дененiң 1, 2,..., 10 с iшiнде жҥрiп ӛткен қашықтықтарынан қҧралатын нақты сандардың сызықтық жиымын қҧрыңдар. 51. Бҥтiн сандардың сызықтық жиымы берiлген. Оның кему ретiмен орналасқандығын тексерiңдер. 52. Бҥтiн сандардың сызықтық жиымындағы оң элементтердiң қосындысын табыңдар. Жиымның ӛлшемi 10. Жиымды пернетақтадан толтырыңдар. 53. Бҥтiн сандар жиымындағы жҧп нӛмiрлi элементтердiң қосындысын табыңдар. Жиымның ӛлшемi 20. Жиымды 100 бен 200 арасындағы кездейсоқ сандармен толтырыңдар. 54. Бҥтiн сандар жиымындағы 7-ге еселiк болатын элементтердiң кӛбейтiндiсiн табыңдар. Жиым ӛлшемi 15. Жиымды 10 мен 50 арасындағы кездейсоқ сандармен толтырыңдар. 55. Нақты сандар жиымындағы тақ нӛмiрлi элементтердiң қосындысын табыңдар. Жиым ӛлшемi 20. Жиымды 100 бен 200 арасындағы кездейсоқ сандармен толтырыңдар. 56. Бҥтiн сандар жиымындағы барлық 0-ден кiшi элементтердiң кӛбейтiндiсiн табыңдар. 57. Бҥтiн сандар жиымында: 2-ге бӛлгенде қалдық 3-ке тең шартын қанағаттандыратын барлық элементтердiң қосындысын табыңдар. Жиымның ӛлшемi 20. Жиымды 200 бен 300 аралығындағы кездейсоқ сандармен толтырыңдар. 136

137 58. Нақты сандар жиымындағы берiлген саннан кiшi барлық элементтердiң қосындысын табыңдар. Жиымның кӛлемi 20. Жиымды 50 мен 100 аралығындағы кездейсоқ сандармен толтырыңдар. 59. Нақты сандар жиымындағы берiлген саннан кiшi барлық элементтердiң кӛбейтiндiсiн табыңдар. Жиымның кӛлемi 10. Жиымды 50 мен 100 аралығындағы кездейсоқ сандармен толтырыңдар. 60. Жиымдағы 3 пен 9-ға қалдықсыз бӛлінетін элементтердiң кӛбейтiндiсiн табыңдар. Жиымның кӛлемi 10. Жиымды 5 пен 500 аралығындағы кездейсоқ сандармен толтырыңдар. 61. Бҥтiн сандар жиымында элементтердiң арифметикалық ортасынан кiшi болатын барлық элементтердiң қосындысын табыңдар. Жиымның кӛлемi 20. Жиымды 150 мен 300 аралығындағы кездейсоқ сандармен толтырыңдар. 62. Бҥтiн сандар жиымында 5-ке де, 8-ге де бӛлiнетiн элементтердiң қосындысын табыңдар. Жиымның кӛлемi 30. Жиымды 500 бен 100 аралығындағы кездейсоқ сандармен толтырыңдар. 63. Науқастың тәулiк бойы температурасын талдайтын программа жазыңдар: температураның минимал, максимал және арифметикалық орта мәнiн анықтаңдар. Температура тәулiк бойына 6 рет ӛлшенедi және нәтиже пернетақтадан Т жиымына енгiзiледi. 64. Сызықтық жиымға бiр жылдың әрбiр 12 айының жауын-шашын мӛлшерi туралы мәлiмет тiркелген. Жыл бойы жауған жауын-шашынның мӛлшерiн, оның орта айлық мӛлшерiн, қҧрғақшылық (жауын-шашын мӛлшерi 30 мм-ден аз) болған айлардың саны, жылдың ең қҧрғақ айын анықтайтын программа жазыңдар. 65. Бiрӛлшемдi жиымда берiлген а санының алдындағы санға тең алғашқы жҧп элементтердiң санын табыңдар. 137

138 12. ЕКІ ӚЛШЕМДІ ЖИЫМДАР Екі ӛлшемді жиымды матрицаны пайдалану ҥшін тік жақшалар ішінде олардың екі ӛлшемінің де енін кӛрсету керек. Мысалы: int a[4][3]; алғашқы сан жолдар санын, ал екінші сан бағаналар санын кӛрсетеді, а жиымы 12 элементтен тҧрады. Оларға бастапқы мәнді былай береміз: int a[4][3]={ {0,1,2, {3,4,5, {6,7,8, {9,10,11 ; ішкі жҥйелі жақшаларды қоймаса да болады: int a[4][3] = {0,1,2,3,4,5,6,7,8,9,10,11; Келесі тҥрде сипаттау жолдардың тек бірінші элементтерін ғана анықтайды, қалған элементтер 0-ге тең болып саналады: int a[4][3]={ {0,{3,{6,{9 ; Егер ішкі жҥйелі жақшалар алынып тасталса, онда мағынасы ӛзгереді. int a[4][3]={ 0,3,6,9 ; мҧнда бірінші жолдың 3 элементі мен екінші жолдың бірінші элементі анықталады да, қалғандары 0 болып саналады. Екі ӛлшемді жиымды инициалдау қабаттасқан циклдер арқылы орындалады. 1-мысал. /* a[3][4] жиымы элементтерін rand( ) арқылы енгізу және экранға шығару */ #include <stdio.h> #include <stdlib.h> #include <conio.h> main() { const int jol=3, bag=4; 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("\nа[3][4] жиым элементтерi мәндерi:"); for (i=0; i<jol; i++) for (j=0; j<bag; j++) printf(" %i",a[i][j]); getch(); 138

139 jol=3; bag=4; а i=0;i<jol;i=i+1 i=0;i<jol;i=i+1 j=0;j<bag; j=j+1 j=0;j<bag; j=j+1 х[i][j] енгізу х[i][j] шығ. а соңы Матрицаларды ӛңдейтін негізгі алгоритмдер ретінде бір ӛлшемді жиымдарды ӛңдеу кезінде қолданылған алгоритмдер саналады. Жалпы матрицаларды ӛңдейтін барлық алгоритмдерді екі топқа бӛліп қарастыруға болады, олар: 1. матрицаның барлық элементтерін ӛңдейтін алгоритмдер. 2. матрицаның әр жолы немесе әр бағанасы элементтерін жеке-жеке ӛңдейтін алгоритмдер Матрицаның барлық элементтерін ӛңдейтін алгоритмдер 2-мысал. Нақты сандардан тҧратын a 4,6 матрицасы берілген. Мынадай ӛрнекті P1 P2 Z есептеу керек, мҧндағы P1 и P2 сәйкесінше алынған матрицаның оң және теріс элементтерінің кӛбейтіндісі. /* a[4][6] матрицасы берiлген. z=p1/ p2 есептеу керек, p1 және p2 матрицаның оң және терiс элементтерiнiң кӛбейтiндiсi */ #include <math.h> #include <conio.h> #include <stdio.h> void line() {printf(" \n"); return; main () { static int a[4][6]={ {5,-11,4,-2,5,6, {3,3,-12,-5,7,8, {2,3,-3,14,-9,-3, {-9,3,-6,14,9,-3 ; 139

140 int i,j; float p1, p2, z; clrscr(); printf("берiлген матрица :\n"); line(); for (i=0; i<4; i++) {for (j=0; j<6; j ++) printf(" %3i ", a[i][j]); printf("\n"); line(); /* Матрицаны ӛңдеу */ p1 = 1; p2 = 1; for (i=0; i<4; i++) for (j=0; j<6; j ++) {if (a[i][j]>0) p1 = p1*a[i][j]; if (a[i][j]<0) p2 = p2*a[i][j]; z = p1/abs(p2); printf(" z = %f\n",z); line(); getch(); Матрица мынадай тҥрде беріледі: А(0,0) A(0,1) A(0,2) A(0,3)... A(0, j) A(0,n-1) A(1, 0) A(1,1) A(1, 2) A(1, 3)... A(1, j) A(1, n-1) A(2, 0) A(2, 1) A(2,2) A(2, 3)... A(2, j) A(2, n-1) A(3, 0) A(3, 1 A(3, 2 A(3, 3... A(3, j) A(3, n-1) A(i, j) A(n-2, 0) A(n-2, 1) A(n-2, 2) A(n-2, 3)... A(n-2, j) A(n-2, n) A(n-1, 0) A(n-1, 1) A(n-1, 2) A(n-1, 3)... A(n-1, j) A(n-1, n-1) Бас диагональ элементтері белгісі: i = j Бас диагональдан жоғары тҧрған элементтері белгісі: i < j Бас диагональдан тӛмен тҧрған элементтері белгісі: i > j Қосалқы диагональ элементтері белгісі: i+j = n-1 Қосалқы диагональдан жоғары элементтер белгісі: i+j < n-1 Қосалқы диагональдан тӛмен элементтер белгісі: j+j > n-1 3-мысал. Бҥтін сандардан тҧратын квадрат b 5,5 матрицасы берілген. Оның бас диагоналының сол жағында және оң жағында орналасқан нӛлге тең элементтері санын анықтап, солардың айырмасының модулін табу керек. Мынадай белгілеулер енгізейік: L1 бас диагональдың сол жағында (тӛменінде) орналасқан элементтер саны; 140

141 L2 бас диагональдың оң жағында (жоғарысында) орналасқан элементтер саны; L= L1-L2 солардың айырмасы модулі. #include <math.h> #include <conio.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 L1,L2,L; clrscr(); printf("берiлген матрица :\n"); line(); for (i=0; i<5; i++) {for (j=0; j<5; j ++) printf(" %3i ", b[i][j]); printf("\n"); line(); L1 = L2 = 0; for (i=0; i<5; i++) for (j=0; j<5; j ++) if (b[i][j]==0) {if (i>j) L1 = L1+1; if (i<j) L2 = L2 +1; L= abs(l1 - L2); printf(" L = %i ", L); getch(); 12.2 Екінші типтегі есептер алгоритмдері 4-мысал. Бҥтін сандардан тҧратын a 3,6 матрицасы жолдарының алғашқы элементін осы жолдың минимальды элементімен алмастыру керек. Нәтижелік a 3,6 матрицасы элементтерін экранға шығару қажет. /* a[3][6] матрицасы жолдарының алғашкы элементiн осы жолдың минимальды элементiмен алмастыру керек. Натижелiк Х матрицасы элементтерiн экранға шығару кажет.*/ #include <math.h> #include <conio.h> #include <stdio.h> 141

142 void line() {printf(" \n"); return; main ( ) { static int a[3][6]={ {5,-11,4,-2,5,6, {2,3,-3,14,-9,-3, {-9,3,-6,-14,9,-3 ; int i,j,jmin,min; clrscr(); printf("берiлген матрица :\n");line(); for (i=0; i<3; i++) {for (j=0; j<6; j ++) printf(" %3i ", a[i][j]); printf("\n"); line(); for (i=0; i<3; i++) { min=+1e6; for (j=0; j<6; j ++) if (a[i][j]<min) {min=a[i][j]; jmin=j; a[i][jmin]=a[i][0]; a[i][0]=min; printf("ӛңделген матрица :\n");line(); for (i=0; i<3; i++) {for (j=0; j<6; j ++) printf(" %3i ", a[i][j]); printf("\n"); line(); getch(); 5-мысал. Бҥтін сандардан тҧратын a 3,4 матрицасының әрбір бағаналарының арифметикалық орташа мәнін анықтап, оларды бір ӛлшемді s 4 жиымы ретінде бейнелеу керек. /* a[3][4] матрицасының әрбiр бағаналарының арифметикалық орташа мәнiн анықтап,оларды бiр ӛлшемдi s[4] жиымы ретiнде бейнелеу керек. */ //әрбір бағана қосындысы және солардың орташа мәні #include <conio.h> #include <stdio.h> main () { static int a[3][4]={ {5,11,4,2, {3,3,12,5, {2,3,3,14 ; 142

143 int i,j; float s[4]; clrscr(); printf("берiлген матрица :\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(""); for (j=0; j<4; j++) { s[j]=0; for (i=0; i<3; i ++) s[j]+=a[i][j]; printf(" %4.2f",s[j]/3); printf("\n "); getch(); Бҧл программада s[j] жиымының әрбір элементін есептеуде қабаттасқан екі цикл қолданылған, онда j индексі сыртқы цикл параметрі, ал i индексі ішкі цикл параметрі. Осы тәсіл матрица элементтерін бағаналар бойынша ӛңдеу ісін жҥзеге асырады. 6-мысал. Берілген жиымның әрбір жолындағы элементтері қосындыларын және сол қосындылардың орташа мәнін анықтау керек. // әр жол қосындысы және солардың арифметикалық ортасы #include <conio.h> #include <stdio.h> main () { static int a[3][4]= { {5,3,4,2, {3,3,4,5, {2,3,3,4 ; int i,j,s=0; float c=0; clrscr(); for (i=0; i<3; i++) {for (j=0; j<4; j ++) s+=a[i][j]; printf("%i-жол косындысы:%i\n",i+1,s); c+=s; printf(" "); printf("\nарифм.ортасы %5/2f", c/4) ; 143

144 7-мысал. Берілген жиымның әрбір бағанадағы элементтері қосындыларын және сол қосындылардың орташа мәнін анықтау керек. // әрбір бағана қосындылары мен солардың орташа мәнін анықтау #include <conio.h> #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 c; clrscr(); printf("берiлген матрица :\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); getch(); 8-мысал. Берілген a 4,4 жиымының бас диагоналындағы элементтерді нӛлге, ал қосалқы диагоналындағы элементтерді бірге теңестіру программасы. #include <stdio.h> #include <stdlib.h> #include <conio.h> main() { int a[4][4]={ int i,j; clrscr(); ; {6,8,9,2, {5,3,4,2, {3,3,4,5, {2,3,3,4 144

145 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=0; i<4; i++) for (j=0; j<4; j ++) if (i+j==3) a[i][j]=1; /* Ӛңделген матрица элементтерін шығару */ printf("нәтижелік матрица :\n"); for (i=0; i<4; i++) {for (j=0; j<4; j ++) printf(" %2i ", a[i][j]); printf("\n"); getch(); 9-мысал. Берілген a 3,3 жиымының бас диагоналынан тӛмен орналасқан элементтер қосындысын анықтау программасы. #include <conio.h> #include <stdio.h> main () { static int a[3][3] = { {0,1,2, {3,4,5, {6,7,8 ; int i,j,r,s; clrscr(); printf("енгiзiлген а[3][3] жиым элементтерi:\n"); for (i=0; i<3; i++) {for (j=0; j<3; j++) printf(" %2i",a[i][j]); printf("\n"); /* бас диагоналдан тӛмен орналасқан элементтер қосындысын анықтау */ s=0; for (i=0; i<3; i++) for (j=0; j<3; j++) if (j<i) s+=a[i][j]; printf("\ns=%i",s); getch(); 145

146 10-мысал. Берілген a 3,3 жиымының әрбір жолындағы элементтерді ӛсуі бойынша реттеп орналастыру программасы. #include <stdio.h> #include <stdlib.h> #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,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 (k=0; k<n-1; k++) { amin=a[i][k];m=k; for (j=k+1; 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нәтижелік матрица:\n"); for (i=0; i<3; i++) {for (j=0; j<3; j++) printf(" %2i",a[i][j]); printf("\n"); getch(); 11-мысал. Берілген a 3,3 жиымының әрбір бағанасындағы элементтерді ӛсуі бойынша реттеп орналастыру программасы. #include <stdio.h> #include <stdlib.h> #include <conio.h> main () { static int a[3][3]= { {8,7,6, {5,4,3, {2,1,0 ; 146

147 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-1; k++) //мин тауып алмастыру { amin=a[k][j];m=k; for (i=k+1; 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сұрыпталған матрица элементтері:\n"); for (i=0; i<3; i++) {for (j=0; j<3; j++) printf(" %2i",a[i][j]); printf("\n"); getch(); 12.3 Екі ӛлшемді жиымдармен жұмыс істеу кезінде нұсқауыштарды қолдану A 3,2 жиым берілген болсын. Олар бҥтін сандар, яғни int a[3][2]; int *pri; pri = a; // бұл pri=a[0][0] деген сӛз a жиымның аты немесе a[0][0] элементінің адресі a=&a[0][0]; рri нҧсқауышына 1-ді қоссақ, pri+1 деген нҧсқауыш a[0][1] элементіне сілтейді. Бҧл жиымды қарастырғанда, келесі теңдеулер дҧрыс болып табылады: pri == &a[0][0]; pri+1== &a[0][1]; pri+2== &a[1][0]; pri+3== &a[1][1]; pri+4== &a[2][0]; pri+5== &a[2][1]; 147

148 Екі ӛлшемді жиым бір ӛлшемді жиымдардан қҧрастырылған жиым ретінде қарастырылуы мҥмкін. Яғни берілген екі ӛлшемді жиым ҥш жолдан тҧрады, ал әрбір жол екі элементтен тҧратын жиым болып табылады. Бірінші жол аты a[0], екінші жол аты a[1], ҥшінші жол аты a[2]. Жиымның аты берілген жиымның нҧсқауышы болып табылады, яғни ол жиымның 1-элементіне сілтейді. Екі ӛлшемді жиымның осы қасиеті бір ӛлшемді жиымға арналған функцияны екі ӛлшемді жиыммен жҧмыс істеуге мҥмкіндік береді. 12-мысал. Тӛмендегі b[3][4] матрицасы жолдарының арифметикалық ортасын табатын программада функция қолданылған. /* b[3][4] матрицасы жолдарының қосындысы */ #include <conio.h> #include <stdio.h> float f1(int x[], int n) { int k; float s; for (k=0,s=0;k<n; k++) s+=x[k]; return(s/n); main () { int i,b[3][4]={ {6,4,3,3, {7,5,3,3, {8,4,2,6 ; clrscr(); for (i=0;i<3;i++) printf("%d жолының орташа мәні: %f\n", i,f1(b[i],4)); getch(); Бақылау сұрақтары 1. Екі өлшемді жиымды матрицаны сипаттау, бастапқы мәндерді тағайындау тәсілдері. 2. Екі өлшемді жиымды инициалдауды қабаттасқан циклдер арқылы орындау. 3. Матрица элементтерін толық өңдейтін алгоритмдер. 4. Матрицалардың көрсетілген элементтерін өңдеу тәсілдері. 5. Матрицалардың диагоналына байланысты орналасқан элементтерін өңдеу жолдары. 6. Матрицалардың жолдарының және бағаналарының ең үлкен (кіші) элементтерін, қосындыларын, көбейтінділерін табу. 7. Матрицалардың жолдарында және бағаналарында орналасқан элементтерді өсуі (кемуі) бойынша реттеу алгоритмдері. Тапсырмалар 1. Екiӛлшемдi А(10,10) жиымда әрбiр жол ҥшiн оң элементтердiң қосындысын есептеп шығарыңдар. 148

149 2. Екiӛлшемдi А(10,10) жиымындағы оң элементтердiң санын есептеп шығарыңдар. 3. Екiӛлшемдi А(10,10) жиымындағы ең ҥлкен элементтi анықтаңдар. 4. Екiӛлшемдi А(10,10) жиымы берiлген. А жиымының әрбiр жолындағы элементтердiң кӛбейтiндiсiне тең болатын бiрӛлшемдi В жиымын алыңдар. 5. Екiӛлшемдi А(10,10) жиымы берiлген. А жиымының әрбiр жолындағы ең ҥлкен элементтiң мәндерiне тең болатын бiрӛлшемдi В жиымын алыңдар. 6. Екiӛлшемдi А(10,10) жиымы берiлген. А жиымының әрбiр жолындағы терiс элементтiң мәндерiне тең болатын бiрӛлшемдi В жиымын алыңдар. 7. Екiӛлшемдi А(10,10) жиымында терiс элементтерi бар жолдардың санын есептеп шығарыңдар. 8. Екiӛлшемдi жиым жолдарындағы ең ҥлкен элементтердiң қосындысын есептеп шығарыңдар. 9. Екiӛлшемдi жиым әрбiр бағандағы (тiк жолдағы) элементтердiң қосындысын есептеп шығарыңдар. 10. Екiӛлшемдi жиымның әрбiр жолындағы терiс сандардың санын, қосындысын және арифметикалық ортасын есептеп шығарыңдар. 11. Екiӛлшемдi А(4,4) жиымындағы индекстерiнiң қосындысы 4-ке тең болатын элементтерiнiң қосындысын есептеп шығарыңдар. 12. Екiӛлшемдi А(4,7) жиымындағы оң элементтердiң арифметикалық ортасын және нӛлге тең элементтердiң санын есептеп шығарыңдар. 13. Екiӛлшемдi А(10,10) жиымының бас диагоналi бойындағы элементтердiң ең ҥлкенiн табыңдар. 14. Екiӛлшемдi А(10,10) жиымының қосымша диагоналi бойындағы ең ҥлкен элементтi табыңдар. 15. Екiӛлшемдi А(10,10) жиымының қосымша диагоналi бойындағы ең ҥлкен элементтi табыңдар. 16. Екiӛлшемдi А(4,7) жиымының әрбiр жолындағы берiлген диапазонда жататын элементтердiң арифметикалық ортасын есептеп шығарыңдар. 17. Екiӛлшемдi А(10,10) жиымында элементтердiң арифметикалық ортасы жиымның барлық элементтерiнiң арифметикалық ортасынан кем болатын бағанның нӛмiрлерiн анықтаңдар. 18. Екiӛлшемдi А(10,10) жиымында 3- және 1-жолдардың орындарын ауыстырыңдар. 19. Екiӛлшемдi А(7,7) жиымында бас диагональдағы элементтердi әрбiр жолдың ең ҥлкен мәнiмен алмастырыңдар. 20. Екiӛлшемдi А(10,10) жиымында бас диагональдан жоғарғы және тӛмен орналасқан элементтердiң қосындысын есептеп шығарыңдар. 21. Екiӛлшемдi жиымда берiлген жолдың ең ҥлкен элементiнiң мәнiн және нӛмiрiн анықтаңдар. 22. Екiӛлшемдi жиымда әр баған ҥшiн берiлген бағанның мәнiнен кiшi болатын элементтердiң арифметикалық ортасын есептеп шығарыңдар. 23. Бҥтiн сандардан қҧралған 10Х10 матрицасының ең ҥлкен элементiнiң жолы мен баған нӛмiрiн шығарып беретiн программа жазыңдар. 24. А(5,5) жиымы және k саны берiлген. Әрбiр жолдың элементтерiн осы жолдағы бас диагональда орналасқан диагоналдық элементке бӛлiңдер. 25. А(10,10) жиымы берiлген. Осы жиымның бас диагоналiнiң элементтерiнен тҧратын бiрӛлшемдi жиым қҧрыңдар. 26. А(10,10) жиымы берiлген. k- және 1-жолдардың орындарын ауыстырыңдар. 27. А(10,10) жиымы берiлген. Одан бiрӛлшемдi жиым қҧрастырыңдар. 149

150 28. Бҥтiн санды х [0...5, 0...4] жиымы берiлген. Оның 5-тен кiшi барлық элементтерiн 111 санымен ауыстырыңдар. 29. Бҥтiн санды В [0...4, 0...3] жиымы берiлген. Оның элементтерiн олардың квадраттарымен ауыстырыңдар. 30. Нақты сандар жиымы А[0...5, 0...3] берiлген. Оның терiс элементтерiнiң индекстерiн басып шығарыңдар. 31. Екiӛлшемдi бҥтiн санды А[0..10, 0..7] жиымын қҧрыңдар және оның екi тақ санды индекстерiнiң барлық элементтерiнiң қосындысын табыңдар. 32. Бҥтiн санды А [0..10, 0..7] жиымы берiлген. Жиымның 5-ке қалдықсыз бӛлінетін элементтерiнiң қосындысын табыңдар х3 матрицаның бҥтiн сандық элементтерiн пернетақтадан енгiзiңдер және әрбiр баған элементтерiнiң қосындысын есептеп шығарыңдар. 34. Бҥтiн санды В[0..5,0..5] жиымы берiлген. Оның диагональдарынан сол және оң жақта орналасқан элементтерiн анықтаңдар. 35. Бҥтiн санды В [0..5, 0..5] жиымы берiлген. Диагональдың оң жақтағы элементтерiнiң қосындысын, сол жақтағы элементтерiнiң кӛбейтiндiсiн табыңдар. 36. Бҥтiн санды В [0..5, 0..5] жиымы берiлген. Жиымның ең ҥлкен элементiн табыңдар және оның диагоналының қай жағында орналасқаны туралы хабарды экранға шығарыңдар. 37. Бҥтiн санды В [0..5, 0..5] жиымы берiлген. Жиымның ең кiшi элементiн табыңдар және оның диагональдың қай жағында орналасқаны туралы хабарды экранға шығарыңдар. 38. Бҥтiн санды В [0..5,0..5] жиымы берiлген. Жиым диагоналiнiң сол жағынан жоғары орналасқан элементтердiң қосындысын табыңдар. 39. Бҥтiн санды В [0..5,0..5] жиымы берiлген. Жиым диагоналiнiң сол жағынан тӛмен орналасқан элементтердiң кӛбейтiндiсiн есептеп шығарыңдар. 40. Бҥтiн санды В [0..5,0..5] жиымы берiлген. Жиым диагоналiнiң сол жағынан тӛмен орналасқан терiс таңбалы элементтерiнiң санын табыңдар. 41. Бҥтiн санды В[0..5,0..5] жиымы берiлген. Жиым диагоналiнiң сол жағынан жоғары орналасқан оң таңбалы элементтерiнiң санын табыңдар. 42. Бес цехтың әрқайсысының 4 бӛлiмшесiндегi барлық шикiзат туралы мәлiмет кестесi берiлген. Шикiзаты ең аз цехтың нӛмiрiн анықтаңдар. 43. А[0..3, 0..15] жиымы берiлген. Оның iшiнде ӛзара тең екi элементтiң индекстерiн басып шығарыңдар. 44. а 1, а 2, а 3 сандары берiлген. Элементтерi В[i,j] = а i 3a j болатын бҥтiн санды В [0..3, 0..3] жиымын анықтаңдар. 45. Нақты а 1, а 2,..., а 10, b 1, b 2,..., b 20 сандары берiлген. Элементтерi аi,j = i +2j болатын бҥтiн санды А [0..10, 0..12] жиымын алыңдар. 46. Ӛлшемдерi 5*5 матрицаның әрбiр элементiнiң мәнi қиылатын жол мен бағана нӛмiрiнiң қосындысына тең болатын элементтерiнiң қосындысын есептеңдер. 47. Нақты [0..7, 0...7] жиымын алыңдар, оның 1-жолы а1j = 2j + 3 формуласымен, 2- жолы а2j = j + 3/(2+j) формуласымен берiлiп, содан кейiнгi әрбiр жол алдыңғы екi жолдың қосындысына тең болатын болсын. 48. Натурал п саны берiлген. Егер аi,j= sin(i+j/2) болса, A[0..п, 0..п] жиымында қанша оң элемент болатындығын анықтаңдар. 49. Бҥтiн санды А[0..4, 0..5] жиымы берiлген. Әрбiр бағанның арифметикалық ортасын табыңдар. 150

151 50. Барлық элементтерi нӛлге тең емес п..т ӛлшемдi нақты жиым берiлген. Бҧл жиымның модулi бойынша ең ҥлкен элементiне басқа барлық элементтерiн бӛлу арқылы жаңа жиым алыңдар. 51. Бҥтiн санды А[0..4, 0..5] жиымы берiлген. Соңғы жолдан басқа жолдарды әрбiр элементi бойынша азайту арқылы матрицаны тҥрлендiрiңдер. 52. Екiӛлшемдi С жиымының әрбiр жолын ӛсу ретiмен орналастыратын программа қҧрыңдар. 53. т..п ӛлшемдi матрицаның әрбiр жолын кему ретiмен орналастыратын программа қҧрыңдар. 54. Бҥтiн санды А[0..4, 0..5] жиымы берiлген. Қҧрылымында кем дегенде бiр рет 10-ға тең элементi бар жолдардың нӛмiрiн анықтаңдар. 55. т..п ӛлшемдi матрицаның әрбiр бағанасын ӛсу ретiмен орналастыратын программа қҧрыңдар. 56. А[0..5, 0..5] жиымы берiлген. Бҧл жиымның әрбiр жолының элементтерiн диагональдiң сол жағында орналасқан элементтерге бӛлу жолымен алынған жаңа жиым қҧрыңдар. 57. А[0..5, 0..6] жиымы берiлген. Оның бiрiншi және соңғы жолдарының орындарын алмастырыңдар. 58. А[0..5, 0..6] жиымы берiлген. Оның бiрiншi және соңғы бағаналарының орнын алмастырыңдар. 59. Тiкбҧрышты матрица берiлген. Элементтерiнiң қосындысы ең ҥлкен болатын жолды табыңдар. 60. Тiкбҧрышты матрица берiлген. Элементтерiнiң қосындысы ең ҥлкен болатын бағананы табыңдар. 61. Ӛлшемi 4х8 болатын бҥтiн сандар жиымындағы барлық жҧп нӛмiрлi элементтерiнiң қосындысын табыңдар. 62. Бҥтiн сандардың 5х5 ӛлшемдi жиымындағы бас диагональда орналасқан барлық элементтердiң қосындысын табыңдар. 63. Бҥтiн сандардың 7х4 ӛлшемдi жиымындағы максимал элементтiң жолы мен бағана нӛмiрлерiн табыңдар. 64. Бҥтiн сандардың 6х5 екiӛлшемдi жиымы бар. Элементтерiнiң арифметикалық орта мәнi максимал болатын жолдың нӛмiрiн табыңдар. 65. Бҥтiн сандардың 5х9 ӛлшемдi жиымында бiрдей нӛмiрлi жол мен бағананың орнын алмастырыңдар. 66. Бҥтiн сандардың екi ӛлшемдi жиымындағы жолдың максимал элементтерiнiң арасындағы минимал элементтi табыңдар. 67. Бҥтiн сандардың екiӛлшемдi жиымында максимал элементi бар бағанды ӛшіріп тастаңдар. 68. Бҥтiн сандардың екiӛлшемдi жиымындағы қайталанбайтын барлық элементтердi табыңдар. 69. Екiӛлшемдi жиымды 1-ден 100-ге дейiнгi бҥтiн сандармен орама (спираль) бойымен толтырыңдар. 70. Бҥтiн сандардың екiӛлшемдi жиымының барлық элементтерiн сол жолдардағы элементтердiң қосындысынан солардың ішіндегі ең кiшi элементтер айырмасымен алмастырыңдар. 71. Бҥтiн сандар жиымының жолдарын кему ретi бойынша сҧрыптаңдар. 72. Жиымның тақ орындардағы бағаналарында тҧрған элементтерді ӛсу ретiмен орналастыра отырып сҧрыптаңдар. 151

152 73. Шеберханада шығарылған тҥрлi тетiк бӛлшектер мен олардың бағасы берiлген. Осы мәлiметтерді а) бағалардың ӛсуi және ә) тетiк бӛлшек атауларын алфавиттiк ретi бойынша сҧрыптаңдар. 74. Студенттердің аты-жӛнi және олардың телефон нӛмiрлерi кӛрсетiлген екiӛлшемдi жиым берiлген. Студенттің фамилиясы бойынша оның телефон нӛмiрiн табыңдар. 75. Екi матрица берiлген. Олардың кӛбейтiндiсiн табыңдар. 76. Екiӛлшемдi жиымның элементтерi сиқырлы квадрат (сиқырлы квадратта барлық вертикаль, горизонталь және екi диагональ бойынша сандардың қосындысы бiрдей болады) қҧрайтындығын тексеретiн программа қҧрыңдар. 77. Матрицаның элементтерi қосалқы диагональ бойынша симметрия қҧра отырып орын алмастыратын программа қҧрыңдар. 78. Екiӛлшемдi k жиымының бағаналарын циклдi тҥрде, оның i-шi бағанасын i + 1 бағанасымен алмастыра отырып, соңғы бағана бiрiншi болып орналасатындай деңгейге жеткізетін программа қҧрыңдар. 79. Екiӛлшемдi А жиымының нӛлге тең элементтерi жоқ жолдарының оң элементтерiнiң қосындысын есептеп шығаратын программа қҧрыңдар. 80. Квадрат пiшiндi кестенің ең кiшi элементін анықтап, соған сәйкес жол мен бағана элементтерінің орындарын алмастырыңдар. 81. Бҥтiн сандардың екiӛлшемдi жиымы берілген. Сол жиымның ең кiшi элементі орналасқан жолы мен бағанасын жойыңдар. 82. Тiкбҧрышты кестенің екiншi қатарынан бастап, ондағы әрбiр жолдың ең кiшi элементiн алдыңғы жолдың ең ҥлкен элементiмен алмастырыңдар. 83. Бҥтiн сандардың 10х12 ӛлшемдi матрицасы берiлген. Оның барлық ершiк нҥктелерiнiң индекстерiн басып шығарыңдар. (Ершiк нҥкте деп ӛзiнiң жолында ең кiшi, бiрақ бағанасында ең ҥлкен немесе, керiсiнше, ӛзiнiң жолында ең ҥлкен, бiрақ ӛз бағанасында ең кiшi болатын элементтi айтады). 152

153 13. СӚЗ ТІРКЕСТЕРІН ӚҢДЕУ PASCAL тілінде сӛз тіркестерін ӛңдеу кезінде қолданылатын арнайы тип string бар. Ал С тілінде мҧндай арнайы тип жоқ. Сӛз тіркестері char типті бір ӛлшемді жиым ретінде қарастырылады, яғни сӛз тіркесі нӛлдік байтпен аяқталатын char типті бір ӛлшемді жиым. Нӛлдік байт барлық биттері де нӛлге тең байт, ол \0 символдық константасымен анықталады (тіркес соңы белгісі немесе нӛл-терминатор). Сондықтан егер тіркесте k символ болса, онда жиымды сипаттауда k+1 элемент кӛрсетілуі тиіс. Мысалы, char a[7] деген сипаттау тіркестің 6 символдан тҧратынын, ал соңғы байт нӛлдік екенін білдіреді. С тіліндегі тіркестік (жолдық) константа қос тырнақшаға алынған символдар жиыны. Мысалы, Берілген тапсырма тіркесі, оның соңына нӛлдік байтты компилятор автоматты тҥрде ӛзі жазады. Айнымалы мәні болатын сӛз тіркесін сипаттау кезінде бірден кӛрсетуге болады, мысалы, char S1[10]= " ", S2[]="Болат"; Соңғы сӛз ҧзындығы тіркестің символдары санымен анықталады. Символдар тіркесін пернелерден енгізу ҥшін екі стандартты функция scanf() немесе gets() қолданылады, ал олардың прототиптері stdio.h тақырыптық файлында болады Символдық таңбаларды енгізу/шығару Символдарды біртіндеп енгізу/шығару ҥшін printf() және scanf() функцияларының %c форматы қолданылады. getch() параметрсіз функция, басылған перненің кодын (int) береді, экранға ешқандай символ шығармайды. getchar() параметрсіз функция. Пернеден символдарды бір-бірлеп енгізеді. Сӛз тіркесі <Enter> пернесі басылғанша енгізіле береді, оған дейін оны ӛзгертуге де болады. putch(c) бір символды (c cимволдық айнымалы немесе константа), яғни бір таңбаны ғана экранға шығарады. putchar(c) бҧл да тек бір таңбаны экранға шығарады. Бҧлар conio.h тақырып файлы бойынша жҧмыс істейді. Cимволдық таңбаларды ӛңдеу туралы мәліметтер Ә қосымшасында келтірілген. Мысалы, латын алфавиті әріптерін экранға шығару программасы тӛмендегідей болады: #include <conio.h> #include <stdio.h> void main() { char z; clrscr(); for(z='a';z<='z';z++) putchar(z); getch(); 153

154 Нәтижесі: ABCDEFGHIJKLMNOPQRSTUVWXYZ Ал енді осы символдарды ASCII-кодтарымен бірге шығаратын мына программаны кӛрейік. /* латын алфавиті*/ #include <conio.h> #include <stdio.h> void main() { char z; clrscr(); for(z='a';z<='z';z++) { if (z=='k' z=='u') printf("\n"); printf(" %c-%d ",z,z); getch(); Программа жҧмысы нәтижесі: A-65 B-66 C-67 D-68 E-69 F-70 G-71 H-72 I-73 J-74 K-75 L-76 M-77 N-78 O-79 P-80 Q-81 R-82 S-83 T-84 U-85 V-86 W-87 X-88 Y-89 Z-90 Келесі программа 0 мен 9 арасындағы цифрлық символдарды және олардың ASCII кодтарын басып шығарады: #include <conio.h> #include <stdio.h> void main() { char z; clrscr(); for(z='0';z<='9';z++) { if (z=='0' z=='5') printf("\n"); printf (" %с-%в ",z,z); getch(); Жҧмыс нәтижесі: Символдық тіркестер Символдық жолдарды немесе тіркестерді бірнеше тәсілмен ӛңдеуге болады, олардың негізгілері: 1. Тіркестік константаларды қолдану; 154

155 2. Char типті жиымды қолдану; 3. Char типіне сілтейтін нҧсқауыштарды пайдалану; 4. Символдық тіркестерден тҧратын жиымдарды қолдану. Сӛз тіркестері немесе тіркестік (жолдық) константа қостырнақшаға алынып жазылады. Тырнақшаға алынатын символдар тізбегінің ең соңына автоматты тҥрде \0 символы жазылады. Компилятор жолдық символдарды компьютер жадына жазғанда, олардың кӛлемін анықтау ҥшін сол символдар санын есептейді. Символдық константа осы сӛз тіркесі жазылған жады аймағына сілтейтін нҧсқауыш болып табылады. Символдық тіркестер жиымын (массивін) беру кезінде компилятор компьютер жадының қажетті кӛлемін анықтау ҥшін жиымды сипаттағанда, оны тіркестік константа арқылы инициалдауға болады. Мысалы: char c[]= Атырау, Алтай - жеріміз ; Әдеттегі жиым қолданылатын жағдайлар сияқты бҧл жиым аты с осы жиымның 1-элементіне сілтейтін нҧсқауыш болып табылады. c ==&c[0]; *c == 0 ; *(c+1) == c[1] == n ; Сӛз тіркестерін анықтау ҥшін нҧсқауыштарды мынадай тҥрде сипаттауға болады: char *c1 = \n студенттер саны ; осы сипаттауға эквивалентті болып келесі сипаттау есептеледі: static char c1[]= \n студенттер саны ; Осы қарастырылған екі сипаттау да с1 тіркесінің нҧсқауыш екенін білдіреді. Компьютер жадының қажетті кӛлемін айқын кӛрсетуге де болады. Мысалы, сыртқы сипаттауда келесі жолдың мынадай тҥрде жазылғаны кӛрсетілген. char c[25]= Білім - ӛмір шырағы ; Элементтердің саны жолдың ҧзындығынан бір символ артық болуы керек, яғни оның ең соңында \0 символы болуы тиіс. Статикалық немесе сыртқы жиымдағы бҧрынғы қарастырылған әдеттегі жиымдар оларды қолдану кезінде автоматты тҥрде 0-мен инициалданған болатын. Ал сӛз тіркестерін пайдалану кезінде де статистикалық немесе сыртқы жиымдар солар тәрізді 0 символымен инициалданады. Келесі мысалды қарастыралық: #include <stdio.h> #include <string.h> main () { char msg[30]; strcpy(msg, "Сәлем, Азат!"); puts(msg); Мҧндағы msg сӛзінен соң тҧрған [30] саны компиляторға 29 символ ҥшін, яғни char типіндегі 29 айнымалыдан тҧратын жиым ҥшін жады бӛлуді қамтамасыз етеді (30-орын нӛлдік символмен \0 толтырылады). msg айнымалысының 155

156 символдық мәні жоқ; ол тек char типіндегі 29 айнымалының алғашқысының адресін (компьютер жадындағы белгілі бір орын адресі) сақтайды. Компилятор strcpy(msg, "Сәлем, Азат!") операторын кездестіргенде, екі тҥрлі әрекет орындайды: - "Сәлем, Азат!" тіркесі соңына (\0) символын (ASCII коды 0) қосады. - strcpy функциясын орындап, msg айнымалысы нҧсқап тҧрған жады аймағына сол сӛз тіркесі символдарын біртіндеп кӛшіреді. Ол тіркесті кӛшіруді сӛз соңындағы нӛлдік символдан кейін барып аяқтайды. puts(msg) функциясын орындағанда, оған msg мәні, яғни тіркес қҧрамындағы бірінші символ адресі беріледі. Одан кейін puts сол символдың нӛлдік символ емес екенін анықтап, ары қарай адреске бірді қосып, келесі симводы оқиды, т.с.с. тіркес соңына дейін жетеді. Нӛлдік символға жеткен соң, puts жҧмысты аяқтайды; Осындай тәсіл тіркес ҧзындығына шек қоймай, нӛлдік символға дейінгі символдарды біртіндеп оқуды жҥзеге асырады Символға нұсқауышты пайдалану Екінші тәсіл символдарға нҧсқауыш жасау. Программаны келесі тҥрге келтірейік: #include <stdio.h> #include <string.h> main() { char *msg; msg = "Сәлем, Азат!"; puts(msg); msg алдындағы жҧлдызша (*) компиляторға оның символға нҧсқауыш екенін білдіреді, яғни msg белгілі бір символ адресін сақтай алатын айнымалы. Бірақ мҧнда компилятор символдар ҥшін ешқандай орын бӛлмейді және msg да ешқандай мәнге ие болмайды. Компилятор strcpy(msg, "Сәлем, Азат!") операторын кездестіргенде, ол тағы екі тҥрлі әрекет орындайды: - объектілік код файлы ішіндегі бір орынға соңына (\0) символы қосылған "Сәлем, Азат!" тіркесін (ASCII коды 0) жазып қояды. - сол тіркестің алғашқы символы адресін msg айнымалысына меншіктейді. strcpy функциясын орындалып, puts(msg) командасы бҧрынғыша нӛлдік символға дейінгі мәліметті кӛшіреді. Енді символдық тіркестерден тұратын жиымдарды қарастыралық. Бҧл жиымдардың әрбір жолы символдық жиым болып табылады. Мысалы, статикалық жиымның сипатталуы келесідей тҥрде жазылуы мҥмкін: static char *m[4]={"регистр","жады","курсор","элемент"; бҧл жиым символдық тіркестерге сілтейтін 4 нҧсқауыш болып табылады. Сонымен, символдық тіркестер жиымдар болып табылатын болса, онда осы жиымдарға сілтейтін 4 нҧсқауыш қарастырылады. 1-жолға сілтейтін 1-156

157 нҧсқауыш болып m[0] есептеледі, m[1] 2-жолға сілтейтін 2-нҧсқауыш болып табылады. Сонымен, әрбір нҧсқауыш соған сәйкес жолдың немесе қатардың ең бірінші символына сілтейді. *m[0]== р ; *m[1]== ж ; *m[2]== к ; *m[3]== э ; Тіркестерден қҧрылған жиымдарды сипаттағанда, символдық тіркестер кӛлемін кӛрсетуге де болады және бҧл сипаттауда тіркестердің ҧзындығын келесідей тҥрде кӛрсетуге болады: static char m[10]; Символдар тіркестерін енгізу/шығару ҥшін printf() және scanf() функцияларының %s форматы қолданылады. Тағы мысалдар келтірейік. /* символдық тіркесті шығару */ #include <conio.h> #include <stdio.h> void main() {char b[]="сезам, ашыл!"; clrscr(); printf("%s",b); getch(); Мҧндағы b жиымының ҧзындығы 13 символ, яғни сӛздер ҧзындығынан 1-ге артық. Енді бір сӛйлем енгізіп, соның соңғы сӛзін экранға шығарайық. #include <conio.h> #include <stdio.h> void main() { char s,ss; // s енгізілетін символ // ss алдыңғы символ char a[80]; // сӛз жиымы int i,k; // k сӛз ені clrscr(); printf("соңында нүкте бар сӛйлем енгізіңдер:\n ); for(i='0',s=' ',k=0;i<=79;i++) { ss=s; s=getchar(); if (s==' ') continue; if (s=='.') break; if (ss==' ') k=0; a[k]=s; k++; //нүктеден кейін шығу не тіркес біткесін шығу if (i==80 k==0) printf("сӛйлем дұрыс емес \n"); else 157

158 { a[k]= \0 ; // жол соңы printf("ең соңғы сӛз: %s",a); getch(); мҧнда символдар біртіндеп getchar() функциясы арқылы енгізіледі. Егер бос орын енгізілсе continue операторы келесі қадамға кӛшіреді. Нҥкте енгізілсе цикл тоқталады, бірақ алыңғы k символда соңғы сӛз сақталады. Егер символ нҥкте де, бос орын да емес болса, онда алдыңғы символ қарастырылады. Егер ол бос орын болса, онда келесі сӛз енгізіліп, k нӛлге тең болады. Циклден шығу нҥкте арқылы немесе 80 символ енгізілген соң орындалады. Келесі мысалда сӛз тіркесінің ҧзындығы екі тәсілмен анықталады. #include <conio.h> #include <stdio.h> #include <string.h> void main() { char st[80]; int i; clrscr(); puts("сӛз тіркесін енгізіп, Enter басыңыз:"); gets(st); i=0; while (st[i++]) ; printf("енгізілген тіркес ұзындығы: %i\n",i-1); puts("сӛз тіркесін енгізіп, Enter басыңыз:"); gets(st); printf("енгізілген тіркес ұзындығы: %i\n", strlen(st)); getch(); Енді бір сӛз тіркесін енгізіп, оның ішінде т символының неше рет кездесетінін табайық. #include <conio.h> #include <stdio.h> #include <string.h> void main() { char str[80]; int s=0; clrscr(); 158

159 puts("сӛз тіркесін (сӛйлем) енгізіңіз:"); gets(str); for (int i=0; i<strlen(str); i++) if (str[i] == 'т') s+=1; printf("'т' символы %i рет кездеседі\n",s); getch(); Ендігі мысалда енгізілген сӛздің палиндром (алды-артынан оқығанда, мәні бірдей керек, қазақ) екенін анықтайық. #include <conio.h> #include <stdio.h> #include <string.h> void main() { char str[80]; int k,s=0; clrscr(); puts("бір сӛз (палиндром) енгізіңіз:"); gets(str); k=strlen(str); for (int i=0; i<k/2; i++) if (str[i] == str[k-i-1]) s+=1; if (s==k/2) puts("сӛз - палиндром."); else puts("сӛз - палиндром емес."); getch(); Сӛз тіркестерін енгізу функциялары scanf(), gets(str) Scanf() функциясы тіркестік айнымалылар мәнін %s форматымен енгізеді, бірақ ол тіркесті тек бірінші босорын таңбасына дейін ғана енгізе алады. Ал gets(str) функциясы арасында босорыны бар тіркестерді енгізеді, енгізу ENTER пернесімен аяқталады. Екі функция да тіркес соңына нӛлдік байт қосып жазады. Оның ҥстіне тіркес символдық жиым болып, ал жиым аты оның компьютер жадындағы алғашқы адресіне сілтеме болғандықтан, тіркестік айнымалы атының алдына «&» символы жазылмайды Сӛз тіркестерін шығару функциялары сprintf(),puts(),cputs() printf() экранға формат арқылы сӛз тіркесін шығарады; сprintf() экранға printf() сияқты формат арқылы сӛз тіркесін шығарады, тек олардың тҥстерін textcolor() және textbackground() функциялары арқылы ӛзгертуге мҥмкіндік береді; puts(str) экранға сӛз тіркесін шығарып, курсорды бірден келесі жолдың басына алып барады, мҧндағы str тіркестік константа немесе тіркестік айны- 159

160 малы. Бҧлар stdio.h тақырып файлы бойынша жҧмыс істейді. Екі функция да символдық жиымды нӛлдік байтқа дейін шығарады. printf() функциясы символ тіркесі шығарылған соң, курсорды келесі жолға кӛшірмейді, ол ҥшін арнайы формат (\n) жазылуы тиіс. Ал puts() функциясы символдар шығарылған соң, автоматты тҥрде курсорды келесі жол басына кӛшіреді. //puts функциясын пайдалану мысалы #include <stdio.h> #include <conio.h> main() { char str1[]= abc ; char str2[]= def\nghi\n ; char str3[]= jkl ; puts(str1); puts(str2); puts(str3); Нәтижесі: abc def ghi jkl cputs(str) экранға сӛз тіркестерін шығарып, олардың тҥстерін textcolor() және textbackground() функциялары арқылы ӛзгертуге мҥмкіндік береді, conio.h тақырып файлы бойынша жҧмыс істейді. Сӛз тіркестерімен орындалатын басқа операциялар да стандартты функциялар арқылы атқарылады. Ол функциялар жҧмыс істеуі ҥшін string.h тақырыптық файлы қажет. Жалпы сӛз тіркестеріне қолдану ҥшін stdlib.h немесе string.h тақырыптық файлдары қолданылады Сӛз тіркестерімен жұмыс істейтін ӛзге функциялар 1) strlen(str) функциясы str сӛз тіркесіндегі символдар санын (соңғы нӛлді есепке алмайды), яғни жолдың ҧзындығын анықтайды, оның типі int, тақырыптық файлы <string.h>. Мысалы. Бірнеше сӛз тіркестерінің ҧзындығын анықтайтын программа қҧру керек. // strlen(str) функциясын пайдалану #include <conio.h> #include <stdio.h> #include <string.h> main () { static char t[]="студенттер жайлы хабарлама."; 160

161 clrscr(); printf("%d\n",strlen(t)); printf("%d\n",strlen("студенттер жайлы хабарлама.")); printf("%d\n",strlen("аль-фараби ат.казұу")); printf("%d\n",strlen("")); getch(); Мҧның нәтижесі: ) strcat(stroka1,stroka2) функциясы қатарларды біріктіру ҥшін қолданылады. Ол stroka1 және stroka2 тіркестерін біріктіріп, нәтижені stroka1 айнымалысына меншіктейді, stroka2 тіркесінің мәні ӛзгермейді Мысалы: // strcat(str1, str2) функциясын пайдалану #include <conio.h> #include <stdio.h> #include <string.h> main () { char str1[50]="с тілін оқимыз, "; char str2[]="жақында емтихан тапсырамыз."; clrscr(); printf("%s\n",strcat(str1,str2)); puts(str1); // қатарды экранға шығару puts(strcat("егер жақсы оқысақ, ",str2)); getch(); Мҧның нәтижесі: С тілін оқимыз, жақында емтихан тапсырамыз. С тілін оқимыз, жақында емтихан тапсырамыз. Егер жақсы оқысақ, жақында емтихан тапсырамыз. Келесі мысалда студенттің аты пернелерден енгізіліп, ол екінші тіркеспен біріктіріледі. // strcat(str1, str2) функцияларын пайдалану #include <conio.h> #include <stdio.h> #include <string.h> main () { char name[80]; 161

162 char stud[]= " - КазҰУ студенті"; clrscr(); puts("атын енгіз:"); gets(name); strcat(name,stud); puts(name); getch(); 3) strcmp(stroka1,stroka2) функциясы екі сӛз тіркесін салыстыру ҥшін қолданылады. Егер олар бірдей болса, функцияның мәні 0-ге тең болады, әйтпесе ол екі тіркестің айырмасын береді. Егер stroka1<stroka2 болса, нәтиже 0-ден кіші, ал stroka1 > stroka2 болса, нәтиже 0-ден артық болады. Кӛбінесе бҧл тәсіл екі тіркестің бірдей еместігін анықтау ҥшін ғана қолданылады. Мысалы: main () { printf("%d\n",strcmp("сәлем","сәлем")); printf("%d\n",strcmp("azat","izat")); printf("%d\n",strcmp("абайда","абайла")); getch(); Мҧның нәтижесі: Алғашқы екі сӛз бірдей, нәтижесі 0, келесі екі сӛздің алғашқы әрпі әр тҥрлі, олардың ASCII-кодтарының айырмасы -8 (А - 65, I - 73), ал 3-жолы -7 (д 164, л 171, олардың кодтарының айырмасы = -7). // strcmp(str1, str2) функциясын пайдалану #include <conio.h> #include <stdio.h> #include <string.h> #define NAME "Ритчи" main () { char f[20]; puts("с тілінің авторы кім:"); gets(f); while(strcmp(f,name)!=0) {puts("басқа кім болуы мүмкін:"); gets(f); puts("жауап дұрыс!"); getch(); 162

163 Нәтижесі: С тілінің авторы кім: Керниган басқа кім болуы мүмкін: Ритчи Жауап дұрыс! 4) strcpy(str1,str2) функциясы сӛз тіркесінің кӛшірмесін алу ҥшін қолданылады, мҧнда str2 айнымалысындағы сӛз тіркесі str1 айнымалысына кӛшіріледі. Мысалы: // strcpy(str1, str2) функциясын пайдалану #include <conio.h> #include <stdio.h> #include <string.h> main () { char str1[21]; strcpy(str1,"хал қалай, Азат?"); puts(str1); strcpy(str1,"тамаша!"); puts(str1); getch(); Нәтижесі: Хал қалай, Азат? Тамаша! 2-мысал: // strcpy(str1, str2) функциясын пайдалану #include <conio.h> #include <stdio.h> #include <string.h> #define stroka "кӛшіру функциясы" main () { char *ptr=stroka; char res[25]; clrscr(); puts(ptr); puts(res); strcpy(res,ptr); puts(ptr); puts(res); getch(); 163

164 Нәтижесі: кӛшіру функциясы кӛшіру функциясы кӛшіру функциясы Мҧнда ptr айнымалысы кӛшіру функциясы сӛзін береді, res айнымалысы бос жол береді, ал келесі жолы екеуі де кӛшіру функциясы сӛзін береді. 5) strstr(str1,str2) функциясы 2-ші кӛрсетілген жолды 1-ші жолдың ішінен іздейді. 6) strset(str,ch) функциясы берілген қатардағы барлық символдарды кӛрсетілген символға (char ch) ауыстырады. 7) strtod(str1,str2) функциясы берілген қатарды double типті санға ауыстырады. 8) strchr(str,c) функциясы берілген қатардағы коды кӛрсетілген символдың позициясын анықтайды. 9) strrev(str) функциясы берілген қатардың барлық символдарын керісінше бейнелейді. 10) strpbrk(str1,str2) функциясы 2-ші қатардың кез келген символын 1-ші қатардан іздейді. Сӛз тіркесін ӛңдейтін функциялар туралы мәліметтер Б қосымшасында келтірілген. Бақылау сұрақтары 1. Тіркестік айнымалылардың сипатталу тәсілдері қандай? 2. Тіркестік айнымалы қандай идентификатормен және қалай анықталады? 3. Бір тіркестік айнымалыға немесе тұрақтыға қанша символ жазуға болады? 4. Тіркестік айнымалының ұзындығы қалай анықталады? 5. Тіркестік өрнектер дегеніміз не? 6. Тіркестік айнымалылар мен тұрақтыларға қандай амалдар қолданылады? 7. Тіркестің ішкі символдарын қалай бөліп алуға болады? 8. С тілінде сөз тіркестерін өңдейтін қандай функциялар бар? Оларды қалай пайдаланады және олар қалай жазылады? ТАПСЫРМАЛАР 1. Бiр топтағы фамилиялары бiрдей студенттерді табыңдар. 2. Топ студенттері фамилиялары мен аттарының бiрiншi әрпiн шығарыңдар. 3. Әрбiр сӛзден кейiн бiр бос орын қалдырылған сӛйлемдер берiлген. Қҧрамында дауысты әріптер ең кӛп кездесетiн сӛздi табыңдар. 4. Әрбiр сӛзден кейiн бiр бос орын қалдырылған сӛйлемдер берiлген. Қҧрамында берiлген әрiптен басталатын сӛздердiң санын анықтаңдар. 5. Әрбiр сӛзден кейiн бiр бос орын қалдырылған сӛйлем берiлген. Сӛйлемдегі ең ҧзын сӛздi табыңдар. 6. Әрбiр сӛзден кейiн бiр бос орын қалдырылған сӛйлем берiлген. Сӛйлем ішіндегі жақшалардың дҧрыс қойылғанын тексерiңдер. 164

165 7. Әрбiр сӛзден кейiн бiр бос орын қалдырылған сӛйлемдер берiлген. Сӛйлем ішіндегі жақшаға алынған мәтiндердi ӛшіріңдер. 8. Берілген сӛз тіркесіндегі әрбiр нҥктенi кӛп нҥктемен (яғни ҥш нҥктемен) алмастырыңдар. 9. Алдыңғы есеп шартындағы қатар келген нҥктелердiң әрбiр тобын бiр нҥктемен алмастырыңдар. 10. Дҥкендегi кассир кӛмекшiсiне арналған программа қҧрыңдар. Программа тауардың бағасын, мӛлшерiн, сатып алынған тауарлар бағасының қосындысын есептеп, сатып алушының берген ақшасының мӛлшерiн сҧрап, оған қайтарылатын соманы да анықтайды. 11. Әрбiр сӛзден кейiн бiр бос орын қалдырылған сӛйлем берiлген. Барлық сӛздердi керiсiнше жазып шығыңдар. 12. Пернетақтадан енгiзiлген сӛздердегi әрiптердiң санын есептейтiн программа жазыңдар. Tапсырманы do while циклында орындаңдар. 13. Натурал п саны және S 1, S 2,... Sп символдары берiлген. Осы символдардың арасында неше рет + символы кездесетiнiн анықтаңдар. 14. Натурал п саны және S 1, S 2,... Sп символдары берiлген. Осы символдардың арасында * символдарының санын есептеңдер. 15. Натурал п саны және S 1, S 2,... Sп символдары берiлген. Осы символдардың арасында қандай символдар кӛп: + немесе * символы ма? 16. Сӛз тiркесi енгiзiлгеннен кейiн оның қҧрамында бір символ қалғанша, тіркесті цикл сайын бір символға қысқарта отырып, сӛздердің барлық нҧсқаларын экранға шығаратын программа жазыңдар. 17. Енгізілген сӛз тiркесiндегі сӛздердiң санын анықтайтын программа жазыңдар. Бiр сӛз екiншiсiнен бiр бос орын арқылы айырылады деп санау керек. 18. Мәтiнi пернетақтадан енгiзiлген телеграмманың бағасын есептейтiн программа жазыңдар. 19. Берiлген сӛзде бiрiншi және соңғы әрiптердiң қайсысы кӛп кездесетiнiн анықтайтын программа жазыңдар. 20. а әрпiмен аяқталатын атау септiгiндегi зат есiм берiлген. Осы сӛздi септеп, басып шығарыңдар. 21. Берiлген сӛздің жҧп нӛмiрлi орындарында қанша о әрпi бар екендiгiн анықтайтын программа жазыңдар. 22. Студенттің фамилиясы, есiмi және әкесiнiң аты бос орындармен бӛлiнiп берiлген. Студенттің аты-жӛнінің инициалдарын (алғашқы әрiптерiн) басып шығаратын программа жазыңдар. 23. Сӛз тіркесіндегi а әрпiн ӛшіретін программа жазыңдар. 24. Мәтiндегi соңғы әрiппен бiрдей әрiптердi жоятын программа жазыңдар. 25. Z, Х сӛздері берілген. Z сӛзiнде кездесетiн барлық әрiптердi Х сӛзiнен ӛшіріп тастайтын программа жазыңдар. 26. Берiлген сӛздегi әр тҥрлi әрiптердiң санын есептейтiн программа жазыңдар. 27. Сӛздердiң әрбiр ҥшiншi әрпiн жоятын программа жазыңдар. 165

166 28. Берiлген мәтiндегi Айна сӛзiн Асыл сӛзiне ӛзгертетiн программа жазыңдар. 29. Пернетақтадан енгiзiлген символды жазылған сӛз тiркесінен ӛшіретін программа жазыңдар. Ӛшіру процесiн жеке функция етіп қарастырыңдар. 30. Берiлген мәтiндегi кездесетiн а әрпiн о әрпiне ауыстырыңдар. 31. Енгiзiлген сӛз тіркесін керiге айналдыратын, яғни символдарды керi тәртiпте орналастыратын программа қҧрыңдар. 32. Енгiзiлген сӛздiң палиндром болатынын/болмайтынын анықтайтын программа қҧрыңдар. 33. Пернетақтадан енгiзiлген символдарды ASCII кестесiнде нӛмiрлерiнiң ӛсу ретi бойынша сҧрыптайтын программа жазыңдар. 34. Бос орындармен бӛлініп жазылған ҥш сӛзден тҧратын сӛйлемдегi ең қысқа сӛздiң ҧзындығын есептеп шығаратын программа жазыңдар. 35. Экранға жылжымалы жолды шығаратын программа жазыңдар. 36. Сӛйлемдегi жҥйелі жақшаға алынған мәтіндерді және жақшаның ӛзiн ӛшіретін программа қҧрыңдар. 37. Ҧзындығы 25 символдан артпайтын сӛз тіркесін алып, одан мҥмкіндігінше бірнеше жаңа сӛз қҧрастырыңдар. 38. Сӛз тіркесіндегі кездесетін а әрпін ә әрпімен ауыстыратын программа қҧру керек. 39. Пернелерден енгізілген сӛздің ҧзындығын анықтайтын программа жазу қажет. Программаны whіle do циклі арқылы ҧйымдастырып, программа жҧмысын аяқтауды 999 тіркесін енгізу арқылы жҥзеге асыру керек. 40. Берілген тіркес қҧрамындағы сӛздер бос орын арқылы бӛлініп жазылған деп есептеп, олардың ішіндегі ең ҧзын сӛзді табу керек. 41. Берілген мәтінде ӛзің қалап алған сӛз қанша рет кездесетінін анықтау керек. 42. Берілген мәтін сӛздерінде ең кӛп кездесетін әріпті табу қажет. 43. Берілген мәтін сӛздерінің ең жиі ҧшырасатын алғашқы әрпін анықтау керек. 44. Берілген сӛз тіркесіндегі а әрпінің санын анықтайтын программа қҧрыңдар. 45. Берілген мәтін сӛздері арасындағы бос орынды ҥтірмен алмастырыңдар. 46. Берілген мәтіннің сӛздері бір-бірінен бірнеше бос орын таңбасымен бӛлініп жазылған, сол сӛздердің арасына тек бір бос орын таңбасын қалдырып, қайта жазып шығыңдар. 47. Берілген мәтіннің неше сӛзден тҧратынын табу керек (сӛздер арасындағы бос орын тҧратынын пайдаланыңдар). 48. Берілген мәтінде ас тіркесі қанша рет кездеседі? 49. Берілген мәтіндегі а әрпімен аяқталатын сӛздерді экранға шығару керек. 50. Енгізілген сӛз тіркесі сан болатынын немесе болмайтынын анықтау қажет 51. Енгізілген ҥш сӛздің ішіндегі ең қысқасының неше символдан тҧратынын анықтаңдар. 52. Енгізілген мәтіннің жҧп орында тҧрған сӛздерінің ішінде қанша 'е' әрпі кездесетінін табыңдар. 53. Енгізілген сӛзде қандай әріптер қанша рет кездесетінін анықтау керек. 166

167 54. Сӛзбен енгізілген сан аттарын цифр тҥрінде жазып шығатын программа қҧрыңдар. 55. Сӛз тіркесі тҥрінде санмен енгізілген мәліметті цифрсыз жазылған сӛз тіркесіне айналдырыңдар, мысалы, '56' 'елу алты', '-125' 'минус бір жҥз жиырма бес', т.с.с. Есептер 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-ке қалдықсыз бӛлінетін болса, тіркестегі барлық жақша тҥрлерінің санын анықтаңдар. 7 вариант 1. Екі сӛйлемнен тҧратын сӛз тіркесінің сӛйлемдерінің орындарын алмастырыңдар. 2. Берілген сӛз тіркесінің ҧзындығын L анықтап, егер L 3-ке қалдықсыз бӛлінетін болса, тіркестегі екінші сӛзді ӛшіріп тастаңдар. 8 вариант 1. Берілген сӛз тіркесінің алғашқы нҥктесіне дейінгі символдарды с әрпіне алмастырыңдар. 2. Берілген сӛз тіркесіндегі бірінші және соңғы сӛзді керісінше жазып шығыңдар. 9 вариант 1. Берілген сӛз тіркесінің алғашқы сӛзі мен екінші сӛзін керісінше жазып шығыңдар. 2. Бірнеше сӛйлемнен тҧратын сӛз тіркесіндегі екінші сӛйлем ішіндегі Е әрпінің санын анықтаңдар. 10 вариант 167

168 1. Берілген сӛз тіркесінде жақшалар бар. Алғашқы жақшалар ішіндегі сӛзді анықтаңдар. 2. Берілген сӛз тіркесіндегі ең ҧзын сӛздің енін тауып, оны керісінше жазып шығыңдар. 11 вариант 1. Сӛз тіркесі берілген. Оның ішіндегі леп белгілерін нҥктемен алмастырып, нҥктелер санын анықтаңдар. Леп белгісі жоқ болса, ол туралы мәлімет беріңдер. 2. Қҧрамына сандар кіретін сӛз тіркесінің ҧзындығын L анықтап, егер L жҧп сан болса, онда тіркестегі барлық екілік сандарды ӛшіріп тастаңдар. 12 вариант 1. Сӛз тіркесі берілген. Оның ішіндегі нҥктелерді ҥш нҥктемен алмастырып, нҥктелер санын анықтаңдар, нҥкте жоқ болса, ол жайлы мәлімет беріңдер. 2. Берілген сӛз тіркесінің ҧзындығын L анықтап, егер L тақ сан болса, онда тіркестің соңғы сӛйлемін анықтау керек, ал жҧп болса тіркес ортасындағы символды анықтау керек. 13 вариант 1. Сӛз тіркесі берілген. Оның ішінде ҥтірлер бары белгілі. Алғашқы ҥтір мен соңғы ҥтірдің қай позицияда тҧрғанын және оларды арасында неше символ бар екенін анықтаңдар. 2. Бірнеше сӛйлемнен тҧратын сӛз тіркесіндегі соңғы сӛйлем ішіндегі А әрпінің санын анықтаңдар. 14 вариант 1. Сӛз тіркесі берілген. Оның ішінде нҥктелер бары белгілі. Сол тіркесте неше нҥкте бар екенін және бірінші нҥктемен екінші нҥкте арасында неше символ орналасқанын анықтау керек. 2. Берілген сӛз тіркесінің ҧзындығын L анықтап, егер L жҧп сан болса, онда тіркестегі алғашқы сӛзді ӛшіріңдер, ал тақ сан болса, соңғы сӛзді ӛшіру керек. 15 вариант 1. Сӛз тіркесі берілген. Оның ішінде қатар орналасқан бірдей символдар бар екенін анықтау керек. Ондай символдар жоқ болса, ол туралы мәлімет беру керек. 2. Берілген сӛз тіркесінің ішінде ДОС сӛзіне кіретін символдардың нешеу екенін анықтаңдар. 16 вариант 1. Берілген сӛз тіркесінде неше бос орын бар екенін анықтап, сол тіркестегі ең ҧзын сӛздің енін табу керек. 2. Берілген сӛз тіркесінде ба сӛзі неше рет кездесетінін анықтау керек, ондай тіркес жоқ болса, ол туралы мәлімет беріңдер. 17 вариант 1. Берілген сӛз тіркесінде неше арифметикалық амалдар таңбасы бар екенін табыңдар. 2. Берілген сӛз тіркесінің ҧзындығын L анықтап, егер L тақ сан болса, онда тіркестің дәл ортасындағы символды анықтау керек, ал жҧп болса тіркес ортасындағы екі символды анықтау керек. 18 вариант 1. Берілген сӛз тіркесінде неше нҥкте бар екенін және нҥктелер арасында неше символ орналасқандарын анықтау керек. 2. Берілген сӛз тіркесінің ішіндегі барлық! белгісін? белгісіне алмастырыңдар. 19 вариант 168

169 1. Берілген сӛз тіркесіндегі барлық А әріптерін алып тастаңдар да, Е әріптерінің орнына Э әріптерін жазып шығыңдар. 2. Берілген сӛз тіркесінің ҧзындығын L анықтап, егер L 5-ке қалдықсыз бӛлінетін болса, тіркестегі барлық жақша тҥрлерінің санын анықтаңдар. 20 вариант 1. Берілген сӛз тіркесіндегі екінші сӛйлемді экранға шығарыңдар және оның неше символы бар екенін анықтаңдар. 2. Берілген сӛз тіркесінің ҧзындығын L анықтап, егер L 5-ке бӛлінетін сан болса, онда тіркестің дәл ортасындағы символды анықтау керек, ал жҧп болса тіркес ортасындағы сӛзді анықтау керек. 21 вариант 1. Берілген сӛз тіркесіндегі (кириллица) бас әріптерді кіші әріптерге айналдырыңдар. 2. Берілген сӛз тіркесінің ҧзындығын L анықтап, егер L 3-ке бӛлінетін сан болса, онда тіркестің бірінші сӛйлемін экранға шығарыңдар, әйтпесе тіркестің дәл ортасындағы символды анықтау керек. 22 вариант 1. Берілген сӛз тіркесінің ішіндегі бос орын таңбаларын астын сызу ( _ ) таңбасына алмастырыңдар. 2. Берілген сӛз тіркесіндегі Г әріптерінің барлығын G латын әріптеріне айналдырыңдар. 23 вариант 1. Берілген сӛз тіркесіндегі (кириллица) кіші әріптерді бас әріптерге айналдырыңдар. 2. Екі сӛйлемнен тҧратын сӛз тіркесінің сӛйлемдерінің орындарын алмастырыңдар. 169

170 14 ҚОЛДАНУШЫ АНЫҚТАЙТЫН МӘЛІМЕТТЕР ТИПТЕРІ МЕН ҚҰРЫЛЫМДАРДЫ ПАЙДАЛАНУ Практикалық есептерде ӛңделуге тиіс мәліметтердің қҧрылымы кҥрделі де болуы мҥмкін. Соларды айқын, әрі анық бейнелеу ҥшін қарапайым типтер, жиымдар және нҧсқауыштар негізінде жасалған мәліметтер типтері қолданылады. C++ тілі программалаушыға ӛз типін анықтап, солармен жҧмыс істеу ережелерін де анықтауға мҥмкіндік береді. Бҧлар қолданушы немесе программалаушы анықтайтын типтер деп аталып жҥр Типтердің атын ӛзгерту (typedef) Программа жҧмысын тҥсінуді жеңілдету ҥшін, typedef тҥйінді сӛзі арқылы типке жаңа ат беріледі: typedef тип жаңа_ат [ ӛлшемі ]; typedef сӛзі тип спецификаторын анықтайды. Мҧндай сипаттама (хабарлау) қолданушы анықтаған типтерге қысқа және мағыналы аттар беру ҥшін қолданылады. Мысалы: typedef char name [100]; мҧндағы тік жақша синтаксис элементі болып табылады. Ӛлшемі кӛрсетілмеуі де мҥмкін. Мысалдар: typedef unsigned int UINT; typedef char sg[10]; Осылай енгізілген атаулар стандарттық типтердің аттары сияқты қолданылады: UINT i, j; // unsigned int типті 2 айнымалы sg a; // символдардан тұратын a[10] жиымы Тағы бір мысал: typedef char Massiv[20]; typedef struct { char fio[30]; int date, code; double zarplata; Worker; Осылай енгізілген тип атын кейіннен пайдалануға болады: Massiv str[10]; /* әрқайсысы 20 символдан тұратын 10 жолы бар массив */ Worker sotrudniki[50]; /* 50 құрылымнан тұратын массив */ 14.2 Тізбелер (перечисления enum) Программа жазу кезінде бір типтегі әр тҥрлі мәндер қабылдай алатын шамаларды анықтау да кездесіп жатады. Ол ҥшін тізім тҥріндегі мәліметтер типін тізбелерді қолданған жӛн. Enum тҥйінді сӛзі арқылы жасалған тізбелер программаны оқып тҥсінуді жеңілдетеді. Тізбелерге кіретін константалар int типінде болады. Келісім бойынша бірінші константа 0-ге тең, келесісі 1-ге, сонан соң 2-ге, т.с.с. бола береді. Бір тізбедегі барлық константалардың 170

171 аттары әр тҥрлі болуы тиіс. Тізбенің жазылу форматы: enum [тип_аты] {константалар_тізімі; Тип аты программада осы типтегі айнымалыларды анықтау керек болған жағдайда беріледі. Компилятор осындай айнымалылардың константалар тізіміндегі мәндерді ғана қабылдауын қамтамасыз етеді. Константалар бҥтін санды типте болуы тиіс және олар алғашқы мәндерді кәдімгідей тҥрде қабылдауы (инициалдануы) керек. Инициалдану болмаса, бірінші константа нӛл болып саналады да, келесісі алдыңғысынан бірге артық мән қабылдайды. Мысалы: enum {two = 2,three,four,ten = 10,eleven,fifty = ten + 40; мҧнда three және four константаларына 3 және 4 мәндері, ал eleven константасына 11 мәні меншіктеледі. enum color {r,g,b; // r=0, g=1, b=2 enum color {r=2,g=4,b=6; // типті жариялау және инициалдау enum color {r,g=3,b; // r=0, g=3, b=4 Компилятор int және enum типтерінің арасында айырмашылық бар деп есептемейді, сондықтан тізбе типіндегі айнымалыларға программада бҥтін санды мәндер меншіктеле береді. Бірақ C++ тілінде мҧндай меншіктеу типті нақты тҥрде келтіру арқылы орындалады, әйтпесе компилятор ескертпе жасайды. Мысалы: enum weekdays { /* жұмыс күндер: */ Monday, Tuesday, Wednesday, Thursday, Friday; /* Monday 0, Tuesday 1, т.с.с. */ weekdays today; today = (weekdays)1; Тізбедегі константалар аттары бірегей (қайталанбайтын) болуы тиіс, ал мәндері бірдей де бола береді. Тізбелерді қолданудың жай константаларды және #define директивасын пайдаланудан артықшылығы байланысқан константалардың кӛрнекілігінде жатыр және компилятор константаларға бастапқы мән бергенде олардың типін тексере алады. Келесі программада С тілінде тізбемен жҧмыс істеу мысалы кӛрсетілген. #include <stdio.h> enum Months { /* айлар */ January = 1, February, March, April, May, June, July, August, September, October, November, December months; /* мұнда тізбе түрінде 1-ден 12-ге дейінгі сан тізбегі алынған, ӛйткені January айнымалысына 1 меншіктелген */ void main () {int present_month; int diff; /* үстіміздегі ай нӛмірін ( ) енгізу */ printf ("Input the present month number (1-12): "); scanf ("%d",&present_month); months = December; 171

172 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 There are 7 months till the end of the year Press any key to continue 14.3 Құрылымдарды пайдалану С тіліндегі жиымдар бір типтегі мәліметтерді сақтайтын болса, қҧрылымдар ӛзара логикалық байланысқан әртҥрлі типті мәліметтерді байланыстырады. Мысалы, бір жиымда 50 қызметкердің жалақысын сақтай аламыз. Егер солармен байланыстыра отырып, қызметкерлердің аты-жӛнін, жасын, реттік (табельдік) нӛмірін сақтайтын болсақ, мынадай мәліметтер типтерін жазуға тура келеді: char name; // фамилияcы int age; // жасы float salary; // жалақысы unsigned employee_number; // реттік нӛмірі Мҧндайда байланысқан әртҥрлі мәліметтерді бір атаумен сақтау мҥмкіндігін беретін қҧрылымды пайдаланады. Мысалы: struct Employee { char name[64]; // фамилиясы int age; // жасы float salary; // жалақысы unsigned employee_number; // реттік нӛмірі ; Бҧл қҧрылымның аты Employee идентификаторы болып табылады. Оны қҧрылымның тәгі деп, ал оның ішкі элементтерін қҧрылым өрістері деп те атайды. Ӛрістер кез келген типте немесе соларға нҧсқауыш тҥріндегі қҧрылымның адресі арқылы қатынасу амалы ретінде де бола береді Құрылымдарды сипаттау Мәліметтердің қҧрылымдық типтері келесі сипаттаумен анықталады: struct құрылым_аты { элементтерді сипаттау; ; Қҧрылымның атауын, яғни тәгті жазу міндетті емес. Егер қҧрылым атаусыз болса, онда оны сипаттау кезінде осы типке кіретін бірнеше айнымалылардың аты бірден кӛрсетіледі: // Құрылымдар жиымын және құрылымға нұсқауышты анықтау struct { char name[64]; // фамилиясы int age; // жасы float salary; // жалақысы 172

173 unsigned employee_number; // қызметкердің реттік нӛмірі staff[50], *ps; /* бұл құрылымды жариялаудан кейінгі айнымалыларды анықтау */ Қҧрылымдар типіндегі айнымалыларды сипаттау екі жолмен жҥзеге асырылады. Алғашқы тәсіл: struct Shape { /* фигуралар */ int type; // 0 - шеңбер, 1 - квадрат, 2 - үшбұрыш int color; // түсі float radius; // радиусы float area; // ауданы float perimeter; // периметрі ; Shape new_shape, old_shape; Екінші тәсіл: struct Shape { /* құрылым аты фигуралар */ int type; // 0 - шеңбер, 1 - квадрат, 2 - үшбұрыш int color; // түсі float radius; // радиусы float area; // ауданы float perimeter; // периметрі new_shape, old_shape; немесе мынадай тҥрде де беруге болады: struct gr /* құрылым аты топ */ {char fio[30]; /* құрылым элементі аты-жӛні */ char fak[25]; /* құрылым элементі */ int nomer; /* құрылым элементі */ gruppa1; /* құрылымдық айнымалы аты */ struct gr gruppa2; /* құрылымдық айнымалыны хабарлау */ Қҧрылымға компьютер жадынан орын бӛлу ҥшін қҧрылымдық айнымалыны сипаттау керек: struct құрылым_аты айнымалы_аты; Мҧндайда қҧрылым жарияланған соң оның атын бірден пайдалануға болады (анықтауды кейінірек беруге болады), бірақ мҧндай тәсіл компиляторға қҧрылым мӛлшерін білу қажет етілмейтін кездерде қолданылады: struct First; struct Second { First *p; Second *prev, *suc; ; struct First { /* First құрылымын анықтау */ ; Бҧл қҧрылымның байланысқан тізімдерін қҧру мҥмкіндігін береді. 173

174 Қҧрылымды инициалдаудың (қҧрылым ӛрістеріне мән берудің) бір жолы оның элементтерін сипатталу реттілігімен жҥйелі жақша ішінде біртіндеп беру болып табылады: struct Employee { char name[64]; // фамилиясы int age; // жасы float salary; // жалақысы unsigned employee_number; // реттік нӛмірі new_employee = {"Kadуrov", 32, 300.5, 1122; Қҧрылымдағы жиымдарды инициалдау кезінде олардың элементтерін жҥйелі жақшалар арқылы бӛліп, қҧрылым ӛрістеріне мән беруге болады, мысалы: struct complex{ unsigned code; float salary; comp [2][3]={ {{1021, 301, {1031, 289, {1041, 250, {{1121, 300, {1131, 222, {1141, 220 ; немесе тӛмендегідей тҥрде де инициалдау мҥмкіндіктері бар: struct date { int day, month, year; ; d[5]={ {1,3,1980, {5,1,1990, {1,1,2002 ; Қҧрылымдарды анықтау барысында олардың элементтеріне бастапқы мәндерді пернелерден енгізіп те меншіктеуге болады. Қҧрылым элементтерінің мәндерін енгізу ҥшін ағымдық енгізу операторы cin>> (С++ стилінде) немесе форматпен енгізу операторы scanf қолданылады. Егер қҧрылымды сипаттау жолы программадағы барлық функциялардың алдында орналасса, онда ол қҧрылымды осы программадағы барлық функциялар пайдалана алады Құрылым ӛрістерін пайдалану Қҧрылымның элементін, яғни ӛрістерін пайдалану ҥшін нҥкте (.) қою жолымен (тікелей ену) немесе -> таңбалары арқылы нҧсқауыш бойынша ену амалы қолданылады, мысалы: struct fruit { char name[15] ; int calories; ; struct vegetable { char name[15]; int calories; ; fruit a; vegetable b; 174

175 Қҧрылымды осылай жариялап алған соң оның ӛрістерін a.calories және b.calories деп, келесісін а.name и b.name деп пайдалана береміз. Енді бір программаны толығырақ қарастырайық. 1 мысал. new_employee атты қҧрылым ӛрістерін пайдалану #include <iostream.h> struct Employee { char name[64]; int age; float salary; unsigned employee_number; new_employee = {"Kadyrov", 32, 300.5, 1122; void main() { cout << new_employee.name << endl << new_employee.age << endl << new_employee.salary << endl << new_employee.employee_number << endl; Программа жҧмысы нәтижесі: Kadyrov Тағы бір мысал: /* ойын карталарын сипаттайтын құрылымды анықтау */ enum suit {clubs, diamonds, hearts, spades; /* шыбын, қиық, табан, қарға */ typedef int pips;/* pips (ұпайлар) int синонимі ретінде */ struct card { suit s; pips p; /* 1-ден 13-ке дейін сандар реттілігі Тұз,2,3,...,10,Валет,Дама,Корольдерге сәйкес келеді */ ; Келесі анықтаулар card типіндегі m1, m2 идентификаторларына орын бӛледі: card m1,m2; Қҧрылымның m1 және m2 ӛрістерін пайдалану ҥшін нҥкте арқылы жазылатын таңдау жолын қолданамыз, m1 ӛрісіне екілік қиық, ал m2 ӛрісіне қарғаның дамасын тағайындағымыз келеді делік: m1.s = diamonds; m1.р = 2; 175

176 m2.s = spades; m2.p = 12; Келесідей анықтаулар мен меншіктеу амалдарын қарастырайық: card cd, *рс = &cd; cd.p = 2; cd.s = spades; Қҧрылым элементтерін пайдалануды нҧсқауыш тҥріндегі -> операторы арқылы да орындауға болады. Қҧрылым элементтерін пайдалану Ӛрнек Оның басқаша жазылуы Мәні cd.p рс -> р кесте cd.s рс -> s spades(3) enum арқылы шығады. (*рс).s pc -> s spades(3) Қҧрылымдар объектіге бағытталған программалаудың іргелі ҧғымдарының бірі кластар қҧру негізі болып саналатын маңызды мәліметтер типіне жатады Құрылымдар жасау Қҧрылымдар жасауға толығырақ бір мысал келтірейік 2 мысал. Қайық атын, шыққан жылын және бағасын қҧрылым тҥрінде жазу /* struct_2 Құрылым жасау мысалы */ #include <stdio.h> # define STR15 16 /* аяқтау нӛлі үшін бір символ қосу */ struct stboat // Қайық құрылымы { char model[str15]; // моделі int year; // шығарылған жылы float price; // бағасы boat; // қайық void main() { /* қайық моделін енгізу */ printf("\n Input a model of the boat: "); gets(boat.model); /* шығарылған жылын енгізу */ printf("\n Input the year of the creation of the boat: "); scanf("%d",&boat.year); /* бағасын енгізу */ printf("\n Input the price of the boat: "); scanf("%f",&boat.price); 176

177 /* барлық енгізілген мәліметтерді шығару */ printf("\n\nthe boat %s, the year of the creation %d\n", boat.model, boat.year); printf("the boat was sold for %8.2f tenge.\n", boat.price); Программаны орындау жҧмысының нәтижесі: Input a model of the boat: Tulpar Input the year of the creation of the boat: 2009 Input the price of the boat: The boat Tulpar, the year of the creation 2009 The boat was sold for tenge. Қҧрылымды функция аргументі ретінде беру тәсілін қарастырайық. Мҧнда қҧрылым аргумент ретінде мәні бойынша функцияға беріледі, яғни функцияға тек мәліметтер кӛшірмесі ғана жіберіледі. 3 мысал. Геометриялық фигуралар тҥрлерін қҧрылым тҥрінде жазу /* struct_3 Құрылымды функция аргументі ретінде қолдану */ #include <stdio.h> #define PI 3.14 struct Shape { /* фигура */ int type; // 0 - шеңбер, 1 - квадрат, 2 - үшбұрыш char color; // түсі float radius; // радиусы double area; // ауданы ; void show_struct (Shape ); /* show_struct (құрылымды кӛрсету) функциясы прототипі */ void main() { Shape circle; circle.type = 0; circle.color = 'r'; circle.radius =5.0; circle.area = PI * circle.radius * circle.radius; show_struct (circle ); /* функцияны шақыру */ /* функцияны сипаттау */ 177

178 void show_struct (Shape shape) { printf("shape.type %d\n", shape.type); printf("shape.color %c\n", shape.color); printf("shape.radius %f\n", shape.radius); printf("shape.area %f\n", shape.area); Программа жҧмысының нәтижесі (14.1-сурет): shape.type 0 shape.color r shape.radius shape.area Press any key to continue Қҧрылымдарға нҧсқауыш ретінде берілетін мәліметтерді қарастырып, функция ішінде қҧрылымды ӛзгерту тәсіліне программа қҧрып кӛрейік. 4 мысал. Геометриялық фигуралар тҥрлерін қҧрылым тҥрінде жазу /* struct_4 Құрылым ӛрістерінің мәндерін ӛзгерту керек болса, онда құрылым ретіндегі айнымалы мән бойынша емес, сілтеме бойынша берілуі тиіс. Функция ішінде құрылым ӛрістерін пайдалану -> амалы арқылы орындалады */ #include <stdio.h> #define PI 3.14 struct Shape { int type; /* 0 - шеңбер,1 - квадрат,2 теңбүйірлі үшбұрыш */ char color; // түсі float radius; // радиусы немесе қабырғасы double area; // ауданы circle = {1,'b',2,4; /* бастапқы мән беріп инициалдау */ void change_struct (Shape *) ; /* change_struct функциясы прототипі (ағылш. құрылым ӛзгерту) */ void main () { /* функцияға мәлімет беруге дейін */ printf("before\n"); printf("circle.type %d\n", circle.type); printf("circle.color %c\n", circle.color); printf("circle.radius %f\n", circle.radius); printf("circle.area %f\n", circle.area); change_struct (&circle ); /* функцияны шақыру */ /* функцияға мән бергеннен кейін */ сурет

179 printf("after\n") ; printf("circle.type %d\n", circle.type); printf("circle.color %c\n", circle.color); printf("circle.radius %f\n", circle.radius) ; printf("circle.area %f\n", circle.area); /* функцияны сипаттау */ void change_struct (Shape *shape) { shape -> type = 0; shape -> color = 'r'; shape -> radius =5.0; shape -> area = PI * shape -> radius * shape -> radius; Программа жҧмысы нәтижесі (14.2-сурет): Before circle.type 1 circle.color b circle.radius circle.area After circle.type 0 circle.color r circle.radius circle.area Press any key to continue 14.2-сурет Қҧрылымдардың ӛрістерінің ӛздері де қҧрылым бола алады. Енді соған бір мысал келтірейік. 5 мысал. Қызметкерлер туралы мәліметтерді қҧрылым тҥрінде жазу struct Employee { /* "Қызметкер" құрылымы */ char name[64]; // фамилиясы int age; // жасы unsigned employee_number; // реттік нӛмірі struct Date { // датасы int day; // күні int month; // айы int year; // жылы hiredate; // жұмысқа алынған мерзімі float salary; // жалақысы new_employee; // жаңа қызметкер Ішкі қҧрылым элементін пайдалану ҥшін. (нҥкте) операциясы қолданылады. Алдымен сыртқы қҧрылым элементі, сонан соң ішкі қҧрылым элементі кӛрсетіледі. Мысалы: new_employee.hire_date.month = 12; 179

180 Қҧрылымдар жиымын қҧруға да бір мысал келтірейік. 6 мысал. Қҧрылымдар жиымы /* struct_6 Құрылымдар жиымын құру */ #include <stdio.h> #define STR15 16 #define MAX 50 struct boat // "қайық" құрылымы { char model[str15]; int year; float price; ; void main () { int i, k; boat Boats[MAX]; /* Қанша қайық бар? */ printf("how many boats? "); scanf("%d", &k); for (i = 0; i < k; i++) { flushall() ; /* буферді тазалау алдыңғы scanf() функциясын орындаудан қалған кіріс ағынындағы жаңа жолға кӛшу символын алып тастау үшін керек */ /* қайық моделін енгізу */ printf("\n Input a model of the boat: "); gets(boats[i].model); /* қайықтың шыққан жылын енгізу */ printf("\n Input the year of the creation of the boat: "); scanf("%d",&boats[i].year); /* қайықтың бағасын енгізу */ printf("\n Input the price of the boat: "); scanf("%f",&boats[i].price); printf("\n\n"); /* циклде барлық қайықтар туралы мәлімет шығару */ for (i = 0; i < k; i++) { printf("the boat %s, the year of the creation %d\n", Boats[i].model, Boats[i].year); printf("this boat was sold for %8.2f $.\n", Boats[i].price); Программаны орындау нәтижелері: How many boats? 3 Input a model of the boat: Guldyz Input the year of the creation of the boat: 2006 Input the price of the boat:

181 Input a model of the boat: Tulpar Input the year of the creation of the boat: 2009 Input the price of the boat: Input a model of the boat: Superi Input the year of the creation of the boat: 2011 Input the price of the boat: The boat Guldyz, the year of the creation 2006 This boat was sold for tenge. The boat Tulpar, the year of the creation 2009 This boat was sold for tenge. The boat Superi, the year of the creation 2011 This boat was sold for tenge Құрылым жиымдарын функция аргументі ретінде пайдалану Егер қҧрылымдар орнына оларға арналған нҧсқауышты жазатын болсақ, онда қҧрылымдар функцияларға мәні бойынша беріледі де, программаның орындалуы жылдамдайды, ӛйткені мҧндайда бастапқы мәліметтердің кӛшірмелері жасалмайды. Келесі мысалда қҧрылымдар орнына нҧсқауышты пайдалану кӛрсетілген. // struct_5 құрылымдар орнына оған арналған нұсқауышты қолдану мысалы #include <iostream.h> #define STR15 16 #define MAX 50 int k; struct boat { char model[str15]; int year; float price; ; void print_data(boat *); void main() { int i; boat Boats[MAX], *pastboats; pastboats = &Boats[0]; cout << "How many boats? "; cin >> k; for (i = 0; i < k; i++) { cout << "\n Input a model of the boat: "; cin >> pastboats -> model; cout << "\n Input the year of the creation of the boat: "; cin >> pastboats -> year; cout << "\n Input the price of the boat: "; cin >> pastboats ->"price; 181

182 pastboats++; pastboats = &Boats[0]; print_data(pastboats); void print_data(boat *ptr_boat) { int i; cout << "\n"; for (i = 0; i < k; i++) /* k айнымалысының кӛріну аймағына назар салыңдар */ { cout << "The boat " << ptr_boat -> model << " the year of the creation " << ptr_boat -> year << endl; cout << " was sold for " << ptr_boat -> price << "$" << endl; ptr_boat++; Программаның орындалу нәтижесі: How many boats? 3 Input a model of the boat: Yakor Input the year of the creation of the boat: 1987 Input the price of the boat: Input a model of the boat: Blue Input the year of the creation of the boat: 2003 Input the price of the boat: Input a model of the boat: Volna Input the year of the creation of the boat: 2000 Input the price of the boat: The boat Yakor the year of the creation 1987 was sold for 18234$ The boat Blue the year of the creation 2003 was sold for 44321$ The boat Volna the year of the creation 2000 was sold for 39876$ Press any key to continue 14.8 Біріктірмелер (объединение union) Біріктірмелер бҧл ӛрістерінің барлығы да бір адресте орналасатын қҧрылымның бір тҥрі. Оны сипаттау форматы да қҧрылымдардікі сияқты, тек struct тҥйінді сӛзі орнына union сӛзі қолданылады. Біріктірме ҧзындығы оның ӛрістерінің ең кӛлемдісінің ҧзындығына тең болады. Әрбір уақыт кезеңінде «Біріктірмелер» типті айнымалыда тек бір мән ғана сақталады. 182

183 Біріктірмелерді бір сәтте бір ӛріс қана пайдаланылатыны белгілі жағдайларда, тек компьютер жадын ҥнемдеу ҥшін қолданады. Басқаша айтқанда, біріктірмелер бҧл әр тҥрлі уақыт кезеңдерінде әр тҥрлі типтегі объектілер сақталатын жады аймағы. Кез келген сәтте біріктірмеде кӛп дегеннің ӛзінде, тек бір объект сақталады, ӛйткені оның элементтері кезектесе отырып, жадының тек бір аймағын пайдаланады. Программалаушы біріктірмедегі мәліметті соның типіне сәйкес элементтің аты арқылы пайдаланылуын қадағалап отыруы тиіс. Біріктірмеге ең соңғы жазылған элементтен басқаларын пайдалану нәтижесі анықталмаған болып саналады. Енді бір мысал қарастырайық. 1-мысал #include <iostream.h> // С++ тілі стилінде void main () { /* "карточка" немесе "чек" сияқты мәндері бар жаңа pt типін (тӛлем типі) сипаттау */ enum pt {CARD, CHECK; pt type; union payment { char card[25]; long check; info; type = CARD; cout << "Input info.card: "; cin.getline(info.card, 25); cout << "Input info.check: "; cin >> info.check; switch (type) {case CARD : cout << info.card << endl; break; case CHECK: cout << info.check << endl; break; Прогамманың орындалу нәтижесі (14.3-сурет): Input info.card : My bank Input info.check : Алынған мәннің 90 болуы біріктірме элементін пайдалану нәтижесінің анықталмағанын кӛрсетеді. Келесі мысалдағы біріктірмеде ең соңғы орналасқан элемент пайдаланылады. #include <stdio.h> // С тілі стилінде void main () { enum pt {CARD, CHECK; pt type; сурет

184 union payment { char card[25]; long check; info; type = CARD; info.check = 12345; /* Мұнда компьютер жадына соңғы болып орналасқан біріктірме элементі пайдаланылып отыр: */ puts("input info.card:"); gets(infо.card); switch (type) { case CARD : puts(info.card); break; case CHECK: printf ("%d",info.check); break; Программаның орындалу нәтижесі (14.4-сурет): Input info.card: My bank My bank Press any key to continue Бҧл программада дҧрыс нәтиже алынды. Келесі мысал біріктірмелерді дҧрыс пайдалану жауапкершілігі толығынан программалаушыда жатқанын кӛрсетеді. #include <iostream.h> // С++ тілі стилінде union Number { int x; float y; ; void main() 14.4-сурет { Number znachenie; /* соңғы болып znachenie.y элементі мән қабылдайды */ znachenie.x = 100; znachenie.y = 50.; cout << "znachenie.x: " << znachenie.x << " znachenie.y: " << znachenie.y << endl; /* соңғы болып znachenie.х элементі мән қабылдайды */ znachenie.y = 50; znachenie.x = 100; cout << "znachenie.x: " << znachenie.x << " znachenie.y: " << znachenie.y << endl; 184

185 Программа нәтижесі: znachenie.x: znachenie.у: 50 znachenie.x: 100 znachenie.y: e-043 Программа орындалуы барысындағы мынадай мәліметтер znachenie.x: znachenie.y: 50 соңғы элемент znachenie.у болғанын кӛрсетеді. Ал программадағы мынадай мәліметтер znachenie. x: 100 znachenie. у: е-043 соңғы элемент znachenie.х болғанын кӛрсетеді. Біріктірмелер келесі программада кӛрсетілгендей компьютер жадын ҥнемді пайдалану мҥмкіндігін береді. #include <iostream.h> // С++ тілі стилінде union many_types { char с; // 1 байт int ivalue; // 4 байт float fvalue; // 4 байт double dvalue; // 8 байт my_union; void main() { // дұрыс орындалатын енгізу-шығару операциялары my_union.c = 'b'; cout << my_union.c << endl; my_union.ivalue =1990; cout << my_union.ivalue << endl; my_union.fvalue = 19.90; cout << my_union.fvalue << endl; my_union.dvalue = E+13; cout << my_union.dvalue << endl; // дұрыс орындалмайтын енгізу-шығару операциялары cout << my_union.c << endl; cout << my_union.ivalue << endl; cout << my_union.fvalue << endl; cout << my_union.dvalue << endl; /* Программаның бірінші бӛлігі дұрыс орындалды, ӛйткені біріктірмеге әр түрлі типтегі мәліметтер бірден емес, біртіндеп меншіктелді. Ал екінші бӛлікте тек double типті мән ғана дұрыс кӛрсетілді, ӛйткені ол соңында енгізілген болатын. */ /* біріктірменің ең кӛлемді элементіне тең ұзындығын есептеу */ cout << "Size of the union = " << sizeof (many_types) << " bytes" << endl; 185

186 Программаны орындау нәтижесі (14.5-сурет): b e+018 Ш е б54е+018 Size of the union = 8 bytes Press any key to continue 14.9 Биттік ӛрістер Биттік ӛрістер бҧл қҧрылым ӛрістерінің ерекше бір тҥрі. Олар мәліметтерді жинақтап, мысалы, «иә/жоқ» сияқты жалаушаларды ықшамдап орналастыру ҥшін қажет. Мҧндағы компьютер жадының ең кіші адрестелетін ҧяшығы 1 байт, ал жалаушаны сақтау ҥшін бір-ақ бит жеткілікті. Биттік ӛрістерді сипаттау кезінде оның атынан соң қос нҥкте қойылады да, ӛріс ҧзындығы битпен (бҥтін оң константа) кӛрсетіледі: struct Options{ bool centerx:1; bool centery:1; unsigned int shadow:2; unsigned int palette:4; ; Биттік ӛрістер кез келген бҥтін типте бола береді. Ӛріс аты жазылмауы да мҥмкін, мҧндай ӛрістер аппараттық шекараға туралау ҥшін қолданылады. Ӛрісті пайдалану әдеттегідей оның атын кӛрсету арқылы орындалады. Ӛріс адресін алуға болмайды, бірақ жалпы биттік ӛрістерді кәдімгі қҧрылым ӛрістері сияқты пайдалана беруге болады. Жеке биттермен амалдар орындау байт пен машиналық сӛздерге қарағанда, онша ҥнемді орындалмайды, ӛйткені ол ҥшін компилятор арнайы кодтар жасап, программа кодының кӛлемін тым арттырып жібереді. Биттік ӛрістертерді компьютер жадында орналастыру компиляторға және аппаратураға байланысты болады. Келесі қҧрылымды сипаттау мысалын қарастырайық: struct BitCard { /* кӛрсетілген цифрлар бұл биттер саны */ unsigned face : 4; /* 0 тҧз,...,12 король; 4 бит сандарын сақтай алады */ unsigned suit : 2; /* 0 қиық, 1 табан, 2 шыбын, 3 қарға; 2 бит сандарын сақтайды */ unsigned color : 1; /* 0 қызыл, 1 қара; мұнда 1 бит жеткілікті */ ; Биттік ӛрістерді карта элементтерін сақтау ҥшін қолдану мысалы сурет

187 #include <iostream.h> // С++ тілі стилінде #include <iomanip.h> #include <stdio.h> #include <math.h> struct BitCard { unsigned face: 4; unsigned suit: 2; /* ағылш. face карта;0 туз,..., 12 король */ /* ағылш. suit карта түрі;0 қиық, 1 табан,2 шыбын,3 қарға */ unsigned color : 1; /* color түсі; 0 қызыл, 1 қара */ ; void filldeck(bitcard *); /* deck жиымын 52 картамен толтыру */ void deal (BitCard *); /* deal карта тарату; экран 52 карта шығару */ void main () { BitCard deck[52]; /* 52 картадан тұратын жиым */ filldeck(deck) ; deal(deck); void filldeck(bitcard *temp_deck) { for ( int i = 0; i < 52; i++) { temp_deck[i].face = i % 13; temp_deck[i].suit = i / 13; temp_deck[i].color = i / 26; void deal (BitCard *temp_deck) { int l = 0; /* бӛліп шығару үшін */ /* ықшамды болуы үшін карталарды екі бағанға бӛлеміз: 0-25 карталар бірінші баған, карталар екінші баған */ for (int k1 = 0, k2 = k1 + 26; k1 <= 25; k1++, k2++) { cout << "Card: " << setw(3) << temp_deck[k1].face << " Suit: " << setw(2) << temp_deck[k1].suit << " Color: " << setw(2) << temp_deck[k1].color; cout << " Card: " <<setw(3) << temp_deck[k2].face << " Suit: " << setw(2) << temp_deck[k2].suit << " Color: " << setw(2) << temp_deck[k2].color << endl; l++; if (l > 12) { /* жалғастыру үшін Enter басу керек */ printf("press Enter for continuing ") ; getchar(); l = 0; 187

188 Программаның орындалу нәтижелері: Card: 0 Suit: 0 Color: 0 Card: 0 Suit: 2 Color: 1 Card: 1 Suit: 0 Color: 0 Card: 1 Suit: 2 Color: 1 Card: 2 Suit: 0 Color: 0 Card: 2 Suit: 2 Color: 1 Card: 3 Suit: 0 Color: 0 Card: 3 Suit: 2 Color: 1 Card: 4 Suit: 0 Color: 0 Card: 4 Suit: 2 Color: 1 Card: 5 Suit: 0 Color: 0 Card: 5 Suit: 2 Color: 1 Card: 6 Suit: 0 Color: 0 Card: 6 Suit: 2 Color: 1 Card: 7 Suit: 0 Color: 0 Card: 7 Suit: 2 Color: 1 Card: 8 Suit: 0 Color: 0 Card: 8 Suit: 2 Color: 1 Card: 9 Suit: 0 Color: 0 Card: 9 Suit: 2 Color: 1 Card:10 Suit: 0 Color: 0 Card:10 Suit: 2 Color: 1 Card:11 Suit: 0 Color: 0 Card:11 Suit: 2 Color: 1 Card:12 Suit: 0 Color: 0 Card:12 Suit: 2 Color: 1 Press Enter for continuing Card: 0 Suit: 1 Color: 0 Card: 0 Suit: 3 Color: 1 Card: 1 Suit: 1 Color: 0 Card: 1 Suit: 3 Color: 1 Card: 2 Suit: 1 Color: 0 Card: 2 Suit: 3 Color: 1 Card: 3 Suit: 1 Color: 0 Card: 3 Suit: 3 Color: 1 Card: 4 Suit: 1 Color: 0 Card: 4 Suit: 3 Color: 1 Card: 5 Suit: 1 Color: 0 Card: 5 Suit: 3 Color: 1 Card: 6 Suit: 1 Color: 0 Card: 6 Suit: 3 Color: 1 Card: 7 Suit: 1 Color: 0 Card: 7 Suit: 3 Color: 1 Card: 8 Suit: 1 Color: 0 Card: 8 Suit: 3 Color: 1 Card: 9 Suit: 1 Color: 0 Card: 9 Suit: 3 Color: 1 Card: 10 Suit: 1 Color: 0 Card: 10 Suit: 3 Color: 1 Card: 11 Suit: 1 Color: 0 Card: 11 Suit: 3 Color: 1 Card: 12 Suit: 1 Color: 0 Card: 12 Suit: 3 Color: 1 Press Enter for continuing Press any key to continue Биттік ӛрістің адресін алуға болмайды, ал бҧдан басқасында олар қҧрылым ӛрістері сияқты пайдаланыла береді. Енді қарастырылған қҧрылымдардың бірсыпыра ерекшеліктерін атап ӛтейік. Қҧрылым анықталғанда, компьютер жадында орын бӛлінбейді. Қҧрылымды жариялауды аяқтаған соң, нҥктелі ҥтір қоюды ҧмытпау керек. Біріктірмелерде биттік ӛрістер болмайды. Қҧрылымдар тек айнымалылар емес функцияларды да қамти алады (тек C++ ортасында). Қҧрылым функциялары осы қҧрылым ішіндегі айнымалылармен ғана жҧмыс істейді. Қҧрылым мҥшелерінің барлығы да ашық болып саналады. Бақылау сұрақтары 1. Typedef түйінді сөзі не үшін керек? Enum түйінді сөзі ше? 2. Тізбе түріндегі айнымалылар қалай сипатталып, олар қалай инициалданады? 3. Жиымдар мен құрылымдардың қандай айырмашылығы бар? 188

189 4. С тілінде құрылымдар қандай тәсілдермен сипатталады? Олардың бір-бірінен айырмашылықтарын түсіндіріңдер. 5. Құрылым элементтерін қалай инициалдауға болады? 6. Құрылымға нұсқауыш термині нені білдіреді? 7. Құрылымның элементін пайдалану кезінде нүкте (.) немесе -> таңбалары не үшін қолданылады? 8. Құрылымдардың өрістерінің өздері құрылым бола ала ма? 9. Нұсқауыштарды құрылымдарға қатысты қолдану ерекшеліктері қандай? 10. Құрылымдарды функция аргументі ретінде пайдалануға бола ма? 11. Құрылымдармен жұмыс істеуде қандай амалдар қолданылады? 12. Құрылымдар жиымдарын қалай құруға болады? 13. Құрылым элементтерін экранға шығару мүмкіндіктерін көрсетіңдер. 14. Біріктірмелердегеніміз не? Олар қалай сипатталады? 15. Биттік өрістер не үшін қажет?олар компьютер жадынан қанша орын алады? 16. Биттік өрістерді сипаттау қалай атқарылады? ТАПСЫРМАЛАР Келесі мәліметтерден қҧралған тӛрт студент туралы ақпаратты енгізіңіз: - тегі және инициалы; - туған жылы; - оқуға тҥскен жылы; - бірінші семестрдің бағасы: - физика; - жоғарғы математика; - информатика; 1. Әліпби бойынша реттелген студенттердің тізімін шығару керек. 2. Туған жылы бойынша реттелген студенттердің тізімін кӛрсету қажет. 3. Оқуға тҥскен жылы бойынша реттелген озат студенттердің тізімін шығару керек. 4. Сессияны 4 және 5-ке тапсырған студенттердің анкеталық мәліметтері шығарылуға тиіс. 5. Тегі (фамилиясы) Б әрпінен басталатын студенттердің тізімін және олардың барлық пәндер бойынша бағаларын кӛрсету керек. 6. Оқу озаттарының анкеталық мәліметтерін шығару қажет. 7. Тегі А әріпінен басталатын студенттердің тізімін және олардың туған жылдары кӛрсетілуі тиіс. 8. Сессияда «3» деген бағалары бар студенттердің анкеталық мәліметтерін шығару керек. 9. Тегі В және Г әрпінен басталатын студенттердің тізімін және олардың бағаларын шығаратын программа қҧру керек. 10. Сессияны «ҥштік» баға алмай, емтихан тапсырған студенттердің тізімін және олардың туған жылдарын шығару керек. 11. Барлық студенттердің жалпы орта балын және осы орта балдан жоғары балл жинаған студенттердің тізімі кӛрсетілуі тиіс. 12. Барлық студенттердің жалпы орта балын және осы орта балға тең балл жинаған студенттердің тізімін шығару керек. 13. Сессияда екілік алған студенттердің анкеталық мәліметтерін шығару керек. 14. Информатика пәнін 5-ке тапсырған студенттердің анкеталық мәліметтерін экранға шығару қажет. 189

190 15. Физиканы 4-ке және жоғарғы математиканы 5-ке тапсырған студенттердің анкеталық мәліметтері шығарылуы тиіс. Тӛмендегідей іс-әрекеттерді лабораториялық жҧмыстар кезінде орындау керек. 1 нұсқа Flat (бӛлмелер саны, кӛлемі, қабаты, мекен жайы, бағасы) қҧрылымын сипаттаңыз. Пернетақтадан жиымға бес элементтен тҧратын Flat типіндегі мәндер енгізіңіз. Экранға бағалары (пернетақтадан) енгізілген саннан аспайтын пәтерлер жайлы ақпаратты шығару керек. Егер, ондай пәтер болмаса, программа экранға сәйкесінше хабарламаны шығаруы тиіс. 2 нұсқа PEREVOZKI (ҧшақ типі, рейстер саны, осы кезге дейінгі сағатпен берілген ҧшқан мерзімі, мың километрмен берілген ҧшқан қашықтығы) қҧрылымын сипаттаңыз. Пернетақтадан жиымға алты элементтен тҧратын PEREVOZKI типіндегі мәндер енгізіңіз. Экранға ҧшқан мерзімі (пернетақтадан) енгізілген саннан артық ҧшақтар жайлы ақпаратты шығару керек. Егер, ондай ҧшақ болмаса, программа экранға сәйкесінше хабарлама шығарылуы тиіс. 3 нұсқа AVTO (машина маркасы, тҥсі, бағасы, максималды (максимум) жылдамдығы) қҧрылымын сипаттаңыз. Пернетақтадан жиымға алты элементтен тҧратын AVTO типіндегі мәндер енгізіңіз. Экранға жылдамдығы (пернетақтадан) енгізілген саннан (аспайтын) кем болатын машиналар жайлы ақпаратты шығару керек. Егер, ондай машина болмаса, программа экранға сәйкесінше хабарламаны шығаруы тиіс. 4 нұсқа TELEFON (абоненттің ЖАТ, телефон нӛмірі, телефонға тӛлеген тӛлемі, орнатқан жылы) қҧрылымын сипаттаңыз. Пернетақтадан жиымға бес элементтен тҧратын TELEFON типіндегі мәндер енгізіңіз. Экранға орнатылған жылы (пернетақтадан) енгізілген саннан (аспайтын) артық болатын телефондар жайлы ақпаратты шығару керек. Егер, ондай телефон болмаса, программа экранға сәйкесінше хабарламаны шығаруы тиіс. 5 нұсқа DET_SAD (бала бақша нӛмірі, бҥлдіршіндер саны, қала ауданы, бір айлық тӛлемі) қҧрылымын сипаттаңыз. Пернетақтадан жиымға алты элементтен тҧратын DET_SAD типіндегі мәндер енгізіңіз. Экранға кӛрсетілген аудандағы (ауданның аты пернетақтадан енгізіледі) бала бақшалар жайлы ақпаратты шығару керек. Егер, бҧл ауданда балабақшалар әлі болмаса, программа экранға сәйкесінше хабарлама шығарылуы тиіс. 6 нұсқа MUSEUM (мҧражай аты, жҧмыс жасау уақыты, билеттің қҧны, мекен жайы) қҧрылымын сипаттаңыз. Пернетақтадан жиымға алты элементтен тҧратын MUSEUM типіндегі мәндер енгізіңіз. Экранға билетінің қҧны (пернетақтадан) енгізілген саннан (аспайтын) аспайтын мҧражайлар жайлы ақпаратты шығару керек. Егер, ондай мҧражай болмаса, программа экранға сәйкесінше хабарламаны шығаруы тиіс. 7 нұсқа TOUR (елі, турдың ҧзақтығы, транспорт тҥрі, бағасы) қҧрылымын сипаттаңыз. Пернетақтадан жиымға жеті элементтен тҧратын TOUR типіндегі мәндер енгізіңіз. Экранға билет қҧны (пернетақтадан) енгізілген саннан (аспайтын) аспайтын елдер жайлы ақпаратты шығару керек. Егер, ондай ел болмаса, программа экранға 190

191 сәйкесінше хабарламаны шығаруы тиіс. 8 нұсқа PRICE (тауардың аты, қҧны, дҥкеннің аты) қҧрылымын сипаттаңыз. Пернетақтадан жиымға жеті элементтен тҧратын PRICE типіндегі мәндер енгізіңіз. Экранға пернетақтадан енгізілген дҥкендегі тауарлар жайлы барлық ақпаратты шығару керек. Егер, ондай дҥкен болмаса, программа экранға сәйкесінше хабарламаны шығаруы тиіс. 9 нұсқа FRIDGE (тауардың аты, дайындаған фирмасы, қоймадағы саны, бағасы) қҧрылымын сипаттаңыз. Пернетақтадан жиымға бес элементтен тҧратын FRIDGE типіндегі мәндер енгізіңіз. Экранға бағасы (пернетақтадан) енгізілген саннан (аспайтын) аспайтын тоңазытқыштар жайлы ақпаратты шығару керек. Егер, ондай тоңазытқыш болмаса, программа экранға сәйкесінше хабарламаны шығаруы тиіс. 10 нұсқа ZODIAK (жҧлдыз бойынша зодиак белгісі, аты және жӛні, туылған кҥні) қҧрылымын сипаттаңыз. Пернетақтадан жиымға жеті элементтен тҧратын ZODIAK типіндегі мәндер енгізіңіз. Экранға жҧлдызы «мерген» болатын адамдардың жӛнін, атын және туылған кҥнін шығару керек. Егер, ондайлар жоқ болса, программа экранға сәйкесінше хабарламаны шығаруы тиіс. 11 нұсқа STUDENT (оқу орнының аты, студенттің тегі және инициалдары, топ нӛмірі, бес бағадан тҧратын жиым-ҥлгерімі) қҧрылымын сипаттаңыз. Пернетақтадан жиымға алты элементтен тҧратын STUDENT типіндегі мәндер енгізіңіз. Экранға орта балы (пернетақтадан) енгізілген саннан артық болатын студенттер жайлы ақпаратты шығару керек. Егер, ондай студент болмаса, программа экранға сәйкесінше хабарламаны шығаруы тиіс. 12 нұсқа WORKER (жҧмысшының тегі және инициалдары, қызметі, жҧмысқа орналасқан жылы, ҥш бағадан тҧратын жиым-аттестатция нәтижесі) қҧрылымын сипаттаңыз. Пернетақтадан жиымға бес элементтен тҧратын WORKER типіндегі мәндер енгізіңіз. Экранға аттестациясының орта балы (пернетақтадан) енгізілген саннан (аспайтын) тӛмен болмайтын жҧмысшылар жайлы ақпаратты шығару керек. Егер, ондай жҧмысшы болмасы, программа экранға сәйкесінше хабарламаны шығаруы тиіс. 191

192 15 ФАЙЛДАРДЫ ПАЙДАЛАНУ Файл сыртқы есте сақтау қҧрылғыларында (магниттік дискілерде) орналастырылған және мәлімет ӛңдеу, тасымалдау кездерінде біртҧтас кҥйде қарастырылатын мәліметтер жиыны. Файлдармен жҧмыс істеу ҥшін оларды, алдымен, ашу керек, яғни файл туралы мәліметті атын, адресін программаға белгілі ету қажет. С тілінде файл ашу fopen() функциясы арқылы орындалады. Ол сыртқы қҧрылғыдағы физикалық файлды, мысалы, А:\NUR.DAT, программадағы оның логикалық атымен байланыстырады. Логикалық ат дегеніміз файлға нҧсқауыш, яғни файл туралы мәлімет сақталатын жады аймағына сілтеме жасау. Файлға нҧсқауыш сипатталуы тиіс. Сонымен, файлдармен жҧмыс істегенде нҧсқауыштар қолданылады. Файлға нҧсқауыш мынадай тҥрде сипатталады: FILE *fp; мҧндағы FILE типі <stdio.h> тақырыптық файлында анықталған қҧрылым. Бҧл нҧсқауышты кӛрсетілген файлмен сол файл ашылғаннан бастап, байланыстырып қоюға болады. Ол ҥшін келесі функция пайдаланылады: fopen("файл адресі/аты","қатынасу типі"); ол файлға нҧсқауыш мәнін қайтарады немесе қате болса, NULL мәнін береді. Мысалы, мынадай оператор орындалуы нәтижесінде fp = fopen("ex1.txt","w"); жҧмыс бумасындағы ex1.txt файлы оған мәлімет жазу (write) ҥшін ашылады, ал программада бҧл файлды fp нҧсқауышы арқылы пайдаланамыз (яғни fopen() функциясы файлдың сыртқы атын оның программада қолданылатын ішкі логикалық атымен байланыстырады). Сонымен, файлды ашатын fopen() функцияcының жалпы жазылуы: fp = fopen(name, mode) мҧнда fp файлға сілтейтін нҧсқауыш; name файлдың адресін де кӛрсетуге болатын аты, кӛбінесе символдық тіркес арқылы жазылады; mode файл қандай режимде қолданылатынын кӛрсететін параметр, бҧл да символдар тіркесімен тӛмендегідей тҥрде жазылады: "r" файлды оқу ҥшін ашу (файл бҧрын ашылған болуы тиіс); "w" бос файлды информация жазу ҥшін ашу; "a" файл соңына мәлімет қосып жазу ҥшін оны ашу; "r+" файлдан информация оқу және оған информация жазу ҥшін ашу); "w+" бос файлдан информация оқу және оған мәлімет жазу ҥшін файл ашу (бҧрын файл болса, ол ӛшіріледі); "a+" файлдан информация оқу және оның соңына информация қосып жазу ҥшін ашу). "t" файл мәтіндік (текстік) режимде ашылады, ол rt, wt, at, т.с.с. болып кӛрсетіле береді. "b" файл екілік режимде ашылады, rb, wb, ab, т.с.с. болып кӛрсетіле береді. Келісім бойынша файл кӛбінесе мәтіндік режимде ашылады. 192

193 Файлмен жҧмыс істеп болған соң, оны жабу ҥшін келесі функция қолданылады: fclose(файл_нұсқауышы). Файлға мәлімет жазу/оқу ҥшін жалпы енгізу/шығару функциялары тәріздес бірсыпыра функциялар пайдаланылады: fprintf(),fscanf(),fputs(),fgets(),getc(),putc(),fgetc(), fputc() Бҧлардың ішіндегі getc()/fgetc(),putc()/fputc()функциялары әрекеттері ҧқсас, айырмашылықтары тек getc() пен putc() макроанықтаулар да, aл fgetc() және fputc() нағыз функциялар болып табылады. Барлық файлдық функциялар прототиптері <stdio.h> файлында орналасқан. Файлдардан мәлімет жазу/оқу әрекеттерін ҥш топқа бӛлуге болады: - символдарды енгізу/шығару операциялары; - сӛз тіркестері жолдарын енгізу/шығару операциялары; - блок бойынша енгізу/шығару операциялары. Символдарды енгізу/шығару операцияларында файлдан бір ғана символ оқылады немесе оған бір символ жазылады. Мысалы: fgetc(file *fp); ашылған файлдан символ оқиды. fputc(int ch,file *fp); ch символы кодын файлға жазады. Сӛз тіркестері жолдарын енгізу/шығару операцияларында бір мәлімет алмасуы кезінде файлдан сӛз тіркесі жолдары оқылады немесе оған сӛз тіркесі жазылады. Мысалы: gets(char *S); файлдан мәлімет байттарын '\n' символы кездескенше біртіндеп оқиды да, оларды S тіркесіне орналастырып, '\n' символын \0 (нӛлтерминатор) белгісіне айналдырады. fgets(char *S,int m,file *fp); fp тҥрінде сипатталған файлдан байттарды оқып, оларды '\n' символы кездескенше немесе m байт оқылып біткенше S тіркесі мәні ретінде жазып шығады. Блок бойынша енгізу/шығару операцияларында мәліметтер алмасу олардың бір блогын толық қамтиды. Мысалы: fread (void *ptv, int size, int n, FILE *fp); мҧнда fp файлынан әрқайсысы size байттан тҧратын мәліметтің n блогы ptv нҧсқауышы кӛрсетіп тҧрған жады аймағына оқылады (оқылатын блок ҥшін алдын ала орын дайындап қою қажет). fwrite(void *ptv,int size,int n,file *fp); мҧнда ptv нҧсқауышы кӛрсетіп тҧрған жады аймағында орналасқан әрқайсысы size байттан тҧратын мәліметтің n блогы ашық тҧрған fp файлына жазылады fprintf және fscanf функцияларын пайдалану fprintf файлға информация жазу ҥшін, ал fscanf файлдан информация оқу ҥшін қолданылады. Олардың жалпы жазылу тҥрі: fprintf(fp, спецификация шаблоны, p); мҧндағы p ӛрнек; fscanf(fp, спецификация шаблоны, адрес); 193

194 Мысал: Бҥтін сандар тізбегін (n=5) пернелерден енгізіп, оларды файлға жазу керек болсын. // файл ашып, оған 5 сан жазу #include <stdio.h> #include <conio.h> main() { int k,i,n=5; char fname[]="a:\\num.txt\0"; clrscr(); FILE *fp; fp=fopen(fname,"w"); printf("енгізілген сандар %s файлына жазылады\n",fname); puts("әр сан енгізілген соң, Enter басыңыз\n"); for(i=0; i<n;i++) {scanf("%i",&k); fprintf(fp,"%d ",k); fclose(fp); printf("енгізілген сандар %s файлына жазылды\n", fname); getch(); Нәтижесі: Енгізілген сандар a:\num.txt файлына жазылады Әр сан енгізілген соң, Enter басыңыз Енгізілген сандар a:\num.txt файлына жазылды Файлдағы мәлімет: Бес бҥтін санды n=5 бҧрыннан бар file1.txt файлына жазу керек, сол файлды мәлімет қосу ҥшін ашып, оған 5 сан жазып, сонан соң ондағы мәліметті оқып тексеру керек. /* файлға мәліметтер қосу */ #include <math.h> #include <stdio.h> #include <conio.h> main() { int i, k=0, s=0, n=5, y, x; char fname[]="file1.txt"; clrscr(); FILE *fp; fp=fopen("file1.txt", "at"); if ((fp=fopen(fname,"at")) == NULL) { printf("\nфайлды ашуда қате болды"); getch(); 194

195 return(0); puts("enter арқылы бӛліп, 5 сан енгізіңіз:"); for(i=1; i<=n;i++) {scanf("%i", &x); fprintf(fp,"%d ", x); fclose(fp); getch(); Нәтижесі: Enter арқылы бӛліп, 5 сан енгізіңіз: Файлдағы мәлімет: Дискідегі file1.txt файлын мәліметтер оқу ҥшін ашып, ондағы мәліметті оқып, файлдағы тақ сандардың қанша екенін және қосындысын табу керек. /* файлдан мәліметтер оқу */ #include <math.h> #include <stdio.h> #include <conio.h> main() { int i,k=0,s=0,n=5,y,x; char fname[]="file1.txt"; clrscr(); FILE *fp; fp=fopen(fname,"r"); /* Оқу үшін файл ашу */ fp=fopen("fp","rt"); if ((fp=fopen(fname,"rt")) == NULL) { printf("\n Файл ашуда қате болды"); getch(); return(0); puts("файлдан оқылған сандар:"); while(!feof(fp)) {fscanf(fp,"%i",&y); printf(" %i ",y); if (y%2==0) {s+=y;k=k+1; fclose(fp); printf("\nтақ сандар қосындысы s = % i, 195

196 getch(); олардың саны k=%i", s, k); 15.2 fgets және fputs функцияларын пайдалану Сӛз тіркестерімен жҧмыс істегенде fgets және fputs функциялары қолданылады: fgets функциясының жалпы жазылу тҥрі: fgets(нұсқауыш,maxlen,fp); нұсқауыш компьютер жадындағы орынға сілтейтін нҧсқауыш; MAXLEN оқылатын тіркестің максимальды ҧзындығы; fp - файл нҧсқауышы. Мысалы: #define L 20 main() { FILE *fp; char *st[n]; fp=fopen( stroka, r ); while(fgets(st, L, fp)!= NULL) puts (st); Файлдарға сӛз тіркестерін жазу ҥшін fputs функциясы келесі тҥрде қолданылады: status=fputs(қатар нұсқауышы, fp); status бҥтін сан, оның мәні eof функциясында жазылады, егер fputs()функциясы файлдың соңына шыққан болса немесе қате тапса, fputs функциясы жазылатын жолдың соңына /0 символын жазбайды. Тӛменде осы функцияларды пайдалану мысалы келтірілген. #include <stdio.h> void main() { int n; char str[50],str1[50],ch; FILE *fp; // Файлға мәлімет жазу fp = fopen("ex.txt","w"); puts("бүтін сан енгізіңіз: "); scanf("%d",&n); fprintf(fp,"%d\n",n); puts ("Символ енгізіңіз: "); ch=getchar(); putc (ch, fp); puts ("Сӛз тіркесін енгізіңіз: "); gets(str); fputs(str,fp); fclose(fp); // Файлдан мәлімет оқу if((fp = fopen("ex.txt","r"))!= NULL) { fscanf (fp, "%d", &n); printf ("n=%d\n", n) ; 196

197 ch = getc (fp); putchar (ch); fgets(str1, 50, fp); puts (str1); fclose (fp); else printf ("\nфайлдан мәлімет оқылмайды!"); Мҧндағы fgets()функциясының екінші параметрі N оқылатын символдар саны, оған '\0' белгісі де қосылады. Бҧл функция ӛз жҧмысын N-1 символын оқығаннан кейін немесе '\0' белгісі кездескенде аяқтайды. Екеуінде де сӛз тіркесі соңына '\0' белгісі қосылады. fgets() функциясы оқылған сӛз тіркесі адресін қайтарады немесе файл оқылып болғанда (не қате шықса), NULL белгісін береді. fputs() функциясы әрекет дҧрыс орындалса, соңғы оқылған символ кодын қайтарады, ал қате болса, EOF (файл соңы) белгісін береді. Бҧл функция курсорды автоматты тҥрде келесі жолға кӛшірмейді. Жоғарыдағы функциялар файл мәліметтерін біртіндеп, символдан соң келесі символды қарастыра отырып ӛңдейді. С тілі файлдармен жиым сияқты жҧмыс істеуге де мҥмкіндік береді, яғни кез келген байтты жеке ӛңдеуге де болады. Файл ішіндегі белгілі бір орынды айқындау ҥшін мына функция қолданылады: fseek(файлға нұсқауыш, бастапқы нүктеден ығысу, бастапқы нүкте); Екінші аргумент типі long, оның мәні оң да, теріс те болуы мҥмкін. Ол бастапқы нҥктеден қанша орынға (байтпен) ығысу керек екендігін кӛрсетеді. Ҥшінші аргумент файлдағы бастапқы нҥкте орнын анықтайтын код болып табылады. Осы код ҥшін мынадай мәндер тағайындалған: 0 - файл басы; 1 - ағымдағы позиция; 2 - файл соңы. Дҧрыс орындалғанда, fseek() функциясы 0 мәнін береді, ал егер қате (мысалы, файлдың сол жақ шекарасынан ары аспақшы болғанда) болса, онда 1 береді fwrite және fread функцияларын пайдалану Қҧрылымдарды пайдаланатын файлдармен жҧмыс істеу кезінде fread()/fwrite() функцияларын пайдаланған ыңғайлы. Олардың жазылуы: fread(ptr, size, n, fp); мҧнда fp файлынан әрқайсысы size байттан тҧратын мәліметтің n блогы ptv нҧсқауышы кӛрсетіп тҧрған жады аймағына оқылады (оқылатын блок ҥшін алдын ала орын дайындап қою қажет). fwrite(ptr,size,n,fp); мҧнда ptr нҧсқауышы кӛрсетіп тҧрған жады аймағында орналасқан әрқайсысы size байттан тҧратын мәліметтің n блогы ашық тҧрған fp файлына жазылады. Осы функцияларды қолданудың бір мысалын келтірейік: typedef struct { 197

198 char author [30]; char title [50]; int pages; BOOK; BOOK b1={ "Kernighan", "С Language", 256, b2; FILE *fp; void main() {... fp=fopen("struct.txt", "w+"); // файл әрі оқу, әрі жазу үшін ашылды fwrite(&b1, sizeof(book), 1, fp); fseek(fp,0,0); // маркер файл басына fread(&b2, sizeof(book), 1, fp); printf("авторы %s,аты %s,беттер саны %d\n",b2.author, b2.title, b2.pages); Бақылау сұрақтары 1. Файл дегеніміз не? Ол не үшін пайдаланылады? 2. Файл қайда орналасады және қалай белгіленеді? 3. Файл ашу функциясы қалай жазылады? 4. Файл атын программада қалай анықтаймыз? 5. Файлдың қолданылу режимдері қалай көрсетіледі? 6. Файлға мәлімет жазу/оқу функциялары. 7. Файлға жаңа элемент қалай қосылады? 8. Мәлімет оқылған файлға мәлімет жазуға бола ма? 9. Файлдан ақпарат оқу үшін не істеу керек? 10. Файлға ақпарат жазу үшін не істеу керек? 11. Символдар мен сөз тіркестерін файлға жазу үшін не істеу керек? 12. Құрылымдарды пайдаланатын файлдар қандай функцияларды пайдаланады? ТАПСЫРМАЛАР 1. Файлдан сандар оқып, солардың ішіндегі теріс сандар қанша екенін анықтайтын программа қҧру керек. 2. Файлдан сӛз тіркесін оқып, солардың ішіндегі 6 символдан артық сӛздерді экранға шығарып, басқа файлға жазып шығыңдар. 3. Файлдан сандар оқып, солардың арифметикалық ортасын файл соңына қосып жазу керек. 4. Файлдан сӛз тіркесін оқып, солардың керісінше жазылған нҧсқасын басқа бір файлға жазып шығыңдар. 5. Файлдан сандар оқып, солардың максимумын анықтайтын программа қҧру керек. 6. Файлдан сӛз тіркесін оқып, солардың ішіндегі бос орын орнына сызықша жазып оны басқа бір файлға жазып шығу керек. 7. Файлдан сандар оқып, солардың минимумын анықтайтын программа қҧру керек. 8. Бір файлда екі сӛйлем жазылған, соның екінші сӛйлемін басқа файлға жазып шығу керек. 9. Файлдан сандар оқып, солардың кӛбейтіндісін анықтайтын программа қҧру керек. 10. Сӛз тіркесінен тҧратын файлдағы бас әріптерді кіші әріптерге айналдырып, басқа файлға жазып шығу керек. 198

199 11. Файлдан сандар оқып, солардың нешеуі 5-тен артық екенін анықтау керек 12. Сӛз тіркесінен тҧратын екі файл берілген. Осы екі файлдағы сӛз тіркестерін біріктіріп, ҥшінші файлға жазып шығыңдар. 13. Файлдан сандар оқып, солардың қосындысын анықтау керек 14. Сӛз тіркесінен тҧратын екі файл берілген. Осы екі файлдағы сӛз тіркестерінің орнын ауыстырып жазып шығу керек. 15. Файлдан сӛз тіркесін оқып, солардың ішіндегі ең ендісін анықтап, соның неше символдан тҧратынын анықтау қажет. 16. Файлдан сандар оқып, солардың тақтарын бір файлға, жҧптарын екінші файлға жазып шығыңдар. 17. Файлдан бірнеше сӛйлем оқып, сол сӛйлемдердің м әрпінен басталатын бір сӛйлемін ғана экранға шығарып, соның ҧзындығын анықтайтын программа қҧру керек. 18. Файлдан сандар оқып, солардың барлығын да бірге арттырып, шыққан сандарды басқа бір файлға жазып шығыңдар. 19. Файлдан бірнеше сӛйлем оқып, сол сӛйлемдердің ең соңғы сӛйлемін ғана экранға шығарып, соның ҧзындығын анықтайтын программа қҧру керек. 20. Файлдан сандар оқып, соларды керісінше тәртіппен екінші бір файлға жазып шығыңдар. 21. Файлдан сандар оқып, солардың цифрларын экранға сӛзбен шығаратын программа қҧру керек, мысалы, 0 орнына нӛл, 1 орнына бір, т.с.с. 9 орнына тоғыз деп жазатын болуы тиіс. 22. Файлдан сӛз тіркесін оқып, солардың бірінші сӛзі мен соңғы сӛзін алмастырып, екінші бір файлға жазып шығыңдар. 23. Файлдан сӛз тіркесін оқып, соларды керісінше жазып шығатын программа қҧру керек. 24. Файлдан сандар оқып, солардың алғашқы жартысы мен соңғы жартысының орнын ауыстырып, нәтижесін жаңа файлға жазып шығу керек бҥтін саннан тҧратын файл жасайтын программа қҧру керек. Сол файлдағы сандарды оқып, олардың қосындысын анықтаңдар. 26. Whіle операторы арқылы Char типті элементтерден тҧратын файл жасау қажет. Циклден шығу шарты z әрпін енгізу. Сол файлдың кӛшірмесін екінші бір файлға жазып, жазылған мәліметтерді экранға да шығару керек. 27. Іnteger типті N саннан тҧратын файл жасап, сол файлдағы жҧп сандарды экранға шығару қажет. 28. Бҥтін сандардан тҧратын файл жасап, сол сандарды басқа бір файлға кері тәртіппен жазып шығу керек. 29. Мынадай қҧрылымдағы бірнеше қатарлары бар файл жасау керек: - реттік нӛмірі; - фамилиясы, аты-жӛні; - жалақысы. Осы файлға бес адам туралы мәліметтер енгізіп, басқа файлға осылардың ішіндегі ең кӛп жалақы алатын адам туралы мәліметті кӛшіріп жазу керек. 30. Файлдағы мәтінді тҥгел оқып шығып, ондағы о әрпін а әрпімен алмастыратын программа қҧрыңдар. 31. Файлдағы мәтіндік ақпаратты экранға және қағазға шығаратын программа жасау керек. 199

200 32. Файлда N бҥтін сан жазылған. Соларды ӛсуі бойынша реттеп, екінші файлға жазып шығару қажет. 33. Нақты сандардан тҧратын бір ӛлшемді жиым элементтерін пернелерден енгізе отырып, бір файлға жазып шығып, сол жиымның жҧп индексті элементтерін екінші файлға жазатын программа қҧрыңыздар. 34. Топтағы студенттердің ҥлгерімін бір файлға мынадай тҥрде жазу керек: рет нӛмірі, аты-жӛні, 5 сабақтың аты, әр сабақтан алған 3 бағасы. Программаға енгізілетін мәліметтер пернелерде теріліп, файлға жазылуы қажет. Жақсы оқитын студенттер тізімін екінші бір файлға бӛлек жазып шығу керек. 200

201 16. ГРАФИКАЛЫҚ РЕЖИМДЕ ЖҰМЫС ІСТЕУ С тілінде растрлық графика жҧмыс істейді, оның тақырыптық файлы graph.h. График нҥктелерден пиксельдерден тҧрады. Пиксель экранның адрестелетін ең кіші элементі. Алдымен, графика шығара алатын бейнережимді іске қосу керек. Мҧнда экранның пиксельмен берілген мӛлшері және тҥстер саны беріледі. Графикада ҥш координаталық жҥйе: абсолюттік, салыстырмалы және масштабталған жҥйе қолданылады. Тіке және кӛлденең ӛстер бойынша пиксельдер саны экран типіне байланысты болады. Абсолюттік координатада координаталар басы (0;0) нҥктесі сол жақ жоғарғы бҧрышта болып саналады, х координатасы солдан оңға қарай, у координатасы жоғарыдан тӛмен қарай ӛседі. Салыстырмалы режимде координаталар басы экранның кез келген нҥктесіне ауыстырыла алады. Масштабталатын режимде экран бетінде масштабталған координаталар беруге болады, онда х пен у ӛстері бойынша минимум және максимум мәндер енгізіп, жҧмыс істеуге мҥмкіндік бар. Жалпы абсолюттік графикалық режимде (16.1 сурет) әрбір пиксель берілген 16 тҥстің біріне боялады; (0,0) экранның сол жақ жоғарғы бҧрышы координатасы; (639,479) оң жақ тӛменгі бҧрышының координатасы болады; әртҥрлі фигураларды экранға шығару ҥшін алдын ала графикалық режимді іске қосып алу керек. (0, 0) x (639, 0) y (320, 240) ( 0, 479) (639, 479) 16.1-сурет. Экрандағы нҥктелердің координаталары Жалпы, дисплей адаптерлері графикалық режимде 200, 350, 600 нҥктелерден тҧратын экран жолдарының әрқайсысында 640, 720, 800 нҥктелер тізбегін бейнелей алады. Мҧндағы нҥкте деп отырғанымыз кӛлемі 0,8х1 мм 2 шамасында болып келген (CGA) кішкентай тіктӛртбҧрыш, яғни пиксель. Әрбір нҥктенің координаталары екі бҥтін санмен (х, у) анықталады. Дисплей 201

202 экранына график салу ҥшін оның нҥктелерінің координаталарын кӛрсету қажет. Координаталар басы (0,0) болып экранның сол жақ жоғарғы бҧрышы есептеледі. Х координаталары (бағаналар немесе позициялар нӛмірлері) солдан оңға қарай, ал у мәндері (жолдар немесе қатарлар) жоғарыдан тӛмен қарай ӛсіп отырады. Мысалы, VGA адаптерінің экран бҧрыштарының координаталарын х=0..799, y= аралығында кӛрсету қажет. Экранда х ӛсі солдан оңға қарай, Y ӛсі жоғарыдан тӛмен қарай бағытталған, ал оның шеткі нҥктелерінің координаталары суретте кӛрсетілген. Олардың ең жоғарғы мәндері пайдаланылған экран адаптеріне тәуелді болады, яғни (0,0)..(320х200), (0,0)..(640х480), (0,0)..(800х600) аралықтарында және т.б. болуы мҥмкін. Сонымен, графикалық режимде экрандағы кез келген объект кӛрініп тҧрған нҥктелер тобынан тҧрады. Мәтіндік режимнен графикалық режимге кӛшкенде экран тазартылады. Графикалық режимде экраннан курсор кӛрінбейді. Дисплей экранының бетіне (кейін қағазға) нҥкте, тҥзу немесе қисық сызық, шеңбер, эллипс және кез келген тҧйық сызық сызып шығаруға болады. Сонымен қатар тҧйық сызықтардың ішін әртҥрлі тҥске бояп қою мҥмкіндіктері де бар. Сызықтарды жылжыту, айналдыру және басқа орынға кӛшіру арқылы кӛрнекі бейнелер мен мультфильмдер жасауға болады. График тҧрғызу ҥшін оны шығару немесе бастау нҥктесін кӛрсету қажет. Мәтіндік режимде ол курсор позициясы болып саналады, ал графикалық режимде кӛрініп тҧратын курсор жоқ, бірақ экранда кӛрінбейтін курсор тәрізді сілтеме белгі CP (current poіnter) бар. Негізінде оны да курсор деп қабылдауға болады. Графикалық режимдегі жҧмыстарды атқаратын Турбо С нҧсқасында бірсыпыра графикалық функциялар бар, енді біз солардың негізгілеріне тоқталып ӛтеміз. Графикалық режимде жҧмыс істеу былай басталады: #include <stdio.h> #include <conio.h> #include <graphics.h> void main() { int gdriver = DETECT; //драйвер int gmode; //режим аты int errorcode; // қате коды initgraph (&gdriver,&mode,"c:\\tc\\bgi\\"); errorcode = graphresult(); if errorcode!= grok) //іске қосу қатесі {printf("қате: %d\n", errorcode); puts("аяқтау үшін ENTER басыңыз"); getch(); return;... Ары қарай программа мәтіні... getch(); 202

203 closegraph (); Графикалық режим орнату, одан шығу, мәтін жазу, сызық салу функциялары Графикалық режим драйверін іске қосу функциясы initgraph(&driver, &Mode, Path); Driver параметрі бейнелік жҥйе драйверін анықтайды, Mode параметрі бейнелік жҥйе жҧмыс режимін береді, ал Path параметрі драйвер файлының орнын кӛрсетеді. Кӛбінесе Driver параметрі мәні ретінде detect болатын бҥтін константа қолданылады. Мҧндайда initgraph функциясының ӛзі графикалық драйвер типін анықтап, ең дҧрыс режимді таңдап алады. Тақырыптық файлы: <graphics.h> Драйвер дҧрыс оқылған соң, initgraph() функциясы 4К кӛлемінде (келісім бойынша) ішкі графикалық буфер ҧйымдастырады да, экран тҥсі, сызықтар тҥсі анықталып, дисплей адаптері графикалық режимге кіреді. Экран тазаланып, курсор сол жақ жоғарғы бҧрышқа орнатылады. Егер BGI-файлдар ағымдағы бумада болса, initgraph() функциясының ҥшінші параметрі ретінде бос орын мәнін беруге болады initgraph(&driver,&mode," "); Графикалық режимнен шығу және оған бӛлініп берілген жады бӛлігін босату ҥшін, яғни бейнеадаптер буферін тазартып, бҧған дейінгі мәтіндік режимді қалпына келтіру мақсатында мына функция қолданылады closegraph(); Графикалық режимде сызық тҥстерін, тҧйық сызықтар ішін тҥрлі тҥске бояуға болады. Ол ҥшін мәтіндік режимдегідей тҥстердің кодтары және олардың ағылшынша атаулары қолданылады. Графикалық режимнен уақытша мәтіндік режимге ауысу мақсатында мынадай функция қарастырылған restorecrtmode(); Ол initgraph() функциясын пайдаланғанға дейін болған мәтіндік режимді қайта орнатады, буферде (экран кӛрінісі де) сақталған мәтін қалпына келмейді, ӛйткені ол initgraph() функциясы арқылы ӛшірілген болатын. Графикалық режимге қайтып оралу мына функция арқылы атқарылады setgraphmode(gm); Функция аргументі ретінде қолданылған драйверге қатысты режимнің бҥтін сан тҥріндегі нӛмірі қарастырылады. Курсор орнын анықтау функциялары getx(); gety(); Функциялары курсор тҧрған орын координаталарын х (у) береді. maxx(); getmaxy(); getmaxx() функциясы экранның оң жақтағы ең шеткі нҥктесінің x координатасын анықтайды, ал getmaxy() функциясы экранның ең тӛменгі у нҥктесінің координатасын анықтайды. 203

204 Сызықтар түсін тағайындау функциясы setcolor(col); мҧндағы сol тҥс атауы немесе тҥс коды. Сызық және мәтіндер тҥсі осы функциямен беріледі. Ал сызық типі setlinestyle() функциясы арқылы тағайындалады. Тҥстер бҥтін сан тҥріндегі кодпен немесе константа тҥрінде бас әріппен жазылатын ағылшынша тҥс атауларымен беріледі. Тҥстердің стандартты белгіленулері тӛмендегідей: Кӛмескі тҥстер Кодтары Ашық тҥстер Кодтар ы Қара (BLACK) 0 Қара қошқыл (DARKGRAY) 8 Кӛк (BLUE) 1 Кӛкшіл (LIGHTBLUE) 9 Жасыл (GREEN) 2 Ақ жасыл (LIGHTGREEN ) 10 Кӛгілдір (CYAN) 3 Ақшыл кӛк (LIGHTCYAN) 11 Қызыл (RED) 4 Қызғылт (LIGHTRED) 12 Кҥлгін (MAGENTA) 5 Қызғыш (LIGHTMAGENTA) 13 Қоңыр (BROWN) 6 Сары (YELLOW) 14 Сҧр (LIGHTGRAY) 7 Ақ (WHITE) 15 Мысалы: setcolor(yellow); setcolor(3); setcolor(5); Экранның фоны түсін ӛзгерту функциясы setbkcolor(түсі); Мысалы: setbkcolor(blue); setbkcolor(14); Мәтін шығару функциялары Графикалық режимде экранға мәтін шығарарда символдар кӛлемін, бағытын (тік, кӛлденең), бекітілген бірнеше қаріп тҥрінің бірін таңдау мҥмкіндіктері бар. Осындай символдар параметрлері мынадай функция арқылы беріледі: settextstyle(қаріп,бағыты,кӛлемі); outtextxy және outtext функциялары арқылы шығарылатын мәтіндердің қаріп тҥрін, кӛлемін және бағытын тағайындайды. Қаріп (шрифт) параметрі ретінде тӛмендегі константалардың бірін пайдалануға болады. Константа Мәні Қаріп типі DEFAULT_FONT 0 Стандартты. Әрбір символ 8 х 8 пиксел кӛлемдегі квадрат ішіне шығарылады. TRIPLEX_FONT 1 Triplex шрифті (TRIP.CHR файлы) SMALL_FONT 2 Майда шрифт (LITT.CHR файлы) SANSSERIF_FONT 3 SansSerif тік шрифті (SANS.CHR файлы) GOTHIC_FONT 4 Готикалық шрифт (GOTH.CHR файлы) Орыс қаріптері тек стандартты тҥрде ғана (default_font) шығарылады. Бағыты параметрі берілген мәтінді тік немесе кӛлденең беруді тағайындайды, оның мәндері: HORIZ_DIR 0 Символдар солдан оңға қарай жазылады 204

205 VERT_DIR 1 Символдар тӛменнен жоғары қарай жазылады Кӛлемі 1-ден 10-ға дейін ӛзгере алады. Бҧл шама DEFAULT_FONT стандартты қарпі (8х8 пиксел) ҥшін әр символды неше есе ҥлкейту керек екендігін кӛрсетеді (стандартты матрица 8*8 болғандықтан, егер кӛлемі 4 болса, онда символдар 32*32 пикселдік матрицаға дейін ҥлкейеді). Ал қалған қаріптер ҥшін бҧл параметр сызықтық емес, экспоненциалдық масштабтау шкаласын кӛрсетеді. Символдың негізгі нҧсқасы кӛлемі 4-ке тең болып саналады, сондықтан ол 7 болса, онда символдар 2 есе ӛседі; егер 8 болса - 3 есе; ал 9 болса - онда 4 есе ҧлғаяды. Символдар әрқашанда ҥздіксіз жіңішке сызықтармен жазылады. Экранға мәтін шығару функциясы outtext ("Мәтін"); қостырнақшаға алынған мәтінді курсор тҧрған орыннан бастап экранға шығарады. Мәтін ішінде басқару символдары болмауы тиіс, мысалы, \n. Шығарылатын символдар тҥсі setcolor, шрифт типі settextstyle функцияларымен беріледі. Мысалы: setcolor(4); moveto(250,10);outtext("омаров Марат"); Экрандағы кӛрсетілген орынға мәтін шығару функциясы outtextxy(x, y, "мәтін"); Курсорды алдымен х, у нҥктесіне орналастырып алып барып, мәтінді экранға шығарады. Мәтін шығарылған соң, курсор бҧрынғы орнында (х,у) қалады. Шығарылатын символдар түсін setcolor(), қаріп типін settextstyle() функциясымен беруге болады. Мысалы: setcolor(4); outtextxy(250,2,"омарова Айман"); Компьютер бейнежадына пиксел жазу функциясы putpixel(x, y, Түсі); координатасы (х, у) пиксел-нҥктені Түсі санына байланысты бояп шығады. Түсі ағылшынша сӛзбен немесе кодпен беріледі. Бҧл функцияны цикл ішіне орнатып, сызықтар сызуға болады. Мысалы: A(20,100) B(200,100) setcolor(blue); for(x=20; x<=200; x++) putpixel(x,100, BLUE); for(y=100; y<=280;y++) putpixel(200,y, BLUE); C(200,280) line(200,280,20,100); 16.2 сурет. Тҥзу сызықтар салу Түрлі сызықтар салу үш функция арқылы орындалады: 1) line (x1, y1, x2, y2); x1,y1 нҥктесінен x2,y2 нҥктесіне дейін сызық сызады, бірақ мҧнда курсор орны ӛзгермейді. 2) lineto (x, y); Курсор тҧрған нҥктеден х,у нҥктесіне дейін сызық салады, мҧнда курсор бҧрынғы орнынан жаңа орынға ауысады. 3) linerel (dx, dy); 205

206 Курсор тҧрған х, у нҥктесінен х+dx, у+dy нҥктесіне дейін сызық салады, яғни сызық координаталары салыстырмалы тҥрде беріледі. Мҧнда да курсор бҧрынғы орнынан жаңа орынға ауысады. Сызықтар осыған дейінгі setcolor( ) функциясы тағайындаған тҥспен және setlinestyle( ) функциясы арқылы орнатылған стильмен сызылады. Мысалы, ромб сызудың екі тәсілін келтірейік. 1 тәсіл setcolor (GREEN); moveto(100,10);lineto(50,90);lineto(100,170); setcolor(red);lineto(150,90);lineto(100,10); 2 тәсіл setbkcolor(white); setcolor(green); line(100,10,50,90); line(50,90,100,170); setbkcolor (RED); line(100,170,150,90);line(150,90,100,10); Сызық стильдерін беру Геометриялық фигуралар сызықтарының қалыңдығы мен түр сипатын беру функциясы setlinestyle(tip,obr,tol); сызықтар стилін береді, мҧндағы tip алдын ала анықталған константа, ол сызық ти-пін береді. tol сызық қалыңдығын анықтайтын константа (NORM_WIDTH қалыпты, THICK_WIDTH қалыңырақ). Егер программалаушы анықтаған сызық типі қолданылатын болса, онда obr мәні тӛрт таңбалы оналтылық константа және ҧзындығы 16 пиксел сызық кесіндісін кодтау ҥлгісі болуы тиіс. tip константасының мҥмкін мәндері (сызықтық элементтер ҥшін) 0 SOLID_LINE (жай сызық ) 1 DOTTED_LINE (пунктир сызық нҥктелерден тҧрады) 2 CENTER_LINE (штрих-пунктир сызық нҥктелер мен сызықшалардан тҧрады) 3 DASHED_LINE (DOTTED_LINE сызығынан ҧзындау келген пунктир сызық) 4 USERBIT_LINE (программалаушы анықтаған сызық) tol қалыңдық параметрінің мҥмкін мәндері 1 NORM_WIDTH (қалыңдығы бір пиксел) 3 THICK_WIDTH (қалыңдығы ҥш пиксел) Obr параметрі tip константасы мәндері 4-ке тең болғанда ғана жҧмыс істейді (қалған жағдайларда ол қарастырылмайды, сондықтан оны 0 деп алуға болады). Оның кӛмегімен кез келген периодты тҥрде қайталанатын сызық тҥрін бере аламыз, оның периоды 16 пиксел болуы тиіс. Егер сызықта жарықтанатын пиксел керек болса, ҥлгіде 1-ге тең бит, болмаса 0-ге тең бит алу керек. Сонымен, obr мәні тӛрт таңбалы оналтылық константа болып, ол ҧзындығы 16 пиксел сызық кесіндісін кодтау ҥлгісі болуы тиіс. Мысалы, пунктир сызық ҥшін алынған ҥлгі мынадай болуы мҥмкін: 0x3333, бҧл мынадай биттер тізбегіне сәйкес келеді

207 Графикалық режимде экрандағы тҧйық сызық іші белгілі бір тҥспен боялуы мҥмкін. Штрихтау сызықтарын тағайындау және тұйық аймақты бояу функциясы setfillstyle(stil,col); аймақты бояу, толтыру стилін береді, мҧндағы stil алдын ала мәні анықталған константа, стильді береді, оның мәндері тӛменгі кестеде кӛрсетілген; col тҥс кодына сәйкес бҥтін сан немесе ағылшынша тҥс аты; ол setcolor функциясын анықтауда кӛрсетілген. Бояу тәсілін анықтайтын stil параметрінің мҥмкін мәндері EMPTY_FILL 0 аймақты фон тҥсімен толтыру SOLID_FILL 1 кӛрсетілген тҥспен толтыру LINE_FШLL 2 кӛлденең штрих сызықтармен толтыру LTSLASH_FILL 3 45 градус оңға қиғаш жіңішке штрих сызықтармен толтыру SLASH_FILL 4 45 градус оңға қиғаш қалың штрих сызықтармен толтыру BKSLASH_FILL 5 45 градус солға қиғаш жіңішке штрих сызықтармен толтыру LTBKSLASH_FILL 6 45 градус солға қиғаш қалың штрих сызықтармен толтыру HATCH_FILL 7 торсызықты штрихтармен толтыру XHATCH_FILL 8 45 градус оңға қиғаш сирек штрих сызықтармен толтыру INTERLEAVE_FILL 9 45 градус қиғаш жиі штрих тор сызықтармен толтыру WIDE DOT_FILL 10 сирек нҥктелермен толтыру CLOSE_DOT_FILL 11 жиі нҥктелермен толтыру Сызық стилі мен тҥсі кӛптеген функцияларда (bar,bar3d,sector, т.б.) қолданылады. Енді бір мысал келтірейік. // Әртүрлі сызықтар салу мысалы #include <graphics.h> #include <conio.h> #include <stdio.h> main() { int gdriver=detect; int gmode; int x, y, xk = 500; initgraph (&gdriver,&gmode,"c:\\tc\\bgi"); setcolor(red); x=80; y=30; moveto(x,y); outtext("жай сызық - SOLID_LINE"); setlinestyle(solid_line,0,norm_width); y+=20; line(x,y,xk,y); y+=40; moveto(x,y); outtext("пунктир сызық DOTTED_LINE"); setlinestyle (DOTTED_LINE,0,NORM_WIDTH); y+=20; line(x,y,xk,y); y+=40; moveto(x,y); outtext("штрих-пунктир сызық CENTER_LINE"); setlinestyle (CENTER_LINE,0,NORM_WIDTH); 207

208 y+=20; line(x,y,xk,y); y+=40; moveto(x,y); outtext("штрихі ұзынша пунктир сызық"); setlinestyle(dashed_line,0,norm_width); y+=20; line(x,y,xk,y); y+=40; moveto(x,y); outtext("қалың сызық"); setlinestyle(solid_line,0,thick_width); y+=20; line(x,y,xk,y); getch(); closegraph(); Тұйық сызықтар салу Тіктӛрбұрыш контурын салу үшін rectangle(xl,yl,x2,y2); функцияcы қолданылады, ол сол жақ жоғарғы бҧрышы x1,y1, оң жақ тӛменгі бҧрышы - х2,у2 болып келетін тӛртбҧрыш сызады. Сызық типі setlinestyle функциясымен, ал тҥсі setcolor функциясымен анықталады. Іші боялған тіктӛрбұрыш салу үшін bar(xl,yl, x2,y2); функциясы пайдаланылады, x1, y1 сол жақ жоғарғы бҧрыштың, ал х2, у2 оң жақ тӛменгі бҧрыштың координаталары. Мҧның қабырғалары ӛстерге параллель болады, контуры кӛрсетілмейді. Оны бояу стилі setfillstyle() функциясымен анықталады. Алдыңғы жақ беті боялған параллелепипед салу функциясы bar3d(xl,yl,x2,y2,қалыңдығы, Ж_Беті); сыртқы контуры сызылған паралелепипед салады (16.3 сурет), мҧндағы x1,y1 параметрлері сол жақ жоғарғы бҧрыштың, ал 16.3 сурет. Параллелепипед салу х2,у2 оң жақ тӛменгі бҧрыш координаталары. Қалыңдығы параметрі алдыңғы және артқы жақтарының ара қашықтығы, егер ол 0 болса, онда айналасы сызылған тӛртбҧрыш салынады. Ж_Беті параметрі жоғарғы жақ шеттерін сызуды (1 TOP_ON ) кӛрсетеді. Егер ол 0 (TOP_OFF) болса, сызықтар сызылмайды (бірінің ҥстіне бірі қойылған бірнеше параллелепипед салу кезінде қажет болады). Мысалы, бірінің ҥстіне бірі қойылған бірнеше паралелепипед салу: setbkcolor (WHITE); setcolor (GREEN); bar3d(230,50,250,150,15,1); 208

209 bar3d(220,150,260,180,15,1); bar3d(300,150,340,180,15,0); bar3d(300,50,340,150,15, 1); Кӛпбұрыш салу функциясы drawpoly(нүктелерсаны,координаталары); тҥзу сызықтардан тҧратын тҧйық аймақты кӛпбҧрыш сызады. НүктелерСаны параметрі кӛпбҧрыш тӛбелері санын, Координаталары параметрі сол тӛбелер координаталарын жиым элементтері ретінде береді. Жиымның 0-ші және 1-ші элементтері алғашқы нҥкте координаталары, 2-ші, 3-ші элементтері екінші нҥкте координаталары, т.с.с. Енді осы функцияны пайдаланып, алты бҧрыш салайық. // кӛпбұрыш салу #include <graphics.h> #include <conio.h> #include <stdio.h> main() { int gdriver=detect; int gmode; initgraph (&gdriver,&gmode,"c:\\tc\\bgi"); int x,y,t[14]={450,150,500,350,400,400,150,400,50,150, 250,80, 450,150 ; setcolor(white); drawpoly(7,t); settextstyle(3,horiz_dir,1); outtextxy(458,135,"c(450,150)"); outtextxy(508,335,"d(500,350)"); outtextxy(400,400,"e(400,400)"); outtextxy(150,400,"f(150,400)"); outtextxy(38,138,"a (50,150)"); outtextxy(243,55,"b(250,80)"); getch(); closegraph(); Іші боялған кӛпбұрыш салу үшін қолданылатын функция fillpoly (НүктелерСаны, координаталары); мҧндағы НүктелерСаны тӛбелердің саны, координаталары жиым элементтері тҥрінде берілген тӛбе координаталары. Әрбір тӛбе координатасы екі бҥтін санмен беріледі. Бҧл функция тӛбелердің алғашқы нҥктесін соңғы нҥктесімен қосып, сызықтарды тҧйықтап, ішін бояйды. Сызық типі мен бояу тҥсі setfillstyle() және setfillpattern() функцияларымен анықталады. Шеңбер сызу функциясы circle(x,y,r); радиусы r (бҥтін сан), центрінің координаталары (х, у) болатын шеңбер сызады. Сызық тҥсі setcolor() функциясымен беріледі. Мысалы, қызыл тҥсті 5 шеңбер сызайық: 209

210 ... setcolor(red); for(r=5;r<=25; r+=5) circle(320,240,r);... Доға сызу функциясы arc(x,у,бұрышбасы,бұрышсоңы, Радиус); центрінің координатасы (х, у), радиусы берілген доға сызады. БұрышБасы, БұрышСоңы параметрлері бҧрышты градуспен горизонталь х ӛсінен бастап, сағат тіліне қарсы бағытта береді. Радиус параметрі доға радиусын бҥтін санмен береді. Бҧрыштар мәні периодына сәйкес эквивалентті тҥрде [0..360] интервалындағы мәндерге келтіріледі. Мысалы, arc(х,у,-45,45,r) және arc(х, у, 675, -315,r) шеңбердің бір ширегіне сәйкес бір доғаның екі тҥрде берілуін кӛрсетеді. Эллипс доғасын сызу функциясы ellipse(x,y,бұрышбасы,бұрышсоңы,rх,rу); центрінің координаталары (х, у) эллипс немесе эллипс доғасын (16.4 сурет) сызады. БұрышБасы, БұрышСоңы параметрлері доғаның басы мен соңын градуспен сағат тіліне қарсы береді. rx, ry параметрлері эллипстің кӛлденең және тік радиустарын береді. Эллипс ӛстері координаталар ӛстеріне параллель болады. Іші боялған контурлы эллипс салу функциясы fillellipse (х,у, rх,rу); мҧндағы х, у центр координаталары; rх, rу пикселмен берілген эллипс жарты ӛстері радиустары. Эллипс ӛстері координат ӛстеріне параллель болады. Эллипс ағымдағы тҥспен боялып шығады сурет. Эллипс доғасын салу Iші боялған дӛңгелек сектор сызу функциясы pieslice(x, y, БұрышБасы, БұрышСоңы, Радиус); радиусы Радиус, центрі (х,у) нҥктесіндегі дӛңгелек сектор сызады. БұрышБасы, БұрышСоңы параметрлері шеңбер секторының бастапқы және соңғы бҧрыштарын градуспен сағат тіліне қарсы анықтайды. Егер БұрышБасы = 0, ал БұрышСоңы = 360 болса, онда pieslice функциясы шеңбер сызып шығады. Бҧрыштарды [0..360] шегіне (диапазонына) келтірген соң, сектор мәні кіші бҧрыштан мәні ҥлкен бҧрышқа қарай сызылады, сол себепті ОХ ӛсінің оң жақтағы бағытын кесіп ӛтетін сектор салуға болмайды. Сектор контуры (доға мен екі радиус) сектор боялған соң сызылады, ал сызық типі мен қалыңдығы 210

211 setlinеstуlе() функциясымен анықталады. Егер контурсыз сектор салу керек болса, мынадай тәсілді пайдалануға болады (16.5 сурет): setcolor(black); setbkcolor(blue) ; setwritemode(xor_put); setfillstуle(wide_dot_fill,red); pieslice(200,100,45,90,50); 16.5 сурет. Секторлар салу Іші боялған контурлы эллипс секторын салатын функция sector (x, у, бұрыш_басы, бұрыш_соңы, rх, rу); Бҧл функция pieslice() функциясы тәрізді жҧмыс істейді. // Жазуы бар секторлар sector2.cpp #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <graphics.h> void main() { int gd=detect,gm,i,x,y; initgraph (&gd,&gm,"c:\\tc\\bgi"); setcolor(black); setbkcolor(blue); setwritemode(xor_put); setfillstyle(wide_dot_fill,red); pieslice(200,100,45,90,50); setbkcolor(blue); setcolor(red); setfillstyle(1,3); x=getmaxx()/2; y=getmaxy()/2; pieslice(x,y,270,360,100); setfillstyle(1,2); pieslice(x,y,0,270,100); settextstyle(1,0,2); moveto(x-20,y-40); outtext("75%"); moveto(x+20,y+20); outtext("25%"); getch(); closegraph(); Тұйық сызықпен қоршалған аймақтың ішін бояу функциясы floodfill(x,у,шекара); мҧндағы х, у боялатын аймақ ішіндегі нҥкте координатасы. Тҧйық аймақты қоршаған сызық контурында тесік болмауы тиіс, әйтпесе бояу бҥкіл экранды 211

212 сол тҥске бояп жібереді. Контур тҥсі шекара тҥсімен бірдей болуы тиіс. Бояу тҥсі мен типі setfillstyle() функциясымен орнатылады. Енді бір мысал келтірейік. //боялған шеңберлер, эллипстер салу kr_krug.cpp #include <conio.h> #include <stdlib.h> #include <graphics.h> void main() { int gd=detect,gm,r,x=120,y=240; initgraph(&gd, &gm,"c:\\tc\\bgi"); setcolor(red); //сызықтар қызыл түсті setbkcolor(blue); //фон кӛк түсті for(r=0; r<80; r++)//концентрлі circle(x,y,r); //80 қызыл шеңбер салу setfillstyle(solid_fill,red); x+=200; circle(x,y,80); //қызыл шеңбер floodfill(x,y,red); // іші де қызыл x+=200; fillellipse(x,y-150,80,50);//қызыл эллипс setfillstyle(solid_fill,green); fillellipse(x,y,80,50); //жасыл эллипс setfillstyle(solid_fill,yellow); fillellipse(x,y+150,80,50); //сары эллипс getch(); closegraph(); Терезе ашу функциясы Графикалық режимде экран ішінде ӛз координаталық жҥйесі бар тӛртбҧрышты басқа терезені ашуда қолданылатын келесі функция қолданылады: setviewport(x1,y1,x2,y2,clip); Мҧндағы x1, y1 терезенің сол жақ жоғарғы бҧрышы координаталары; x2, у2 оң жақ тӛменгі бҧрышының координаталары; clip қию параметрі.егер clip параметрі 1 болса, онда терезеге сыймайтын бейне элементтері қиылып алынып тасталады; ал егер де ол 0 болса, терезе шекаралары есепке алынбай, бейне толық экранда кӛрсетіледі. Бҧл функция дҧрыс орындалса, графикалық курсор терезенің координаталар басына орналасады. Терезені тазалау функциясы clearviewport (); Тағы бір мысал келтірейік. //Диагональ сызу, жаңа терезелер ашу primer3.cpp #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <graphics.h> void main() { 212

213 int gd=detect,gm,x,y; initgraph(&gd,&gm,"c:\\tc\\bgi"); //жасыл экранда қалыңдығы 3 пиксел диагональ сызу setbkcolor(green); setcolor(red); setlinestyle(solid_line,0,3); x=getmaxx(); y=getmaxy(); printf(" xmax=%d ymax=%d ",x,y); line(0,0,x,y); // бір перне басып,экран тазалау getch(); cleardevice(); // терезе ашу, оны тазалау setviewport(100,100,600,400,1); clearviewport(); setcolor(green); rectangle(10,30,450,255); circle(230,145,55); settextstyle(default_font,horiz_dir,3); //орыс әріптері тек DEFAULT_FONT қарпінде setbkcolor(blue); setcolor(white); //Мәтін терезенің сол жақ жоғарысында outtextxy(1,1, "Жаңа терезе"); getch(); closegraph(); Бақылау сұрақтары 1. ІBM PC компьютерлері бейнемониторының қандай түрлері бар? Олардың айырмашылығы неде? 2. Графикалық режимнің атқаратын қызметі қандай? Оны программада қалай іске қосады? 3. Графикалық режим қандай функция арқылы орнатылады? 4. Адаптерлердің мынадай типтерінің CGA, EGA, VGA бір-бірінен айырмашылығы неде? 5. Монитордың мәтіндік және графикалық режимдерінің мүмкіндіктері неге әртүрлі болады? 6. Драйвер деп нені айтады? Графикалық драйвер ше? Ол қандай қызмет атқарады? 7. Экранның түсін және оған шығарылатын жол символдарының түсін қалай өзгертуге болады? 8. Графикалық режимде курсор бола ма? 9. Символдарды қалай жыпылықтатып қоюға болады? 10. Курсорды экранның кез келген нүктесіне қалай көшіреміз? 11. Графикалық режимде экранда қалай терезе құруға болады? 12. Графикалық режимде экранды қалай тазартуға болады? 13. Clrscr, Clreol, Dellіne және Іnslіne функцияларының ортақ қасиеттері мен айырмашылықтары. ТАПСЫРМАЛАР 213

214 1. Уақытты есептеп отыратын сиқыршымен кездестiңдер делiк және ол сендерге жҧлдыздар сырын ашып бередi деп ойлайық. Неге аспанда жҧлдыздар жымыңдайды? Аспандағы әрбiр жҧлдыз бiр адамның ӛмiрi. Сендерге кӛне жҧлдыздарды дәл уақытында ӛшiрiп, жаңасын дер кезінде жағып отыру керек. Уақыт есептеушінің жҧмысын кӛрсететін программа жазу керек. Есеп модель қҧрудан басталады: экрандағы әрбiр жҧлдыз нҥктемен кӛрсетіледi және барлығы 20 жҧлдыз жанып тҧрсын делiк (кездейсоқ тҥрде таңдап алынған): жанып тҧрған бiрiншi нҥктенi ӛшiрiп, оны кез келген басқа орыннан жандыру керек, содан кейiн екiншiсiн, т.с.с. Жиырмасыншы жҧлдыз ӛшкеннен кейiн қайтадан бiрiншiсiне кӛшу керек. 2. Жаңбыр программасын жазыңдар экранда (кездейсоқ кҥйде) 50 нҥкте жоғарыдан тӛменге қарай қозғалып келе жатқандай болуы тиіс. Нҥктелердiң бiрi экранның тӛменгi шекарасына жеткенде, ол қайтадан экранның жоғарғы бӛлiгiнде пайда болуы керек. 3. Жаңбыр программасын кейбiр нҥктелер шапшаң, кейбiреулерi баяу қозғалатындай етiп ӛзгертiңдер. 4. Жаңбыр программасын нҥктелер ӛз қозғалысын тӛменгi сол жақ бҧрыштан бастап, жоғарғы оң жақ бҧрышта аяқталатындай етiп ӛзгертiңдер. 5. Қағазға оралған кәмпиттiң бейнесiн: диагональдары жҥргiзiлген горизонталь тiктӛртбҧрыш пен оның екi жағына жалғасып жатқан тең қабырғалы ҥшбҧрыштар салыңдар. Тiктӛртбҧрыштың сол жақ тӛменгi тӛбесiнiң координатасы (х, у), биiктiгi а-ға, ҧзындығы 2а-ға тең болсын. Ҥшбҧрыштың биiктiктерi а/2. Тiкбҧрыштың диагональдары мен қабырғаларынан пайда болған қарама-қарсы екi ҥшбҧрышты бояңдар. 6. Ҥш тiстi және жарты дӛңгелек пiшiндi аркасы бар мҧнара салыңдар. Мҧнараның сол жақ тӛменгi тӛбесiнiң координатасы (х, у), табанының ҧзындығы а. Қалған ӛлшемдерiн а арқылы ӛрнектеп табыңдар. Мҧнараны бояңдар. 7. Куб салыңдар. Кубтың алдыңғы сол жақ тӛменгi тӛбесiнiң координатасы (х, у), бҥйiр қыры а. Жоғарғы бҥйiр бетiн бояңдар, оң жақ бҥйiр бетiнде диагональ жҥргiзiңдер. 8. Алтыбҧрышты тiк пирамида салыңдар. Табанының алдыңғы сол жақ тӛбесiнiң координатасы (х, у), табанындағы қыры а. Қалған ӛлшемдерiн а арқылы ӛрнектеп табыңдар. Пирамиданың екi бҥйiр жақтарын бояңдар. 9. Тiктӛртбҧрышты қиық пирамида салыңдар. Пирамида табанының тӛменгi сол жақ тӛбесiнiң координатасы (х,у), табанындағы қыры а, жоғарғы жақтың қыры а/2. Қалған ӛлшемдерiн а арқылы ӛрнектеп табыңдар. Пирамиданың оң жақ бҥйiр бетiн бояңдар. 10. Қарайтылған Е әрпi тәрiздi фигура салатын программа қҧрыңдар. Әрiп қҧрайтын нҥктелердiң абсциссалары мен ординаталары жиым элементтері ретiнде берілген. Сурет салу ҥшiн циклге енгiзiлетiн тек қана бiр LINE операторын пайдаланыңдар. 11. Экранда боялған шырша салатын программа жазыңдар. Сурет элементтерін жиымда сақтап, ӛшiрiп және содан кейiн қайтадан экранға шығарыңдар. 12. Боялған 7 шыршаның суретiн салатын программа жазыңдар. Шыршалар бiр-бiрiне ҧқсас, горизонталь бойында бiр қалыпта орналасады, шыршалардың биiктiгi солдан оңға қарай сызықтық тҥрде ӛсуi керек. Шыршаларды бойлап Қызыл Телпек оларды уақытша ҥсiп қалмасын деп бір затпен жауып шығатын болсын. 214

215 13. Графикалық режiмде ESC пернесiн басқанша монитор экранына кездейсоқ кҥйде бірсыпыра нҥктелер шығаратын программа қҧрыңдар. 14. Графикалық режiмде ESC пернесiн басқанша монитор экранында (100, 100) (300, 200) тiктӛртбҧрышының нҥктелерiн кездейсоқ кҥйде жоятын программа қҧрыңдар. 15. Графикалық режiмде ESC пернесiн басқанша монитор экранының центрi (200, 200) нҥктесiмен дәл келетін және радиусы 80 болатын дӛңгелек нҥктелерiн кездейсоқ кҥйде жоятын программа қҧрыңдар. 16. Шахмат тақтасының бейнесін салыңдар. 17. Экранда қарайтылған М әрпi пiшiндес фигура салатын және бағыттауыш тілсызық (,,, ) пернелер арқылы басқарылып, фигураның кӛлемiн + және пернелерiнiң кӛмегiмен ӛзгертетін программа қҧрыңдар. 18. Циклдiк операторды пайдаланып 10 басқышы бар саты салыңдар, оның жҧп және тақ нӛмiрлi басқыштарының кӛлемi әртҥрлi болатын программа қҧрыңдар. 19. Шеңберге iштей бесбҧрышты жҧлдыз салыңдар. 20. Қызыл экранға 0..9 аралығындағы 1000 кездейсоқ санды ақ тҥспен шығару қажет. Мҧнан соң экран тҥсін жасылға бояп, сандарды сары тҥспен шығарыңдардар. 21. Экранды барлық (8) фон тҥстеріне 5 секунд кідіріспен бояп шығыңыздар. Экранның сол жақ жоғарғы бҧрышына оның нӛмірін жазып қою керек. 22. Қара экранға 1-ден 16-ға дейінгі сандарды 16 тҥрлі тҥске бояп шығару қажет. Әрбір сан бӛлек жолда орналасатын болсын. 23. Алдын ала тазартылған экранды ақ тҥске бояп, жеті атаңыздың аттарын жеті тҥрлі тҥспен шығарыңдардар. 24. Қара экранға ӛзгеріп отыратын кездейсоқ тҥстер арқылы белгісін кездейсоқ тҥрде берілетін координаталық нҥктелерге басып шығару керек. 25. Экранның жоғарғы жағына екі терезе салып, оның біріншісінің ішіне ӛз атыңызды, екіншісіне фамилияңызды жазып қойыңыз. 10 секундтан кейін терезелер ішін тазартып, ӛз аты-жӛніңіздің орнына досыңыздың аты мен фамилиясын орналастырыңыз. 26. Экранның сол жақ шетіне кӛк тҥсті терезе салып, оны оң жаққа қарай қадамын бір символ етіп жылжытып отыратын программа қҧру керек. 27. Экранға біртіндеп ҥлкейе бастайтын шағын қызыл терезе салу қажет. Ҥлкею қадамын Х координатасы ҥшін 3, ал У координатасы ҥшін 1 етіп алыңыздар. 215

216 17 C ПРОГРАММАСЫН ОРЫНДАУ ОРТАСЫ Турбо С редакторының терезесі Turbo С программалау жҥйесі С тілінде программа қҧрастырып, оны орындауға мҥмкіндіктер береді. Жалпы, тҧтынушы мынадай әрекеттерді орындай білуі керек: - программаның мәтінін жазып, дискіде программа файлы ретінде сақтау; - программаны компиляциядан ӛткізіп, егер синтаксистік қателері бар болса, оларды тҥзету; - программаны орындап, нәтижесін алу. Сонымен, кез келген программа оны теру, компиляциялау, қҧрастыру, атқарылушы модульді жасау және орындап нәтиже алу сатыларынан ӛтуі тиіс. С тілінің біріктірілген (интегралданған) ортасында программа орындау тӛмендегідей қадамдардан тҧрады: 1) компилятор қажет файлдарды іздеп тауып алуы ҥшін ортаның параметрлерін тағайындау; 2) программалық файлды редактор ортасына жҥктеу немесе теру; 3) атқарылатын модульді (орындалатын файлды) жасау; 4) программаны іске қосу және орындау; 5) программада қате болса, оны жӛндеп тҥзету. Программа қҧру ҥшін, ең алдымен, Турбо С біріктірілген ортасымен жҧмыс істей білу керек. Турбо С ортасы арнайы кӛп терезелі мәтіндік редактор. Ол кӛбінесе С:\TC\BIN\tс.exe файлын іске қосу арқылы немесе соның жарлықтарының бірін іске қосу жолымен жҥктеледі: ТС.ЕХЕ файлының жҧмыс істеу барысында экранда Турбо С ортасының негізгі терезесі ашылады (17.1-сурет). Турбо С ортасын автоматты тҥрде жҥктеп, орыс (қазақ) әріптерін теру мҥмкіндігін беретін C.bat пакеттік файлының мәтінін мынадай тҥрде қҧрастыруға болады: c: cd TC\BIN rk.com tc.exe C.bat файлын немесе оның жарлығын шерту арқылы да Турбо С ортасы ашылады. Ол іске қосылған соң, орыс әріптеріне және ағылшын әріптеріне ауысу қос Shift пернелерін (ол басқаша да болуы мҥмкін) қатар басу арқылы орындалады. Tурбо С редакторы DOS ортасында жҧмыс істейтін кӛкшіл экранға шығады. Ол экран тӛрт бӛліктен тҧрады (17.1-сурет): - меню жолы, - тҥзету/теру терезесі, - мәлімедеме хабарлар терезесі, - қалып қатары. 216

217 Терезені ҥлкейту ҥшін Alt+Enter пернелерін басу керек, редактор терезесін экранды толық алатындай етіп ҥлкейту ҥшін, оның оң жақ жоғарғы бҧрышындағы тілсызық [ ] батырманы шерту керек. Ал терезені жабу ҥшін сол жақ жоғарғы шеттегі тӛртбҧрышты батырманы [ ] шертеміз. Турбо С- ден шығу ҥшін Alt және X (латын) пернелерін қатар басу керек. Тҥзету/теру терезесі Меню жолы 17.1-сурет. Турбо С-дің біріктірілген ортасы Қалып қатары Терезе нӛмірі оның оң жақ жоғары бҧрышында орналасады. Керекті терезеге (1 9 ) кӛшу ҥшін: - Alt+0 пернелерін басқанда шығатын терезелер тізімінен керектісін таңдау арқылы; - Alt+5 деп терезе нӛмірін 5-ті енгізіп кӛшу; - F6 пернесі арқылы терезелердің бірінен біріне кӛшуге болады. F5 пернесі арқылы терезені ҥлкейтуге немесе аздап кішірейтуге болады. Меню жолында 11 команда бар, олар әртҥрлі қызметтер атқарады, әр менюді таңдағанда, оның ішкі командалары ашылады. Солардың кез келгенін таңдап орындай аламыз Меню командалары Программа іске қосылып, терезе ашылғаннан кейін, курсор жҧмыс алабында тҧрады.меню қатарына F10 пернесі арқылы шығып, ESC арқылы жҧмыс алабына ораламыз. Меню қатарының командаларын және тӛменгі сатылы командаларының қажеттісін бағыттауыштары арқылы таңдай аламыз. Команданы орындау ҥшін Enter пернесін басамыз. Осы әрекеттерді тышқан қолтетігімен де қалыптағыдай етіп орындауға болады. Командалар тізімі Ё қосымша әрекеттер орындау. File (файл) файлдармен жҧмыс істеу. 217

218 Edit (тҥзету) ашық терезедегі мәтінді тҥзету режимдерін орындау. Search (іздеу) іздеп табу әрекеттерін орындау. Run (атқару) программаны орындау. Compile (компиляция) программаны компиляциядан ӛткізу. Debug ( отладка) программаны жӛндеу. Options (нҧсқалар) орта параметрлерін тағайындау. Windows (терезе) тереземен жҧмыс істеу. Help (кӛмек) анықтамалық жҥйеден кӛмек алу. Қосымша әрекеттер жҧмыс істеп тҧрған файлдарды анықтау, ішкі Ассемблерді іске қосу сияқты әрекеттерді орындайды. File менюінің ішкі командалары (17.2-сурет): Open F3 бҧрын жазылған файлды ашу {A:\LB1.C New жаңа файл ашу Save F2 файлды дискіге жазып сақтау Save as файлды басқаша тҥрде жазып сақтау Save all барлығын да жазып сақтау Change dir директорийды ӛзгерту Print ашық терезедегі файлды қағазға басу Dos shell DOS-қа (Turbo С-ден) уақытша шығу Exit Alt-X Turbo С-ден шығып кету Файлды дискіге ӛзіңіз қойған атпен сақтауға арналған Басқаша сақтау (Save as Сохранить как...) терезесі тӛмендегі 17.2-суретте кӛрсетілген сурет. Дискіге мәлімет жазу терезесі Edit менюінің ішкі командалары (17.3-сурет): Undo (болдырмау) Alt + Bksp соңғы орындалған команданың әрекетін болдырмай алып тастайды. Redo Shift +Alt + Bksp Undo командасының кері қайтарған командасы әрекетін қайтадан іске қосады. Cut (қиып алу) Shift+Del белгіленген бӛлікті буферге қиып алады (бҧрынғы орнында қалмайды). Copy (кӛшіру) Ctrl+Іns белгіленген бӛлікті буферге кӛшіреді (бҧрынғы орнында сақталады). 218

219 Paste (кірістіру) Shіft+Іns курсор орналасқан жерге буфердегі ақпаратты кірістіріп қояды, яғни енгізеді. Clear (ӛшіру) Ctrl+Del белгіленген бӛлікті ӛшіру. Copy Examples мысалды кӛшіру. Show Clіpboard (буферді ашу) редактор терезесінен буферге алынған мәтінді сақтайтын терезені ашады. Search менюінің ішкі командалары: Fіnd (табу) табуға қажетті сӛзді енгізу мҥмкіндігін беретін сҧхбат терезені ашады. Replace (орын алмастыру) Alt+S+R іздейтін мәтін мен оны алмастыратын мәтінді енгізу мҥмкіндігін беретін сҧхбат терезені ашады. Search Agaіn (қайтадан іздеу) Ctrl+L Fіnd немесе Replace командаларының соңғы әрекетін қайталайды. Go to lіne number (нӛмір қатарына бару) курсорды нӛмірі кӛрсетілген қатарға орналастырады. Previous error Alt+F7 алдыңғы қате орнына бару. Next error Alt+F8 келесі қате орнына бару сурет. Edit менюінің ішкі командалары Run менюінің ішкі командалары: Run (орындау) Ctrl+F9 орнатылған параметрлерді қолдана отырып, редактор терезесіндегі екпінді программаны орындайды. Program reset Ctrl+F2 (сброс программы) жӛндеушінің орындап жатқан әрекетін тоқтатып, программаға бӛлінген орынды босатып, барлық ашық файлдарды жабады. Go to cursor (курсорға ӛту) F4 екпінді терезедегі программаны курсор тҧрған орындағы қатарға дейін орындайды. Trace іnto (қосалқы программаға кіріп, қадамдық орындау) F7 программадағы операторларды қадам бойынша кӛрсете отырып орындайды. Step over (программаны қадам бойынша орындау) программа мәтінінің бір жолына сәйкес келетін кезекті операторды біртіндеп орындайды. Compіle менюінің ішкі командалары (17.4-сурет): Compіle Alt+F9 екпінді терезедегі программаның қатесін тексереді. Снтаксистік қате жӛнінде хабарлама береді де, курсор қате жіберілген орынға 219

220 орналасады. Қате жоқ болса, компилляцияның сәтті болғаны жӛнінде хабарлама береді. Make (программаны жинақтау). Егер негізгі программада немесе негізгі модульде қолданылатын жеке модульдердің мәтінінде объектілік файлды алғаннан кейін ӛзгеріс болса, соған сәйкес модульдер қайта тексеріледі, одан кейін негізгі программа немесе негізгі модульден тҧратын файл қайта қҧрылады. Buіld all (Программа қҧру) бҧл команда орындалғанда, негізгі программа және негізгі модульде қолданылатын барлық модульдер қайта компиляциядан ӛткізіледі сурет. Compile менюінің ішкі командалары Debug (жӛндеу) менюі ішкі командалары: Inspect (Alt+F4) Inspector терезесін ашады, ол объектілер мәнін талдауға кӛмектеседі. Evaluate/modify (Ctrl+F4) ҥш ӛрісі бар терезе ашады: Expression, Result, New value олар айнымалы мәндерін кӛріп, оларды ӛзгерту мҥмкіндігін береді. Call stack (Ctrl+F3) программада қолданылған функциялар тізбегін стекті кӛрсететін қосалқы программа терезесін кӛрсетеді. Watches 8 суырылып шығатын менюді ашып, жаңа ӛрнектер енгізіп, оның нәтижесін кӛрсете алады. Breakpoints... тҥзету режимінде тоқтау нҥктесімен жҧмыс істеу мҥмкіндігін беретін терезе ашады. Project командалары қажет болғанда, жобалар ашу, толықтыру және жабу ісін атқарады. Жоба бір-бірімен байланысты файлдар жиыны, бірнеше объектілік файлдар бірден компиляциядан ӛткізіліп, атқарылатын бір программа жасайды. Жоба кӛп файлды программалар кезінде керек. Кейде бір файлмен жҧмыс істегенде де қолданылады. Модульдік программалау барысында кӛпфайлдық компиляциялаусыз жҧмыс істеу мҥмкін емес. Кӛлемі ҥлкен программалармен жҧмыс істеу кезінде ол программаның бӛліктерін бірнеше файлдарға сақтау анағҧрлым ыңғайлы. Әрбір файл бҥтіндей бір немесе бірнеше функцияны қосуға тиіс. Ол файлдардың 220

221 аттары арнайы файл-жобаға жазылады, IDE ол ақпараттан мәтіндік файлдардың қайсысын орындалатын файлға (.ЕХЕ) біріктіру керек екендігінен хабардар болады. Файл-жобалармен жҧмыс істеуге қажетті бҧйрықтардың барлығы Project мәзіріне қосылған. Файл-жобаларды ҧйымдастыру ҥшін ол файл-жобаны ашу керек. Ол ҥшін Project\Open Project командасы орындалады және IDE экранның тӛменгі жағындағы арнайы Project терезесін іске қосады. Қажетті файл-жобаны жҥктейтін немесе берілген атпен жаңа файл-жоба қҧратын диалог терезесі ашылады. Жаңа файл-жоба қҧрылған болса, Project терезесі бастапқыда бос болады. Жобаға файлдарды қосу немесе оларды жою Project\Add item және Project\Delete item бҧйрықтарымен орындалады. Меңзер (курсор) Project терезесінде орналасқан жағдайда осы мақсатта Ins және Del батырмаларын басса да жеткілікті. Файлдарды жобаға қосу кезінде қажетті файлды таңдауға мҥмкіндік беретін диалог терезесі ашылады. Project терезесі жобаға қосылған бір файлдан оларды редакциялау барысында келесісіне кӛшуді жеңілдетеді. Ол ҥшін Project терезесіндегі қажетті жолға меңзерді (курсорды) апарып ENTER пернесін басса жеткілікті. Borland C++ ортасында жҧмыс істеу кезінде программа бір ғана файлдан тҧрғанның ӛзінде жобаны қолданған ыңғайлы сурет. Option менюінің ішкі командалары Options менюінің командалары (17.5-сурет) Турбо С ортасының келісім бойынша тағайындалатын параметрлерін кӛру және оларды ӛзгерту мҥмкіндігін береді. Олардың кӛптеген мәндерін ӛзгертпей, қалдыруға болады. Мҧнда тҥйінді сӛздер тҥсін (16 тҥс) ӛзгерту мҥмкіндігі бар (Options/Enviroment/Colors/Syntax). Directories командасы тақырыптық файлдар каталогын (Include Directories), кітапханалық функциялар (Library Directories) каталогын және терілген файлдар мен олардың нәтижелік файлдары (Output Directory) қайда орналасатынын кӛрсетіледі. Мысалы, егер TС программалары C:\TC каталогында орналасса, онда 221

222 Include Directories ӛрісінде C:\TC\INCLUDE деп кӛрсеткен дҧрыс болады, ал Library Directories ӛрісіне C:\TC\LIB деп жазу керек. Output Directory жолына нәтижелік файлдар орналасатын каталогты, мысалы, С:\TC\BIN\STU- DENT деп кӛрсеткен ыңғайлы болып саналады немесе С:\TC\BIN каталогын қалдыру ҥшін нҥкте. енгізе салу керек. Керекті параметрлер енгізілген соң, оларды Options Save... командасымен есте сақтап қою қажет. Wіndow (Терезе) меню командалары терезені ашу, жабу, экранды жылжыту әрекеттерін орындау мҥмкіндігін береді. Size/Move Ctrl+F5 терезе кӛлемі мен орны Zoom F5 терезені ҧлғайту Tile сатылы (каскадты) Next F6 келесі терезе Close Alt+F3 терезені жабу Output нәтижелік терезе User screen Alt+ F5 тҧтынушы экраны List All Alt+0 басқа терезелерді ашу Help (кӛмек) меню командалары жҥйедегі анықтамалық ақпаратты оқу мҥмкіндігін береді. Contents (экранға шығарылған ақпарат жӛнінде мәлімет) ағымдағы уақытта экранға шығарылған мәлімет жӛнінде (екпінді терезе, таңдалған меню командасы, жіберілген қате) мәліметті сҧхбат терезеге шығарады. Іndex (тҥйінді сӛздер) Shift+F1 жҥйеде бар барлық анықтамалық ақпарат тізімін әліпбилік ретімен тҥйінді сӛздер бойынша шығарады. Topіc search (сӛз бойынша іздеу) Alt+F1 курсор орналасқан сӛз жӛнінде анықтамалықты шығарады. Егер сол сӛз жӛнінде анықтамалық жоқ болса, алғашқы символдарының саны кӛп сәйкес келетін тҥйінді сӛздер тізімін береді. Prevoіus topіc (алдыңғы тақырып) алдыңғы сҧранысқа сәйкес келетін анықтамалықты шығарады. Жҥйе 20 сҧранысты сақтай алады Қателер коды және олардың мәліметтері Турбо C ортасы программа компиляциядан ӛткен кезде пайда болған қателер жайлы толық мәлімет береді. Қате кездескен кезде орта автоматты тҥрде бастапқы программа мәтінін экранға шығарып, курсорды қате табылған орынға орналастырады және редактордың жоғарғы жолында диагностикалық мәлімет пайда болады. F1 пернесінен басқа кез келген пернеге бассаңыз, жоғарғы жол бастапқы қалпына келіп, интегралданған орта редакциялау режиміне ауысады. Егер қате жайлы мәлімет шыққаннан кейін F1 пернесін басқанда, экранда қатені тҥзету жайлы нҧсқаулар жазылған анықтама қызметінің терезесі пайда болады. Кейбір қателер бірден емес, программа мәтінін талдау барысында анықталады. Қате Қате тҥсінігі нӛмірі 1 Out of memory (Жады шекарасынан асып кету) 2 Identifier expected (Идентификатор көрсетілмеген) 3 Unknown identifier (Белгісіз идентификатор) 4 Duplicate identifier (Идентификатор қайталанған) 222

223 5 Syntax error (Снтаксистік қате) 6 Error in real constant (Нақты тұрақтыда қате бар) 7 Error in integer constant (Бүтін тұрақтыда қате бар) 8 String constant exceeds line (Тіркестік тұрақты берілген аймақтан тыс жатыр) 9 Too many nested files (Кіріктірілген файлдар саны тым көп) 10 Unexpected end of file (Файл соңы табылмады) 11 Line too long (Тым ұзын жол) 12 Type identifier expected (Тип идентификаторы қажет) 13 Too many open files (Ашылған файлдардың саны көп) 14 Invalid file name (Файл аты дұрыс емес) 15 File not found (Файл табылмады) 16 Disk full (Диск толып кеткен) 17 Invalid compiler directive (Компилятор директивасы қате) 18 Too many files (Файлдардың саны тым көп) 19 Undefined type in pointer definition (Көрсеткіш сипаттауында тип көрсетілмеген) 20 Variable identifier expected (Айнымалының иденфикаторы жоқ) Программа орындалу кезінде шығатын қателер Программа орындалу кезінде анықталатын кейбір қателер экранда Runtime error nnn at xxxx:yyyy (хххх:уууу адресі бойынша nnn кезеңін орындаудағы қате) мәлімдемесінің шығуына әкеледі, мҧнда nnn қате нӛмірі; xxxx:уyyу адрес (сегмент немесе жылжу). Бҧл мәлімдемеден кейін программа ӛз жҧмысын тоқтатады. Программа орындалу кезінде шығатын қателер тӛртке бӛлінеді: СОЖ (сҧхбатты операциялық жады) анықтайтын қателер (1-ден 99-ға дейінгі қателер), енгізу-шығару қателері (100-ден 149-ға дейінгі қателер), дағдарысты қателер (критические ошибки) (150-ден 199-ға дейін) және фаталды қателер (200-ден 255-ке дейінгі қателер) Операциялық жүйе анықтайтын қателер Қате Аты 1 Invalid function number (Функция нөмірі дұрыс жазылмаған) 2 File not found (Файл табылмады) 3 Path not found (Жол табылмады) 4 Too many open files (Ашылған файлдардың саны көп) 5 File access defined (Файлға қол жеткізуге рұқсат жоқ) 6 Invalid file handle (Ретсіз файлдық канал) 12 Invalid file access code (Файлға қол жеткізудің коды нақты емес) 15 Invalid drive number (Дискжетек нөмірі ретсіз) 16 Cannot remove current directory (Ағымдағы каталогты өшіруге болмайды) 17 Cannot rename across drives (Атты ауыстырғанда әртүрлі дискжетек аттарын көрсетуге болмайды) Енгізу-шығару қателері Егер операторлардың біреуі {$1+ директивасымен компиляциядан ӛтсе, 223

224 онда енгізу-шығару қатесі программаның орындалуын тоқтатады. {$1 қалпында программа орындалуын жалғастырып, қате IORESULT функциясымен қайтарылады. Қате Аты 100 Disk read error (Дискіден оқу кезінде қате кетті) 101 Disk write error (Дискіге жазу кезінде қате кетті) 102 File not assigned (Файлға ат берілмеген) 103 File not open (Файл ашылмаған) 104 File not open for input (Файл енгізу үшін ашылмаған) 105 File not open for output (Файл жазу үшін ашылмаған) 106 Invalid numeric format (Сан форматы дұрыс емес) Дағдарысты қателер Қате Аты 150 Disk is write protected (Диск жазудан сақталған) 151 Unknown unit (Белгісіз модуль) 152 Drive not ready (Дискенгізгіш «дайын емес» қалып күйінде) 153 Unknown command (Бейтаныс команда) 154 CRC error in data (Бастапқы мәндерде қате бар) 155 Bad drive request structure length (Дискіден мәлімет аларда құрылым ұзындығы дұрыс көрсетілмеген) 156 Disk seek error (Дискіден оқитын құрылғы бастарын дискке орнату операциясы кезінде қате кетті) 157 Unknown media type (Тасымалдауыш типі белгісіз) 158 Sector not found (Сектор табылмады) 159 Printer out of paper (принтерде қағаз бітті) 160 Device write fault (Құрылғыға жазу кезінде қате кетті) 161 Device read fault (Құрылғыдан оқу кезінде қате кетті) 162 Hardware failure (Аппаратура жұмыс істемей тұр) Фаталды қателер Бҧл қаталер программа жҧмысының бірден тоқталуын жҥзеге асырады. Қате Аты 200 Division by zero (Нөлге бөлу) 201 Range check error (Шекраларды тексеру кезінде қате шықты) 202 Stack overflow error (Стек толып кетті) 203 Heap overflow error (Мәлімет толып кетті) 204 Invalid pointer operation (Көрсеткішпен орындалатын белгісіз операция) 205 Floating point overflow (Жылжымалы нүктемен жұмыс жасау кезінде мәндер берілген аймақтан шығып кетті) 206 Floating point underflow (Жылжымалы нүктемен жұмыс жасау кезінде реті бұзылды) 207 Invalid floating point operation (Жылжымалы нүктемен жұмыс жасауға болмайтын операция) 208 Overlay manager not installed (Оверлейді басқарудың ішкі жүйесі орнатылмаған) 209 Overlay file read error (Оверлейлік файлды оқу кезінде қате жіберілген). 224

225 210 Object not initialized (Объект инициалданбаған) 211 Call to abstract method (Абстракты ережені шақыру) 212 Stream registration error (Тіркеуге алу ағынында қате бар) 213 Collection index out of range (Терілген индекс диапозон шекарасынан тыс жатыр) 214 Collection overflow error (Коллекция толып кеткен) Бақылау сұрақтары 1. Turbo С біріктірілген программалау жүйесі қандай қызмет атқарады және оның терезесі неше бөліктен тұрады? 2. Turbo С ортасында программа орындау қандай қадамдардан тұрады? 3. Тurbo С ортасы терезесін үлкейту/кішірейту үшін не істеу керек? 4. Тurbo С ортасында программа теру үшін неше терезе пайдаланылады? Керекті терезеге қалай көшуге болады? 5. Меню қатарына және жұмыс алабына ауысу үшін не істеуге болады? 6. File менюінің ішкі командалары қандай? 7. Файлды дискіге жазу/оқу үшін қандай командалар мен пернелер қолданылады? 8. Файлды басқаша атпен сақтау қалай орындалады? 9. Edit менюінің ішкі командалары қандай қызметтер атқарады? 10. Тurbo С терезесінде ерекшеленген бөлікті буферге қалай қиып (көшіріп) алады? 11. Курсор орналасқан жерге буфердегі ақпаратты қалай кірістіріп қояды? 12. Тurbo С терезесінде ерекшеленіп белгіленген бөлікті қалай өшіріп тастайды? 13. Программа мәтіні ішінен тауып алуға қажетті сөзді қандай сұхбат терезеге және қалай енгізуге болады? 14. Run менюінің ішкі командалары қандай қызметтер атқара алады? 15. Орнатылған параметрлерді қолдана отырып, редактор терезесіндегі екпінді программаны қай команда орындайды? 16. Options менюінің командалары қандай? 17. Wіndow (Терезе) меню командалары қандай қызметтер атқарады? 18. Программаны компиляциялауда шыққан қателер жайлы мәлімет қалай алынады? 19. Программа орындалу кезінде шығатын қателер қандай топтарға бөлінеді? 20. Қатені түзету жайлы нұсқауларды қайдан алуға болады? 225

226 18. ПРОГРАММАЛАУ ТІЛДЕРІНІҢ ДАМУ ТАРИХЫ Компьютердің машиналық тілінде жҧмыс істеу программалаушының ӛте жоғары деңгейін талап етеді. Есептеу машиналарының бірте-бірте кӛбеюіне байланысты онымен қарым-қатынас жасауды оңайлату қажеттілігі пайда болды. Біріншіден істелген іс компьютер жадын бӛлу жҧмысы автоматтандырылды және машиналық командалар ҥшін адамға тҥсінікті белгілеулер енгізілді. Осылай пайда болған компьютермен қатынасу тілі Ассемблер тілі деп аталды. Кейіннен кӛптеген тілдер дҥниеге келіп, олар уақыт талабына сай мҥмкіндігінше жетілдіріліп отырылды. Программалау тілдерін жасау және дамыту жҧмысының басында АҚШтағы атақты IBM фирмасы тҧрды. Бҧл фирма кәсіби программалаушылардан басқа да мамандарға алгебралық формулалармен жҧмыс істеуге дағдыланған ғылыми қызметкерлер мен инженерлерге жеңіл қолдануға болатын компьютерлер шығаруға тырысты жылы Джон Бэкус компьютерлердің IBM-704 атты нҧсқасына арнап программалауды оңайлататын жаңа тіл ойлап шығаруды ҧсынды. Осыған орай жаңа тілдің сӛйлемдерін (операторларын) машиналық кодқа тҥрлендіретін программаны трансляторды да жасап шығару керек болды. Алдыңғы кезде мамандар Бэкустың жҧмыс тобына ҥлкен сенімсіздікпен қараған болатын, ӛйткені машиналық кодты жетілдіру істерінің алғашқы ҧсыныстары айналасында, «адам тілінде сӛйлейтін» компьютерлер болады деген әңгіме-сӛз кӛп болған еді. Әйтсе де, FORTRAN (FORmula TRANslator формулаларды тҥрлендіргіш) деп аталған тіл 1957 жылдың сәуірінде дайын болды және ол машина тіліне тек «формулаларды аударып» қана қоймай, циклдерді ҧйымдастыру істерін де автоматтандыра білді. Бҧл жҥйенің табысы кҥткен мҥмкіндіктен бірнеше есе асып тҥсті, 1958 жылдың ӛзінде-ақ IBM-704 компьютерлеріндегі машиналық командалардың жартысынан астамы қолмен емес, осы Фортран тілінің трансляторы арқылы алынды. Негізінде, Фортран жаңа программалау қҧралы емес, бҧрынғы нақты машинаға кӛмекші ретінде, оны сату ісін арттыратын мҥмкіндіктің бірі ретінде ғана жасалған жҧмыс болатын. Бірсыпыра кемшіліктерінің болуына қарамастан, мысалы, кейбір программалау идеологтары Фортранды «зердені тҧйыққа тірейтін, синтаксис ережелерімен біріккен бҧтақшалардың тізбегі, оны оқып ҥйренуге тиым салу» керек деп шулағанымен, бҧл тіл кӛпшілікке кең таралып кетті және оны басқа машиналарға да икемдеп енгізу ісі жҥргізіле бастады. Икемдеу ісі (адаптация), Фортран тілінен басқа машина тілдеріне транслятор программалар жасау арқылы жҥргізілді, әрине, ол оңай іс емес болатын. Дегенмен, программалау тарихында тҧңғыш рет программаны жақсы қойылған тапсырма бойынша (Фортран тілінің ережелерімен) жасау, «не жазарыңды білмейтін» тілде жазғаннан гӛрі әлдеқайда жеңіл, әрі арзан екенін 226

227 кӛрсете білді. Басқаша айтқанда, ешқандай программалаусыз-ақ есепті ықшам тҥрге келтіріп, оны тҥсінікті етіп қоя білу де ҥлкен ӛнер саналып, жоғары баға ала бастады. Фортран тілі басқа да бір маңызды рӛл атқарды: ол әртҥрлі компьютерлер бір-бірімен ортақ тіл таба алатын тамаша қҧралға айналды. Фортран бірнеше рет толықтырылып, ӛткен ғасырдың сексенінші жылдарына дейін кең пайдаланылды. Сонан кейін оны жаңа тілдер ығыстыра бастады. Соңғы кездерге дейін ол АҚШ-тың Аэронавтика мен ғарыштық зерттеулер жҥргізетін ҧлттық басқармасының (NASA) компьютерлерге арналған программалар жасайтын негізгі тілі болды. Оның әртҥрлі нҧсқалары осы кездерде де қуатты компьютерлер ҥшін есептеу программаларын жасау мақсатында кең қолданылып келеді. Фортранның осындай кенеттен ашылған қасиеттері, оның әртҥрлі компьютерлер ҥшін әмбебап тіл бола алатын мҥмкіндіктері программалау идеологтарын қарапайым ойын программаларын жазудан босатып, оларды ӛмірдің кез келген кезеңінде пайдаға асатын «әмбебап, жақсы, қолайлы тамаша» тіл жасау ісіне бет бҧрғызды. Оның ҥстіне трансляторларды жазатын олар емес, басқалар екені етенеден белгілі еді. Программа жасаушылардың «Ең жақсы жақсының жауы» деген ҧранына қарамастан, Алгол (ALGOrithmic Language) деп аталған жаңа тілді жасау ісі екі жылдан аса уақыт алды және ол негізінен Европада ғана кең қолданыста болды. Бҧл, сірә, Европада да программалау тілдерінің мамандары бар дегенді дәлелдеу ҥшін жасалған сияқты болды. Алгол туралы белгілі информатик мамандардың бірі Грейс Хоппер былай деген болатын: «Ол ҥлкен поэмаға ҧқсас: математика тҧрғысынан қарапайым, әрі тҥсінікті, бірақ практикалық тҧрғыдан олай дей алмаймыз». Осылай программалау саласындағы европалық аналитиктер тілдің әмебаптығына кӛңіл бӛлсе, біртіндеп компьютер шығарушылардың әлемдегі кӛш басшысына айналған IBM фирмасы одан да мықты тіл шығаруға бет алды. IBM фирмасы 1964 жылы PL/1 (Programming Language One Нӛмірі Бірінші Программалау Тілі) тілін дҥниеге келтірді. Сол кездегі АҚШ мамандары осы тілді программалау тілдерін жасаушылар ойлап тапқан мҥмкіндіктердің асқар шыңы болар деп ҥміттенді. Солай болды да. Бҧл тілге кӛптеген жаңалықтар енгізілген еді. Әйтсе де, супер әмбебап программалау тілдерін жасау идеясы кір жуғыш машинасы бар теледидар жасаған сияқты біраз жерде артық кетіп жатты, оның кӛптеген мҥмкіндіктерін пайдалану оңай болмады. Программалау тілдерінің ең жақсысын жасаймыз деп зерделерін жҧқартып жатқан теоретиктер жҧмысы алаңдағы жалғыз допты қуалаған футбол командасы тәрізді болды солардың жасаған тілін ең жақсы, әрі әмбебап деп айтсын деуге ҧмтылған жарысушылар кҥйінде жҥрді. Ал бҧдан шығатын жол бҧрыннан-ақ белгілі болатын. Балаларға арналған әңгімедегі «Хоттабыч шалдың» әрбір футболшыға бір-бір доп сыйлағаны тәрізді әрбір тілдің ӛз қолданылу аясы болуы керек еді. 227

228 Осындай «доптардың» алғашқысы қазіргі программалау ісінің әжесі Грейс Мюррей Хоппер атымен тығыз байланыста болды. Жеті жасында-ақ Грейс суперпрограммалаушы қасиеттерінен белгі берді: ол ҥйіндегі барлық оятқыш сағаттардың қалай істелгенін білмек болып бҧзып, артынан жинай алмай қойыпты. Екінші дҥниежҥзілік соғыс қызып тҧрған кезде математика докторы Грейс Хоппер АҚШ-тың соғыс-теңіз флотына кіріп, 1944 жылғы маусымда офицер атағын алады. Оның әскерде адмирал шеніне дейін жеткенін айта отырып, программалау саласындағы табыстарына тоқталайық. Хоппер сол кездердегі «Марк-1» машинасына арнап программа жазумен шҧғылданған. Ол сегіздік санау жҥйесінде жҧмыс істеген. Бірде ӛзінің банктегі есебін анықтағысы келіп (математика докторы ҥшін қиын мәселе), Хоппер ӛзінің банкте істейтін бауырынан кӛмек сҧрайды. Банкир інісі Грейстің жазбаларын қарап отырып, оның барлық есептеулерді сегіздік жҥйеде орындағанын кӛріп таң қалады. Ал банк болса, бҧрынғыша ондық жҥйені пайдаланатын еді. Осы кездерден бастап, Хоппер машинамен адам тіліне жақын тілмен қатынас қҧруға болатын мҥмкіндіктерді зерттеумен айналыса бастайды. Оның еңбегінің нәтижесі ретінде А-1, А-2, А-3, В-0, т.б. трансляторларды келтіруге болады. Бірақ осы трансляторлардың барлығында да қолданылған тіл адам тілінен әлдеқайда алшақ болатын. Грейс Хоппердің мақсаты ағылшын тілінде жасалған программалау мҥмкіндігін табу болатын. Банк есептерімен болған жағдай оның программалаудағы жҧмысын физиктерге арнауға немесе әмбебап программалау тілдерін жасауға емес, қарапайым экономикалық есептерді шығаруды жеңілдетуге арнауға бет бҧрғызды. Осы жобаға байланысты болған жайттардың барлық бҥге-шігесіне тоқтамай-ақ, тек Хоппердің соғыс-теңіз флотымен байланысы арқасында оның АҚШ әскери министрлігін қолданбалы іс жҥйесінде пайдаланылатын тілдермен айналысуға кӛндіргенін айту жеткілікті. Ол кезде бҧл министрліктің қол астында кӛбінесе экономикалық есептеулермен айналысатын мыңнан аса әртҥрлі компьютерлер бар болатын. Осының нәтижесінде 1959 жылы жаңа тіл жасау комитеті қҧрылды жылдың сәуірінде сол комитет тілдің сипаттамаларын қҧрастырып, жариялаған болатын. Ал сол жылдың аяғында бірнеше фирма бҧл тілдің трансляторларын да жасап ҥлгерді. COBOL (COmmon Business Oriented Language бизнеске арналған әмбебап тіл) тілі бірден Американың іскерлері ортасынан ӛз бағасын алды. Әрине, программалау ісінің мықтылары оны кӛп сӛзді және ӛте кӛлемді деп санайды, бірақ онда ағылшын тілінің қарапайым сӛздері қолданылатындықтан, программа коды кез келген мамандар мен менеджерлерге тҥсінікті деңгейде болды. Бҥгіннің ӛзінде, шыққанына ширек ғасырдан асса да, ол әлі кең қолданыс табуда. Бҧл тілде жазылған программалардың жалпы бағасы 50 млрд доллар шамасында деп саналады. Экономикалық есептер шығарудағы оның тиімділігі 228

229 әлі де жоғары деңгейде. Кобол тілінің негізінде қазіргі кездегі мәліметтер базасымен жҧмыс істеуге арналған Clarion тілі жасалып шықты. Егер алғашқы программалау мамандары тіл және оған транслятор жасау жҧмыстарын бӛле жарып қарамайтын болса, кейіннен теоретиктердің кҥш салуы арқасында бҧл екі жҧмыс бір-бірінен ажыратылды да, теоретиктерге де арнайы жҧмыс табылды. Тілді біреулер жасап, трансляторларды басқалар жазатын болды. Дегенмен компьютер тҧтынушылары ҥшін программалардың бағалы қасиеті олардың әмбебаптығы сақталғаны дҧрыс болар еді. Мысалы, бір типтегі компьютерлерге арналып Коболда жазылған программалар басқа компьютерлерде де жақсы жҧмыс істеуі тиіс. Осының бәрі тілдердің сипаттамаларын стандарттау қажеттілігін туғызды, ӛйткені кейіннен оларға арнап басқа фирмалар трансляторлар жазуы керек болатын. Бҧрынғы бір бағыт орнына енді ҥш бағытта жҧмыс істеуге тура келді: 1. Тілді жасау. 2. Тілдің стандартын анықтау. 3. Программалау тіліне транслятор жазу. Оның ҥстіне ақпарат ӛңдеуге арналған адамзат қызметінің әр саласының ӛз программалау тілі болғаны дҧрыс екенін ӛмір дәлелдеді (міне, әр ойыншыға бір-бір доп деген осы шығар), мысалы: - қолданбалы іскерлік аймақтарға арналған тіл (COBOL); - ғылыми-техникалық есептерге арналған тіл (FORTRAN); - кестелерді ӛңдеуге арналған тіл (APL A Programming Language программалау тілі жай ғана атау); - металл ӛңдеуге арналған қондырғыларға (станоктарға) арналған программалау тілі (APT Automatically Programmed Tools автоматты тҥрде программаланатын аспаптар); - мамандардың айтуы бойынша, ми жҧмысын модельдейтін және жасанды зерде (интеллект) жасауға болатын тіл (IPL Information Processing Languages ақпарат ӛңдеу тілдері); - әмбебаптықтан да аздап ҥміті бар, нақты уақыт режимінде жҧмыс істейтін объектілерді басқару тілі (ADA); - жедел жадтан ӛте аз орын алып, барынша жылдам істейтін программалар алуға мҥмкіндік беретін жҥйелік программалаушыларға арналған «орта» деңгейдегі тіл (С С++); - нақты уақыт режимінде жҧмыс істейтін «сындарлы» (критикалық) есептерге және борттағы компьютерлерге арналған тіл (FORTH); - программалауды ҥйренуге арналған тіл (PASCAL); - студенттерге арналған программалау тілі (LOGO); - программалауды ҥйренуге қабілеті болмаса да, ӛте программалағысы келетіндерге арналған тіл (BASIC), тағы да сол сияқты жалғасып кете береді. АҚШ әскери министрлігінде ӛткен ғасырдың 70 жылдары 450-дей жоғары 229

230 деңгейдегі тілдер мен солардың диалектілері қолданыста болғанын айту жеткілікті шығар. Осы жайт әмбебаптықтан ҥміткер ADA тілінің шығуына себепкер болған. Компьютерлердің қуаты артқанмен, олардың бағалары тҧрақты тҥрде тӛмен тҥсіп жатқан заманда, программалаудың мықты теоретигі Эдсгер Дийкстра айтқандай, трансляторлар кӛптеген «ысқырықтар мен сылдырмақтармен» толықтырылып, жаңа мҥмкіндіктерге ие болып жатыр. Сол сылдырмақтар мен ысқырықтар программалаушылардың жап-жақсы ӛмірін одан да кӛріктендіре тҥспек. Ол қандай болмақ бҧл жағынан пікір айтушылар аспан мен жердей алшақтықпен айтысып келе жатыр. Программалау тілдері туралы ой ӛрбіткенде, қҧрылымдық программалау идеологиясы жайлы айтпауға болмайды, бҧл идеологияны алғаш ҧсынған да сол Дийкстра болатын. Осы қҧрылымдық программалау ҧғымы оқулығымыздың негізінде жатыр. Ал Паскаль тілінің конструкциясы Дийкстра ҧсынған, қазіргі кездегі кең қолданыста жҥрген барлық процедураға бағытталған қҧрылымдық тілдердің ядросы болып саналады. Жақсы ҧйымдастырылған қҧрылымдық тілдердің басты белгісі онда GOTO операторының, яғни шартсыз басқаруды беру операторының болмауы немесе оның сирек колданылуы болып есептеледі. Дийкстра программаларда нақты математикалық логикалық қҧрылымның жоқ екеніне кӛңіл бӛліп, зерделі мамандардың жиі қайталайтын пікіріне кӛбірек назар аудару қажеттілігін басып айтқан болатын. Оның идеяларын жҥзеге асыра отырып, IBM фирмасы «Нью-Йорк таймс» газетінің мәліметтер банкін жасау кезінде жҧмыс бағасының әжептеуір арзандағанын және оны орындау мерзімінің де біраз қысқарғанын анықтады. Бір қарағанға ӛте қарапайым кӛрінетін Дийкстраның осы идеясының ӛзі кӛптеген елдерде миллиардтаған долларды ҥнемдеуге кӛмектесті. Қазіргі кезде жоғарыдан тӛмен қарай жҥргізілетін қҧрылымдық бағыттағы жобалауды жҥзеге асыра алмайтын бірде-бір программалау тілі қолданысқа кіріп, ӛмірден ӛз орнын таба алмайды. Сонымен, жҥйелік программалау маманы Харлан Миллс айтқан: «Ғарыш кемелерінің ҧшуының ӛзі де қҧрылымдық программалауды пайдаланбай жҥзеге асқан деп ойламаймын», деген сӛзінде шындық бар. Pascal тілі де қҧрылымдық программалау тәсілдерін ҥйрететін оқыту қҧралы ғана болуға тиіс еді. Бірақ бірсыпыра себептерге байланысты ол бҧл аядан шығып, әлемдегі ең негізгі тілдердің біріне айналды. Қҧрылымдық программалау тілдері табиғи тілдің сӛздерін және грамматикасын кеңінен пайдалану жолымен дамыды, бірақ оның негізінің тҥп тамыры болатын программалаудың процедуралық стиліне тиіскен жоқ. Осы процедуралық стиль сӛзі компьютердің командаларды атқарушы рӛлінде болатынын және оған нәтиже алуға қажетті барлық әрекеттер (процедуралар) тізбегін толық әрі дәлме-дәл сипаттап беру керек екендігін білдіреді. Оған қоса, компьютердің фон-нейман архитектурасының ӛзі де оларды қуатты, бірақ ақылсыздау робот ретінде қарастыруды ҧсынады жылы шотланд ғалымы Р.Ковальский осындай мҥмкіндігі бар тіл 230

231 ретінде тҧжырымдамалар және олармен орындалатын операцияларды ӛңдей алатын математикалық логика тілін жетілдіріп пайдалануды ҧсынды. Бҧл идеяны Франция, Португалия, Ресей, т.б. елдердің ғалымдары жалпы тҥрде қарастырып, практикалық тҥрде жҥзеге асырмақшы болды. Осындай мақсатта жасалған программалау тілі PROLOG (французша PROgramming et LOGicque) деп аталды. Оны жасауға және дамытуға жаңа ғылыми бағыттың нақты тҥрдегі қорытындысы (прологы) ретінде пайда болған логикалық программалау ғылымы ҥлес қосып келеді. Логикалық программалау компьютер есепті адам сияқты жолмен шығаруы керек деген ойды негізге алады. Логикалық программалаумен қатар пайда болып, функцияның математикалық ҧғымдарына негізделген екінші бір сала функционалдық программалау деп аталады. Функционалдық программалаудың алғашқы тілі 1960 жылдардың басында шыққан LISP тілі болып табылады. LISP сӛзі ағылшынның LISt Processing деген сӛз тіркесінің қысқартылған нҧсқасы. Бҧл да кең таралған тілдердің бірі. Ол жасанды зерде мәселелерін шешу жолында, әсіресе АҚШ-та кӛп қолданылады. Қазіргі кезде компьютерлердің кӛбісіне арналған LISP тілінің бірнеше нҧсқалары бар. Бірақ бҧл тіл функционалдық программалаудың жалғыз ғана қҧралы емес. Оған ҧқсас тілдерге Miranda, Hope, FP тілдері жатады. Ӛткен ғасырдың 80-жылдары программалауда тағы да бір жаңа ағым пайда болды. Енді компьютерге бастапқы мәліметтер мен нәтиже арасында байланыс орнату ісі жҥктелді. Біз компьютерге ол жҧмыс істеуге тиіс объектілер сипаттамасын енгіземіз, ал компьютердің ӛзі сол объектілердің қалай байланысқанын анықтауы керек болды. Объектілер қасиеттерін сипаттаудың осы тҥрі объектіге бағытталған программалау деп аталды. Объектіге бағытталған программалау тілдеріне C++ және Smalltalk тілдері жатады. Бҧлардың бәрі бҥгінгі кҥн тҧрғысынан туындаған кӛзқарастар болатын. Ал тарихи тҧрғыдан объектіге бағытталған программалау компьютердің мҥмкіндіктерінің жетілдірілуі мен ол шығара алатын есептер аймағының кеңуі арқасында пайда болды. Алғашқы программалау тілдері тек бір санды ғана ӛңдей алатын еді. Ал сан жиымдары цикл арқылы ӛңделетін. Кейіннен машина бір оператор арқылы жҥздеген және мыңдаған сандарды қоса алатын, жиым ішінен максимумын табатын, оларды реттейтін, т.с.с. мҥмкіндіктерге ие болды Сандар жиымы, программалаушы тҧрғысынан қарағанда, әртҥрлі амалдар орындауға болатын бір ғана объект тҥрінде қарастырылатын кезге жеттік. Бірақ нақты ӛмірде біз тек сандық ақпаратпен ғана жҧмыс істемейміз. Мысалы, студентті тек оның жасы емес, аты, фамилиясы, тобы, ҥй адресі, т.б. сипаттайды. Әртҥрлі типтегі мәліметтерді біріктіріп, мәліметтер құрылымын алуға мҥмкіндік (қажеттілік) туды. Осындай әрбір қҧрылымды біртұтас күйде ӛңдеуге болатын болды. Осындай қҧрылымдар олармен орындауға болатын әрекеттермен бірге сипаттауға арналған жасанды тіл объектілері мен олардың қасиеттері 231

232 атауларынан тҧрады. Мҧндай қасиеттер компьютерге осы объектілерді қалай тҥрлендіруге болатындығы жайлы сигнал береді. Бҧл тілде программалау объектілерді сипаттау және бастапқы мәліметтер мен нәтижелерді осындай объектілерге қҧрылымдау ісіне келіп тіреледі. Қҧрылымдар мен объектілердің кҥрделілігін, практикалық тҧрғыдан алғанда, шектеусіз арттыру ісі (мысалы, қҧрылымдар объектісі болатын жаңа объект жасау ісі) ақпараттың ӛте ҥлкен кӛлемімен жҧмыс істеуге мҥмкіндік береді. Сол себепті компьютерлер де кҥннен-кҥнге кҥрделіленіп келе жатқан есептерді шығаруға пайдаланылып келеді. Бақылау сұрақтары 1. Программалауды оңайлататын жаңа тіл ойлап шығаруды алғаш рет кім ұсынды? 2. Фортран тілі қай жылы шықты және оның ерекшелігі қандай болды? Алгол, PL/1, Кобол тілдері ше? 3. Программалау тілдерін жасауды стандарттау қажеттілігі неге байланысты туындады? 4. Грейс Хоппердің программалау саласындағы еңбектері. 5. Программалау тілдерінің саны неге көп болып кетті? 6. Құрылымдық программалау тілдерінің ерекшелігі неде? 7. Программалау теоретигі Эдсгер Дийкстра қандай бағытты ұстану қажеттілігі туралы айтты? 8. Объектіге бағытталған программалау тілдері қандай болады? 232

233 C ТІЛІНДЕ ПРОГРАММАЛАУДАН ТЕСТ СҰРАҚТАРЫ 1. Идентификатор дегенiмiз не? 1) программадағы объектiнiң аты 2) динамикалық жады 3) жиыннан тҧратын массив 4) программаның берiлу жолы 5) компиляторға арналған сӛздер 2. Символдық типтегi шамаларға компилятор жадында қанша байт орын бӛлiнедi? 1) 1 2) 2 3) 10 4) 8 5) Жиым (массив) дегенiмiз не? 1) ҧяшықтарда орналасқан мәлiметтер 2) бір атаумен аталған бiр типтi мәндер тiзбегi 3) ӛлшемдi анықтайтын тип 4) динамикалық жадыны пайдаланатын кӛрсеткiш 5) сiлтеменi анықтайтын типтер жиынтығы 4. Қандай да бiр әрекеттер тізбегін орындайтын операциялар мен сипаттамалардың айқындалған тiзбегiн... деп атайды. 1) процедура 2) рекурсия 3) функция 4) дҧрыс жауап жоқ 5) 1,2 5. Функцияның сипаттамасы басындағы параметрлер қалай аталады? 1) формальды 2) фактілі 3) аргументті 4) 2,3 жауап дҧрыс 5) дҧрыс жауап жоқ 6. С тілінде кез келген программаның орындалуы қай функциядан басталады? 1) random 2) main() 3) randomize() 4) clrscr() 5) Әр программада әртҥрлi 7. Ӛзiн-ӛзi шақыратын функцияны не деп атаймыз? 1) процедура 2) функция 3) рекурсия 4) 1,2 5) дҧрыс жауап жоқ 8. Кiтапханалық функциялар қайда орналасқан? 1) кiтапханалық файлдарда 2) С iшiнде 3) компьютерде 4) дҧрыс жауап жоқ 5) интернетте 9. С әліпбиi: 233

234 1) араб цифрi: 0-9 2) арнайы белгiлер 3) тҥйiндi сӛздер 4) операциялар таңбалары 5) барлығы дұрыс 10. Латын әрiптерiнен, цифрлардан тұратын тек әріптерден басталуы тиіс таңбалар тiзбегiн... деп атайды. 1) тҧрақты 2) айнымалы 3) идентификатор 4) дҧрысы жоқ 5) функция 11. а[3] = {1,3,5 жиымы берiлсiн делiк. Осы жиымды экранға шығаратын программаны кӛрсетіңіз... 1) int i, 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++) printf( %i,a[i+1]); 5) int a[3], i; for(i=0;i<3;i++) printf( %c,a[i]); 12. С тілінде тұрақтыларды сипаттау үшiн қандай түйiндi сӛз қолданылады? 1) int 2) var 3) const 4) procedure 5) дҧрысы жоқ 13. return (ӛрнек) операциясының қызметi: 1) функцияны шақырған операторға ӛрнектiң мәнiн қайтарады 2) С тілінде ондай оператор қолданылмайды 3) функция мән қайтармаған кезде қолданылады 4) программаға әсемдiк бередi 5) қызметi анықталмаған, заң бойынша программа соңында тҧруы керек 14. rand() функциясының тақырыптық файлда орналасқан прототипi қандай? 1) <math> 2) <string> 3) <stdlib> 4) <cmath> 5) rand 15. Функцияның iшiнде ғана белгiлi, соның iшiнде анықталатын айнымалы қалай аталады 234

235 1. ауқымды (глобальді) айнымалы 2. жергiлiктi айнымалы 3. белгiсiз айнымалы 4. белгiлi айнымалы 5. рекурсивтi айнымалы 16. Егер float пен double типтері араласса, нәтижесі... болады; 1. float; 2. long; 3. double; 4. int; 5. short; 17. Кез келген блоктан немесе функциядан тыс хабарланған айнымалы ауқымды (глобальді) айнымалы 2. жергiлiктi айнымалы 3. программалық айнымалы 4. базалық айнымалы 5. унарлық айнымалы компиляторға функция арқылы берiлетiн аргументтердiң санын, типiн, ретiн анықтауға кӛмектеседi. 1. функцияның идентификаторы 2. функцияның прототипi 3. файлдың прототипi 4. жергiлiктi прототип 5. аумақтық идентификатор 19. Функцияның тақырыбында void түйiндi сӛзi не үшiн қолданылады? 1. функция мән қайтаратынын кӛрсету ҥшiн 2. функцияның тақырыбында void тҥйiндi сӛзi қолданылмайды 3. дҧрыс жауабы жоқ 4. функцияның ешқандай мән қайтармайтынын кӛрсету үшiн 5. функция мән сақтайтынын кӛрсету ҥшiн 20. Қандай айнымалылар ӛзi сипатталған функциядан шыққаннан кейiн де ӛз мәнiн сақтайды? 1. static секiлдi хабарланған жергiлiктi айнымалылар 2. аумақты айнымалылар 3. extern секiлдi хабарланған жергiлiктi айнымалылар 4. static секiлдi хабарланған ауқымды айнымалылар 5. жергiлiктi айнымалылар 21. Блок дегенiмiз не? 1. функцияның екiншi аты 2. айнымалыларды сипаттауы бар құрама оператор 3. кездейсоқ оператор 4. қатенi анықтайтын оператор 5. дҧрыс жауап жоқ 22. Айнымалы дегенiмiз не? 1. белгілі бір атауы бар жады аймағы, онда анықталған типтiң мәлiметтерi сақталады 2. анықталмаған тип мәлiметтерiнiң жадыда сақталуы 3. дҧрыс жауабы жоқ 4. жады кластарының бiрнеше бӛлiктерге бӛлiнуi 5. операндадан, операция белгiсiнен, жақшадан тҧратын, анықталған типтiң мағынасын бiлдiруi 23. Шартты операция форматын кӛрсетiңiз: 1. операнд_1? операнд_2 : операнд_3 235

236 2. операнд_1 := операнд_2 3. 1, 2 4. if (ӛрнек)оператор_1:[else оператор_2;] 5. if (тҧрақты ӛрнек)1:[оператор тiзбегi] 24. Жады кластарын беру үшiн қандай спецификатор қолданылады? 1. auto 2. extern 3. static 4. register 5. барлығы дұрыс 25. С тілінде қайталау операторының қандай түрлерi бар? 1. while (ӛрнек) оператор; 2. do... while (ӛрнек) 3. дҧрыс жауап жоқ 4. 1, 2, 5 5. for(инициализациялау; ӛрнек; модификация) оператор; 26. Тармақталу операторы дегенiмiз не? 1. Алгоритмнiң белгiлi бiр шарттың орындалуына немесе орындалмауына байланысты тармақталып, бiрнеше жолдарға бӛлiнуi 2. дҧрыс жауап жоқ 3. бiр ғана шарттың орындалуын тексеретін оператор 4. шарттардың орындалмауын тексеретін оператор 5. операторлардың тармақталуын тексеретін оператор 27. #include директивасын қолданған кезде бұрыштық ("<",">") жақшаның орнына тырнақшаларды қолдануға болады ма, болса оның мәнi неде? 1. болмайды 2. болады, бiрақ одан ештеңе ӛзгермейдi 3. болады, бҧл уақытта файлды iздеу әрекетi бастапқы файлы бар каталогта жҥргiзiледi, сосын стандартты каталогтан iздейдi 4. болады, онда файлды стандартты каталогтан iздейдi 5. болады, бҧл жағдайда файлды стандартты каталогтан iздейдi, сосын бастапқы файлы бар каталогты қарастырады 28. Бастапқы ".h-файлдың" құрамына не кіреді? 1. типтiң, тҧрақтылардың, кiргiзiлген функциялардың, шаблондардың, тiзiмдердiң анықталуы 2. функцияның, мәлiметтiң, шаблонның, аттың сипатталуы 3. атау кеңiстiгi 4. процедуралардың директивалары 5. кӛрсетiлген жауаптың бәрi дұрыс 29. #define директивасы не үшiн қолданылады? 1. тұрақтының мәнiн беру үшiн 2. макростар ҥшiн 3. шартты компиляторды басқаруға арналған символ ҥшiн 4. символдық константа ҥшiн 5. берiлген жауаптың бәрi дҧрыс 30. Құрамында функциялары немесе анықталған мәлiметтерi бар бастапқы (тақырыптық) файлдардың кеңейтiлуi қандай және ол файлдар қалай аталады? 1. ".htp", ".htp-файлдары" 2. ".h", ".h-файлдары" 3. ".c" ".c-файлдары" 4. ".f" ".f- файлдары" 5. ".exe", ".exe- файлдары" 236

237 31. Сӛз тіркесінің (жолдың) ұзындығы қай функцияның кӛмегiмен анықталады? 1. strlen 2. src 3. return 4. template 5. main() нақты саннан тұратын массивтi сипаттау қай нұсқада дұрыс берiлген? 1. int a[10]; 2. float a(10); 3. float a[10]; 4. float a[1..10]; 5. int a[1..10]; 33. Операндтардан, операция таңбаларынан, жақшалардан тұратын... мәндерiн есептеу үшiн қолданылады. Кӛп нүктенiң орнындағы сӛздi табыңдар. 1. ӛрнектер 2. айнымалылар 3. тҧрақтылар 4. логикалық типтер 5. жады класы 34. Айнымалы дегенiмiз не? 1. программа орындалуы барысында әртүрлі мәндер қабылдайтын шама 2. жады класының бiрнеше аймақтарға бӛлiнуi 3. программалар тiзбегi 4. алгоритмнiң белгiлi бiр шартының орындалуы 5. дҧрыс жауабы жоқ 35. Таңдау операторы (нұсқауы) қай сӛз арқылы берiледi? 1) switch 2) return 3) for 4) if 5) class 36. Егер long пен float типтері араласса, нәтижесі... болады. 1) char; 2) short; 3) int ; 4) float; 5) double. 37. Бӛлгендегi қалдық табу операциясы қалай берiледi? 1. % 2. / 3. * 4. << 5. & 38. Блок iшiнде анықталған айнымалы қалай аталады? 1. ауқымды 2. тҧрақты 3. жергiлiктi 4. тҧрақсыз 5. сiлтеуiш 39. Блоктың iшiнде сипатталған идентификатор қалай аталады? 1. глобальды кӛрiнiске ие 2. локальдi идентификатор 237

238 3. оператордың белгiсi 4. функцияның прототипiнде кӛрсетiлген параметр 5. кӛрсетiлген типтiң айнымалысы қҧрылғаннан бастап, ол жойылғанша ӛмiр сҥредi 40. а атты бүтiн айнымалының дұрыс сипатталуы: 1. int a; 2. a int; 3. integer a; 4. float a; 5. char a. 41. Блоктан тыс анықталған айнымалы қалай аталады? 1. ауқымды (глобальды) 2. жергiлiктi 3. символды 4. тҧрақты 5. жергiлiксiз 42. Қай нұсқада sizeof жазылуы дұрыс? 1. sizeof тип 2. sizeof [тип] 3. sizeof (тип) 4. sizeof: тип 5. sizeof_ тип 43. Логикалық терiстеу қай нұсқада дұрыс берiлген? ~ 3. = 4.! extern спецификаторы ненi бiлдiредi? 1. айнымалы программа iшiнде анықталғанын 2. айнымалы программадан тыс анықталғанын 3. айнымалы анықталмағанын 4. айнымалы автоматты тҥрде анықталғанын 5. дҧрыс жауабы жоқ бүтiн саннан тұратын а массивінің дұрыс сипатталуы: 1. float a[12]; 2. int a[12]; 3. float a[10]; 4. char a[12]; 5. int a(12); 46. Функция тұлғасы қандай таңбалармен қоршалып тұрады? 1. () 2. / / 3. { 4. * * 5. " " сандар диапазоны қай типке жатады? 1. double 2. unsigned char 3. bool 4. float 5. signed char 48. Goto нұсқауының дұрыс жазылуы: 238

239 1. Goto Goto m65 3. Goto белгі 4. Goto?65 5. Goto printf 49. Келесi операциялардың қайсысы тренарлы (үш операндты)? 1.! 2. & 3. <= 4.!= 5.?: 50. С тiлiнде комментарийдi қандай таңбалар ішінде жазады? 1. // // 2. (* *) 3. /* */ 4. < > 5. { 51. Программаның барлық объектiлерi үшiн ортақ мәлiметтердi сақтау үшiн қандай класс қолданылады? 1. статикалық 2. тҧрақты 3. рекурсивтi 4. айнымалы 5. ауқымды (глобальді) 52. Егер short пен int типтері араласса, нәтижесі... болады 1. char; 2. short; 3. int; 4. float; 5. double. 53. Нұсқауыштарды сипаттау форматы қай нұсқада дұрыс кӛрсетілген? 1. аты *типi 2. *аты типi 3. типi *аты 4. & аты типi 5. тип_аты 54. float a[10]; ненi бiлдiредi? 1. 1-ден 10-ға дейiнгi бҥтін сандар тiзбегiн сипаттау 2. 1-ден 10-ға дейiнгi нақты сандар тiзбегiн сипаттау нақты саннан тұратын а массивiн сипаттау мәнді қабылдай алатын а жиымын сипаттау 5. 10х10 ӛлшемдi а матрицасын сипаттау 55. switch операциясынан шығу үшiн қай нұсқау қолданылады? 1. do 2. break 3. case 4. return 5. default 56. Типтерді тҥрлендіру мысалы. Программа орындалғанда экранға не шығады: main() { char ch; int i; float fl; 239

240 fl=i=ch='a'; printf(" %c %d %6.2f\n",ch,i,fl); 1. A ; 2. B ; 3. B ; 4. B ; 5. A А *= операциясы ненi бiлдiредi? 1. кӛбейту 2. меншiктеу 3. әр элементiн кӛбейту 4. кӛбейтіп барып меншiктеу 5. комментарий 58. Лексем дегенiмiз не? 1. сӛз тiркестерi 2. сӛйлемдер 3. тiлдiң ӛзiндiк мағынасы бар ең кiшi бiрлiгi 4. програмамның тҧлғасы 5. беттi ауыстыру 59. " int n;" жазуы ненi бiлдiредi? 1. n класы берiлгенiн 2. n спецификаторы берілгенін 3. n айнымалысы нақты мән қабылдайды 4. n айнымалысы бүтін мән қабылдайды 5. дҧрыс жауабы жоқ 60. string.h бұл мынадай функциялардың кітапханасы 1. сӛз тіркесі функциялары 2. стандартты функциялар 3. енгізу/шығару базалық кітапханасы 4. графикалық функциялар 5. буфермен жҧмыс істеу функциялары 61. graphics.h - бұл мынадай функциялардың кітапханасы 1. сӛз тіркесі функцияларының 2. стандартты функциялардың 3. енгізу/шығару базалық кітапханасының 4. графикалық функциялардың 5. буфермен жҧмыс істеу функцияларының 62. С тілінде айнымалылар программаның мынадай аймағында сипатталады 1. басында 2. аяғында 3. ортасында 4. кез келген жерінде 5. еш жерінде сипатталмайды 63. С тілінде бір таңбамен белгіленген бас және кіші әріптер мәні әртүрлі болып саналады 2. бірдей болып саналады 3. компиляторға байланысты ӛзгереді 4. тілдің нҧсқасына байланысты ӛзгереді 5. барлығы да дҧрыс 64. Айнымалыларға, тұрақтыларға, мәліметтер типіне және функцияларға қойылған атау былай аталады идентификаторлар 240

241 2. тҥйінді сӛздер 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 = #define PI == #DEFINE = #define PI = ; 5. #define PI sizeof() операциясы мынаны анықтайды: 1. литерлік ӛрнекті 2. константалық тҧрақты ӛрнекті 3. операнд типіне бӛлініп берілетін байттар санын 4. операнд орналасатын байттар санын 5. логикалық ӛрнекті 69. Программа нәтижесі нешеге тең болады? void main() {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); Программа нәтижесі нешеге тең болады? void main() {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);

242 int a[5] массивінде қандай элемент жоқ? 1. a[1] 2. a[2] 3. a[3] 4. a[4] 5. a[5] 72. Тӛмендегі қай функция файлға мәлімет жазады? 1. fread() 2. fscanf() 3. gets() 4. fprintf() 5. seek() 73. Тӛмендегі қай функция файлдан мәлімет оқиды? 1. fprintf() 2. fscanf() 3. fread() 4. fwrite() 5. seek() 74. Файлды одан мәлімет оқу үшін ашу (режимін кӛрсету керек) 1. r 2. w 3. a 4. r+ 5. w+ 75. Мәлімет жазатын файл ашу қажет, егер файл бұрыннан бар болса, ондағы мәлімет жойылады (режимін кӛрсету керек). 1. r 2. w 3. a 4. r+ 5. w+ 76. Мәлімет қосу: файл соңына мәлімет жазу үшін оны ашу қажет (режимін кӛрсету керек). 1. r 2. w 3. a 4. r+ 5. w+ 77. Файлдағы мәліметті оқып, оған мәлімет жазу: оқу және жазу (режимін кӛрсету керек). 1. r 2. w 3. a 4. r+ 5.w+ 78. Файлды жаңарту үшін оны ашу, егер файл бұрыннан болса, оның мәліметі жойылады (режимін кӛрсету керек) 1. r 2. w 242

243 3. a 4. r+ 5. w+ 79. Мәлімет қосу: файлды ашып, оны жаңартады, мәлімет бұрнғының соңына жазылады (режимін кӛрсету керек). 1. r 2. w 3. a 4. r+ 5. a+ 80. Тӛмендегі функция файлдан сӛз тіркесін оқиды 1. fread() 2. fgets() 3. fgetc() 4. fputs() 5. fputc() 81. Тӛмендегі функция файлға сӛз тіркесін жазады 1. fwrite() 2. fgets() 3. fgetc() 4. fputs() 5. fputc() 82. printf() функциясының сӛз тіркесін шығару кезіндегі форматы қандай? 1. %d 2. %c 3. %s 4. %f 5. %x 83. printf() функциясының нақты сан шығару кезіндегі форматы қандай? 1.%d 2.%c 3.%s 4.%f 5.%x 84. printf() функциясының таңбасыз ондық бүтін сан шығару кезіндегі форматы: 1. %d 2. %u 3. %o 4. %x 5. %f 85. printf() функциясының таңбасыз сегіздік бүтін сан шығару кезіндегі форматы қандай? 1. %d 2. %o 3. %x 4. %c 5. %f 86. printf() функциясының таңбасыз он алтылық бүтін сан шығару кезіндегі форматы қандай? 1. %d 2. %o 3. %x 243

244 4. %c 5. %f 87. printf() функциясының экспоненциал нақты сан шығару кезіндегі форматы қандай? 1. %d 2. %o 3. %е 4. %c 5. %f 88. Егер char мен short типтері араласса, нәтижесі қандай болады? 1. char; 2. short ; 3. float; 4. long ; 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. main() функциясы алдында 2. main() функциясы артында 3. main() функциясы ішінде (тҧлғасында) 4. жеке файлда 5. керекті функция шақырылатын блокта 93. < және > символдарымен қоршалып тұратын тақырып файл аттары компиляторға бұл файл қандай каталогта орналасқанын білдіреді? 1. LIB 2. BIN 3. INCLUDE 4. BGI 5. TVISION 94. және символдарымен қоршалып тұратын тақырып файл аттары компиляторға бұл файл қандай каталогта орналасқанын білдіреді? 1. LIB 2. BIN 3. INCLUDE 4. жҧмыс істеп тҧрған каталогта 5.TVISION 244

245 95. С программасы мәтіндері қандай типті файлдарда сақталады? 1..txt,.doc 2..cpp,.c 3..pas,.bas 4..h,.htm 5..html,.xtml 96. Программалардың объектілік кодтары қандай типті файлдарда сақталады? 1..exe 2..obj 3..cpp,.с 4..com 5..txt 97. Программалардың атқарылатын екілік кодтары қандай типті файлдарда сақталады? 1..exe 2..com 3..obj 4..cpp,.c 5..txt 98. Түйінді сӛздер (ключевые слова) дегеніміз не? 1. қарапайым идентификаторлар 2. арнайы қорға енгізілген сӛздер 3. операциялар 4. функциялар 5. макрокомандалар 99. С тiлiнің int типті бүтiн саны 16 разрядты процессорда қандай орын алады? 1. 2 байт; 2. 4 байт; 3. 8 байт; 4. 6 байт; байт; 100. С тiлiнің int типті бүтiн саны 32 разрядты процессорда қандай орын алады? 1. 2 байт; 2. 4 байт; 3. 8 байт; 4. 6 байт; байт; 245

246 ҚОЛДАНЫЛҒАН ӘДЕБИЕТТЕР 1. Павловская Т.А. С/С++. Программирование на языке высокого уровня. -СПб.: Питер, с. 2. Павловская Т.А. Щупак Ю.А. С/С++. Структурное и объектно-ориентированное программирование: Практикум.-СПб.: Питер, с. 3. Сэмюел П. Харбисон, Гай Л. Стил. Язык программирования Си. Пер. с англ. М.: ООО Бином-Пресс, с. 4. Липпман С., Лажойе Ж. Язык программирования С++. Вводный курс, 3-е изд. Пер с англ. СПб. М.: Невский диалект ДМК Пресс, с. 5. Шиманович Е.Л.С/С++ в примерах и задачах.-мн.: Новое знание, с. 6. Керниган Б., Ритчи Д., Фьюэр А. Язык программирования Си. -М. : Финансы и статистика, с. 7. Страуструп Б. Язык программирования С++, спец. изд. Пер. с англ. М.: БИНОМ; -СПб.: Невский диалект БИНОМ, с. 8. Вирт Н. Алгоритмы и структуры данных: Пер. с англ. 2-е изд., испр. -СПб.: Невский диалект, с. 9. Абрамов С.А., Гнездилова Г.Г., Капустина Е.И., Селюн М.И. Задачи по программированию. -М.: Наука, Гл. ред. физ.-мат. лит с. 10. Культин Н.Б. С/С++ в задачах и примерах. 2-е изд., перераб. и доп. -СПб.: БХВ-Петербург, с. 11. Березин Б.И., Березин С.Б. Начальный курс С и С++. -М: ДИАЛОГ-МИФИ, с. 12. Подбельский В.В., Фомин С.С. Программирование на языке Си. -М.: ФиС, с. 13. Подбельский В. В. Язык С++. -M.: ФиС, c. 14. Костюкова Н.И., Калинина Н.А. Язык Си и особенности работы с ним. М.: «Интернет-университет информационных технологий - ИНТУИТ.ру», с. // Анисимов А.Е., Пупышев В.В. Сборник заданий по основаниям программирования // Бӛрібаев Б., Дҥйсебекова К. Си тілінде программалау: Оқу-әдістемелік қҧрал. Алматы: Қазақ университеті, б. 17. Бӛрібаев Б. Программалау тілдеріне кіріспе: Жоғары оқу орындарына арналған оқулық. Алматы: АЭСА, б. 18. Қҧралбаев З.Қ. Алгоритмдеу және программалау тілдері. Алматы: «TSTcompany» баспасы, б. 19. Бӛрібаев Б. Компьютердің арифметикалық негіздері:оқу қҧралы. -Алматы: Қазақ университеті, б. 20. Балапанов Е., Бӛрібаев Б., Бекбаев А.,т.б. Информатика терминдерінің қазақша-ағылшыншы-орысша, орысша-қазақша-ағылшынша, ағылшынша-орысша-қазақша сӛздігі. -Алматы: Сӛздік-Словарь, б. 246

247 247 А ҚОСЫМШАСЫ Стандартты математикалық функциялар Math.h тақырып файлында стандартты математикалық функциялардың анықтаулары берілген, оларды программа қҧру кезінде дҧрыс жаза білу керек (Қ1.1-кестені қ.). Қ1.1-кесте Функция прототипі Қайтаратын мәні double acos(double x) arccos x double asin(double x) arcsin x double atan(double x) arctg x double atan2(double x,double y) arctg (y/x) double ceil(double x) "жоғары" қарай дӛңгелектеу double cos(double x) cos x double cosh(double x) ch x double exp(double x) e x double fabs(double x) x double floor(double x) "тӛмен" қарай дӛңгелектеу double log(double x) ln x double log10(double x) lg x max(a,b) максимум (a,b) типі ҥлкен аргумент типімен бірдей болады min(a,b) минимум (a,b) типі кіші аргумент типімен бірдей болады double pow(double x, double y) x y double pow10(int p) 10 p double sin(double x) sin x double sinh(double x) sh x double sqrt(double x) x-тің квадрат тҥбірі double tan(double x) tg x double tanh(double x) th x double hypot((double x, double y) x 2 +y 2 квадрат тҥбірі double poly(double x, int n, double *a) полином мәні double ldexp(double x, int n) x*2 n Бҧл кестедегі max және min функцияларының прототиптері, негізінде, функция емес, ӛздеріне сәйкес макроанықтаулар тҥрінде stdlib.h тақырып файлында берілген. Аргументтері типі де, ӛз типі де double болып келген функциялардың long double типіндегі аналогтары бар. Олардың аттары жоғарғы кестеде кӛрсетілген функция аттарынан l әрпін қосу арқылы алынады, мысалы, (fabs, fabsl), (acos, acosl), т.с.с. Ceil(x) және floor(x) функцияларының айырмашылығы алғашқысы берілген нақты санды жоғарғы жақтағы бҥтін санға, ал екіншісі тӛменгі жақтағы бҥтін санға қарай дӛңгелектейді. Екі функция да double форматындағы бҥтін санды қайтаратынын есте сақтаған жӛн. Мысалы: ceil(0.1) =1.0 floor(0.1) = 0.0 ceil(0.5) =1.0 floor(0.5) = 0.0 ceil(0.9) =1.0 floor(0.9) = 0.0 ceil(-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(x+0.5) функциясын пайдаланады. Бірақ ол кейде математикадағы ҧғымнан алшақ кетіп жатады, мысалы, floor( )=0.

248 Әрине, C/C++ тілдерінде Паскаль тіліндегідей round функциясының баламасы жоқ, дегенмен ондай функцияны қолдан жасап алуға да болады: int round(double x) { int res; res=(x<0)? x-0.5 : x+0.5; return res; Егер нақты санның бірнеше бӛлшек таңбаларын (k) алып дӛңгелектеу керек болса, онда ол санды 10 k -ға кӛбейтіп алып, бҥтін санға дейін дӛңгелектеп, қайтадан 10 k -ға бӛлу керек. Math.h тақырып файлында стандартты константалардың да анықтаулары берілген, оларды да программа қҧру кезінде дҧрыс жазып пайдалана білу керек (Қ1.2-кестені қ.). Қ1.2-кесте Константа Мәні Константа Мәні M_PI M_E e= M_PI_2 /2 M_LOG2E log 2 e M_PI_4 /4 M_LOG10E log e M_2_PI 2/ M_LN2 ln 2 M_1_SQRTPI 1/ M_LN10 ln 10 M_2_SQRTPI 2/ M_SQRT2 M_SQRT_2 2 = /2 248

249 Ә ҚОСЫМШАСЫ Символдық мәліметтер және оларды компьютерде бейнелеу Жеке берілген символдық мәліметтер (константалар мен айнымалылар) компьютер жадында сол символдардың ASCII-кодтарына сәйкес бҥтін сандық мәндер жазылған бір-бір байт орын алады. Соларды экранға шығару ҥшін келесі программаны орындауға болады: #include <stdio.h> #include <conio.h> void main() { int i,j; gotoxy(37,1); printf("ascii"); for(i=32; i<=52; i++) { gotoxy(1,i-29); for(j=i; j<=255; j+=21) printf("%c %3d ",j,j); getch(); Бҧл программа жҧмысының нәтижесі: Қ1.2-сурет. Жеке символдық мәліметтердің ASCII-кодтық кестесі (code page 866) Кестедегі символдар "босорын" таңбасы кодынан 32-ден (0x20) басталады, оған дейінгі символдар басқару кодтарына сәйкес келеді. Орыс әліпбиінің бас әріптері 128 (0x80) кодынан басталады ('Ё' әрпі басқа орында тҧр), ал кіші әріптері 160-тан 175-ке (а-дан п-ға) дейін, сонан соң 224-тен 239-ға (р-ден я-ға) дейін орналасқан. Олардың арасында кестелер салу кезінде қолданылатын графикалық символдар орналасқан. Қазақ әріптерін пайдалану ҥшін Unicode кестесіне кӛшу керек, сондықтан С/С++ тілдерінде экранға қазақ әріптері шығарылмайды. Бірбайттық символдық константалардың мәндері жалқы тырнақшаға ( апострофқа) алынып жазылады да, ҥш тҥрлі тәсілмен беріледі. Олардың алғашқысы экранда бейнеленетін ASCII-код кестесінің символдарына (Қ1.2-суретті қ.) қатысты айтылады, бҧлар апострофқа алынып жазылады: 'F', '%', '$', 'ы', '5', '+', '"', 'q', 'Я', ' ' 249

Тақырыбы: Кері функция. Функцияның нүктедегі шегі. Шектің негізгі қасиеттері

Тақырыбы: Кері функция. Функцияның нүктедегі шегі. Шектің негізгі қасиеттері Лекция 9 Тақырыбы: Кері функция. Функцияның нүктедегі шегі. Шектің негізгі қасиеттері ЛЕКЦИЯ ЖОСПАРЫ: 1. Кері функция анықтамасы. Функцияның нүктедегі шегі. Шектің негізгі қасиеттері 1. КЕРІ ФУНКЦИЯ Анықтама

Διαβάστε περισσότερα

1 Тақырып. Информатиканың фундаментальды негіздері 1,2 дәріс

1 Тақырып. Информатиканың фундаментальды негіздері 1,2 дәріс 1 Тақырып. Информатиканың фундаментальды негіздері 1,2 дәріс.информатика пәні. Ғылымдар жүйесіндегі информатиканың алатын орны. Ақпарат ұғымы. Материя-энергия-ақпарат үштігі шындықтың көрінуінің жалпы

Διαβάστε περισσότερα

АЛГОРИТМДЕУ ЖӘНЕ ПРОГРАММАЛАУ НЕГІЗДЕРІі

АЛГОРИТМДЕУ ЖӘНЕ ПРОГРАММАЛАУ НЕГІЗДЕРІі КӘСІПТІК БІЛІМ СЕМАКИН И.Г., ШЕСТАКОВ А.П. АЛГОРИТМДЕУ ЖӘНЕ ПРОГРАММАЛАУ НЕГІЗДЕРІі ОҚУЛЫҚ «Білім беруді дамытудың федералдық институты» Федералды мемлекеттік автономды мекемесі «Компьютерлік жүйелер мен

Διαβάστε περισσότερα

Математика, Физика және Информатика институты. 5B Ақпараттық жүйелер мамандығы

Математика, Физика және Информатика институты. 5B Ақпараттық жүйелер мамандығы Математика, Физика және Информатика институты 5B070300-Ақпараттық жүйелер мамандығы Академиялық дәреже: 5B070300-Ақпараттық жүйелер мамандығы бойынша білім бакалавры 1-курс Курстың атауы Курстың қысқаша

Διαβάστε περισσότερα

АҚПАРАТТЫҚ ТЕХНОЛОГИЯЛАР

АҚПАРАТТЫҚ ТЕХНОЛОГИЯЛАР КƏСІБИ БІЛІМ БЕРУ Г.С. ГОХБЕРГ, А.В. ЗАФИЕВСКИЙ, А.А. КОРОТКИН АҚПАРАТТЫҚ ТЕХНОЛОГИЯЛАР Оқулық «Білім беруді дамыту федералдық институты» жанындағы федералдық мемлекеттік мекемесі тарапынан орта кәсіптік

Διαβάστε περισσότερα

5 ДИФФЕРЕНЦИАЛДЫҚ ЖӘНЕ ИНТЕГРАЛДЫҚ ЕСЕПТЕУЛЕРДІҢ САНДЫҚ ӘДІСТЕРІ. 5.1 Интегралдарды жуықтап есептеу

5 ДИФФЕРЕНЦИАЛДЫҚ ЖӘНЕ ИНТЕГРАЛДЫҚ ЕСЕПТЕУЛЕРДІҢ САНДЫҚ ӘДІСТЕРІ. 5.1 Интегралдарды жуықтап есептеу 5 ДИФФЕРЕНЦИАЛДЫҚ ЖӘНЕ ИНТЕГРАЛДЫҚ ЕСЕПТЕУЛЕРДІҢ САНДЫҚ ӘДІСТЕРІ 5 Интегралдарды жуықтап есептеу [] аралығында анықталған интегралды қарастырайық: J d Егер аралығында үзіліссіз функция болса онда интеграл

Διαβάστε περισσότερα

АЛГОРИТМДЕУ ЖƏНЕ ПРОГРАММАЛАУ ТІЛДЕРІ

АЛГОРИТМДЕУ ЖƏНЕ ПРОГРАММАЛАУ ТІЛДЕРІ ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖƏНЕ ҒЫЛЫМ МИНИСТРЛІГІ Б.Б.Бөрібаев, А.М.Махметова АЛГОРИТМДЕУ ЖƏНЕ ПРОГРАММАЛАУ ТІЛДЕРІ Оқулық Қазақстан Республикасы Білім жəне ғылым министрлігі бекіткен Алматы, 2011 1

Διαβάστε περισσότερα

АЛМАТЫ ЭКОНОМИКА ЖӘНЕ СТАТИСТИКА АКАДЕМИЯСЫ

АЛМАТЫ ЭКОНОМИКА ЖӘНЕ СТАТИСТИКА АКАДЕМИЯСЫ АЛМАТЫ ЭКОНОМИКА ЖӘНЕ СТАТИСТИКА АКАДЕМИЯСЫ Академияның оқу-әдістемелік кеңесінің мәжілісінде «7» тамыз 04 ж хаттамада мақұлданған Академияның ОӘК кеңесінің төрағасы, оқу және тәрбие ісі жөніндегі проректоры,

Διαβάστε περισσότερα

АЛМАТЫ ЭКОНОМИКА ЖӘНЕ СТАТИСТИКА АКАДЕМИЯСЫ

АЛМАТЫ ЭКОНОМИКА ЖӘНЕ СТАТИСТИКА АКАДЕМИЯСЫ АЛМАТЫ ЭКОНОМИКА ЖӘНЕ СТАТИСТИКА АКАДЕМИЯСЫ Академияның оқу-әдістемелік кеңесінің мәжілісінде бекітілген 1 хаттама «7» тамыз 014 ж. ОӘК төрағасы, оқу және тәрбие ісі жөніндегі проректор, п.ғ.к., профессор

Διαβάστε περισσότερα

2 СЫЗЫҚТЫҚ АЛГЕБРАЛЫҚ ТЕҢДЕУЛЕР ЖҮЙЕСІН ШЕШУ ӘДІСТЕРІ

2 СЫЗЫҚТЫҚ АЛГЕБРАЛЫҚ ТЕҢДЕУЛЕР ЖҮЙЕСІН ШЕШУ ӘДІСТЕРІ СЫЗЫҚТЫҚ АЛГЕБРАЛЫҚ ТЕҢДЕУЛЕР ЖҮЙЕСІН ШЕШУ ӘДІСТЕРІ Сызықты лгебрлық теңдеулер жүйенің шешімін сндық әдісте тур (дәл) және итерциялық әдістер деп бөледі ТУРА әдісте жүйенің шешімі рифметиклық млдрдың қырлы

Διαβάστε περισσότερα

БАҒДАРЛАМАЛАУ ЖƏНЕ ДЕРЕКҚОР НЕГІЗДЕРІ

БАҒДАРЛАМАЛАУ ЖƏНЕ ДЕРЕКҚОР НЕГІЗДЕРІ КƏСІБИ БІЛІМ БЕРУ И.Г. СЕМАКИН БАҒДАРЛАМАЛАУ ЖƏНЕ ДЕРЕКҚОР НЕГІЗДЕРІ ОҚУЛЫҚ «Білім беруді дамытудың Федералды институты» Федералды мемлекеттік автономды мекемесімен «Компьютерлік желілер» мамандығы бойынша

Διαβάστε περισσότερα

Аннотация. Annotation

Аннотация. Annotation 8 9 10 Аңдатпа 11 Осы дипломдық жобада «Н. В. Гоголь атындағы орта мектебінің ақпараттық жүйесін жобалау және құру» Н. В. Гоголь атындағы орта мектебінің білім беру жүйесі қарастырылады. Бұл жүйеде білім

Διαβάστε περισσότερα

АЙМАҚТЫҚ ӘЛЕУМЕТТІК ИННОВАЦИЯЛЫҚ УНИВЕРСИТЕТІ. 5В Математика мамандығы бойынша МОДУЛЬДІК БІЛІМ БЕРУ БАҒДАРЛАМАСЫНЫҢ ЭЛЕКТИВТІ ПӘНДЕР КАТАЛОГЫ

АЙМАҚТЫҚ ӘЛЕУМЕТТІК ИННОВАЦИЯЛЫҚ УНИВЕРСИТЕТІ. 5В Математика мамандығы бойынша МОДУЛЬДІК БІЛІМ БЕРУ БАҒДАРЛАМАСЫНЫҢ ЭЛЕКТИВТІ ПӘНДЕР КАТАЛОГЫ АЙМАҚТЫҚ ӘЛЕУМЕТТІК ИННОВАЦИЯЛЫҚ УНИВЕРСИТЕТІ БЕКІТЕМІН Оқу-әдістемелік қашықтықтан оқыту істері жөніндегі проректор, п.ғ.к, А.З.Тұрсынбаев 2016 ж. 5В010900 мамандығы бойынша МОДУЛЬДІК БІЛІМ БЕРУ БАҒДАРЛАМАСЫНЫҢ

Διαβάστε περισσότερα

ДӘРІСТЕР КЕШЕНІ Дәріс 1-2. Тақырыбы: Алгоритм және оның қасиеттері. Алгоритм терминінің тарихы. Алгоритм түрлері

ДӘРІСТЕР КЕШЕНІ Дәріс 1-2. Тақырыбы: Алгоритм және оның қасиеттері. Алгоритм терминінің тарихы. Алгоритм түрлері ДӘРІСТЕР КЕШЕНІ Дәріс -2. Тақырыбы: Алгоритм және оның қасиеттері. Алгоритм терминінің тарихы. Алгоритм түрлері Алгоритм математика мен информатиканың кең тараған негізгі ұғымдарының бірі. Кӛп жағдайда

Διαβάστε περισσότερα

ДЕРЕКТЕР ҚОРЫН ӘЗІРЛЕУ ЖӘНЕ БАСҚАРУ

ДЕРЕКТЕР ҚОРЫН ӘЗІРЛЕУ ЖӘНЕ БАСҚАРУ КӘСІБИ БІЛІМ БЕРУ Г. Н. ФЕДОРОВА ДЕРЕКТЕР ҚОРЫН ӘЗІРЛЕУ ЖӘНЕ БАСҚАРУ ОҚУЛЫҚ «Білім беруді дамытудың федералды институты» Федералды мемлекеттік қазынашылық институты «Компьютерлік жүйелердегі бағдарламалау»

Διαβάστε περισσότερα

ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ ТАРАЗ МЕМЛЕКЕТТІК ПЕДАГОГИКАЛЫҚ ИНСТИТУТЫ. Тӛлеубаев Ж.С. БИОФИЗИКА

ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ ТАРАЗ МЕМЛЕКЕТТІК ПЕДАГОГИКАЛЫҚ ИНСТИТУТЫ. Тӛлеубаев Ж.С. БИОФИЗИКА ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ ТАРАЗ МЕМЛЕКЕТТІК ПЕДАГОГИКАЛЫҚ ИНСТИТУТЫ Тӛлеубаев Ж.С. БИОФИЗИКА Тараз-2013 ӘОЖ 577.3 Тӛлеубаев Ж.С.- а.ш.ғ.д. Биофизика оқу қҧралы,- Тараз: Тараз

Διαβάστε περισσότερα

Қазақстан Республикасының білім және ғылым министрлігі Қарағанды мемлекеттік техникалық университеті

Қазақстан Республикасының білім және ғылым министрлігі Қарағанды мемлекеттік техникалық университеті Қазақстан Республикасының білім және ғылым министрлігі Қарағанды мемлекеттік техникалық университеті Бекітемін Бірінші проректор Исагулов А.З. " " 2009ж. ОҚЫТУШЫ ПӘНІНІҢ ОҚУ-ӘДІСТЕМЕЛІК КЕШЕНІ Мәліметтерді

Διαβάστε περισσότερα

ПӘННІҢ ОҚУ-ӘДІСТЕМЕЛІК КЕШЕНІ

ПӘННІҢ ОҚУ-ӘДІСТЕМЕЛІК КЕШЕНІ ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ ШӘКӘРІМ атындағы СЕМЕЙ МЕМЛЕКЕТТІК УНИВЕРСИТЕТІ 3 деңгейлі СМЖ қҧжаты ПОӘК ПОӘК студентке арналған пәннің бағдарламасы «Дискретті математикалық логика».09.04

Διαβάστε περισσότερα

Курстың мақсаты: - Математикалық физика теориясының іргелі ұғымдарымен таныстыру, негізгі әдістерді үйрету және оларды қолдану білуге дайындау, әр

Курстың мақсаты: - Математикалық физика теориясының іргелі ұғымдарымен таныстыру, негізгі әдістерді үйрету және оларды қолдану білуге дайындау, әр Курстың мақсаты: - Математикалық физика теориясының іргелі ұғымдарымен таныстыру негізгі әдістерді үйрету және оларды қолдану білуге дайындау әр түрлі жеке дара ұғымдар мен зерттеулерді бір жүйеге келтіру

Διαβάστε περισσότερα

СӨЗЖАСАМ, ТЕРМИНЖАСАМ ТӘСІЛДЕРІ ОЛАРДЫҢ БАЙЛАНЫСЫ

СӨЗЖАСАМ, ТЕРМИНЖАСАМ ТӘСІЛДЕРІ ОЛАРДЫҢ БАЙЛАНЫСЫ СӨЗЖАСАМ, ТЕРМИНЖАСАМ ТӘСІЛДЕРІ ОЛАРДЫҢ БАЙЛАНЫСЫ Мамаева Гүлнар Бейсенқызы филология ғылымдарының кандидаты Л.Н. Гумилев атындағы Еуразия ұлттық университеті қазақ тіл білімі кафедрасының доценті Астана.

Διαβάστε περισσότερα

Әл-Фараби атындағы Қазақ ұлттық университеті МАНАТ. 6D Математика (Қолданбалы математика)

Әл-Фараби атындағы Қазақ ұлттық университеті МАНАТ. 6D Математика (Қолданбалы математика) Әл-Фараби атындағы Қазақ ұлттық университеті ӘОЖ 5.6 Қолжазба құқығында МАНАТ Біркелкі монотонды емес есептелмеліктер 6D6 Математика (Қолданбалы математика) Философия докторы (PhD) ғылыми дәрежесін алу

Διαβάστε περισσότερα

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖƏНЕ ҒЫЛЫМ МИНИСТРЛІГІ. М.Өтемісов атындағы Батыс-Қазақстан мемлекеттік университеті ЖҰМЫС ОҚУ БАҒДАРЛАМАСЫ.

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖƏНЕ ҒЫЛЫМ МИНИСТРЛІГІ. М.Өтемісов атындағы Батыс-Қазақстан мемлекеттік университеті ЖҰМЫС ОҚУ БАҒДАРЛАМАСЫ. ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖƏНЕ ҒЫЛЫМ МИНИСТРЛІГІ М.Өтемісов атындағы Батыс-Қазақстан мемлекеттік университеті ЖҰМЫС ОҚУ БАҒДАРЛАМАСЫ Нормаланған кеңістіктегі дифференциалдық есептеулер 6М06000 Математика

Διαβάστε περισσότερα

АЛГОРИТМДЕУ ЖƏНЕ ПРОГРАММАЛАУ ТІЛДЕРІ

АЛГОРИТМДЕУ ЖƏНЕ ПРОГРАММАЛАУ ТІЛДЕРІ ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖƏНЕ ҒЫЛЫМ МИНИСТРЛІГІ Абай атындағы Қазақ ұлттық педагогикалық университеті АЛГОРИТМДЕУ ЖƏНЕ ПРОГРАММАЛАУ ТІЛДЕРІ Білім алушыларға арналған пəннің оқу-əдістемелік кешені 5В070300

Διαβάστε περισσότερα

рметті студент! Мамандыты атауы Жауап парағыны 6-9 секторларындағы пəндер реті 1. Жоғары математика 2. Физика 3. Сызыты автоматты реттеу ж(йелері

рметті студент! Мамандыты атауы Жауап парағыны 6-9 секторларындағы пəндер реті 1. Жоғары математика 2. Физика 3. Сызыты автоматты реттеу ж(йелері рметті студент! 08 жылы «Техникалы ғылымдар жəне технологиялар -» бағытындағы мамандытар тобыны бітіруші курс студенттеріне Оу жетістіктерін сырттай бағалау 4 пəн бойынша ткізіледі. Жауап парашасын з мамандығыызды

Διαβάστε περισσότερα

І. ТАРАУ 1.1. Оператор ұғымы 4 Мат.анализ I. Функция. Функционал анализ I.Оператор амалгер бейнелік f : X Y x X, мұндағы X R,

І. ТАРАУ 1.1. Оператор ұғымы 4 Мат.анализ I. Функция. Функционал анализ I.Оператор амалгер бейнелік f : X Y x X, мұндағы X R, І. ТАРАУ.. Оператор ұғымы Мат.анализ I. Функция : X Y мұндағы X R, Y R X! Y X Y. Мысал: - әке заңдылығы функцияны қанағаттандырады g - бала заңдылығы функцияны қанағаттандырмайды Функционал анализ I.Операторамалгер

Διαβάστε περισσότερα

А.Байтұрсынов атындағы Қостанай мемлекеттік университеті. Электроэнергетика және физика кафедрасы. Г.Асанова

А.Байтұрсынов атындағы Қостанай мемлекеттік университеті. Электроэнергетика және физика кафедрасы. Г.Асанова А.Байтұрсынов атындағы Қостанай мемлекеттік университеті Электроэнергетика және физика кафедрасы Г.Асанова Зарядталған бөлшектердің электр өрісіндегі қозғалысы. Зертханалықжұмысты орындау бойынша әдістемелік

Διαβάστε περισσότερα

С.Ж.АСФЕНДИЯРОВ АТЫНДАҒЫ ҚАЗАҚ ҰЛТТЫҚ МЕДИЦИНА УНИВЕРСИТЕТІ

С.Ж.АСФЕНДИЯРОВ АТЫНДАҒЫ ҚАЗАҚ ҰЛТТЫҚ МЕДИЦИНА УНИВЕРСИТЕТІ С.Ж.АСФЕНДИЯРОВ АТЫНДАҒЫ ҚАЗАҚ ҰЛТТЫҚ МЕДИЦИНА УНИВЕРСИТЕТІ Сарсенбаева С.С., Рамазанова Ш.Х., Баймаханова Н.Т. МЕДИЦИНАЛЫҚ ЖОҒАРҒЫ ОҚУ ОРЫНДАРЫНДАҒЫ БЕЛСЕНДІ ОҚЫТУ ӘДІСТЕРІ Оқу құралы Алматы 2011 ж. 1

Διαβάστε περισσότερα

Теллурдың жаңа туындыларының синтезі және қасиеттері

Теллурдың жаңа туындыларының синтезі және қасиеттері Теллурдың жаңа туындыларының синтезі және қасиеттері Дипломдық зерттеудің мақсаты теллурдың жаңа туындыларын синтездеу, рентгендік және термодинамикалық қасиеттерін, кристаллохимиясын зерттеу. Зерттеудің

Διαβάστε περισσότερα

Тема: 12 Функциялар Подтема: 01-Функцияның анықтамасы. Функцияның анықталу жəне өзгеру облысы. у =

Тема: 12 Функциялар Подтема: 01-Функцияның анықтамасы. Функцияның анықталу жəне өзгеру облысы. у = Тема: Функциялар Подтема: 0-Функцияның анықтамасы. Функцияның анықталу жəне өзгеру облысы. Функцияның анықталу облысын табыңыз. Жауабы: [ 4;4]. Функцияның мəндер облысын табыңыз. у = х х 0 Жауабы: [ 9

Διαβάστε περισσότερα

ПƏННІҢ ОҚУ-ƏДІСТЕМЕЛІК КЕШЕНІ

ПƏННІҢ ОҚУ-ƏДІСТЕМЕЛІК КЕШЕНІ М. Өтемісов атындағы Батыс Қазақстан мемлекеттік университеті (пəннің атауы) Информатика кафедрасы 5В060200 - «Информатика», 5В070300 - «Ақпараттық жүйелер» мамандығы бойынша кредиттік оқу жүйесінде оқитын

Διαβάστε περισσότερα

Register your product and get support at www.philips.com/welcome 46PFL76x5H 42PFL76x5C 42PFL76x5H 40PFL76x5H 37PFL76x5H 37PFL75x5H 32PFL76x5C 32PFL76x5H 32PFL74x5H KK Пайдаланушы нқсҕаулығы Contact information

Διαβάστε περισσότερα

ДЕНЕЛЕРДІҢ ЕРКІН ТҮСУІ

ДЕНЕЛЕРДІҢ ЕРКІН ТҮСУІ ДЕНЕЛЕРДІҢ ЕРКІН ТҮСУІ Денелердің еркін түсуі деп ауа кедергісі болмағандағы денелердің Жерге түсуін айтады. XVI ғасырдың аяғында ұлы итальян Г. Галилей тәжірибелік жолмен сол заманға сай уақыт дәлдігімен

Διαβάστε περισσότερα

ӘДІСТЕМЕЛІК НҰСҚАУЛЫҚ

ӘДІСТЕМЕЛІК НҰСҚАУЛЫҚ Әдістемелік нұсқаулық Нысан ПМУ ҰС Н 78/5 Қазақстан Республикасының білім және ғылым министрлігі С Торайғыров атындағы Павлодар мемлекеттік университеті Математика кафедрасы Математикалық талдау пәнді

Διαβάστε περισσότερα

АВТОМАТТЫ БАСҚАРУ ТЕОРИЯСЫ

АВТОМАТТЫ БАСҚАРУ ТЕОРИЯСЫ Коммерциялық емес акционерлік қоғам АЛМАТЫ ЭНЕРГЕТИКА ЖӘНЕ БАЙЛАНЫС УНИВЕРСИТЕТІ Өнеркәсіп қондырғыларының электржетегі және автоматтандыру кафедрасы АВТОМАТТЫ БАСҚАРУ ТЕОРИЯСЫ 5В78 Электр энергетикасы

Διαβάστε περισσότερα

КИНЕМАТИКАНЫҢ НЕГІЗГІ ҰҒЫМДАРЫ. Кинематика деп денелердің қозғалысын зерттейтін, бірақ қозғалыстың туу себебін қарастырмайтын физиканың бөлімі.

КИНЕМАТИКАНЫҢ НЕГІЗГІ ҰҒЫМДАРЫ. Кинематика деп денелердің қозғалысын зерттейтін, бірақ қозғалыстың туу себебін қарастырмайтын физиканың бөлімі. КИНЕМАТИКАНЫҢ НЕГІЗГІ ҰҒЫМДАРЫ Кинематика деп денелердің қозғалысын зерттейтін, бірақ қозғалыстың туу себебін қарастырмайтын физиканың бөлімі. Механикалық қозғалыс деп уақыт өзгерісінде кеңістікте дененің

Διαβάστε περισσότερα

нарықтың дамыған инфрақұрылымның болуы; тұрақты салықтық-бюджеттік және кредитті-ақшалай жүйенің болуы. Еркін нарықтың қызмет етуін қамтамасыз ететін

нарықтың дамыған инфрақұрылымның болуы; тұрақты салықтық-бюджеттік және кредитті-ақшалай жүйенің болуы. Еркін нарықтың қызмет етуін қамтамасыз ететін 3 дәріс. Нарық және оның қызмет жасауының механизмі. Нарықтың жалпы сипаттамасы және олардың өзара әсерлесуі. Нарықтың негізгі элементтері және олардың өзара әсерлесуі. Нарықтың сиымдылығы және болжауы.

Διαβάστε περισσότερα

ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ. Жәңгір хан атындағы Батыс Қазақстан аграрлық-техникалық университеті

ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ. Жәңгір хан атындағы Батыс Қазақстан аграрлық-техникалық университеті 34.63-1 М 38 ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Жәңгір хан атындағы Батыс Қазақстан аграрлық-техникалық университеті «Мҧнай газ ісі және машина жасау технологиясы» кафедрасы 5В071200

Διαβάστε περισσότερα

Тексерген: Рысжанова Айжан Сайлаухановна Орындаған: Оралғазин Бекнар Болатқазыұлы

Тексерген: Рысжанова Айжан Сайлаухановна Орындаған: Оралғазин Бекнар Болатқазыұлы Тақырыбы: Тьюринг машинасы. Тьюринг тезисі және оның негіздемесі. Марковтың нормальды алгоритмы. Нормальдау принциптері және оның негіздемесі. Марковтың нормальды алгоритмі және Тьюринг машинасының композициясы.

Διαβάστε περισσότερα

Register your product and get support at www.philips.com/welcome 55PFL76x6H 47PFL76x6H 42PFL76x6H 37PFL76x6H 32PFL76x6H 55PFL76x6K 47PFL76x6K 42PFL76x6K 37PFL76x6K 32PFL76x6K 55PFL76x6T 47PFL76x6T 42PFL76x6T

Διαβάστε περισσότερα

БИОТЕХНОЛОГИЯЛЫҚ ПРОЦЕСТЕРДІҢ ҚОНДЫРҒЫЛАРЫН ЕСЕПТЕУ

БИОТЕХНОЛОГИЯЛЫҚ ПРОЦЕСТЕРДІҢ ҚОНДЫРҒЫЛАРЫН ЕСЕПТЕУ ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Қ.И.Сәтбаев атындағы қазақ ҧлттық техникалық университеті Жоғары технологиялар және тҧрақты даму институты «Қолданбалы экология» кафедрасы Г.Х.Керейбаева,

Διαβάστε περισσότερα

Тақырып: Жоғары молекулалы қосылыстар

Тақырып: Жоғары молекулалы қосылыстар Тақырып: Жоғары молекулалы қосылыстар Жоғары молекулалы қосылыстар немесе полимерлер (гр. πολύ- көп, μέρος бөлік, бөлігі) молекула құрамында өзара химикалық немесе координаттық байланыстармен қосылған

Διαβάστε περισσότερα

АВТОМАТИКА ЖӘНЕ ТЕЛЕМЕХАНИКА ЖҮЙЕЛЕРІН ЖОБАЛАУ

АВТОМАТИКА ЖӘНЕ ТЕЛЕМЕХАНИКА ЖҮЙЕЛЕРІН ЖОБАЛАУ Умаров Амангелді Рахымбердіұлы Умаров Амантұр Амангелдіұлы АВТОМАТИКА ЖӘНЕ ТЕЛЕМЕХАНИКА ЖҮЙЕЛЕРІН ЖОБАЛАУ Оқу құралы А.Ясауи атындағы ХҚТУ оқу-әдістемелік кеңесінің шешімімен ЖОО 5В070200-Автоматтандыру

Διαβάστε περισσότερα

Криптография. ОРЫНДАҒАН: Сабитов Аманбек ОИН-302 тобы.

Криптография. ОРЫНДАҒАН: Сабитов Аманбек ОИН-302 тобы. Криптография ОРЫНДАҒАН: Сабитов Аманбек ОИН-302 тобы. Жоспар: Ақпараттарды криптографиялық қорғау Криптографиялық жүйелерге қойылатын талаптар Криптографиялық әдістерді топтастыру Ақпараттарды криптографиялық

Διαβάστε περισσότερα

МАЗМҰНЫ ЭЕМ-НІҢ НЕГІЗГІ ФУНКЦИОНАЛДЫҚ ЭЛЕМЕНТТЕРІ, I БӨЛІМ... ЭЕМ-НІҢ НЕГІЗГІ ФУНКЦИОНАЛДЫ ЭЛЕМЕНТТЕРІ, II БӨЛІМ... АРИФМЕТИКАЛЫҚ-ЛОГИКАЛЫҚ ҚҰРЫЛҒЫ...

МАЗМҰНЫ ЭЕМ-НІҢ НЕГІЗГІ ФУНКЦИОНАЛДЫҚ ЭЛЕМЕНТТЕРІ, I БӨЛІМ... ЭЕМ-НІҢ НЕГІЗГІ ФУНКЦИОНАЛДЫ ЭЛЕМЕНТТЕРІ, II БӨЛІМ... АРИФМЕТИКАЛЫҚ-ЛОГИКАЛЫҚ ҚҰРЫЛҒЫ... МАЗМҰНЫ КІРІСПЕ... 3 НЕГІЗГІ ТЕРМИНДЕР ЖӘНЕ АНЫҚТАУЛАР... 4 ЭЕМ-НІҢ НЕГІЗГІ ФУНКЦИОНАЛДЫҚ ЭЛЕМЕНТТЕРІ, I БӨЛІМ... 6 ЭЕМ-НІҢ НЕГІЗГІ ФУНКЦИОНАЛДЫ ЭЛЕМЕНТТЕРІ, II БӨЛІМ... 5 АРИФМЕТИКАЛЫҚ-ЛОГИКАЛЫҚ ҚҰРЫЛҒЫ...

Διαβάστε περισσότερα

МАТЕРИАЛДАР КЕДЕРГІСІ

МАТЕРИАЛДАР КЕДЕРГІСІ ҚАЗАҚСТАН РЕСПУБЛИКАСЫ ЖОҒАРЫ ОҚУ ОРЫНДАРЫНЫҢ ҚАУЫМДАСТЫҒЫ А. ТҮСІПОВ С. ТҮСІПОВА МАТЕРИАЛДАР КЕДЕРГІСІ ОҚУЛЫҚ Екінші басылым. Өңделген Алматы, 01 1 ƏОЖ 53 (075.8) КБЖ.3 я 73 Т90 Қазақстан Республикасының

Διαβάστε περισσότερα

әдістемелік нұсқаулар

әдістемелік нұсқаулар Әдістемелік нұсқаулар ФСО ПГУ 7.18.2/07 Ф Қазақстан Республикасының Білім және ғылым министрлігі С. Торайғыров атындағы Павлодар мемлекеттік университеті Физика, математика және ақпараттық технологиялар

Διαβάστε περισσότερα

факторлары келесі формулалармен анықталады

факторлары келесі формулалармен анықталады ГЛОССАРИЙ Материалдар кедергісі - Конструкция элементтерінің беріктігін, қатаңдығын және орнықтылығын зерттейтін ғылым Беріктік- конструкцияның немесе оның жеке элементтерінің сыртқы күш әсеріне қирамай

Διαβάστε περισσότερα

Математика талапкерге

Математика талапкерге ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Жәңгір хан атындағы Батыс Қазақстан аграрлықтехникалық университеті Математика талапкерге (Оқу-әдістемелік құрал) Орал 2013ж. УДК 1(0) ББК 22.1 М

Διαβάστε περισσότερα

ПӘНДІ ОҚЫТУДАҒЫ ӘДІСТЕМЕЛІК НҰСҚАУЛАР

ПӘНДІ ОҚЫТУДАҒЫ ӘДІСТЕМЕЛІК НҰСҚАУЛАР Әдістемелік нұсқаулардың Нысан титулдық парағы ПМУ ҰС Н 78 Қазақстан Республикасының білім және ғылым министрлігі С Торайғыров атындағы Павлодар мемлекеттік университеті Математика кафедрасы Математикалық

Διαβάστε περισσότερα

ЖАЛПЫ ХИМИЯЛЫҚ ТЕХНОЛОГИЯ

ЖАЛПЫ ХИМИЯЛЫҚ ТЕХНОЛОГИЯ ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖƏНЕ ҒЫЛЫМ МИНИСТРЛІГІ Ж. К. ҚАЙЫРБЕКОВ Е. А. ƏУБƏКІРОВ Ж. К. МЫЛТЫҚБАЕВА ЖАЛПЫ ХИМИЯЛЫҚ ТЕХНОЛОГИЯ Оқулық Алматы, 2014 ƏОЖ 66 (075.8) КБЖ 35 я 73 Қ 23 Қазақстан Республикасы

Διαβάστε περισσότερα

Жарық Интерференциясын зерттеу

Жарық Интерференциясын зерттеу А.Байтұрсынов атындағы Қостанай мемлекеттік университеті Электроэнергетика және физика кафедрасы Г.Асанова Жарық Интерференциясын зерттеу Зертханалықжұмысты орындау бойынша әдістемелік нұсқаулары Қостанай,

Διαβάστε περισσότερα

Инерция моменті Инерция тензоры

Инерция моменті Инерция тензоры әл Фараби атындағы Қаза қ Ұлтты қ Университеті Физика-техникалы қ факультеті Инерция моменті Инерция тензоры Орындаған: Бижанова С.Б Алматы 2015 Инерция моменті денені құраушы әрбір бөлшекті ң массасы

Διαβάστε περισσότερα

МАЗМҰНЫ. 13 ерекше (жеке) жағдайда орналасуы 2.6 Түзудегі нүкте. Түзудің ізі Жалпы жағдайда орналасқан түзу кесіндісінің сызбада

МАЗМҰНЫ. 13 ерекше (жеке) жағдайда орналасуы 2.6 Түзудегі нүкте. Түзудің ізі Жалпы жағдайда орналасқан түзу кесіндісінің сызбада МАЗМҰНЫ КІРІСПЕ 5 1 Проекцияның құрылуы 6 1.1 Центрлік проекциялар 6 1.2 Параллель проекциялар 6 1.3 Монж тәсілі 7 2 Нүкте және түзу 8 2.1 Нүкте π 1 π 2 екі проекция жазықтықтары жүйесінде 8 2.2 Нүкте

Διαβάστε περισσότερα

МГД- ҚОНДЫРҒЫЛАР ЖӘНЕ ЦИКЛДАРЫ

МГД- ҚОНДЫРҒЫЛАР ЖӘНЕ ЦИКЛДАРЫ МГД- ҚОНДЫРҒЫЛАР ЖӘНЕ ЦИКЛДАРЫ Орында ан:сарсенбаева Руфина ғ Группа:НГД-14/1 МГД - қондырғыларындағы жұмысшы дене ретінде, бейтарап молекулалар мен атомдарды ң, электрондарды ң, иондарды ң квазибейтарап

Διαβάστε περισσότερα

Сұлтанғали Төлегенов БИОМЕТРИЯ. ОҚУлық

Сұлтанғали Төлегенов БИОМЕТРИЯ. ОҚУлық Сұлтанғали Төлегенов БИОМЕТРИЯ ОҚУлық Алматы 0 УДК 378 (075.8): 57.087. ББК 8.073. я к Т 65 Пікір жазғандар: Шүлембаева К.Қ. б.ғ.д., профессор; Жұмабеков Е.Ж. б.ғ.д., профессор; Торыбаев Х.К. б.ғ.д., профессор;

Διαβάστε περισσότερα

МАТЕМАТИКАЛЫҚ ФИЗИКА ТЕҢДЕУЛЕРІ

МАТЕМАТИКАЛЫҚ ФИЗИКА ТЕҢДЕУЛЕРІ Л.Н. ГУМИЛЕВ АТЫНДЫҒЫ ЕҰУ КІТАПХАНАСЫ Зара СЫЗДЫҚОВА Андрей ИБАТОВ МАТЕМАТИКАЛЫҚ ФИЗИКА ТЕҢДЕУЛЕРІ ОҚУЛЫҚ АСТАНА ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Л.Н. ГУМИЛЕВ АТЫНДЫҒЫ ЕУРАЗИЯ ҰЛТТЫҚ

Διαβάστε περισσότερα

Қазақстан Республикасының білім және ғылым министрлігі Қарағанды мемлекеттік техникалық университеті ОҚЫТУШЫ ПӘНІНІҢ ОҚУ-ӘДІСТЕМЕЛІК КЕШЕНІ

Қазақстан Республикасының білім және ғылым министрлігі Қарағанды мемлекеттік техникалық университеті ОҚЫТУШЫ ПӘНІНІҢ ОҚУ-ӘДІСТЕМЕЛІК КЕШЕНІ Қазақстан Республикасының білім және ғылым министрлігі Қарағанды мемлекеттік техникалық университеті Бекітемін Бірінші проректор Исагулов А.З. " " 2009 ж. ОҚЫТУШЫ ПӘНІНІҢ ОҚУ-ӘДІСТЕМЕЛІК КЕШЕНІ «Информатика»

Διαβάστε περισσότερα

ЖЕРСЕРІКТІК НАВИГАЦИЯЛЫҚ ЖҮЙЕЛЕР

ЖЕРСЕРІКТІК НАВИГАЦИЯЛЫҚ ЖҮЙЕЛЕР Жерсеріктік навигациялық жүйелер ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Қ.И.СӘТБАЕВ атындағы ҚАЗАҚ ҰЛТТЫҚ ТЕХНИКАЛЫҚ УНИВЕРСИТЕТІ Қ.Б. РЫСБЕКОВ ЖЕРСЕРІКТІК НАВИГАЦИЯЛЫҚ ЖҮЙЕЛЕР Университеттің

Διαβάστε περισσότερα

рметті студент! Мамандыты атауы Жауап парағыны 6-9 секторларындағы пəндер реті 5В «Механика» 1. Математикалы талдау I

рметті студент! Мамандыты атауы Жауап парағыны 6-9 секторларындағы пəндер реті 5В «Механика» 1. Математикалы талдау I рметті студент! 08 жылы «Жаратылыстану ғылымдары -» бағытындағы мамандытар тобыны бітіруші курс студенттеріне Оу жетістіктерін сырттай бағалау 4 пəн бойынша ткізіледі. Жауап парашасын з мамандығыызды пəндері

Διαβάστε περισσότερα

Химия пәнінен интерактивті online сабағы

Химия пәнінен интерактивті online сабағы Химия пәнінен интерактивті online сабағы Дюлонг - Пти ережесі Газдардың парциал қысымы Сабақтың мақсаты білімділік: физикадан белгілі термодинамикалық параметрлер температура, қысым, көлем, меншікті жылу

Διαβάστε περισσότερα

Иондаушы сәулелердің затпен әсерлесуі

Иондаушы сәулелердің затпен әсерлесуі Электрондардың затпен әсерлесуі Иондаушы сәулелердің затпен әсерлесуі Электрондар жеңіл зарядталған бөлшектер. Электрондардың көзі ретінде бета сәулелену электрон және позитрон шығаратын β радионуклидтері

Διαβάστε περισσότερα

МҰНАЙ КЕН ОРЫНДАРЫН ИГЕРУ

МҰНАЙ КЕН ОРЫНДАРЫН ИГЕРУ ҚАЗАҚСТАН РЕСПУБЛИКАСЫҢ БІЛІМ ЖƏНЕ ҒЫЛЫМ МИНИСТРЛІГІ А.Т. Қартабай, Е.С. Орынғожин, А.К. Есімханова. МҰНАЙ КЕН ОРЫНДАРЫН ИГЕРУ Оқулық Алматы 2013 Қартабай А.Т., Орынғожин Е.С., Молдабаева Г.Ж., Есімханова

Διαβάστε περισσότερα

«Полиметалл» Қызыл жобасы Экологиялық және әлеуметтік іс-шаралар жоспары (ESAP) Талап етілетін жұмсалымдар /Ресурстар/ Жауапкершілік

«Полиметалл» Қызыл жобасы Экологиялық және әлеуметтік іс-шаралар жоспары (ESAP) Талап етілетін жұмсалымдар /Ресурстар/ Жауапкершілік «Полиметалл» Қызыл жобасы Экологиялық және әлеуметтік іс-шаралар жоспары (ESAP) Іс-шаралар Экологиялық PR1 1.1 Экологиялық және әлеуметтік әсер етулерді бағалау және басқару ЕБРР-ге жобаның экологиялық

Διαβάστε περισσότερα

1. Кіріспе 2. Тармақталу 3. Кү рделі шарттар 4. Циклдер 5. Шартты циклдер 6. Таң дау операторы

1. Кіріспе 2. Тармақталу 3. Кү рделі шарттар 4. Циклдер 5. Шартты циклдер 6. Таң дау операторы 1 Паскаль тілінде программалау 1. Кіріспе 2. Тармақталу 3. Кү рделі шарттар 4. Циклдер 5. Шартты циклдер 6. Таң дау операторы 7. Графика 8. Функциялардың графигі 9. Процедуралар 10. Рекурсия 11. Анимация

Διαβάστε περισσότερα

Михайлова Светлана Леонидовнаның

Михайлова Светлана Леонидовнаның Михайлова Светлана Леонидовнаның «6D074000 Наноматериалдар және нанотехнологиялар» мамандығы бойынша философия докторы (PhD) ғылыми дәрежесін алу үшін диссертациясына АННОТАЦИЯ Металл нанокластерлерімен

Διαβάστε περισσότερα

Металдар мен бейметалдар қасиеттері

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

Διαβάστε περισσότερα

АНОМАЛЬДЫ БАЛАЛАРМЕН ЖҰМЫС ЖАСАУДЫҢ КЕЙБІР АСПЕКТІЛЕРІ

АНОМАЛЬДЫ БАЛАЛАРМЕН ЖҰМЫС ЖАСАУДЫҢ КЕЙБІР АСПЕКТІЛЕРІ АНОМАЛЬДЫ БАЛАЛАРМЕН ЖҰМЫС ЖАСАУДЫҢ КЕЙБІР АСПЕКТІЛЕРІ Маханбет Айнұр Мұратбайқызы., ҚМПИ, дефектология мамандығының 2 курс студенті Ғылыми жетекші : Шалғымбекова Ə.Б, ҚМПИ педагогика кафедрасының аға

Διαβάστε περισσότερα

УДК 004.42, 519.683 MDD МЕТОДОЛОГИЯСЫН МҰНАЙ-ГАЗ САЛАСЫ МƏСЕЛЕЛЕРІН ШЕШУГЕ АРНАЛҒАН ЖОҒАРЫ ӨНІМДІ ЕСЕПТЕУ ҚОСЫМШАЛАРЫН ЖОБАЛАУ ЖƏНЕ ӨҢДЕУДЕ ПАЙДАЛАНУ Б. Мəткерім, Д.Ж. Ахмед-Заки Əл-Фараби атындағы Қазақ

Διαβάστε περισσότερα

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ ЖОҒАРЫ ОҚУ ОРЫНДАРЫНЫҢ ҚАУЫМДАСТЫҒЫ А. Т.

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ ЖОҒАРЫ ОҚУ ОРЫНДАРЫНЫҢ ҚАУЫМДАСТЫҒЫ А. Т. ҚАЗАҚСТАН РЕСПУБЛИКАСЫ ЖОҒАРЫ ОҚУ ОРЫНДАРЫНЫҢ ҚАУЫМДАСТЫҒЫ А. Т. Мусин МАТЕМАТИКА II (Лекциялар. Тесттер жинағы) Оқу құралы Алматы, ƏОЖ 5(75.8) КБЖ.я73 М 79 Баспаға Қарағанды «Болашақ» университетінің

Διαβάστε περισσότερα

CKOH ЦИКЛДЫ ҚОСЫЛЫСТАРДЫҢ ОРГАНИКАЛЫҚ ХИМИЯСЫ

CKOH ЦИКЛДЫ ҚОСЫЛЫСТАРДЫҢ ОРГАНИКАЛЫҚ ХИМИЯСЫ әл-фараби атындағы ҚАЗАҚ ҰЛТТЫҚ УНИВЕРСИТЕТІ ХИМИЯ ЖӘНЕ ХИМИЯЛЫҚ ТЕХНОЛОГИЯ ФАКУЛЬТЕТІ Органикалық заттар, табиғи қосылыстар және полимерлер химиясы мен технология кафедрасы SYLLABUS Факультет ғылыми кеңесінің

Διαβάστε περισσότερα

Тема: 23-Көпжақтар. Олардың аудандары мен көлемдері Подтема: 01-Призма. Тік жəне көлбеу призмалар. Куб. Олардың бет аудандары мен көлемдері.

Тема: 23-Көпжақтар. Олардың аудандары мен көлемдері Подтема: 01-Призма. Тік жəне көлбеу призмалар. Куб. Олардың бет аудандары мен көлемдері. Тема: -Көпжақтар. Олардың аудандары мен көлемдері Подтема: 01-Призма. Тік жəне көлбеу призмалар. Куб. Олардың бет аудандары мен көлемдері. 1. Тік үшбұрышты призманың табанының қабырғалары 10 см, 17 см

Διαβάστε περισσότερα

рметті студент! Мамандыты атауы Жауап парағыны 6-9 секторларындағы пəндер реті 1. Математикалы анализ 2. Физика

рметті студент! Мамандыты атауы Жауап парағыны 6-9 секторларындағы пəндер реті 1. Математикалы анализ 2. Физика рметті студент! 08 жылы «Техникалы ғылымдар жəне технологиялар - 4» бағытындағы мамандытар тобыны бітіруші курс студенттеріне Оу жетістіктерін сырттай бағалау 4 пəн бойынша ткізіледі. Жауап парашасын з

Διαβάστε περισσότερα

ҒАЛЫМДАР және олардың Исламдағы орны

ҒАЛЫМДАР және олардың Исламдағы орны ҒАЛЫМДАР және олардың Исламдағы орны www.al-hanifiya.kz редакциясы 1 Мазмұны КІРІСПЕ...4 БІЛІМ ЖӘНЕ ҒАЛЫМДАРДЫҢ АРТЫҚШЫЛЫҒЫ МЕН МАҢЫЗДЫЛЫҒЫ...14 Білімнің артықшылығы туралы...14 Білім сөздер мен амалдардан

Διαβάστε περισσότερα

Орындаған: Саматқызы Гүлманат Ақтөбе қаласы Ғ.Ақтаев атындағы 6 ОМ, 10 класс оқушысы

Орындаған: Саматқызы Гүлманат Ақтөбе қаласы Ғ.Ақтаев атындағы 6 ОМ, 10 класс оқушысы Орындаған: Саматқызы Гүлманат Ақтөбе қаласы Ғ.Ақтаев атындағы 6 ОМ, 10 класс оқушысы Жетекшісі: Кулдиярова Гулайраш Елубаевна - Ақтөбе қаласы Ғ.Ақтаев атындағы 6 ОМ, математика пәні мұғалімі Пифагор Самосский

Διαβάστε περισσότερα

Жарық жылдамдығын өлшеудің лабороториялық әдістері.

Жарық жылдамдығын өлшеудің лабороториялық әдістері. Жарық толқындары Жарық жылдамдығы Жарық жылдамдығын алғаш рет 1676 жылы дат ғалымы О.Рёмер өлшеді. Ол күн жүйесіндегі ең үлкен Юпитер планетасы серіктерінің тұтылуын бақылады. Юпитердің 10 серігі бар,

Διαβάστε περισσότερα

рметті студент! Мамандыты атауы Жауап парағыны 6-9 секторларындағы пəндер реті 1. Алгебра «Математикалы жəне 2. Физика компьютерлік 2.

рметті студент! Мамандыты атауы Жауап парағыны 6-9 секторларындағы пəндер реті 1. Алгебра «Математикалы жəне 2. Физика компьютерлік 2. рметті студент! 08 жылы «Техникалы ғылымдар жəне технологиялар -» бағытындағы мамандытар тобыны бітіруші курс студенттеріне Оу жетістіктерін сырттай бағалау пəн бойынша ткізіледі. Жауап парашасын з мамандығыызды

Διαβάστε περισσότερα

Сабақ жоспары. 1. Теңдеулер жүйесін шешіңдер: x 2 +y 2-6y=0 x 2 -xy+y 2 = Теңсіздіктер жүйесін шешіңдер: x 2 +4x-5>0

Сабақ жоспары. 1. Теңдеулер жүйесін шешіңдер: x 2 +y 2-6y=0 x 2 -xy+y 2 = Теңсіздіктер жүйесін шешіңдер: x 2 +4x-5>0 Сабақ: 1 Сынып: 10 «ә» Сабақтың тақырыбы: Теңдеулер, теңсіздіктер және олардың жүйесі. Сабақтың мақсаттары: 1. Білімділік: Теңдеулер және теңсіздіктер жүйелерін шешу тәсілдері.. Дамытушылық: 9 сыныпта

Διαβάστε περισσότερα

Қолданушының нұсқасы. Өнімді мына жерде тіркеп, оған қолдау алыңыз: Portable speaker SB500

Қолданушының нұсқасы. Өнімді мына жерде тіркеп, оған қолдау алыңыз:  Portable speaker SB500 Portable speaker SB500 Қолданушының нұсқасы Өнімді мына жерде тіркеп, оған қолдау алыңыз: www.philips.com/support Мазмұндар кестесі 1 Маңызды 2 Қауіпсіздік 2 Ескерту 2 7 Ақауларды жою 11 Жалпы ақпарат

Διαβάστε περισσότερα

АЛМАТЫ ЭКОНОМИКА ЖӘНЕ СТАТИСТИКА АКАДЕМИЯСЫ

АЛМАТЫ ЭКОНОМИКА ЖӘНЕ СТАТИСТИКА АКАДЕМИЯСЫ АЛМАТЫ ЭКОНОМИКА ЖӘНЕ СТАТИСТИКА АКАДЕМИЯСЫ АЭСА оқу-әдістемелік кеңесінің мәжілісінде Бекітілген Хаттама 1 «27» тамыз 2012 ж. Оқу ісі жӛніндегі проректор, профессор Машанова Р.К. ПӘННІҢ ОҚУ-ӘДІСТЕМЕЛІК

Διαβάστε περισσότερα

Қазақстан Республикасынын білім және ғылым министрлігі. С. Торайгыров атындағы Павлодар мемлекеттік университеті. К.Х.

Қазақстан Республикасынын білім және ғылым министрлігі. С. Торайгыров атындағы Павлодар мемлекеттік университеті. К.Х. Қазақстан Республикасынын білім және ғылым министрлігі С. Торайгыров атындағы Павлодар мемлекеттік университеті К.Х. Жапаргазинова БЕЙОРГАНИКАЛЫҚ ХИМИЯ химиялық технологиясы мамандықтарының студенттері

Διαβάστε περισσότερα

І ТАРАУ ТЕХНИКАЛЫҚ ТЕРМОДИНАМИКА ПӘНІ МЕН ОНЫҢ МІНДЕТТЕРІ

І ТАРАУ ТЕХНИКАЛЫҚ ТЕРМОДИНАМИКА ПӘНІ МЕН ОНЫҢ МІНДЕТТЕРІ Кіріспе Классикалық (феноменологиялық) термодинамикада энергияның әр түрінің өзара түрлену заңдары оқылады. Техникалық термодинамика жылу мен жұмыстың өзара түрлену заңдылықтарын қарастырады. Мұнда жылулық

Διαβάστε περισσότερα

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ ЖОҒАРЫ ОҚУ ОРЫНДАРЫНЫҢ ҚАУЫМДАСТЫҒЫ А. Н.

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ ЖОҒАРЫ ОҚУ ОРЫНДАРЫНЫҢ ҚАУЫМДАСТЫҒЫ А. Н. ҚАЗАҚСТАН РЕСПУБЛИКАСЫ ЖОҒАРЫ ОҚУ ОРЫНДАРЫНЫҢ ҚАУЫМДАСТЫҒЫ А. Н. Доғалов Н. С. Досмағанбетов МАКРОЭКОНОМИКА Оқулық Алматы, 2012 1 ƏОЖ 330 (075.8) КБЖ 65.012.2я73 Д 54 Л. Н. Гумилев атындағы Еуразия ұлттық

Διαβάστε περισσότερα

САБАҚ ЖОСПАРЫ. Əбдірахманова Күнсая Жамбыл облысы, Тараз қаласы, ФМБ НЗМ, 11-сынып. ҰБТ-ға дайындық үшін геометрия пəнінен тест тапсырмалары

САБАҚ ЖОСПАРЫ. Əбдірахманова Күнсая Жамбыл облысы, Тараз қаласы, ФМБ НЗМ, 11-сынып. ҰБТ-ға дайындық үшін геометрия пəнінен тест тапсырмалары САБАҚ ЖОСПАРЫ Пəн Мұғалім Мектеп, сынып Сабақ тақырыбы Математика Əбдірахманова Күнсая Жамбыл облысы, Тараз қаласы, ФМБ НЗМ, 11-сынып ҰБТ-ға дайындық үшін геометрия пəнінен тест тапсырмалары 1. Үлкен табаны

Διαβάστε περισσότερα

Зерттеулер және статистика департаменті Экономикалық зерттеу Төлеуов Олжас

Зерттеулер және статистика департаменті Экономикалық зерттеу Төлеуов Олжас ИНФЛЯЦИЯНЫ БОЛЖАУДЫҢ СЕЛЕКТИВТІК-БІРІКТІРІЛГЕН ЖҮЙЕСІ (SSCIF): құрылымдық проблемалар жағдайында тұтынушылық бағаның серпінін болжаудың тиімді техникасын таңдау (Қазақстанның үлгісінде) Зерттеулер және

Διαβάστε περισσότερα

Б.Ә. Унаспеков ГАЗБЕН ЖАБДЫҚТАУ. Университеттің Ғылыми-әдістемелік кеңесі оқулық ретінде ҧсынған

Б.Ә. Унаспеков ГАЗБЕН ЖАБДЫҚТАУ. Университеттің Ғылыми-әдістемелік кеңесі оқулық ретінде ҧсынған ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Л.Н. ГУМИЛЕВ АТЫНДАҒЫ ЕУРАЗИЯ ҰЛТТЫҚ УНИВЕРСИТЕТІ Б.Ә. Унаспеков ГАЗБЕН ЖАБДЫҚТАУ Университеттің Ғылыми-әдістемелік кеңесі оқулық ретінде ҧсынған Астана

Διαβάστε περισσότερα

ЗЕРТХАНАЛЫҚ ЖҰМЫСТАРДЫ ОРЫНДАУҒА ӘДІСТЕМЕЛІК НҰСҚАУЛАР

ЗЕРТХАНАЛЫҚ ЖҰМЫСТАРДЫ ОРЫНДАУҒА ӘДІСТЕМЕЛІК НҰСҚАУЛАР Әдістемелік нұсқулрдың титулдық прғы Нысн ПМУ ҰС Н 7.8./40 Қзқстн Республиксының білім және ғылым министрлігі С. Торйғыров тындғы Пвлодр мемлекеттік университеті Мтемтик кфедрсы Мтемтик пәні бойынш 5В060800

Διαβάστε περισσότερα

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ ХАЛЫҚАРАЛЫҚ РЕЗЕРВТЕРІНІҢ ЖЕТКІЛІКТІЛІГІН БАҒАЛАУ

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ ХАЛЫҚАРАЛЫҚ РЕЗЕРВТЕРІНІҢ ЖЕТКІЛІКТІЛІГІН БАҒАЛАУ ҚАЗАҚСТАН РЕСПУБЛИКАСЫ ХАЛЫҚАРАЛЫҚ РЕЗЕРВТЕРІНІҢ ЖЕТКІЛІКТІЛІГІН БАҒАЛАУ Төлем балансы және валюталық реттеу департаменті Аналитикалық жазбахат Скрипченко З.В. 3 Қазақстан Республикасы Ұлттық Банкінің

Διαβάστε περισσότερα

СӨЖ. Тақырыбы: Металлдар өндірісі

СӨЖ. Тақырыбы: Металлдар өндірісі Қазақстан Республикасының Білім және ғылым министрлігі Семей қаласының Шәкәрім атындағы мемлекеттік университеті Жаратылыстық және математика физика факультеті Химия және география кафедрасы СӨЖ Тақырыбы:

Διαβάστε περισσότερα

Дәрілік заттың медицинада қолданылуы жөніндегі нұсқаулық. Депакин Хроносфера

Дәрілік заттың медицинада қолданылуы жөніндегі нұсқаулық. Депакин Хроносфера Қазақстан Республикасы Денсаулық сақтау министрлігі Медициналық және фармацевтикалық қызметті бақылау комитеті Төрағасының 2014 жылғы 04 02. 82 бұйрығымен БЕКІТІЛГЕН Саудалық атауы Депакин Хроносфера Дәрілік

Διαβάστε περισσότερα

санын айтамыз. Бұл сан екі тік және екі жатық жолдардан тұратын а а

санын айтамыз. Бұл сан екі тік және екі жатық жолдардан тұратын а а Сызықтық лгебр және нлитиклық геометрия элементтері Екінші және үшінші ретті нықтуыштр Аныктм Екінші ретті нықтуыш деп снын йтмыз. Бұл сн екі тік және екі жтық жолдрдн тұртын кестесі түрінде белгіленеді

Διαβάστε περισσότερα

Серіков Т.Ғ-ның АҢДАТПА Тақырыптың өзектілігі.

Серіков Т.Ғ-ның АҢДАТПА Тақырыптың өзектілігі. 6D071900 «Радиотехника, электроника және телекоммуникация» мамандығы бойынша PhD докторанты Серіков Т.Ғ-ның «Бағдарламалық IP PBX Asterisk негізінде өңделген телекоммуникациялық жүйелердің тиімділігін

Διαβάστε περισσότερα

ЦЕНТР ПЕДАГОГИЧЕСКОГО МАСТЕРСТВА АОО «НАЗАРБАЕВ ИНТЕЛЛЕКТУАЛЬНЫЕ ШКОЛЫ» ФАКУЛЬТЕТ ОБРАЗОВАНИЯ КЕМБРИДЖСКОГО УНИВЕРСИТЕТА

ЦЕНТР ПЕДАГОГИЧЕСКОГО МАСТЕРСТВА АОО «НАЗАРБАЕВ ИНТЕЛЛЕКТУАЛЬНЫЕ ШКОЛЫ» ФАКУЛЬТЕТ ОБРАЗОВАНИЯ КЕМБРИДЖСКОГО УНИВЕРСИТЕТА «НАЗАРБАЕВ ЗИЯТКЕРЛІК МЕКТЕПТЕРІ» ДББҰ ПЕДАГОГИКАЛЫҚ ШЕБЕРЛІК ОРТАЛЫҒЫ КЕМБРИДЖ УНИВЕРСИТЕТІНІҢ БІЛІМ БЕРУ ФАКУЛЬТЕТІ ЦЕНТР ПЕДАГОГИЧЕСКОГО МАСТЕРСТВА АОО «НАЗАРБАЕВ ИНТЕЛЛЕКТУАЛЬНЫЕ ШКОЛЫ» ФАКУЛЬТЕТ ОБРАЗОВАНИЯ

Διαβάστε περισσότερα

ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ АУЫЛ ШАРУАШЫЛЫҚ МИНИСТРЛІГІ ҚАЗАҚ ҰЛТТЫҚ АГРАРЛЫҚ УНИВЕРСИТЕТІ «ТАҒАМ ИНЖЕНЕРИЯСЫ» КАФЕДРАСЫ

ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ АУЫЛ ШАРУАШЫЛЫҚ МИНИСТРЛІГІ ҚАЗАҚ ҰЛТТЫҚ АГРАРЛЫҚ УНИВЕРСИТЕТІ «ТАҒАМ ИНЖЕНЕРИЯСЫ» КАФЕДРАСЫ ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ АУЫЛ ШАРУАШЫЛЫҚ МИНИСТРЛІГІ ҚАЗАҚ ҰЛТТЫҚ АГРАРЛЫҚ УНИВЕРСИТЕТІ «ТАҒАМ ИНЖЕНЕРИЯСЫ» КАФЕДРАСЫ «БЕКІТЕМІН» «Технология және биоресурстар» факультетінің деканы, а/ш.ғ.к. Буралхиев

Διαβάστε περισσότερα

Атом құрылысы және химиялық байланыс

Атом құрылысы және химиялық байланыс Қазақстан Республикасы Білім және ғылым министрлігі М.Ӛтемісов атындағы Батыс Қазақстан мемлекеттік университеті Д.К. Мендалиева, Ж.Ш.Султанова Атом құрылысы және химиялық байланыс Оқу құралы Орал, 013

Διαβάστε περισσότερα

ФИЗИКАЛЫҚ және КОЛЛОИДТЫҚ ХИМИЯ

ФИЗИКАЛЫҚ және КОЛЛОИДТЫҚ ХИМИЯ ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Ә. Қ. ҚОҚАНБАЕВ ФИЗИКАЛЫҚ және КОЛЛОИДТЫҚ ХИМИЯ Оқулық Қазақстан Республикасының Білім және ғылым министрлігі оқулық ретінде бекіткен АЛМАТЫ 2011

Διαβάστε περισσότερα

1-бөлім: Эрозия және үгілу. Үгілу мен эрозия арасында қандай айырмашылық бар?

1-бөлім: Эрозия және үгілу. Үгілу мен эрозия арасында қандай айырмашылық бар? Өзен эрозиясы ЖЕР ТУРАЛЫ ҒЫЛЫМДАР ГЕОЛОГИЯ ӨЗЕН ЭРОЗИЯСЫ 1-бөлім: Эрозия және үгілу Үгілу мен эрозия арасында қандай айырмашылық бар? Жердің рельефі Жер ландшафтын көтеретін және түсіретін түрлі процестердің

Διαβάστε περισσότερα

Қазақстан Республикасының Білім және ғылым министрлігі. Д.СЕРІКБАЕВ атындағы ШЫҒЫС ҚАЗАҚСТАН МЕМЛЕКЕТ ТЕХНИКАЛЫҚ УНИВЕРСИТЕТІ

Қазақстан Республикасының Білім және ғылым министрлігі. Д.СЕРІКБАЕВ атындағы ШЫҒЫС ҚАЗАҚСТАН МЕМЛЕКЕТ ТЕХНИКАЛЫҚ УНИВЕРСИТЕТІ Қазақстан Республикасының Білім және ғылым министрлігі Д.СЕРІКБЕ атындағы ШЫҒЫС ҚЗҚСТН МЕМЛЕКЕТ ТЕХНИКЛЫҚ УНИЕРСИТЕТІ Муслиманова Г.Е., Байзакова Г.. ТЕОРИЯЛЫҚ МЕХНИК СТТИК КИНЕМТИК ДИНМИК 509000 - «Кӛлікті

Διαβάστε περισσότερα

Е.М.Ахметов ГЕОФИЗИКАЛЫҚ ӘДІСТЕРІНЕ КІРІСПЕ

Е.М.Ахметов ГЕОФИЗИКАЛЫҚ ӘДІСТЕРІНЕ КІРІСПЕ ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ Қ.И.СӘТБАЕВ АТЫНДАҒЫ ҰЛТТЫҚ ТЕХНИКАЛЫҚ УНИВЕРСИТЕТІ Е.М.Ахметов ГЕОФИЗИКАЛЫҚ ӘДІСТЕРІНЕ КІРІСПЕ АЛМАТЫ 2015 ОЭЖ 550.8(075) Қ.И.Сәтбаев атындағы Казақ

Διαβάστε περισσότερα

Register your product and get support at

Register your product and get support at Register your product and get support at www.philips.com/welcome 40PFL6605H 32PFL6605H 40PFL6505H 32PFL6505H 40PFL6405H 32PFL6405H 46PFL5805H 40PFL5805H 52PFL5605H 46PFL5605H 40PFL5605H 40PFL5605K 32PFL5605H

Διαβάστε περισσότερα

Тақырыбы: 11 сынып оқушыларын ҰБТ-ге математика және физика пәндерінен дайындаудың кейбір тиімді әдістері.

Тақырыбы: 11 сынып оқушыларын ҰБТ-ге математика және физика пәндерінен дайындаудың кейбір тиімді әдістері. Тақырыбы: 11 сынып оқушыларын ҰБТ-ге математика және физика пәндерінен дайындаудың кейбір тиімді әдістері. Мақсаты: оқушыларға математика және физика пәндерінің арасындағы байланысты есептер шығару арқылы

Διαβάστε περισσότερα