Test
1.1 Алгоритмдер және олардың типтері
Алгоритмдеу – есепті шығару алгоритмін құрастыру процесі, мұның нәтижесінде мәліметтерді өңдеу процесінің кезеңдері айқындалады да, кезеңдер мазмұны формальды (жасанды) түрде жазылып, солардың орындалу реттілігі анықталады.
Алгоритм – бастапқы айнымалы түрде берілген мәліметтерден қажетті нәтижеге қол жеткізу жолында атқарылатын есептеу процесін анықтайтын дәлме-дәл нұсқаулар жиыны.
Алгоритм қасиеттері:
1. детерминділік (анықтылық, бір мәнділік) – басқаша түсінуге жол бермей, тек қана көрсетілген әрекеттерді айқын түрде орындауға арналған нұсқаулар дәлдігі;
2. дискреттілік – есептеу процесін жекеленген қарапайым операцияларға бөлу қасиетінің болуы, яғни күрделі есепті атқарылуына күдік келтіруге болмайтын шағын бөліктерге жіктеу мүмкіндігінің болуы;
3. нәтижелілік – белгілі бір әрекеттер саны атқарылған соң, процестің қажетті нәтижесін алып, оны аяқтау мүмкіндігінің болуы немесе есептеу процесін ары қарай жалғастыруға болмайтындығы жайлы мәлімет алу;
4. жалпылық – алгоритмнің осы сияқты көптеген басқа да есептерге қолданылу мүмкіндігінің болуы
Алгоритмдік тіл – алгоритмдерді жазуға арналған символдар мен сол символдардан тұратын конструкцияларды құрастыру және түсіндіру ережелерінің жиыны.
Бағдарламалау тілі компьютерлерде бағдарламаларды орындау ісін атқарады.
Бағдарлама – машинаға түсінікті түрде жазылған алгоритм. Бағдарламада берілген мәліметтердің сипаттамаларымен бірге оларды өңдейтін командалар болады. Командалар қандай мәліметтер қандай операцияларға қатынасатынын, олар қандай реттілікпен орындалатынын және нәтиженің қандай түрде шығарылатынын көрсетеді. Бұлар операторлар арқылы жүзеге асырылады.
Мәліметтер – белгілі бір процесс көмегімен тасымалдап, өңдеуге болатын, формальды түрде бейнеленген фактілер мен идеялар.
Айнымалы – бағдарлама орындалуы барысында өз мәнін өзгерте алатын шама.
Оператор – операциялар мен мәндерді көрсететін немесе солардың элементтерінің қай жерде орналасқанын білдіретін символдар жиыны.
Транслятор – бір тілді екінші тілге аудару бағдарламасы. Ол интерпретатор және компилятор сияқты екі топқа бөлінеді.
Интерпретатор – бұл командаларды аударып, оларды бірден орындауға арналған трансляторлық бағдарлама.
Компилятор – бұл алгоритмдік тілдің конструкцияларын толығымен машиналық кодқа түрлендіретін бағдарлама. Есептің нәтижесін алу түшін машиналық кодты орындау керек.
Компьютерде есеп шығару кезеңдері
Компьютерде есеп шығару күрделі процесс болып есептеледі, ол төмендегі кезеңдерден тұрады:
1. Берілген есепті математикалық түрде өрнектеу, яғни есепті мәселе ретінде
қоя білу.
2. Есепті шығарудың компьютерге ыңғайлы сандық тәсілдерін анықтау.
3. Есепті шығару жолын алгоритм түрінде бейнелеу.
4. Есепті компьютерде шығару бағдарламасын жасап, оның қателерін түзету.
5. Есепке керекті мәліметтер дайындау.
6. Компьютерде есепті шығару және шыққан нәтижені іс жүзінде қолдану.
Берілген есепті математикалық түрде өрнектеу дегеніміз – есептің берілген мәндерін математикалық таңбаларды қолданып жаза білу және керекті математикалық формулаларды анықтау болып саналады.
Күрделі формулаларды, теңдеулерді арифметикалық амалдар тізбегіне айналдыру есепті шығарудың сандық тәсілдерін табу не анықтау жолы болып есептеледі. Қазіргі кезде барлық есептердің шығару жолының сандық тәсілдері белгілі десе де болады, тек солардың ішінен өзімізге тиімді жолын таңдап алуымыз керек. Бұл мақсатта есепті шығару дәлдігін, нәтижені жылдам табу мүмкіндігін, мәліметтерді дайындау мен есепті шығарудың бағасын салыстыра отырып қарастыру қажет.
Есептің алгоритмін жасағанда, оның шығару жолын тізбектелген іс-әрекеттер ретінде схема түрінде өрнектеледі.
Бағдарлама жасағанда қазірде кеңінен тараған бағдарламалау тілінің бірінде алгоритм нақты түрде жазылады. Бізде кең тараған тілдерге – Паскаль, Дельфи, С/С++ жатады. Жазылған бағдарламаның қатесін түзету компьютердің көмегімен шешіледі, өйткені жіберілген қателерді тек компьютер ғана жылдам аңғарып, түзету мүмкіндігін береді.
2.1.1 Алгоритмді жазу тәсілдері
Алгоритмдерді бейнелеудің негізгі тәсілдеріне оларды жазудың келесідей түрлері жатады:
табиғи тіл сөздері арқылы;
формулалық-сөздік тәсіл арқылы;
графикалық түрде бейнелейтін блок-схемалар арқылы;
псевдокодтар (жалған кодтар) арқылы;
бағдарламалау тілі арқылы.
Алгоритмдерді табиғи тіл сөздері арқылы бейнелеуде – есептеу кезең-дері мазмұны кез келген түрде табиғи тілде жазылады.
Осы тәсілмен келесі мысалдың алгоритмін жазып шығайық.
1-мысал.Сандар жиымы (массиві) берілген делік. Осы жиым сандарының көрсетілген аралықта, яғни интервалда толығынан жататынын немесе жатпайтынын тексеру керек. Интервал өзінің шекаралық А және В мәндерімен берілген.
1-кесте.
Алгоритмді графикалық түрде блок-схемалар арқылы көрсету – оның логикалық құрылымын графикалық түрде бейнелеу болып саналады. Мұнда мәліметтерді өңдеудің әрбір кезеңі атқарылатын операцияға сәйкес әр түрлі геометриялық фигуралар (блоктар) түрінде көрсетіледі (-кесте).
Сонымен алгоритм блоктармен немесе геометриялық көпбұрыштар түріндегі фигуралармен өрнектеледі. Әр блоктың ішіне орындалатын іс-әрекеттің (амалдың) мазмұны жазылады. Символдардың (блоктардың) бір кіру және біршығу сызықтары болуға тиіс.
Жалған кодтар (псевдокодтар) – нақты бағдарламалау тілінің синтак-систік ерекшеліктерін есепке алмай, тек формальды түрде бағдарлама логикасын бейнелеуге мүмкіндік береді. Бұл тәсіл бағдарламалау тілінің операторлары мен табиғи тіл сөздерінің араласуы арқылы құрастырылып, блок-схема орнына пайдалануға болатын бағдарлама логикасын бейнелеу құралы болып табылады.
мысал. Z = ax
2+bx+cos(ax2+b)-tg(ax2+b) функциясының мәнін есептеп шығару алгоритмін жасау керек болсын делік. Мұнда алдымен a, b, x нақты мәндерін енгізіп, жақшада тұрған ax2+b өрнегін есептеп алу керек, соңынан Z функциясының мәні нәтиже ретінде шығарылуы тиіс.
алг Z функциясын есептеу
нақ a, b, x, t, z
арг a, b, x
нәт z
басы
a, b, x енгізу
t := ax
2
+ b
z := t+cost-tgt
x, z шығару
cоңы
Бағдарламалау тілдері – бағдарламаларды компьютерде тікелей орындауға арналған алгоритмдерді жазу тәсілі. Бағдарлама – алгоритмнің компьютерге түсінікті түрде жазылуы.
Әрбір машинаның өз тілі (машиналық тіл) болады және ол тек осы тілдегі бағдарламаларды, яғни командалар тізбегін орындай алады. Бағдарламаларды машиналық тілде жазу өте күрделі, әрі адамды шаршататын жұмыс болып табылады.
Паскаль, С/С++ тілдерінің трансляторы – компилятор түрінде болады. Мұнда бастапқы жазылған бағдарлама мәтіні машина тіліне аударылады да, объектілік модуль деп аталатын бағдарлама коды шығарылады. Сонан соң объектілік модуль бағдарлама аралық байланыс редакторы деп аталатын бағдарлама арқылы өңделгеннен кейін барып қана жұмыс істеуге дайын болады.
Қарапайым алгоритмдер құру
Күрделі алгоритмдерді құру үшін қарапайым канондық (бірыңғайланған) ал-горитмдік құрылымдар қолданылады. Олар сызықтық, тармақталу және цикл құрылымдарынан тұрады.
Бағдарламалау теориясында кез келген күрделі бағдарламаны осы үш түрлі құрылымнан құрастыруға болатыны дәлелденген.
Сызықтық құрылым бірінен кейін бірі орындалып тізбектеле орналасқан бірнеше операторлардан тұрады.
Тармақты – шартқа байланысты екі оператордың бірінің орындалуы.
Цикл – операторлар бөлігінің бірнеше рет қайталана орындалуы.
Негізгі конструкцияларды пайдалану мақсаты – қарапайым құрылымды бағдарлама алу болып саналады. Мұндай бағдарламалар оңай оқылады, түзетіледі және керек болса, оңай өзгертіледі.
1-сурет. Блок-схема түріндегі алгоритм
2.1.2. Алгоритмді жоғары деңгейлі тілде іске асыру
1. Сызықтық құрылымды алгоритм немесе қарапайым сызықтық алго-ритм іс-әрекеттердің орындалу ретіне қарай тізбектеле орналасқан блоктардан тұрады. Амалдардың бұлай бірінен соң бірі реттеліп орындалу тәртібін табиғи атқарылу дейді.
Мысал. y = a+b формуласы бойынша y -ті табу керек болсын.
Мұнда формула бойынша есептеу тіктөртбұрыш арқылы кескінделетін есептеу блогы (3-блок) арқылы өрнектеліп, нәтижені қағазға басу үшін көпбұрышты құжат алу блогын (4-блок) пайдаланып, оның ішіне нәтиженің атауларын жазамыз. Осы көрсетілген y=a+b формуласын есептеу үшін a және b-ның сандық мәндерін бағдарламаға енгізіп (2-блок), содан кейін қосу амалын орындап, ақырында y-ті экранға (қағазға) басып шығарып, жұмысты тоқтатамыз. Осы алгоритмнің схемасы 1.-суретте көрсетілген, ал оның жанында Паскаль және С тіліндегі бағдарламасы жазылған. Бағдарлама мәтінін құру жолдарын келесі тарауларда қарастырамыз.
2. Тармақталу алгоритмдері. Тұрмыста кездесетін алгоритмдер әр түрлі болып келеді. Олардың жиі кездесетін түріне алгоритмнің белгілі бір шарттың орындалуына не орындалмауына байланысты тармақталып бірнеше жолдарға бөлінуі жатады.
2-сурет. Бағдарламалау тілінде жазылуы мен алгоритм
3. Циклдік алгоритмдер. Математикада, экономикада көптеген есептерді шығару кезеңінде бір теңдеуді пайдаланып, ондағы айнымалының өзгеруіне байланысты оны бірнеше рет қайталап есептеуге тура келетін сәттер де жиі кездеседі. Осындай қайталап орындалатын есептеу процесінің белгілі бір бөлік-терін цикл деп атайды. Осы бірнеше рет қайталанатын бөлігі бар алгоритмдер тобы циклдік алгоритмдерге жатады. Циклдік алгоритмдерді пайдалану оларды кейіннен бағдарламаларда цикл операторы түрінде қысқартып жазу мүмкіндігін береді. Циклдер қайталану санының алдын ала белгілі және белгісіз болуына байланысты екі топқа бөлінеді. Қайталану сандары алдын ала белгілі болып келген циклдер тобы арифметикалық цикл болып есептеледі, ал орындалу саны белгісіз циклдер – қадамдық (итерация) цикл болып аталады.
4. Қадамдық циклдер. Циклді орындаудың алдында, оның қайталану саны белгісіз болған жағдайда қадамдық циклдер пайдаланылады. Мұнда циклді жазу үшін тек "шартты тексеру" блогын қолдану қажет, ол циклді аяқтау үшін белгілі бір шартты тексереді. Қадамдық цикл-дердің схемасын сызғанда модификаторды (алтыбұрышты) қолдана алмаймыз, себебі алдынала циклдің неше рет қайталанатыны белгісіз.
3-сурет. Циклға арналған блок-схема түріндегі алгоритм
2.2 Деректер құрылымы мен типтері
2.2.1. Жиымдар, тізімдер, ағаштар, стектер, кезектер, файлдар.
Кез келген бағдарламаның негізгі мақсаты мәліметтерді өңдеу болып табылады. Әр түрлі типтегі мәліметтер компьютер жадында басқаша сақталып, олардың өңделуінде де айырмашылықтар болады. Кез келген алгоритмдік тілде әрбір константа, айнымалы, өрнекті немесе функцияны есептеу нәтижесі белгілі бір типте болуы тиіс. Мәліметтер типі мыналарды:
компьютер жадындағы мәліметтің ішкі бейнелену түрін (көлемін);
белгілі бір типтегі шамалардың қабылдай алатын мәндер жиынын;
осы типтегі шамаларға қолдануға болатын операциялар мен функцияларды анықтайды.
Осыларға байланысты бағдарламада пайдаланылатын нақты объектілерді бейнелеу үшін бағдарламалаушы әрбір шамалардың типін алдын ала таңдап алады.
C++ тілінің барлық типтері негізгі және құрама болып екіге бөлінеді. Мұнда бүтін, нақты, символдық және логикалық шамаларды бейнелеу үшін алты негізгі тип қолданылады (3-сурет). Бағдарламалаушы осы типтерді негізге ала отырып, құрама типтерді сипаттай алады. Құрама типтерге жиымдар (массивтер), тізбелер (пере числения), функциялар, құрылымдар (структуралар), сілтемелер (ссылки), нұсқауыштар (указатели), біріктірмелер (объединения) және кластар жатады.
С тілінде мәліметтердің бірнеше негізгі типтері қолданылады. Олар:
ü char (8 бит) – символдық, яғни таңбалық тип,
ü int – бүтін сан типі,
ü float – нақты сан типі, яғни жылжымалы нүктелі сандар,
ü double – екі еселенген нақты сан типі.
Алғашқы екі тип бүтін сандарды сипаттайтын негізгі (стандартты) тип, алсоңғы екеуі – жылжымалы нүктелі типтер болып табылады. Компилятордың бүтін шамаларды өңдеу үшін жасайтын кодтары жылжымалы нүктелі сандарды өңдеу кодтарынан басқашалау болады. Төмендегі кестеде әр түрлі типтердің ұзындықтары көрсетілген.
Ал С++ тіліне жоғарыдағыларға қосымша тағы екі тип:
ü wchar_t – кеңейтілген символдық тип,
ü bool – логикалық тип енгізілді.
Стандартты сандық типтердің мәндерін бейнелеу диапазонын анықтауда төрт тип спецификаторы қолданылады, олар:
ü short (қысқартылған);
ü long (ұзартылған);
ü signed (таңбалы);
ü unsigned (таңбасыз).
2.2.2 Негізгі бағдарламалау құрылымының түсінігі мен оларды іске асыру тәсілдері.
Int бүтін сандар типі
Int типін стандарт бекітпеген, ол компьютерге немесе компиляторға байланысты өзгеріп отырады. 16-разрядты процессорде ол 2 байт, ал 32-разрядтысында – 4 байт.
Егер int алдында short спецификатор сөзі тұрса, онда ол әрқашан 2 байт, ал егер спецификаторы long болса, 4 байт болады. Санға компьютер жадында берілген орынға қарай олардың мәндері өзгереді.
short int – 2 байт, оның диапазоны –32768 ..+32767;
long int – 4 байт, оның диапазоны –2 147 483 648..+2 147 483 647.
Int типі 16-разрядты компьютер үшін short int типімен бірдей, ал 32-разрядты компьютер үшін long int типімен бірдей.
Signed және unsigned модификаторлары да сандар шамасына әсер етеді, олар:
unsigned short int – 2 байт, оның диапазоны 0 ..65536;
unsigned long int – 4 байт, диапазоны 0..+4 294 967 295.
Айнымалыларды сипаттау кезінде бүтін тұрақтылар – костанталар мәндерін де көрсетуге болады. Мысалы:
int k=0; (бір ғана сан сипатталған және оған мән берілген)
int k1,k3=0; (біреуі сипатталған, екіншісіне мән берілген)
Unsigned типі int, long, short түйінді сөздерімен сипатталатын типтердің модификаторы ретінде қолданылады. Мысалы:
unsigned int sum=0;
Бүтін типті шаманың компьютер жадында ішкі бейнеленуі – екілік жүйедегі код түріндегі бүтін сан. Signed спецификаторын пайдаланғанда, санның ең жоғарғы биті санның таңбасын (0 – оң сан, 1 – теріс сан) көрсетеді. Unsignedспецификаторы тек оң сандарды бейнелейді, өйткені оның жоғарғы разряды да санның коды болып қарастырылады. Сонымен, int типті мәндердің диапазоны спецификаторға байланысты өзгеріп отырады екен. IBM PC тәрізді компьюте-рлер үшін әр түрлі спецификаторы бар бүтін типті шамалардың өзгеру диапазоны 2.5 кестеде келтірліген.
Алдын ала келісім бойынша барлық бүтін санды типтер таңбалы болып саналады, яғни signed спецификаторын жазбаса да болады.
Бағдарламада кездесетін константалардың жазылуына қарай, яғни солардың сыртқы бейнесіне сәйкес белгілі бір тип тағайындалады. Егер ол тип, кейбір жағдайларға байланысты, бағдарламалаушыны қанағаттандырмайтын болмаса, онда санның соңына жалғастырылып керекті типтің атына сәйкес бір әріп – L, l(long) немесе U, u (unsigned) жазылады. Мысалы, 32L константасының типі long және ол компьютердің жедел жадында 4 байт орын алады. Қажет болса, Lжәне U әріптерін қатарластыра да қолдануға болады, мысалы, 0x22UL немесе 05Lu. Осы атаулардағы short int, long int, signed int және unsigned int типтерінshort, long, signed және unsigned деп қысқаша жазуға болады.
Бүтін типтердің мүмкін болатын ең кіші және ең үлкен мәндері компи-ляторға байланысты болып келеді де, С++ тілінде <limits.h> (<climits>) тақырыптық файлында көрсетіледі, нақты типтердің сипаттамалары – <float.h>(<cfloat>) файлында және де numeric_limits класының үлгілерінде беріледі).
2.2.3. Күрделі және құрамдас деректер типтері.
С/С++ тілдерінде негізгі типтерден бөлек, солар арқылы жасалатын туынды типтерді де пайдалануға болады. Туынды типтердің үш түрі бар, олар:
- берілген типтегі элементтер массиві немесе жиымы;
- берілген типтегі объектіге нұсқауыш;
- берілген типтегі мән қайтаратын функция.
Жиым немесе массив – бір типтегі элементтердің реттелген жиыны.Жиымның әрбір элементіне компьютер жедел жадынан нақты орын беріледі.
Бір жиым элементтері тізбектеле қатар тұрған жады ұяларында орналасады. Жиым элементтері саны оның өлшемі (ені) болып табылады. Компьютер жадынан орын бөліп беру үшін жиымның өлшемін білу керек. Жиымға орын бөліп беру бағдарламаны компиляциядан өткізу кезінде атқарылады.
Жиым бір атаумен – идентификатормен аталады да, индексті айнымалы ұғымына сәйкес келеді. Мысалы, бүтін сандардан тұратын а 100 жиымы былай анықталады:
int a[100];// бүтін типтегі 100 элементтен тұратын а жиымымұнда sizeof(a) операциясының мәні 400 болады, яғни әрқайсысы 4 байттан тұратын 100 элемент.
Жиым элементтері 0-ден бастап нөмірленеді.
Жиым элементін пайдалану үшін оның нөмірін (индексін) көрсету керек:
a[0] – индекс константа түрінде берілген,
a[55] – индекс константа түрінде берілген,
a[i] – индекс айнымалы түрінде берілген,
a[2*i] – индекс өрнек түрінде берілген.
Бір өлшемді жиымдарды өңдеу
Жиым элементтерін енгізу немесе оларды түрлендіру үшін цикл опера-торлары қолданылады. Төменде 10 элементі бар жиымды 0-ден 9-ға дейінгі сандармен толтырып, сонан кейін оларды кері бағытта экранға шығару мысалы көрсетілген:
...
main ()
{int ia[10];
int index;
for (index = 0; index < 10; index ++)
ia[index] = index;
for (index = 9; index >= 0; index --)
printf(" %i", ia[index]);
} …
С/С++ тілдерінде жиымды жиымға бірден теңестіруге болмайды, мысалы,
А0, а1, а2, ... , а9 және с0, с1, с2, ... , с9 жиымдары үшін а = c деп жазуға рұқсат етілмейді. Олардың элементтерін цикл ішінде бір-біріне біртіндеп теңестіру керек.
Мысалы, мынадай цикл жазылуы тиіс:
int a[10], c[10];
for (int i=0; i<9; ++i)
a[i]=c[i];
Жиымды өңдеу есептерінің түрлері (кластары)
Жиымды өңдеу есептері көбінесе бірыңғайланған төрт түрге бөлінеді.
1) Есептердің 1-түріне жиым элементтерінің барлығын немесе көрсетіл-гендерін бірдей бір тәсілмен өңдеу есептері жатады.
2) Есептердің 2-түріне (класына) жиым элементтерінің орналасу реттілігін өзгерту тәсілдері жатады.
3) Есептердің 3-класына бірнеше жиымдарды қатар өңдеу немесе бір жиымның ішкі элементтерін бірнеше топқа бөліп жеке-жеке өңдеу тәсілдері жатады. Жиымдар бір тәсілмен – синхронды өңделеді немесе әр түрлі тәсілмен – асинхронды түрде өңделеді.
4) Есептердің 4-класына жиымның берілген санға тең бірінші элементін табу, яғни іздеу есептері жатады.
Екі өлшемді жиымдар. Екі өлшемді жиымды – матрицаны пайдалану үшін тік жақшалар ішінде олардың екі өлшемінің де енін көрсету керек. Мысалы:
int a[4][3];
алғашқы сан жолдар санын, ал екінші сан бағаналар санын көрсетеді, а жиы-мы 12 элементтен тұрады. Оларға бастапқы мәнді былай береміз:
int a[4][3]={{0,1,2}, {3,4,5}, {6,7,8}, {9,10,11}};
ішкі жүйелі жақшаларды қоймаса да болады:
int a[4][3] = {0,1,2,3,4,5,6,7,8,9,10,11};
Келесі түрде сипаттау жолдардың тек бірінші элементтерін ғана анықтайды,қалған элементтер 0-ге тең болып саналады:
int a[4][3]={ {0},{3},{6},{9} };
Егер ішкі жүйелі жақшалар алынып тасталса, онда мағынасы өзгереді.
int a[4][3]={ 0,3,6,9 };
мұнда бірінші жолдың 3 элементі мен екінші жолдың бірінші элементі анықталады да, қалғандары 0 болып саналады.
Екі өлшемді жиымды инициалдау қабаттасқан циклдер арқылы орындалады.
1-мысал.
/* a[3][4] жиымы элементтерін rand( ) арқылы енгізу және экранға шығару */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main()
{
const int jol=3, bag=4;
int a[jol][bag];
clrscr();
for (int i=0; i<jol; i++)
for (int j=0; j<bag; j++)
a[i][j]=rand()%100-50;
printf("\nа[3][4] жиым элементтерi мәндерi:");
for (i=0; i<jol; i++)
for (j=0; j<bag; j++)
printf(" %i",a[i][j]);
getch();
}
2.3Заманауи бағдарламалау тілдерінің базалық конструкциялары
Си тілінің алфавиті:
- Латын алфавитінің бас және кіші әріптері (A-Z, a-z).
- 0 ден 9-ға дейінгі араб цифрлары.
- Арнайы символдар : "'.,{}|[]()+-*%\;:?<=>_!&#~^
Пробелмен бөлінбеген кейбір символдар комбинациясы бір символ ретінде қарастырылады. Оларға мыналар жатады:
++,==,&&,||,<<,>>,>=,<=,+=,-=,*=,/=,**/,//
Әріптермен немесе _ (астын сызу) белгісінен басталған латын әріптерінің, цифр, _ белгілерінің тізбегі идентификатор болып табылады. Pascal – дан айырмашылығы Си – де бас және кіші әріптер айырылады. Си тілінде сандық деректердің негізгі 4 типі бар. Int, char – бүтін сандар, Float, double – нақты сандар.
Алфавит. СИ тілінің символдарын бес топқа бөлуге болады.
1. Идентификаторлар мен қызметші сөздерді тудыру үшін керек символдары (1 кесте). Бұл топқа ағылшыналфавитінің жолдық кіші және бас әріптерді, солнымен қатар астын сызу символы да кіреді. Бірдейжолдық кіші және бас әріптердің кодтары әртүрлі болғандықтан олар әртүрлі символ болып саналады.
2. Орыс алфавитінің жолдық кіші және араб цифрлары (2 кесте).
3. Номерлеу белгілері және арнайы символдар (3 кесте). Бұл символдар бір жағынан есептеу процесін ұйымдастыру үшін, ал екінші жағынан копиляторға инструкцияларды беру үшін ғолданылады.
4. Басқаратын және бөлетін символдар. Бұл топқа кіретін символдар: бос орын(пробел), табуляция символдары, жолды көшіру, каретканы қайтару, жаңа жол және жаңа бет. Бұл символдар қолданушы анықтайтын константа мен идентификатор сияқты объектілерді бір – бірінен ажыратады.
Идентификатор. Идентификатор деп тек әріптен немесе арнайы символдан басталуы міндетті әріптер, цифрлар, сонымен қатар арнайы символдар тізбегін айтады.
Мысалы: КОМ_16, size88, _MIN, TIME, time.
Мұнда бас және кіші әріптерден айырмашылығы бар, яғни соңғы екі идентификатор әр түрлі. Идентификаторларды жазу үшін латын алфавитінің жолдық кіші және бас әріптері қолданылады. Арнайы символ ретінде астын сызу символы (_) қолданылуы мүмкін.
Қызметші сөздер. Программистің өзі еркін таңдап қолдана алмайтын, тілдегі қабылданып сақталған идентификаторлар қызметші сөздер деп аталады. Қызметші сөздер мәліметтер типі, жады кластары, тип квалификаторлары, модификатор және операторлар типіне анықтайды. Қызметші сөздер тізімі:
auto double int struct break else long switch
register tupedef char extern return void case float
unsigned default for signed union do if sizeof
volatile continue enum short while
Қызметші сөздер идентификатор ретінде қолданыла алмайды. Олар мағынасына қарай келесі жолмен топталады. Мәліметтер типтерін анықтау үшін типтердің спецификаторлары мен квалификаторлары қолданылады.
2.3.1 Тізбектелген және тармақталған процесстерді бағдарламалау.
Түрлі айнымалылардың, тұрақтылар мен операция символдарының қандай да болмасын бір жинақ түрінде жазылуы өрнек деп аталады. Си тілінде өрнек соңына нүктелі үтір (;) символы қойылып жазылады. Осы түрде жазылған өрнек не функция оператор делінеді. Мысалы, операторлар:
Z= (3* x+y +5);
y= sin (x);
Сипаттаманың соңына да нүктелі үтір қойылып жазылады, сондықтан ол да оператор .
Мысалы: floaty, z; сипаттамасы – оператор. Бір символдық оператор мәні бір не бірнеше қатарларда жазылуы мүмкін, тек онда пайдаланатын символдар саны байтпен көрсетілген аралықтан аспаса болғаны.
Функция да С және С++ тілдерінде түрлі ұғымды білдіреді.
Мысалы:
1) блок басында сипатталатын айнымалы;
2) бағдарлама ішінде орындалатын блок;
3) арнайы ат беріліп , кітапханада мәнін есептейтін ішкі бағдарлама бойынша жазылып сақталған функция, ( мысалы, sin(), sgrt(), т.б.).
Мысалдар:
int radius (x); -тип, функция аты және аргумент
{
операторлар – құрама оператор – функция
}
float x,y - тип, айнымалылар аттары. Сипаттамаға
сәйкесx, y айнымалыларының мәндері үшін алты мәндік ондық цифрлар алынады.
Y=sin (6.5)+3; - оператор; , sin() функциясының мәні үшінарнайы стандартты кітапхана шақырылып, мәні автоматты түрде есептеледі.
(Си тілінде тригонометриялық функциялардың мәндері радиан арқылы өлшенеді ).
Мұндағы ескеретін жайт : соңғы өрнек – оператор. Оның соңына қойылған қойылатын нүктені үтір алып тасталған кезде қалған бөлігі (y=sin (6.5)+ 3) функция , ал sin () –осы функция ішіндегі стандартты функция . sin (6.5)- өрнегі функцияны шақыру деп аталады.
Операциялар
Си, С++ тілдерінде пайдаланылатын негізгі операциялар арифметикалық, қатыс, логикалық, меншіктеу, биттік және шарт.
Арифметикалық операциялар
Қалдық (%) операциясы да тек бүтін типті сандарды бөлуде қолданылады:17% 3=2;
-17% 3= -2. Мұндай ерекшеліктер төмендегі бағдарламада көрсетілген.
# include <stdio.h>
#include <conio.h>
main() (2)
{
int x,y, z1, z2, clrsсr ();
printf (“сандар:x,y=?”);
scanf(“%d %d”, &x, &y);
getch (); return 0;
}
Қатыс операциясы. Логикалық операциялар.
Қатыс операциясы салыстыру үшін шарт түрінде жазылатын операция. Си, С++ тілдерінде алты қатыс операциясы, үш логикалық операция бар.
Қатыс операциялары:
Теңдікті тексеру(= =)
Тең еместікті тексеру(!=)
Кіші(<)
Кіші не тең (< =)
Үлкен (>)
Үлкен не тең(> =)
Меншіктеу операциясы
Меншіктеу операторы өрнек мәнін айнымалыға меншіктеу операциясының соңына ; таңбасын қоюдан тұрады. Меншіктеу операциясы әдеттегідей теңдік (=) таңбасымен белгіленеді. Айнымалы lvalue (адрестік шама) деп аталады. Мысалы, y=3*x+5; операторындағы y айнымалысы – lvalue.
Си тілінде қосарлы меншіктеу операциясы да бар. Мысалы, y = x = a*b+5; операторында алдымен a*b+5 өрнегінің мәні x айнымалысына меншіктеледі, ал ол y айнымалысына меншіктеледі.
Си тіліне қосымша меншіктеу операциялары да енгізілген:
+=, – =, *= және %=
Олар – айнымалы мәніне +, –, * не % операциясы қосылған өрнекті бастапқы айнымалыға меншіктеу операциялары. Мұндай операцияларды пайдалану тәсілі төменде көрсетілген. Бірдей операциялар:
m+=10 және m=m+10
m – =10 және m=m –10
m*=10 және m=m*10
m%=10 және m=m%10
Мұндағы m+=10 командасы m айнымалысының мәнін 10 ға өсіруді білдіреді, ал m=m+10 командасы оң жақтағы m –нің мәнін орнына қойып, және оған 10–ды қосып, нәтижені m айнымалысына меншіктеуді білдіреді. Олардың ерекшеліктері жоқ, тек бірінші түрде жазылған команда екінші түрде жазылған командадан тезірек орындалады.
?! Шарт операциясы
?! шарт операциясы- үш операндтан тұратын жалғыз операция. Оның жазылу синтаксисі:
<өрнек1> ? <өрнек2>: <өрнек3>
Бұл операцияда алдымен өрнек1-дің мәні (ақиқат не жалған екендігі) анықталады. Егер ол ноль (жалған) болмаса, онда өрнек2-нің мәні нәтиже түрінде қабылданады. Егер өрнек1-дің мәні жалған (ноль) болса, онда өрнек3-тің мәні есептеледі де, оның мәні операция нәтижесі үшін алынады. Операцияны орындау үшін алдымен оны кез келген айнымалыға меншіктеп алу керек.
Сонымен, операцияны орындау кезінде соңғы екі өрнектің бірінің ғана мәні нәтижеленеді.
Мысалы, max=(x>y) ? x:y өрнегі үшін x>y болса, max айнымалысына x-тің мәні, ал x<y болса, y-тің мәні меншіктеледі.
Бағдарлама:
# Include <stdio.h>
#Include <conio.h>
main()
{
floatmax,x,y; clrsсr ();
printf (“x,y=?”);
scanf(“%f %f”, &x, &y);
max=(x>y) ? x:y;
printf (“max=%f”,max);
getch (); return 0;
{
Нәтиже: x,y=? 13.2 5.7 Ent
max=13.200000
2.3.2 Си тілінің операторлары
printf() – экранға мәтінді не аргументтердің мәнін форматты түрд ешығаруға арналған стандартты функция. Мұндағы ескеретін жайттар: 1) Егер шығаруда форматтың қажеті болмаса, онда операторды (1-) бағдарламаның бірінші printf операторы сияқты форматсыз пайдалана беруге болады. 2. Екінші printf операторында %f форматы %2.3f түрінде берілсе, сәйкес нәтиже 0.001 дәлдікпен шығады.
scanf() – форматты түрде енгізу функциясы. (соңына нүктелі үтір қойылып жазылғандықтан, ол–операторда ).
getch()– кезкелген перне басылғанша мәндермен жұмыс жасалатын терезелік бетті уақытша ұстап тұруға арналған оператор. (Турбо Паскальдағы Read Key операторы сияқты, ол басылған перненің кодын қабылдайды). Кез келген перне басылған кезде бағдарлама жазылған экран қайта көрінеді.
- printf - монитор экранына хабарламалар мен айнымалылар мәнін шығаратын функция.
- printf функциясының бірінші параметрі болып шығарылатын мәтін мен айнымалы мәнін шығару форматын анықтайтын шығару қатары болып табылады.
- айнымалы мәнін шығару форматы спецификатор түрінде беріледі:
% - символымен басталады.
- Сандық мәндерді шығаруда көбінесе мына спецификаторлар қолданылады:
- %i,%d – бүтін сандарды таңбасымен шығару,
- %u - бүтін сандарды таңбасыз шығару,
- %f - жылжымалы нүкте түрінде берілген бөлшек сандарды шығару,
- %n.mf – жылжымайтын нүкте форматындағы бөлшек сандарды шығару,
- n – санның бүтін бөлігі, m – бөлшек бөлігі;
- \n – жаңа қатар,
- \t – табуляция
- \’’- екеулік тырнақша
- \\ - \ символы.
- printf функциясының орнына puts функциясын қолдануға болады, ол экран бетіне мәтінді шығарғаннан кейін автоматты түрде келесі қатардың басына әкеледі.
- Клавиатурадан берілгендерді енгізу үшін scanf функциясы қолданылады.
- scanf функциясының бірінші параметрі басқарушы жол болып табылады , қалған параметрлері – мәндері енгізілетін айнымалылар адресі.
- басқарушы жол екі тырнақшаға алынған спецификатор тізімін береді:
- %i – бүтін сандарды таңбасымен енгізу,
- %u - бүтін сандарды таңбасыз енгізу,
- %f - бөлшек сандарды енгізу
- %s- жолды енгізу.
Шартты оператор. IF операторы.
Тармақталу (if) операторы, процедуралық бағдарламалау тіліндегі сияқты, екі үлгіде жазылады:
1) if (шарт) оператор; /* қысқа құрылым*/
2) if (шарт) оператор1;
else оператор2; /* толық құрылым*/
Соңғы құрылымды мынадай түрде алуға болады:
if (шарт1) оператор1;
else if (шарт2) оператор2;
Егер if операторының құрамында бірнеше оператор болса, олар фигуралық жақшаларға алынып жазылады.
мысал.
функциясының мәнін есептеу керек.
#include <stdio.h>
#include <conio. h>
main()
{ float x,y; clrscr();
printf(“x=?”); scanf(“%f”,&x);
if (x<0 || x>2 ) y=2* x + 1;
else if (x>=0 && x<=2)
{y=x*x+3; printf (“Нәтиже:”);}
printf(“y=%f ”,y);
getch();
}
Енгізу- шығару функциялары
puts –
Синтаксис:
puts (cоnst char* қатар)
Экранға символдар қатарын шығарады және курсорды экранның келесі қатарының басына алып келеді. Функция параметрі ретінде қатарлық тұақтыны немесе қатарлық айнымалыны қолдануға болады. Тақырып файлы: <stdio.h>
gets
Синтаксис:
char *gets (char* s);
Клавиатурадан символдар қатарын енгізеді.Енгізілетін қатарлар бос орыннан тұруы мүмкін. Тақырып файлы: <stdio.h>
putch
Синтаксис:
int putch (int c)
Символды экранға шығарады. Тақырып файлы:<conio.h>
- Мәтінді экран бетіне түрлі түсте шығару үшін cprintf және cputs функцияларын қолдану керек.
- Жаңа жолға өту \n\r –түрінде беріледі.
- cprintf және cputs функцияларымен шығарылатын символдар түсі textcolor (түс) функциясы арқылы орнатылады.
- Түстің фонын textbackground (Түс) орнатады.
- Clrscr, textcolor және textbackground функцияларын қолдану үшін бағдарлама мәтініне # include <conio.h>директивасын қосу қажет.
2.3.3 Циклдық есептелімді процестерді бағдарламалау.
С, С++ тілдерінде циклдік операторлардың үш түрі бар :
for, while, do – while,
Құрама цикл денесі фигуралық жақшалар ішінде жазылады, ал дене бір оператордан тұрса, оны жақшаларға алу міндетті емес.
Ескерту. Әдетте кілттік сөздермен операторлар латын алфавитінің кіші әріптерінен жазылады.
For циклі.
Инкремент (++) және декремент (--) операторлары
for (өрнек1; өрнек2; өрнек3)
{ операторлар}
өрнек1 –циклдік инициалдау. Қарапайым түрде ол- параметрге бастапқы мән меншіктеу командасы.
өрнек2- циклдің аяқталу шарты. Ол ақиқат кезде циклдің денесі орындалып, басқару ретімен 3- өрнекке өтеді.
өрнек3- параметрдің өзгеру шамасы (цикл қадамы).
C, Turbo C++тілдерінде параметр бүтін сан болса , ол 1 –ге өседі не 1-ге кемиді. Мысалы , параметр k арқылы белгіленсе , оның өзгеруінің жазылу түрі: k++ не k--
++ - инкремент (өсімше ) операторы деп аталады. Ол өз операндын 1-ге өсіреді (k++ және k=k+1 операторлары бірдей ).
-- - декремент (төмендету) операторы делінеді. Ол өз операндын 1-ге кемітеді (k-- және k=k-1 операторлары бірдей)
For цикліне енгізілген әр өрнек нүктелі үтір (;) таңбасымен ажыратылып жазылады. Мысалы :
for (k=0; k<10; k++) printf(“%d\n”,k); бағдарламасының үзіндісі баған бойынша 0,1,2,3,.......,9 сандарын , ал,
for (k=9; k>=0; k--) printf(“%d\n”,k);
үзіндісібағанбойынша 9,8,.....2,1,0 сандарын басып шығарады. Цикл параметрін символдық етіп алуға болады. Мысалы ,
for (ch=’A’ ; ch=’R’; ch ++) printf(“%c”,ch);
циклі кезегімен А-дан R –гедейін латын алфавитінің бас әріптерін басып шығарады.
С,С++ тілдерінде функция бөлімінде пайдаланылатын бүтін тұрақтының орнына айнымалы арқылы белгіленген атауын пайдалануға да болады. Ол үшін тұрақтыны
main () функциясының алдында CONST стандартты операторы (спецификаторы) арқылы сипаттап қою керек. Сипаттау үлгісі :
const<атау>=<мән>
Мысалы, const ms=12; Тұрақтының типі оның мәнінің типімен анықталады. Мәнді айнымалы атауы арқылы сипаттаудың да қатесі жоқ, мысалы,
const ms;
For циклiн пайдаланып, y=x5 функциясының мәнін есептеу керек.
#include <stdio.h>
#include <conio.h>
const a=5;
main()
{
float x, y; int k; clrscr();
puts(“x мәні : x=?”);
scanf(“%f”, &x); y=1;
for (k=1; k<=a; k++)
y=x*y;
printf (“дәреже=%f\n”,y); getch ()
; return 0;
}
Циклшексізболуыдамүмкін. Мысалы,
For (k=10; k>8; k++)
Шексіз не жай циклден break операторын пайдаланып шығуға болады.
While, do-while циклдері
Циклдердің жазылу үлгісі (while – әзірше, do - орындау):
1) while (шарт) {операторлар}
2) do
{операторлар}
while (шарт)
while циклінің денесінде бір ғана оператор бар болса, оны фигуралық жақшаларға алмай жазуғада болады.
Мысал. Жалпы мүшесі
(k=1,2,…) болатын тізбектің алғашқы алты мүшесінің қосындысын табу керек.
#include<stdio.h>
# include<conio.h>
main()
{
int k, a, s; clscr();
while (k<=6)
{ a=k*k; s=s+a; k++; }
Printf(“s=%d\n”,s);
getch(); return 0;
} // Нәтиже: s=91
2.3.4 Рекурсия. Болдырмауды өңдеу.
С және С++ тілдерінде тармақталу тобынан тұратын және ентаңбамен белгіленген деректердің (берілгендердің) бірін таңдау үшін switch операторы, сұрыптаушы үшін case операторы пайдаланылады.( switch – ауыстырып қосқыш , case -жағдай). Switch операторының жазылу үлгісі:
switch (өрнек)
{
case <тұрақты 1>: операторлар;
break ;
сase <тұрақты 2>: операторлар;
break ;
…………………….
сase <тұрақты N> : операторлар;
break ;
default : операторлар;
Мұндағы тұрақтылар – ентаңбалар (k=1,2…..,N). Ентаңба-оператор алдында жазылатын (оператор жолын белгілейтін) бүтін сан, символ не символдар тізбегінен тұратын атау. Ентаңба соңына қос нүкте (:) қойылып жазылады. Мысалдар ( мұндағы ентаңбалар: 10,’C’):
case 10: m-3 ;
case ‘C’: printf(“Ура!”);
Ентаңбаға өту үшін switch (өрнек) операторы пайдаланылады; мұндағы өрнек– мәні айқындалатын айнымалы не математикалық өрнек.
switch операторының орындалуы әдеттегідей алгоритмдік тілдердегі сияқты: алдымен switch кілттік сөзінен соң жақшалар ішінде жазылған өрнек мәні есептеледі не айнымалы мәні оқылады. Ол ентаңбалар енгізілген сұрыптаушылармен салыстырылады да, жүйе басқаруды ентаңба мәніне сәйкес келетін операторға (операторлар блогына) өткізеді. Егер оқылған мән бірде – бір ентаңбаға тең болмаса, басқару default (жоқ болғанда) кілттік сөзінен соң жазылған операторға беріледі.
Үлгі де әр case операторының кейінгі жолда break (тоқтату) операторы енгізілген. Ол сәйкес case операторы орындалған соң оны тоқтатады да, жүйе басқаруды Switch операторынан соң жазылған бағдарламаның келесі операторына өткізеді.
CONTINUE операторы
Бір цикл екінші циклдің ішінде орналасса, олар бір-біріне салынған циклдер не цикл ішінде цикл делінетіні белгілі. С, С++ тілерінде сыртқы цикл денесі фигуралық жақшаларға алынып жазылады. Егер ішкі цикл де бірнеше операторлардан түрса, ол да осындай түрде жазылады.
Мысал. (9х9) көбейту кестесін дайындау керек.
#include<stdio.h>
#include<conio.h>
main()
{
int k, j; clrscr();
for(k=1; k<10; k++)
{
For (j=1; j<10; j++)
Printf(“%d*%d=%d “,k,j,k*j);
Printf(“\n”);
} getch(); return 0;
}
Continue (жалғастыру) – for, while, do – while циклдерінің кез келгенінде пайдаланатын оператор. Оның орындалу түрі: ол оқылған соң жүйе цикл денесінің қалған бөліктерін орындауды тоқтатадыда, циклді қайталап орындайды, яғни басқаруды циклдің жаңа қадамын орындауға өткізеді. Бұл оператордың орындалуы break операторының орындалуына қарама-қарсы.