64
Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019 1 http://astanabilim.kz/infor/c

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

1 http://astanabilim.kz/infor/c

Page 2: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

2 http://astanabilim.kz/infor/c

ӘОЖ 373.167.1

Автор:

Қасымов Берикжан Сырымович - №66 мектеп-лицейді жоғары санатты

информатика пәнінің мұғалімі, педагогика ғылымдарының магистрі

Рецензенттер:

Л.Н.Гумилев атындағы ЕҰУ, информатика кафедрасының профессоры, ф-м.ғ.к

Жалғасбекова Г.С.

«№66 мектеп-лицей» директорының ғылыми-әдістемелік іс жөніндегі орынбасар

Миркина О.Қ.

«№66 мектеп-лицей» информатика әдістемелік бірлестігінің жетекшісі

Абилова А.Т.

«C++ бағдарламалау тіліне кіріспе», 7-сынып, мұғалімдер мен оқушыларға

арналған әдістемелік құрал. –Астана қаласы, 2019. 60 бет.

Бұл курс оқушылар С++ бағдарламалау тілін жаңа бастаған оқушыларға және

жас ұстаздарға арналған. Курсты толық меңгеруде оқушылар алгоритмдеу,

процедуралық және графикалық режимде бағдарламалау туралы тереңірек біліп

шығады. Курс дәріс алушыларды С++ бағдарламалау тілінде есептерді

бағдарламалай алуға үйретеді.

Қазіргі таңда С++ бағдарламалау тілі арқылы математикалық есептеулерді

жүргізуге, графика және мультимедиа мүмкіндіктерін қолдануға және деректер

қорымен жұмыс жасауға қолайлы болып саналады, сондықтан бұл курс

оқушылардың логикалық ойлау қабілеттерін дамытуға дағдыландыраду үшін

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

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

информатика пән мұғалімдеріне аналған.

ISBN ©Астана қаласы, 2019

Page 3: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

3 http://astanabilim.kz/infor/c

І-бөлім.

C++ бағдарламалау тіліне кіріспе

1. Қарапайым бағдарламалар............................................................... 5

Бағдарламалау не үшін керек?....................................................

Бағдарлама құрудың екі жолы....................................................

Си тіліндегі қарапайым бағдарлама...........................................

Экранға мәтін шығару.................................................................

Бағдарламаны қалай қосу керек?................................................

Тез жабылуды тоқтату.................................................................

5

5

6

7

7

8

2. Айнымалылар...................................................................................... 9

Мәліметтердің түрлері және айнымалылар...............................

Екі санның қосындысын табу (енгізу және шығару)................

Арифметикалық амалдар.............................................................

Мәліметтерді шығарудың форматтары......................................

9

10

12

14

3. Нұсқаларды таңлау........................................................................... 17

Тармақталу не үшін керек?.........................................................

if - else шартты оператор............................................................

Күрделі шарттар...........................................................................

Switch қосқыш (көп жағдайларды таңдау)................................

17

18

19

21

4. Циклдер................................................................................................ 23

Циклдер не үшін керек?...............................................................

Белгілі санға дейінгі қадамдық цикл (for).................................. Шартты цикл (while).................................................................... Шартты кейін тексеретін цикл (do -while )................................ Циклдан ерте шығу......................................................................

Тізбектің қосындысын есептеу...................................................

23

23

25

26

27

28

5. Бағдарламаны тексеру әдістері....................................................... 30

Dev-C++ бағдарламасының тексеру құралдары......................... 30

6. Графикалық режимде жұмыс жасау.............................................. 35

Қарапайым графикалық бағдарлама...........................................

Сурет салуды қалай бастау керек...............................................

Бағдарламалар мысалдары..........................................................

35

36

39

7. Процедуралар........................................................................................... 40

Процедураға арналған есептердің мысалдары.......................... 40

8. Функциялар.......................................................................................... 44

Функцияның процедурадан айырмашылығы............................

Логикалық функциялар................................................................

Қайтарылатын екі мән..................................................................

44

45

46

Page 4: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

4 http://astanabilim.kz/infor/c

9. Бағдарламаның құрлымы.................................................................. 48

Бағдарлама бөліктерінің құрлымы.............................................

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

Бағдарламаның мәтінін даярлау.................................................

48

49

50

10. Анимация............................................................................................. 53

Анимация деген не?.....................................................................

Нысанның қозғалысы...................................................................

Пернелермен басқару...................................................................

53

53

54

11. Кездейсоқ және псевдокездейсоқ сандар......................................... 58

Кездейсоқ сан деген не?...............................................................

Қездейсоқ сандарды орналастыру..............................................

Кездейсоқ сандармен жұмыс істеуге арналған функциялар....

Берілген интервалдағы кездейсоқ сандар..................................

Экрандағы қар...............................................................................

58

58

59

59

60

Page 5: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

5 http://astanabilim.kz/infor/c

1. Қарапайым бағдарламалар

Бағдарламалау не үшін керек?

Кейде барлық есептерді дайын компьютерлік бағдарламалармен шепіп тастауға

болатын шығар деп ойлап қаласың. Көп жағдайларда компьютер орындайды,

бірақ тәжірибе көрсеткендей барлық есептер оңай стандартты құралдадың

көмегімен шығарылмайды. Мұндай жағдайда ол есептерді сіз ойлағандай етіп

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

Бағдарлама құрудың екі жолы.

Барлық бағдарламалау тілдері секілді Си бағдарламалау тілі де екі бөліктен

құрылады.

1) жіберу (трансляция) – бағдарлама мәтінін машина кодына айналдыру;

2) жинақтау (компоновка) – бағдарлама бөліктерін құрастыру және

стандартты функцияларды қосу.

Бұл бірнеше қадамдарды неге бір қадам қылуға болмайды? Жай

қарапайым программаларға болады, ал күрделі программалар үшін ол

екі қадам ыңғайлы және тезірек орындалады.

күрделі бағдарламалар бірнеше қарапайым бөліктерге

(модульдерге) бөлінеді, оны кезкелген адамдар өз деңгейінде

әртүрлі құруы мүмкін және ол бөліктер жеке-жеке қаралады;

сондықтан соңында осы бөліктерді (модульдерді) біріктіріп, толық

бір бағдарлама құру керек;

Page 6: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

6 http://astanabilim.kz/infor/c

бір бөліктегі (модульдегі) қатені түзету кезінде қайтадан

барлығын трансляциялау(машиналық тілге аудару) қажет емес (ол

он мың жолдан тұруы мүмкін);

компоновка кезінде көптеген жүйелерде басқа тілде жазылған

бөліктеді (модульдарды) қосуға болады, мысалы: Ассамблер

тілінде (машиналық тілде).

Си тілінің трансляторларын компилятор деп атайды: олар барлық

бағдарламаны машиналық кодқа лезде аударады (транслируют), бұл жағдай да

сол әрбір жолды жеке аударып отырмайды. Ал жеке жолдарды аударып

отыруды интерпретатор орындайды. Компилятор жасау бағдарламаның жұмыс

істеуін жақсартады (арттырады) және бағдарлама орындалатын компьютерге

интерпретаторды қою қажет емес.

Си тіліндегі негізгі файлдың кеңейтілімі *.c немесе *.cpp болып келеді

(*.cpp кеңейтілімі С++ бадарламасында да қолдануға болатындығын көрсетеді).

Ол кезкелген мәтіндік редакторда жазылған қарапайым мәтіндік файл, мысалы:

Блокнот бағдарламасында.

Транслятор негізгі файлды ( бағдарлама жазылған) машиналық кодқа

айналдырады және *.о кеңейтілімде сол файлдың атымен нысандық файл

құрады. Бұл файлда машиналық код жазылады, сонымен қатар нысандық

файлды компьютерде қосуға болмайды, себебі онда стандарттық функциялар

жеткіліксіз (мысалы: енгізу және шығару функциялары).

Жинақтаушы (компоновка) кітапханадағы стандартты функцияларды

қосады (олардың кеңейтілімдері *.а болады). Нәтижесінде *.ехе кеңейтілімі бар

бір файл пайда болады, ол дайын бағдарлама (программа) болып саналады.

Си –да жазылған қарапайым бағдарлама

Ондай бағдарлама 8 символдан тұрады. Төменде көрсетілген:

Негізгі программаға әруақытта main атынан басталады (назар аударыңыздар –

СИ үлкен және кіші әріптерді айыра алады, СИ –дің барлық стандартты

операторлары кіші әріптерден басталады). Қасындағы таза жақшалар main

операторының аргуметтері доқ екенін көрсетеді. Жүйелік жақшалар

бағдарламаның басын және соңын көрсетеді – ал біздің мысалда осы

жақшалардың ішінде ештеңе жоқ сондықтан бұл программа ешқандай жұмыс

Page 7: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

7 http://astanabilim.kz/infor/c

атқармайды, яғни ол СИ бағдарламасының ережесіне байланысты жазылған,

сонымен қатар осы қысқа бағдарламаны компиляциялауға және .exe –файлын

ауға болады.

Мәтінді экранға шығару

Енді қандай да бір керекті қызмет атқаратын бағдарлама құрайық, мысалы:

«Salem» сөзін экранға шығаратын бағдарлама.

Мәтінді экранға шығару

Стандартты функцияларды қолдану үшін трансляторға сондай атпен

функция бар екендігін және аргументтерінің типтерін қарап шығу туралы

команда беру керек, сонда ғана біз оны дұрыс қолданып жатқанымызды көре

аламыз. Яғни бағдарламаға осы функцияның сипаттамасын (жазылуын)

енгізуіміз керек. Си бағдарламасының стандартты функцияларының

сипаттамалары мен жиынтығы *.h кеңейтілімінде тақырыптық файлдар

қапшығында орналасқан (жолы: C:\Dev-Cpp\include).

Тақырыптық файлдарды қосу үшін директива (команда) #include

перепроцес-сорынан кейінгі жақшалардың ішіне файлдың аты жазылады.

Экранға ақпарат шығару үшін printf функциясы қолданылады. Қарапайым

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

аргументті қабылдайды.

Си тілінің кезкелген операторы нүктелі (;) үтірмен аяқталады.

Бағдарламаны қалай қосу керек

Бұл бағдарламаны тексеру үшін алдымен оған машиналық кодқа айналдыратын

трансляторды «іске қосу» керек, кейін стандартты функцияларды қосатын және

орындаушы файлды құратын компоновщикті қосу қажет. Бұлар бұрын пакеттік

файлдар немесе командалық жолға команда жазу арқылы орындалушы еді.

Жаңа шыққан бағдарламалар деңгейінде барлық бөліктерді (этаптарды) құрулар,

трансляциялаулар, жинақтаулар (компонват), бағдарламаны тексерулер мен

болдырмаулар (откладки) барлығы бір жерге біріктірілген және біріктірілген

орындаушы орта(IDE-integrated development environment) деп аталатын

арнайы бағдарламалық-қабықша ішінде орындалады. Оған төмендегілер кіреді:

#include <stdio.h> main () { printf("Salem"); }

Stdio.h файылында сипаттамасы орналасқан стандартты енгізу және шығару функцияларын қосу

Экранға шығару функциясын шақыру

Page 8: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

8 http://astanabilim.kz/infor/c

мәтіндерді пішімдеу (редактор текста)

жіберу (транслятор)

жинақтаушы (компоновщик)

болдырмау (қателерді жіздеу, өңдеу, отладчик)

Бұл ортада сізге бағдарламаның мәтінін теріп, қате жоқ болатын болса, онда

орындауға жіберуге арналған бір батырманы басу ғана қажет болады.

Dev-C++ бағдарламалық қабықшасында F9 батырмасын басу арқылы

бағдарламаны орындауға жібереміз. Егер бағдарламада қате болса, онда

қабықшаның төменгі жағында хабарлама шығады (өкінішке орай ол ағылшын

тілінде). Егер сол қателер жолының біреуіне шертетін болсақ, онда бағдарлама

мәтініндегі трасляторға ұнамай қалған жол ерекшеленеді.

Қателерді іздеу кезінде төмендегілерді ескеру қажет:

бағдарламадағы ерекшеленген мәтінде көбінесе қате болмайды, нақты

қате осы жолдың үстіндегі мәтін.

көбінесе бір қатенің өзі бірнеше қателерді шақырады және оларды

«бағытталған қателер» деп атайды.

Экранның тез жабылуын тоқтату

Жоғарыда көрсетілген «Salem» сөзін шығаратын бағдарламаны іске қосып

қарастыратын болсақ, онда бағдарламадағы нәтижені көру кезінде экран тез

жабылып қалатындығын байқаймыз және нәтижені көріп үлгермейміз. Мұндай

жағдайдан құтылу үшін бағдарлама жұмысын аяқтаған соң, кезкелген

батырманы басқанда ғана экран жабылатындай команда береміз.

Қандай жаңалық енгізілді?

getch(); функциясы кезкелген батырманы басқанша экранның

жабуды тоқтата тұрады;

бұл функцияның сипаттамасы conio.h тақырыптық файлында

орналасады;

бағдарламаның мәтініне түсініктемелерді кіргізуге болады, ол үшін

/* - симовлдары арқылы шамызда түсініктеме (комментарий)

жазамыз және */ символдары арқылы жабамыз. Бұндай

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

Page 9: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

9 http://astanabilim.kz/infor/c

2. Айнымалылар

Мәліметтердің түрлері (типтері) және айнымалылар

Мәліметтерді өңдеу үшін оларды жадта сақтау керек. Ол үшін сол

мәліметтермен байланысу немесе қарым-қатынас жасау қажет. Көп жағдайларда

адамдар бір-бірімен есімдерін айту арқылы қарым-қатынас жасайды,

бағдарламалауда да осындай әдіс қолданылады: жадтың әрбір ұяшығына (немесе

ұяшықтар тобына) жеке арналған ат беріледі. Осы атты қолдану арқылы

ұяшықтан ақпаратты оқуға болады және ұяшыққа жаңа ақпаратты жазуға

болады.

Компьютердің көзімен қарайтын болсақ жадтағы барлық мәліметтер – ол сандар

(нақтырақ –нольдер мен бірлердің жиынтығы). Сонымен қатар адамдар да,

компьютерлер де бүтін және нақты сандармен әртүрлі жұмыс істеу керектігін

біледі. Сол себепті әрбір бағдарламалау тілдерінде әртүрлі әдістерді қолданатын

көптеген мәліметтердің түрлері (типтері) бар. Мысалы:

бүтін типтер – int типі (ағылшынша integer – бүтін), жадтан 4 байт орын

алады;

нақты типті – float, бөлшек бөлігі болуы мүмкін айнымалылар

(ағылшынша floating point –жүзіген нүкте), 4 байт орын алады;

символдар – char (ағылшынша сharacter – символ), жадтан 1 байт орын

алады.

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

сипаттау керек –себебі айнымалыға керекті өлшемде компьютер жадының

ұяшығынан орын алып, оған ат берілу қажет. Айнымалылар көбінесе

бағдарламаның басында сипатталады. Сипаттау үшін айнымалының типінің

(түрінің) атын жазамыз (int, float немесе char), одан кейін үтір арқылы барлық

айнымалылардың аттарын жазамыз. Төмендегі мысалда келтірілгендей

қалауымыз бойынша жаңа ұяшыққа керекті мәнін жазуға болады. Егер

айнымалыға ешқандай мән берілмесе, онда ол «қоқыс» болып саналады.

Мысалдар:

Айнымалы – ол кейбір мәндерді сақтайтын және аты бар компьютер

жадындағы ұяшық. Айнымалының мәні бағдарламаның орындалу

барысында өзеруі мүмкін. Ұяшыққа жаңа мән берген кезде ескі мәні

өшіріледі.

Page 10: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

10 http://astanabilim.kz/infor/c

Екі санның қосындысын есептеу (енгізу және шығару)

Есеп. Пернетақтадан екі бүтін санды енгізу және олардың қосындысын экранға

жіберу

Есептің шығару жолын бірден Си тілінде жазайық

Қандай жаңа түсініктемелер алдыңыздар?

Бағдарлама жалпы 4 бөліктен тұрады:

o айнымалыларды сипаттау;

o берілген мәліметтерді енгізу;

o мәліметтерді өңдеу (есептеу);

o нәтижелерді шығару.

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

(әйтпесе компьютер берілгендерді енгізуді күтеді, ал қолданушы

компьютерге не керектігін түсінбейді).

Printf функциясындағы \n белгісі жаңа жолға көшуді қамтамасыз етеді.

Мәліметтерді енгізу функциясы scanf.

o Енгізу форматы – ол тырнақша ішіндегі екі немесе бірнеше форматағы

тағайындалған (бекітілген, берілген) мәліметтер, яғни жол немсе мәтін.

%d бүтін сандарды енгізу (int типті айнымалылар)

%f нақты сандарды енгізу (float типті айнымалылар)

%c бір символды енгізу (char типті айнымалылар)

o Үтір арқылы енгізілген айнымалылар жадтың ұяшығында есептелінеді,

яғни берілген мәнге байланысты жазады. Айырмашылығын көріңдер

«а» а айнымалысының мәні

«&a» а айнымалысының адресі

Page 11: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

11 http://astanabilim.kz/infor/c

o Жолдағы форматтардың сандары тізімдегі айнымалылардың адрестерінің

санына тең болу қажет.Сонымен қатар айнымалының типі сипатталуы

бойынша сәйкес келу керек. Мысалы: егер а және b – бүтін айнымалылар

болса, онда төмендегі функцияны жазу қате болып саналады.

Scanf( “%d%d”, &a); екінші енгізілген санды қайда жазу керек?

Scanf( “%d%d”, &a, &b, &c); c айнымалысының форматы берілмеген

Scanf( “%f%f”, &a, &b); бүтін типті айнымалыларды нақты типті

айнымалылар арқылы шығаруға болмайды.

Есептеулерді жүзеге асыру үшін меншіктеу операторы қолданылады

o теңдіктің оң жағында есептеуді орындауға арналған арифметикалық

өрнек орналасады;

o теңдіктің сол жағында нәтижелік айнымалы орналасқан, ол нәтижені

есептеп мәнін шығаратын айнымалы;

с=a+b; // a және b қосындысы с мәніне меншіктеліп жазылды.

Айнымалылардың мәндерін және сандарды экранға шығару үшін printf

операторы қолданылады

printf функциясының жақшасының ішіндегі мазмұны scanf функциясына өте

ұқсас.

o Арнайы сиволдарды қолданатын алғашқыда сиволдық жол жазылады, одан

кейін шығару форматы орналасады

%d бүтін санды шығару

%f нақты санды шығару

%c бір символды шығару

%s символдық жолды шығару

\n жаңа жолға көшу

қалған басқа символдар (арнайы командалардан басқа) экранға жай шығара

береді.

o Жолдың бір ғана форматы жеткіліксіз: мәліметтерді қандай орынға

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

Сондықтан енгізудің форматынан кейін үтір арқылы сандар тізімін немесе

айнымалыларды жазу керек, нәтиженің мәнін шығару, бұл жағдайда

есептеуді осы осы жерде орындап жіберуге де болады.

o Сол сиятық scanf функциясы үшінде шығару форматын, айнымалылар

санын және олардың типтерінің сәйкес екендігін қадағалап отыру керек.

Page 12: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

12 http://astanabilim.kz/infor/c

Арифметикалық өрнек

Арифметикалық өрнек неден құралады?

Арифметикалық өрнек меншіктеу операторының оң жағы болып саналады, оның

мазмұны бойынша төмендегілерден тұрады

бүтін және нақты сандардан (нақты типтерде бүтін бөлшек бөлігімен

нүкте арқылы ажыратылады)

арифметикалық амалдардың әрекетінен

+ - қосу, азайту

* / көбейту, бөлу

% бөліндінің қалдығы

стандартты функцияларды шақыру

abs(i) i бүтін санының модулі

fabs(x) x нақты санының модулі

sqrt(x) x нақты санының квадраттық түбірі

pow(x,y) x –тің y-дәрежесін есептейді

дөңгелек жақшалар іс-әректтердің өзгеру ретін анықтап отырады

Арифметикалық операциялардың ерекшеліктері

Бөлуді қолдану кезінде еске ұстау қажет

Бүтін санды бүтін санға бөлген кезде 7/4 қалдық 1-ге тең болады. Егер

нақты сан алғымыз келсе және қалдықты мәнін доңгелектемей шығарғымыз

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

қажет.

Барлық іс-әрекеттің іштерінен ең қиыны қалдықты шығарып алу болып

табылады. Егер a айнымалысын b айнымалысына бөлген кездегі қалдықты

kaldyk –деген айнымалыға меншіктеп табамыз. Яғни меншіктеу мына түрде

болады

Page 13: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

13 http://astanabilim.kz/infor/c

Арифметикалық операциялардың жазылуы

Бағдарламалау тілдерінде арифметикалық өрнектер бір жолға жазылады,

сондықтан олардың операциялардың орындалу ретін білу керек. Алдымен

орындалатындар

жақшаның ішіндегі операциялар, кейінгілер...

функцияны шақыру , кейінгілер...

көбейту, бөлу және бөліндінің қалдығы, солдан оңға қарай,

кейінгілер...

қосу және азайту, солдан оңға қарай.

Мысалы:

Ретінің орындалуына дөңгелек жақшалар қолданылады. Өрнек

𝑦 =4𝑥 + 5

(2𝑥 − 15𝑧)(3𝑧 − 3)−

5𝑥

𝑥 + 𝑧 + 3

Бғдарламалау тілінде төмендегідей жазылады

Меншіктеу операторының таңғажайыптары

Бағдарлам алау кезінде меншіктеу операторының таңғажайыптарын жиі

қолданады. Мысалы:

Математикалық көзқараспен қарағанда бұны теңдеу деп қарапстыру кезінде

мағынасы болмайды. Бірақта информатиктер тұрғысынан қарасақ, онда бұл

оператор і айнымалысын бірге арттыруды білдіреді. Яғни, оның мағынасы

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

сол і айнымалысына жазады.

Инкремент и декременет

Си тілінде бірге арттырудың арнайы анықталған операторлары бар

(инкременет)

ол меншіктеу операторының қызметімен бірдей

Page 14: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

14 http://astanabilim.kz/infor/c

және тез бірге кеміп отыратды (декремент), яғни ол

ол меншіктеу операторының қызметімен бірдей

Бірінші және екінші түрде жазылған опреаторлардың арасында кейбір айырма-

шылықтар бар, бірақ бұл айырмашылықтар күрделі операторлар немесе

шарттарда ғана орындалмай қалуы мүмкін.

Арифметикалық өрнектердің қысартылып жазылуы

Егер біз қандай да бір айнымалының мәнін өзгерткіміз келсе (бұрынғы

мәнін алып оған өзгерту енгізсек және оның нәтижесін сол айнымалыға

меншіктесек), онда арифметикалық өрнектердің қысқартылып жазылуын

қолданған ыңғайлы.

Қысқаша жазылуы Толық жазылуы

x + = a ; x = x + a ;

x - = a ; x = x - a ;

x * = a ; x = x * a ;

x / = a ; x = x / a ;

x % = a ; x = x % a ;

Мәліметтерді шығарудың пішімдері (форматтары)

Бүтін сандар

scanf және printf функцияларын шақырған кездегі алғашқы (негізгі)

параметр енгізу мен шығарудың пішінін анықтаайтын символдық жол болу

тиісті. Бүтін сандарды енгізетін scanf функциясы үшін айнымалының сипаттау

айнымалылар типін көрсеткені жеткілікті. Ол айнымалылардың форматтары

%d – бүтін сандар, %f – нақты сандар және %с –символдар болуы керек. Осы

кезде printf функциясы экранға нәтижені шығаруды қамтамасыз етіп отырады,

яғни берілген санды шығарудағы алаңының өлшемін анықтайды.

Төменде 1234 бүтін санын шығарудың пішімделуінің мысалы кестеде

көрсетілген. Сандарды шығару алаңын ұйымдастыру үшін оң және сол

жақтарынан жай жақшалар қойылу қажет.

Шығарудың мысалдары Нәтижесі Түсініктеме

p r i n t f ( “ [ % d ] ” , 1234) ; [1234] Ең аз мүмкін болатын алаң

p r i n t f ( “ [ % 6 d ] ” , 1234) ; [ 1234] Сол жақтан 6 орынды туралау

p r i n t f ( “ [ % - 6 d ] ” , 1234) ; [ 1234 ] Оң жақтан 6 орынды туралау

p r i n t f ( “ [ % 2 d ] ” , 1234) ; [1234]

Берілген 2 орынға сыймайды,

сондықтан шығару арлаңы

кеңейеді

Page 15: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

15 http://astanabilim.kz/infor/c

Символдарды шығару кезінде де кестедегі мысалдағыдай жазылулар жазылады,

бірақ %d орынына %с деп ауыстыру қажет.

Нақты сандар

Нақты сандарды енгізу мен шығарудың үш пішінін қолдануға болады %f, %e

және %g. Төмендегі кестеде %f пішінінің қолданылуы көрсетілген.

Шығарудың мысалдары Нәтижесі Түсініктеме

p r i n t f ( “ [ % f ] ” , 123.45) ; [123.450000] Ең аз мүмкін болатын бөлшек

бөлігі 6 орынды болатын алаң

p r i n t f ( “ [ % 9 . 3 f ] ” , 123.45) ; [ 123.450]

Барлығы 9 орынды, оның

ішінде бөлшек бөлігі 3 орын,

оң жақтан туралау

p r i n t f ( “ [ % - 9 . 3 f ] ” , 123.45) ; [123.450 ]

Барлығы 9 орынды, оның

ішінде бөлшек бөлігі 3 орын,

cоң жақтан туралау

p r i n t f ( “ [ % 6 . 4 f ] ” , 123.45) ; [123.4500]

Сан берілген 6 орынға

сыймайды (бөлшек бөлігіне 4

цифр), сондықтан шығару

арлаңы кеңейеді

%e - пішіні (форматы) ғылыми есептеулер кезіндегі өте үлкен және өте

кіші сандарды шығару үшін қолданылады, мысалы атомдардың өлшемдері

немесе Күнге дейінгі арақашықтық. Стандарттық түрдегі сандар деп аталатын

күйде көрсетіледі (ерекшеленген реті мен матиссасы). Мысалы, 123.45 саны

стандартты түрде жазылуы мүмкін 123.45=1.2345х102. Мұндағы 1,2345 –

мантиссасы (ол әр уақытта 1-ден 10 –ға дейін болады), ал 2 саны ол реті

(мантисса осы дәрежеде 10-ға көбейтіледі). %e - пішініде (форматында)

шығару кезінде орынының (позициясының) санын өзіміз енгізуге болады.

Сонымен қатар санды шығаруды ұйымдастырады және мантиссаның бөлшек

бөлігінің санын енгізуге мүмкіндік береді. Ал реті екі санмен көрсетіледі, яғни e

әріпінің алдына жазылған сан және реттік таңбасының алдына қойылған (қосу +

немесе – таңбалары) сан.

Шығарудың мысалдары Нәтижесі Түсініктеме

p r i n t f ( “ [ % e ] ” , 123.45) ; [1.234500e+02]

Ең аз мүмкін болатын

алаң, бөлшек бөлігі

мантиссаының 6 орыны

болатын алаң

p r i n t f ( “ [ % - 1 2 . 3 е ] ” , 123.45) ; [ 1.234е+02]

Барлығы 9 орынды, оның

ішінде бөлшек бөлігі 3

орын, оң жақтан туралау

p r i n t f ( “ [ % - 1 2 . 3 e ] ” , 123.45) ; [1.234e+02 ]

Барлығы 12 орынды,

оның ішінде бөлшек

бөлігі 3 орын

Page 16: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

16 http://astanabilim.kz/infor/c

маниссаныкі, cоң жақтан

туралау

p r i n t f ( “ [ % 6 . 2 е ] ” , 123.45) ; [1.23е+02]

Сан берілген 6 орынға

сыймайды (бөлшек

бөлігіне 2 цифр),

сондықтан шығару

арлаңы кеңейеді

%g - пішіні (форматы) бөлшек бөліктегі артық нөлдерді алып тастау үшін

және автоматты түрде пішіндерді қабылдау үшін қажет (стандартты түрде

немесе анықталған түрде).Өте үлкен және өте аз сандар түктесі өзгеріп отыратын

пішін (формат) таңдап қабылдайды (стандартты түрде). Бұл пішімде пішімнің

(позицияның) жалпы санын және қолданылатын цифрлардың санын беруге

болады.

Шығарудың мысалдары Нәтижесі Түсініктеме

p r i n t f ( “ [ % g ] ” , 12345) ;

p r i n t f ( “ [ % g ] ” , 123.45) ;

p r i n t f ( “ [ % g ] ” , 0 .000012345) ;

[12345]

[123.45]

[1.2345e-05]

Ең аз мүмкін болатын алаң,

6 орыны болатын алаң

p r i n t f ( “ [ % 1 0 . 3 g ] ” , 12345) ;

p r i n t f ( “ [ % 1 0 . 3 g ] ” , 12345) ;

p r i n t f ( “ [ % 1 0 . 3 g ] ” , 1 . 2 3 е - 0 5 ) ;

[ 1.23e+04]

[ 123]

[ 1.23e-05]

Барлығы 10 орынды, оның

ішінде 3 керекті цифр, оң

жақтан туралау.

Сол жақтан туралау үшін

( “ [ % 1 0 . 3 g ] ”

Page 17: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

17 http://astanabilim.kz/infor/c

3. Нұсқауларды таңдау

Тармақталу не үшін керек?

Қарапайым бағдарламаларда командалар бірінен соң бірі тізбектеліп

орындалады. Осылайша командалардың орындалуын сызықты алгоритм деп

атайды. Кейбір жағдайларда шатқа тәуелді екі нұсқаның бірін таңдауға тура

келеді, егер шарт ақиқат болса бірінші іс әрекетті, ал шарт жалған болса, онда

екінші іс әрекетті таңдау керек болады. Оларды орындау үшін тармақталған

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

арқылы ұсынылады. Си тілінде екі шартты оператор бар:

екі жағдайды (нұсқаны) таңдайтын If – else операторы

көп жағдайларды (таңдауды, нұсқаны) switch таңдау операторы

If – else шарт тексеру операторы

Есеп. Пернетақтадан екі нақты санды енгізу және олардың ішіндегі ең үлкені

қайсысы.

Есептің шарты бойынша бізге екі нұсқаның бір жауабын шығару қажет: егер

бірінші сан екінші саннан үлкен болса, онда оны шығару керек, егер олай

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

тәсілі көрсетілген: бірінші тәсілде бірден нәтижені экранға шығарады, ал

екіншісінде екі санның үлкенін Мax үшінші айнымалыға меншіктеп экранға

шығарады.

Page 18: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

18 http://astanabilim.kz/infor/c

Қандай жаңа ұғымдар алдық?

Шартты тексеру операторы мынандай түрлерге ие:

Бұл жазылу бір ғана оператордың орындалуын көрсетеді, сондықтан

«егер» блогы мен else сөзінің арасында ешқандай оператор жазылмауы

керек.

else сөзінен кейін ешқандай шарт қойылмайды - өйткені «әйтпесе» блогы

if операторы тексерген жақша ішіндегі шарт жалған болғанда орындалады.

Егер «егер» немесе «әйтпесе» бір оператор болса, онда жүйелік

жақшаларды жазбауға да болады.

Шартты тексеру кезінде логикалық қатынастардың белгішелерін

қолдануға болады:

> үлкен

< кіші

>= үлкен не тең

<= кіші не тең

= = тең

! = тең емес

Си тілінде кезкелген сан нөлге тең емес, сондықтан шарт ақиқат, ал нөл –

шарт жалған екендігін білдіреді.

Егер «Әйтпесе» блогында ешқандай әрекет істемеу керек болса, онда

шартты оператордың қысқаша жазылуын қолданамыз.

if (шарт) //шартты тексеру тақырыбы

{

. . . // «Егер» блогы – егер тексеру тақырыбындағы жақша ішіндегі

шарт ақиқат болғанда орындалатын оператор шар

}

else

{

. . . // «Әйтпесе» блогы – егер тексеру тақырыбындағы жақша ішіндегі

шарт жалған болғанда орындалатын оператор шар

}

Page 19: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

19 http://astanabilim.kz/infor/c

Мысалы алдындағы есептің шығару жолы мына түрде болар еді:

«егер» және «әйтпесе» блогтарында басқа да кезкелген операторлар болуы

мүмкін, соның ішінде қабаттасқан шарттар операторлар; бұл жағдайда else

операторы if шарты тексеру операторының ең жақын алдыңғысын

орындайды:

if (шарт)

{

. . . // ергер шарт ақиқат болса, не істеу керек?

}

Page 20: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

20 http://astanabilim.kz/infor/c

Бағдарламалау кезінде, барлық «егер» және «әйтпесе» блогтарының

жазылуында 2-3 символға оңға қарай жылжып отырады («сатылай»

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

Күрделі шарттар

Қарапайым шарттар бір қатынасты шарттан ғана тұрады (үлкен, кіші және т.б.).

Кейде екі немесе оданда көп қарапайым шарттарды біріктіріп жазуға тура

келеді. Мысалы, фирма 25-тен 40 жас аралығындағы адамадарды жұмысқа

қабылдайтын болды (25 пен 40 өздерін қоса есептегенде). Онда қарапайым

бағдарлама мындай болуы керек.

Page 21: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

21 http://astanabilim.kz/infor/c

Не жаңарды, қандай жаңа түсініктер алдық?

Логикалық операциялардың және белгілердің көмегімен екі немесе одан да көп

қарапайым шарттардың жиынтығы арқылы күрделі шарттарды жазуға болады.

o ЖӘНЕ амалы – біруақытта екі шартты орындауға негізделген.

шарт_1 && шарт_2

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

(ол шындық кестесі деп аталады).

шарт_1 шарт_2 шарт_1 && шарт_2

жалған(0) жалған(0) жалған(0)

жалған(0) ақиқат(1) жалған(0)

ақиқат(1) жалған(0) жалған(0)

ақиқат(1) ақиқат(1) ақиқат(1)

o НЕМЕСЕ амалы – біруақытта екі шарттың біреуін ғана орындайды

(немесе екеуін де орындайды)

шарт_1 | | шарт_2

Шындық кестесі төмендегідей түрде болады

шарт_1 шарт_2 шарт_1 && шарт_2

жалған(0) жалған(0) жалған(0)

жалған(0) ақиқат(1) ақиқат(1)

ақиқат(1) жалған(0) ақиқат(1)

Page 22: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

22 http://astanabilim.kz/infor/c

ақиқат(1) ақиқат(1) ақиқат(1)

o Күрделі шарттарда кей кезде ЕМЕС амалы қолданылады–

шарттың терістеуі (немесе кері шарт).

Мысалы, келесі екі шарттың құқығы немесе күші бірдей

A>B ! (A<=B)

Логикалық амалдар мен қатынастардың орындалу реті (приоритеті):

o амалдар жақша ішіне жазылады

o ЕМЕС амалы

o логикалық қатынастар >, <, >=, <=, ==, !=

o ЖӘНЕ амалы

o НЕМЕСЕ амалы

Орындалу ретін өзгерту үшін дөңгелек жақшалар қолданылады.

Switch қосылғышы (бірнеше таңдауды ұйымдастыру)

Егер кейбір бүтін немесе символдық айнымалылардың шамасына

байланысты бірнеше нұсқалардың ішінен біреуін таңдау керек болса, онда if

операторын қолдана отырып күрделі шарттарды жазу өте ыңғайсыз болады,

сондықтан Switch арнайы таңдау операторын қолданған ыңғайлы және тез

орындауға мүмкіндік береді.

Есеп. Пернетақтадан латын бас әріпін енгізген кезде сол әріптен басталатын

жануардың атын экранға шығаратын бағдарлама құру қажет.

Не жаңарды, қандай жаңа түсініктер алдық?

Switch көп жағдайды таңдау операторы жүйелік жақшаға алынған

тақырыпшадан және оператор денесінен тұрады.

Page 23: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

23 http://astanabilim.kz/infor/c

Тақырыптағы switch кілттік сөзінен кейінгі жүйелік жақшаның ішінде

айнымалының аты жазылады (бүтін немесе сиволдық типтегі). Осы

айнымалылардың мәніне байланысты бірнеше нұсқаулардың арасынан таңдау

ұйымдастырылады.

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

айнымалының мәні тырнақша ішіне жазылып, қос нүкте қойылады.

Break операторы тоқтау деген мағынаны береді, яғни switch операторының

денесінен шығу қызметін атқарады. Егер барлық break операторларын өшіріп

тастайтын болсақ, онда мысалы «B» әріпін жазатын болсақ, экранға мынадай

нәтиже шығады

Егер айнымалының мәні белгідегі қандай да бір мәнге сәкес келмесе, онда

үнсіз келісім бойынша default белгісінің мәні шығады (яғни басқа белгідегі

жоқ әріп жазылса немесе ештеңе жазбаған болса).

Бір операторға екі белгі қоюға болады. Мысалы, үлкен немесе кіші әріпті

түсіне алатындай етіп жазуға болады, ол үшін switch операторының денесіне

былай жазу жеткілікті:

т.с.с.

4. Циклдер

Циклдер не үшін керек?

Page 24: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

24 http://astanabilim.kz/infor/c

Экранға «Salem» амандасу сөзін 10 рет қайталап шығару үшін не істеу керек?

Әрине мұндай жағдайда printf операторын 10 рет жазу керек, ал 200 рет

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

тудырады. Сондықтан циклдарды қолдану керек.

Цикл - бірнеше рет қайталанатын командалар тізбегі.

Си бағдарламасында циклдердің бірнеше түрі бар.

Қадам саны белгілі цикл (for)

Көбінесе біз қандайда бір іс-әрекеттерді (операцияларды) неше рет орындай-

тынымызды (немесе есептеуімізді) біліп тұрамыз. Кейбір бағдарламалау

тілдерінде мұндай жағдайлар үшін repeat –«берілген санға байланысты

қайталау» циклдік операторын қолданады. Бұндай циклдерді қалай ұйым-

дастыру керек екендігін қарастырайық. Жады ұяшығынан орын алынады және

оған қайталану саны жазылады. Бағдарлама цикл денесінде бір рет орындалса,

онда жад ұшығындағы (санағыш) мәні 1 (бірге) азаяды. Осылайша жад

ұяшығындағы шаманың мәні нөлге тең болғанда цикл аяқталады.

Си бағдарламасында repeat циклі жоқ, ал for циклі бар. Ол ұяшықтағы

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

сәйкес жад алынады) және цикл денесінде оның шамасын қолдануға мүмкіндік

береді. Төменде «Salem» амандасу сөзін 10 рет қайталап шығарудың

бағдарламасының мысалы көрсетілген.

Қандай жаңа түсініктер алдық?

Қайталалау саны белгілі немесе есептелінген болса, онда for циклі

қолданылады.

Page 25: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

25 http://astanabilim.kz/infor/c

For циклі тақырыпшадан және цикл денесінен тұрады.

Тақырыпшада for операторы жазылғанан кейін дөңгелек жақша қойылады.

Ол жақшаның ішінде нүктелі үтір арқылы бір-бірінен ажыратылған үш өрнек

(алғашқы мән, шарт, қадамның соңындағы іс-әрекет) жазылады:

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

меншіктеу операторы;

циклдің келесі қадамы орындалатын шарты:

егер шарт ақиқат болса, онда циклсол қадаммен цикл соңына дейін

орындалады;

егер шарт жалған болса, онда цикл тоқтайды;

егер шарт ең басында жалған болса, онда цикл бір рет болсын

орындалмайды (бұл цикл орындалар алдында шарт тексеретін цикл)

циклдің әрбір қадамының соңындағы іс-әрекет (көп

жағдайларда ол меншіктеу операторы болады)

Тақырыпшаның әрбір бөлігінде бір-бірінен үтір арқылы ажыратылған

бірнеше опреаторлар болуы мүмкін. Тақырыпшаның бірнеше операторлар

арқылы жазылуының мысалы:

Цикл денесі жүйелік жақшалардың ішіне жазылады; егер цикл денесінде бір

ғана оператор болса, онда жүйелік жақшаны жазбауғада болады.

Цикл денсіне кезкелген басқа операторлар да жазылу мүмкін, сонымен қатар

басқада циклдар кіруі мүмкін (бұндай тәсілді «кірістірілген циклдер» деп

атайды).

Бағдарлама құруды оңай түсіну үшін, циклдің барлық денесін шектеп тұрған

жүйелік жақшаларды оңға қарай 2-3 символға жылжыту керек («саты»

түрінде жазылу).

Санның квадраты неге тең?

N санын пернетақтадан енгіземіз және 1-ден N-ге дейінгі бүтін садардың

квадраттарын экранға шығаратын бағдарлама құрайық.

Біз екі айнымалыны жарияладық (сипаттадық): N-ең үлкен сан, i – көмекші

айнымалысы, ол 1-ден N-ге дейінгі барлық сандардың мәндерін циклде

Page 26: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

26 http://astanabilim.kz/infor/c

қабылдайтын айнымалы. N-ге мән беру кезінде біз %d форматында Scanf

функциясын қолдану арқылы экранға хабарлама шығардық (бүтін снын енгізу).

Циклге кірер кезде i=1 операторы орындалады, яғни алғашқы мәні 1-ден

басталады, одан кейін i айнымалысы әрбір қадам сайын 1-ге артып отырады

(i++). Цикл i<=N шарты ақиқат болғанша орындалады. Цикл денесіндегі жалғыз

оператор бар, ол берілген форматына байланысты экранға санның өзін және

оның қасына сол санның квадратын шығару операторы ғана орналасқан. Саныды

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

Шартты цикл (While)

Қандай да бір операцияны қанша рет орындау керектігі жайлы алдын ала

болжауға немесе айтуға болмайды, бірақ циклдің аяқталатындығын тексеретін

шартты анықтауға болады. Қазақ тілінде ондай тапсырмалар мынадай болуы

мүмкін: әзірше ол аяқталғанша, осы жұмысты істей бер (әзірше ағашты кесебер,

толық кесіліп біткенше; әзірше есікке жеткенше тура жүре бер). «Әзірше» сөзі

ағылшын тіліне аударғанда while дегенді білдіреді және while циклі деп аталады.

Есеп. Бүтін санды шығару және ол санда қанша цифр бар екенін анқытау

керек.

Бұл есепті шығару үшін мынандай алгоритм қолданылады. Санды 10-ға бөліп

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

болғанша қайталай береміз. Оны санауды арнайы айнымалының(ол санағыш деп

аталады) көмегімен орындаймыз, санда неше цифр болған және неше рет бөлу

операциясы орындалады. Неше рет санды бөлу керектігін алдын ала анықтауға

болмайтындығы түсінікті жағдай, сондықтан шартты циклді қолдану қажет

болады.

Шартты кейін тексеру циклі (do - while)

Page 27: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

27 http://astanabilim.kz/infor/c

Кем дегенде бір рет циклді орындау керек болатын жағдайлар да бар, одан

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

шарт жалған болса, онда оны аяқтау. Сондықтын осындай жағдайды есептеу

үшін шартты кейін тексеру циклін қолданған жөн (яғни шарт цикл басында

емес, уикл сонңында тесереру). Оны көп жағдайда қолдана беруге болмайды,

себебі ол мынандай жағдайды еске түсіреді: бассейінге секірдім, және онда

сур бар ма әлде жоқ па екендігіне кейін қарадым. Оны қолдану кезінде

шындыққа ұласатын жағдайын қарастырсақ.

Есеп. Бүтін санды енгізу және осы санның цифрларының қосындысын

анықтау керек.

Кезкелген бағдарлама құру кезінде, мәліметтерді енгізу жолында қате

жоқ екендігіне және қате мәлімет енгізіп қомағанына қорған болуды

қамтамасыз ету керек (кей кездерде мұндай қорғануды «жәрместен қорғану»

- fool proof). Қолданушы мәліметтерді бірнеше рет қате енгізуі мүмкін, онда

шартты циклді қолданған жөн. Бір жағынан бір рет ғана сан енгізу керек,

сондықтан шартты кейін тексеретін циклді қолданған дұрыс.

Алдыңғы мысалдағы бағдарламаға қарағанда бұл бағдарламада әрбір

бөлу операциясы орындалғанан кейін қалдықтарды анықтау керек (соңғы

цифра санды 10-ға бөлгендегі қалдыққа тең) және арнайы айнымалыға

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

Қандай жаңа түсініктер алдық?

Page 28: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

28 http://astanabilim.kz/infor/c

Циклдің қайталану саны алдын ала белгісіз және есептелінбейтін жағдайда

do-while циклі қолданылады.

Цикл do тақырыбынан, цикл денесінен және аяқтаушы шарттан тұрады.

Шарт дөңгелек жақшаның ішіне while сөзінен кейін жазылады, шарт ақиқат

болғанша цикл орындала береді; егер шарт жалған болса, онда цикл

тоқтайды.

Шарт циклдің соңғы кезектегі қадамында ғана тексеріледі (бұл цикл

шартты кейін тексеру циклі), сондықтан цикл бір рет болсын орындалады.

Егер шарт ешқашан жалған болмайтын болса, онда цикл мүлдем тоқтамайды,

ол бағдарлама «циклденіп қалған» деп аталады, бұл өте қауіпті логикалық

қате.

Цикл денесі жүйелік жақшаның ішіне жазылады; егер циклде тек бір ғана

оператор болса, онда жүйелік жақшаны жазбауға да болады.

Цикл денесіне басқада кезкелген операторлар жазылуы мүмкін, сонымен

қатар басқа да циклдер енуі мүмкін (мұндай тәсіл «кірістірлген циклдар» деп

аталады).

Бағдарлама құруды оңай түсіну үшін, циклдің барлық денесін шектеп тұрған

жүйелік жақшаларды оңға қарай 2-3 символға жылжыту керек («баспалдақ»

түрінде жазылу).

Циклдан ертерек шығу

Кейбір кездерде циклдің кезекті қадамын күтпей-ақ шығып, келесі оператор-

ларға көшуге мәжбір болады. Ол үшін анайы break операторы қолданылады.

Циклдің кезекті қадамын аяқтап, тез арада келесі жаңа қадамға көшу керек деп

компьютерге команда беруге болады (циклдан шықпай орындау) – бұл жағдайда

continue операторы қолданылады.

Есеп. Екі бүтін санды бөлудегі бүтін және қалдық бөлігін анықтайтын

бағдарлама құр. Бағдарлама циклде орындалуы қажет, яғни бөліндінің және

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

қаталайды. Егер екі санда нольге тең болса, онда циклден шығу керек және

бағдарламаның жұмысын аяқтау қажет. Бағдарлама екінші санның нольге

тең болғанда «Санды нольге бөлуге болмайды» деген қатені шығаратындай

болу қажет.

Осы есептің ерекшелігі мынада: циклге кіріп, циклдің соңына дейін кезекті

қадамдарды орындау қажет ендігіне, не қажет емес пе екендігін анықтай

алмаймыз. Керекті ақпаратты тек мәліметтерді пернетақтадан енгізгенен кейін

ғана ала аламыз. Сондықтан бұл жерде шексіз аяқталмайтын цикл қолданылады

while (i) {. . .} (Си тілінде бір саны ақиқат шартқа жататын есекеру керек).

Мұндай циклден тек арнайы break операторының көмегімен шығу қажет.

Page 29: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

29 http://astanabilim.kz/infor/c

Егер екінші сан нольге тең болса, онда циклдің қалған бөлігін орындаудың

қажеті жоқ. Ол үшін continue операторы қызмет атқарады.

Қандай жаңа түсініктер алдық?

Цикл денесінде есептерді жүргізу және циклді жалғастыру тек циклдің ішінде

ғана мүмкін болады (мысалы, берілген мәндерді енгізу кезінде), көбінесе

ішінде break операторы бар шексіз тоқтамайтын цикл қолданылады.

break операторының көмегімен кезкелген (for, while, do-while) циклдан

мерзімінен бұрын шығуға болады.

Кезекті қадамды мерзімінен бұрын аяқтау үшін және бірден келесі қадамға өту

үшін continue операторы қолданылады.

Тізбектің қосындысын есептеу

Элементтердің берілген санға дейінгі қосындысы

Есеп. Тізбектің бірінші 20 элементінің қосындысын табу керек

𝑆 =1

2−

2

4+

3

8−

4

16+ ⋯

Бұл есепті шешу үшін элементтердің өзеру заңдылығын анықтау керек.

Берілген жағдайда нені өзгертуге болады:

кезкелген элемент бөлшек бөлып саналады;

Page 30: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

30 http://astanabilim.kz/infor/c

бөлшектің алымы келесі элементке өткен сайын 1-ге артып отырады;

бөлшектің бөлімі келесі элементке өткен сайын 2 есе артып отырады;

бөлшектердің алдындағы таңбалары кезектеп ауысып отырады (плюс,

минус және т.с.с).

Тізбектің кезкелген элементін төмендегідей түрде жазуға болады

а𝑖 =𝑧𝑐

𝑑

Мұндағы, z, c және d айнымалыларының өзгеруі келесі кестеде көрсетілген

(бастапқы бес элемент үшін)

I 1 2 3 4 5

z 1 -1 1 -1 1

c 1 2 3 4 5

d 2 4 8 16 32

z айнымалысының таңбасы өзгереді (бұл амалды былай жазуға болады z=-z), с-

айнымалысы 1-ге артып отырады (с++), ал d айнымалысы 2-ге көбейтіледі

(d=d*2). Есепті шығару жолының алгоритмін мынандай қадамдарға бөліп жазуға

болады:

S айнымалысының 0 мәнін береміз; бұл ұяшықта қосынды есептеледі;

z, c және d айнымалыларының бастапқы мәндері (бірінші элементке)

z=1, c=1, d=2.

20 рет орныдау:

o қосындының мәніне кезектегі элементтің мәнін қосады;

o z, c және d айнымалыларының мәндеріне келесі кезектегі элемент-

тің мәнін беру.

Page 31: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

31 http://astanabilim.kz/infor/c

Шектеуші шартқа тәуелді қосынды

Элементтер саны белгісіз болғандағы күрделі есептерді қарастырайық

Есеп. Тізбектің барлық элементтерінің қосындысын табу керек

𝑆 =1

2−

2

4+

3

8−

4

16+ ⋯,

модулі бойынша 0,001 –ден кем емес болған жағдайда

Бұл есептің шешімі тізбектің элементтері модулі бойынша кемитін және

нольге қарай ұмтылған жағдайда ғана болады. Қанша элемент қосындыға

кіретіндігін біз білгендіктен while немесе do-while циклдерін қолданған жөн.

Есепті шығару жолының бір нүсқасы төменде көрсетілген.

Егер а айнымалысының мәні 0,001 –ден кіші болған кезде цикл аяқталады.

Бағдарлама бірінші қадамнан циклге кіру үшін а айнымалысына 0,001 –ден

басқа кезкелген мәнді беру керек.

Егер а айнымалысы азаймайтын болса, онда циклдің тақырыптағы шарт

ақиқат болады және бағдарлама «циклденеді».

5. Бағдарламаны тексеру әдістері

𝐃𝐞𝐯 − 𝐂 + + бағдарламасының тексеру құралдары

«Тексеру» («откладка») деген не?

«Тексеру» сөзі «іздеу және бағдарламадағы қателерді дұрыстау дегенді

білдіреді. Сәйкесінше ағылшынның debugging (тікелей аударғанда «шіркейді

жою») деген сөзінен шыққан. Ол 1940 жылы Mark II компьютерінің

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

пайда болған.

Бағдарламаларда үш түрлі қателер бөлінеді:

Page 32: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

32 http://astanabilim.kz/infor/c

синтаксистік – операторларды жазу кезіндегі қателер (мысалы: printf

операторының орынына көбінесе print деп қате жазады); мұндай

қателерді қай жолда тұрғандығын транслятор лезде тауып бергендік-

тен тез арада оңай түзетуге болады;

орындаудағы уақыттың қателері (ощибки времени выполнения)-

жұмыс істеу «апаттық» жағдайлар болғанда болатын қателер,

мысалы: «нольге бөлу» кезңнде т.с.с.

логикалық – алгоритімдегі қателер (бағдарлама жұмыс істеп тұрады,

бірақ басқа нірселерді орындайды, бұндай жағдайда не қылу керек);

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

олар кей кездерде қате жазылған команданың қасында емес басқа

жерлерді көрсетіп тұрады.

«Тексеру» кезінде ең қиыны –ол қателерді табу, яғни қате жазылған

операторды анықтап табу. Қате жазылған операторды табу

автоматтандырылмаған, оны тек адам тауып түзете алады. Мұндай тексеру

жұмысын жеңілдету алдамшы тәсілдер ойлап тапқан және ол үшін арнайы

«тексерушілер» («отладчики») бағдарлама жазған.

Трассировка

Трассировка – ол жұмыс істеу кезіндегі бағдарламаның қандай да бір

нүктесінде сигналдық хабарламаларды шығаруды ұйымдастырады.

Біріншіден: ондай хабарламаны алғанан кейін біз білеміз бағдарлама сол

нүктеге түскендігін (жұмысты апаттық жағдайда аяқтаған жоқ және циклденген

жоқ). Екіншіден: бұл хабарламалар арқылы тек мәтіннің қателіктерін ғана емес,

сонымен қатар айнымалының мәндерін дұрыс есептегендігін тексеруге мүмкін-

дік береді. Егер екінші бақылау нүктесіндегі барлық айнымалылардың мәндері

ақиқат болса, ал үшінші бақылау нүктесінде жалған болса, онда қатені осы екі

нүктелердің арасынан іздеу керек.

Бұл бағдарламаның үш нүктесінде (1,2 және 3) трассировка операторлары

орналасқан:

Page 33: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

33 http://astanabilim.kz/infor/c

1-ші нүктеде пернетақтадан енгізілген х айнымалысының мәнін біз

экранан көреміз –осылайша оның дұрыс енгізілуін қадағалаймыз.

2-ші нүктеде циклдің әрбір қадамындағы айнымалыларының мәндерін

экранға шығарамыз. Ол мәнді қолмен есептегенізбен салыстыруға мүмкіндік

береді және цикл ішінде есептеулер дұрыс жүріп жатқандығын анықтайды.

3-ші нүктеде цикл аяқталғанан кейін х айнымалысының мәнін экранға

шығарады.

Көріп отырғанымыздай трассировканы практикалық тұрғыдан әр уақытта

қолдануға болады, ол үшін тексеру-бағдарламасы қажет емес.

Кодтың бір бөлігін өшіру Жұмыс істеп тұрған бағдарламаны күрлендіре отырып түрлендіретін болсақ,

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

Мұндай жағдайларда бағдарламадан жаңа жазылғңан кодтарды алып

тастауымыз керек және оларды «аз мөлшерде» бағдарламаларға қосып

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

құртатығын көреміз. Кей кездерде кодтарды бағдарламадан алып тастағың

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

Бір жолды өшіре тұру үшін сол жолдың басына барып // символдарын

жазсаңыз жеткілікті. Ал толық блокты өшіре тұрғыңыз келсе көп жолдық

түсініктемелер белгісін қолданамыз, ол /* символынан басталып, */ символвнан

аяқталады (осында және әрі қарай көп нүкте қандай да бір команданы береді).

Page 34: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

34 http://astanabilim.kz/infor/c

Қадамдап орындау Бағдарлама стандартты қарапайым түрде тоқтамастан басынан бастап

соңына дейін орындалып шығады. Тексерудің ең тиімді және жақсы жағы –

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

командыны орындап болғасын тоқтайды және жадтағы айнымалының мәнін

тексеріп отырады. Мұндай мақсатты іске асыру үшін – тексергіш (откладочки)

деген арнайы бағдарлама қолданылады.

Dev-C++ бағдарламасымен бірге GDB –тексергіші орнатылады. Тексермес

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

тоқтататын жолды белгілеу керек. Ол үшін бағдарламаның қара фонындағы

керекті жолдың басына апарып, тышқанның сол жақ батырмасын шертеміз.

Тағыда екінші рет шертсек осы орындағы жолды тоқтатуда шығып кетеді.

Сонымен қатар Ctrl+F5 комбинациясының көмегімен курсор тұрған жердегі

жолдың тоқтату нүктесін құруға және алып тастауға болады.

Егер бағдарламада кемдеген де бір тоқтату нүктесі бар болса, онда F8

батырмасын басу арқылы оны тексеру күйіне түсіруге болады. Тоқтатушы

(откладчик) бағдарламаны бірінші кездескен тоқтату нүктесінде тоқтату қажет.

Бұдан кейін F7 батырмасын басып тұру арқылы, бағдарламаның қадамдық күйде

орындалуын ұйымдастыруға болады.

Бірақ бұл күйде тексеруші шақырушы процедураларға кіруге рұхсат

бермейді (қадамдап өтуде негізгі бағдарлама ғана жұмыс істейді). Процедураға

немесе функцияға кіру Shift+F7 комбинациясы қолданылады.

Ctrl+F7 батырмаларының комбинациясының басу арқылы тексеруші келесі

тоқтау нүктесіне дейін орындайды. Тексеруді тоқтату үшін Ctrl+Shift+F2

батырмаларының комбинациясын басу қажет.

Айнымалылардың мәнін тексеру

Бағдарламаларды

қадамдық тексеру – ол тек

бағдарламада қандай опера-

торлар, қанша рет және қалай

тізбектеліп орындалатын-

дығын қадағалайды. Бірақта

ол қателерді жиі тексеруге

жеткіліксіз болып табылады.

Бағдарламалардың

орындалуы кезінде айныма-

лыларыдың мәндерінің қате-

ліктерін тексеруді қарау ең

жоғары дәрежедегі құрал

болып табылады.

Егер тексеру кезінде

бағдарла-маның мәтініндегі айнымалының үстіне тышқанның курсорын жақын-

дататын болсақ, онда оның мәні ағымды уақытта және лезде сол жақтағы терезде

пайда болады.

Page 35: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

35 http://astanabilim.kz/infor/c

Бағдарламаны қолмен айналдыру Кейде кейбір тексерулер көмектеспесе, онда бағдарламаны қолмен

тексеруге тура келеді, яғни компьютермен тексермей қағазға қолмен жазу

арқылы шамалар мен айнымалыларға мән беру арқылы нәтижені тексеру.

Барлық айнымалылардың өзеруін көп жағдайда кесте құрып, нәтиженің

өзгерістерін жазады (белгісіз айнысалы көбінесе сұрақ белгісімен белгіленеді).

Натурал санды беріп, ол сан жай сан ба, әлде жоқ па екендігін анықтайтын қате

бағдарламаны қарастырып көрейік. Біздің көзіміз жетеді ол бағдарламаның қате

нәтиже беретіндігіне, егер N=5 берген кезде, ол 5-ті жиындық сан деп жауап

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

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

Қолмен тексеру арқылы біз бұл бағдарлама N санының өзіне-өзі

бөлінетіндігін тексереміз, яғни count санағышының бөлінгіштері нольге тең

анықтайды. Қателерді тапқанан кейін оны түзету оңай. Ол үшін циклдегі шартты

i<N шартына өзгерткен жеткілікті.

Соңғы мәндерді тексеру Берілген мәліметтердің мүмкін болатын аралықтағы нақты мәндеріне байла-

нысты бағдарламаның (функцияның) жұмысын тексеру өте маңызды. Мысалы:

қарапайым натурал санның жай сан екендігін анықтайтын бағдарлама ол 2 саны

үшін жұмыс істейтіндігін тексеру (1-саны жай санға да, құрама санға да

жатпайды). Сол сияқты сөйлемде (мәтіндік жолда) берілген сөзді іздеу кезінде,

сол сөздің сөйлем басында, не сөйлем соңында кездесіп қалатындығын қадағалау

керек.

Page 36: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

36 http://astanabilim.kz/infor/c

6. Графикалық режимде жұмыс жасау

Қарапайым графикалық бағдарлама

Си бағдарламалау тілінде графикалық бағдарлама сэндвичке ұқсайды.

Қазір біз қарапайым графикалық бағдарлама жазып көрейік. Ол ешқандай

пайда бірнеңе жасамайды, жай ғана сурет салуға арналған қарапайым терезе

ашады, яғни кезкелген пернені басуды күтеді және осы терезені жабады. Майсыз

сэндвич секілді, бағдарлама да толық қанды емес.

Қандай жаңа түсініктер алдық?

Графикалық функцияларды қолану үшін graphics.h тақырыптық файлын

қосу керек.

Initwindow функциясы сурет салуға арналған қосымша терезені ашады.

Осы терезенің ені мен биіктігін өзерту үшін, жақша ішінде терезенің

ұзындығы мен биіктігіен енгізу қажет.

Графикасы бар терезеден шығу үшін, closegraph функциясының

көсмегімен іске асады.

Page 37: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

37 http://astanabilim.kz/infor/c

Сурет салуды қалай бастау керек. Нүктенің координаттары

Экранда қандай да бір сурет салу керек. Ол үшін координатаны қалай

елестету керек екендігін анықтау қажет.

Координатаның басы (0,0)

нүктесі сол жақ жоғары

бүрышта орналасады;

х-өсі оң жаққа бағытталған, ал

у-өсі төменге бағытталған;

х-өсі үшін кез келген нүктесінің

арақашықтығы терезенің сол

жақ шекарасына дейін, ал у-өсі

үшін жоғарғы шекараға дейін.

Түстер Сандық және символдық белгілеуле 16 түстер үшін берілген:

0 BLACK қара 8 DARKGRAY күрең-сұр

1 BLUE көк 9 LINGHTBLUE көгілдір

2 GREEN жасыл 10 LINGHTGREEN ашық-жасыл

3 CYAN теңіз толқыны 11 LINGHTCYAN ашық теңіз толқыны

4 RED қызыл 12 LINGHTRED қызғылт

5 MAGEN

TA

күлгін 13 LINGHTMAGENTA ашық-күлгін

6 BRAWN қоңыр 14 YELLOW сары

7 LIGHTG

RAY

ашық-сұр 15 WHITE ақ

Сонымен қатар түстердің толық палитрасын қолдануға болады (нақты түсі, True

Color режимі). Бұл жағдайда түстер үш түстен құралады: қызыл (R), жасыл(G)

және көк(B). Бұл түстердің әр біреуі 0-ден 255 –ке (256) дейінгі бүтін сандар

жиынтығынан құралады, яғни осыдан 2562=16 777 216 барлық түстер саны

шығады. Түстер COLOR функциясының көмегімен салынады, оның

жақшасының ішіне үтір арқылы R, G және В түстерінің номерлері жазылады

(осы ретпен). Мысалы, кейбір түстердің жазылуы:

COLOR(0,0,0) қара

COLOR(255,0,0) қызыл

COLOR(0,255,0) жасыл

COLOR(0,0,255) көк

COLOR(255,255,255) ақ

COLOR(100,100,100) сұр

COLOR(255,0,255) күлгін

COLOR(0,255,0) сары

Setcolor түзудің (сызықтың) түсін орнатады:

Page 38: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

38 http://astanabilim.kz/infor/c

Бұл командадан кейін жазылған барлық түзулер, төртбұрыштар, шеңберлер т.б.

примитивтердің жиегіндегі сызықтарының түстері ашық-жасыл түске боялады.

Графиканың терезесі ашылғанан үнсіз келісім бойынша ақ түс орнатылады

(ешқандай қосымша көмексіз).

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

ның көмегімен әрбір пиксельге өзіне тән түс беруге болады.

Getpixel функциясы кезкелген терезенің түсін анықтайды

Жеке пикселдермен жұмыс жасау Line командасының көмегімен кесіндіні салуға болады:

Кесінділерді салудың басқа түрлері де бар: бірінші moveto командасының

көмегімен курсорды (х1, у1) бастапқы нүктесін орнатамыз, екінші lineto

командасының көмегімен (х2, у2) нүктесіне кесінді сызамыз.

Lineto командасы орындалғаннан кейін курсор (х2, у2) нүктесіне орын

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

ыңғайлы.

Төртбұрыштар

Төртбұрышты салу үшін қарама-қарсы жатқан екі төбенің

координаттарын жазу қажет (диогональ бойынша, көбінесе

жоғарғы сол жақ және төменгі оң жақ нүктелерін алады).

setcolor ( 10 ); // ақшылт-жасыл түсті орнатады

setcolor (COLOR(255,0,255)); // күлгін түсті орнатады

putpixel (x, y, 14); // (x, y) нүктелерін сары түске бойайды

n=getpixel(x, y); // n айнымалысына (x, y) нүктелерін түсін жазу

Line (x1, y1, x2, y2); // (x1, y1) – (x2,y2) кесіндісі

moveto (x1, y1); // (x1, y1) – нүктесіне курсорды апару

lineto (x2, y2); // (x2, y2) – нүктесіне сызылған кесінді

setcolor(12); // қызыл түс

moveto (x1, y1); // курсор бірінші нүктеде

lineto (x2, y2); // екінші нүктеде жүргізілген кесінді

lineto (x3, y3); // т.с.с.

lineto (x4, y4);

lineto (x5, y5);

Page 39: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

39 http://astanabilim.kz/infor/c

Жиегінің түсін setcolor функциясының көмегімен орнатады, ал төртбұрыштың

өзі rectangle командасының көмегімен салынады.

Боялған төртбұрышты bar командасы арқылы саламыз.Түсін және стилін алдын

ала setfillstyle функциясының көмегімен оратып аламыз.

setfillstyle командасындағы бірінші сан құйып бояудың стильін береді:

0 – құйып бояуды (заливка) өшіру

1 – толық құйып бояу

3, 4, 5, 6 – қиғаш сызықтар

7, 8 – тор көз (сетка)

9, 10, 11 – нүктелік оюлар, ал екінші сан ол түстің номері.

Шеңбер

Шеңбердң салу үшін circle функциясы қолданылады:

Circle функциясындағы жақшаның ішіндегі сандар ол шеңбердің центрінің

координасаы және үшінші сан пикселде берілген шеңбердің радиусы. Олардың

мәндері сандар болуы, айнымалы аттары және арифметикалық өрнек болулары

мүмкін. Мысалы:

Шектелген аймақты бояу

Кей кездері контурмен шектелген аймақты бояуға тура келеді. Оны floodfill

функциясының көмегімен іске асырамыз.

Шектелген аймақты бояу үшін сол аймақтың ішіндегі бір нүктесінің

координатасын (х, у) білу қажет. Сонымен қатар аймақтың шекарасын ішкі

аймақтың түсімен бірдей қылу қажет. Шекараның түсі тізім бойынша ең соңғы

жазылып, floodfill функциясына беріледі.

Жазулар

Outtextxy функциясы терезенің кезкелген жеріне мәтін

жазуға мүмкіндік береді. Оған жоғарғы сол жаққа қарап (х,

setcolor(9);

rectangle (x1, y1, x2, y2);

setfillstyle (1, 12 ); // стиль 1, стиль 2

bar (x1, y1, x2, y2);

setcolor (COLOR(0, 255, 0)); // жасыл түс

c i r c l e (x, y, R); // шеңбер салу

c i r c l e (200, y0+20, R); // шеңбер салу

se tfillstyle (1, 11); // стиль 1, түс 11

floodfill (x, y, 0); // шекараға дейінгі түс 0

Page 40: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

40 http://astanabilim.kz/infor/c

у) координаталарын береміз. Мәтіннің түсін setcolor функциясының көмегімен

орнатамыз.

Мысалдардың бағдарламалары

Стандартты функцияларды пайдаланып үйдің суретін салу бағдарламасын

құрайық. Осы есептің бағдарламасын өз бетімен түсінуге тырысайық.

setcolor (9);

outtextxy (x, y, “Kanat”);

Page 41: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

41 http://astanabilim.kz/infor/c

7. Процедуралар

Процедуралармен шығарылған есептердің мысалдары

Суреттегі фигуралар бірдей болатын болса,

онда бағдарламадағы сол фигуралардың

процедураларын ерекшелеп көшіре қою жиі

қолданылады. Түстері әртүрлі үш бірдей

үшбұрыш салатын бағдарлама құрайық.

Әрине ол үш үшбұрышты жеке-жеке

салуға болады, бірақ олардың ұқсастығын

ескеріп, жұмысты жеңілдетіп көрейік.

Біріншіден ол фигуралардың ортақтығын

(жалпылығын) анықтау керек (өлшемі, бұрылу бұрышы) және олардың

айырмашылығына көңіл бөлу керек (боялған түсі, координаттары). Егер

үшбұрыштардың өлшемдері және бұрылу бұрыштары белгілі болса, онда

кезкелген бір үшбұрыштың нүктелерінің коорди-натасын білген жеткілікті.

Сол жақ төменгі бұрыштың координатасы (х, у) болсын, табанының ұзындығы

және биіктігі сәйкесінше 100-ге және 60-қа тең

болсын. Онда қалған төбелерінің координ-

аталаарын оңай анықтауға болады: (х, у – 60)

және (х+100, у). Бұл жерде біз У-осі төменге

қарай бағытталғанын ескеріп отырмыз.

Ұшбұрыш салатын Tr жаңа командасын

енгізейік. Оны балай шақырамыз:

Мұндағы с – ол ұшбүрыштың ішін бояған түс.

Мұндай команданы компьютер білмейді (бағдарлама-танслятор) және

орындай алмайды («Белгісіз функция» деген қатені береді) барлық мәселе

осында болып тұр. Яғни, ол команданы белгілі бір командалар арқылы шифрлау

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

Берілген жаңа командалар әдісіндегі бағдарламаны бағдарлама асты (комекші

бағдарлама ) немесе процедуралар деп атайды.

Page 42: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

42 http://astanabilim.kz/infor/c

Процедура - ол бағдарламаның бірнеше жерін де кездесе алатын, қандай да

бі іс-әрекетті орындай алатын көмекші бағдарлама (подпрограмма).

Процедура негізгі бағдарлама секлді рәсімделеді, бірақ оның аты –main

болмайды, қандайда бір өзіне тән ат қойып сақтаймыз. Процедура шақыру

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

жақшаның ішінде жазылады, ол процедураның денесі деп аталады. Бұл

командалар трансляторға белгілі болу керек.

Процедураның тақырыпшасын толығырақ қарастырайық

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

тек команда қандай да бір іс-әрекетті орындайды (мысалы, қандай да бір сурет

салау). Жақшаның ішіне үтір арқылы бір-бірінен ажыратылған процедураның

параметрлері есептеліп жазылады.

Параметрлер - ол процедураның жұмыс істеуіне арналған қосымша

мәліметтер.

Процедураны параметрсіз де жазуға болады, бірақ ол әрқашан өте ұқсас

қайталанатын іс-әрекеттерді орындайтын болады. Мысалы: бірдей

координаталық бір орынға, бірдей көк түсті үшбұрышты салады. Параметр

процедураның жұмыс істеу нәтижесін өзертуіне мүмкіндік береді – фигураны

жылжытуды (х және у параметрлерін өзгерту арқылы) және әртүрлі түстемен

бояуды (с параметрін өзгерту арқылы) орындап отырады.

Есімізге түсірейік, біз параметрге өзгеретін шамалардың барлығын енгізген

болатынбыз. Кейбір параметрлер алдын ала белгісіз болғандықтан, қандай да

бір аты бар айнымалымен сипаттауымыз қажет және ондай параметрлер -

формальді параметрлер деп аталады. Айнымалыларды бағдарламаның басында

сипаттағанымызда, процедураның тақырыпшасында да әрбір параметрдің түрін

(типін) көресетілуі керек.

Ондай процедураны қалай қолдану қажет? Көк үшбұрыштың сол жақ

төменгі төбесінің координатасын (100, 100) нүктесіне ауыстырамыз. Бұл жерде

үшбұрыштың табанының ұзындығы мен оның биіктігі 100 және 60 ескере

отырып, қалған екі үшбұрыштың төбелерінің координаталарын анықтаймыз:

(200,100) координатасы жасыл түсті және (200, 160) координатасы қызыл түсті

ұшбұрыштарға арналған. Біздің есебіміздің шешімі төмендегідей болады:

Page 43: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

43 http://astanabilim.kz/infor/c

Бағдарламаға мұқият назар аударайық. Процедура (шифрлау, жаңа команданың

сипаттамасы) негізгі бағдарламаның бөлімінен жоғары орналасқан. Процедура

негізгі бағдарламаның ішінде емес, оның қасында жеке блок ретінде рәсімделіп

жазылған

Бұл жол процедураны шақыру жолы болып табылады. Жақшаның ішінде барлық

параметрлердің нақты мәндері көрсетілген. Бұндай шақыру кезінде (100) мәні

бірінші параметр х-тің шамасы ретінде, ал екінші мән –екінші параметрдің мәні

т.с.с. Бұл жолдың орындалар алдындағы ең маңыздысы транслятордың Tr

процедурасын алдын ала білуі, себебі ол жоғарыда сипатталып жазылған

болатын.

Қалған екі үшбұрышты салу үшін процедураға енген командалардың

барлығын қайта жазып керегі жоқ, басқа параметрлерді жазу арқылы

процедураны тағы екі рет шақыру жеткілікті.

Қандай жаңалықтар енгізілді?

Процедура да негізгі бағдарлама секілді рәсімделіп жазылады: тақырыпша

мен процедураның денесі жүйелік жақшаның ішіне жазылады.

Процедураның атының алдына void –сөзі жазылады. Яғни, void –сөзі

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

іс-әрекеттерді орындауға арналған.

Жақшаның ішінде айнмалының аты жазылғанан соң үтір қойлады, одан кейін

процедураның параметрлері жазылады – процедураның жұмысы осы

Page 44: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

44 http://astanabilim.kz/infor/c

параметрлерге байланысты болады. Бұл параметрлерді процедураның

аргументтері деп те атайды.

Параметрлерге Си тілінде рұқсат етілген кезкелген аттар қоюға болады.

Процедураның тақырыпшасындағы жазылған параметрлер формальді деп

аталады. Яғни, олар процедураның ішінде ғана рұқсат етіледі және

шақырылған кезде ғана орындалады.

Процедуранның параметрлерінің аттарын мағынасына қарай таңдау - ол

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

Процедураны шақыру кезінде оның атын және нақты параметрлерін көрсету

қажет, олар процедураның формальді параметрлері ретінде ұйымдастырушы

болады.

Нақты параметрлер – олар сандар немесе кезкелген арифметикалық өрнектер

(бұл жағдайда алғашқы болып олардың мәндері қаралады немесе

есептелінеді).

Процедураның бірінші формальді праметрінің орынына бірінші нақты

параметр қаралады, т.с.с тізбектеліп орындалады.

Процедура негізгі бағдарламаның алдында сипатталуы қажет: себебі

процедураны шақыру кезінде транслятор ондай процедура сипатталған-

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

қажет. Ол трансляция кезінде қандай қателер бар екендігін табады. Мысалы

мынадай қателер:

Tr (100); Too few arguments (параметрлер жетспейді)

Tr (100, 100, 5, 5); Too many arguments (параметрлер өте көп...).

Неізгі бағдарламаны бірнеше бөліктерге бөлу үшін көбінесе процедуралар

бір-ақ рет шақырылады. Әрбір процедура 50 жолдан аспаулары керек (2 эран

25 жолдан), әйтпесе бағдарламаны түсіну қиын болады.

Процедурадан ертерек шығу үшін return операторы қолданылады, одан кейін

процедураның жұмысы аяқталады.

Процедурада return операторының бірнешеуін қолдануға болады: ол

оператрлардың кезкелген біреуін қолданғаннан кейін процедураның жұмысы

аяқталады.

Page 45: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

45 http://astanabilim.kz/infor/c

8. Функциялар

Функцияның процедурадан айырмашылығы

Енді біз бағдарлама астының тағы бір түрімен танысамыз – ол функция.

Функция процедура секілді бағдарламаның әртүрлі бөлігінде бірдей

операцияларды орындауға арналған. Олар бір-бірінен бір ғана өзгешелікпен

ажыратылады: процедураның қызметі есептеу және шақырушы бағдарламаға

қайтып келу нәтиже-мән (қарапайым жағдайларда ол бүтін, нақты немесе

символдық мәндер болуы мүмкін).

Функция - ол қандай да бір нысан – нәтиже (мысалы, сан) алу үшін

қолданылатын көмекші бағдарлама (подпрограмма, программа асты). Ол

сонымен қатар қандайда бір пайдалы қызмет атқарады.

Функцияны қолдану мысалдарын көрсетейік. Біз алдында шығарған есепті

шығарып көрейік.

Есеп. Бүтін санды енгізіп оның цифрларының қосындысын анықтайтын

бағдарлама құру. Санның цифрларының қосындысын функцияны қолдану

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

Біріншіден санның цифрларын анықтау үшін сол санды 10-ға бөлу арқылы

оның қалдығын атабамыз, сол қалдық санның бірліктегі цифрасын береді,

одан кейін санды 10-ға бөлеміз, осылай санның басында тұрған санға дейін

қайталаймыз. Осы шыққан қалдық-цифрларды қосып, санның цифрларының

қосындысын табамыз.

Page 46: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

46 http://astanabilim.kz/infor/c

Қандай жаңа жаңалықтар алдыңдар?

Функция процедура секілді рәсімделеді: тақрыпша мен функция денесі

жүйелік жақшаның ішінде жазылады.

Функция атының алдында нәтиженің түрі жазылады (int, float, char, т.с.с) – ол

берілген түрдің мәнін қайтартындығын білдіреді.

Параметрлерге Си тілінде рұқсат етілген кезкелген аттарды қоюға болады.

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

аталады. Яғни, олар процедураның ішінде ғана рұқсат етіледі және

шақырылған кезде ғана орындалады.

Функцияның параметрлерінің аттарын мағынасына қарай таңдау - ол кейін

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

Функцияны шақыру кезінде оның атын және нақты параметрлерін көрсету

қажет, олар процедураның формальді параметрлері ретінде ұйымдастырушы

болады.

Нақты параметрлер – олар сандар немесе кезкелген арифметикалық өрнектер

(бұл жағдайда алғашқы болып олардың мәндері қаралады немесе

есептелінеді).

Функцияның бірінші формальді праметрінің орынына бірінші нақты параметр

қаралады, т.с.с тізбектеліп орындалады.

Функцияның мәнін анықтау үшін return операторы қолданылады, ол

оператордан кейін бос орын арқылы қайта оралатын мән жазылады – яғни

оның мәні сан немесе арифметикалық өрнек болуы мүмкін. Мысалы:

Return 34;

Return s;

Return a + 4*b – 5;

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

Функцияда return операторының бірнешеуін қолдануға болады.

Егер функция негізгі бағдарламаның астында орналасқан болса, онда оны

негізгі бағдарламаға дейін сипаттау қажет. Функцияны сипаттау үшін оның

тақырыпшасын нүктелі үтір арқылы соңында жазу керек.

Функцияны сипаттағаннан кейін тақырыпшаның соңына нүктелі үтір

қойылады, ал функцияның денесі жазылған жерге нүктелі үтір қойылмайды.

Логикалық функциялар

Қандайда бір сұрақты шешу үшін және «Ия» немесе «Жоқ» деп жауап беру

үшін өте жиі функция құру қажет етеді. Ондай функциялар логикалық деп

аталады. Си тілінде ноль жалған шарт, ал бір ақиқат шарт екендігін есімізге

түсірейік.

Логикалық функция - ол функция егер 1 болса, онда «Ия» немесе 0 болса,

онда «Жоқ» деген жауап береді.

Page 47: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

47 http://astanabilim.kz/infor/c

Логикалық функциялар негізгі екі жағдайда қолданылады:

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

анализ жасап және оған жауап беру үшін қолданылады;

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

қателер болғандығын қадағалау үшін қолданылады.

Жай сан ба әлде жоқ па?

Есеп. N санын енгіз және ол саның жай сан ба екендігін анықта. Осы

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

Енді функцияның денесін негізгі функциядан кейін қойып көрейік. Негізгі

бағдарламаны өңдеу кезінде транслятор осы функцияны түсіну үшін оны алдын

ала сипаттау қажет.

Функция екі мәнді береді немесе қайтарады. Анықталған функция арқылы тек нәтижені алуға ғана болады. Егер екң

немесе одан да көп мәндердің нәтижелерін алу керек болса, онда арнайы әдісті

қолдану қажет болады – ол әдіс сілтеме арқыл параметрлерді жіберу болвп

табылады.

Есеп. Екі бүтін санның ішіне ең үлкен және ең кіші санды табатын

функцияны жазайық.

Төмендегі бағдарламада өте айлалы тәсіл қолданылған: неізгі бағдарламаға

байланысты функцияның мәндерін өзгерту керек болады. Бірші нәтиже (ең

кңшкентай сан екі санның арасыда) функция қарапайым түрде жауап береді, ал

Page 48: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

48 http://astanabilim.kz/infor/c

екінші негізгі бағдарламаның айнымалыларының берген мәліметіне тәуелді

болады.

Процедура мен функцияларды орындау кезінде параметрлердің көшірмелері

пайда болады, функциялар осы көшірмелермен жұмыс істейді. Яғни бұл

функцияны шақыру кезінде айнымалы-параметрдің мәндерінің барлық

өзгертулері жасырын болып тұрады (көрінбейді).

Егер тақырыпшадағы параметрдің атының алдына & таңбасын қоятын

болсақ (еске түсірейік, ол тағы айнымалының адресін анықтайтындығына), бұл

кезде функция шақырылуы кезінде параметрдің көшірмесімен емес, параметрдің

өзімен жұмыс атқарады. Сондықтан біздің мысалымызда функция негізгі

бағдарламадағы max айнымалысының мәнін өзгертеді және оған екі санның

үленінің мәнін жазады.

Мұндай тәсілді процедураға да қолдануға болады: олар формальді түрде

мән-нәтиже бермеседе, параметрлерді өзгерту арқылы функцияның шақыру

кезінде қолданылады.

Қандай жаңа жаңалықтар алдыңдар?

Егер фунция екі немесе одан да көп нәтижелер беруі үшін, төмендегідей

жасайды:

o Return операторының көмегімен қарапайым түрде бір нәтиже береді

o Қалғандары параметрді өзгерту арқылы мәндерді қайтарады

Бағдарлама астында қарапайым параметрлер өзгермейді, өйткені олар

параметрлердің көшірмелерімен жұмыс істейді (мысалы, MinMax

функциясындағы а мен b мәндерін өзгерткен кезде, оларға сәйкес негізгі

бағдарламадағы N мен M айнымалыларының мәні өзгермейді).

Page 49: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

49 http://astanabilim.kz/infor/c

Кезкелген процедура мен функция параметрледің мәнін өзгерту арқылы

орындай алады.

Арнайы түрде бағдарлама астының тақырыпшсында есептелуші параметрлер

міндетті түрде сипатталады: олардың аттарының алдында & -белісі

қойылады, яғни бағдарлама астындағы параметрдің мәнін өзгерте

алатындығын сілтеме екендігін көрсетеді (біздің жағдайымызда функция

неізгі бағдарламадағы max айнымалысының мәнін өзгертіп отырады).

Мұндай процедуралар мен функцияларды шақыру кезінде нақты

есептелінетін параметрледің тек айнымалылардың аттарын жазған жеткілікті

(арифметикалық өрнек те емес, санда емес – бұл жағдайда транслятор

ескерту жасайды және уақытша айнмыалының жадында орындалады).

9. Бағдарламаның құрылымы

Бағдарламаның құрама бөліктері

Бағдарламаны құру кезінде оны бірнеше бөліктерге бөлуге болады:

Тақырыптық файлды қосу - ол с++ бағдарламасындағы #include жолы.

Тұрақтыларды сипаттау : const N= 20;

Глобальді айнымалылар – негізгі және бағдарлама асытнда сипатталмаған

айнымалылар. Мұндай айнымалыларға барлық процедуралар мен

функциялар байланысады (оларды қайтадан процедураларда сипаттап

керек емес).

Процедуралар мен функцияларды сиппаттау әр уақытта негізгі бағдарла-

маның үстінеде (алдында) жазылады. Си бағдарламасының қалауы

бойынша транслятор бағдарлама астын тауып, орныдаған кезде барлық

параметрлер өз түрлеріне байланысты сипатталып тұруы керек.

Негізгі бағдарлама барлық бағдарлама астарына алдарында және

соңдарында жазыла алады. Оны бағдарламалар астарының ортасына

жазбау керек , себебі оны табу қиынға түседі.

Глобальді және локальді айнымалылар

Глобальді айнымалылар кезкелген процедуралар мен функцияларға қол

жетімді болады. Сондықтан оларды бағдарлама асытнан бөлек сипаттау керек.

Қалған айнымалылар олар процедуралар мен функцияларда сипатталады,

сондықтан олар локальді деп аталады. Локальді айнымалылар тек сол

сипатталған бағдарлама астына ғана тәуелді болады. Төмендегі мысалда

глобальді және локальді айнымалылар арасындағы айырмашылықтарды

көрсетеді.

Page 50: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

50 http://astanabilim.kz/infor/c

Қандай жаңа жаңалықтар алдыңдар?

глобальді айнымалыларды бағдарлама асытнда қайтада сипаттауға болмайды.

егер бағдарлама астында глобальді айнымалының атымен бірдей атпен

локальді айнымалы сипаталған болса, онда локальді айнымалы қолданып

кетеді.

егер глобальді және локальді айнымалылардың аттары бірдей болатын болса,

онда бағдарлама астындағы глобальді айнымалыға қатынасу үшін оның

атының алдында екі рет қос нүкте жазылады:

Мамандардың көбі глобальді айнымалыларды қолданбауды талап етеді, тіпті

оларды қолданбаған дұрыс, себебі глобальді айнымалылар:

бағдарламаның откладкасына және анализ жасауға кедергі келтіреді;

нақты қателіктер туындауы мүмкін - қандай да бір бағдарлама асты

глобальді айнымалыны өзгерткенін көрмей қалуымыз мүмкін;

Page 51: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

51 http://astanabilim.kz/infor/c

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

жүктелгендіктен және бағдарламаның көлемі артуынан болады;

Сондықтан глобальді айнымалылар соңғы жағдайда қолданылады:

глобальді жүйелік баптауларды сақтау кезінде (экран түсін және т.б.);

егер айнымалы үш немесе одан да көп бағдарлама астарында қолданған

болса, онда оны қандай да бір себептерден бағдарлама астарына жіберуге

қиындық тудырады.

Процедуралар мен функцияларға олардың параметрлері арқылы мәліметтерді

қай кезде жіберу керектігін ескеру қажет.

Бағдарлама мәтінін рәсімдеу Бағдарламаны рәсімдеу не үшін қажет?

Бағдарламның мәтінін әдемі және дұрыс рәсімдеу не үшін керек? Төмендегі

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

бере алмайсыздар.

Яғни, бағдарламаладың рәсімдеуінде айырмашылық.

Бағдарламдағы мәтінін рәсімдеу үшін, төмендегі жағдайларды ескеруміз

қажет:

бағдарламаны орындауға жібермеу (ондағы қателерді іздеу және

дұрыста);

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

Процедуралар мен функцияларды рәсімдеу

Процедуралар мен функцияларды рәсімдеу үшін төмендегі режеленрді ескеру

қажет:

Бағдарламаның бөлігіндегі қайталанатын операциялар бағдарлама асты

(подпрограмма) ретінде жазылады;

Бұл бағдарлама асты не істейтіндігі жайлы процедура мен функцияның

аттары алдын ала хабардар болу керек. Өтінішке орай транслятор орыс

тілінде жазылған аттарды түсінбейді. Егер сізге ағылшын тілінде жазу

қиын болса, онда латын әліпийін қолданған жөн. Мысалы: текшені салу

процедурасын төмендегідей жазу қажет:

немесе

Page 52: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

52 http://astanabilim.kz/infor/c

бағдарлама астының тақырыпшасының алдында бірнеше жол түсінікте-

мелер жазу қажет (бүл жерде орыс немесе қазақ тілдерінде жазуға болады).

Түсінктемелерде ең керекті ақпараттар жазылады: бағдарлама астының

параметрлері нені білдіретіндігін жазады, ол параметрлер не істейтіндігін,

оның ерекшелігін және қандай шаманы қайтаратындығын анқтайды.

Бағдарлама астының өлшемін 25-30 жолдан асырмауды талап етеді, себебі

ол жағдайда бағдарлама асты күрделі және шатасқан болып кетеді.

Бос орындарды қолдану арқылы бағдарлама астының бөлімін басқа

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

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

Функцияны қолдану арқылы экранда берілген параметрлері арқылы боялған

ромбының кескінін салу мысалын қарастырайық. Егер робы экранға сиятын

болса (бұл жағдайда функцияның нәтижесі 1-ге те), немесе қате бар (егер нәтиже

0-ге тең болса) екендігін шығарады.

Қызыл жолдар (отступы)

Қызыл жолдар бағдарламаның блоктарының құрылымдарын ерекшелеу үшін

қолданылады (бағдарлама асты, циклдар, шартты операторлар). Қызыл жолдар

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

және артықтарын алып тастау үшін қолданылады. Қызыл жолдарды

(отступтарды) қою кезінде төмендегі ережелерді ескеру қажет:

Қызыл жолдың шамасы 2-3 символдың орынын алады

Қосымша қызыл жолдар (дополнительные отступы)

o for, while, do-while циклдарында

o if шартты операторында және else блоктарында

o switch көп жағдайды таңдау блогында

Page 53: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

53 http://astanabilim.kz/infor/c

Төменде қызыл жол (отступ) қолдану арқылы жазылған бағдарлама көрсетілген

(«сатылай» жазылу).

Page 54: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

54 http://astanabilim.kz/infor/c

10. Анимация

Анимация деген не?

Анимация – экрандағы суретті жандандыру (ағылшын тілінен аударғанда,

animate –жандандыру (оживлять). Бұл жағдайда нысан қозғалады, айналады,

соқтығысады, түрін және түсін өзгертеді, т.с.с.

Эффектіленген анимация жасау үшін бағдарламада екі жағдайды шешіп алу

керек:

аз жыплықтату арқылы нысанды қозғалысқа келтіру

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

Бөл бөлімде осындай түрлі есептердің қарапайым түрлерімен танысамыз.

Барлық бағдарламаларда шығу батырмасы ретінде Esc пернесі қабылданған.

Нысанның қозғалысы

Экранның сол жағынан бастап оң жағына қарай жылжитын

нысанның бағдарламасын қарастырайық (бізідің жағдайда

шаршының сурет пайдалан-айық). Егер нысан шекарадан

шығатын болса немесе Esc пернесі басылған жағдайда ғана

тоқтайды.

Алдын ала талдау жасау

Экран бойынша жылғып келе жатқан нысанды

қарастырайық. Ол қабырғалары 20 пиксель болатын шаршы

болсын. Бұл нүтенің коодинаттары нысан қозғалу кездерінде

өзгеріп отырады. Экранның кезкелген жерінде төртбұрыш

салу үшін жоғарғы сол жақ бұрышын негізігі тіреуші нүкте

ретінде аламыз және оның координаттарын (х, у) деп аламыз.

Қарама-қарсы бұрыштың координатасы (х+20, у+20) болады.

Енді төртбұрышты нысанның қозғалысыны сипаттау үшін ол жыпылықта-мау

және бағдарлама барлық компьютерлерде бірдей істейтін дәрежедек болуы

керек. Осындай бағдарлама орындау үшін төмендегідей алгоритм болуы қажет:

1) экранда фигура саламыз;

2) азғантай ғана тоқтату орнатамыз (көбінесе 10-20 мс);

3) фигураны өшіреміз;

4) оның координатасын өзгертеміз;

5) 1 қадамына түсеміз.

Бұл іс-әрекеттер «қозғалысты тоқтату» командасы берілгенше жалғасады

(біздің жағдайда – Esc батырмасын басу немесе нысан оң жақ шекарадан шығып

кеткен болса).

Төрбұрыштың қозғалысы көк экранда болсын. Экранды тазалаудың ең тез

және ең жылдам әдісі оны көк түспен бояу. Сол себепті координата параметрлері

х және у, сонымен қатар түсі color процедурасын жазуға болады. Біз көк түсті

қолданғандықтан экрандағы фигура боялып кетеді.

Page 55: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

55 http://astanabilim.kz/infor/c

Бұл процедураның қызметіне көңіл бөліңіздер –ол төртбұрышты сала алды

және өшіре алады.

Алогритмдегі барлық іс-әрекеттерді бірнеше рет орындау керек, сондықтан

циклді қолданған жөн. Сонымен қатар ол циклдың неше рет қайталануы керек-

тігін біз алдын ала білмейміз, сондықтан while циклін қолданамыз (шартты

цикл).

Циклдың аяқталу ретінде – фигураның экран шекарасынан шығып кету

немесе Esc батырмасын басу. Біз терезенің өлшемі 400-ден 400 –ге дейін болтын

қылып аламыз. Бұл жағдайда х-тің координатасы 0-ден 399-ға дейін өзгереді,

сондықтан біз циклдің тоқтамауының шартын х + 20 < 400 осылай аламыз. Бұл

шарт төртбұрыш экранның шекарасынан шығып кеткенде бұзылады және

осыдан бағдарламаның жұмыс істеуін аяқтаймыз.

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

Esc батырмасы арқылы шығуды ұйымдастыруымыз керекпіз. Ол үшін нысан

қозғалыста болуы керек және getch функциясының көмегімен пернетақтаны баса

салуды күтіп отырмауымыз керек. Бұл кезде төмендегі алгоритмдер

қолданылады:

1. Қандай да бір перне басылғандығын kbhit функциясы арқылы тексереміз,

себебі ол 0-ге тең нәтижені береді (жауап «жоқ»), егер ешқандай батырма

басылмаған болса, және нәтиже 0-ге тең емес болса, онда біз кезкелген

батырманы басқан болып табыламыз.

if (kbhit( )) { . . .}

2. Егер батырма басылып тұрған болса, онда

getch функциясын шақыру арқылы ол батырманың кодын анқытаймыз.

Перненің коды – ол символдар кестесіндегі номері. Егер символға

жадынан 1 байт орын берілсе, онда 256 әртүрлі символдарды қолдануға

болады және кодтың мәні 0-ден 255-ке дейінгі интервалда өзгеріп

отырады.

Егер алынған код Esc(27) кодына тең болса, онда циклдан шығамыз.

Бағдарламаның пернелермен басқару үшін – сол пернелердің кодтарын білуіміз

қажет. Мысалы кейбір пернелердің кодтары:

Esc 27

Enter 13

Пробел 32

Page 56: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

56 http://astanabilim.kz/infor/c

Бағдарлама

Толық бағдарлама мына түрде болады:

Енді көк түсті түсініктемеде «анимация» сөздің орынына негізгі блокты жазу

ғана қалды.

Төртбұрыш экранның шекарасына келгенде немесе Esc пенесін басқанда

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

Фигура экранның ішінде болған кезде while операторы орындала береді.

Esc батырмасын басу циклдің ішінде орындалады. Бастапқыда біз қандай да бір

перне басылғандығын анықтаймыз (kbhit функциясының көмегімен), содан кейін

оның кодын анықтаймыз (getch функциясы) және ол Esc пернесінің кодына тең

болса, онда Break операторының көмегімен циклдан шығамыз.

Циклдің негізгі бөлігінде фигураны процедуралардың көмегімен саламыз,

одан кейін параметрінің мәні 20 мс –ге тең ұстап қалуды delay процедурасы

арқылы ұйымдастырамыз және фигураны өшіреміз. Осыдан кейін бірақ х-тің

координатасын өзгертеміз және циклдің басына қайтып ораламыз.

Page 57: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

57 http://astanabilim.kz/infor/c

Қандай жаңа жаңалықтар алдыңдар?

Қандайда бір перне басылғандығын kbhit функциясы арқылы

анықтайды.

Егер перне басылған болса, онда getch функциясының көмегімен

кодын анықтаймыз.

Delay процедурасының көмегімен берілген уақытта тоқтауды

ұйымдастырамыз. Бұл процедурадағы ұстап қалудың шамасы

миллисекундармен есептеледі. Егер ұстап қалудың шамасын

азайтатын болсақ, онда фигура тезірек қозғалады.

§ Перне – бағыттауыштар арқылы басқару

Алдын ала анализ жасау

Жұмыс істеу принципі өте қарапайым: перненің кодын алу және нысанды

керекті жаққа жылжыту. Егер фигураның х және у коодинаталарын өзгертудегі

циклдің 1 қадамын dx және dy арқылы белгілейміз, қозғалыстың төрт бағытына

төмендегідей нәтиже аламыз:

солға қозғалу dx < 0, dy = 0

оңға қозғалу dx < 0, dy = 0

жоғары қозғалу dx = 0, dy < 0

төменге қозғалу dx = 0, dy > 0

Яғни, бұдан мынадай қорындыға келеміз, перненің басылуының кодына

байланысты осы төртеуінің біреуін таңдаймыз. Ол үшін if шартты опреаторын

бірнеше рет қолдануға болады, бірақ бірнеше нұсқаулардың ішінен таңдауды

ұйымдастыратын арнайы switch операторын қолданған ыңғайлы.

Курсорды пернелер арқылы басқару пернелері қарапайым пернелер емес өл да

кедергі тудыратын мәселе. Олар символдар кестесінде коды жоқ – функциональ-

ды пернелер қатарына жатады. Арнайы пернеледің біреуі басылған кезде жүйе

оны 2 рет басылды деп сезеді, символдың бірінші басылғандағы коды әр

уақытта нольге тең, ал екінші басылғанға біз арнайы код аламыз (оны скан-код

деп атайды, пернетақтадағы перненің реттік номері). Егер екінші кодты

анализдап беретін болсақ, онда біз оның қысқартылған түрін қолданамыз:

солға 75 жоғары 72

оңға 77 төмен 80

Мұндай әдісте тек бір ғана жетспеушілік бар: символдар кестесіндегі 75, 77, 72

және 80 кодтары пернелерді басқанда сезеді, яғни латынның бас әріптерімен K,

M, H және P парапар болады.

Page 58: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

58 http://astanabilim.kz/infor/c

Қарапайым жағдай

Перне-тілше батырмасы басылған кезде ғана фигура қозғалатын бағдарлама

құру керек. Циклда біз фигураны саламыз, одан соң перненің басылуын күтеміз

және оның кодын getch функциясының көмегімен қабылдай аламыз. Осыдан

кейін фигураны өшіреміз (координаталары өзгеріп кетпей тұрғанда) және осы

кодқа тәуелді фигураның координаталарын керекті жағдайға өзгертеміз.

Бұл жерде соңы жоқ While(1) циклі қолданылады. Бұл циклдан шығу үшін

бір ғана әдіс бар – ол break опреаторын қолдану арқылы шығамыз (циклдан

ертерек шығу әдісі).

Switch операторында координата мәні бірге өзгеріп отырады, кезкелген қадамды

қолдануға болады. Төменде орналасқан жолдар орындалмау үшін әрбір

нұсқаның соңына break операторын жазып отыру керек. Негізгі бағдарламаның

басында code бүтін анымалыны сипаттау қажет.

Тоқтамай қозғалу

Енді күрделі жағдайларды қарастырайық ешқандай перне басылмаса да нысан

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

өзгертеді. Бұл жерде қозғалыстың бағытын өзгертетін dx және dy айнымалы-

ларын қолданамыз. Алдымен біз перне басылғандығын, сосын оның кодын

анықтаймыз, оны code айнымалысына меншіктейміз және switch операторының

көмегімен ол басылуды ұйымдастырып жазамыз.

Page 59: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

59 http://astanabilim.kz/infor/c

11. Кездейсоқ және псевдокездейсоқ сандар

Кездейсоқ сан дегеніміз не?

Жерге құлап жатқан қардың жауып жатқандығын елестетейік. Қандайда бір

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

жауап бере аламыз ба: келесі қар қай жерге нақты түсетінін айталасыз ба? Оған

жауап беру өте қиын, ол қардың құлауына көптеген себептер бар – олардың

қайсысы жерге жақын, жел қалай соғады және т.б.. Қар кездейсоқ орынға түседі

деп айтуға болады, себебі қардың жерге түсу орынын алдын ала болжап айтуға

болмайды.

Компьютерде кездейсоқ үдерістерді модельдеуде (қардың жаууы, заттың

молекулаларының броундық қозғалысы және т.с.с.) кездейсоқ сандар қолданы-

лады.

Кездейсоқ сандар –алдындағы сандардың кезкелгенін біліп тұрсаңда, келесі

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

Кездейсок сандарды анықтау компьютерде өте қиын. Кейкезде оларды

анықтауда радиохабар секілді әртүрлі көздерді қолданады. Бірақта

математиктер әмбебап және ыңғайлы әдісті – псевдокездейсоқ сандарды ойлап

тапқан.

Псевдокездейсоқ сандар – кездейсоқ сандардың қасиеттеріне жақын,

керемет қасиеттерге ие, математикалық формула арқылы кезкелген келесі

санды анықтау алдыңғы сандардың негізінде есептелетін сандар тізбегі.

Сол себепті бұл тізбек өзін кездейсоқ сандар секілді санайды, формуланы

білеміз, сол арқылы біз келесі сандар тізбегін ала аламыз.

Кездейсоқ сандарды реттеу

Көбінесе қандай да бір интервалда орналасқан псевдокездейсоқ сандар (әрі

қарай біз қысқаша бұл сандарды жай кездейсоқ сандар деп қарастырамыз)

қолданылады. Мысалы: қарлар жердің барлық бетіне түспейді деп елестетіп, ОХ

осі бойынша а –дан b-ға дейінгі кесіндіге түсін деп есептейік. Бұл жағдайда ең

маңыздысы осы тізбектің жалпы қасиетін білу. Желсіз күні жауған қардың жер

бетіне түсуін қадағалайтын болсақ, онда жердің барлық бетіне бірдей тскен

болар еді, ал жел болса, онда – әртүрлу жаған болар еді. Бірінші жағдайда

кездейсоқ сандарды бірқалыпты реттеу, ал екінші жағдайда –бірқалыпсыз деп

атайды.

Қандайда бір интервалда псевдокездейсоқ сандардың стандартты дачиктері

көбінесе бірқалыпты реттеліп орындалады.

Page 60: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

60 http://astanabilim.kz/infor/c

Кездейсоқ сандар компьютерде формула арқылы анықталады, оны нақты

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

жеткілікті.

Кездейсоқ сандармен жұмыс істейтін функциялар

Си тілінде кездейсоқ сандармен жұмыс істейтін функциялар бар (олардың

сипаттамасы stdlib.h тақырыптық файлында орналасқан – яғни, оны бағдар-

лама басына қосу керек).

n = rand ( );

0-ден RAND_MAX –ке дейінгі интервалдағы

кездейсоқ бүтін сандарды береді (ол өте үлкен

бүтін сан – 32767)

srand ( m ); кездейсоқ тізбектен алынған m-ға тең алғашқы

мәнді орнатады

Берілген интервалдағы кездейсоқ сандар

Практикалық есептеулер кезінде кездейсоқ сандарды [a, b] интервалынан алу

керек. Егер интервал нольден басталатын болса (a=0), онда бөліндінің қалдығын

анықтаған операцияның қасиетін қолдануға болады: қандай да бір N санының

бөліндінің қалдығы әр уақытта нольге тең немесе үлкен, бірақ N –нан кіші, яғни

[0, N-1] интервалында орналасқан. Мынандай функцияны жазуға болады

Бұның көмегімен [0, N-1] интервалында орналасқан кездейсоқ сандардың

тізбегін бірқалыпты реттелген түрін алуға болады.

Енді бұл функцияны [a, b] интервалына қолданып көрейік. Себебі формула

мынадай түрде

k = random (N) + a;

[a, a + N-1] интервалындағы тізбекті береді. Бізге [a, b] интервалындағы

сандар тізбегін табу керек, сондықтан біз b = a+ N -1, осыдан N=b-a+1 болады.

Сондықтан

[a, b] интервалында кездейсоқ бүтін сандарды бірқалыпты реттелген түрде

алу үшін k = random( b - a +1)+a; формуласы қолданылады.

Кездейсоқ нақты сандарды анықтау киын болатын болды. Егер rand ()

функциясының нәтижесін RAND_MAX функциясына бөліп жазайық:

x = (float) rand () / RAND_MAX;

онда біз [0, 1) интервалындағы кездейсоқ нақты сандарды аламыз.

Интервалдың ұзындығы [0, 1) мұндай тізбекте 1-ге тең, ал бізге b-a интервалын-

дағы сандар тізбегі керек. Егер біз осы санды b-a –ға көбейтіп жіберсек және оны

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

[a, b] интервалында кездейсоқ нақты сандарды бірқалыпты реттелген түрде

алу үшін k = rand ( ) *(b-a)/RAND_MAX + a; формуласы қолданылады.

Page 61: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

61 http://astanabilim.kz/infor/c

Осыған дейін біз бірқалыптты реттелген кездейсоқ сандарды қалай алу

керектігі жайында қарастырдық. Ал бірқалыпсыз ретпен кездейсоқ сандарды

қалай алуға болады? Бұл сұраққа математиктер былай жауап береді:

бірқалыпты реттенлгенен бірқалыпсыз реттелмеген алуға болады, алдынағы

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

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

онда бірқалыпты реттелген бірнеше кездейсоқ сандардың орташа арифметика-

лық мәнін алу керек болады.

Экрандағы қар

Төменде х-тің [0, 399] интервалындағы кездейсоқ сандарды генерациялаудың

бағдарламада қолданудың мысалы көрсетілген. Ал у-тің мәнін [0, 299]

интервалындағы кездейсоқ сандар және нүктенің түсін (x, y) координаттары

бойынша тексереді. Егер ол нүкте қара түсті болса, онда оның т.сін кездейсоқ

орнатады, ал егер жоқ болса, онда қара түске бойайды. Кездейсоқ түс Color

стандартты функциясының көмегімен орындалады. Ол негізгі үш түстің

жиынтығынан тұрады: қызыл (R), жасыл (G) және көк (B). Түсті [0, 255]

интервалынан кездейсоқ таңдайды.

Page 62: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

62 http://astanabilim.kz/infor/c

Қандай жаңа жаңалықтар алдыңдар?

қандай да бір перне басылғандығын kbhit функциясы арқылы анықтаға

болады. Егер бұл функцияның нәтижесі перне басылса 0-ге тең, егер

перне басылмаса және нәжижесінің мән 0-ге тең болмаса, онда

кезкелген перне басылды. Осы перненің кодын анықтау үшін getch

функциясын шақыру қажет. Бұл жағдай үшін цикл «әзірше перне

басылған жоқ» былай жазылады:

while ( ! kbhit ( )) {. . .}

нүктенің ағымдағы түсін алу үшін getpixel функциясы қолданылады.

Page 63: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

63 http://astanabilim.kz/infor/c

Әдебиеттер тізімі.

Негізгі әдебиеттер

1. В. Фаронов. Создание приложений с помощью C#. М.:Эксмо, 2008.-571с.

2. М.Абрамян. Visual C# на примерах. БХБ-Петербург, 2008 г.

3. Б.Керниган, Д.Ритчи Язык программирования Си: Пер. С англ. – М.: Финансы

и статистика, 1992.-272с.

4. А.Г.Юркин. Задачник по программированию. Питер, 2002г.

5. Н.Культин., С/С++ в задачах и примерах – БХБ-Петербург, 2002 г.

6. Крис Паппас, Уильям Мюррей Программирование на С и С++: -К.: Изд.

Группа BHV,2000. -320 с.

7. Белецкий Я. Энциклопедия языка Си. М.: Мир, 1992.

Қосымша әдебиеттер

1. Дэвис, Стефан, Р. С++ для «чайников»,2001.-336 с.

2. Уэйт М. Язык Си. Руководство для начинающих: Пер. с англ.–М., Мир, 1988 г.

3. Уолтер Савич С++ во всей полноте. Москва,Киев,2005

• Интернет-көздер:

www.informika.ru- информациялық сайт

www.referat.ru, www.kazref_narod.ru –рефераттар жинағы

Page 64: Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019berikzhan.ucoz.org/CPP/kitap/devcpp_1_Kaz66.pdf · «c++ бағдарламалау тіліне

Cи тілінде бағдарламалау Берикжан Касымов, 2018-2019

64 http://astanabilim.kz/infor/c