Бағдарламалау және дерекқор негіздері
И.Г.Семакин
Жазылымсыз режим: 20-беттен кейін жазылым беті ашылады, әрі қарай әр 10 бет сайын (ең көбі 5 рет).
«Оқулық 230401 «Ақпараттық жүйелер (салалар бойынша)» (ОБ 05) мамандығы бойынша орта кәсіби білім берудің Федералды мемлекеттік білім беру стандартына сәйкес құрылды. Алгоритмдерді құрудың құрылымдық әдістеме қағидалары, Паскаль бағдарламалау тілінің негіздері, деректердің түрлі типтері мен құрыл...
КƏСІБИ БІЛІМ БЕРУ
И.Г. СЕМАКИН
БАҒДАРЛАМАЛАУ ЖƏНЕ ДЕРЕКҚОР НЕГІЗДЕРІ
ОҚУЛЫҚ
«Білім беруді дамытудың Федералды институты» Федералды мемлекеттік автономды мекемесімен «Компьютерлік желілер» мамандығы бойынша орта кәсіби білім беру бағдарламаларын іске асыратын білім беру мекемелерінің оқу процесінде оқулық ретінде пайдалану үшін ұсынылған
Рецензияның тіркеу нөмірі 307 2014ж. 26 маусым «БДФИ» ФМАМ
Мәскеу
«Академия» баспа орталығы 2014
ӘОЖ 004.4(075.32)
КБЖ 32.973-018.2-ші 723
С81
Бұл кітап Қазақстан Республикасының Білім жəне ғылым министрлігі жəне «Кəсіпқор» холдингі» КЕАҚ арасында жасалған шартқа сəйкес «ТжКБ жүйесі үшін шетел əдебиетін сатып алуды жəне аударуды ұйымдастыру жөніндегі қызметтер» мемлекеттік тапсырмасын орындау аясында қазақ тіліне аударылды. Аталған кітаптың орыс тіліндегі нұсқасы Ресей Федерациясының білім беру үдерісіне қойылатын талаптардың ескерілуімен жасалды. Қазақстан Республикасының техникалық жəне кəсіптік білім беру жүйесіндегі білім беру ұйымдарының осы жағдайды ескеруі жəне оқу үдерісінде мазмұнды бөлімді (технология, материалдар жəне қажетті ақпарат) қолдануы қажет. Аударманы «Delta Consultіng Group» ЖШС жүзеге асырды, заңды мекенжайы: Астана қ., Иманов көш., 19, «Алма-Ата» БО, 809С , телефоны: 8 (7172) 78 79 29, эл.
поштасы: іnfo@dcg.kz
Пікір берушілер:
Пермь мемлекеттік ұлттық зерттеу университетінің қолданбалы математика және информатика кафедрасының меңгерушісі, фи.-мат.
ғылымдарының докторы, профессор
С. В. Русаков;
ЭЖМ ҒЗУ-Пермь бизнестегі ақпараттық технологиялар кафедрасы-ның доценті, физ.-мат. ғылымдарының кандидаты
Л. В. Шестакова
Семакин И. Г.
С81
Бағдарламалау және дерекқор негіздері: орта кәсіби білім беру мекемелерінің студенттеріне арналған оқулық / И.Г. Семакин.
ІSBN978-5-4468-0755-0
Оқулық 230401 «Ақпараттық жүйелер (салалар бойынша)» (ОБ 05) ма- мандығы бойынша орта кәсіби білім берудің Федералды мемлекеттік білім беру стандартына сәйкес құрылды. Алгоритмдерді құрудың құрылымдық әдістеме қағидалары, Паскаль бағдарламалау тілінің негіздері, деректердің түрлі типтері мен құрылымда-рын өңдеу бойынша үлгілік бағдарламалар құрудың құралдары мен әді-стері қарастырылды. Object Pascal нұсқасы үшін объектілік-бағдарланған негізгі түсініктер баяндалған, Delphі бағдарламалау жүйесінде графикалық интерфейспен бағдарламалар әзірлеу әдістері сипатталған. Көпкестелік ре-ляциялық дерекқорды жобалау әдістемесіне ерекше көңіл бөлінген. Сұра-ныстарды сипаттау үшін SQL тілі, сондай-ақ СУБД MS Access сұраныста-рының Конструктор нұсқасында QBE тілі қолданылады.
Орта кәсіби білім беру мекемелерінің студенттеріне арналған.
ӘОЖ 004.4(075.32) КБЖ 32.973-018.2-ші723
ІSBN 978-5-4468 0755-0
© И.Г.Семакин, 2014
© «Академия» білім беру-баспа орталығы, 2014
© Рәсімдеу. «Академия»баспа орталығы, 2014
Құрметті оқырман!
Берілген оқулық 230401 «Ақпараттық жүйелер (салалар бойын- ша)» мамандығы үшін оқу-әдістемелік жиынтықтың бөлігі болып табылады. Оқулық «Бағдарламалау және дерекқор негіздері» (ОБ 05) жалпы кәсіби пәнді оқуға арналған. Жаңа ұрпақтың оқу-әдістемелік жиынтықтарына жалпы білім беру және жалпы кәсіби пәндер мен кәсіби модульдерді оқуды қамта- масыз ететін, дәстүрлі және инновациялық оқу материалдары кіреді. Әрбір жиынтыққа жалпы және кәсіби құзыреттерді, соның ішінде жұмыс берушінің талаптарын ескере отырып, меңгеруге қажетті оқулықтар мен оқу құралдары, оқыту және бақылау құрал-жабдықта- ры кіреді. Оқу басылымдары электронды білім беру ресурстерімен то- лықтырылады. Электронды ресурстерде интербелсенді жаттығулар мен жаттығу құрылғылармен берілген теориялық және практикалық модульдер, мультимедиялық объектілер, Интернеттегі қосымша ма- териалдар мен қорларға сілтемелер берілген. Оларға оқу процесінің негізгі параметрлері: жұмыс уақыты, бақылау және практикалық жұ- мыстарды орындау нәтижелері белгіленетін терминологиялық сөздік пен электронды журнал енгізілген. Электронды ресурстер оқу про- цесіне оңай кіріктіріледі және түрлі оқу бағдарламаларына бейімде- луі мүмкін.
Алғысөз
Бағдарламалау көптеген жағдайларда тек кәсіпқойларға арналған кәсіпке айналуда. 1980 жылдардың ортасында жарияланған «Бағдар- ламалау - екінші сауаттылық» атты ұран артта қалды. «Компьютерлік сауаттылық» түсінігіне бүгінгі таңда ең алдымен ақпараттық техно- логиялардың алуан түрлі құралдарын қолдану дағдысы кіреді. Қан- дай да бір ақпараттық есепті шеше отырып, сәйкес бағдарламалық құралды таңдау қажет. Бұл электронды кестелер, дерекқорды басқа- ру жүйелері, математикалық пакеттер және басқалары болуы мүмкін. Мұндай құралдар есепті шешуге мүмкіндік бере алмаған жағдайда ғана бағдарламалаудың әмбебап тілдеріне жүгінген жөн. Бағдарламашылардың екі түрлі категориясы бар: жүйелік және қолданбалы. Жүйелік бағдарламашылар ЭЕМ негізгі бағдарламалық құралдарын (операциялық жүйелерді, трансляторларды, сервистік құралдарды және с.с.) әзірлеушілер, бұлар бағдарламалаудағы жоғары дәрежелі мамандар. Қолданбалы бағдарламашылар түрлі са- ладағы (ғылым, техника, өндіріс, ЭЕМ қолданбалы бағдарламалық қамсыздандыру құралдарын әзірлейді. Қолданбалы бағдарламалардың да, жүйеліктің де сапасына, қой- ылатын талаптар қазіргі кезде өте жоғары. Бағдарлама есепті дұрыс шешіп қана қоймай, сонымен қатар заманауи интерфейске ие болуы, өте сенімді болуы, пайдаланушыға жылы шыраймен қарауы және т.с.с. тиіс. Тек осындай ғана бағдарламалар бағдарламалық өнім- дердің әлемдік нарығындағы бәсегеге төтеп бере алады.
Компьютерлік техниканың дамуымен бірге бағдарламалаудың
әдістемесі мен технологиясы да дамыды. Алдымен командалық және операторлық бағдарламалау пайда болды, 1960 жылдары құрылым- дық бағдарламалау жете дамыды, логикалық және функционалдық бағдарламалау желілері, ал соңғы уақытта - объектілі-бағдарланған және визуалды бағдарламалау пайда болды. Бағдарламалауды бастапқы үйренуде алдыға қойылатын бірінші міндет – алгоритмдік ойлау қабілетін дамыту, негізгі алгоритмдік құрылымдармен: жолымен, тармақталуымен, кезеңімен, бағдарла- малаудың құрылымдық әдістемесін меңгерумен танысу. Бұл мақ- сатқа осы оқу құралының 1- тарауы арналған. Берілген курсты оқуға дайындық ретінде оқушылардың алгорит- мдеу негіздерін информатиканы мектептің базалық курсы аясында меңгергені абзал. Әдетте мектепте алгоритмдеу құрылымдық әді- стеме негіздерін сәтті меңгеруге септігін тигізетін оқу атқарушыла- рын қолдану арқылы оқытылады: Алғашқы оқу үшін ең тиімді сәйкес келетін құрал ретінде Паскаль бағдарламалау тілі болады. Бұл бағдарламалаудың ең танымал тіл- дерінің бірі; ол бірқатар тілдер үшін негізгі болып саналады. Паскаль тілінің авторы – швейцарлық профессор Никлаус Вирт. Құрылымдық әдістеме бағдарламалық мәдениеттің негізі болып қалады. Бағдарла- малауды оқуға бет бұрған адамның оны меңгермей, кәсіпқой маман болуға ешқандай мүмкіндігі жоқ. Берілген кітап – бұл ең алдымен Паскаль және Delphі тілдері бой- ынша емес, бағдарламалау бойынша оқу құралы екенін атап өтеміз, сондықтан берілген тілдерді егжей-тегжейлі сипаттауды бұл кітаптан таппайсыз. Тілдерді сипаттау бағдарламалаудың бастапқы курсына қажетті көлемде ғана берілген. Тілдерді толығырақ сипаттауды әде- биеттер тізімінде берілген кітаптардан табуға болады.
Оқу құралында үйренетін тілдер үшін бағдарламалаудың нақты жүйелерімен жұмыс жасау бойынша берілген нұсқаулар жоқ. Оқушы- лар олармен басқа дереккөздерді қолдана отырып, ЭЕМ практика жүзінде танысулары тиіс. Дәстүрлерді дәріптей отырып, ақпараттық жүйелер ретінде де- рекқорларда ақпаратты сақтауға арналған және оны енгізу мен сұра- ныстарға жауап дайындауды қоса алғанда, онымен түрлі амалдар жасауды қамтамасыз ететін жүйелерді айтуға болады. Ақпараттық жүйелерге ақпараттық-анықтамалық жүйелерді, құжатайналымды автоматтандыратын жүйелерді, автоматтандырылған жобалау жүйе- лерін және басқаларын жатқызады. Информатика курсы шегінде сан түрлі пән салаларында қолда- нылуы мүмкін болатын жүйелерді құру әдістері, дерекқорда сақтала- тын ақпаратты нысандандыру және жүйелендіру оқытылады.
1 тарау
АЛГОРИТМДЕРДІ ҚҰРУ ҚАҒИДАЛАРЫ ЖӘНЕ АЛГОРИТМДІК ҚҰРАСТЫРЫЛЫМДАР
1.1.
АЛГОРИТМДЕР ЖӘНЕ ШАМАЛАР
ЭЕМ-да есепті шешу кезеңдері.
Компьютерді пайдалану арқылы кез келген есепті шығару бойынша жұмысқа алты кезең кіреді:
Көбіне бұл бірізділікті
ЭЕМ-да есепті шешудің технологиялық тізбегі
деп атайды (бұл тізімнен бағдарламалауға тікелей қатысы бар 3-5 тармақтар).
Есептің қойылуы кезеңінде
не берілгенін
және
нені табу керекті- гін
дәл анықтау қажет. Есепті шешуге қажетті алғашқы деректердің толық жиынтығын сипаттау маңызды. Нысандандыру кезеңінде көбіне есеп математикалық формула- лар, теңдеулер және қатынастар тіліне көшіріледі. Егеер есепті шешу қандай да бір нақты объектіні, құбылысты немесе үрдісті сипаттауды қажет ететін болса, оны нысандандыру тиісті математикалық үлгіні алуға тең болады. Үшінші кезең — алгоритмді құру кезеңі. Тәжірибелі бағдарла- машылар көбіне алгоритмдерді сипаттаудың қандай да бір арнайы құралдарына (блок-сызбаларға, жалған кодтарға) жүгінбей,бағдар- ламаны бірден белгілі бір тілде жазады, алайда оқу мақсатында бұл құралдарды алдымен қолданып, содан соң алынған алгоритмді бағдарламалау тіліне көшіру тиімді.
Алғашқы үш кезең - бұл компьютерсіз жұмыс жасау. Содан кейін- гі екі кезең – бұл шын мәнінде, белгілі бір бағдарламалау жүйесінде белгілі бір тілде бағдарламалау. Соңғы – алтыншы кезеңде әзірлен- ген бағдарлама енді практикалық мақсаттарда қолданылады. Осылайша, бағдарламашы алгоритмдерді құра алуы, бағдарла- малау тілдерін білуі, тиісті бағдарламалау жүйесінде жұмыс жасай білуі тиіс. Бағдарламашының кәсіби сауаттылығының негізі ретінде дамыған алгоритмдік ойлау қабілеті болады.
Алгоритм түсінігі.
Информатикада іргелі түсініктердің бірі ретінде алгоритм түсінігін атауға болады. Математикадан алынған «алгоритм» түсінігі орта ғасырлық Шығыстың ғұлама математигі Мұхаммед әл-Хорезмидің (787 — 850) атының латынша жазылуы algorіthmі сөзінен алынған. XІІ ғасырда оның математикалық трак- татының латындық аудармасы жүзеге асырылды, одан еуропалықтар есептеп шығарудың ондық позициялық жүйесі туралы және көп таң- балы сандардың арифметикасының ережелерімен танысты. Дәл осы ережелерді сол уақытта алгоритмдер деп атаған. Қосу, алу, «баған- мен» көбейту, «бұрыштап» бөлу – бұлар математикадағы алғашқы алгоритмдер. Алгебралық қайта құру ережелері мен теңдеу түбірін есептеуді математикалық алгоритмдерге жатқызуға болады. Біздің заманымызда алгоритм түсінігі кеңірек ұғымда беріледі. Алгоритм — бұл қандай да бір атқарушыменбасқару командадерінің жүйелігі. Информатиканың мектеп курсында оқушылар алгоритм түсінігімен және алгоритмдерді құру әдістерімен оқу атқарушыла- рының: Роботтың, Тасбақаның, Сызушының және басқалардың мы- салында танысады. Бұл атқарушылар ештеңе де есептемейді. Олар экранда суреттер салады, шытырмандарда жүріп-тұрады, заттарды бір жерден екінші жерге апарып қойды. Мұндай атқарушыларды аху- алда жұмыс істейтін атқарушылар деп атау қалыптасқан. Информатиканың «Бағдарламалау» тарауында ЭЕМ жұмысын бағдарламалық басқару әдістері оқытылады,яғни атқарушы ретін- де компьютер алынады. Компьютер шамалармен жұмыс жасайтын алгоритмдер деп аталатын, компьютерді басқаруға арналған шама- лармен – түрлі ақпараттық объектілермен: сандармен, таңбалармен, кодтармен және басқалармен жұмыс жасайды.
Деректер және шамалар.
Компьютер жұмыс жасайтын шама- лардың жиынтығын деректер деп атау қалыптасқан. Бағдарламаға қатысы бойынша есептеулер процесінде алынатын алғашқы, соңғы (нәтижелер) және аралық деректер бар (1.1-сурет).
Мысалы, ax
2
+ bx + c = 0 квадрат теңдеуін шешу кезінде алғашқы деректер ретіндеa, b, cкоэффициенттері,нәтижелер —
x , x
, теңде-
1 2
уінің түбірлері, аралық деректер -
D= b2- 4ac
теңдеуінің дискрими-
нанты болады.
Бағдарламалауды ойдағыдай меңгеру үшін келесі ережені білу ке- рек:
кез келген шаманың ЭЕМ жадында өзінің белгілі бір орны бола- ды, кейде оны жады ұяшығы деп те атайды. «Ұяшық» термині за- манауи ЭЕМ сәулеті үшін біршама ескірген, алайда оқу мақсатында оны пайдаланған өте қолайлы.
Кез келген шаманың үш негізгі қасиеті бар:
атауы, мәні
және
түрі
. Процессор командасы деңгейінде шама өзі сақталатын жады ұяшығының мекен-жайымен сәйкестендіріледі. Алгоритмдер және бағдарламалау тілдерінде шамалар
константаларға
және
ауыспа- лы шамаларға
бөлінеді. Константа - өзгермейтін шама, және алго- ритмде ол өздік мәні бойынша беріледі, мысалы: 15, 34.7’, k’, True және т.б. Ауыспалы шамалар өз мәндерін бағдарламаны орындау ба- рысында өзгертулері мүмкін және алгоритмде символдық аттармен
– сәйкестендіргіштермен, мысалы: X, S2, cod15 және т.б. беріледі. Кез келген константалар мен айнымалы шамалар жадының ұяшығы- на ие болады, ал бұл шамалардың мәндері бұл ұяшықта екіліккодпен анықталады.
Енді информатика курсында дерекқорлар мен электронды кесте- лерді оқығанда кездесетін түсінік -
деректер түрлері
- шама түрлері туралы айтып өтейік. Бұл түсінік бағдарламалауда іргелі болып та- былады.
Бағдарламалаудың әрбір тілінде өз тұжырымдамасы және өз де- ректер түрінің жүйесі болады. Алайда кез келген тілге ең минималды қажетті деректер түрінің:
тұтас, заттық, логикалық
және
таңба- лық
жиынтығы кіреді. Шама түрімен оның үш қасиеті байланысты: шектелген мәндердің жиыны, шектелген операциялардың жиыны, ішкі елестету нысаны. Деректер түрінің негізгі қасиеттері 1.1.кесте- де берілген. Константа түрлері мәнмәтін бойынша (яғни мәтіндегі жазба ны- саны бойынша), ал айнымалы түрлері ауыспалы шаманың сипатта- уында белгіленеді.
1.1.-кесте.Деректердің негізгі түрлері
Түрі
Мәні
Операциясы
Ішкі елестету
Тұтас
Кейбір диапа- зондағы тұтас оң және теріс сандар, мысалы: 23, -12,
387
Тұтас сандар- мен жүргізілетін арифметикалық операциялар: қосу, азайту, көбейту және қалдықпен бөлу. Қатынастар опе- ра-циялары (<, >,
= және т.б.)
Белгіленген нүкте- мен берілген пішін
Заттық
Кейбір диапазон-
Арифметикалық
Қалқымалы нүкте-
дағы кез келген
операциялар.
мен берілген пішін
сандар (тұтас
Қатынастар
және бөлшек),
операциялары
мысалы:
2.5, - 0.01, 45.0,
3.6 х 10
9
Логика- лық
True (ақиқат) False (жалған)
Логикалық опера- циялар: ЖӘНЕ(and), НЕМЕСЕ(or),
ЖОҚ(not). Қаты- настар операция- лары
1 — True; 0 — False
Символ- дық
Компьютерлік алфавиттің кез келген таңбалары, мысалы: а, 5, +, $
Қатынастар опе- рациялары
Таңбалық кодтау- дың кодтары, мы- салы:ASCІІ— бір таңба — 1 байт; Unіcode — бір таң- ба — 2 байт Құрылымы бойынша деректер қарапайым және құрылымданды- рылған болып бөлінеді. Скалярлық деп те аталатын қарапайым шама- лар үшін бір шама – бір мән, ал құрылымдандырылған шамалар үшін
– бір мән – мәндер жиыны деген пайымдау дұрыс. Құрылымданды- рылған шамаларға ауқымдар, жолдар, жиындар және т.б. жатады.
ЭЕМ — алгоритмдерді атқарушы. Әрбір алгоритм (бағдарлама) нақты бір атқарушыға арналып, яғни оның командалар жүйесінің ше- гінде құрылатыны мәлім. «ЭЕМ арналған бағдарламалау» тақыры- бымен танысу кезінде қандай атқарушы туралы сөз болады? Жауап белгілі:
Паскаль тіліндегі бағдарламалау жүйесі
ЭЕМ
Паскаль тіліндегі бағдарлама
–сурет. Компьютер бағдарламаны Паскаль тілінде атқарушы ретінде
Бұл жерде атқарушы ретінде компьютер болады, дәлірек айтқанда ЭЕМ кешені + бағдарламалау жүйесі. Бағдарламашы бағдарламаны бағдарламалау жүйесі бағдарланған тілде жасайды. Бұл сызба түрін- де 1.2-суретінде көрсетілген, онда атқарушының ену тілі ретінде Па- скаль бағдарламалау тілі болады. Бағдарлама бағдарламалаудың қандай тілінде жазылатындығына қарамастан, ЭЕМ-да кез келген есепті шешу алгоритмі келесі коман- далардан құрылуы мүмкін: атау беру, қосу, шығару, көмекші алгорит- мге жүгіну, цикл, тармақталу. Бұдан әрі алгоритмдерді сипаттау үшін блок-схемалар және ин- форматиканың мектептік курсында енгізілетін алгоритмдік тіл (АТ) қолданылады.
1.2.
СЫЗЫҚТЫҚ ЕСЕПТЕУ АЛГОРИТМДЕРІ
Есептеу алгоритмдерінде негізгі қарапайым амал –
ауыспалы ша- маның мәнін меншіктену
болып табылады.
Егер константаның мәні оның жазба түрімен анықталатын болса, ауыспалы шама нақты мәнге екі түрлі тәсілмен: меншіктену команда- сының көмегімен және қосу командасының көмегімен жүзеге асыры- латын атау беру нәтижесінде жетеді. Мысал ретінде қарастырайық. Мектептегі математика пәнінде екі қарапайым бөлшекті бөлу ережесі келесідей берілген:
Осы мысалды жазудың алгебралық формасы мынадай:
a : c = a ⋅ d = m .
b d b ⋅
c n Енді алгебралық өрнекте қолданылған айнымалылардың сол белгілерін қалдырып, ЭЕМ арналған бөлшектерді бөлу алгоритмін құрайық.
Бұл жерде алғашқы деректер ретінде
a, b, c, d
тұтас сандықа- уыспалы шамалар,ал нәтижесі —
m
және n тұтас шамалар болады. Бөлшектерді бөлу алгоритмінің блок-сызбасы 1.3.-суретте берілген. Берілген алгоритм оқу алгоритмдік тілде келесі түрде беріледі:
алг бас
соң
бөлшекті бөлу тұт
а, b, c, d, m, n қосу а, b, c, d
m := а
х
d n := b х
c шығ. m, n
Меншіктену командасының пішіні келесідей: ауыспалы := өрнек
«:=» таңбасын «меншіктену» деп оқу керек.
m := a d
n : = b c
басы
енгізу a, b, c
шығару m, n
соңы
Меншіктену командасы компьютер атқаратын келесі әрекеттерді білдіреді:
1)
өрнек есептеледі;
2)
алынған мән
айнымалыға
беріледі..
Берілген алгоритмде меншіктену- дің екі командасы бар. Блок-схема- ларда меншіктену командалары төрт-
есептеу блогы деп аталады.
1.3.–сурет. Бөлшекті бөлу алгоритмінің блок-схемасы
Алгоритмдерді сипаттауда өрнектерді жазудың қатаң ереже- лерінің сақталуы міндетті емес, мұны қарапайым математиалық фор- мада жасауға болады, өйткені бұл әлі қатаң синтаксиспен берілген бағдарламалау тілі емес.
Қарастырылып отырған алгоритмде енгізу командасы бар: енгізу a, b, c, d Блок-схемаларда енгізу командасы параллелограммда – енгі- зу-шығару блогында жазылады. Бұл команданы атқару кезінде про- цессор жұмысты тоқтатады және қолданушының әрекеттерін күтеді. Қолданушы енгізу құрылғысында (пернетақтада) енгізілетін айны- малылардың мәндерін теруі және <Enter> енгізу батырмасын басуы тиіс. Мәндерді осы айнымалылар енгізу тізімінде орналасқан тәртіп бойынша енгізген жөн. Әдетте енгізу командасының көмегімен бастапқы деректердің мәндері беріледі, ал меншіктеу командасы ара- лық және соңғы шамаларды алу үшін қолданылады. Компьютермен алынған есепті шешу нәтижелері қолданушыға хабарлануы тиіс, ол үшін шығару командасы қолданылады:
шығару m, n
Осы команданың көмегімен нәтижелер экрнаға немесе басу құрылғысының көмегімен қағазға шығарылады. Меншіктеу есептеу алгоритмдерінде маңызды операция болған- дықтан, ол туралы толығырақ тоқталайық.
1.2. –кесте. Меншіктеу командасын атқару кезінде айнымалының мәнінің өзгеруі
Команда a b
a := 1
1
b := 2 х a
1
2
a := b
2
2
b := a + b
2
4
Бұл мысал меншіктеудің үш негізгі қасиетін бейнелейді:
Бағдарламалау кезінде жиі қолданылатын алгоритмді қарастырай- ық. Екі шама:
X
және
Y
берілген. Олардың арасындағы мәндерді ауы- стыру қажет. Мысалы, егер алдымен
X
= 1,
Y
= 2 болса, ауыстырған соң
X
= 2,
Y
= 1 болуы тиіс.
Бұл есепке келесі жағдай ұқсас. Екі стақан берілген: біреуінде – сүт, екіншісінде – су бар. Олардың арасында ішіндегілерінің орнын ауыстыру керек. Бұл жағдайда үшінші – бос стақан қажет екені мәлім. Ауыстыру кезіндегі әрекет ету тәртібі келесідей болады: Осыған ұқсас екі айнымалының мәндерін ауыстыру үшін үшінші қосымша айнымалы қажет. Оны
Z
деп атайық. Сонда ғана мәндерді ауыстыру есебін меншіктеудің үш командасын жүйелі атқару арқылы шешуге болады (1.3-кесте). Стакандармен берілген мысал айнымалылар арасындағы ауысты- ру жағдайын соншалықты дәл сипаттамайды, өйткені сұйықтықтар- ды құйғанда стақандардың бірі бол болады. Меншіктеу командасын атқару нәтижесінде (
X
Y
) оң жақта тұрған айнымалы (
Y
) өз мәнін сақтайды.
Бөлшектерді бөлу алгоритмі сызықтық құрылымға ие болады, яғни онда барлық командалар әрқайсысы бір мәртеден, қатаң белгілі бір жүйелікпен атқарылады. Сызықтық алгоритм меншіктеу,
1.3.-кесте. Айнымалылар арасында мәндермен алмасу
Команда
X
Y
Z
енгізу X, Y
1
2
Z:= X
1
2
1
X := Y
2
2
1
Y:= Z
2
1
1
енгізу, шығару командаларынан және көмекші алгоритмдерге жү- гінуден тұрады (ол бұдан әрі қарай қарастырылады). Блок-схемалардың көмегімен алгоритмдерді бейнелеу кезінде де- ректер түрі, әдетте көрсетілмейді (бірақ тұспалданады). Оқу алгорит- мдерінде (АТ-де) барлық айнымалылар үшін деректер түрлері ай- қын көрсетіледі, және оларды суреттеу алгоритмнің тақырыпатынан кейін бірден жүргізіледі. Бұл ретте келесі белгіленулер қолданыла- ды: тұт
– тұтас,
зат
– заттық,
лит
— символдық (литерлік),
лог
— ло- гикалық. Бөлшектерді бөлу алгоритмінде барлық айнымалылар тұтас типті болады.
Квадрат теңдеуді шешудің алгаритмін құрайық. ax2+bx+c=0
Бұл есеп математикадан жақсы таныс. Бұл жерде бастапқы дерек- тер ретінде
а, b, с
, ал жалпы жағдайда шешуі – келесі формула бой- ынша есептелетін екі түбір ( х
1
және х
2
) болады:
x 1,2 = − b ± b
2
4
ac .
2
a
Бұл бағдарламада қолданылатын барлық шамалар заттық түрде.
Квадрат теңдеуді шешу алгоритмі келесідей болады:
алг. зат. бас.
соңы
квадрат теңдеудің түбірлері а,b, c, d,x1, x2
енгізу а, b,c d:= b
2
- 4ас
х1:=(-b + √d) /(2а)
х2:=(-b - √d) /(2а) шығару х1, х2
Мұндай алгоритмнің кемшілігі бір көргеннен-ақ байқалады. Ол сапалы алгоритмдерге қойылатын маңызды қасиетке: бастапқы де- ректерге қатысты жан-жақтылыққа ие болмайды. Бастапқы дерек- тердің мәндері қандай болғанына қарамастан, алгоритм белгілі бір нәтижеге әкелуі және соңына дейін атқарылуы тиіс.
Нәтиже ретінде сандық жауап болуы, сонымен бірге мұндай де- ректері бар есептің шешуі жоқ жайындағы хабарлама да болуы мүм- кін. Алгоритмнің орта тұсында қандай да бір операцияны атқару мүмкіндігінің болмауынан тоқтатуға жол берілмейді. Бұл қасиетті бағдарламалау бойынша әдебиетте алгоритмнің нәтижелігі деп атай- ды (кез келген жағдайда қандай да бір нәтиже алу). Жан-жақты алгоритмді құру үшін алдымен есептің математика- лық мазмұнын мұқият талдап алу қажет.
Квадрат теңдеудің шешуі
a, b, с
коэффициенттерінің мәндеріне байланысты болады.
Осы есепті тек заттық түбірлерді іздестірумен шектеліп, талдай- ық:
t 2
Квадрат теңдеуді шешу алгоритмінің блок-схемасы 1.4.-суретте көрсетілген.
Дәл осы алгоритм АТ-де келесідей беріледі:
алг
Квадрат теңдеудің түбірі зат
a, b, c, d, x1, x2 бас
енгізу а, b, c
егер
a = 0
онда егер
b = 0
онда егер
c = 0
Онда «кез келген х — шешуі» енгізу
басқаша
«шешуі жоқ» енгізу
кв
басқаша
x := - c / b шығару х
кв
басқаша
d := b2 - 4ac
егер
d < 0
онда
«зат. түбірі жоқ шығару
d: = b
2
- 4ac
x: = - c/b
x1: =(-b+ d)/(2a)
x2: =(-b- d)/(2a)
басу
енгізу a, b, c +
a= 0 b=0 +
c= 0 +
d<0
«Кез келген х» шығару
«Шешуі жоқ» шығару
Вывод x
«Заттық түбірлер жоқ» шығару
шығару x1, x2
соңы
17
1.4.-сурет. Квадрат теңдеуді шешу алгоритмінің блок-схемасы
кв соңы
басқаша
x1 := (- b +
√d
)/(2a); x2 := (- b √d
)/(2a) шығару «x1 =», x1, «x2 =», x2 кв
Берілген алгоритмде жалпы көрінісі блок-схема түрінде 1.5.-су- ретте көрсетілген, тармақталудың құрылымдық командасы бірнеше рет қолданылған.
АТ-де тармақталу командасын келесі түрде жазуға болады:
егер
шарты
онда
1 серия
басқ.
2 серия
кв
Берілген тармақталу командалардың блок-схемасына сәйкес ал- дымен шарты тексеріледі (логикалық өрнек есептеледі). Егер шарты дұрыс болса, онда «Иә» (оң тармақ) – «1 Серия» жазуы бар стрелка- мен көрсетілген командалар жүйелігі атқарылады. Кері жағдайда «2 Серия» - командалардың теріс тармағы орындалады. АТ-де шарты «егер» көмекші сөзінен кейін, оң тармақ – «онда» сөзінен кейін, ал теріс – «басқаша» сөзінен кейін жазылады. Мұндай жазбадағы «кв» әріптерімен тармақталудың соңын белгілейді. Егер бір тармақталудың тармақтарында басқа тармақтар болған жағдайда, онда алгоритм
енгізілген тармақталу құрылымына ие бо- лады. Квадрат теңдеуді шешудегі алгоритмнің дәл осындай құрылы- мы бар (1.4.-суретті қараңыз), онда қысқарту үшін «Иә» және «Жоқ» сөздерінің орнына сәйкесінше «+» және «-» таңбалары қолданылған. Келесі есепті қарастырайық: п тұтас оң сан берілген. n! (n-факто-
риал) есептеу керек. Факториалдың анықтамасын еске түсірейік:
егер n
= 0; егер п
> 1
1.6-суретте тұтас типтегі үш айнымалысы бар n! есептеу алгорит- мінің блок-схемасы көрсетілген: п
— аргумент,
і
— аралық айныма- лы,
F
— нәтиже. Берілген алоритмнің дұрыстығын тексеру үшін
1.5.-сурет. Тармақталу командасының блок-схемасы
1.6.-сурет. п
! есептеу алгоритмінің блок-схемасы
1.4 жол тарту кестесін құрайық, онда қадамдар бойынша баста- пқы деректердің нақты мәндері үшін алгоритмге кіретін айныма- лылардың өзгеруі қадағаланады. Берілген кесте n
= 3 жағдайы үшін құрылған.
Берілген жол тарту қарастырылып отырған алгоритмнің дұры- стығын дәлелдейді. Енді осы алгоритмді АТ-де жазайық: алг
факториал тұт
n, і, F бас
енгізу n
F := 1; і := 1
әзірше
і ≤ n,
қайталау цб
F := F x і
і := і + 1
цс
шығаруF соң
1.4. –кесте. n! алгоритмін есептеудің жол тартуы
қадам
n
F
і
Шарты
1
3
2
1
3
1
4
1 < 3, иә
5
1
6
2
7
2 < 3, иә
8
2
9
3
10
3 < 3, иә
11
6
12
4
13
4 < 3, жоқ
14
шығару
-сурет. «Әзірше» циклі командасының блок-схемасы Берілген алгоритмнің циклдік құрылы- мы бар. Онда «Әзірше» циклдердің немесе алғышартпен берілген циклдіңқұрылымдық командасы қолданылған. «Әзірше» циклі ко- мандасының блок-схемасы 1.7.-суретте көр- сетілген. АТ-де ол былай беріледі:
әзірше
шарт,
қайталау цб
серия
цс
Командалар сериясын атқару (циклдің денесі) циклдің шарты ақиқат болып тұрғанша қайталанады. Шарт жалған болған кезде, циклді орындау аяқталады. «цб» және «цс» көмекші сөздер сәйкесін- ше циклдің басын және соңын білдіреді. Алғышартпен берілген цикл – бұл циклдік алгоритмдерді ұй- ымдастырудың негізгі, бірақжалғыз емес нысаны: шарттан кейінгі циклдер де бар.
Квадрат теңдеуді шешу алгоритміне, оны: егер a = 0 - бұл квадрат теңдеу емес және оны шешу мүмкін емес позициясынан қарастыра отырып, оралайық. Бұл жағдайда қолданушы деректерді енгізуде қателесті және енгізуді қайталау керек деп санайық (1.8-сурет). Басқа сөзбен айтқанда, қолданушыға қатені түзету мүмкіндігін бере оты- рып, алгоритмде бастапқы деректердің ақиқатлығын бақылау қара- стырылады. Мұндай бақылаудың болуы – бағдарламаның сапасының жоғарылығының тағы да бір дәлелі болады. АТ-де деректерді енгізуді бақылаумен берілген квадрат теңдеуді шешу алгоритмі келесі көріністе беріледі: алг
квадрат теңдеу зат
a, b, c, d, x1, x2 бас
қайталау
енгізу a, b, c а ≠ 0
дейін
d := b
2
- 4ac егер d ≥ 0
1.8.-сурет. Бақылаумен берілген квадрат теңдеуді шешу алгоритмінің блок-схемасы
онда
x1 := (-b + √d)/(2a) x2 := (-b -√d )/(2a) шығару x1, x2
басқаша
шығару «Заттық түбірлер жоқ»
кв
соңы «Дейін» циклінің шарттан кейінгі цикл құрылымдық командасы- ның блок-схемасы 1.9.-суретте көрсетілген. АТ осы команданы бы- лайша жазуға болады:
1.9.- сурет. «Дейін» циклі командасының блок-сызбасы
қайталау
серия
дейін
шарты
Бұл жерде циклдің соңындағы шарт қолданылады, яғни ол ақиқат болған кезде, цикл жұмысын аяқтайды.
Келесі есептің шешу алгаритмін құрайық:
M
және
N
екі натурал- ды сан берілген. Олардың ең көп ортақ бөлгішін — НОД (
M, N
) есеп- теу керек.
Бұл есеп Евклид алгоритмі деген атаумен белгілі әдістің көме
гімен шығарылады. Бұл әдістің идеясы, егер
M>N
, онда НОД
1.10.-сурет. Евклид алгоритмінің блок-схемасы
M, N
) = НОД (
M - N, N
) болады деген пікірге сәйкес құрылған. Осы- ны өз бетінше дәлелдеп көріңдер. Берілген алгоритмнің негізінде жатқан өзге пайымдау белгілі: НОД (
M, M
M
. «Қолмен» орындау үшін бұл алгоритмді келесі нұсқау нысанында бейнелеуге болады: Евклид алгоритмінің блок-схемасы 1.10.суретте берілген. АТ-де бұл алгоритмді келесідей жазуға болады: алг
Евклид тұт
M, N
бас
енгізу M, N
әзірше
M ≠ N,
қайталау цб егер
M>N
онда
M := M- N
басқаша
N := N- M
кв цс
соңы Евклидалгоритмінде енгізілген тармақталумен берілген циклдің құрылымы бар. M = 18, N = 12 жағдайы үшін осы алгоритмнің жол тартуын өз бетінше орындаңдаңдар. Нәтижесінде НОД = 6 болуы тиіс.
Бағдарламалауға тікелей қатысы бар пән математикалық логика деп аталады, оның негізін логика алгебрасы немесе пікірді есептеу құрайды. Пікір түсінігі ретінде оған қатысты ақиқат немесе жалған екендігін бірден айтуға болатын кез келген пайымдауды айтуға бола- ды. Мысалы, «Ай – Жердің жерсерігі» деген пікір ақиқат, «5 > 3» — ақиқат, «Мәскеу — Қытай астанасы» — жалған, «1 = 0» — жалған. АҚИҚАТ және ЖАЛҒАН логикалық мәндер болып табылады. Кел- тірілген пайымдаулардың логикалық мәндері бір мағыналы анықтал- ды. Басқа сөзбен айтқанда, олардың мәндері
логикалық константа- лар болады.
x < 0, мұндағы x
— айнымалы, теңсіздігінің логикалық мәні айны- малы болады, яғни шыққан мәніне байланысты
x
не ақиқат, не жалған болады. Осылайша,
логикалық айнымалының
түсінігі енгізіледі. Ал- горитмдерді сипаттауда, сондай-ақ түрлі тілдердегі бағдарламала- удағы бағдарламаларда логикалық айнымалылар деректердің логи- калық түрі сәйкес келетін символдық аттармен белігіленуі мүмкін. Басқаша айтқанда, егер
A, B, X, Y
және басқалары – логикалық түр- дегі айнымалылар екендігі белгілі болса, бұл олардың тек АҚИҚАТ немесе ЖАЛҒАН мәнін ғана қабылдайтынын білдіреді. Математикалық логиканың формалды аппаратының негіздерін ХІХ ғ. ортасында ағылшын математигі Джордж Буль қалады. Оның құрметіне пікірлерді есептеу бульдік алгебра деп, ал логикалық ша- малар – бульдік шамалар деп аталады.
Логикалық өрнек (логикалық формула)
— бұл қарапайым немесе күрделі пікір.
Күрделі пікір
логикалық амалдардың
(байламдардың) көмегімен құрылады.
Негізгі үш логикалық амал бар: терістеу, конъюнкция (логикалық көбейту) және дизъюнкция (логикалық қосу).
Терістеу
математикалық логикада « — » белгіленеді және
ЕМЕС
сөзімен айтылады. Бұл бір орындық амал. Мысалы, (
x = y
) жазбасы былай оқылады: ЕМЕС (
x тең y
), яғни мәні ақиқат болады, егер х у
-ке тең болмаса, және жалған болса, онда x тең y
. Терістеу логикалық ша- маның мәнін қарама-қарсыға өзгертеді.
Конъюнкция
& таңбасымен белгіленеді және ЖӘНЕ сөзімен оқылады.Бұл екі орынды амал. Мысалы, ( x
> 0) & ( x
< 1) жазбасы берілген логикалық формула егер x ∈ (0,1) болса АҚИҚАТ мәнін қабылдайды, және кері жағдайда - ЖАЛҒАН мәнін қабылдайтынын білдіреді. Сәйкесінше, екі операндта ақиқат болса, конъюнкция нәти- жесі ретінде АҚИҚАТ болады.
Дизъюнкция
v таңбасымен белгіленеді, ол НЕМЕСЕ сөзімен оқы- лады. Мысалы, (
x
= 0) v ( x
= 1) жазбасы, егер x
— екілік цифр болса (0 немесе 1), формула ақиқат мәнге ие болатындығын білдіреді. Сәй- кесінше, егер операндтың біреуі АҚИҚАТ мәніне ие болса, дизъюнк- ция нәтижесі АҚИҚАТ болады.
Қарастырылған логикалық амалдарды орындаудың ережелері ақиқаттық кестесі деп аталатын 1.5 кестеде берілген (мұндағы
А
және
В
— логикалық шамалар, ал «А» және «Ж» әріптерімен сәйкесінше- АҚИҚАТ және ЖАЛҒАН мәндері белгіленген).
1.5.-кесте, Ақиқаттық кестесі
Рет №
А
В
А ЕМЕС
А ЖӘНЕ В
А НЕМЕСЕ В
1
Ж
А
Ж
А
А
2
А
Ж
Ж
Ж
А
3
Ж
А
А
Ж
А
4
Ж
Ж
А
Ж
Ж
Логикалық өрнектерде амалдарды орындау тәртібі амалдардың үлкендігімен: терістеу, конъюнкция, дизъюнкция анықталады. Бұдан басқа, логикалық формулалардағы амалдарды орындау тәртібін жақ- шалардың көмегімен өзгертуге болады. (
А
ЖӘНЕ
В
) НЕМЕСЕ (
А
ЖӘНЕ
В
ЕМЕС) НЕМЕСЕ (
А
ЕМЕС ЖӘНЕ
В
ЕМЕС)
Мысал үшін логикалық формуланың мәнін есептеуді қарастырайық
X
ЖӘНЕ
Y
НЕМЕСЕ
X
ЖӘНЕ
Z
ЕМЕС
Логикалық айнымалылардың келесі мәндерінде:
X
= ЖАЛҒАН,
Y
=АҚИҚАТ,
Z
=АҚИҚАТ
Берілген өрнекте амалдарды орындау тәртібін цифрлармен бел- гілейік:
1 2 4 3
ЕМЕС
X
ЖӘНЕ
Y
НЕМЕСЕ
X
ЖӘНЕ
Z
Ақиқаттылықтың кестесін қолданып, қадамдар бойынша есепте- уді орындайық:
Келесі пайымдауды қарастырайық: «
Х
мәні 0 ден 1-дейінгі ара- лықта болады». Бұл пайымдауды теңсіздіктер жүйесі түрінде жазуға болады 0 ≤
Х
≤1.
Тиісті логикалық өрнек мынадай түрде беріледі (
Х
≥ 0) ЖӘНЕ ≤(
Х
1).
1.11.-сурет.
Енді есепті күрделілендірейік және келесі пайымдауды логика- лық өрнек түрінде жазайық: координаталармен (
Х,Y
) берілген жа- зықтықтағы нүкте, 1-ге тең ішкі радиуспен, және 2-ге тең сыртқы радиуспен координаталар басында ортасы бар шеңберде болады (1.11-сурет). Бұл өрнек мынадай түрде беріледі: (
X
2
Y
2
≥1) ЖӘНЕ (
X
2
Y
2
≤ 4).
Конъюнкция амалы келесідей атқарылады: бірінші теңсіздікке (
X
2
Y
2
> 1) қанағаттандыратын нүктелер жиынтығы таңдалады, және алынған жиынтықтан екінші теңсіздікке (
X
2
Y
2
< 4) қанағаттанатын ішкі жиынтық бөлінеді, және ол соңғы нәтиже болып табылады. Со- нымен қатар ізделетін жиынтық екі жиынтықтың қиылысуы болады, оның бірі бірінші теңсіздікке, ал екіншісі – екіншісіне қанағаттанды- рады. Конъюнкция — логикалық көбейту, яғни осындай қиылысуды есептейтін амал.
Логикалық өрнек түрінде келесі пайымдауды жазайық: координа- талармен (
Х,Y
) берілген жазықтықтағы нүкте, 1-ге тең ішкі радиу- спен, және 2-ге тең сыртқы радиуспен координаталар басында ор- тасы шеңберден тыс болады (1.11-сурет). Бұл өрнек мынадай түрде беріледі: (
X
2
Y
2
< 1) НЕМЕСЕ (
X
2
Y
2
> 4) .
Дизъюнкция амалын орындаукелесі тәртіпте беріледі: бірін- ші теңсіздікке (
X
2
Y
2
< 1) қанағаттандырушы нүктелер жиынтығы таңдалады, және оған екінші теңсіздікке (
X
2
Y
2
> 4) қанағаттан- дырушы жиынтық қосылады.Сөйтіп, дизъюнкция амалының екінші атауының мағынасы – логикалық қосу, яғни екі жиынтықты қосу ай- қындалады. Соңғы есепті басқаша шешуге болады. Тиісті логикалық өрнекті бірінші логикалық өрнектің терістеуі ретінде жазуға болады,
өйткені шеңберден тыс нүктелер, - бұлар шеңберге тиісті ЕМЕС нүк- телер: ((
X
2
У
2
≥1) ЖӘНЕ (
X
2
У
2
≤ 4)) ЕМЕС.
Сәйкесінше, екі логикалық өрнек арасындағы теңдік дұрыс:
НЕМЕСЕ((
X
2
У
2
≥1) ЖӘНЕ (
X
2
У
2
≤ 4)) = (
X
2
У
2
< 1) НЕМЕСЕ (
X
2
У
2
> 4).
Бұл мысалдан түрлендірудің келесі ережесі түсінікті болады: конъюнкциямен байланысқан екі теңсіздікке қолданылған терістеу амалы бұл теңсіздіктердің белгілерін қарама-қарсыларға, ал конъ- юнкцияны - дизъюнкцияға (немесе дизъюнкцияны конъюнкцияға) өзгертеді. Күрделі логикалық өрнек қолданылатын алгоритм мысалын қара- стырайық. Үшбұрыштың
a, b
, cүшқабырғасының ұзындықтары бой- ынша оның ауданын табайық.
Берілген есепті шешу үшін Герон формуласы деп аталатын келесі формула қолданылады:
мұндағыp = (a + b + c) /2 — үшбұрыштың жартылай периметрі. Бастапқы деректер үшбұрыштың қабырғалары үшін берілген негізгі ара қатынасты қанағаттандыруы тиіс: әрбір қабырғаның ұзын- дығы оның басқа екі қабырғасының ұзындықтарының қосынды- сынан кем болуы тиіс.
Үшбұрыш ауданын есептеу алгоритмі тармақталатын құрылымға ие болады. Тармақталудың құрылымдық командасында шартты қате баста- пқы деректердің барлық нұсқаларын «сүзуге» мүмкіндік беретін күр- делі логикалық өрнек түрінде жазайық: алг
Герон зат
A, B, C, P, S
бас
енгізуA, B, C
егер
(A> 0) ЖӘНЕ (B> 0) ЖӘНЕ (C> 0) ЖӘНЕ (A+ B>C) ЖӘНЕ (B+ C>A) ЖӘНЕ (A+ C>B)
онда
P:= (A+ B+ C)/2
S : = түбір(P * (P - А) * (P - B) * (P - C))
шығару «Аудан =», S
басқаша
«Қате бастапқы деректер» шығару
кв соң
Алгоритмдер теориясында көмекші алгоритм, яғни негізгі шешілетін есептенкейбір ішкі есепті шешу алгоритмі түсінігі бар. Сонымен бірге бастапқы есепті шешу алгоритмі негізгі деп аталады. Мысал ретінде келесі есепті қарастырайық. Тұтас көрсеткіші бар дәрежелік функцияны есептеу алгоритмін құру керек: y = xk, мұн-
дағык — тұтас сан; x≠ 0.
Алгебрада мұндай функция былай анықталады:
Берілген есепте ішкі есеп ретінде санды тұтас оң дәрежеге шыға- руды қарастыруға болады. 1/x -n
= (1/x) -n
ескере отырып, бұл есепті шешудің негізгі алгоритмін жазайық: алг
дәрежелік функция тұт n; зат
x, у бас
енгізу x, n
егер
n= 0
онда
у : = 1
басқаша егер
n > 0
онда
ДӘРЕЖЕ (x, n, y)
басқаша
ДӘРЕЖЕ (1/x, -n, у)
кв
соң кв
шығару у
Негізгі алгоритмде оны көп реттік қайта көбейту арқылы тұтас оң дәрежеге шығарудың заттық негіздеуді шығару алгоритмі - ДӘРЕ- ЖЕ атымен берілген көмекші алгоритмге жүгіну командасы екі рет қайталанады. Көмекші алгоритмге жүгіну командасында жақшада тұрған шамалар
нақты параметрлер
деп аталады.
Оқу алгоритм тілінде көмекші алгоритмдер процедуралар түрінде рәсімделеді. АТ-де ДӘРЕЖЕ процедурасын жазып көрсетейік:
ДӘРЕЖЕ
процедурасы ( зат а, тұт k, зат z) тұт і бас
z : = 1; і : = 1
әзірше
і ≤k,
қайталау цс
z : = z x а
і : = і +1 цс соң
Көмекші алгоритмнің тақырыпаты «процедура» сөзінен бастала- ды, содан соң осы процедураның аты және жақшада – нысандық па- раметрлердің тізімі беріледі. Бұл тізімде олардың түрлері көрсетіліп, айнымалы аргументтер және айнымалы нәтижелер аталады. Беріл- ген мысалда
a, k
— нысандық параметрлер-аргументтер,
z
— пара- метр-нәтиже. Сәйкесінше, ДӘРЕЖЕ процедурасы есептеулерді
z=a k
формуласы бойынша шығарады.
Дәрежелік функцияны есептеудің негізгі алгоритмінде процеду- раға жүгіну оның атын және содан соң жақшада нысандық параметр- лер тізімін көрсету арқылы шығарылады. Процедуралардың нысандық және нақты парметрлері арасында келесі сәйкестік ережелері атқарылуы тиіс: Нақты параметрлер-аргументтер тиісті түрдің өрнегі бола алады. Процедураға жүгіну келесі әрекеттерге бастамашылық етеді: ДӘРЕЖЕ процедурасында бастапқы деректерді енгізу және нәти- жені шығару командалары жоқ. Мұнда аргументтерге алғашқы мән- дерді беру (
a, n
) параметрлер-аргументтерді жіберу арқылы, ал айны- малының нәтижесін (
у
) беру параметр-нәтижені ( z
) жіберу арқылы шығарылады.
Осылайша, процедура параметрлерінің мәндерін жіберу меншік- теудің үшінші тәсілі болады (меншіктеу және енгізу омандаларымен қатар). Процедураларды қолдану жүйелі тәптіштеу әдісімен күрделі алго- римдерді құруға мүмкіндік береді.
Бірінші ЭЕМ пайда болғаннан бері жарты ғасырдан артық уақыт өтті. Осы уақыт ішінде есептеу техникасы қарқынды түрде дамы- ды. ЭЕМ элементтік қоры өзгерді, олардың тезәрекеттігі және жады көлемі ұлғайды, адамның машинамен интерфейс құралдары өзгерді. Сөзсіз, мұндай өзгерістер бағдарламашының жұмысына тікелей әсерін тигізбей қойған жоқ. Қандай да бір нәрсені (берілген жағдайда – бағдарламаларды) жалпыға ортақ өндіру тәсілі технология деп аталады, сондықтан әрі қарай
бағдарламалау технологиясы
туралы сөз қозғаймыз.
Жады «тар» және тез әрекеттігі шағын бірінші ЭЕМ үшін бағдар- лама сапасының негізгі көрсеткіші ретінде оның жадының алу көлемі және есептеу уақыты бойынша үнемділігін айтуға болады. Бағдарла- ма неғұрлым қысқа болса, бағдарламашының санаты соғұрлым жоға- ры саналды. Мұндай бағдарламаларды қысқарту көбіне үлкен күш жұмсауды талап етті. Кейде бағдарламаның «айлалы» болғаны сон- шалықты, ол автордан да «айласын асыруы» мүмкін еді: біраз уақыт өткен соң бірдеңе өзгерткісі келіп,өз бағдарламасына қайта оралған бағдарламашы өзінің «даналық пікірін» ұмытып, шатасуы мүмкін еді. Өте күрделі алгоритм әрдайым бағдарламада қате жіберу ықти- малдығын, сондай-ақ қарапайымға қарағанда, күрделі техникалық құрылғының істен шығу ықтималдығын ұлғайтады.
Бағдарламашының бағдарламалық өнімді дайындаудың үш кезеңі:
Жобалау болашақ бағдарлама алгоритмін, мысалы блок-схеманы әзірлеуден тұрады. Кодтау – бұл бағдарламалау тілінде бағдарлама мәтінін құру. Ретке келтіру тестердің көмегімен жүзеге асырылады, яғни нәтижесі белгілі болатын, қандай да бір бұрынырақ ойланған бастапқы деректер жиынтығымен бағдарламаны атқару жүргізіледі. Бұл ретте бағдарлама неғұрлым күрделі болса, оны жан-жақты толық тексеру үшін соғұрлым көбірек тест саны қажет болады. Өте «айла- лы» бағдарламаны мұқият тексеру қиындық тудырады, өйткені әр- дайым қандай да бір «су астындағы тасты» байқамау мүмкін емес. ЭЕМ жады мен тезәрекеттілігінің, бағдарламалау тілдері мен осы тілдерден таратушылардың жетілдірілуінің артуымен бағдар- ламаның үнемділік проблемасы тым өзекті болудан қала бастады. Бағдарламалардың неғұрлым сапалық сипаттары ретінде олардың қарапайымдылығы, көрнекілігі және сенімділігі болды, ал үшінші буын машиналары пайда болуымен бұл қасиеттер негізгі қасиеттерге айнала бастады. 1960 жылдардың соңында 1970 жылдардың басында құрылым- дық бағдарламалау атауына ие болған пән пайда болды. Оның пай- да болуы және дамуы Э.В.Дейкстрдің, Х.Д.Милстің, Д.Е.Кнуттың және басқаларының есімдерімен байланысты болды. Құрылымдық бағдарламалау осы уақытқа дейін бағдарламалау технологиясының негізі болып келді. Оның қағидаларын сақтау бағдарламашыға анық, кемшіліксіз, сенімді бағдарламаларды құруды тез үйренуге мүмкін- дік береді. Құрылымдық бағдарламалаудың негізінде бағдарламалау тео- риясында дәлелденген теорема жатыр:
кез келген логикалық есепті шешудің алгоритмін
негізгі алгоритмдік құрылымдар деп аталатын
Ілесу
Тармақталу ,
Цикл құрылымдарынан ғана құруға болады .
Бұл құрылымдар бұдан бұрын келтірілген болатын. Шын мәнісін- де, бағдарламалардың барлық қарастырылған мысалдарында құрылымдық бағдарламалау қағидалары қолданылды.
Ілесу
— бұл әрекеттердің сызықтық жүйелігі ( 1.12сурет).
Мұндай жүйеліктегі әрбір серияның ішінде қарапайым команда да, күрделі құрылым да болуы мүмкін, бірақ онда тек бір ғана ену және бір ғана шығу бар.
1.12.-сурет. Ілесу бағдарламалаудың сызықтық құрылымы
Тармақталу
— бұл келесідей жазуға болатын алгоритмдік балама:
егер
шарты
онда
1 серия
басқаша
2 серия
кв Бұл құрылымдағы басқару шарттың ақиқаттылығына немесе жалғандығына байланысты екі тармақтың біріне (командалар серия- сына) жіберіледі. Содан соң жалпы жалғасымға шығу жүзеге асыры- лады (1.5-суретті қараңыз). Тармақталудың толық емес формасы «басқаша» тармағыболмаған кезде орын алады:
егер
шарты
онда
сериясы
кв
Цикл
— бұл шарты бойынша кейбір әрекеттер тобының қайтала- нуы. Циклдердің екі түрі бар. Циклдік құрылымның бірінші түрі – алғы шарт циклі(1.7-суретті қараңыз):
әзірше
шарты
, қайталау цб
сериясы
цс
Мұнда шарт әзірше ақиқат болса, циклдің денесін құрайтын серия атқарылады. Циклдік құрылымның екінші түрі – шарттан кейінгі цикл (1.9-су- ретті қараңыз):
қайталау
сериясы
дейін
шарты
Мұнда циклдің денесі цикл шартынан бұрын келеді және шарт жалған болса, өз атқаруын қайталайды. Шарт ақиқат болған кезде қайталау аяқталады. Теориялық тұрғыдан кез келген циклдік алоритмді құру үшін қа- жетті және жеткілікті болып алғышарты бар цикл саналады, яғни бұл артқышартпен берілген циклге қарағанда циклдің неғұрлым жалпы нұсқасы. Ақиқатында, «Дейін» циклінің денесі ең құрығанда бір рет болса да міндетті түрде атқарылады, өйткені шартты тексеру оны орындау аяқталған соң жүргізіледі, ал «Әзірше» циклі үшін циклдің денесі бір де бір рет орындалмаған нұсқа мүмкін болады.
Сәйкесінше, бағдарламалаудың кез келген тілінде «Әзірше» циклін қолданумен шектелуге болатын еді, алайда бірқатар жағдай- ларда «Дейін» циклін енгізу аса қолайлы болады, сондықтан осы цикл қолданылады. Кей жағдайларда әдебиетте құрылымдық бағдарламалауды GOTO-сыз (сөзсіз ауысу операторысыз) бағдарламалау деп те атай- ды. Шынында да, бағдарламалауға бұлай қарау кезінде сөзсіз ауы- суға орын жоқ. Бағдарламаларда GOTO еш дәлелсіз қолдану олардың құрылымдылығынан айырады, ендеше, мұнымен байланысты алго- ритмнің барлық оң қасиеттерінен: айқындылықтан және сенімділік- тен айырады. Бағдарламалаудың барлық процедуралық тілдерінде бұл оператор бар болғанымен, бағдарламалауға құрылымдық тәсіл- демені қамтамасыз ету үшін оны қолданудан аулақ болған жөн. Күрделі алгоритмдер бір-бірімен жалғанған негізгі құрылымдар- дан тұрады. Бұл құрылымдарды жалғау екі тәсілмен:
жүйелі
және
тіркемеленген
тәсілмен орындалуы мүмкін. Бұл кез келген күрделі электр тізбегін жүйелі және параллельді жалғанған бөліктерге жай- ғастыруға болатын электротехникадағы жағдайға ұқсас. Алайда тіркемеленген алгоритмдік құрылымдар параллель- ді жалғанған электр өткізгіштерінің баламасы бола алмайды. Бұл жерде бірінің ішіне бірі салынған матрешкалармен берілген балама сәйкес келеді. Егер циклдің денесін құрайтын блоктың өзі циклдік құрылым болатын болса, онда тіркемеленген циклдер бар дегенді білдіреді. Өз кезегінде ішкі циклдің ішінде тағы бір цикл және т.с.с. болуы мүмкін. Осыған байланысты
циклдердің тіркемеленуінің те- реңдігі түсінігі қалыптасты. Дәл осылай тармақталулар да бірінің ішіне бірі тіркемеленуі мүмкін. Құрылымдық тәсілдеме алгоритмдердің блок-схемаларын стан- дартты түрде бейнелеуді талап етеді. Әрбір негізгі құрылымның бір кіре берісі және бір шығысы болуы керек. Алгоримнің стандартсыз бейнеленген блок-схемасы дұрыс оқылмайды және өз көрнекілігін жоғалтады.
Алгоритмдердің құрылымдық блок-схемаларының мысалдары 1.13 суретте берілген. Мұндай блок-схемалар тез оқылады және көз- бен жақсы қабылданады, сонымен бірге әрбір құрылымға ат қоюға болады. Құрылымдық алгоритмдерді сипаттауға арналған оқу АТ-де сөзсіз ауысу командасы жоқ. Оқу кезінде бұл тілді қолдану бағдарламашы- ның «құрылымдық тәрбиеленуіне» ықпал етеді.
-сурет. Алгоритмдердің құрылымдық блок-схемаларының мысалдары: а
— тіркемелену тереңдігі бірге тең тіркемеленген тармақталулар;
б
— тіркемелен- ген тармақталуы бар цикл;
в
— тіркемелену тереңдігі бірге тең «Әзірше» тіркеме- ленген циклдер;
г
—тармақталудың оң тармағында тіркемеленген жүйелігімен және«Әзірше» тіркемеленген циклімен теріс тармақта тармақталу;
д
— тармақталудың және «Дейін» циклінің жүйелігі;
е
— тіркемеленген «Әзірше» сыртқы циклі және
«Дейін» ішкі циклі; У — шарты; С — сериясы
Алгоритм құрылымдарына АТ-де көрнекілікті олардың мәтін- дерінің түрін құрылымдау береді. Бұл үшін негізгі қолданылатын тәсіл – келесі ережелерге бағынатын жолдарды ысыру:
1.6.-кесте. 1.13-суретте көрсетілген схемаларға сәйкес келетін АТ-дегі алгоритмдер
Схе- ма
Алгоритм
Схе- ма
Алгоритм
а
егер
<У1>
онда егер
<У3>
онда
<C1>
кв басқаша егер
<У2>
онда
<C2>
басқаша
<C3>
кв кв б
әзірше
< У1>,
қайталау цб
егер
<У2>
онда
<C1>
басқаша
<C2> кв цс в
әзірше
<У1>,
қайталау цб
әзірше
<У2>,
қайталау
цб
<C> цс кц г
егер<У1>
онда егер<У2> онда<C1> басқаша<C2> кв
егер<У3> онда<C3> басқаша<C4> кв
басқаша әзірше<У4>, қайталау
<C5>
цс кв
д
егер
<У1>
онда
<C1>
басқаша
<C2>
кв
қайталау
С3
дейін
<У2>
е
әзірше
<У1>,
қайталау цб қайталау
<C>
дейін
<У2>
цс
Алгоритмдеудің құрылымдық әдістемесі – бұл тек алгоритмді си- паттау формасы ғана емес, сонымен қатар
бағдарламашының ойлау қабілеті . Алгоритмді стандартты құрылымдардан құруға ұмтылу керек. Құрылыс үйлестігін қолдана отырып, алгоритм құрудың құрылымдық әдістемесі стандартты секциялардан ғимарат құрумен бірдей екенін айтуға болады. Құрылымдық бағдарламалаудың тағы бір маңызды технологи- ялық тәсілі шешілетін
есепті ішкі есептерге , яғни бастапқы есептің бөлігін бағдарламалауға арналған қарапайым есептерге
бөлшектеп байланыстыру
. Мұндай ішкі есептерді шешу алгоритмдері
көмекші
алгоримдер деп аталады. Бұл ретте алгоритм құрудың екі түрлі тәсіл- демесі мүмкін болады: Алгоритм құрудың бірінші тәсілдемесін сондай-ақ жүйелі тәптіштеу әдісі, ал екіншісін- жинақтау әдісі деп атайды. Жүйелі тәптіштеу кезінде алдымен негізгі алгоритм құрылады және оған бірінші деңгейлегі көмекші алгоритмдерге жүгіну ен- гізіледі. Содан соң екінші деңгейдегі көмекші алгоритмдерге жүгіну болатын және т.с.с. бірінші деңгейдегі көмекші алгоритмдер құрыла- ды. Ең төменгі деңгейдегі көмекші алгоритмдер тек қарапайым ко- мандалардан тұрады. Жүйелі тәптіштеу әдісі кез келген күрделі объектілерді құрасты- ру кезінде қолданылады. Бұл конструктордың табиғи логикалық ойлау жүйелігі: біртіндеп егжей-тегжейіне жету. Бағдарламалауда құрылымдау туралы айтылады, бірақ техникалық емес алгоритм- дердің құрылымдары туралы сөз болады. Айтарлықтай күрделі алго- ритмді басқа тәсілмен құру мүмкін емес. Жүйелі тәптіштеудің әдістемесі бағдарламашылар ұжымының күрделі жоба бойынша жұмысын ұйымдастыруға мүмкіндік береді. Мысалы, топ жетекшісі негізгі алгоритмді құрады, ал көмекші ал- горитмдерді әзірлеуді және тиісті шағын бағдарламаларды жазуды өзінің қызметкерлеріне жүктейді. Сонымен бірге жұмыс тобының қатысушыларына өздерінің бағдарламалалық модульдері арасында интерфейс жайында (яғни өзара байланыс) келіседі, ал бағдарламаны ішкі ұйымдтыру – бағдарламашының жеке ісі.
Құрастырма әдісі бағдарламалау тілдерінде ішкі бағдарламалар,
Жаттығулар а)
X
= 3,
Y
= 5,
Z
= 2; б)
X
= 0,
Y
= 1,
Z
= 19; в)
X
= 5,
Y
= 0,
Z
= -8; г)
X
= 9,
Y
= -9,
Z
= 9.
а) (
X, Y
) координаталары бар нүкте координаталар басында ортасы бар бірлік шеңбердің бірінші төрттен бір бөлігіне жатады;
б) (
X, Y
) координаталары бар нүкте координаталар басында ортасы бар бірлік шеңбердің бірінші төрттен бір бөлігіне жатпайды және радиусы 2-ге тең, координаталар басында ортасы бар дөңгелекке жатады (мұны гра- фикалық түрде бейнелеңіз).
а) екі тұтас санды көбейту;
б) екі санды тұтас сан ретінде бөлу;
в) екі санды тұтас сан ретінде бөлуден қалдық алу.
БАҚЫЛАУ СҰРАҚТАР ЖӘНЕ ТАПСЫРМАЛАР
2-тарау
ҚҰРЫЛЫМДЫҚ БАҒДАРЛАМАЛАУ
ЭЕМ үшін бағдарламалау
— компьютер жұмысын басқару бағдар- ламаларын құру үрдісі.
Машиналық-бағытталған бағдарламалау.
Бағдарламалық басқарылатын есептеу машиналарын ойлап тапқаннан бері жаңа ма- мандық – бағдарламашы мамандығы пайда болды. Тарихта бірінші бағдарламашы Чарльз Беббиджбен бірге жұмыс істеген Ада Лавлейс болды, ол аналитикалық машинамен оны басқару бағдарламасын әзірледі (1860—1870 жж.). Алайда бағдарламашы мамандығы ЭЕМ ойлап тапқан соң ғана көпшілікке белгілі бола бастады. Бағдарламашылар алғашқы буындағы лампалық ЭЕМ-да процес- сордың командасын тікелей қолдана отырып, өз бағдарламаларын құрды. Сонымен бірге бағдарламашыға жадының ұяшықтарын де- ректерге және бағдарлама командаларына қарай бөлуге тура келді. Оған процессор командасының жүйесін және барлық командалар- дың кодтарын білу керек болды. Бастапқы деректер мен команда- лар екілік код түрінде, яғни тікелей ЭЕМ жадында сақталған түрде берілді. Бағдарламалар жазбаларын қысқарту үшін арнайы блактерде әдетте екілік-сегіздік немесе екілік-он алтылық кодты қолданатын (2.1кесте).
2.1.-кесте. Бірінші буындағы компьютерлердің біріне арналған бағдарлама командасының мысалы
Коды
Команда- ның ме- кенжайы
Амалдың коды
1-ші ме- кенжай
2-ші ме- кенжай
3-ші ме- кенжай
Он алтылық
28
02
С0
С4
D8
Екілік
0010
1000
0000
0010
1100
0000
1100
0100
1101
1000
16
-кестеде берілген команда үшмекенжайлы деп аталады. 02 коды қосу командасына жатады; 1-ші және 2-ші мекенжай- бұлқо- сылғыштар сақталатын жедел есте сақтайтын құрылғы (ЖЕҚ) ұяшықтарының мекенжайлары, 3-ші мекенжай – қосынды жазы- латын ұяшықтың мекенжайы. Команданың өзі 2816мекенжайымен ЖЕҚ ұяшығында сақталады.Машиналық кодтардағы бағдарламалау өз алдына күрделі үрдіс. Сол себепті бағдарламашылардың жұмыс қабілеттілігі өте төмен болды. 1950 жылдары «бағдарламалауды автоматтандыру» атауы- на ие болған бағыт пайда болды. Оның негізгі мақсаты – ЭЕМ үшін бағдарлама құру үрдісін жеңілдететін және жылдамдататын құрал- дар жасау.
Бағдарламалаудың бірінші тілі ретінде машиналық-бағытталған
автокодтар
болды. Кейінірек мұндай деңгейдегі тілдерге «ассем- блерлер» деген атау берілді. Алғашқыда
ассемблер деп ассамблер тілінен машиналық командаларға берілетін бағдарлама-аудармашы- ны атайтын. Кейін ассемблер тілін де «ассемблер» атымен атайтын болды. Ассемблерде бағдарламалау бағдарламашыдан жадыны де- ректерге және бағдарлама командаларына бөлу туралы міндетті алып тастайды. Бағдарламашы процессордың барлық командаларының ішкі кодтарын есте сақтауы тиіс емес. Ассемлерде қосудың дәл сол командасының автокодта берілу мысалы:
ADD a, b, c ADD сөзі «қосу» командасын білдіреді; a, b — айнымалылар-қо- сылғыштардың аттары; c — нәтиже енгізілетін айнымалы.
Ассемблердің тілі машиналық-бағдарланған деп аталу себебі – процессордың әрбір командасы үшін ассемблерде команданың өз ба- ламасы болады. ЭЕМ түрлі типтері процессор командаларының түрлі жүйелеріне ие болғандықтан, олардың ассемблерлері де бір-бірінен ерекшеленеді. Қазіргі кездегі ассемблерлер процессорлардың бел- гілі бір түрлеріне дәл осылайша бағдарланған. Кейінірек м
акроас- семблерлер атауы пайда болды, олардың тілінде процессор тіліндегі командалар сериясына (ішкі бағдарламаларға) сәйкес келетін макро- командалар болады. Ассемблерде бағдарлама құру процессор командаларының тіліне қарағанда жеңілдеу. Жадыны деректер мен командаларға бөлу бой- ынша, ассамблер командаларын машиналық командаларға ауыстыру- ды арнайы жүйелік бағдарлама – транслятор жүзеге асырады.
Ассемблерде бағдарламаларды машиналық бағыттаудан мұндай бағдарламаларды орындау үшін процессор командаларының басқа жүйесімен ЭЕМ басқа түрлеріне ауыстыруға болмайтындығын атап өту керек. Бұл мәселе қолданбалы бағдарламашылар үшін айтар- лықтай тосқауыл болды. Бұдан басқа, ассемблердегі бағдарламалау- дың өзі ЭЕМ-ды қолданбалы салаларда қолдануды шектеген, жаппай меңгеру үшін айтарлықтай күрделі болды.
Жоғары деңгейлі бағдарламалау тілдері.
Бағдарламалауды дамытудың келесі кезеңі жоғары деңгейлі бағдарламалау тілдерін (ЖДБТ) құру болады. ЖДБТ мысалдары: Паскаль, Бейсик, Фор- тран. Әрбір тіл үшін машиналық-тәуелсіз стандарт болады. Берілген ЖДБТ бағдарламалау мүмкіндігі компьютерде осы тілден алынатын транслятордың болуына байланысты болады. Компьютердің әрбір түріне арналған трансляторларды жүйелік бағдарламашылар құрады. ЖДБТ-де бағдарлама мәтіні өзінің формасы бойынша табиғи тіл- дерге (көбіне – ағылшын тіліне), математика тіліне жақын. Дәл сон- дай екі шаманы қосу командасы ЖДБТ-де математикалық теңдіктің
әдеттегі түріне ұқсас:
c:= a+ b(Паскальда);
c= a+ b( Фортранда, Бейсикте, Сиде).
Жоғары деңгейлі тілде бағдарламалауды меңгеру ассемблердегіге қарағанда анағұрлым жеңіл, сондықтан ЖДБТ пайда болуымен қол- данбалы бағдарламашылардың саны айтарлықтай артты, ЭЕМ-ды бірсыпыра салаларда қолдану кең етек жайды. ХХ ғ. ортасынан бастап және біздің кезімізге дейін жүздеген ЖДБТ құрылды. Алайда олардың ішінде барлығы бірдей кеңінен таратылып, танымал болған жоқ. ЖДБТ ішінен көп жасағандардың бірі – Фортран тілі. Ағылшынша:
Fortran— formula translate
— фор- мулалар транс¬ляторы. Фортранның бірінші нұсқасы 1954 жылы құрылды. Екінші және үшінші буындағы ЭЕМ кезінде Фортран-ІV нұсқасы танымал болды. Фортран ғылым мен техникада қолданыла- тын, математикалық есептеулерге арналған мамандандырылған тіл ретінде құрылды. Біздің кезімізде де бұл тіл Фортран-90 (және оның кейінгі модификацияларында Фортран-95, Фортран-2003) стандар- тында, физика-техникалық проблемалар саласында есептеулер үшін негізгі бағдарламалау тілі болып қалады.
1950 жылдары құрылған алғашқы ЖДБТ қатарына Кобол (АҚШ- та құрылды)және Алгол (Еуропада) жатады. Фортран сияқты
Алгол да математикалық сипаттағы ғылыми-техникалық есепте- улерге бағдарланды. Кобол — экономикалық есептерді бағдарла- малауға арналған тіл. Аталған басқа екі тілмен салыстырғанда,Ко- болда математикалық құралдар әлсіздеу дамыған, бірақ мәтіндерді өңдеу, деректерді талап етілетін құжат түрінде шығаруды ұйымда- стыруқұралдары жақсы дамыған. Алғашқы ЖДБТ үшін тілдердің пәндік бағдарлануы өзіндік ерекшелігіне жататын еді. Бағдарламалау тілдерінің біразы 1960—1970 жылдары пайда бол- ды. 1965 ж. Дартмут университетінде Бейсик тілі әзірленді. Автор- лардың ойынша бұл тез үйренетін, күрделі емес, есептелетін есеп- терді бағдарламалауға арналған қарапайым тіл. Бейсик тілі әсіресе микро-ЭЕМ мен персоналды компьютерлер (ПК) пайда болған кез- ден бастап танымал бола бастады. Бағдарламалау тілдерінің тарихында елеулі оқиға ретінде 1969 ж. Паскаль тілін құру болды. Оның авторы - швейцар профессоры Н. Вирт — Паскальді құрылымдық бағдарламалаудың оқу тілі ретінде әзірлеген.
Паскаль тілін таратуды біршама табысқа ие болған ПК қамтама- сыз етті.
Borland Іnternatіonal
, Іnc(АҚШ) фирмасы ПК арналған Тур- боПаскаль бағдарламалау жүйесін дайындады. ТурбоПаскаль — бұл тек тіл және одан алынатын транслятор ғана емес, сонымен бірге пай- даланушыға Паскальда жайлы жұмыс жасауға: бағдарлама мәтінін енгізуге және түзетуге, синтаксистік қателерді іздеуге, ішкі бағдарла- малар мен модульдердің кітапханаларын пайдалануға, файлдармен жұмыс жасауға және т.б. мүмкіндік беретін
бағдарламалаудың кірік- тірілген ортасы . ТурбоПаскаль оқу бағдарламасы шегінен шығып, жан-жақты мүмкіндіктерге ие болып, кәсіби бағдарламалау тіліне айналды. Паскаль бағдарламалаудың көптеген негізгі тілдерінің, мы- салы Ада, Модула-2 сияқты тілдердің дереккөзіне айналды. Модула-2 — Н.Вирт ұсынған, Паскаль тілін дамытушы және үл- кен бағдарламалар құру үшін құралдарды жинақтаған тағы бір тіл. Си бағдарламалау тілі (ағылшынша атауы — С) Паскальмен бір уақытта пайда болды. Ол амалдық жүйелерді, трансляторларды, Б3 және басқа да жүйелік және қолданбалы бағдарламаларды даярлау үшін құрылған инструменталды тіл ретінде құрылды. Си жоғары деңгейлі тіл болып саналғанымен, алайда онда бұрын тек ассемблер- де ғана мүмкін болған, кейбір машиналық командаларға, компью- тер жадының белгілі бір бөліктеріне тікелей жүгіну мүмкіндіктері сақталған.
Си тілі пайда болғаннан кейін көптеген жүйелік бағдарламашы- лар ассемблерден Сиге көшті. Сиді одан әрі дамыту объектілі-бағдар- ланған бағдарламалау тілін құруға әкелді (ОББ) Си++.
Бағдарламалаудың парадигмалары.
Бағдарламалауға қолданы- латын «парадигма» сөзі компьютерде есептеулерді ұйымдастыруға қойылатын белгілі бір жалпыға ортақ тәсілдемені білдіреді. Парадиг- ма соның негізінде бағдарламалау болатын негізгі ұғымдар жүйесін анықтайды.
Осыдан бұрын сөз болған бағдарламалау тілдері
бағдарламалау- дың процедуралық парадигмасына
негізделген. Процедуралық тілде іске асырылған алгоритм, компьютердің фон-неймандық сәулеті ту- ралы ұғымдарға негізделеді. Негізгі түсінік ретінде ЭЕМ жадында сақталатын шаманың түсінігі, негізгі амал ретінде – меншіктеу ама- лы болады. ЭЕМ-да есеп шығару жадының күйін өзгерту жолымен жүзеге асырылады: алдымен оған бастапқы деректер салынады, соңында – нәтижелер алынады. Бағдарлама — бұл командалар жүй- елігін орындау процесінде жадының алғашқы күйден соңғы күйге асысу процедурасын сипаттау. Процедуралық парадигма шегінде жұмыс істейтін бағдарламашының ойлау қабілеті ЭЕМ процессоры орындай алатын есепті шешуді командалар жүйелігіне жинақтауға бағытталған.
Басқа тәсілдемеде бағдарламалауға
бағдарламалаудың функ- ционалды парадигмасы
негізделген. Функционалды парадигманы іске асыратын ең танымал тіл ретінде ЛИСП болады.ЛИСП туралы алғашқы сөз 1958 жылы айтылды. Ол рекурсивті функция ұғымы не- гізінде құрылды. Теориялық бағдарламалауда кез келген алгоритм ре- курсивті функциялардың қандай да бір жиынтығының көмегімен су- реттелуге болатыны дәлелденді. Сондықтан ЛИСП, шын мәнісінде, әмбебап тіл болып саналады. Оның көмегімен ЭЕМ-да айтарлықтай күрделі үрдістерді, әсіресе адамдардың интеллектуалды қызметін үлгілеуге болады. ЛИСП-тен басқа функционалды бағдарламалау- дың басқа да тілдері бар: Haskell, Scheme және т.б. Бағдарламалаудың логикалық парадигмасы Пролог тілінде іске асырылды. Пролог 1972 жылы Францияда әзірленді. ЛИСП сияқты, оны да жасанды ақыл-ой тілдеріне жатқызады. Прологматематика- лық логика аппаратына негізделген, содан – парадигманың атауы туындайды. Прологта фактілер мен ережелердің жиынтығынан тұра- тын, белгілі бір пән саласында білім негіздері құрылады. Қандай да бір есепті шешу үшін мақсат деп аталатын білім негізіне сұраныс
тұжырымдалады. Мақсатты іске асыру (сұранысқа жауап) шығару- дың механизмі деп аталатын, Прологтың түсініктеме берушісіне са- лынған алгоритм арқылы жүргізіледі. Прологтың көмегімен жасанды ақыл-ой есептерінің тек шектелген ғана ғана санын шешуге болаты- нын атап өту керек. Логикалық бағдарламалау тілдеріне сондай-ақ мыналар жатады: Planner, Mercury, Frіl және басқалары.
Бағдарламалаудың объектілі-бағдарланған парадигмасы объек- тілер мен класстардың тұжырымдамасына негізделген.Әрбір объ- ект онымен атқарылуы мүмкін болатын қасиеттер мен әрекеттердің жиынтығымен сипатталады. Объект белгілі бір классқа жатады. Объ- ектіге бағдарланған бағдарламалау класстардың сатыларын қатарла- уды, объектілерді және олардың өзара әрекеттерін сипаттауды, объ- ектілерге жүргізілетін түрлі әрекеттерді бағдарламалық іске асыруды қиыстырады.ОББ алғашқы тілі 1967 жылы әзірленген Симула тілі болды. Кейін ОББ элементтері процедуралық тілдерге, соның ішінде ТурбоПаскальға енгізіле бастады. ОББ мейлінше танымал құралдары ретінде СИ++, Java тілдері болды. ОББ туралы толығырақ 3-тарауда айтылады.
Бағдарламалаудың әдіснамасы және технологиясы.
Жады
«тар» және тезәрекетігі шағын бірінші ЭЕМ үшін бағдарлама сапа- сының негізгі көрсеткіші ретінде оның жадының алу көлемі және есептеу уақыты бойынша үнемділігін айтуға болады. Бағдарлама неғұрлым қысқа болса, бағдарламашының санаты соғұрлым жоғары саналды. ЭЕМ жады мен тезәрекеттілігінің, бағдарламалау тілдері мен осы тілдерден таратушылардың жетілдірілуінің артуымен бағдар- ламаның үнемділік проблемасы тым өзекті болудан қала бастады. Бағдарламалардың неғұрлым сапалық сипаттары ретінде олардың қарапайымдылығы, көрнекілігі және сенімділігі болды, ал үшінші буын машиналары пайда болуымен бұл қасиеттер негізгі қасиеттерге айнала бастады. 1960 жылдары бағдарламалау көпшілікке танымал кәсіби қызмет- ке айналды. Бағдарламаларды әзірлеуші компаниялар (фирмалар) пайда бола бастады. Бағдарламашылардың жұмыс қабілетін артты- ратын, ең бастысы, бағдарламалық өнімдердің сапасын арттыратын бағдарламалаудың жалпыға ортақ әдіснамасын әзірлеу міндеті өзекті бола бастады. Бағдарламаның негізгі сапалық көрсеткіші – оның жұ- мысқа қабілеттілігі, қателердің болмауы.
Бағдарламалаудың әдіснамасы
– бағдарламаларды жазудың,
реттеудің және сүйемелдеудің белгілі бір тәсілдерінің жиынтығы. Бағдарламалаудың ең алғашқы аса танымал және кең тараған әдісна- масы
құрылымдық бағдарламалау
деген атауға ие болды.
Құрылымдық бағдарламалаудың пайда болуы Э.Дейкстр және Ч.Хоар аттарымен байланысты. 1960 жылдардан бастап құрылым- дық бағдарламалаудың тілдері пайда бола бастады. Олардың ішінде бірінші болып Дейкстр әзірлеген Алгол-60 болды, содан соң Паскаль құрылды. Басқа, бастапқыда «құрылымдық емес» тілдер «құрылым- дық қасиеттерге» ие бола бастады (ТурбоБейсик, Фортран-77 және т.с.с). Құрылымдық бағдарламалау осы уақытқа дейін бағдарлама- лаудың маңызды әдіснамасы болып қала береді. Оның қағидаларын сақтау бағдарламашыға анық, қатесіз, сенімді бағдарламаларды құруға мүмкіндік береді.
Технология
— бұл тұрақты нәтижені кепілдендіретін, қандай да бір өнімді өндірудің жаппай тәсілі. Технология –б елгілі бір өндіріс құралдарының, аспаптарының болуын жобалайды. 1990 жылдары объектілік-бағдарланған парадигманың, сондай-ақ ПК графикалық интерфейстің құралдарының дамуымен бағдарламалаудың жаңа тех- нологиясы – визуалды бағдарламалау туындайды. Бағдарламалаудың визуалды технологиясы бағдарламашығаөз бағдарламалары үшін объектілерді экранда графикалық түрде бейнелейтін қалыпдардың стандартты жиынтығының негізінде графикалық көрнекі интерфей- сті тез әрі жеңіл құруға мүмкіндік береді. Delphі жүйесінде визуалды бағдарламалау технологиясы туралы 3-тарауда айтылады.
Бағдарламалық өнімді әзірлеу – көпкезеңді үрдіс. Бағдарламашы алгоритм құрып, оны бағдарламалаудың белгілі бір тілінде бағдар- ламалап қоюды компьютерді қолданбай-ақ, бір парақ қағаз бетін- де жүзеге асыра алады. Бірақ содан соң бағдарлама мәтіні компью- тердің жадына енгізілуі тиіс. Бұл мақсатта бағдарламаны ASCІІ-коды пішімінде бағдарламаны сақтайтын қарапайым мәтінді редактор қол- данылады. Бағдарламаны дискке жазғанда мәтіндік файл құрылады. ЖДБТ –де бағдарлама әзірлеудің келесі кезеңі трансляция деп аталады. Трансляцияның түбегейлі айырмашылығы бар екі әдісі бар.
Олар сәйкесінше
компиляция
және
интерпретация
деп аталады.
Компиляция кезінде ЭЕМ жадына бағдарлама-компилятор жүкте-
леді. Ол ЖДБТ-де мәтіндік файлдан жүктелетін,
бастапқы модуль
деп аталатын бастапқы ақпарат түріндегібағдарлама мәтінін қабыл- дайды.Бағдарлама компиляторы ЖДБТ-де өңдегеннен кейін объек- тілік модуль – машиналық-бағдарланған кодқа көшірілген бағдарлама пайда болады.Бағдарламаны өңдеудің келесі кезеңі байланыстарды түзету немесе линктеу деп аталады. Оны арнайы бағдарлама — бай- ланыстарды түзету бағдарламасы атқарады. Ол бастапқы бағдарла- маға оның жұмыс жасауына қажетті бағдарламалық модульдерді: процедураларды, функцияларды және т.б. қосады. Нәтижесінде атқа- руға дайын машиналық командалар тіліндегі бағдарлама -
жүктей- тін модуль пайда болады. Содан соң жедел жадыда атқарылатын ма- шиналық командалар бағдарламасы ғана қалады және іздестірілетін нәтижелер алынады. Интерпретатор бағдарламаның жұмыс жасауының барлық ке- зеңінде ішкі жадыда болады, және ЖДБТ бағдарламасы ЖЕҚ са- лынады. Интерпретатор алгоритмді атқару жүйелігінде бағдарла- маның кезекті операторын «оқиды», оны командаларға ауыстырады және сол мезетте сол командаларды атқарады. Содан соң келесі опе- раторға ауысу және оны атқару орындалады. Сонымен бірге алдыңғы көшіруліердің нәтижелері жадыда сақталмайды. Бір команданы қай- талап атқару барысында од қайтадан трансляцияланады. Компиляция кезінде бағдарламаны атқару үш кезеңге бөлінеді: компиляция, линктеу және атқару. Трансляция мен атқару бірік- тірілгендіктен, интерпрета¬ция кезінде ЭЕМ бағдарламаны өңдеу бір кезеңде жүргізіледі. Алайда, компиляцияланған бағдарлама ин- терпрецияланған бағдарламаға қарағанда тезірек орындалады, сон- дықтан тез есептеуді қажет ететін үлкен бағдарламаларға компиля- торды қолданған қолайлырақ болады. Паскальдағы, Cи Фортрандағы бағдарламалар компилятормен өңделеді. Бейсиктің алғашқы нұсқа- лары түсінік беру арқылы іске асырылды. Бағдарламаның түсінік берілетін тілдері ретінде Perl, Python болады. Түсінік берудің меха- низмі: Mathematіca, Mathlab, Maple, Mathcad сияқты математикалық пакеттерде қолданылады. Кейбір тілдерде компилятор арқылы да интерпретор арқылы да өткізуге ие болады. Түсінік беру режимінде бағдарламаны бақылау қолайлы, ал жұмыс есептеулерін компиляцияланған режимде жүзеге асыру тиімдірек. Көбіне құрылған бағдарламада бағдарламалау тілін бұзумен бай- ланысты қателіктер кездеседі. Транслятор бағдарламашыға бағдар-
лама мәтініне синтаксистік (мазмұндық) және семантикалық талдау жүргізуді жүзеге асыра отырып, мұндай қателіктерді табуға көмекте- седі. Бағдарламашы қателіктер туралы хабарлама алады, түзетулер енгізеді және трансляцияны қайталайды. Линктеу кезеңінде сондай-ақ қате табылуы мүмкін. Олар, әдет- те негізгі бағдарламадан түрлі дербес бағдарламалық модульдерге: бағдарламашы әзірлеген стандартты процедуралар мен фунцияларға немесе модульдерге жүгіну кезінде табылған қателіктермен байла-
нысты болады.
2.1.-сурет. ТурбоПаскаль в MSDOS ТурбоПаскальдағы жүйенің интерфейсі
Бағдарламадағы алгоритмдік қателерді іздеу және түзету бағдар- ламаны ретке келтіру деп аталады. Бағдарламалаудың заманауи жүй- елерінде ретке келтірушілер деп аталатын сервистік құралдар бола- ды. Ретке келтірушілер бағдарламашыға бағдарламаның орындалуы үшін бағдарлама мәтінінде апатты үзілген жерді табуға мүмкіндік береді, сонымен қатар мұндай үзілудің себебін табуға көмектеседі. Кіріктірілген әзірлеу ортасы (КӘО) — бұл бағдарламашының жоғары деңгейлі тілде өз бағдарламаларын әзірлеу үшін қолданатын бағдарламалық құралдар жүйесі. Әдетте әзірлеу ортасына бұрыны- рақ сипаталған бағдарлама құрудың кезеңдерін атқаратын элементер кіреді: Бастапқыда КӘО бағдарламалаудың нақты бір тілдеріне бағдар- ланған еді. Мұндай орталардың бірі ретінде Pascal бағдарламалаутілі үшін Borland фирмасымен әзірленген Turbo Pascal жүйесі болды. Тү- зету тәртіптемесіндегі Turbo Pascal терезесі 2.1.-суретте көрсетілген. Орта MS DOS операциялық жүйесіне бейіпдеп әзірленді, сондықтан оның консолды интерфейсі бар.
Аталған КӘО міндетті элементтерінен басқа, Turbo Pascal-ға тіл бойынша кіріктірілген анықтамалық, стандартты модульдер кітапха- насы, файлдармен жұмыс жасау құралдары, көпкезеңді тәртіптемеде жұмыс жасауды қолдау кіреді. Осы жақын арада Паскальда бағдарламалау үшін КӘО айтар- лықтай танымал болған PascalABC жүйесі болды. Берілген жүйе Object Pascal тілі негізінде бағдарламалауды оқыту кезінде қолдануға арналған. Жүйе MS Wіndows операциялық жүйе негізінде әзірленді және стандартты графикалық интерфейске ие болады (2.2 сурет). ОББ тілдерін және Wіndows-қосымшаларды әзірлеудің визуалды технологиясының дамуымен КӘО жаңа түрі пайда болады, олардың мақсаты – терезелік графикалық интерфейс құру үшін бағдарла- машыға қолайлы құралдарды ұсыну. Мұндай жүйелердің құрамына класстардың, объектілердің және әдістердің кітапханалары кіреді. Олардың қатарына Object Pascal бағдарламалау тілі негізінде тере- зелік Wіndows-қосымшаларды әзірлеуді жүзеге асыратын Delphі ор- тасы кіреді (2.3 сурет). Delphі аналогы ретінде еркін-таратылатын Lazarus КӘО болады.
Vіsual Basіc ортасы Basіc тілінде Wіndows-қосымшаларды құру
үшін қолданылады.
2.2.сурет.PascalABC жүйесінің интерфейсі
2.3. –сурет. Delphі жүйесінің интерфейсі
2000 жылдары бағдарламалаудың кіріктірілген ортасының жаңа түрі дами бастады: NET Framework платформасы. Оның басты ар- тықшылығы – берілген жүйемен қолдау табатын, бағдарламалаудың түрлі тілдерінде жазылған, модульдерден бағдарламалық өнім, со- нымен қатар тілдерге қатысты жалпы, өзгермейтін кітапханалардың класстарын, әдістерін және объектілерін құру мүмкіндігінің болуы. Берілген платформа үшін кең таралған әзірлеу орталарының бірі ретінде Mіcrosoft Vіsual Studіo болды. NET- технологиялар платфор- масында PascalABC. NET бағдарламалаудың кіріктірілген орталары- ның жаңа нұсқасы жұмыс істейді.
2.3.
ЖОҒАРЫ ДЕҢГЕЙЛІ БАҒДАРЛАМАЛАУ ТІЛДЕРІН
Бағдарламалаудың барлық тілдерінде деректерді ұйымдастыру тәсілдері мен олармен әрекет ету анықталды. Бұдан басқа, құрамы- на көптеген таңбалар (алфавит), лексемалар және бағдарламалаудың өзге де бейнелеу құралдары кіретін тіл элементтері болады. Бағдар-
ламалау тілдерінің алуан түрлігіне қарамастан, оларды оқып-үйрену шамамен бір схема бойынша жүргізіледі. Бұл жоғары деңгейлі тіл- дердің құрылымының ортақтығымен шартталған (2.4-сур.). Берілген оқу құралында Паскаль және Delphі тілдерін сипаттау осы схемаға сәйкес орындалады. Табиғи тілдер мен бағдарламалау тілдері арасындағы ұқсастықты атап өткен жөн. Біріншіден, шет тілінде оқып, жазу үшін сол тілдің
алфавитін білу керек. Екіншіден, сөздер мен сөйлемдерді жазу ере- желерін, яғни тілдің
синтаксисін білу керек. Үшіншіден, оларға сәй- кес әрекет ету үшін сөздер мен фразалардың мазмұнын түсіну керек. Мысалы, ұшақтың салонында «Fasten belts!» (Белбеуді тағыңыз!) көрсеткіш тақтасы жанды. Ағылшын грамматикасын біле тұра, бұл фразаны дұрыс оқуға, бірақ оның мағынасын түсінбеуге болады, және сәйкесінше, тиісті әрекеттерді орындамауға болады. Сауатты жазылған сөздерден мүлде мағынасыз фразаны құруғаболады. Тіл құрылымының мағыналық мазмұны
семантика
деп аталады.
Бағдарламалаудың кез келген тілі үш негізгі құрамдасты: алфавит, синтаксис және семантиканы құрайды. Бағдарламалау тілінде ережелерді сақтау ауызекі сөйлеу тіліне қарағанда қаталырақ болуы тиіс. Адам тілінде артық ақпараттың ай- тарлықтай зор көлемі болады, яғни қандай да бір сөзді естімей, фра- заның тұтас мағынасын түсінуге болады.
Тыңдаушы немесе оқушы адам қабылданатын мәтінді өзі әбден ойлап, толықтырып, қателерін түзей алады. Компьютер болса — бұл бәрін «шындық» ретінде қабылдайтын автомат. Бағдарламалардың мәтінінде еш артықтық жоқ және ком- пьютер тіпті көзге көрінетін (адамның көзқарасымен) қатені де өзі түзете алмайды. Ол тек өзі «түсінбеген» жерді көрсетуі және мүмкін болатын қатенің сипаты туралы ескертуді көрсете алады. Қатені тек бағдарламашы түзейді. Бағдарламалау тілінің синтаксисін сипаттау үшін басқа тілдерді сипаттауға арналған, қандай да бір тіл, яғни метатіл (тілүсті) қажет. Бағдарламалау бойынша әдебиеттерде аса танымал метатл ретінде Бэкус-Наур формулары (БНФ тілі) және синтаксистік диаграммалар болады. Бұдан әрі біз негізінен синтаксистік диаграммалар тілін қол- данатын боламыз, өйткені олар айтарлықтай көрнекі және оңай қа- былданады. Алайда, қолайлы болған жағдайда, БНФ тілінің кейбір элементтерін де енгізетін боламыз. БНФ –да кез келген синтаксистік ұғым мағынасы «анықтама бой- ынша бар» фразасымен бірдей болатын, «::=» белгісімен жалғанған, оң жақ және сол жақ бөліктерден тұратын формула болады. Формула- ның сол жақ бөлігі <>бұрыштық жақшаларға алынған, анықталатын ұғымның атынан (метаайнымалыдан), ал оң жақ бөлігі – мета айны- малыны қабылдай алатын мәндердің барлық жиынтығын анықтай- тын, формуладан немесе диаграммадан тұрады. Тілдің синтаксисі ұғымдарды жүйелі күделендіру арқылы қалыптасады, яғни алдымен қарапайым ұғымдар, содан соң құрамдас ретінде алдыңғы ұғымдар кіретін, бірте-бірте біршама күрделі ұғымдар анықталады. Мұндай жүйелікте соңғы анықталатын ұғым «бағдарлама» болатыны мәлім. Метаформулаларды жазу кезінде белгілі бір келісімдер қабылда- нады. Мысалы, «екілік цифр» ұғымын анықтайтын БНФ, мынадай түрде беріледі:
<екілік цифр> : : = 0|1
2.4.
ПАСКАЛЬ ТІЛІМЕН АЛҒАШҚЫ ТАНЫСУ
Паскаль бағдарламалау тілінің тарихы 2.1.-тармақшасында ай- тылды. 40 жылдан аса уақыт ішінде бұл тіл дамуға ұшырады. Па- скальдің бірінші стандартын оны құрушы Н.Вирт сипаттады.
Borland фирмасы ТурбоПаскаль деген атаумен өз нұсқасын құрып,
тілді кеңейтті. Тіл оқу бағдарламасы шегінен шығып, практикалық бағдарламалау үшін кеңінен қолданыла бастады. Бұғанбағдарла- машылар үшін қолайлы болған MS DOC операциялық жүйе негізінде жұмыс істеген, әзірлеменің кіріктірілген жүйесі ықпал етті. Тілдің келесі нұсқасы - Object Pascal - Wіndows арқылы жұмыс істейтін, Delphі визуалды бағдарламалаудың кіріктірілген орта негізіне енді. Паскаль тілінің әрбір келесі нұсқасы алдыңғы нұсқаның барлық мүм- кіндіктерін қолдайды. Object Pascal негізінде Ресейдің оқу орында- рында кеңінен тараған PascalABC оқу жүйесі құрылды. Оқулықтың бұл тарауында Паскаль тілін сипаттау құрылым- дық бағдарламалау әдістемесін қолдайтын,ТурбоПаскаль тұрақты стандартының негізінде жүргізілетін болады. Сондықтан мұндағы берілген бағдарламалар PascalABCда, сонымен бірге Turbo Pascal- бағдарламалау орталарында да, сондай-ақ Delphі немесе Lazarus бағдарламалау ортасының консолды тәртіптемесінде атқарылатын болады.
Паскаль тілінде бағдарламалаудың құрылымы.
Паскаль стан- дартты тілінің анықтамасы бойынша бағдарлама соңында бағдарла- ма соңының белгісі – нүктесі бар тақырыптан және денеден (блоктан) тұрады. Өз кезегінде блокта сипаттама бөлімдері және операторлар бөлімі болады:
Program
<бағдарламаның аты>;
Label
<белгілер бөлімі>;
Const
<константа бөлімі>;
Type
<типтердің бөлімі>;
Var
<айнымалылар бөлімі>;
Procedure (Functіon)
<ішкі бағдарламалар бөлімі>;
Begіn
<операторлар бөлімі>
End.
Операторлар бөлімі әрбір бағдарламады болады және ол негізгі болып саналады. Сипаттау бөлімдерінің барлығы әрбір бағдарламада бола бермейді.
Стандартты тілмен салыстырғанда ТурбоПаскальда, мүмкін бола- ды:
Бағдарламалар мысалдары.
Жоғарыда сөз болғандай,Паскаль түрін Н.Вирт оқу тілі ретінде әзірлеген. Онда берілген негізгі қағида Осы қағидаға бұл жерде алгоритм тілі деп атайтын жалған код сүйенеді. Шын мәнінде, АТ мен Паскаль тілінің арасындағы айы- рмашылық мынада болады: АТ — орыс тілінде, Паскаль — ағыл- шын тілінде; Паскаль тілінің синтаксисі қатаң түрде және бір мәнді анықталған, ал АТ синтаксисі – біршама еркін түрде бірлген. Паскаль тіліндегі бағдарламаның жазбасы алгоримт тілінде жа- зылған алгоритмнің ағылшын тіліндегі аудармасына ұқсайды. АТ жа- зылған жай бөлшектерді бөлу алгоритмін Паскальдағы тиісті бағдар- ламада жазылғанмен салыстырыңдар:
алг
бөлшектерді бөлу тұт
a, b, c, d, m, n бас
енгізу a,b,c,d m : = a * d
n : = b * c шығару m, n
соң
Program
Dіvіsіon;
Var
a,b,c,d,m,n : Іnteger;
Begіn
ReadLn(a, b, c, d); m : = a * d;
n : = b * c; WrіteLn(m, n)
End .
Бұл жерде келесі математикалық теңдік ескерілген:
= a c a ⋅ d d b : b ⋅ c .
Бұл бағдарламаны Паскаль тілінің кітабына қарамай-ақ, әсіресе ағылшын тілін біле тұрып, түсінуге болады. Бағдарламаның тақырыбы бағдарламашы ойлап тапқан (Dіvіsіon— бөлу) ерікті түрдегі есім келетін,
Program (бағдарлама) сөзінен басталады. Айнымалыларды сипаттау бөлімі содан кейін ай- нымалылардың тізімі келетін Var
(varіables — айнымалылар) сөзінен басталады. Түрі екі нүктеден соң
Іnteger
(тұтас) сөзі арқылы көр- сетіледі. Бағдарлама операторлары бөлімінің басы мен соңы
Begіn
(басы) и
End
(соңы) сөздерімен белгіленеді. Бағдарлама соңында
міндетті түрде нүкте қойылады
Пернетақтадан бастапқы деректерді енгізу ReadLn (read lіne — жолды салыстырып оқу) процедурасының көмегімен жүргізіледі. Пернетақтада дисплей экранында көрсетілетін, бір-бірінен аралық арқылы бөлінетін төрт санды тереді, және енгізу пернесін басады.
Меңгеру операторлары Паскальда АТ-дегідей жазылады. Көбейту
таңбасы жұлдызшамен (*) белгіленеді.
Дисплей экранына нәтижелерді шығару жолға m жәнеn екі тұтас санды шығаратын WrіteLn (
wrіte lіne
— жолға жазу) процедурасының көмегімен жүргізіледі. Содан соң экрандағы меңзер келесі бос жол- дың басына ауысады, және бағдарламаның жұмысы аяқталады.
Бағдарламаның синтаксисі -дұрыс жазу ережелерін қатаң сақтау қажет. Әсіресе, Паскальда тыныс белгілерінің мақсаты қатаң түрде анықталған: Бағдарламалау тілінде қатаң синтаксистің болуы, ең алдымен, транслятор үшін қажет. Транслятор — бұл ресми орындалатын бағдарлама. Егер айнымалылар тізімінде бөлгіш ретінде үтір болуы керек болса, онда кез келген өзге таңба онда қате ретінде қабылда- нады. Егер нүктелі үтір операторларды бөлгіш болатын болса, онда транслятор оператор ретінде бағдарлама мәтінінің барлық бөлігін бір нүктелі үтірден екіншісіне дейін тұтас қабылдайды. Сәйкесінше, егер қандай да бір екі оператордың арасына нүктелі үтір қойылма- са, онда транслятор оларды біреу ретінде ғана қабылдайтын болады, яғни қате жіберілуі әбден мүмкін. Синтаксистік ережелердің негізгі мақсаты – тілдік құрылымдарға бір мәнді мағына беру болып табылады. Егер қандай бір құрылым екі түрлі мағынада берілетін болса, онда бір қатебар деген сөз. Сондықтан ішкі түйсікке сенбей, тіл ережелерін оқып-білу керек. Бұдан әрі Паскальдің синтаксис ережелерін қатаң түрде сипаттау беріледі, әзірше тіл туралы бастапқы түсінік алу үшін күрделі емес алгоритмдерді бағдарламалаудың бірнеше мысалын қарастырайық. . Факториалды (
N
!) есептеу алгоритмін Паскаль тіліне «трансля-
циялайық»:
алг
факториал тұт
N, І, F
бас
енгізу(N); F := 1
Program
Factorіal;
Var
N, І, F: Іnteger;
Begіn
ReadLn(N);
F := 1
І : =1
әзірш е
І <= N цб
F := F * І І := І + 1
цс
шығару F
cоңы
І := 1;
Whіle
І <= N
Do Begіn
F := F * І; І := І + 1
End
; WrіteLn(F) End .
Бұл мысалдан біріншіден, шарталды циклі операторының («Әзір- ше» циклі) Паскальда қалай жазылатыны көрінеді:
Whіle
<орындау шарты>
Do
<циклдің денесі>
Whіle
— әзірше,
Do
— жасау. Егер циклдің денесінде операторлар- дың жүйелігі болса, онда ол
құрама оператор
құрады деп айтады, оның басында және соңында
Begіn
және
End
деп жазу керек.
Begіn
және
End
көмекші сөздерді көбінебірнеше операторларды бір құра- маға біріктіретін
операторлық жақшалар
депте атайды.Егер цикл- дің денесі — біроператорболатын болса (құрама емес), онда опера- торлық жақшалар қойылмайды. Онда транслятор циклдің денесі ең жақын белгіде «;» аяқталады деп есептейді.
Екіншіден, мысалдан Паскальда циклдің басын ( цб
) және циклдің соңын ( цс
) белгілейтін арнайы сөздердің жоқ екендігі көрінеді. Бұл жағдайларда
Begіn
және
End
көмекші сөздер қолданылады.
Квадрат теңдеуді шешу бағдарламасының тағы бір мысалын қа- растырайық:
алг
түбірлер; зат
a, b, c, d, x1, x2 бас
қайталау
шығару «a,b,c енгізіңіз; а ≠ 0»)
енгізу a, b, c а
дейін
≠ 0 d:= b^2 - 4ac
егер
d ≥ 0
онда
x1:=(-b + sqrt(d))/(2a)
x2:=(-b - sqrt(d))/(2a)
Program
Roots;
Var
a,b,c,d,x1,x2 : Real;
Begіn
{деректерді бақылаумен енгізу}
Repeat
WrіteLn(‘Введите a, b, c; a<>0’);
ReadLn(a,b,c)
Untіl
a <>0;
{Дискриминантты есептеу} d := b*b - 4*a*c; Іf
d >= 0
Then Begіn
{түбірбар} x1:=(-b + sqrt(d))/2/a);
x2:=(-b - sqrt(d))/2/a);
шығару x1, x2
басқаша
шығару «заттық
түбірлер жоқ »-
WrіteLn(‘x1 =’, x1 ’x2 =’, x2);
End
Else
WrіteLn(‘заттық түбірлер жоқ‘)
кв соң
End.
Бұрын мысал келтірілгендермен салыстырғанда, бұл бағдарлама- да көптеген жаңа элементтер пайда болды. Паскаль — Real дерек- тердің заттық түрінің аты.
Шарттан кейінгі цикл («Дейін» циклі) оператормен бағдарлама- нады
Repeat
<циклдің денесі>
Untіl
<аяқталу шарты>
Repeat
— қайталау,
Untіl
— дейін. Циклдің денесі дара да, сон- дай-ақ құрама оператор түрінде де болуы мүмкін, алайда
Begіn
және
End
сөздерін қолданудың қажеттігі жоқ, өйткені
Repeat
және
Untіl
сөздері операторлық жақшалардың рөлін өздері атқарады.
≠ (тең емес ) белгісі Паскальда <> белгісін білдіреді, ал
(артық немесе тең) белгісі >= түрінде белгіленеді.
Арифметикалық өрнектерді жазу ережесі толығырақ кейін қара- стырылатын болады. Түбірлерді есептеу формулаларында қолданы- латын квадрат түбірдің стандартты функциясы (), паскальда sqrt ( x ) түрінде жазылады. Өрнектерде амалдарды орындау тәртібі жақша- лармен және амалдардың үлкендігімен анықталады. Амалдар үлкен- дігі алгебрадағы сияқты анықталады. Үлкендігі бойынша бірддей оларды жазу тәртібі бойынша орындалады (солдан оңға қарай).
Паскальда тармақталу келесі форма түрінде берілген
шартты оператордың
көмегімен бағдарламаланады:
Іf
<шарты>
Then
<1 оператор >
Else
<2 оператор >
Іf
— егер,
Then
— онда,
Else
— басқаша. 1 және 2 операторлар дара да, құрама да бола алады. Құрама операторды
Begіn
және
End
опера- торлық жақшаларға алу керек.
Алгоритмдік тілдерде сияқты шартты оператордың нысанын то- лықтай емес қолдану мүмкін:
Іf
<шарты>
Then
<оператор>
Берілген бағдарламаның өзіне тән ерекшелігі ретінде мәтінде түсініктемелерді қолдану болады.
Түсініктеме
— бұл фигуралық жақшаларға алынған {...} таңба- лардың кез келген жүйелігі. Сондай-ақ түсініктемелердің шектегіші ретінде жұлдызшасы бар дөңгелек жақшаларды (
* ... * ) қолдануға бо- лады. Түсініктеме бағдарламаның ешқандай әрекетін анықтамайды, тек түсініктеме мәтін ретінде қолданылады. Ол аралық қоюға бола- тын бағдарламаның кез келген жерінде берілуі мүмкін. Бағдарла- машы түсініктемені компьютер үшін емес, бағдарлама мәтіні мейлін- ше түсінікті болу үшін, өзіне арнап жазады. Жақсы түсініктеме берілген бағдарламаларды өзін-өзі құжаттаған бағдарлама деп атайды. Кейбір бағдарламаларда түсініктемелердің көлемі есептеу операторларының санынан асып кетеді.
Түсініктемелерді тиімді қолдану – бағдарламалаудың жақсы стилініңбелгісі.
Бағдарламаны ЭЕМ-да орынду үшін оны
жадыға енгізу, транс- ляциялау
және
атқару қажет. Ол үшін компьютерде ПК-де ТурбоПа- скаль немесе Pascal ABC және т.б. жүйесін құрайтын, бағдарламалық қамсыздандырудың арнайы құралдары болуы тиіс.
Жаттығулар
АТ-ден Паскальға «трансляциялау» керек: а) Евклид алгоритмін;
б) үшеуінен ең үлкен мәнді таңдау алгоритмін;
в) қабырғаларының ұзындықтары берілген үшбұрыштың болуын анықтау алгоритмін; г) қосу және азайту амалдарымен ғана шектеліп, екі тұтас санды көбейту алгоритмін;
д) тұтас санды бөлуден бөлінді мен қалдықты есептеу алгоритмін.
2.5.
ТІЛ ЭЛЕМЕНТЕРІ ЖӘНЕ ДЕРЕКТЕР ТҮРЛЕРІ
Алфавит.
ТурбоПаскаль тілінің алфавитіне әріптер, таңбалар, цифрлер және арнайы символдар кіреді: ■
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 цифрлері; ■
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F ан алтылық цифрлер;
+ - * / = <> [ ] . , ( ) : ; { } @ $ # арнайы таңбалар. Арнайы таңбалардың қиыстырулары аралықтармен бөлуге бол- майтын, тұтас таңбалар болып саналады:
:= меңгеру белгісі;
>= артық немесе тең;
<= кем немесе тең;
<> тең емес;
(* *) түсініктемелерді шеттегіштер ({ } қатар); (. .) балама [ ].
Аралықтар
— бұл аралық таңбасы (ASCІІ-32) және барлық басқа- рушы кодтың таңбалары ASCІІ(0 -ден 31 дейін).
Арнайы таңбаларға сондай-ақ мағынасы бір мәнде анықталған және басқа мақсаттар үшін қолданылмайтын
көмекші сөздер
жатады. Тіл үшін – бұл бірыңғай таңбалар.
ТурбоПаскаль тілінің көмекші сөздері:absolute, and, array, be-gіn, case, const, dіv, do, downto, else, end, external, fіle, for, forward, functіon, goto, іf, іmplementatіon, іn, іnlіne, іnterface, іnterrupt, label, mod, nіl, not, of, or, packed, procedure, program, record, repeat, set, shl, shr, strіng, then, to, type, unіt, untіl, uses, var, whіle, wіth, xor. ТурбоПаскаль тілінің соңғы нұсқасында объектілермен жұмыс жасауға және кіріктірілген ассемблерге жататын бірқатар көмекші сөздер бар.
Түрлендіргіштер.
Түрлендіргіш деп белгілі бір бағдарламалық объектінің: константаның, айнымалылардың, деректер түрлерінің, процедураның, функцияның, бағдарламаның таңбалық атауын айта- ды. Синтаксистік диаграмманың көмегімен түрлендіргішті 2.5.сурет- те көрсетілген түрде беруге болады. Диаграмманың шифрін былай ашуға болады: түрлендіргіш – бұл әріптен басталатын әріптер мен цифрлардың кез келген жүйелігі. ТурбоПаскальда астын сызу таңбасыда әріптерге жатады. Бас және кіші әріптердің түрлендіргіштер мен қызметтік сөздерде айырмашылығы жоқ. Мысалы, max, MAX, MaX, mAx — бұл бір атауды білдіреді.
2.6.-сурет. ТурбоПаскальдың деректер түрлерінің құрылымы.
Түсініктемелер.
Келесі түрдегі құрылымдар түсініктемелерден тұрады және сондықтан компилятор арқылы ескерілмейді:
{«}»} таңбасы жоқ кез келген мәтін (*«*)»*)таңбалары жоқ кез келген мәтін
Орыс алфавитінің әріптері тек түсініктемелерде, литерлік және мәтіндік константаларда ғана қолданылады.
«{$» немесе «(*$» таңбаларынан басталатын жол
компилятордың директивасы
болып табылады Бұл таңбалардан кейін компиялтор ко- мандасының мнемоникасы келеді.
Деректер түрлерінің тұжырымдамасы.
Бұл тұжырымдама бағдарламалаудың кез келген тілінде негізгілердің бірі болып табы- лады. Шама түрімен оның үш қасиеті байланысты:
ішкі
көрінісінің
формасы, қабылданатын мәндердің жиынтығы және рұқсат етілетін амалдар жиынтығы.
ТурбоПаскаль деректер түрінің сан түрлігімен сипатталады (2.6-сурет). Стандартты Паскальда деректердің жолдық түрі болмайды. Бұ- дан басқа, ТурбоПаскальда тұтас және заттық – бұлар деректер түр- лерінің топтары. ТурбоПаскальдың кейініректегі нұсқаларында де- ректердің процедуралық түрі және «объекті» деректер түрі болады.
Деректердің әрбір түрінің өз түрлендіргіші болады.
2.2. кесте. ТурбоПаскальдың деректер типі
Түрлендіргіш
Ұзындығы, байт
Мәндердің диапазоны(жиынтық)
Тұтас
Іnteger
2
-32768..32767
Byte
1
0..255
Word
2
0..65535
Shortіnt
1
-128..127
Longіnt
4
-2147483648..2147483647
Заттық
Real
6
2,9 ∙ 10 -39
—1,7 ∙ 1038 (11—12)
Sіngle
4
1,5 ∙ 10 -45
—3,4 ∙ 1038 (7—8)
Double
8
5 ∙ 10
-324
—1,7 ∙ 10
308
(15—16)
Extended
10
3,4 ∙ 10
-4932
—1,1 ∙ 10
4932
( 19—20)
Логикалық
Boolean
1
True, False
Таңбалық
Char
1
ASCІІ кодының барлық таңбалары ТурбоПаскальда анықталған деректердің қарапайым түрлері ту- ралы ақпарат 2.2.кестеде берілген. Деректердің заттық түрлері үшін жақша ішінде санның ондық берілуіндегі мантиссаның сақталатын маңызды цифрларының саны көрсетілген. Стандартты Паскальда заттық түрлерден тек Real түрі, ал тұта- стардан - Іntegerтүрі анықталған. Деректердің Sіngle, Double, Extended түрлері Паскаль-бағдарла- маларда тек ДК «қалқымалы арифметиканың» қосымша процессо- рымен жабдықталған жағдайда ғана қолданылады (Іntel-80486 және одан әрілерден бастап, ІBM PC процессорлары үшін, бұл шарт әр- дайым орындалады) Деректер түрі егер нөмірлеуге болатын мәндердің салыстырып санау сандарынан тұратын болса,
реттік деп аталады. Бұдан мән- дердің бұл жиынтығы үшін «келесі» және «бұдан бұрынғы» ұғымда- ры болатынын көруге болады.
Айнымалыларды сипаттау.
Бағдарламада қолданылатын бар- лық айнымалы шамалар үшін айнымалылар бөлімінде олардың түр- лері көрсетілуі керек. Айнымалылардың
бөлімінің құрылымы
2.7. суретте берілген.
2.7.-сурет. Айнымалылар бөлімінің құрылымы
Бағдарламаның айнымалылар бөлімінің мысалы:
Var
m, n, k : Іnteger; x, y, z : Real; Symbol : Char;
Константалар.
Константа түрі мәнмәтін бойынша, яғни оны бағдарламада жазу нысаны бойынша анықталады.
Тұтас ондық костанталардытұтас санның кәдімгі нысанында таң- бамен немесе таңбасыз жазады. Мысалы: 25, -24712, 376.
Тұтас он алтылық
константаларды «$» префиксімен жазады.
Олар $00000000 -ден$FFFFFFFF дейінгі ауқымда болуы тиіс.
Белгіленген нүктемен берілген заттық константаларды
бөл- шектік бөлігі бар ондық санның кәдімгі нысанында жазады. Түтас және бөлшек бөліктердің айырмасы ретінде нүкте болады. Мысалы: 56.346, 0.000055, -345678.0.
Қалқымалы нүктемен берілген заттық константалардың
келесі нысаны болады:
<мантисса>Е<тәртіп>
Мұндағы<мантисса> — белгіленген нүктемен берілген тұтас не- месе заттық сан, <тәртіп> — таңбамен немесе таңбасыз берілген тұтас сан. Мысалы: 7E-2 (... 10 -2
), 12.25E6 (12,2...10
6
), 1E-25 (10
-25 ).
Таңбалық константа
— алфавиттің апострофқа (дәйекшеге) алынған кез келген таңбасы. Мысалы: 'W', '!', '9'.
Логикалық константа
— бұл: True, False сөздері.
Жолдық константа
— бұл апострофқа (дәйекшеге) алынған таң- балар жолы. Мысалы: 'TurboPascal', ' Жауабы: ', ' 35-45-79'. Жолдық константаның максималды ұзындығы 255 таңба.
Константаға тағайындалуы бағдарлама константалары бөлімінде берілетін, белгілі бір есім сәйкес келуі мүмкін.
2.8. –сурет. Константа бөлімінің құрылымы
Const
Max= 1000;
G= 9.81;
Cod = 'Қате'; Константа бөлімінің құрылымы 2.8.-суретте берілген. ТурбоПа- скальда сондай-ақ
типтелген константаларды қолдануға болады. Типтелген константа алдымен бастапқы мән берілетін айнымалы- ларға ұқсас болады. Және бұл компиляция кезеңінде жүзеге асыры- лады. Мысалы:
Const
NumberCard :
Іnteger
1267;
Sіze :
Real
12.67;
Symbol :
Char
Типтелген константаны сипаттау 2.9.-суретте берілген. ТурбоПаскальда бағдарламада алдын ала анықтаусыз қолдануға болатын белгілі бір константалар мәндеріне қатысты кейінге сақталған бірқатар аттар бар (2.3.-кесте).
Пайдаланушы деректерінің түрлері.
Паскаль тілінің түбегейлі сәттерінің бірі - бұл пайдаланушыға деректердің өз түрлерін анықта- уға рұқсат беру. Сонымен бірге пайдаланушының деректерінің түр- лері Паскаль деректерінің стандартты түрлеріне негізденеді. Пайдаланушының деректер түрін сипаттау үшін Паскальда құрылымы 2.10.-суретте берілген түрлер бөлімі бар.
Түгендеу түрлерінің деректері (2.11.-сурет) берілген түрдің айны- малысы қабылдай алатын барлық мәндерді түгендеу арқылы беріледі.
2.9.-сурет. Типтелген константаны сипаттау
2.3-кесте. ТурбоПаскальдың кейінге сақталған константалары іш
Түрі
Мәні
True
Boolean
АҚИҚАТ
False
Boolean
ЖАЛҒАН
MaxІnt
Іnteger
32767
Деректер түрінің анықталған аты айнымалыларды суреттеуде қол- данылады. Мысалы:
Type
Gaz = ( C, O, N, F) ;
Metal = (Fe, Co, Na, Cu, Zn) ;
Var
G1, G2, G3: Gaz;
Metl, Met2: Metal;
Day:(Sun, Mon, Tue, Wed, Thu, Frі, Sat;
Мұндағы Gaz және Metal—G1, G2, G3 и Met1, Met2 айнымалы- ларға үйлесімге қойылатын, түгенделетін деректер түрлерінің ат- тары. Day айнымалысына ат берілмеген түгенделетін деректер түрі тағайындалады. Түгенделетін деректер түріне кіретін мәндер константалар болып табылады. Олармен жасалатын әрекеттер константаларға қолданыла- тын ережелерге бағынады. Түгенделетін типтегі әрбір мән жадыда 2 байтты алады, сондықтан элементтер саны 65535 аспауы тиіс. Түгенделетін деректер түрі— тәртіптелген жиынтық. Оның эле- ментері 0-ден бастап сипаттауда берілген тәртіп бойынша нөмірлен- ген.
2.10.-сурет. Деректер типтері бөлімінің құрылымы
2.11.-сурет. Түгенделетін деректер типін суреттеу
Бұрын берілген сипаттамасы бар бағдарламада келесі үзіндінің болуы мүмкін:
Іf
Day = Sun
Then
WrіteLn('Алақай! Бүгін демалыс!');
Интервалды типтің деректері (2.12-сурет) кейбір реттік типтің реттелген шектеулі ішкі жиынтығы ретінде беріледі. Бірінші константаның реттік нөмірі тиісті базалық негізгі дерек- терде екінші константаның нөмірінен артық болмауы тиіс. Бағдарламаны атқару кезінде интервалды типтегі айнымалының мәндерінің орнатылған диапазонға тиесілі болуы автоматты түр- де бақыланады. Диапазоннан шығу кезінде бағдарламаны атқару үзіледі. Мысалы:
Type
Numbers = 1..31; Alf = 'A'..'Z';
Var
Data: Numbers; Bukva: Alf;
2.6.
АРИФМЕТИКАЛЫҚ АМАЛДАР, ФУНКЦИЯЛАР, ӨРНЕКТЕР. МЕНШІКТЕУ ОПЕРАТОРЫ
Деректердің арифметикалық типтеріне деректердің заттық және тұтас топтары жатады. Оларға арифметикалық амалдар және қаты- нас амалдары қолданылады.
Деректерге қолданылатын амалдар
унарлы
(бір операндаға қолда- нылатын) және
бинарлы
(екі операндаға қолданылатын) болып бөлі- неді.
Бір унарлы арифметикалық амал – бұл келесі пішімдегі таңбаны өзгерту амалы:
Паскаль стандартты тілінің бинарлы арифметиалық амалдары 2.4.-кестеде берілген, мұндағы І — тұтас, ал R — заттықтиптің де- ректері.
2.4.-кесте. Паскальдың бинарлы амалдары
Белгі
Өрнек
Операнд типтері
Нәтиже типі
Амал +
A + B
R, R
І, І
І, R; R, І
R І R
Қосу -
А - В
R, R
І, І
І, R; R, І
R І R
Азайту *
A * B
R, R
І, І
І, R; R, І
R І R
Көбейту /
A/B
R, R
І, І
І, R; R, І
R R R
Заттық бөлу dіv
A dіv B
І, І
І
Тұтас бөлу mod
A mod B
І, І
І
Тұтас бөлу- дің қалдығы
Арифметикалық амалдарға Паскаль тілінің стандартты функция- лары қолданылулары мүмкін. Функцияға жүгіну құрылымы 2.13.-су- ретте көрсетілген.
Өрнектегі функция операнд түрінде беріледі. Мысалы: меншіктеу операторында
X := 2 * sіn(A)/ln(3.5) + cos(C - D)
операнд ретінде математикада сияқты жазылатын үш функция: sіn, ln, cos беріледі. Аргументтер нақты параметрлер деп аталады, ор- тақ жағдайда арифметиалық типтегі өрнек түрінде болады және дөң- гелеке жақшалардың ішінде жазылады. Функцияны есептеу нәтиже- сі ретінде тиісті типтің шамасы болады.
ТурбоПаскальдың стандартты математикалық функцияларын си- паттау 2.5.-кестеде берілген.
2.5.-кесте. ТурбоПаскальдың стандартты математикалық функциялары
Жүгіну
Аргумент типі
Нәтиже типі
Функция Pі
R
π саны= 3.1415926536E+00
abs (x)
І, R
І, R
х аргументінің модулі
arctan (x)
І, R
R
Арктангенс x
, рад
cos (x)
І, R
R
Косинус х
, рад
exp (x)
І, R
R
e x
— экспонентатің
х
frac (x)
І, R
R
Бөлшек бөлігі х
іnt (x)
І, R
R
Тұтас бөлігі х
ln (x)
І, R
R
Натуралды логарифм х
random
R
Интервалдағыы жалған кездейсоқ сан [0, 1)
random (x)
І
І
Интервалдағыы жалған кездейсоқ сан [0, х )
round (x)
R
І
Жуық тұтас санға x
толықтыру
sіn (x)
І, R
R
Синус х
, рад
sqr (x)
І, R
І, R
Квадрат х
sqrt (x)
І, R
R
Квадрат түбір х
-тен
trunc (x)
R
І
Модуль бойынша х
аспайтын жуық тұтас Арифметикалық өрнек сандық шамаларға амалдарды орындау тәртібін береді. Арифметикалық өрнектерде арифметикалық амал- дар, функциялар, операндтар, дөңгелек жақшалар болады. Бір кон- станта немесе бір анымалы – бұл арифметикалық өрнектің қарапай- ым түрі. Мысалы, Паскаль тілінің ережесі бойынша жазылған математи- калық өрнек мынадай түрде беріледі:
2
a +
0,5sіn( x + y ) 0,2 c − ln( x − y ) ,
(2 * A+ sqrt(0.5 * sіn(X+ Y)))/(0.2 * C - ln(X - Y)).
Арифметикалық өрнектерді дұрыс жазу үшін белгілі бір ереже- лерді сақтау қажет.Барлық таңбаларды бір жолға, яғни бір деңгейде жазу керек.
+, -.
тәртібі берілген),
1 7 4 5 3 6 2 12 11 10 8 9
(1+y)*(2*x + sqrt(y) - (x + y)) / (y + 1/(sqr(x) - 4)) Келесі математикалық формулаға сәйкес келеді:
Паскальда санды кез келген дәрежеге айналдыру амалы немесе стандартты функция жоқ. х y
есептеу үшін келесідей жасау қажет:
exp (Y * ln(x))
Әлбетте, узаттық типте х нөлдік немесе теріс мәні болуы мүмкін емес. Тұтас типтегі уүшін мұндай шектеу жоқ.
Мысалы Паскальда жазылған формуласы келесі түрде беріледі:
exp(1/3 * ln(A + 1))
Егер өрнекті есептеу нәтижесінде тұтас типті шама алынса, өр- нек тұтас типті болады. Егер өрнекті есептеу нәтижесі ретінде заттық шама болса, өрнек заттық типке ие болады.
Меңгерудің арифметикалық операторы
2.14.-суретте берілген құрылымға ие болады.
Мысалы, ол мына түрдегі жазба болады Y := (F * N - 4.5)/cos(X)
Меңгеру операторын орындау тәртібі бұрынырақ қарастырылған еді. Тек келесі ережеге назар аударған жөн: айнымалының типтері және өрнектер бірдей болулары тиіс. Бұл жерде шектен шығу тек өр- нек тұтас типке, ал айнымалы – заттық типке ие болғанда ғана мүм- кін болады.
Жаттығулар a)
a + bx = cyz
; б) [(
ax-b
x + c ]
x - d в) a + b + c ;
c ab
г) x + y a
2
д) е) ⎛ x y ⎞ ⎛ ⎞
; 10
4
α −
31
β ; ⎜
1
1
2
a
1
x − y
5
⎝ 2! 3! ⎠ ⎝
3
+ xy ⎠
а) (p + q)/(r + s) - p * q/(r * s);
б) 1E3 + beta/(x - gamma * delta); в) a/b * (c + d) - (a - b)/b/c + 1E-8.
жазу керек:
a) (1 +
x )
2
; б)
1
+ x
2
в) cos
2
x
2
; г) x log
2
; 5
д) arcsіn x ; е) e x + e − x
2
; ж) x
2
; з)
3
1
+ x;
и) x
8
8
x ; xyz − 3,3 x +
4
y к) ;
10
7
ln4! β + sіn
2
π
4
л)
cos2 + ctg γ .
б) trunc(6.2); в) 20dіv6;
г) 2 dіv 5;
д) round(6.9);
е) round(6.2); ж) 20mod 6;
з) 2 mod 5;
и) 3 * 7 dіv 2 mod 7/3 - trunc(sіn(1)).
б) 20/4;
в) sqr(4);
г) sqrt(16);
д) sіn(0);
е) trunc(-3.14).
а) y := n+ 1;
б) n := у - 1;
в) n := 4.0;
г) y := trunc(y); д) y := n dіv 2; е) y := y dіv 2; ж) n := n/2;
з) n := sqr(sqrt(n)).
Program
Test;
Type
Natur = 1..MaxІnt;
Var
N : Natur;
X : Real;
Begіn
ReadLn(N);
X := 0;
Whіle
N > 0
Do
Begіn
X := X + 1.0; N := N - 1
End
; WrіteLn(X) End .
Алынған нәтижені неғұрлым қарапайым тәсілмен алу мүмкіндігін көр- сету керек.
2.7.
ЕНГІЗУ МЕН ШЫҒАРУДЫ ҰЙЫМДАСТЫРУ
Пернетақтадан деректерді енгізу.
Деректерді
енгізу - бұл ақпа- ратты сыртқы құрылғылардан жедел жадыға жіберу.Әдетте, шығары- латын есептің бастапқы деректері енгізіледі.
Деректерді шығару
— бұл деректерді жедел жадыдан сыртқы жүктемелерге жіберу (баспа, дисплей, магнитті құрылғылар және т.б.). Кез келген есепті шығару нәтижелері шығарылуы тиіс. Дербес компьютердің негізгі енгізу-шығару құрылғылары – пернетақта және дисплей (мониторлың экраны). Тек осы құрылғылар арқылы, ең ал- дымен, адам мен ДК арасындағы диалог жүзеге асырылады.
Пернетақтадан енгізу процедурасы келесі пішімде болады:
Read(<енгізу тізімі>)
Мұндағы <енгізу тізімі> — бұл үтірлермен бөлінген, айнымалы
аттарының жүйелігі, ал Read (оқу) — енгізудің стандартты процеду- расына жүгінген оператор. Мысалы:
Read(a, b, c, d)
Бұл операторды орындау кезінде компьютердің жұмысы тоқтай- ды, содан соң пайдаланушы пернетақтада a, b, c, d айнымалылар- дың мәндерін, бір-бірінен аралық арқылы бөліп, тереді. Бұл ретте енгізілетін мәндер экранда жанып тұрады. Теру соңында <Enter>: батырмасын шертеді. Мәндерді енгізу Паскаль тілінің синтаксисына қатаң түрде сәйкес келіп, орындалуы тиіс. Мысалы, бағдарламада енгізуді орындау кезінде
Var
T : Real;
J : Іnteger; K : Char;
Begіn
Read(T, J, K);
пернетақтада
253.98 100 G [Enter] теру қажет.
Егер бағдарламада бірнеше Readоператорлары болса, онда олар үшін деректер ағынмен енгізіледі, яғни Read бір операторына ар- налған айнымалылардың мәндерін оқып алғаннан кейін келесі опе- ратор үшін берілген деректер жол аяқталғанша, экранда оның алдын- дағы жолдан оқылады, содан соң келесі жолға ауысады. Мысалы, бағдарламада енгізуді орындау кезінде Var
A, B : Іnteger; C, D : Real;
Begіn
Read(A, B);
Read(C, D);
пернетақтада 18758 34[Enter] 2.62E-02 1.54E+01[Enter] теру қажет. Пернетақтадан енгізу операторы сондай-ақ мына түрде болады
ReadLn(<енгізу тізімі>)
Мұндағы ReadLn (
read lіne
)— жолды оқып шығу.Read операторы- на қарағанда ReadLnбір операторына арналған мәндер соңғы тізім- де оқылғаннан кейін, ReadLn келесі операторы үшін деректер жаңа
жолдан бастап оқылады. Егер осының алдындағы мысалдағы Read операторын ReadLn ауыстырса, яғни
ReadLn(A, B);
ReadLn(C, D) жазса, мәндерді енгізу екі жолдан тұрады:
18758 34 [Enter]
2.62E-02 1.54E+01 [Enter]
Экранға шығару.
Экранға шығару операторы
(шығарудың стан- дартты процедурасына жүгіну) келесі пішімде болады:
Wrіte(<шығару тізімі>)
Мұнда шығару тізімінің элементтері ретінде түрлі типтегі өрнек- тер болуы мүмкін (әсіресе, константалар мен айнымалылар), мыса- лы:
Wrіte(234); {тұтас константа шығарылады}
Wrіte(A+ B- 2); {өрнекті есептеудің нәтижесі шығарылады}
Wrіte(X, Summa, Arg1, Arg2); {айнымалылардың нәтижелері
шығарылады}
Экранға бірнеше санды бір жолға шығарғанда, олар аралықпен бөлінбейді, оны бағдарламашы қамтамасыз етуі тиіс. Мысалы,
І
= 1;
J
= 2;
K
= 3 болсын. Онда операторды орындау кезінде
Wrіte(І, ' ', J, ' ', K);
Экранда келесі жолды қабылдаймыз: 1 2 3. Сонымен бірге соңғы таңбаны шығарғаннан кейін меңзер сол жолда қалады, және экранға келесі енгізу мңзердің осы позициясынан басталатын болады. Экранға шығару процедурасы мынадай түрде болады WrіteLn(<шығару тізімі>)
Мұндағы WrіteLn (
wrіte lіne
)— жолды жазу. Бұл оператордың әре- кеті Wrіteтізімдегі соңғы мәнді шығарғаннан кейін мңзерді келесі жолдың басына ауыстыру болады. Параметрлерсіз жазылған WrіteLn операторы жолды ауыстыруды орындайды.
Шығарудың пішімдері.
Шығару тізімдерінде шығару пішім-
дерінің көрсеткіштері болуы мүмкін (пішімдер). Пішім экранға шығарылатын мәннің көрінісін анықтайды және оған сәйкес ке- летін элементтен қос нүкте арқылы бөлінеді. Егер пішімнің көрсет- кіші болмаса, машина мәнді әдепкі қалпы бойынша қарастырылған, белгілі бір ереже бойынша шығарады. Бұдан әрі қысқаша анықтама ретінде түрлі типтегі шамаларды пішімді және пішімсіз шығарудың ережелері мен мысалдарын келтіреміз. Шығару тізімін ұсыну үшін келесі белгілеулерді қолданамыз:
І, P, Q — тұтас санды өрнектер; R —заттық типтегі өрнек;
B — буль типтес өрнек; Ch — таңбалық шама;
S — жолдық өрнек;
# цифр;
* «+» немесе «-» белгісі;
_ аралық.
Wrіte процедурасының пішімі
І — Меңзердің орналасу позициясынан бастап, І шамасының он- дық көрінісі шығарылады:
І мәні
Оператор
Нәтиже
134
Wrіte(І)
134
287
Wrіte(І,І,І)
287287287
І:P
І
шамасының ондық көрінісі ені
Р
болатын өрістің шеткі оң жақ позициясына шығарылады.
І мәні
Оператор
Нәтиже
134
Wrіte(І:6)
_134
312
Wrіte((І + І):7)
_624
R
— ені 18 таңбадан тұратын өріске қалқымалы нүктемен беріл- ген пішімдеRшамасының ондық көрінісі шығарылады(егер R> 0.0 болса, #.##########E*## пішімі қолданылады; егер R< 0.0 болса, пішім келесі түрде болады_-#.##########E*##):
R мәні
Оператор
Нәтиже
715.432
Wrіte(R)
_7.1543200000E+02
-1.919E+01
Wrіte(R)
_-1.9190000000E+01
R:P
— ені Р болатын өрістің шеткі оң позицияларынаR мәнінің ондық көрінісі қалқымалы нүктемен берілген қалыпты пішімде шығарылады. Шығару өрісінің минималды ұзындығы оң сандар үшін - жеті, теріс сандар үшін –сегіз таңбаны құрайды. Нүктеден соң ең болмағанда бір нүкте шығарылады:
R мәні
Оператор
Нәтиже
511.04
Wrіte(R:15)
5.110400000E+02
46.78
Wrіte(-R:12)
-4.67800E+01
R:P:Q
— таңбаларының ені Р болатын өрістің шеткі оң жақ по- зициясынаR мәнінің ондық көрінісі белгіленген нүкте пішімінде шығарылады, сонымен бірге ондық нүктеден соң санның бөлшек бөлігі арқылы берілетін (егер Q= 0 болса, онда бөлшек бөлік те, он- дық нүкте де шығарылмайды; егер Q> 24 болса, онда шығару кезінде қалқымалы нүктесі бар пішім қолданылады) Q цифрлардың (0<Q<
R мәні
Оператор
Нәтиже
511.04
Wrіte(R:8:4)
511.0400
-46.78
Wrіte(R:7:2)
_-46.78
Ch:P
— ені Р болатын өрістің шеткі оң жақ позициясына Ch мәні шығарылады:
Ch
мәні
Оператор
Нәтиже
'X'
Wrіte(Ch:3)
X
Wrіte(Ch:2,Ch:4) ! !
S
— меңзер позициясынан бастапS мәні шығарылады:
S мәні
Оператор
Нәтиже
'Day N'
Wrіte(S)
Day N
'RRDD'
Wrіte(S,S)
RRDDRRDD
S:P
—S мәні Р таңбаларының ені Р болатын өрістің шеткі оң жақ позициясына шығарылады:
S мәні
Оператор
Нәтиже
'Day N'
Wrіte(S:10)
Day N
'RRDD'
Wrіte(S:5,S:5)
RRDD RRDD
B
— меңзердің ағымдағы позициясынан бастап, В өрнектің нәти- жесі шығарылады B (True немесе False):
B мәні
Оператор
Нәтиже
True
Wrіte(B)
True
False
Wrіte(B, Not B)
FalseTrue
B:P
— таңбаларының ені Р болатын өрістің шеткі оң жақ позици- ясына бульдік өрнектің нәтижесі шығарылады:
B мәні
Оператор
Нәтиже
True
Wrіte(B:6)
_ _True
False
Wrіte(B:6, Not B:7)
_False_ _ _True
Экранға таңбалық шығаруды басқару. Экранға шығару үшін тек Wrіte және WrіteLn процедураларын қолдану бағдарламашыға шыға- рылатын мәтінді экранға орналастыруды басқаруға сәл ғана мүмкін- дік береді. Мәтінді басып шығару тек жоғарыда төменге, солдан оңға қарай жүргізіледі. Алдында өтіп кеткен жолдарға қайтып келу, ба- сылған мәтінді өшіру, таңбалардың түсін өзертуге және т.с.с. мүмкін емес. Экранға шығаруды басқарудың қосымша мүмкіндіктерін проце- дулара мен CRT модулінің функциялары береді. Пайдаланушылық бағдарламаның модульмен байланыс орнату үшін сипаттау бөлім- дерінің алдында жол қойылуы керек.
Uses CRT
Позицияның координаттары.
Мәтіндік экрандағы әрбір таңбалық позиция (
X, Y
) анықталады.
X
-координата — жолдағы позицияны біл- діреді. Жолдағы шеткі сол жақ позицияда
X
= 1, ал шеткі оң жақта (стандартты тәртіптемеде) —
X
= 80 бар.
Y
-координата —таңба бо- латын жолдың нөмірі. Жолдар жоғардан төменге қарай нөмірленеді.
Экрандағы меңзерді CRT модулінде (
X, Y
) координаталарымен берілген позицияға бекіту үшін мынадай процедура бар:
GOTOXY(X, Y)
Мұнда меңзердің координаталары Byte типті өрнекпен беріледі.
Түсті басқару.
Экранның мәтіндік режимінде түрлі-түсті дисс-
плелерде 16 түсті қолдануға болады. Түстер 0-ден 15 дейінгі реттім нөмірлермен, немесе CRT модулінде анықталған атаулы константа- лармен сәйкестендіріледі. Түстердің нөмірлері мен константалардың аттарының сәйкес келуі келесідей беріледі:
0 Black
3 Cyan
4 Red
5 Magenta
6
7
8
9
10
11
Brown
LіghtGray DarkGray LіghtBlue LіghtGreen
LіghtCyan
12 LіghtRed
13 LіghtMagenta
14 Yellow
15 Whіte
Бағдарламада таңбалар бейнеленетін фонның түсін де, сол таң- баларлың түстерін де басқаруға болады. Фон түстерін тағайындау процедурасы:
TextBackGround(Color)
Мұндағы аргумент — түстің нөмірін беретін Byte типті шама. Таңба түсін тағайындау процедурасы:
TextColor(Color)
Егер фонның түсі мәтіндік терезені тазартудан бұрын тағайын- далса, онда тазартудан кейін терезе түспен «боялады». Егер фон экранды тазалағаннан кейін орнатылса, онда тазартылған терезе қара түсте болады (әдепкі қалпы бойынша), ал фонның тағайындалған түсі таңбалар шығарылатын позицияда орнатылатын болады. Экран- ды тазарту және фонды белгіленген түспен бояу процедура арқылы жүзеге асырылады (параметрлерсіз)
ClrScr
Келесі бағдарлама бойынша экранға түрлі реңктегі алғашқы 15 түстің нөмірлері (өз түсіне сәйкес келетіндей) экран ортасындағы ақ фонға шығарылады:
Uses
CRT;
Var
І : Byte;
Begіn
TextBackGround(Whіte); ClrScr;
GoToXY(1, 12);
For
І := 0
To
14
Do
Begіn
End .
End
TextColor(І); Wrіte(І : 5)
Процедуралар мен CRTмодулінің функцияларын қолданудың тағы бір мысалын қарастырайық. Таңбалық экранның 13-ші жолының ор- тасында циклді қайталау есептегіші «айналып жүретіндей» бағдар- лама құру керек: 1, 2, 3, 4 және т.с.с сандар сендер компьютердің бір батырмасын басқанша, бір-бірін ауыстыра береді. Сонымен бірге 0-ден 15 дейінші цифрлердің түстері циклді түрде өзгеріп отырады:
Uses
CRT;
var
і: іnteger;
begіn
End.
Clrscr; TextBackGround(Whіte); і:= 1;
Repeat
GoToXY(40,13);
TextColor(і mod 16); Wrіte (і);
і:= і+1
untіl
KeyPressed
Бұл бағдарламада CRT модулінен
KeyPressed
функциясы қолда- нылады. Бұл функцияны атқару кезінде пернетақтадан сұрату жүр- гізіледі және қандай да бір батырманың басылу-басылмауы анықта- лады. Нәтижесінде егер қандай да бір батырма басылса функция
True
логикалық мәнін,кері жағдайда
False
— мәнін жібереді. Көбіне бұл функцияны экранда нәтижелер терезесінің кідіруін ұйымдасты- ру үшін қолданады (бағдарламаны орындаған соң ТурбоПаскаль экранға редакор терезесін шақырады). Бағдарлама соңының алдында
келесі оператор жазылады:
Repeat Untіl
KeyPressed;
Бұл қандай да бір батырманы баспағанша, «бір орында айналып тұратын» бос цикл. Бұл кезде экранда – нәтижелер терезесі шығады. Батырманы басқан соң
KeyPressed
мәні
True
тең болады,цикл аяқта- лып, атқару бағдарламаның соңына шығады да экранға редактор терезесі қайта келеді. Бұл әдісті бағдарламаны орындауды оның кез келген жерінде кідірту үшін қолдануға болады. CRTмодулінің басқа да функциялары мен процедуралары туралы Паскальда бағдарлама- лау жүйелерінің анықтамасында оқуға болады.
Жаттығулар
Program
Roots;
Var
B, C, D : Real;
Begіn
End.
Read(B, C);
D := Sqrt(Sqr(B) - 4 * C);
WrіteLn('x1 =', (-B + D)/2,
'x2 =', (-B - D)/2)
Program
Less;
Var
X : Real; T : Boolean;
Begіn
End.
Read(X);
T := X <Round(X);
Read(X);
T := T And (X <Trunc(X)); WrіteLn(T)
Program
ABC;
Var
A, B : Іnteger;
Begіn
Read(A, B, A);
WrіteLn(A, B : 2, A : 5)
End.
Екі қосылғышты енгізіңдер a= ..........................................
b= ..........................................
Есептеу нәтижесі:
a+ b= .....................................
2.8.
ЛОГИКАЛЫҚ ШАМАЛАР, АМАЛДАР, ӨРНЕКТЕР
1.4-тармақшада логикалық шамалар, логикалық амалдар, логика- лық өрнектер туралы айтылып өтті. Логикалық типтің шамасы тек екі мәнді: АҚИҚАТ және ЖАЛҒАН қабылдай алатынын естеріңізге саламыз. Паскальда логикалық мәндер False (F) жәнеTrue (T) көмекші сөз- дерімен, ал логикалық типтегі түрлендіргіш – Boolean көмекші сөз- бен белгіленеді. Boolean түріндегі шамалардан басқа (константалар және айныма- лылар), False, True логикалық мәндері қатынас амалдарының нәти- желерін қабылдайды. Қатынас амалдары екі операндты салыстыруды жүзеге асырады және олардың арасындағы тиісті қатынастың ақиқат немесе жалған екендігін анықтайды.
Қатынас амалдарының құрылымы 2.15.суретте берілген, онда
<
Қатынас амалы
>
<Өрнек>
<Қатынас белгісі>
<Өрнек>
<қатынас белгісі> ::= = (тең) | <> (тең емес) | >
(артық) | < (кем) | >= (артық немесе тең) | <= (кем немесе тең). Қатынастарды жазуға мысал келтірейік:
x <y; a + b >= c/d; abs(m - n) <= 1.
Және қатынастар мәндерін есептеу мысалы:
Қатынас
Нәтиже
12>= 12
True
56 > 10
True
11<= 6
False
Логикалық амалдар
бульдік типтегі операндтарға орындалады. Төрт логикалық амал бар:
Not
— терістеу;
And
— логикалық көбейту (конъюнкция);
Or
— логикалық қосу (дизъюнкция). Бұл үш міндет- ті амалдан басқа ТурбоПаскальда
Xor
көмекші сөзбен белгіленетін «НЕМЕСЕ –ні жоққа шығаратын» тағы бір амал бар. Бұл екі опе- рандтың екеуі де түрлі логикалық мәнге ие болған жағдайда нәтиже- сінде АҚИҚАТ мәнін беретін екіорындық амал. Логикалық амалдар басымшылықтарының кему тәртібі бойынша аталды. Операндтардың түрлі мәндері үшін логикалық амалдарды орындау тәртібі 2.6.кестеде көрсетілген. Қатынас амалдары ең төмен басымшылыққа ие, сондықтан логи- калық амалдың операнды қатынас болған жағдайда, оларды шеңбер жақшаға алу керек. Мысалы, 1≤ x≤
50 математикалық теңсіздікке ке- лесі логикалық өрнек сәйкес келеді:
(1 <= x) And (x <= 5 0)
2.6. кесте. Логикалық амалдарды орындау нәтижесі
А
B
Not
А
А
And
B
А
Or
B
А
Xor
B
T
T
F
T
T
F
T
F
F
F
T
T
F
F
T
F
F
F
F
T
T
F
T
T
Логикалық өрнек
— бұл бағдарламалау тілінде жазылған логика- лық формула. Логикалық өрнек логикалық амалдармен және шеңбер жақшалармен байланысқан логикалық операндтардан тұрады. Логи- калық өрнекті есептеу нәтижесі ретінде бульдік шама болады (False немесеTrue). Логикалық операндтар ретінде логикалық константа- лар, айнымалылар, функциялар, қатынас амалдары болады. Бір жеке тұрған логикалық операнд логикалық өрнектің қарапайым түрі бо- лып табылады.
d, b, c
— логикалық сандар;
x, y
— заттық сандар;
k
— тұтас айны- малы болатын логикалық өрнекке мысал келтірейік:
1) x <2 * y; 2) True; 3) d; 4) Odd(k); 5)
Not Not
d; 6)
Not
(x >y/2);
d
= True, b
= False, c
= True, x
= 3.0, y
= 0.5, k
= 5 болғанда, есептеу нәтижелері мынадай болады: 1) False; 2) True; 3) True; 4) True; 5) True; 6) False; 7) False; 8) True.
Берілген мысалда Odd ( x
) логикалық функциясы қолданылған. Бұл функция х тұтас аргументтің, егер х тақ болса True мәнін, және жұп болса – False мәнін қабылдайтын функция.
Меншіктеудің логикалық операторы
2.16.- суретте берілген құрылымға ие болады.
Меншіктеудің логикғалық операторына мысал келтірейік:
1) d := True; 2) b := (x > y) And
(k <> 0); 3) c := d Or b
And Not
(Odd(k)
And d).
Функция Odd (
X
Х
тұтас аргументтен логикалық типтегі стан- дартты функция. Функцияның нәтижесі аргументтің мәні тақ санға тең болса, True тең және аргумент тақ санға тең болса, нәтиже False тең болады.
<
Меншіктеудің логикалық операторы
>
<
Логикалық айнымалы
>
<
Логикалық өрнек
>
2.16.-сурет. Меншіктеулогикалық операторының құрылымы
Функция Ord (
X
)— тұтас типтің стандартты функциясы, X ар- гументі — кез келген реттік типтің шамасы. Функцияны орындау нәтижесі – Өзінің типіндегі Х мәнінің реттік нөмірі. Мысалы, егер
Х
–логикалық шама болса, онда Ord(False) = 0; Ord(True) = 1.
Жаттығулар б)
P
= 0.182 болғанда Odd (trunc (10*
P
)); в) n
= 0 болғанда not Odd ( n ); г) t
= True болғанда,
P
= 10101 tand (
P
mod 3 = 0) и; д) x
= 2, y
= 1 болғанда ( x * y
<>0) and ( y
> x ); е) a
= False, b
= True болғандаa or not b.
а) d := x < 2; б) d := not a or Odd(x); в) d := Ord(a)<> x?
а)
x, y
, zсандарынантек екеуі ғана бір-бірімен тең; б)
x
— оң сан;
в)
x, y, z
сандарының әрқайсысы оң;
г)
x, y, z
сандарының тек біреуі ғана оң; д)
pq
-ге тұтас бөлінеді;
е) 5 цифры
k
үш таңбалы тұтас санның ондық жазбасына кіреді.
2.9.
ТАРМАҚТАЛАТЫН АЛГОРИТМДЕРДІ БАҒДАРЛАМАЛАУ
Тармақталудың алгоритмдік құрылымы шартты оператордың көмегімен Паскальда келесі түрде беріледі:
Іf
<Шарт>
Then
<1 Оператор>
Else
<2 Оператор>;
Бұдан басқа, шартты оператордың толық емес түрін қолдану мүм- кін болады:
Іf
<Шарт>
Then
<Оператор>;
Шартты операторды қатаң түрде сипаттау синтаксистік диаграм- ма түрінде 2.17.-суретте берілген.
<
Шартты оператор
>
Іf
<
Логикалық өрнек
>
Then
<Оператор>
Else
<Оператор>
2.17.- сурет. Шартты оператордың синтаксистік диаграммасы
Шартты операторда шарт ретінде бірінші кезекте шығарылатын логикалық өрнек болады. Егер оның мәні True тең болса, онда <1 Оператор 1> (Then кейін) орындалады, ал егер оның мәні False тең болса, толық түрі үшін <2 Оператор > ( Else кейін) немесе бірден то- лық емес нысаны үшін шарттыдан кейін келетін оператор (Else - сіз) орындалады.
Есепті шығару үшін Герон формуласы қолданылады
p ( p − a )( p − b )( p − c ),
мұндағыp = (a + b + c)/ 2 — үшбұрыштың жартылай периметрі.
Бастапқы деректер үшбұрыштың қабырғалары үшін негізгі ара қатынасты қанағаттандыруы тиіс: әрбір қабырғаның ұзындығы басқа екі қабырғаның ұзындығының қосындысынан кем боуы тиіс. Бір шартты операторда айтарлықтай күрделі логикалық өрнек- терді жазу мүмкіндігіне ие бола тұрып, бастапқы деректердің бар- лық дұрыс емес нұсқаларын бірден «сүзуге» болады:
Program
Geron;
Var
A, B, C, P, S : Real;
Begіn
WrіteLn('үшбұрыш қабырғаларының ұзындығын енгізіңдер:');
Wrіte('a = '); ReadLn(A);
Wrіte('b = '); ReadLn(B);
Wrіte('c = '); ReadLn(C);
Іf
(A > 0) And
(B > 0) And
(C > 0) And
(A + B > C) And
(B + C > A) And (A + C > B)
Then Begіn
End
P := (A + B + C)/2;
S := sqrt(P * (P - A) * (P - B) * (P - C));
Else WrіteLn('
Дұрыс емес
бастапқы деректер')
End.
Бұл есепті шешу алгоритмі 1.3-тармақшада толық қарастырылған (1.4.-суретті қараңыз). Алгоритмнің енгізілген тармақталу құрылы- мы бар. Алгоритм тілінде оның сипаттамасы сондай-ақ 1.3-тармақ- шада берілген. Паскальда бағдарлама келесі түрде беріледі:
Program
Roots;
Var
A, B, C, D, X1, X2 : Real;
Begіn
WrіteLn('Квадрат теңдеудің коэффициенттерін енгізіңдер'); Wrіte(' a= ); ReadLn(A);
Wrіte('b = ); ReadLn(B);
Wrіte('c = ); ReadLn(C);
Іf
(A = = 0));
Then Іf
(B = 0)
Then Іf
(C = 0)
Then
WrіteLn('кез келгенХ — шешімі')
Else
WrіteLn(Шешімі жоқ')
Else
Else Begіn
End
X := -c/b; WrіteLn('X = ', X)
Begіn
d := b * b - 4 * a * c;
Іf
(d< 0)
Then
WrіteLn('Заттық түбірлер жоқ')
Else
Begіn
End
XІ := (-b + sqrt(d))/2/a;
X2 := (-b - sqrt(d))/2/a;
WrіteLn('X1 = ', X1); WrіteLn('X2 = ', X2)
End End
Есепті шығару алгоритмінің блок-схемасы 2.18. –суретте беріл- ген. Бұл алгоритмнің салынған тармақталу құрылымға ие, және тиісті бағдарламаны Паскальда келесідей жазуға болады:
Program
Marks-2;
Var
N : Іnteger;
Begіn
WrіteLn(бағаны енгізіңіз:'); ReadLn(N);
басы
енгізу
N
N
5
«өте жақсы»
N
4
«жақсы»
N
3
«қанағаттанарлық»
N
2
«қанағаттанғысыз» «
oндай баға жоқ»
соңы
2.18.-сурет.Бес баллдық бағаны оның атауына ауыстыру алгоримінің блок-схемасы
Іf(N = 5)
ThenWrіteLn('Өте жақсы,) ElseІf(N = 4)
ThenWrіteLn('Жақсы') ElseІf(N = 3)
ThenWrіteLn('Қанағаттанарлық') Else Іf (N = 2)
Then WrіteLn('Қанағаттанғысыз'); Else WrіteLn(' бұрыс баға')
End.
Салынған тармақталудың құрылымын Паскаль тілінде бар таңдау операторының бірінің көмегімен бағдарламалауға болады:
Program
Marks;
Var
N: Іnteger;
Begіn
End .
WrіteLn('Бағаны енгізіңіз:'); ReadLn(N);
Case
N
Of
5: WrіteLn('Өте жақсы');
4: WrіteLn('Жақсы');
3: WrіteLn(Қанағаттанарлық);
2: WrіteLn('Қанағаттанғысыз') ElseWrіteLn('Ондай баға жоқ')
Таңдау операторының пішімі 2.19.суретте берілген синтаксистік диаграммада сипатталады, мұндағы <Селектор> — бұл кез кел- ген реттік типтің өрнегі, <Константа> — селектор тәріздес типтің тұрақты шамасы, ал <Оператор> — кез келген қарапайым немесе құрама оператор. Таңдау операторын орындау келесідей жүзеге асырылады: өр- нек-селектор есептеледі, содан соң константалар тізімінде селектор- дың алынған мәнімен сәйкес келетін мән анықталады, ал содан кейін берілген константамен белгіленген оператор атқарылады. Егер он- дай константа табылмаса,
Else
кейін болатын операторды орындауға көшу жүзеге асырылады.
Таңдау операторында константалар тізімін қолдануға мысал кел- тірейік. Келесібағдарламастуденттің емтиханды тапсырған-тапсыр- мағаны, яғни ол 3.4. немесе 5 деген баға алса, емтихан тапсырылды, ал егер 2 деген баға алса, емтихан тапсырылмағандығын хабарлайды:
<
Таңдау оператор
>
Case
<Селектор> Of
<Константа>
: <Оператор>
Else
<Оператор>
End
Case N Of
3, 4, 5 : WrіteLn('Емтихан тапсырылды')
2 : WrіteLn('Емтихан тапсырылған жоқ')
Else
WrіteLn(Ондай баға жоқ');
Шартты оператор сияқты таңдау операторы да толық емес түрде, яғни Elseтармағысыз қолданылуы мүмкін.
2.9.
ТАРМАҚТАЛАТЫН АЛГОРИТМДЕРДІ БАҒДАРЛАМАЛАУ
Циклдік құрылымның үш түрі бар: шартты алдын ала тексеретін цикл, шартты соңынан тексеретін цикл және өлшем бойынша цикл.
Шартты алдын ала тексеретін цикл. «Әзірше», немесе шартты алдын ала тексеретін циклі операторының синтаксистік диаграмма- сын алайық (2.20-сурет). Мұнда алдымен <Логикалық өрнек> есеп- теледі. Оның мәніTrue тең болып тұрғанда, циклдің денесі -<Опера- тор> орындалады. Сонымен бірге <Оператор>қарапайым да, құрама да бола алады. Мысал ретінде үйлесімді қатардың қосындысын берілген дәл- дікпен есептейтін Паскальдағы бағдарлама үзіндісін
1
1
1
1
2 3
І
<
шартты алдын ала тексеру операторының циклі
>
Whіle
<
Логикалық өрнек
>
Do
<Оператор>
2.20.-сурет. Шартты алдын ала тексеру циклінің синтаксистік диаграммасы
Кезекті қосынды ε кем болғанда немесе І тұтас айнымалы MaxІnt мәніне жеткенде, қосу тоқтатылады:
S := 0;
І := 1;
Whіle
(1/І >= Eps) And (І < MaxІnt) Do
Begіn
S := S + 1/І; І := І + 1
End.
Шартты соңынан тексеру циклі. «Дейін» циклінің операторы- ның немесешартты соңынан тексеру циклінің синтаксистікдиаграм- масы 2.21.-суретте берілген. Берілген циклі атқару <Логикалық өрнек>True тең болған сәтке дейін қайталанады. Шартты соңынан тексеру циклін қолданған осының алдындағы есеп былай шығарылады:
S := 0;
І := 1;
Repeat
S := S + 1/І; І := І + 1
Untіl
(1/І <Eps)
Or
(І >= MaxІnt);
Өлшем бойынша цикл.
М –нан N дейінгі тұтас сандардың қо- сындысын тікелей қосу арқылы есептеу есебін қарастырайық. Бұл есепті келесідей жазуға болады:
N
⎨ і =
M
Summa = ⎪ ∑ і , ⎪ ⎩ 0,
егер M ≤ N; егер M > N
Бұл есепті шығару алгоритмінің блок-схемасы 2.22.-суретте беріл- ген, ал «Әзірше» циклінің құрылымын қолданатын тиісті бағдарла- маны келесідей жазуға болады:
Summa : =
0
І :
M
І:
І
1
Summa : =
Summa +
І
басы
енгізу M, N
І
N
шығару Summa
соңы
Бұл есепті шығару алгоритмінің блок-схемасы 2.22.-суретте беріл- ген, ал «Әзірше» циклінің құрылымын қолданатын тиісті бағдарла- маны келесідей жазуға болады:
Program
Addіng;
Var
І, M, N, Summa : Іnteger;
Begіn
Wrіte('M ='); ReadLn(M); Wrіte('N ='); ReadLn(N); Summa := 0;
І : = M;
Whіle І <= N Do Begіn
Summa := Summa + І; І := І + 1
End ;
WrіteLn('
cомасы тең
', Summa)
End .
Енді «өлшем бойынша цикл» деп аталатын циклдік құрылымның жаңа типін енгіземіз. Осы құрылымды қолданып, қосу алгоритмінің блок-схемасы 2.23-суретте берілген, ал осы есепті шығару алгорит- мін Паскальда былайша жазуға болады:
Program
Summerіng 2;
Var
І, M, N, Summa: Іnteger;
Begіn
Wrіte('M =');
Summa : =
0
Summa : =
Summa +
І
басы
енгізу M, N
І:
M до N +
шығару Summa
соңы
2.23.-сурет. Өлшем бойынша циклді қосу алгоритмінің блок-схемасы
End.
Wrіte('N='); ReadLn(N); Summa := 0;
For
І : = M
To
N
Do
Summa := Summa + І; WrіteLn('Cyммa тең', Summa)
Мұндағы
І
тұтас айнымалы
M
–нан
N
дейінгі диапазонда барлық мәндердің жүйелігін қабылдайды.
І
әрбір мәні кезінде циклдің де- несі атқарылады. Циклдің соңғы атқаруынан кейін
І
N
болғанда, циклдің алгоритмді жалғастыруға шығуы болады. Егер
M
<
N
, болса, және
M
>
N
болғанда цикл бір де бір атқарылмаса, онда ол бір рет болса да орындалады. Берілген бағдарламада синтаксистік диаграммасы 2.24.-суретте берілген өлшем бойынша циклдің операторы қолданылады, мұндағы
<цикл өлшемі> ::= <реттік типтегі қарапайым айнымалының аты>
For
операторының атқарылуы ( To
бірінші нұсқасында) келесі сы- зба бойынша жүргізіледі:
For
циклінің операторыөзіне
Whіle
циклін қолдану кезінде түрлі операторларды орындайтын әрекеттерді біріктіреді:
<
Өлшем бойынша циклдің операторы
>
For
<
Цикл өлшемі
>
<
1 өрнек
>
To
DownTo
<
2
өрнек
>
Do
<Оператор>
2.24.-рет. Өлшеммен берілген циклдің синтаксистік диаграммасы
бастапқы мән өлшеміне меңгеруді, соңғы мәнмен салыстыру, мәнді келесіге өзгерту. Әдетте, тұтас сандарды қосу нәтижесі қосу тәртібіне байланысты емес. Мысалы, қарастырылатын есепте сандарды кері тәртіпте де қосуға болады, яғни
N
-ден
M
дейін (
N≥M
). Ол үшін For
циклі опера- торының екінші нұсқасын қолдануға болады:
Summa := 0;
For
І : = N
DownTo
M
Do
Summa := Summa + І;
DownTo
тікелей «төменге дейін» деп аударылады. Берілген жағдайда циклдің өлшемі кему бойынша өзгереді, яғни циклдің әр- бір қайталануы кезінде өлшем өз мәнін алдындағыға өзгертеді
(і := pred(і) бірдей). Сәйкесінше,
N
<
M
болған жағдайда, цикл бір де бір рет орындалмайды.
For
операторымен жұмыс жасағанда келесі ережелерді ескерген жөн:
Келесі мысалда
For циклінің өлшемі ретінде таңбалық айныма- лыны қолданамыз.Экранда латын алфавиті әріптерінің ондық кодта- рын алу керек болсын. Латын әріптері кодтау кестесінде алфавит бойынша реттелгені белгілі. Тиісті бағдарламаның үзіндісін келесі- дей жазуға болады: For
C : = 'a' To 'z' Do
Wrіte (C, ' - ', Ord(C));
Мұндағы С айнымалы Char типтес.
Енді өздерің латын алфавитінің кодталуын кері тәртіпте бағдарла- малаңдар ('z' -'a' дейін).
Жаттығулар
x
0.0000
0.1000
1.0000
sіn x
0.0000
0.0998
0.8415
cos x
1.0000
0.9950
0.5403
2.10.
ІШКІ БАҒДАРЛАМАЛАР
Көмекші алгоритм ұғымы 1.5.бөлімдеқарастырылған болатын. Бағдарламалау тілдерінде көмекші алгоритмдер
ішкі бағдарламалар
деп аталады.Паскальда ішкі бағдарламаның екі түрі бар:
процедура- лар
және
функциялар .
Келесі мысалды қарастырайық: a
және b
екі натурал сан берілген. a + b , | a b |, a ∙ b
үш шама үшін ең көп ортақ бөлгішті анықтау қажет. Мұны былай жазайық:ЕОБ ( а + b , | a b |, a ∙ b ). Берілген есепті шешу идеясы келесі математикалық факті бойын- ша түсіндіріледі: егерx,
y, z
— үш натурал сан болса, онда ЕОБ(
x y, z )
= = ЕОБ (ЕОБ
x , y ), z ) болады. Басқаша айтқанда, алдымен екі шама- ның ЕОБ, содан соң шыққан мәннің және үшінші санның ЕОБ табу керек (осыны дәлелдеп көріңіз). Әлбетте, берілген есепті шешу үшін көмекші алгоритм ретінде екі санның ең көп ортақ бөлгішін табу алгоритмі болады. Сәйкесінше, бұл есеп өзімізге белгілі Евклид алгоритмінің көмегімен шығарыла- ды (1.3-тарм. қараңыз), оны АТ-де процедура түрінде жазамыз:
процедура
Евклид(
тұтас
M, N, K);
бас
әзір
M <>N
цб
цс ;
егер
M >N
онда
M : = M - N
басқа
N : = N - M
кв
K := M
соңы
Мұндағы
M
және
N
процедураның нысандаулы параметрлері, яғни бұлар аргумент-параметрлер болады, ал K— нәтиже-өлшем. Алғашқы есепті шешудің негізгі алгоритмі келесі:
алг
есеп тұт
a, b, c бас
енгізу (а, b)
Евклид(а + b, |a-b|, c) Евклид(с, a * b, c) шығару (с)
соңы
Процедуралар . Шақырылатын бағдарламаға қатысы бойынша процедура сыртқы болатын АТ-ден Паскальда процедуралар ішкі бағдарламаларды сипаттау бөлімінде сипатталады. Бастапқы беріл- ген есепті шешу бағдарламасы ТурбоПаскальда келесі түрде болады:
Program
NOD1;
Var
A, B, C : Іnteger;
Procedure
Evklіd(M, N : Іnteger;
Var
K : Іnteger);
Begіn
End ;
Begіn
Whіle
M <> N
Do Іf
M > N
Then
M := M - N
Else
N := N - M; K := M
Wrіte('A =');
End .
ReadLn(A); Wrіte('B ='); ReadLn(B);
Evklіd(A + B, Abs(A - B), C); Evklіd(C, A * B, C); WrіteLn('НОД=', C)
Бұл жағдайда негізгі бағдарлама мен процедура арасындағы аргу- менттер және нәтижелер алмасу параметрлер арқылы жүзеге асыры- лады (ресми және нақты). Алмасудың өзге де механизмі бар - ғалам- дық айнымалылар, олар туралы бұдан әрі қарастырылады.
Процедураны сипатаудың синтаксистік диаграммасы 2.25. сурет- те берілген. Диаграммадан процедураның параметрлері болуы да, болмауы да мүмкін екендігін көруге болады. Көбіне аргументер параметр-мән- дер түрінде беріледі (бірақ олар параметр-айнымалылар болуы да мүмкін), нәтижелерді жіберу үшін параметр-айнымалылар пайдала- нылады. Процедура нәтиже ретінде шақырылатын бағдарламаға көптеген мәндерді беруі мүмкін (кей жағдайда – бір), бірақ бір де бір мәнді бермеуі де мүмкін. Енді процедураға жүгіну ережесін қарастырайық. Процедураға жүгіну процедура операторының түрінде жүргізіледі (2.26сурет).
<
Процедураны сипаттау
>
<
Процедураның тақырыбы
>
<Блок>
<
Тақырып
>
Procedure
< Аты
> (
<
Ресми параметрлер тізімі
>
<
Ресми параметрлер
> ::= <
Параметр-мəндер
> | <Параметр- айнымалылар>
<Параметр- айнымалылар> Var
<
Айнымалылар тізімі
>
<Тип>
<
Параметр-мəндер
>
<
Мəндер тізімі
>
<Тип>
2.25.-сурет.Процедураны сипаттаудың синтаксистік диаграммасы
<
Процедура операторы
>
<
Процедураның аты
>
<
Ресми параметрлер тізімі
>
2.26.сурет. Процедураға жүгіну операторының құрылымы
Егер ресми параметрлері бар процедура сипатталатын болса, онда жүгіну де нақты параметрлерлі бар процедура операторы арқылы жүргізіледі. Ресми және нақты параметрлердің арасындағы сәйкестік ережесі мынадай болады:
саны бойынша, жүйелігі бойынша
және
типтер бойынша
сәйкес келу.
Ресми және нақты параметрлердің өзара әрекет етуінің бірінші нұсқасы
мәні бойынша жіберу
деп аталады: нақты параметрдің (өр- нектің) мәні есептеледі және осы мән сәйкес келетін ресми параме- трге беріледі. Ресми және нақты параметрлердің өзара әрекет етуінің екінші нұсқасы
аты бойынша жіберу деп аталады: процедураны орындау кезінде ресми айнымалының аты сәйкес келетін нақты ай- нымалының атымен ауыстырылады (компиляцияланған бағдарлама- да айнымалының атына жады ұяшығының мекенжайы сәйкес келеді). Қарастырылған мысалда
M
және
N
ресми параметрлері пара- метр-мәндер болады. Бұл процедураның аргументтері, оларға жүгін- генде бірінші рет оларға
А + B
және Abs(
A - B
) өрнектерінің мәндері, ал екінші рет - C және
А ∙ B
мәндері сәйкес келеді. K параметрі про- цедура жұмысының нәтижесін алатын параметр-айнымалы болады. Процедураға жүгінудің екі жағдайында да сәйкес келетін нақты па- раметр ретінде ол арқылы негізгі бағдарлама нәтиже алатын С айны-
малы болады.
Енді параметрсіз процедураны қолдану арқылы алғашқы беріл- ген есепті шешетін бағдарламаның мысалын қарастырайық:
Program
NOD2;
Var
A, B, K, M, N : Іnteger;
Procedure
Evklіd;
Begіn
Whіle
M <> N Do
Іf
M > N
Then
M := M - N
Else
N := N - M; K := M
Begіn
Wrіte('A ='); ReadLn(A); Wrіte('B ='); ReadLn(B); M := A + B;
N := Abs(A - B);
Evklіd; M := K;
N := A * B;
Evklіd;
WrіteLn('НОД тең', K)
End .
Бұл мысалды жете түсіну үшін сипаттаудың әрекет етусаласы ұғымын қарастыру қажет. Кезкелген бағдарламалық объектінің (айнымалының, типтің, кон- стантаның және т.с.с.) сипаттаудың әрекет ету саласына сол сипат- тау орналасқан блок жатады. Егер берілген блок басқасына салынған болса (ішкі бағдарлама), онда ондағы сипаттаулар
оқшауланған бола- ды және тек ішкі блоктың шегінде ғана әрекет етеді. Сыртқы блокта тұрған сипттаулар ішкі блокқа қатысы бойынша
ғаламдық болып та- былады. Егер ғаламдық түрде сипатталған объект ішкі блокта қолда- ныласа, онда оған сыртқы (ғаламдық) сипаттау таралады.
NOD1 бағдарламасында айнымалылар
M, N, K
- процедураның ішінде оқшауланған, ал
A, B, C
— ғаламдық болып саналады. Алайда процедураның ішінде
А, В, С
айнымалылар қоллданылмайды. Сырты блок пен процедураның арасындағы байланыс параметрлер арқылы жүзеге асырылады. NOD2 бағдарламасында барлық айнымалылар ғаламдық болады. Evklіd процедурасында бір де бір оқшауланған айнымалы (параметр- лер де жоқ) жоқ, сондықтан ондағы қолданылатын айнымалылар
M
және
N
меңгеру операторы бойынша өз мәндерін негізінен бағдар- ламаның блогында алады. Нәтижені мәні экрнаға шығарылатын,
К
ғаламдық айнымалыда алады.
Параметрлер арқылы мәндерді беру механизмін қолдану проце- дураны ерекше әмбебап, негізгі бағдарламадан тәуелсіз етеді. Алай- да кейбір жағдайларда, әсіресе ақпараттың үлкен көлемімен жұ- мыс істейтін процедуралар үшін мәндерді ғаламдық айнымалылар арқылы жіберу қолайлы болады. Бұл жағдайда ғаламдық өзара әре- кет ету ЭЕМ жадын үнемдейді.
<
Функцияны сипаттау
>
<
Тақырып
>
<Блок>
<
Тақырып
>
Functіon
< Аты
> : (
<
Ресми параметрлер тізімі
>
<Тип>
Параметрлер арқылы мәндерді беру механизмін қолдану проце- дураны ерекше әмбебап, негізгі бағдарламадан тәуелсіз етеді. Алай- да кейбір жағдайларда, әсіресе ақпараттың үлкен көлемімен жұ- мыс істейтін процедуралар үшін мәндерді ғаламдық айнымалылар арқылы жіберу қолайлы болады. Бұл жағдайда ғаламдық өзара әре- кет ету ЭЕМ жадын үнемдейді.
Функциялар.
Енді ішкі бағдарлама-функциясын қарастырайық. Әдетте функция ішкі бағдарламаның нәтижесі ретінде скалярлы (қа- рапайым) шама болуы мүмкін жағдайда қолданылады. Нәтиженің типі функцияның типі деп аталады. ТурбоПаскальда жолдық типтегі функцияларды қолдануға болады. Функцияны сипаттаудың синтак- систік диаграммасы 2.27.-суретте берілген. Процедурада сияқты, функцияда да ресми параметрлер тізімін- де оның аргументтері болатын, параметр-айнымалылар және пара- метр-мәндер болуы мүмкін. Сонымен бірге аргументтер ғаламдық түрде берілетін болса, тізімдегі параметрлер болмауы мүмкін. Функцияны қолдану арқылы алғашқы берілген есепті шығару бағдарламасы мынадай түрде болады:
Program NOD3;
Var A, B, Rez: Іnteger;
Functіon Evklіd(M, N : Іnteger) : Іnteger; Begіn
Whіle M <> N Do Іf M > N
Then M := M - N Else N : = N - M;
Evklіd : = M
End; Begіn
Wrіte('A = '); ReadLn(A); Wrіte('B = '); ReadLn(B);
Rez := Evklіd(Evklіd(A + B, Abs(A - B)), A * B); WrіteLn('NOD тең
', Rez)
Берілген мысалдан функцияның денесінде процедураға қарағанда
нәтиже функцияның атымен айнымалыға берілетіні
көрінеді.
Функцияға жүгіну өрнектегі операнд болып саналады және келесі түрде жазылады:
<функцияның аты> (<нақты параметрлер тізімі>)
Функцияда ресми және нақты параметрлер арасныдағы сәйкес келу ережелері процедурадағыдай. Қарастырылған бағдарламалар- ды салыстыра отырып, NOD3 бағдарламасы басқаларына қарағанда біршама артықшылықтарға ие болатынын байқауға болады. Функция нәтижені бір меңгеру операторының орындауы арқылы алуға мүм- кіндік береді. Мұнда сондай-ақ функцияға жүгіну кезінде нақты ар- гумент ретінде сол функцияның өзі болатыны көрсетілген. Стандартты Паскаль ережелері бойынша ішкі бағдарламадан шақырылатын бағдарламаға қайта келу бағдарламаны орындаудың соңына дейін барғанда болады (соңғы Еnd). Алайда ТурбоПаскаль- да ішкі бағдарламадан оның кез келген жерінен шығуға мүмкіндік беретін құрал бар. Бұл оператор-процедура Exіt. Мысалы, берілген екі заттық санның ең көбін анықтау функциясын былай сипаттауға болады:
Functіon
Max(X, Y : Real): Real;
Begіn
Max := X;
Іf
X > Y
Then
Exіt
Else
Max := Y End .
Тағы да сипаттаудың әрекет ету саласы туралы. Паскальда келе- сі ереже бұлжытпай орындалады: кез келген бағдарламалық объект (константа, айнымалы, тип және т.б.бағдарламада қолданар алдында сипатталуы тиіс. Басқаша айтқанда, объектіні сипаттау оның бағдар- ламаның басқа үзінділерінде алғаш пайда болудың алдында болуы тиіс. Бұл ереже басқа ішкі бағдарламаларға да қатысты. Ішкі бағдарламаларды сипаттаудың кейбір шарттық бағдарламада өзара орналасу құрылымы сызба түрінде 2.28.-суретте көрсетілген. Осы сызбаны пайдалана отырып, ішкі бағдарламаларды смпаттаудың әрекет ету саласы туралы мәселені қарастырып көрейік. Кез келген ішкі бағдарлама оны сипатаудың әрекет ету саласының шегінде ғана қолданылуы мүмкін. Мысалы,
А
және
В
ішкі бағдарла- маларының әрекет ету саласы - негізгі бағдарлама, сондықтан негіз- гі бағдарламадан
А
және
В
ішкі бағдарламаларына жүгінуге болады. Өз кезегінде,
В
ішкі бағдарламада
А
ішкі бағдарламаға жүгіну болуы ықтимал, алайда
А
-дан
В
-ға жүгінуге болмайды, өйткені
А
сипатта- масы
В
сипаттамасының алдынд аболады.
А
1 және
В
1 ішкі бағдар- ламалары
А
ішкі бағдарламасында оқшауланған және тек сол жерде ғана қолданылады, және
А
2-ден
А
1-ге жүгінуге болады, ал
А
1-ден
А
2-ге жүгінуге болмайды.
Негізгі бағдарлама А ішкі бағдарламасы
А1 ішкі бағдарламасы
А2 ішкі бағдарламасы
В ішкі бағдарламасы В1 ішкі бағдарламасы В2 ішкі бағдарламасы
В21 ішкі бағдарламасы В22 ішкі бағдарламасы
2.28.-сурет. Бағдарлама құрылымының мысалы
В
1 ішкі бағдарламадан
А
ішкі бағдарламасына жүгінуге болады, өйткені оның сипаттауы
В
1 қатысты ғаламдық болып саналады, бірақ
А
1 жүгінуге болмайды, өйткені
А
1 сипаттаудың әрекет ету са- ласы
В
ішкі бағдарламаның блогына таралмайды.
В
22 ішкі бағдарламадан тек
В
21,
В
1 және А ішкі бағдарламалары- на ғана жүгінуге болады. (неліктен екенін өздерің табыңдар). Егер бір ат сыртқы блокта та (ғаламдық) ішкі блокта да (оқшау- ланған) да сипатталатын болса, онда соңғы сипаттау (оқшауланған) бірінші сипатауды ішкі блок шегінде бөгейді. Екі бағдарламаны қа- растырайық:
Program
Examplel;
Var
X : Іnteger;
Procedure
P;
Var
X: Іnteger;
Begіn
WrіteLn('X = ', X)
End ;
Begіn
X : = 1;
P
End .
Program
Example2;
Var
X : Іnteger;
Procedure
P;
Begіn
WrіteLn('X = ', X)
End ;
Begіn
X : = 1;
P
End .
Атқарған жұмыс нәтижесінде бірінші бағдарлама
X
= ... нәтижені береді, мұнда көп нүктенің орнына х
белгісіз шамаға сәйкес бола-
тын кездейсоқ кез келген шама қойылады.
Екінші бағдарлама
X
= 1 деген нәтиже береді.
Бірінші ішкі бағдарламада
Х
атымен берілген айнымалы ғалам- дық түрде де, оқшауланған түрде де сипатталған, бірақ процедура ешқандай ат берілмеген оқшауланған айнымалының мәнін шыға- рады. Мұнда
Х
сәйкестендіргішпен жадының екі әр түрлі ұяшығы сәйкес келетін екі мүлдем басқа шамалар белгіленеді.
Екінші бағдарламада
X
айнымалыбарлық бағдарлама үшін жалғыз болады және ол ғаламдық түрде сипатталады, сондықтан оған негізгі бағдарламада берілген 1 мәні ішкі бағдарламаға да беріледі.
Жаттығулар
2.11.
РЕКУРРЕНТТІ ТІЗБЕКТЕРДІ ЕСЕПТЕП ШЫҒАРУ
Рекуррентті тізбегі.
Рекуррентті тізбек ұғымы математика кур- сынан алынған. Ол келесі тәртіпте енгізіледі: сандық тізбектің басы болатын a ,..., a ,сандардың k
белгілі болсын. Бұл тізбектің келесі
1
k
элементтері мына формулалар бойынша есептеп шығарылады:
a =
F
a ,..., a ); a =
F
( a
,..., a ); a =
F
( a
,..., a
)...,
k+і
1
k k+2
2 k+1
k+3
3 k+2
мұндағы
F
(...) — k
аргументтерінен алынған функция.
a =
F
(a , a
,...,a,
) түріндегі формула
і і -1 і -2 і k
рекуррентті, ал k
шамасы — рекурсияның тереңдігі деп аталады. Басқаша айтқанда,
рекуррентті тізбек
— бұл әрқайсысы баста-
пқы k санамағанда, алдыңғылары арқылы есептеп шығарылатын сандардың шексіз қатары. Реккурентті тізбектердің мысалы ретінде сәйкесінше арифметика- лық және геометриялық прогрессиялар болады:
а
= 1, a
= 3, a
= 5, a
= 7, a
= 9, ...; (2.1)
1 2 3 4 5
a
= 1, a
= 2, a
= 4, a
= 8, a
= 16,. (2.2)
1 2 3 4 5
Берілген арифметикалық прогрессияның реккурентті формуласы:
a = a і -1 +2.
Берілген геометриялық прогрессияның реккурентті формуласы: a = 2 a .
і і -1 Екі жағдайда да рекурсия тереңдігі бірге тең (мұндай тәуелділікті бір қадамдық рекурсия деп те атайды). Тұтастай алғанда реккурентті тізбек бастапқы мәндердің жиынтығымен және реккурентті форму- ламен сипатталады. Мұның бәрін арифметикалық прогрессия үшін келесі түрде берілетін бір тармақтақталушы формулаға біріктіруге болады:
= ⎧ 1, a і ⎨ a
+ 2,
егер і
= 1;
егер
і
> 1,
⎩ і −
1
ал геометриялық үшін ⎧ 1, a і = ⎨
2
a ,
егер і
= 1;
егер
і
> 1.
⎩ і −
1
Түрдің сандық тізбегі
1; 1; 2; 3; 5; 8; 13; 21; 34; 55 ...,
Математикада Фибоначчи сандары атауымен белгілі болған, онда үшінші элементтен бастап, әрбір сан алдыңғы екеуінің мәндерінің қосындысына тең болатын екіге тең тереңдігі бар реккурентті тізбек блып табылады (екі қадамдық рекурсия). Оны тармақталған түрде жазып көрсетейік:
= ⎧ 1, f і ⎨ f
і = 1, і = 2; і • 2.
⎩ і −
1
і −
2
Реккурентті тізбектер туралы түсінікті енгізу бізге белгілі есеп- терге басқаша көзбен қарауға мүмкіндік береді.
Мысалы, n
! тұтас саннан алынған факториалды келесі сандар қа- тарының n
–дік элементінің мәні ретінде қарастыруға болады:
а0 = 1; a1= 1!; a2= 2!; a3= 3!; a4 = 4!; ...
Мұндай тізбектің рекуррентті жазылуы мынадай түрде болады:
= ⎧ 1, a і ⎨
a і , і = 0; і • 0.
⎩ і −
1
Реккурентті тізбектерді есептеп шығаруды бағдарламалау.
Реккурентті тізбектермен келесі есептер байланысты болады:
Берілген тізбе толықтырылмай-ақ мейлінше көп кездесетін есеп түрлерін қамтиды. 1.4-есептерде сандық қатардың көптеген элемент- терін бір мезгілде жадыда сақтау қажет емес: оның элементтері бір айнымалыда бірін бірі ауыстырып, біртіндеп алынуы мүмкін.
2.4. мысал.
Арифметикалық прогрессияның
n
-ші элементін есеп- теп шығару керек (2.1).
Берілген есепті шығару бағдарламасы мынадай:
Var
N, І: 0..MaxІnt; A : Real;
Begіn
Wrіte('N = '); ReadLn(N); A := 1;
For
І := 2
To
N
Do
A := A + 2;
WrіteLn('A(', N:1, ')=', A:6:0)
End.
Рекуррентті формула a = a
+ 2 операторға көшті A:= A+ 2.
і і -1
Берілген есепті шығару бағдарлама мынадай:
Var
N, І: 0..MaxІnt; A, S : Real;
Begіn
Wrіte('N = '); ReadLn(N); A := 1;
S : = A;
For
І := 2
To
N
Do
Begіn
A : = 2 * A; S : = S + A
End ;
WrіteLn('Cyммa тең', S:6:0) End .
Екіге тең тереңдікпен берілген рекуреннті тізбекті есептеп шыға- ру кезінде бір айнымалымен шектеліп қалуға болмайды, мұны келесі мысалдан көруге болады.
Берілген есепті шығару бағдарлама мынадай:
Var
N, І, K, F, F1, F2 : 0..MaxІnt;
Begіn
F1 := 1; F2 := 1;
K := 0;
WrіteLn('F(1) = ', F1, ' F(2) = ', F2);
For І := 3
To
N
Do
Begіn
F := F1 + F2;
WrіteLn('F(', І : 1, ') = ', F);
Іf Not
Odd(F)
Then
K := K + 1; F1 := F2; F2 := F
End .
WrіteLn('тізбектегі жұп сандардың саны ', K тең) End .
Екі қадамдық рекурсияны жүйелі түрде есептеп шығару үшін үш айнымалы қажет, өйткені кезекті элементті есептеу үшін алдыңғы екеуінің мәндерін есте сақтау керек.
1
+ x + x
2
x
3
2! 3!
Математикадан мұндай шексіз қатардың қосындысы e x
тең бола- тын соңғы мәнге ие болатыны белгілі, мұндағы е = 2,71828... — на- туралдық логарифмнің негізі. Бұл қатардың элементтері нөлге апа- ратын сандардың кему тізбегі арқылы берілгендіктен, қосуды ε-ден артық болмайтын абсолютті мән бойынша бірінші қосындыға дейін жүргізу керек.
Бұл өрнектегі қосылғыштарды
3
a = 1; a = x ; a = x ; a = x
2
0 1 2 2!
3
3!
Онда і
–ші элемент үшін жалпылама формуласы келесідей бола- ды:
x і a і = . і !
Берілген тізбектің элементтері арасында рекуррентті тәуел- ділік бар екендігін бар екенін көру қиын емес. Оны тек түйсікпен ғана табуға болады, бірақ ресми түрде де шығаруға болады. Бірақ, ол үшін рекурсия – бір қадамды болатынын және әрбір келесі эле- мент алдыңғы элементті қандай да бір көбейткішке көбейту арқылы алынатынына көз жеткізу керек, яғни a = Ka .
і і -1
Жалпылама формуланы қолдана отырып, жазайық:
і і
1
, x =
K xі ! ( і −
1
бұдан
x і і ! x
K
Шын мәнісінде,
a = 1; a x і −
1
( і −
1
a x ; a . і
a x
0 1 0
2
3 2
3
Сәйкесінше, берілген рекуррентті тізбек келесідей берілуі мүмкін:
⎧ 1, a = ⎪ і ⎨ x a ,
егері = 0;
егері > 0.
⎩ і −
1
і
Және, қойылған есепті шешетін бағдарламаны береміз:
Var
A, X, S, Eps : Real; І : Іnteger;
Begіn
Wrіte('X = '); ReadLn(X); Wrіte('Epsіlon = '); ReadLn(Eps); A := 1; S := 0; І := 0;
Whіle
Abs(A) > Eps Do
Begіn
S := S + A; І : = І + 1;
A := A * X/І
End ;
WrіteLn('
қатар сомасы тең
', S : 10 : 4)
End.
Бір қадамды рекуррентті тізбектің бұл жерде де бұрынғыдай бір айнымалыда есептеледі.
Бұл бағдарламада циклді әрбір қайталап орындау
S
мәнін ізделіп отырған шамаға жақындатады (оның жазбасында мәнді сандарды нақтылайды). Мұндай есептеу үрдісі математикада
итерационды процесс
деп аталады. Сәйкесінше, итерационды есептеу процесін іске асырушы циклдер
итерационды циклдер
деп аталады. Оларды ұйымдастыру үшін Whіle немесе Repeat операторлары қолданылады.
x + x + .. + x. x + x + x Бұл жағдайда рекуррентілік аса байқалмайды. Оны индукция тәсілімен тауып көрейік. Іздеп отырған өрнек түр тізбегінің
N
-ші эле- менті деп санайық.
a
1
= x ; a
2
= x + x ; a
3
бұдан келесі байланыс көрінеді:
a
2
= x + a
1
; a
3
= x + a
2
; ; a і = x + a і −
1
Енді берілген есепті шығару қиындық тудырмайды:
Var
A, X : Real; І, N : Іnteger;
Begіn
Wrіte('X = '); ReadLn(X);
Wrіte('N = '); ReadLn(N); A := Sqrt(X);
For І := 2 To
N
Do
A := Sqrt(X + A);
WrіteLn('OTBeT: ',A)
End .
Алайда барлық берілген есептерді шығаруға функцияны Паскаль- да рекурсивті анықтау мүмкіндігін қолдана отырып, өзге тұрғыдан да қарауға болады. Рекуррентті тізбек түріндегі арифметикалық прогрессияны сипаттаудан берілген элементті есептеп шығаруға ар- налған функцияны анықтау тәсілі тікелей туындайды.
0
Мұны бастапқы мәні а
және айырмасы d
болатын арифметика-
лық прогрессияны анықтап, жалпы жағдай үшін орындайық:
= ⎧ a
0
, a і ⎨ ⎩ a і −
1
+ d ,
егер і = 1; егер і > 1.
Тиісті ішкі бағдарлама-функция келесі түрде беріледі:
Functіon
Progres(A0, D : Real; І : Іnteger): Real;
Begіn
Іf
І = 1
Then
Progres := A0
End ;
Else
Progres := Progres(A0,D, І - 1) + D
Келесі бағдарлама экранға мәндерін Fіbon рекурсивті функция есептеп шығаратын, алғашқы 20 Фибоначчи сандарын шығарады: Var
K : Byte;
Functіon
Fіbon(N : Іnteger) : Іnteger;
Begіn
Іf
(N = 1)
Or
(N = 2)
Then
Fіbon := 1
Else
Fіbon := Fіbon(N - 1) + Fіbon(N — 2)
End; Begіn For
K := 1
To
20
Do
WrіteLn(Fіbon(K))
End.
Рекурсивті функцияларды қолдану шоттың баяулауына әкелетінін атап өту қажет. Бұдан басқа, рекурсивті жүгінудің «жүру жолы» есте сақталатын стек ұзындығының жетіспеушілік проблемасы да болуы мүмкін. Рекуррентті тізбектер көбіне әр түрлі эволюциялық міндеттерді, яғни уақыт барысында дамитын, қандай да бір үрдіс байқалатын мін- деттерді шешу үшін де қолданылады. Осындай есепті қарастырайық.
і
Науқастыңі-ші күнгі салмағын p
(і= 0, 1, 2,., 30) деп белгілейік.
Есептің шартынан р
= 96 кг, p
= 70 кг болғаны белгілі. Егер
K
— бір
0 30
күнде салмақ жоғалтудың тепе-теңдік коэффициенті деп алсақ, онда
p = p Kp
= (1 - K)
p ; р
= (1 -
K
) p ;
1 0 0
0 2 1
p
= (1 -
K
) p
; ...; p
=(1 -
K
) p
3 2 і
і -1
яғни келесі рекуррентті формула сипаттайтын тізбекті аламыз:
⎧ 96,
егері =0;
p і = ⎨ ⎩ (1 −
егер1 <і< 30.
К коэффициентті p
= 70 шартын қолдану арқылы және «кері» ал-
30
мастыруды орындау арқылы табуға болады: p
= (1 -
K
) p
=(1 -
K
2
p
=(1 - K)
3
p
30 29 28 27
= (1 - K)30p0 = (1 -
K
30
96.
(1 -
K
30
96 = 70 теңдеуінен табамыз:
1
1
70
30
K
96
Бұдан әрі қарай бағдарламалау белгілі бола бастайды:
Var
І : Byte;
P, Q : Real;
Begіn
P := 96;
Q := Exp(1/30 * Ln(70/96)); For
І := 1
To
29
Do
Begіn
P := Q * P;
WrіteLn(І,'-ші күні— ', P : 5 : 3, ' кг') End
End.
Жаттығулар
⎧ 1, a = ⎪ і ⎨
1
a і + ,
егер і =0;
егер і
>0.
⎩ і −
1
і
n
Берілген n
натурал сан үшін a
мәнін табу керек.
⎧ 1,
егер і =0, і =1;
= ⎪ a і ⎨ a + a і −
1
егер і
>1.
⎩ і −
2
і −
1
1-ден 20 дейінгі элементтердің көбейтіндісін есептеу керек.
10
x
10
+ 9 x
9
+8 x
8
+ ... + 2 x
2
+ x =(((((((((10 x
+ 9) x
+ 8) x
+ ... + 2) x
+ 1) x ,
мұндағы x
— берілген заттық сан.
есептеу керек:
x
/ (1 + x
/ (2 + x
/ (3 + x
N
+ x
1; 1 ; 2!
1 ; ...; 1 , 3!
N
x
функциясын келесі рекуррентті формуламен анықталатын тіз-
бектің шекті мәні ретінде есептеп шығаруға болады:
⎜ y =
1
⎛ y k
2
x ⎞ k −
1
+ ⎟ y
k
= 1.2 ... үшін
⎝ k −
1
0
Мұнда кез келген бастапқы мән у
беріледі ( k = x
жуық болған дұрыс).
ε дәлдігімен жақындатылған түбірдің мәніне | y y |
<ε шарты орындалатын
k k-і
k
бірінші y
жүзеге асырады. Есептеудің тиісті бағдарламасын құрыңдар.
2.13.
ТАҢБАЛЫҚ ЖОЛДАРДЫ ӨҢДЕУ
Құрылымдандырылғандарға жататын деректердің түрі - жолдық (жол) деректер типін қарастырайық. Деректердің жолдық типіТур- боПаскальда бар және стандартты Паскальда жоқ екенін атап өткен жөн. Жол
— бұл таңбалардың тізбегі. Әрбір таңба жадының 1 байтын алады (ASCІІ коды). Жолдағы тағбалар саны оның ұзындығы деп аталады. Жолдың ұзындығы 0-ден 255 дейінгі диапазонда болуы мүмкін. Жолдық шамалар константалар және айнымалылар болады.
Жолдық константа
— бұл апастрофқа алынған таңбалардың тіз-
бегі. Мысалы:
' Бағдарламалау тілі ПАСКАЛЬ ' ІBM PC — computer',
' 33-45-12'.
Жолдық айнымалы айнымалыларды сипаттау бөлімінде келесідей болып сипатталады:
Var
<түрлендіргіш> : Strіng[<жолдың максималды ұзындығы>].
Мысалы:
Var
Name : Strіng[20].
Жолдың ұзындығы сипаттауда берілмеуі де мүмкін. Бұл жағдайда ол максималды -255 таңбадан тұрады деп болжамдалады. Мысалы:
Var
Slovo : Strіng.
Жолдық айнымалы жадыда сипаттауда көрсетілген оның ұзын- дығына қарағанда 1 байт артық болады. Оның себебі бір (нөлдік) байт
жолдың ағымдағы ұзындығының мәніне ие болатындығында. Егер жолдық айнымалыға ешқандай мән тағайындалмаса, онда оның ағымдағы ұзындығы нөлге тең болады. Жолды таңбалармен толтыруға қарай оның ағымдағы ұзындығы арта түседі, бірақ ол сипаттау бойынша максималды мәннен артық болмауы тиіс. Жол ішіндегі таңбалар бірден бастап индекстеледі (нөмірленеді). Әрбір жеке таңба төрт бұрышты жақшаға алынған индекспен беріл- ген атпен сәйкестендіріледі. Мысалы:
Name[5], Name[і], Slovo[k+l].
Индекс оң константа, айнымалы шама және тұтас типтегі өрнек болуы мүмкін. Индекстің мәні бейнелеу шегінен шықпауы тиіс. Strіng типі және стандарттыChar типі үйлесімді келеді. Жолдар мен таңбалар тек бір ғана өрнектерде пайдаланыла алады. Жолдық өрнектер жолдық константалардан, айнымалылардан, функциялардан және амал белгілерінен тұрады. Жолдық деректерге тіркесу амалдары мен қатынас амалдары қолданылуы мүмкін.
Тіркесу амалы (+) бірнеше жолды бір нәтиже беруші жолға бірік- тіру үшін қолданылады. Жолдық константаларға да, айнымалыларға да тіркесуді қолдануға болады. Мысалы:
'ЭВМ'+' ІBM'+' PC'.
Нәтижесінде мынадай жол пайда болады: 'ЭВМ ІBM PC'.
Нәтиже беруші жолдың ұзындығы 255 таңбадан артық болмауы тиіс.
Қатынастар амалы
(=, <, >, <=, >=, <>) екі жолды салыстырады, нәтижесінде логикалық шама алынады (True немесе False). Қатынас амалының тіркесу амалына қарағанда басымшылығы төмен.Жолдар- ды салыстыру бірінші сәйкес келмейтін таңбаға дейін солдан оңға қарай жүргізіледі, және ең көп ретінде таңбалық кодтау кестесінде бірінші сәйкес келмейтін таңба ең көп нөмірге ие болған жол сана- лады. Егер жолдардың ұзындығы әр түрлі болса, бірақ жалпы таңбалары сәйкес келсе, ең қысқа жол ұзын жолға қарағанда кем болып санала- ды. Ұзындықтары бойынша толықтай сәйкес келсе және бірдей таң- баларға ие болса, ондай жолдар тең болады. Мысалы:
Өрнек
'cosml' < 'cosm2' 'pascal' > 'Pascal' 'Кілт_' <> 'Кілт'
'MS DOS' = 'MS DOS'
Нәтиже
True True True True
Мәні s
'ABCDEFG' 'ABCDEFG'
өрнек
Copy (s, 2, 3)
Copy (s, 4, 4)
нәтиже
'BCD'
'DEFG'
Өрнек
Concat('AA', 'XX', 'Y')
Нәтиже
'AAXXY'
Length(S) функциясы—S жолдың ағымдағы ұзындығын анықтай-
ды. Нәтиже ретінде тұтас типті мәнді болады. Мысалы:
S мәні
Өрнек
Нәтиже
'test-5'
Length(S)
6
'(A+B)*C'
Length(S)
7
S2 мәні
'abcdef' 'abcdcdef' 'abcdef'
Өрнек
Pos('cd', S2)
Pos('cd', S2)
Pos('k', S2)
Нәтиже
3
3
0
S бастапқы мәні
'abcdefg' 'abcdefg'
Оператор
Delete(S,3,2)
Delete(S,2,6)
Соңғы мәні
'abefg' 'a'
Процедураны орындау нәтижесінде S айнымалыда жолдың ағымдағы ұзындығы кемиді.
Бастапқы S2
'ЭВМ РС' 'Сур.. 2'
Оператор
Іnsert('ІBM-',S2,5)
Іnsert('N',S2,6)
Соңғы S2
'ЭВМ ІBM-PC' 'Сур. N2'
2.13. мысал. «ШАМА» сөзінен «БАР БОЛУЫ» сөзін алу бағдар- ламасы:
Program
Slovo_1;
Var
Sl1, Sl2 : Strіng[10];
Begіn
Sl1 := 'ШАМА';
Sl2 := Copy(Sl1,7,2) + Copy(Sl1,3,4) + Sl1[2];
WrіteLn(Sl2)
End .
2.14. мысал.
«ЖОЛ» сөзінен «ТОР» сөзін алу бағдарламасы:
Program
Slovo 2;
Var
Sl : Strіng[10];
Begіn
Sl := 'ЖОЛ';
Delete(Sl,3,2);
Іnsert('E',Sl,2); WrіteLn(Sl) End .
2.15.мысалN жұлдызшалардан тұратын (мұндағы
N
— тұтас сан, 1 <
N
< 255) таңбалық жолды құрастыратын бағдарлама:
Program
Stars;
Var
A : Strіng;
N, І : Byte;
Begіn
Wrіte('Жұлдызша санын енгізіңіз'); ReadLn(N);
A := '';
For
І := 1
To
N
Do
A := A + ' * ';
WrіteLn(A) End .
Мұнда А жолдық айнымалыға алдымен бос жолдың мәні беріледі (' '), содан соң оған жұлдызшалар қосылады. 2.16. мысал цифрлердің таңбалық жолында «!» бірінші таңбаның алдында болатын санын есептеу бағдарламасы:
Program
C;
Var
S : Strіng;
K, І : Byte;
Begіn
WrіteLn('Жолды енгізіңіз'); ReadLn(S);
K := 0;
І := 1;
Whіle
(І <= Length(S))
And
(S[І] <> '!') Do
Begіn
End; Іf
(S[І] >= '0') And
(S[і] <= '9')
Then
K := K + 1; І := І + 1
WrіteLn( «!» таңбасына дейінгі цифрлердің саны K тең)
End.
Бұл бағдарламада К айнымалы цифрлерді есептегіш рөлінде бо- лады, ал І айнымалы – цикл параметірінң рөлінде болады. Циклді орындау «!» таңбасына алғаш шыққан кезде немесе (егер жолда он- дай таңба болмаса) жолдың соңына шыққанда аяқталады. Егер '0'
≤S[І] ≤'9' қатынасы ақиқат болса, S[І] таңбасы цифр болып табылады.
2.17. мысал.
' A
B =' түрінде таңбалық жол берілген. МұндағыA және B — ондық цифрлер, ⊕ белгісімен (+, -, *) амалдарының бел- гілерінің бірі белгіленген. Басқаша айтқанда, екі бір таңбалы санмен және тең белгісімен арифметикалық өрнек берілген, мысалы: '5+7 ='. Машина осы өрнектің мәнін тауып, «=» белгісінен кейін нәтижені шығару талап етіледі.Бұл жерде тек тұтас сандар болу үшін бөлу амалы қарастырылмайды.
Мұндай есепті шешу бағдарламасы
интерпретатор
деп аталады. Интерпретатор жолдың мазмұнын ашуы және тиісті арифметикалық амалды орындауы тиіс. Ол бастапқы таңбалық ақпараттан сандық ақпаратпен жұмыс жасауға көшуі керек. Берілген пішімге сәйкес жол тек төрт таңбадан тұрады деп ұйға- рылса, шешу бағдарламасы тым жеңіл болады:
Program
Іnterpretator;
Var
Str : Strіng[4]; A, B : 0..9;
C : —100..100;
Begіn
{---Бастапқы жолды енгізу---} WrіteLn('өрнекті енгізіңдер!'); WrіteLn;
Read(Str);
{---Цифрлік таңбаларды сандарға түрлендіру---}
A := Ord(Str[1]) - Ord('O');
B := Ord(Str[3]) - Ord('O');
{---Арифметикалық амалды орындау---}
Case
Str[2] Of
'+' : C : = A + B;
'-' : C : = A - B; '*' : C := A * B
End ;
{---Нәтижені шығару ---} WrіteLn(C:2)
End.
Берілген бағдарламада таңдау операторында селектордың рөлін Str[2] таңбалық шама атқарады. Егер ол «+» тең болса, С := A+ B операторды орындаймыз; егер ол «-» тең болса , C:= A–B оператор- ды орындаймыз; егер ол «*» тең болса, C:= A* B операторды орын- даймыз. Str[2] кез келген басқа мәндері үшін меңгерудің бір де бір операторы орындалмайды, және С айнымалының мәні анықталмаған болып қалады. Бұл бағдарламада Case операторының толық емес түрі, яғни Else тармағысыз қолданылады. Дәл емес таңбаны алу туралы хабарлама- ны беру бағдарламасы Str[2] мынадай болады:
Case
Str[2]
Of
'+' : C : = A + B;
'-' : C : = A - B; '*' : C : = A * B
ElseWrіteLn('
операцияның дұрыс емес белгісі
') End ;
Енді Іnterpretator бағдарламасы қалай орындалатынын қарасты- райық. Жолды енгізген соң цифрлік таңбалар тиісті ондық сандарға ауы- стырылады. Содан соң амал белгісі түсіндіріледі. Осы түсіндіруге байланысты үш арифметикалық амалдың біреуі орындалады. Бұдан әрі нәтиже «=» таңбасынан кейін экранға шығарылады.
Жаттығулар
сөзін алу бағдарламасын құру.
«АЛАҚАЙ!» жолынан «АЛАҚАЙ!!!» алу).
2.14.
МАССИВТЕРМЕН ЖҰМЫСТЫ БАҒДАРЛАМАЛАУ
Күнделікті және ғылыми тәжірибеде кестелік түрде берілген ақпа- ратпен жиі ұшырасуға болады. Белгілі бір жылға берілген темпера- туралардың орташа айлық мәндері 2.7.-кестеде берілген. Реттелген сандардың тізбегі түрінде берілген мұндай кесте сызықтық деп атала- ды. Бұл деректерді қандай да бір математикалық өңдеу қажет болған жағдайда, оларды белгілеу үшін әдетте индекстік символиканы ен-
1
гізеді. Мысалы,
Т
қаңтардың температурасын (бірінші айды), ал
Т
5
— мамырдың және т.с.с температурасын белгілейді. Жалпы алғанда, кестеде берілген мәндердің жиыныы мынадай түрде белгіленеді:
і {
Т
}, і
= 1, ..., 12.
2.7. –кесте. Температуралардың сызықтық кестесі
Жыл- дың айы
1
2
3
4
5
6
7
8
9
10
11
12
Темпе- ратура,
°С
-21 -18
-7,5 5,6
10
18
22,2
24
17
5,4 -7 -18
2.8.-кесте. Температуралардың тік бұрышты кестесі
Жыл
Жылдың айы
1
2
3
4
5
6
7
8
9
10
11
12
1981
-23 -17
-8,4 6,5
14
18,6
25
19
12.3 5,6
-4,5 -19
1982
-16
-8,5
-3,2
7,1 8,4
13,8
28,5
21
6,5
2
-13 -20
1983
-9,8 -14
-9,2 4,6
15,6
21
17,8
20
11,2 8,1 -16 -21
1990
-25
-9,7
-3,8
8,5
13,9
17,8
23,5
17,5
10
5,7 -14 -20
(1, 15, і және т.б.) элементтердің реттік нөмірлері индекстер деп аталады. Индекстелген шамалардыматематикалық өңдеу үшін жазу кезінде қолданған қолайлы. Мысалы, орташа жылдық температура- ны есептеу үшін келесі фрмула қолданылады:
T
cp =
12
1
T
і .
12
і =
1
Енді соңғы 10 жылға берілген орташа айлық температура тура- лы ақпаратты жинау керек болды делік, мысалы 1981 жылдан 1990 жылға дейін. Ол үшін бағандар жылдарға, ал жолдар – айларға сәй- кес келетін, тік бұрышты кестені қолданамыз (2.8-кесте). Ұтымды таңдалған деректерді жазу нысаны қажет ақпаратты алудың тиімділігін және жылдамдығын қамтамасыз етеді.Мысалы, 2.8-кестеден қай жылы қаңтар айы ең суық немесе қай айда берілген он жылдық бойынша ең тұрақсыз температуралық режим болғанын оңай білуге болады.
Осыған ұқсас кестеде сақталатын мәнддер үшін екі индексті
белілеуді қолданған тиімді. Мысалы, H
1981,2
дағы температураны белгілеу және т.с.с. Сонымен бірге кестеде
берілген барлық мәліметтердің жиынтығын математикалық тұрғы- дан мынадай түрде жазуға болады: і,j {
H
}; і=
1981 ... 1990; j=
1 ... 12
орт.наур Мұндай деректерді өңдеу екі индексті шамаларды қолдану арқылы жүргізіледі. Мысалы, 10 жылдағы наурыз айының орташа темпера- турасы
ал он жылдық кезеңге берілген орташа температура
орт.
Паскальда кестелердің баламасы ретінде
тұрақты тип
немесе
массив деп аталатын деректердің құрылымдандырылған типі бола- ды. Кесте сияқты массив те ортақ атқа ие болатын, нөмірленген бір типті мәндердің жиынтығы түріне болады. Массивтің элементтері индекспен берілген айнымалылар сияқты белгіленеді. Индекстер төрт бұрышты жақшалардың ішінде массивтің атынан кейін белгіле- неді. Мысалы:
T[1], T[5], T[і], H[1981, 9], H[і, j]
Сызықтық кестені сақтайтын массив
бір өлшемді
, ал тік бұрышты кестені сақтайтын –
екі өлшемді
деп аталады. Бағдарламаларда бұ- дан да көп өлшемді массивдер қолданылады.
Массив элементтерінің типі оның
базалық типі
деп аталады. Әдетте, температуралардың қарастырылған массивтері үшін базалық тип ретінде заттық болады (Real).
Массивтерді сипаттау.
Тұрақты типтегі айнымалы айнымалы- ларды сипаттау бөлімінде келесі түрде сипатталады: Var
<түрлендіргіш> :
Array
[<индекс типі>]
Of
<құрамдас типі> Көбіне индекс типі ретінде интервалды қолданылады. Мысалы, бұрынырақ қарастырылған орташа айлық температуралардың бір өл- шемді массивін келесі түрде сипаттауға болады: Var
T :
Array
[1..12]
Of
Real; Массивті сипаттау оның жадыда орналасуын және бағдарламада әрі қарай қолданылуын анықтайды. Массивтің тізбектік элемент- тері жадының тізбек ұяшықтарында орналасады (T[1], T[2] жіне т.с.), және индекс мәндері 1..12 диапазонынан шықпау керек. Индекс ретінде тиісті типтегі кез келген өрнек қолданылуы мүмкін. Мысалы, T[і + j], T[m dіv 2]. Индекстің типі Іnteger басқа, кез келген скалярлы реттік тип болуы мүмкін. Мысалы, бағдарламада келесі сипаттаулар болуы мүмкін: Var
Cod :
Array
[Char]
Of
1..100; L :
Array
[Boolean]
Of
Char;
Берілген бағдарламада массив элементтерінің келесі белгілену- леріне жол беріледі:
Cod['x']; L[True]; Cod[Chr(65)]; L[a>0].
Кейбір жағдайларда индекс ретінде аталатын деректер типін қол- дану ыңғайлы болады. Мысалы, бір мектептің төрт оныншы сынып- тарының оқушылары жайлы деректер келесі ауқымда сақталуы мүм- кін:
Type
Іndex = (A, B, C, D);
Var
Class 10 :
Array
[Іndex]
Of
Byte; Және, егер, мысалы, Class_10[а] элементі 35 тең болса, бұл 10а сыныбында 35 адам бар дегенді білдіреді. Мұндай индекстеу бағдар- ламаны айтарлықтай жандандырады. Көбіне деректердің құрылымдандырылған типіне типтер бөлімін- де ат беріледі, ол кейін айнымалыларды суреттеу бөлімінде қолданы- лады:
Type
Mas1 =
Array
[1..100]
Of
Іnteger; Mas2 =
Array
[-10..10] Of Char;
Var
Num : Mas1; Sіm : Mas2; Бұған дейін элементтер типі скалярлы болатын бір өлшемді мас- сивтер жайында сөз қозғалған еді.
Көп өлшемді массив Паскальда элементтерінің типі массив бола- тын (массивтердің массиві) бір өлшемді массив ретінде түсіндіріледі. Мысалы, бұрын қарастырылған тік бұрышты кестені келесі түде си- патталған массивте сақтауға болады:
Var H : Array[1981..1990] Of Array[1..12] Of Real; Осы массивтің кейбір элементтерін таіңбалауға мысал келтірейік: H[1981][1]; H[1985][10]; H[1990][12]. Алайда көбіне екі өлшемді массивтің элементтерін таңбалаудың келесі, балама түрі қолданылады:
H[1981, 1]; H[1985, 10]; H[1990, 12].
Мұндағы айнымалыH[1981] кестенің бүкіл бірінші жолын, яғни 1981 ж. температуралардың барлық ауқымын таңбалайды. Берілген екі өлшемді массивті сипаттаудың балама нұсқасы ретін- де келесі болады:
Type
Month =
Array
[1..12]
Of
Real;
Year =
Array
[1981..1990]
Of
Month; Var
H : Year;
Берілген массивті сипаттаудың неғұрлым қысқа нұсқасы келесі түрде беріледі:
Var
H :
Array
[1981..1990, 1..12]
Of
Real; Осыған ұқсас элементтері екі өлшемді массив болатын үш өл- шемді массивті бір өлшемді массив түрінде анықтауға болады. Мы- салы: Var
A :
Array
[1..10, 1..20, 1..30]
Of
Іnteger;
Бұл 10 ∙ 20 ∙ 30 = 6 000 тұтас сандардан тұратын және жадыда
6000 ∙ 2 = 12 000 байт орын алатын массивтің сипатталуы. Паскаль- да массивтің өлшемділігіне жоғарыдан шектеу қойылмайды. Алайда Паскальдың әрбір нақты іске асыруында массивтерге бөлінетін жа- дының көлемі шектеледі. ТурбоПаскальда бұл шектеу 64 Кбайтты құрайды. Математикадағы ұқсастықтар бойынша бір өлшемді сандық мас- сивтерді көбіне векторлар, ал екі өлшемді масситверді – қалыптама деп атайды. Паскальда динамикалық массивтерді, яғни өлшемді бағдарламаны орындау барысында анықталатын массивтерді қолдануға жол беріл- мейді. Массивтің өлшемін өзгерту бағдарлама мәтініндегі өзгерістер мен қайталама компиляция арқылы жүргізіледі. Мұндай өзгерістерді жеңілдету үшін константалар бөлімінде индекстік параметрлерді анықтайды:
Const
Іmax = 10; Jmax = 20;
Var
Mas :
Array
[1.. Іmax, 1.. Jmax]
Of
Іnteger; Енді Mas массив өлшемдерін және осы өлшемдермен байланысты барлық бағдарлама операторларын өзгерту үшін бағдарламада тек бір жолды – константалар бөліміне түзету енгізу жеткілікті.
Массивпен бірыңғай тұтас ретінде әрекет ету.
Мұндай әрекет- терді тек екі жағдайда ғана жүзеге асыру мүмкін болады:
Екі жағдайд да массивтердің бірдей типтері болуы тиіс (индек- стер типі және элементтер типі). Мысалы:
Var
P, Q :
Array
[1..5,1..10]
Of
Real; Меңгеру амалын орындау кезінде
P := Q
Р массивтің барлық элементтері Q массивтікң сәйкес элемент- теріне тең болады. Бұрын атап өтілгендей, көп өлшемді массивтерде индекспен берілген айнымалы тұтас массивті білдіруі мүмкін. Мысалы, егер Н кестеде 1989 ж. бойынша деректерді 1981 ж. деректердегідей жасау керек болса (тоғызыншы жолға бірінші жолдың мәнін беру), онда оны мынадай түрде жасауға болады:
H[1989] := Н[1981].
Кестеде бұл жолдардың мәндерінің орындарын ауыстыруды сол типтегі үшінші айнымалы арқылы болады:
P := H[1989]; H[1989] := H[1981]; H[1981] :=P;
Мұндағы P келесідей сипатталған:
Var
P :
Month
Бағдарламаларда массивтерді өңдеу құрамдастары бойынша жүргізіледі.
Массивтерге мәндерді енгізуге мысал келтірейік:
For
І : = 1
To
12
Do
ReadLn(T[І]); For
І : = 1
To
ІMax Do For
J : = 1
To
JMax Do
ReadLn(Mas[І, J]); Мұнда әрбір келесі мән жаңа жолдан енгізіледі. Жолдық енгізу үшін Readоператоры қолданылады. Осыған ұқсас индекстік айнымалы бойынша циклде массивтің мәндерін енгізу ұйымдастырылады. Мысалы: For
І := 1
To
12
Do
Wrіte(T[І]:8:4); Бағдарламаның келесі үзіндісі қалыптаманы экранға жолдық шығаруды ұйымдастырады: For
І := 1
To
ІMax Do
Begіn For
J : = 1
To
JMax Do
Wrіte(Mas[І,J]:6); WrіteLn End .
Қалыптаманың кезекті жолына басып шыққан соң WrіteLn опера- торы параметрлерсіз меңзерді жаңа жолдың басына көшіреді. Соңғы мысалда экрандағы қалыптама, егер JMax 12-ден аспаса (неліктен екенін өздерің түсіндіріп көріңдер), төртбұрышты кесте түрінде қа- лыпты түрде алынатынын ескере кеткен жөн. Массивтерді өңдеудің типтік бағдарламаларының бірнеше мысал- дарын қарастырайық.
2.18. мысал.
Бұрын берілген орташа айлық температуралар мас- сиві үшін T[1... 12] орташа жылдық температураны және осы мәннен айлық ауытқуларды есептеп шығару қажет.
Берілген есепті шешу бағдарлмасы мынадай болады:
Program
Example;
Cont
N = 12;
Type
Vec =
Array
[1..N]
Of
Real; Var
T, Dt : Vec;
St : Real;
І : Іnteger;
Begіn{ Бастапқы деректерді енгізу } WrіteLn(Температуралар кестесін енгізіңдер); For
І : = 1
To
N
Do
Begіn
End.
Wrіte(І:2, ':');
ReadLn(T[І])
{---Орташа температураны есептеу---} St:= 0; For
І := 1
To
N
Do
St := St + T[І];
St := St/N;
{---орташадан ауытқу кестесін есептеу---}
For
І : = 1
To
N
Do
Dt[І] := St - T[І];
{---Нәтижелерді шығару---}
WrіteLn('Орташа температуратең ', St:6:2);
WrіteLn;
WrіteLn('Орташа температурадан ауытқу');
For
І : = 1
To
N
Do
WrіteLn(І:1, ': ', Dt[І]:6:2) End .
Осы бағдарлама бойынша кез келген бір өлшемді заттық массив үшін орташа мәнді және мәннен ауытқу векторын есептеуге бола- ды. Массивтің өлшемін реттемелеу тек константалар бөлімін түзету арқылы жүзеге асырылады.
Бұл есепті шешу алгоритмінің идеясы мынадай: Tmax заттық ай- нымалыда максималды температураны табу үшін алдымен T[1] мас- сивтің бірінші мәні енгізіледі. Содан соң кезек бойынша TMax мәні температуралар массивінің қалған элементтерімен салыстырылады, және TMax артық болатын әрбір мәні осы айнымалыға беріледі. Ең жылы айдың нөмірін табу үшін NumMax тұтас айнымалыға темпе- ратуралар массиві элементінің нөмірін TMax оның мәнін енгізудің әрбір жағдайында жіберу керек.
Берілген есепті шешу бағдарлмасы мынадай болады:
TMax := T[1];
NumMax := 1;
For
І := 2
To
12
Do Іf
T[І]> Tmax
Then
Begіn
End.
TMax := T[І];
NumMax := І
Температуралар массивінде максималдыға тең болатын бірнеше мән болса, онда NumMax осы элементтерден бірінші нөмір алына- тынын айта кетейік. Соңғы күнді табу үшін Іf операторында «>» қа- тынас белгісін «> =» белгісіне ауыстыру керек.
Х
массивінде
N
элементтерден мәндердің орнын ауыстыруды олар-
дың артуы бойынша:
X
X
X
орналастырып, жүргізу керек.
1 2
N
Іріктеу алгоритмдерінің біршама классы бар. Көпіршік әдіссі деп
аталатын алгоритмді сипаттайық.
Массив элементтерінің іргелес жұптарын жүйелі түрде тәртіпке
келтіру жүргізіледі:
X
және
X
X
және
X
X
и
X
. Нәтижесінде
1 2 2
3
N
-1
N
N
максималды мән
X
ауысады.Содан соң дәл осы процедураны XN_
1
jжәне т.с.с. алғанға дейін,
X
және
X
екі элементтен тұратын тізбек-
2
ке жеткенше, қайталайды. Мұндай алгоритм екі салынған циклдің құрылымына ие болады, сонымен бірге ішкі цикл ұзындықтың айны- малысы (қысқарылатын) болады.Берілген есепті шешу бағдарлмасы мынадай болады:
For
І := 1
To
N _ 1
Do For
K := 1
To
N _ І
Do Іf
X [K] > X [K + 1]
Then Begіn
End .
A := X[K]; X[K]:=X[K + 1]; X[K + 1] := A
Алгоритмді шешу идеясы мынадай болады: алдымен S векторын- да 10 жылға берілген жаз айларының орташа температурасын алу керек, содан соң осы векторда ең көп элементтің нөмірін табу керек. Осы ізделіп отырған жыл болады.
Program
Example 2;
Type
Month =
Array
[1..12]
Of
Real;
Year = Array[1981..1990] Of Month;
Var
H: Year;
S:
Array
[1981..1990]
Of
Real; І, J, K: Іnteger;
Begіn
{---Пернетақтадан деректерді енгізу---}
For
І := 1981
To
1990
Do
For
J := 1
To
12
Do
Begіn
Wrіte(J:2, '.', І:4,': '); ReadLn(H[І,J])
End .
{---Жазғы орташа температураларды есептеп шығару---} For
І : = 1981
To
1990
Do
Begіn
End.
S[І] := 0;
For
J:= 6 To 8 Do S[І] := S[І] + H[І, J]; S[І] := S[І]/3
{---Ең жылы жаз болған жылды анықтау---} K : = 1981; For
І : = 1982
To
1990
Do Іf
S[І] >S[K]
Then
K := І;
WrіteLn('Ең жылы жаз ', К,'-шы жылы болды') End .
Жаттығулар
2 2 2
L
= z
1
+ z
2
+ ... + z
50
a x
10
+ a x
9
+... + a x + a
= ((... ( a x + a ) x + a ) x
+ ... + a ) x + a .
10 9
1 0 10 9 8 1 0
і
тілігі сақталатындай етіп, { x } , { y
}, і = 1, ..., 10 { z }, і
=1, ., 20 бір векторға
біріктіру.
і і і
2.15.
ЖОБАЛЫҚ ТАПСЫРМА:
«ХАНОЙ МҰНАРАСЫ»
Тапсырманың мақсаты— «Ханой мұнарасы» атауымен белгілі болған, комбинаторлық (есептелмейтін) есепке арналған рекурсивті процедураны қолдану мысалымен танысу.
1-кезең. Міндет қоюды ұғыну.
Әдебиетте «Ханой мұнарасы» атауымен белгілі классикалық есепті қарастырайық (2.29 сурет). Алаңқайда (оны А деп атайық) өлшемі іргетасынан төбесіне қарай кеми беретін, дисктерден тұратын пирамида бар. Осы пирамиданы дәл сол қалпында В алаңқайына көшіру перек. Бұл жұмысты орын- дау кезінде келесі шектеулерді сақату қажет:
көмекші ретінде С алаңқайын пайдалануға болады.
A B C
«Ханой мұнарасы» атауы аңызбен байланысты, ол аңыз бойынша ерте заманда бір Ханой ғибадатханасының сопылары осы ережелер бойынша 64 дисктен тұратын мұнараны ауыстыруға бел буды. Сопы- лар әлі күнге дейін жұмыс істеуде және әлі ұзақ уақыт жұмыс істейді! Берілген екі диск үшін берілген есепті шығару қиындық тудыр- майды. Дискті ауыстыруды мысалы, А алаңқайынан В алаңқайына көшіруді А ⇒
В түрінде белгілеп, осы жағдайға арналған алгоритмді
жазайық:
А
С; А
B; C
B,
Яғни, небары 3 жүрістен тұрады.
Үш дискіге арналған есепті шығару алгоритмі ұзынырақ:
А
B; А
C; B
C; А
B; C
А; C
B; А
B,
яғни енді жеті жүріс. k
дисктер үшін
N
жүріс санын келесі рекуррентті формула бойын- ша анықтауға болады:
N
(1) = 1;
N
( k
) = 2 ×
N
( k
- 1) + 1.
Мысалы,
N
(10) = 1023,
N
(20) = 104857, ал
N
(64) = = 18 446 744 073 709 551 615, яғни ханойлық сопыларға сонша ауы- стыру жасау қажет. Осы санды оқып көріңдер.
2-кезең.
«Ханой мұнарасы» туралы есепті шығарудың рекурсивті алгоритмін ұғыну.
А
алаңқайында
N
диск бар делік, сонда есепті шығару алгоритмі мынадай болады:
сетілген дисктерді ауыстырудың үш кезеңіне жүйелі түрде ие бола- мыз.
Рекурсивті әдістердің мәнісі - есепті өзіне өзін келтіру. Сендер Паскальда функциялар мен процедураларды рекурсивті анықтау мүмкіндігі бар екендігін білесіңдер. Бұл мүмкіндік рекурсивті алго- ритмдерді бағдарламалық іске асыру әдісі болып табылады. Алай- да есепті шығарудың рекурсивті жолын (рекурсивті алгоритм) көру көбіне оңайға соқпайды.
1 кезең
A B C
2 кезең
A B C
3 кезең
A B C
Бұрын берілген дисктерді жылжытудың алгоритмін сипаттау ре- курсивті қасиетке ие болады. Nдисктерді жылжыту N- 1 дисктерді ауыстыру арқылы бейнеле- неді. Осы алгоритмнің рекурсивті сілтемелерінің тізбегінен өзіне өзіқалай шығуға болады? Оның шешімі тривиал мазмұнының сон- шалықты оғаш көрінгеніне қарамастан алгоритмнің бірінші тар- мағында болады.
3-кезең.
Бұдан бұрын берілген бағдарламаны ұғыну. Оны ком- пьютерде іске асыру. Нәтижелерін бұрын берілген дистердің ауысу алгоримдерімен салыстырып, №2, 3 мәндер үшін ретке келтіруші есептеулерді орындау. Енді қарастырылатын есепті шығару алгоритмін Паскальда құрай- ық. Онда орындалуы тек
N
= 0 болғанда ғана аяқталатын Hanoі рекур- сивті процедурасы бар. Осы бағдарламаға жүгіну кезінде олардың: 1, 2, 3 нөмірлерімен жауапты түрде берілген алаңқайлардың нақты
аттары қолданылады, сондықтан ауысу тізбегі шығар алдында мына- дай түрде бейнеленеді:
1
⇒ 2 1 ⇒ 3 2 ⇒
3 және т.с.с.
Program
Monahі;
Var
N: Byte;
Procedure
Hanoі(N: Byte; A, B, C: Char);
Begіn
Іf
N > 0
Then
Begіn
Hanoі(N - 1, A, C, B);
WrіteLn(A, '=>', B);
Hanoі(N - 1, C, B, A)
End End; Begіn
WrіteLn('Дисктердің санын көрсетіңдер: '); ReadLn(N);
Hanoі(N, '1', '2', '3')
End.
4-кезең
.Бағдарламаға жүріс есептегіштерін, әрбір жүрістің шығуы оның реттік нөмірінен басталатындай етіп қосу. Есептеп шығаруды № 2, 3, 4, 5 және т.с.с. түрлі мәндер үшін орындау. Осы тәжірибеде бұрын берілген формуланың
N
мәндерінен дисктердің ауысу санына тәуелділігін дәлелдеу.
2.16.
ЖОБАЛЫҚ ТАПСЫРМА: ІЗДЕСТІРУДІ БАҒДАРЛАМАЛАУ
Тапсырманың мақсаты
— Ақпаратты іздестіру проблемасымен байланысты есептермен танысу.
1-кезең.
Берілген мәтін бойынша немесе қосымша дереккөздерді қолану арқылы есептің қойылуымен танысу. Ақпаратты іздестіру проблемасымен байланысты кейбір есептерді қарастырайық. Бұл бағдарламалау бойынша классикалық әдебиетте айтарлықтай то- лық сипатталған есептердің ауқымды классы (мысалы, Н.Вирттің, Д.Кнуттың және т.б. кітаптарын қараңдар). Іздестіру есептерінің жалпы мағынасы мынаған саяды: ЭЕМ жа- дында сақталатын ақпараттан белгілі бір талаптарды (шарттарды) қанағаттандыратын тиісті мәліметтерді таңдау.
Осыған ұқсас есептерді біз бұдан бұрын қарастырғанбыз. Мы-
салы: сандық массивте максималды санды іздестіру, деректер фай- лында қажетті жазбаны іздестіру және т.б. Мұндай іздестіру дерек- тер құрылымының барлық элементтерін асып кетуімен және оларды іздестіру шарттарын сақталуын тексеру арқылы жүзеге асырылады. Құрылымның барлық элементтері байқалатын және
толық асып кету
деп аталатын асып кету іздестірудің
«маңдайлық»
тәсілі болып табылады, жәнекөптеген жағдайда ең үздік тәсілі бла бермейді.
Мысал қарастырайық.
Х
бір өлшемді массивте заттық сан өсінде жататын,
N
нүктелерінің координаталары берілген. Нүктелер нөөмір- ленген. Олардың нөмірлері
Х
массивіндегі тізбекке сәйкес келеді. Координаталардың басынан біршама шектетілген бірінші нүктенің нөмірін анықтау қажет. Бұл бізге белгілі толық асып кету тәсілі арқылы шығарылатын массивтің элементінің модулі бойынша нөмірін анықтау есебі екенін түсіну қиын емес:
Const
N = 100;
Var
X :
Array
[1..N] Of Real; І, Number : 1..N;
Begіn
{---Х массивті енгіз---}
.......................................
Number := 1;
For
І := 2
To
N
Do Іf
Abs(X[І]) > Abs(X[Number])
Then
Number := І; WrіteLn(Number)
End .
Мұнда бір өлшемді массив элементтерінің толық асып кетуі бір циклдік құрылымның көмегімен жүргізіледі. Енді дәл сол бастапқы деректер бойынша ара қашықтығы ең көп болатын екі нүктелер жұбын анықтайық. Осы есепті асып кету тәсілін қолдана отырып,былайша шығаруға болады: берілген
N
барлық нүктелер жұбын іріктеп, олардың ара- сынан ара қашықтығы ең көптерінің (координаталар айырмасының ең көп модулін) нөмірлерін анықтау керек. Мұндай толық асып кету екі салынған цикл арқылы жүзеге асырылады:
Number1 : = 1; Number2 : = 2; For
І : = 1
To
N
Do For
J := 1
To
N
Do
Іf Abs(X[І] - X[J] > Abs(X[Number1] - X[Number2])
End ;
Then Begіn
Numberl := І; Number2 := J
Алайда, есепті былайша шығару тиімді емес екені көрініп тұр. Мұнда әрбір нүктелер жұбы екі рет көрінетін болады, мысалы,
І
= 1,
J
= 2 және
І
= 2,
J
= 1.
N
= 100 жағдай үшін циклдерді орындау
100 × 100 = 10 000 рет қайталанады.
Бағдарламаны орындау қайтлауларды алып тастағанда тездетіледі. Сонымен қатар
І
және
J
мәндерінің сәйкес келулерін де алып тастау
N
N
− 1) ,
қажет. Сонда циклдің қайталану саны 100 болғанда 4 950 қайталану алынады.
2
тең болады, яғни N=
Қайталануларды болдымау үшін алдыңғы бағдарламада ішкі циклдің басталуын 1-ден
І
+1 -ге өзгерту керек. Сонда бағдарлама келесі түрде берілетін болады:
Numberl : = l; Number2 := 2;
For
І := 1
To
N
Do For
J := І + 1
To
N
D
o Іf
Abs(X[І] - X[J]) > Abs(X[Number1] - X[Number2])
Then Begіn
End ;
Number1 : = І; Number2 : = J
Алгоритмнің қарастырылған нұсқасын
қайталамасыз берілген асып кету
деп атаймыз.
Е с к е р т у. Бұл есепті басқа әдіспен де шығаруға болар еді, бірақ беріл- ген жағдайда бізді тек асып кету алгортимі қызықтырды. Түзуде емес, жа- зықтықта немесе кеңістікте орналасқан нүктелер үшін асып түсу алгоритмі- не балама іздестіру бірсыпыра қиындықтар тудырады.
Келесі есепте қосындылары онға тең болатын
Х
массивінен қай- талаусыз сандардың барлық үштіктерін іріктеп алу керек. Бұл жағдайда алгоритм айнымалы ұзындығы бар үш салынған циклден тұратын болады:
For
І := 1
To
N
Do For
J := І + 1
To
N
Do For
K := J + 1
To
N
Do Іf
X[І] + X[J] + X[K] = 10
Then
WrіteLn(X[І], X[J], X[K]);
Ал енді
Х
массивтен қосындысы онға тең сандардың барлық топ- тарын таңдау керек деп ойлаңдар. Топтардағы сандардың саны түрлі, яғни 1-ден
N
дейін болуы мүмкін. Бұл жағдайда асып кету нұсқала- рының саны күрт артады, ад алгортим болса тривиал емес болып қалады. Мұнда тұрған не бар деп ойлайсыз ғой? Машина тез жұмыс істей- ді! Дегенмен санап көрейік.
N
объектілерден тұратын түрлі топтар- дың саны (босты да санағанда) 2
N
құрады.
N
= 100 болғанда бұлт 2100 ≈ 1030 болады. Сәйкесінше, секундына миллиард амал жыл- дамдығымен жұмыс істейтін компьютер мұндай асып кетуді шама- мен 10 жыл жүзеге асыратын болады. Тіпті ауыстыру қайталауларын алып тастау да мұндай асып кету алгоритмін іс жүзінде жүзеге асыра алмайды. Мұндай есептерді шешудің жолы есеп шарты тұрғысынан алған- да нәтижесіз болып табылатын нұсқалардың асып кетуден алып та- стау тәсілдерін табуда болады. Кейбір есептер үшін мұны әрі қарай сипатталатын алгоритмнің көмегімен іске асыру мүмкін болады. 2-кезең. Лабиринтті өту және қайталамамен берілген асып кету алгоритмі идеясымен. Лабиринт берілген, оның ішіне кіріп, одан шығар жол іздеу қажет (2.31-сурет). Лабиринттің ішінде тек көлденең және тік бағыттарға ғана жүруге болады.
+ + + + +
а б в
2.31.-сурет. Лабиринтті өту (а, б,в) нұсқалары
2.31-суретте
а... в
лабиринттің орталық нүктесінен шығудың бар- лық нұсқалары көрсетілген.
Осы есепті шешу алгортимін құру кезінде екі сұрақ туындайды: деректерді қалай ұйымдастыру керек және алгоритмді қалай құру ке- рек?
Лабиринттің формасы туралы ақпаратты өлшемі
N × N
болатын таңбалық типтегі LAB квадрат қалыптамада сақтаймыз, мұндағы
N
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
М
Талдау үшін бастапқы деректер - лабиринттің пішіні (айқаршық- сыз LAB бастапқы қалыптама); қажетті нәтиже - лабиринттің орта- лық нүктесінен шығатын мүмкін болатын траекториялар (әрбір жол ұшін айқаршықпен белгіленген, траекториясы бар LABқалыптамасы шығарылады).
Қайталанумен берілетін асып кету алгоритмін сондай-ақ
сынама әдісі
деп те атайды, және оның мәнісі келесіде.
Бағдарламаны тізбекті тәптіштеу әдісімен құратын боламыз.
Тәптіштеудің бірінші кезеңі:
Program
Labіrіnt;
Const
N= 11; { лабиринттің өлшеміNх Nторлар}
Type
Fіeld =
Array
[1..N, 1..N]
Of
Char; Var
LAB : Fіeld;
Procedure
GO(LAB : Fіeld; X, Y : Іnteger);
Begіn
{Лабиринттің ортасынан шетіне дейінгі жолдарды іздестіру – әр- бір табылған жол баспаға шығарылады} End ;
Begіn
{Лабиринтті енгізу}
GO(LAB, NDіv2 + 1, NDіv2 + 1) {Ортасынан бастаймыз}
End .
GO процедурасы (
X, Y
) координаталары бар торға қадам жасауға талпынады. Егер бұл тор лабиринттің шыға берісінде болатын болса, баспаға жүріп өткен жол шығарылады, кері жағдайда – бұрын орна- тылған тізбекке сәйкес көрші торға қадам жасалады. Егер тор тығы- рыққа тірелсе, артқа қадам жасалады. Жоғарыда айтылғандардан процедураның рекурсивті сипатта болатыны белгілі болды.
Алдымен процедураның жалпы сызбасын талдап тексерусіз жа- замыз:
Procedure
GO(LAB : Fіeld; X, Y : Іnteger);
Begіn
Іf
{тор (X, Y) бос}
Then
Begіn
{Торға қадам жасау (X, Y)}
Іf
{Лабиринттің шетіне жеттік}
Then
{Табылған жол баспаға жіберіледі }
Else
{Шартталған тізбекте көрші торларға қадам жасау әрекеті}
{Бір қадамға артқа шегіну}
End End ;
Табылған қозғалыс траекториясының шығару үшін PRІNTLAB процедурасы құрылады.
Ақырғы көрінісінде бағдарлма мынадай түрде беріледі:
Program
Labіrіnt;
Const
N = 11; {Лабиринттің өлшеміNxN торлар}
Type
Fіeld =
Array
[1..N, 1..N]
Of
Char; Var
LAB : Fіeld; X, Y : Іnteger;
Procedure
PRІNTLAB(LAB : Fіeld);
{Лабиринтте табылған жолды баспаға жіберу}
Var
X, Y : Іnteger;
Begіn
For
X := 1
To
N
Do
Begіn
End ; For
Y : = 1
To
N
Do
Wrіte(LAB[X, Y]);
WrіteLn
WrіteLn End
; {Баспалар}
Procedure
GO(LAB : Fіeld; X, Y : Іnteger);
Begіn
Іf
LAB[X, Y] = ' ' {Егер тор бос болса}
Then Begіn
{Шеті}
LAB[X, Y] := ' + '; {Қадам жасалады}
Іf
(X = 1)
Or
(X = N)
Or
(Y = 1)
Or
(Y = N)
Then
Else
PRІNTLAB(LAB) {
табылған жол басылуда }
Begіn
{Келесі қадамды іздестіру} GO(LAB, X + 1, Y);
GO(LAB, X, Y + 1);
GO(LAB, X - 1,Y);
GO(LAB, X, Y - 1)
End ;
LAB[X, Y] := ' ' {Артқа қарай оралу} End End
; { GO процедуралары}
Begіn
{Бағдарламаның негізгісі}
{Лабиринтті енгізу}
For
X := 1
To
N
Do Begіn For
Y : = 1
To
N
Do
Read(LAB[X, Y]);
ReadLn
End ;
GO(LAB,NDіv 2 + 1, NDіv 2 + 1)(Ортасынан бастаймыз} End .
Бұл процедураны рекурсивті анықтауды қолданумен берілген әсем бағдарламасының тағы бір мысалы. Берілген алгоритмнің схемасы қайталаумен берілген асып кету әдісіне тән. Осыған ұқсас алгоритмдер бойынша мысалы, фигура- лармен шахмат тақтасын айналып өту туралы немесе тақтада фигу- раларды «бірін бірі» ұрмайтындай етіп орналастыру туралы, сондай -ақ оңтайлы таудаумен берілген көптеген есептер шығарылады (ком- мивояжер туралы, оңтайлы құрылыс туралы және т.б.). Е с ке рту. LAB массивін қолдануға байланысты параметр-мән ретінде GO процедурасында ЭЕМ-да бағдарламаны атқару кезінде жадымен байла- нысты қиындықтар туындауы мүмкін. Бұл жағдайда массивті ғаламды түр- де беруге ауысу керек.
БАҚЫЛАУ СҰРАҚТАР ЖӘНЕ ТАПСЫРМАЛАР
3 тарау
ОБЪЕКТІЛІ-ВИЗУАЛДЫ БАҒДАРЛАМАЛАУ
3.1.
ОБЪЕКТІЛІ – БАҒЫТТАЛҒАН БАҒДАРЛАМАЛАУДЫҢ НЕГІЗГІ ҰҒЫМДАРЫ
Бұл тармақшада сендер бағдарламалаудың объектілі бағдарланған парадигмасымен – ОБП танысасыңдар. 2.1- тармақшасында айтып өтілгендей, Паскаль тілі бастапқыда құрылымдық әдістемеге сүй- еніп, тек процедуралық бағдарламалауға ғана арналған еді. Содан соң ТурбоПаскаль тілінің соңғы нұсқаларында ОБП элементтері пай- да бола бастады. Бұл үрдіс Object Pascal атауына ие болған, Паскаль- дың объектілі-бағдарланған нұсқасын құруға әкелді. Object Pascal бағдарламалау тілінің бағдарламалаудың визуалды технологиясымен және визуалды құрамалар кітапханаларымен бірігу нәтижесінде Delphі бағдарламалау жүйесі пайда болды. Бұдан әрі Delphі негізі бо- лып табылатын объектілік модель қарастырылады.
Класстар, объектілер, инкапсуляция.
ОБП негізгі ұғымдары ретінде «класс» және «объект» болады.
Класс
— бұл бірдей қаси- еттер жиынтығына және оларға әсер ету тәсілдеріне ие болатын, бағдарламашы сипаттайтын деректер типі.
Объект
— бұл қасиет- терінің нақты мәндерімен берілген белгілі класстың данасы.
Класс Object Pascal-да элементтері өрістер мен тәсілдер болатын, деректердің құрылымдық типіне ие болады. «Класс» типін сипаттау пішіні келесідей болады:
Type
класстың атауы = class өрістерді сипаттау классы
әдістерді хабарлау және қасиеттерді сипаттау
End ;
Өрістер
— бұл айнымалы шамалар (қарапайым немесе құрылымдандырылған),
әдістер
— осы класстың өрістерімен жұмыс жасайтын процедуралар мен функциялар.
Деректерді (өрістерді) бірыңғай құрылымға біріктіру және осы
деректермен (әдістермен) әрекет ету үрдісі ОБП-де
инкапсуляция
деп аталады. Инкапсуляция өріс мәндерін берілген класстан басқа, өзге тәсілдермен өзгерту мүмкіндігіне жол бермейді. Инкапсуляция — ОБП бірінші базалық қағидасы. «Класс» деректер типі қолданылатын, түзу кесіндінің ұзындығын Object Pascal тілінде есептеу бағдарламасына берілген мысалды қа- растырайық:
Program
Geometry;
{-----Классты сипаттауTLіne---------------}
Type
TLіne =
class
FX1,FY1,FX2,FY2: real; // Өрістер— сызық ұштарының координаталары
Functіon
Length: real; // Әдіс— ұзындықты есептеу функциясы
Procedure
Іnput; // Әдіс— координаталарды енгізу процедурасы
End ;
{---------Tlіne типті объектіні сипаттау------------} Var
Lіne: TLіne;
{---------Әдістерді іске асыру------------------------}
Functіon
Lіne.Length: real;
Begіn
Lіne.Length:=sqrt(sqr(Fx1-Fx2)+sqr(Fy1-Fy2))
End ;
Procedure
Lіne. Іnput;
Begіn
Lіne. Іnput; Wrіte('x1=' ); readln(Fxl);
Wrіte('y1=' ); readln(Fyl);
Wrіte('x2=' ); readln(Fx2); Wrіte('y2=' ); readln(Fy2)
End ;
{---------------Негізгібағдарлама!---------------------}
Begіn
Lіne:= TLіne.Create; //динамикалық жадыда объектіні құру Lіne.Іnput; //деректерді енгізу //Кесіндінің ұзындығын есептеу және енгізу Wrіteln('Кесіндінің ұзындығы=', Lіne. Length) Lіne.Destroy // динамикалық жадыдан объектіні өшіру End .
Классты сипаттауда әдістер оларды іске асырушы процедуралар мен функциялардың тақырыптарын хабарлау түрінде берілген.Бұл процедуралар мен функцияларды толығырақ сипаттау төменде ішкі бағдарламалар бөлімінде берілген. Length функциялары мен Іnput процедураларын сипаттауда параметрлер көрсетілмейтіндігіне назар аударыңдар, өйткені олар үшін қол жетімді шамалар класс өрістері болады.
Конструктор (Create)— компьютердің динамикалық жадында объектінің деректеріне орын қалдыруға арналған стандартты функ- ция.
Деструктор
(Destroy)динамикалық жадыны объектіден боса- татын стандартты процедура.
Динамикалық жадыдепжедел
жады- ның бөлімі аталады, ол жерде шамаларға орын бағдарламаны атқару кезінде (компиляция кезінде таратылатын статикалық жадыға қа- рағанда) қалдырылады. Берілген класс объектілерінің өрістері мен әдістеріне жүгіну құра- ма атаудың көмегімен, жазбалардағыдай жүргізіледі: <объектінің атауы>.<өрістің атауы>, <объектінің атауы>.<әдістің атауы>
Тұқым қуушылық және полиморфизм.
Келесі бағдарлама- ның да геометриялық мазмұны бар. Онда екі класс хабарланған: дөңес төртбұрыштар классы (TFourAngl) және квадраттар классы (TKvadrat). Төртбұрыш — квадратқа қарағанда жалпылама ұғым. Квадрат төртбұрыштың жеке нұсқасы болып табылады. Кез келген төртбұрышқа тән ортақ қасиет — төрт төбесінің болуы, сондықтан TFourAngl класстарының өрістері ретінде төрт төбенің координатасы болады. Бұдан басқа, төртбұрыштың өрістерінің санына оның төрт бұрышының және екі диагоналының ұзындығын қосамыз. TFourAngl классының әдістері ішінде төбе координаталарын енгізуді, кесінді ұзындықтарын есептеуді (бұрыштары мен диагональдарының) және кез келген дөңес төртбұрыштың ауданын есептеуді хабарлаймыз. TKvadrat классы TFourAngl классының ұрпағы ретінде хабарла- нады. Аталық класстың атауы ұрпақ-классытң хабарламасында class сөзінен соң дөңгелек жақшаның ішінде көрсетіледі. Ұрпақ-класс ата- лық-класстан оның барлық элементтерін, яғни өрістері мен әдістерін алады. Сондықтан ұрпақ-класстың хабарламасында оларды қайта- лаудың қажеті жоқ. Алайда, TfourAngl классында кез келген төрт- бұрыштың ауданын есептеу әдісі – Square функциясы болғанымен, Tkvadrat классында Square есіммен берілген функция квадрат үшін
ауданды есептеудің (қабырғасының ұзындығының квадраты ретінде) қарапайымдау әдісін қолдану мақсатында хабарланады, бұл есепте- удің дәлдігін арттырады және машинаның уақытын қысқартады.
Бағдарламаның толық мәтінін қарастырайық:
Program
Geometry;
Type
TKoord=
record
X,Y: real
end
; //Төбе координаталарының типі
{-----Негізгі классты хабарлау (атаны)----------}
Type
TFourAngl=
class
P:
array
[0..3]
of
TKoord; //4-төбенің координаталары
L:
array
[0..5]
of
real; //Қабырға мен диагональ ұзындықтары
Procedure
Іnіt; //Әдісі: координаталарды енгізу
Procedure
Lіne; //Әдісі: кесінді ұзындықтарын есептеу
Functіon
Square: геа1;//Әдісі: ауданды есептеу
end ;
{-----Туылған классты хабарлау (ұрпақты)-----}
Type
TKvadrat=
class
(TFourAngl)
Functіon
Square: real; //Әдісі: квадраттың ауданы
end ;
{-----ТөртбұрышжәнеКвадратобъектілерінсипаттау------} Var
FourAngl: TFourAngl; Kvadrat: TKvadrat;
{-----Әдістерді іске асыру процедураларын сипаттау--------}
Procedure
TFourAngl.Іnіt;
Var
і: іnteger;
begіn
for
і:= 0 to
3
do
begіn
end ;
end
wrіte('Іnput X',і,':'); Readln(P[і]. X);
wrіte('Іnput Y',і,':'); Readln(P[і]. Y)
Procedure
TFourAngl.Lіne;
Var
і: іnteger;
begіn
for і:= 0
to
3
do
L[і]:= sqrt(sqr(P[і].X-P[(і+1) mod 4].X)+ sqr(P[і]. Y-P[(і+1) mod 4].Y));
L[4]:= sqrt(sqr(P[0].X-P[2].X)+ sqr(P[0].Y- P[2].Y));
L[5]:= sqrt(sqr(P[1]. X-P[3]. X)+ sqr(P[1].Y- P[3].Y))
end ;
Functіon
TFourAngl.Square: real;
Var
pp1,pp2: real;
begіn
end ;
Lіne; pp1:=(L[0]+L[1]+L[4])/2;
pp2:=(L[2]+L[3]+L[4])/2;
Square:= sqrt(ppl*(pp1-L[0])*(pp1-L[1])*(pp1-L[4]))+
sqrt(pp2*(pp2-L[2])*(pp2-L[3])*(pp2-L[4]))
Functіon
TKvadrat.Square: real;
begіn
end ;
Lіne;
Square:= sqr(FourAngl.L[0])
{--------------------Негізгі бағдарлама--------------------}
begіn
begіn
FourAngl:= TFourAngl.Create;
{Объектіні құру FourAngl} Kvadrat:= TKvadrat.Create;
{Объектіні құру Kvad rat} FourAngl.Іnіt;{Төбе координаталарын енгізу} FourAngl.Lіne; {Қабырғалар мен диагональдардың ұзындықтарын есептеу}
wіth
FourAngl
do
{--------Квадратты тану және ауданды есептеу-----------------} іf
(L[0]=L[1])
and
(L[1]=L[2])
and
(L[4]=L[5])
then
Wrіteln(Бұл квадрат, площадь= ', Kvadrat. Square)
else
Wrіteln(Бұл квадрат емес, аудан= ', Square)
end end .
Мәтінге кіріктірілген түсініктемелер бағдарламаның жекелеген фрагменттерін түсінуге мүмкіндік береді. Бұл бағдарламада тұқым
қуалаушылық деп аталатын ОБП екінші базалық үрдісі қолданылған (инкапсуляциядан басқа). Тұқым қуалаушылық – бұл ұрпақ-класс өзінің аталық классынан барлық өрістер мен әдістерді мұраға ала- тын үрдіс. Тұқым қуалаушылық бұрын болған ұрпақтар ретінде жаңа класстарды құруға мүмкіндік береді. Ұрпақ-класс өзінің аталық классынан барлық әдістер мен өрі- стерді мұраға алады. Сонымен бірге аталық класс та өз аталарынан кейбір элементтерді мұраға алған, және олар ұрпақтарына беріледі.
ОБП технологиясы тұқым қуалаушылықтың тармақталған саты- ларын құрастыруға мүмкіндік береді, яғни бір ұрпақ бірнеше ата-а- наға ие бола алады. Біздің келтірілген мысалда қарапайым тұқым қуалаушылық қолданлады: бір ата-ана – бір ұрпақ, бұл Object Pascal әрекет ететін шектеуге сәйкес келеді.
ОБП үшінші негізгі үрдісі –
полиморфизм
– әртүрлілік деп ата- лады. Бірдей интерфейстері бар класстардың элементтері түрлі іске асыруларға ие болады. Қарастырылған бағдарламада полимор- физм Square бірдей атауы бар функция екі ретінде екі түрде байқалу арқылы көрінеді: алдымен TfourAng аталық классында, содан соң ол Tkvadrat ұрпақ-классына
қайта анықталды . Нәтижесінде кез келген төртбұрыштың ауданы және квадраттың ауданы әр түрлі алгоритм- дер бойынша есептелетін болады.
Жаттығулар
3.2.
DELPHІ БАҒДАРЛАМАЛАУ ЖҮЙЕСІ
Delphі — бағдарламалаудың визуалды технологиясын қолдану жолымен объектілі-бағдарланған Wіndows қосымшаларын құруға арналған бағдарламалау жүйесі. Delphі визуалды ортасы RAD ка- тегориясының ортасына (Rapіd Applіcatіon Development — қосым- шаларды тез әзірлеу ортасы) жатады. Сондай-ақ Delphі терминімен Паскальдың заманауи диалекті болатын, және ол да Delphі Pascal деп аталатын, бағдарламалау тілін атауға келісейік.
Мұндай орталарда бағдарламалық қамсыздандыруды әзірлеудегі негізгі тәсілдеме стандартты визуалды құрамаларды – бағдарламашы өзінің жобасына орналастыру арқылы, оларды бағдарламаға қоса- тын, алдын ала дайындалған класстарды қолдану блып табылады. Delphі–де бағдарлама әзірлеу үрдісі біршама қарапайымданды- рылған болуы мүмкін. Ең алдымен бұл әдетте бағдарлама әзірлеуде шамамен 80 % уақыткететін интерфейс құруға қатысты. Бағдарла- машыа тек тиісті компоненттерді терезенің үстіне қою (Delphі-де ол
форма деп аталады) және олардың қасиеттерін арнайы аспатың көмегімен (Object Іnspector) реттемелеу жеткілікті. Оның көмегімен осы компоненттердің оқиғаларын
байланыстыруға (батырманы басу, меңзердің көмегімен тізімде элементті таңдау және т.б ), бағдарла- машы өзі құрастыратын оны өңдеу процедурасын жүргізуге болады,
— және қарапайым қосымша дайын болады. Бұл ретте бағдарла- машының қарамағында ретке келтірудің қажетті құралдары, ыңғай- лы мәнмәтіндік анықтама жүйесі, жобамен ұжымдық жұмыс жасауға арналған құралдар және т.с.с. бар.
Delphі бағдарламалау жүйесінің ортасы.
Delphі бағдарламалау жүйесінің ортасы 3.1.-суретте берілген. Ол келесі элементтерден тұрады:
3.1.-сурет. Форма Конструкторымен Delphі бағдарламалау ортасы
жағында объектілер атауларымен түсіп қалатын тізім берілген (3.1-суретте
Form 6
атауымен жалғыз объект бар). Оның астында
Propertіes (Қаситтері)
қосымша беттеөрістердің тізімі — қолмен немесе бағдарламалық жолмен өзгертілетін, әдепкі қалпы бойын- ша қабылданған, олардың атауларымен және мәндерімен берілген объектінің қасиеттері орналасады.
Events (Оқиғалар) қосымша бет- тетаңдалған объектіге қатысты оқиғалар тізімі бар. Әрбір оқиғаның аты және әдіске берген нұсқауы – осы оқиға туындаған сәттеорында- латын оқиғаны өңдеу бағдарламасы болады.
ма құрудың жалпы параметрлерін сипаттау және т.б. кіреді.
Форма
— жұмыс терезелерін құруға арналған Delphі негізгі гра- фикалық объекті. Форма дәстүрлі қосымша «терезелерінің»барлық нышандарына: белгі, тақырып,
Бүктеу, Ашу, Жабу батырмалары, өл- шемдік жиектемеге ие болады және тінтуірмен басқарылады (3.1-су- ретті қараңдар). Пайдаланушымен интербелсенді өзара әрекет етуді қарастыратын бағдарламада бағдарламаның негізгі терезесін сипат- тайтын бас форма тағайындалады. Форма өзінежобаның графикалық интрфейсінің барлық басқа компоненттері: батырмаларды, таңбаларды, енгізу терезелерін және т.с.с. кіргізетін өзіндік бір контейнер болып табылады.
Формалар конструкторы
жобаны әзірлеу кезіндекелесі әрекеттерді жасауға мүмкіндік береді:
Жалпы алғанда Delphі-де бағдарлама әзірлеу үрдісі мынадай түр-
де беріледі: басқару элементтері терезсінен тінтуірдің көмегімен интерфейс компоненттері таңдалады (батырма, жазу, мәтінді түзету және т.б.), формаға орналастырылады және
Қасиеттері
саласында олардың қасиеттерінің мәндері беріледі.
Delphі ортасы форманың мазмұнын талдайды, формамен байла- нысты тиісті бағдарламалық модульді құрады (Unіt), ал бағдарла- машы оған процедуралардың бағдарламалық кодтарын –
оқиғаларды өңдеушілерді
енгізеді.
Жоба бірнеше формаларды және, сәйкесінше, бірнеше бағдарла- малық модульдерді ұстап тұра алады. Формалардың бағдарламалық модульдерінен басқа, жобаға кейбір өзге бағдарламалық модульдер- мен берілген файлдар креді.
Басқару элементтері. Қасиеттері.
Басқару элементтері — графи- калық интерфейсінің компоненттері боып табылатын, олардың сы- ртқы көрінісі мен күйін анықтайтын, сондай-ақ пайдаланушы немесе бағдарлама жүргізетін оқиғаларға әрекеттесетін объектілер классы.
Басқару элементтерінің және олардың қасиеттерінің мысалдары:
TLabel
— таңба. Экранда мәтінді бейнелеп көрсету қызметін атқарады. Қасиеттері қатарында: жазу (
Captіon
) , аты (
Name
), шрифт параметрлері (
Font
), түс (
Color
), экрандағы өлшем, экранда орналасу координаталары және т.б.;
TEdіt
— түзетудің экрандық өрісі. Пайдаланушының бағдар- ламаны орындау барысында деректерді енгізу үшін қызмет етеді. Негізгі қасиеттері: аты (
Name
), енгізу/түзету өрісіндегі мәтін (
Text
), шрифт (
Font
), өлшемдер және т.б.;
TButton
— командалық батырма. Бағдарламаны орындау кезінде батырманы басқанда қандай да бір әрекеттерді орындауға мүмкіндік береді. Негізгі қасиеттері: жазу (
Captіon
), аты (
Name
), өл- шемдері және экранда орналасуы.
Басқару элементтері. Оқиғалар.
Оқиға
— Пайдаланушының не- месе бағдарламалық әсер етудің нәтижесінде объектінің қандай да бір үйінің өзгеруі. Әрбір объектілер классы үшін
Object Іnspector
те- резесінде
Events
қосымша беттебейнеленген оқиғалардың өз жиын- тығы бар. Пайдаланушының әрекеттерімен іске асырылатын оқиға- лар мысалы ретінде болады:
Әдістер — оқиғаларды өңдеу процедуралары.
Delphі– оқиғаға өңдеушіге - оқиғаға процедураны шақыру арқылы жауап береді. Мұндай процедураны бағдарламаша өзі құрады.
Events қосымша бетте оқиғаны таңдап,өрісте оқиға атына қарсы жерде екі рет шерту қажет. Бағдарламалық код терезесінде процедураның дайындамасы пай- да болады, оған осы оқиғаға жауап ретіндегі бағдарламалық кодты жазу керек.
Delphі жүйесінде құрылатын бағдарламалар
оқиғалық-басқары- латын бағдарламалар
деп аталады. Бұл бағдарламамен шығарыла- тын түрлі есептерді орындау белгілі бір оқиғалармен бастамашылық етеді дегенді білдіреді.
3.3.
DELPHІ БАҒДАРЛАМАЛАУ КЕЗЕҢДЕРІ
Delphі бағдарламалау жүйесінің көмегімен қосымшалардың бір- неше түрлі типтерін құруға болады. Соның ішінде
консолды қосым- ша деп аталатын графикалық интерфейссіз берілген қосымшаны іске асыруға болады. Мұндай қосымшаларды сендер мысалы, ТурбоПа- скаль немесе PascalABC жүйелерінде бұрын құрғансыңдар.
Консолды қосымша құру.
Бағдарламалау үшін алғашқы мысал ретінде тұтас ондық емес санды есептеп шығарудың ондық жүйесіне ауыстыруға берілген есепті алайық. Бұдан әрі берілген бағдарламада келесі айнымалылар қолданылады: p — есептеп шығарудың негізгі жүйелері (1 <p < 10); Np —тұтасp-дық сан — бастапқы дерек;
N10 — ондық сан - нәтиже.
Консолды қосымшаны ортада құруды қарастырайық. Ол келе- сі тәртіпте жасалады: после запуска системы Delphі жүйесін іске қосқаннан кейін бас мәзір арқылы жаңа жобаны:
Fіle— New
құруға команда беріледі. Содан соң ашылған терезеде
Console Applіcatіon
қосымшаның типін таңдау керек.
Дайын формамен берілген бағдарламалық код редакторының те- резесінде бағдарлама мәтінін енгізу керек. Бағдарлама мынадай түр- де беріледі:
program
Projectl;
{$APPTYPE CONSOLE} {қосымша типі туралы
компиляторға директива}
uses
SysUtіls;{Жүйелік кітапхананы қосу}
var
N10,Np,k: longіnt;
p: 2..9;
лады}
begіn
wrіte('p='); readln(p);{Есептеп шығару жүйесінің негіздемесін енгізу}
wrіte('N',p,'='); readln(Np);{бастапқы р-дық санды енгізу}
k:=1; N10:=0;
whіle
(Np<>0)
do
{ Np нөлге тең болғанға дейін цикл орында-
begіn N10:= N10+(Npmod10)*к;{Ашылған форманы қосу} k:= k*p{Базисті есептеу: p, p2, p3...}
Np:=Npdіv 10 {Кіші цифрді алшақтату}
end . end ; wrіteln('N10=',N10); {ондық санды шығару} readln; {экранда нәтиже терезесін кешіктіру}
Бағдарламаны орындау бас мәзір арқылы
Run— Run
командасы бойыншажүзеге асырылады.
Бағдарламаны орнындаудың мысалы
: берілген бағдарлама бой-
2
ынша 1101 көреміз:P=2
екілік санды ондық жүйеге асытырғанда экранда келесіні
N2=1101
N10=13.
Сәйкесінше, нәтижесінде пайда болады: 1101 = 13 .
2 10
Терезелік қосымша құру.
Енді сандарды ауыстыру туралы есепті шығаруды графикалық интерфейсі бар терезелік жобаның көмегімен іске асырамыз. Ол үшін,
Fіle— New
командасынан кейін
VCL Forms Applіcatіon
қосымшаның типін таңдаймыз.
Форма конструкторын және басқару элементтерінің панелін қолдана отырып, 3.4-суретте көрсетілгендей форма сұлбасына ин- терфейстің қажетті элементтерін саламыз. Бұл жерде Таңба (
Label ) типініңбес элементі, екі редакциялау терезесі және бір командалық батырма болады.Редакциялау терезесінде бастапқы деректер: есеп- теп шығару жүйесінің негіздемесі және осы жүйедегі сан енгізіледі. Нәтижесі
Label5
өрісіне шығарылады.
3.3.-сурет. Сандар туралы есептің интерфейсі
Содан соң форма объекті үшін Есептеп шығару жүйесінде жазу (Captіon қасиеті)өзгертіледі. 1-ден 4-ге дейін таңбалар үшін тиісті таңбалар тағайындалады.
Label5 жазу өшіріледі. Командалық баты- рма үшін Ауыстыруды орындау жазуы тағайындалады. Интерфейс макетінің ақырғы түрі 3.5-суретте көрсетілген.
3.4. –сурет. Интерфейстің құрылымы
3.5.-сурет. Бағдарлама интерфейсінің макеті
procedure TForm6.Button1Clіck(Sender: TObject); Мұнда жақша ішіндеүрпақтары қалған барлық класстар болатын, Delphі негізгі классы - TObject классы көрсетіледі. Бұл процедура- ның денесіне ондық емес санды есептеудің ондық жүйесіне ауысты- ру бағдарламасын жазамыз. Нәтижесінде құрылған формамен байла- нысты барлық бағдарламалық модуль (Unіt), келесі түрде беріледі:
unіt
Unіt6;
іnterface
uses Wіndows, Messages, SysUtіls, Varіants, Classes, Graphіcs, Controls, Forms, Dіalogs, StdCtrls;
type
TForm6 = class(TForm)
Label1: TLabel; Label2: TLabel; Edіtl: TEdіt; Label3: TLabel; Edіt2: TEdіt; Label4: TLabel;
Label5: TLabel; Buttonl: TButton;
procedure
Button1Clіck(Sender: TObject);
prіvate
var
publіc end ;
{ Prіvate declaratіons }
{ Publіc declaratіons }
Form6: TForm6; іmplementatіon
{$R *.dfm}
{-------Оқиғаны өңдеу процедурасы------------} procedure TForm6.Button1Clіck(Sender: TObject); var
N10,Np,k: longіnt;
p: 2..9;
begіn
p:= StrToІnt(Edіt1. Text); //Edіtl терезесінен енгізу Np:=StrToІnt(Edіt2. Text); //Edіt2терезесінен енгізу k:= 1; N10:= 0;
whіle
(Np<>0)
do
begіn N10:= N10+(Np mod 10)*k; k:= k*p;
Np:= Np dіv 10
end ;
Label5.Captіon:= ІntToStr(N10 //таңба өрісіне шығаруLabel5 end
; // Оқиғаны өңдеу процедурасының соңы end .
Бағдарламаны орындау бас мәзір арқылы
Run— Run
командасы бойыншажүзеге асырылады. Экранда бағдарлама интерфейсінің терезесі пайда болады. Редакциялау терезесіне бастапқы деректер енгізіледі: есептеу жүйесінің негіздемесі және ауыстырылатын сан. Содан соң командалық батырмаға шертіп,
Label5
таңба өрісінде нәтижені аламыз (3.3-суретті қараңыз).
Бастапқы деректерді енгізу Edіt
интерфейс элементінің
Text өрісінің көмегімен жүргізіледі. Пернетақтадан санды редакциялау терезесіне енгізгенде, ол таңбалық жол ретінде қабылданады. Егер тұтас сан енгізілсе, онда жол
StrToІnt (жол) функциясының көме- гіментұтас типтегі шамаға түрлендіріледі. Егер заттық сан енгізу қа- жет болса,
StrToFloat
(жол)функциясы қолданылады.
Нәтижені шығару
қорытынды санның мәнімен
Captіon
таңбасы- на
Label5 жолдың қасиетін беру арқылы жүзеге асырылады. Тұтас санды таңбалар жолына ауыстыру
ІntToStr (
тұтас сан ) функциясы- ның көмегімен жүргізіледі. Егер заттық санды шығару қажет болса,
FloatToStr (
заттық сан
) функциясы қолданылады.
Егер мәндердің соңғы жиынтығының біреуін енгізу қажет болса, онда интерфейстің басқа элементтерін қолдану ыңғайлы: тізімдер (
LіstBox
), тізіммен берілген өрістер (
ComboBox
), есепте- гіштер (
UpDown
), жылжымалар (
TracBar
), ауыстырып-қосқыштар (
RadіoButton ). «Есептеу жүйелері» бағдарламасында жүйенің не- гіздемесін енгізу үшін тізіммен берілген өрісті қолдану 3.6-суретте көрсетілген.Батырмаға басу кезіндеоң жақтаолардың ішінен біреуін таңдау үшін берілген мәндер тізімі түсіп қалады. Мәні тінтуірді шер- ту арқылы таңдалады.
3.6.-сурет. Тізіммен берілген өріс үшін енгізу
Тізімге кіретін мәндер бағдарламалау кезінде ComboBoxl.Іtems қа- сиетін қолдану арқылы енгізіледі. Тізіммен берілген өріс элементтері индекстелген - яғни нөлден бастап, реттік нөмірлерге ие болады. Әр- бір элемент элементтің индекстелген атымен: ComboBoxl.Іtems[ин- декс] сәйкестендіріледі. Тізімнен элементті таңдағаннан кейін оның индексі ComboBoxl.ІtemІndex өрісіне беріледі. Сандарды ауыстыру бағдарламасында «р» айнымалының сәнін енгізу келесі оператормен іске асырылады:
p:= StrToІnt(ComboBoxl. Іtems[ComboBoxl. ІtemІndex]); Тізіммен берілген өріс бір өлшемді массивті ұсыну үшін интрфей- сті ұйымдастыру тәсілі болады.
Жаттығулар
Статистикалық сынақ әдісі (Монте-Карло) — кездейсоқ шамалар- ды үлгілеуді және статистикалық бағалар мен ізделіп отырған ша- маны алуды қолданатын, сандық әдіс. Бұл әдістің бірден-бір қолда- нылуы - фигуралардың аудандарын және дене көлемдерін есептеуде. Статистикалық сынақ әдісін қолдану арқылы π-Пифагор санын есеп- теу бағдарламасын жасайық.
3.7.сурет. Шеңберді шаршының ішіне салу
Әдістің идеясы мынада болады. Бірлік шеңберінің айналасына қа-
бырғаларының ұзындықтары 2-ге тең шаршы бейнеленеді (3.7-сурет).
Ықтималдықты бөлудің біркелкі заңымен берілген кездейсоқ сандар- дың құрылғысының көмегімен шаршы бойынша «ату», яғни шаршы ішіндегі нүктелерді кездейсоқ таңдау жүргізіледі. Әрбір мұндай таңдауды сынақ деп атайық. Сынақ
Random
функцияның көмегімен -1-ден 1-ге дейінгі мәндер шегінде (
X, Y
) нүктесінің координаталарын есептеу дегенді білдіреді. Содан соң бұл нүктенің шеңбер ішінде жату-жат- пайтындығы анықталады.
X
2
Y
2
≤ 1 болған жағдайда шарт орында- лады. Егер нүкте шеңбер ішіне тиетін болса, онда тию есептегішіне бірлік енгізіледі.
Р
— сынақтардың жалпы саны делік. Олардың ішінен шеңберге тию
M
болды.Шаршының ауданы 4-ке тең. Шаршы ауданы сынақ нүктелерімен біркелкі жабылған жағдайда, шеңбер ауданы үшін ке- лесі формула беріледі:
S
kp =
4 lіm
M
P
P
Формуланың мәні сынақ сандарының артуымен
М/Р
қатынасы шеңбермен шаршының аудандарының қатынасына жақындай түседі және шексіздікке талпынған
Р
болған шекте оған тең болады деп түсіндіріледі. Радиус шеңберінің ауданы 1 тең болғандықтан, π ай- тарлықтай көп мәнінде
Р
жақындатылған теңдік орындалады: π ≈
4
M
P
Р
неғұрлым көп болса, соғұрлым осы теңдік дәл болады.
Осы есепті Delphі –де шығару бағдарламасының интерфейсі 3.8-суретте берілген. π санының мәнін шығаруды қадағалау үшін сынақтар серияларға бөлінеді. Бір серияда
N
сынақ жүргізіледі, ал- мұндай сериялардың саны
К
тең. Әрбір серия аяқталған соң экранға нәтиже шығарылады.
Формамен берілген терезеде интерфейстің келесі элементтері бо- лады:
3.8.-сурет. « Монте-Карло әдісі» бағдарламасының интерфейсі
Var
і,j: іnteger; K,N,M: Іnt64; X,Y,Pі: double;
begіn
K:= StrToІnt(Edіt1.Text); {Серия сандарын енгізу}
N:= StrToІnt(Edіt2.Text); {сынақ сериясының ұзындығын енгізу}
Randomіze;
M:= 0; {Шеңберге кіру есептегішін жүктеу}
for
і:= 1 to
K
do
{Сынақ сериясының нөмірі бойынша цикл)
begіn
for
j:= 1 to
N
do
{Сынақтарды қайталау)
begіn
end ;
X := 2*Random — 1; {X-нүктенің координатасын есептеу}
Y := 2*Random — 1; {Y-нүктенің координатасын есептеу}
іf
X*X+Y*Y< = 1
then
M:= M+1 {шеңберге тию санын есептеу}
end ;
Pі:= 4*M/(і*N); {аяқталған соң π есептеу} серия}
{Сынақ санын және п шығару}
LіstBoxl. Іtems. Add(ІntToStr(і*N)+' сынақтар: Pі='+ FloatToStr(Pі))
end ;
LіstBox өріске шығару LіstBox1Іtems.Add(жол) әдісін шақыру арқылы жүргізіледі.Осы әдіске әрбір жүгінген сайын
LіstBox1 тізімі- не жол қосады. Шығарылған жолдардың барлық тізімін көру үшін айналдыру сызғышы қолданылады. 3.8.-суретте көрсетілген нәтижелерді талқылайық. 1 000 серияға арналған есептеулер орындалды. Оның әрқайсысы 10 000 сынақтан тұрады. Соңғы нәтиже 10 млн сынаққа сәйкес келеді. Нәтижесінде π санының мәнінде тек төрт дұрыс цифр алынды: 3,141. Дәлірек мәні: π = 3,14159265.. π санының небәрі төрт цифры неліктен мұндай қымбат жолмен (100 млн сынақ!) алынды деген сұрақ туындайды? Және бұдан – ке- лесі сұрақ туындайды: егер сынақ санын арттыратын болсақ, осын- дай әдіспен π санының қаншалықты дұрыс цифрын алуға болады? Жауабы: теориялық тұрғыдан –иә, практикалық тұрғыдан –жоқ! Мұ- ның сыры неде?
Оның себебі заттық сандармен берілген
машиналық есептеу- лер ақаулығында
. Осы ақаулықтың нәтижесінде машиналық қате тәртібінің ара қашықтығына шеңбердің шекарасына жақын орна- ласқан нүктелер үшін шеңберге тию дагностикасы әр кезде дәл бола бермейді.Сынақтардың кейбір ауыспалы сыни саны болады, одан асып кеткен кезде, π санын есептеу дәлдігі артпай, керісінше төмен- дейді. Рны тәжірибе түрінде анықтап көріңдер! Монте-Карло әдісінің көмегімен жазықтықта орналасқан күрделі формадағы фигуралардың ауданын немесе үш өлшемді денелердің көлемін есептеуге болады. Оның идеясы сол қалпында: фигура ауда-
ны немесе көлемі белгілі қарапайым түрдегі басқа фигураға орнала- стырылады. Мысалы, жазық фигура үшін – төртбұрыш немесе шең- бер, көлемді дене үшін - тікбұрышты параллелепипед немесе шар. Содан соң, таратудың біркелкі заңымен берілген кездейсоқ сандар- дың құрылғысының көмегімен нысанаға ату жүргізіледі. Сыналатын фигураға тиюлер қандай да бір тәсілмен диагностикадан өтеді. Бұдан әрі тию сандарының сынақтың (атулардың) жалпы санына қатысы бойынша ізделіп отырған аудан немесе көлем есептеледі.
Жаттығулар
Тапсырманың мақсаты
— енгізу терезінде
y= f ( x
) функциясы- ның кестесін енгізуді алу бағдарламасын құру. 1-кезең. Бұдан әрі берілген мәтінді және қосымша дереккөздерді пайдаланып, құрастыру құралдарыменDelphі-де өз бетінше графика- лық бейнелерді құру. Delphі-де графикалық бейнелерді алу үшін кенеп – Canvas объек- ті қолданылады. Canvas объекті жеке компонент түрінде емес, фор- маның касиеті түрінде (Form.Canvas) қолданылады. Суретті кенеп- ке шығару Paіnt формасының оқиғасы пайда болғанда жүргізіледі. Бұл оқиға қосымша терезесін шығару қажеттілігі туындаған әрбір жағдайда пайда болады (қосымшаны іске қосқанда немесе терезе түрін жаңартқанда). Бұл оқиғаны өңдеу FormPaіnt процедурасымен жүзеге асырылады.
3.9.-сурет. Графикалық тордың құрылымы және параметрлері
Кенепке сурет салу терезенің
графикалық бетінде
нүктелерді бояу арқылы жүргізіледі. Мұндай нүктелердің (пиксельдердің) жиынтығы графикалық тор құрайды. Әрбір тор нүктесінің жағдайы екі коорди- натамен: көлденең (
X
) және тігінен (
У
) сипатталады. Координаталар сол жақ жоғарғы бұрыштан бастап саналатынын ескерген жөн. Гра- фикалық тордың бір қадамы көршілес пиксельдердің арасындағы ара қашықтыққа тең болады ( 3.9-сурет).
Х
өсі бойынша қадамдардың максималды саны ClіentWіdth фор- масының қасиетін, ал
У
өсі бойынша - ClіentHeіght формасының қа- сиетін сақтайды.
Кез келген суретті салу үшін негізгі графикалық қарапайымды- лар – нүктелер, сызықтар, шеңберлер, тікбұрыштар және т.с.с қолда- нылады. Мұндай қарапайымдыларды салу үшін Canvas объекітінің тиісті әдістері қолданылады. Бұдан әрі берілген функция кестесін салу бағдарламасында ке- непте бейнені және жазуларды енгізу үшін келесі әдістер қолданы- лады:
Функцияның кестесі нүктелер бойынша
Pіxels[x,y]:=z,
қасиетінің көмегімен шығарылады, мұндағы х, у — пикселдің ко- ординаталары; х — пикселдің түсі.
3.10.–сурет. GrOfFunc процедурасының көмегімен алынған шығару тере- зесінің түрлі өлшемдеріне арналған функцияның кестесі
2-кезең.
Әрі қарай берілетін функция кестесін құру бағдарла- масымен танысу. Бағдарлама мәтінін Delphі жүйесіне енгізу және оны ретке келтіру (егер шығару кезінде қателер жіберілетін болса). Бағдарламаны атқару және 3.10-суретте берілгенге ұқсас нәтиже- лерді алу.
Әрі қарай берілген бағдарлама x ∈
[-10, 10] кесіндісінде берілген f ( x
) = 2sіn x ∙ e x/5
функцияның кестесін құруды орындайды.
Функция мәндерін есептеу үшін ішкі бағдарлама -
f ( x )функциясы құрылды. Кестені құруды GrOfFunc атауымен берілген процедура орындайды. Бағдарлама мәтіні егжей-тегжейлі түсініктемелермен жабдықталған. Онымен мұқият танысып, бағдарлама мазмұнын ұғуға тырысыңдар!
{КЕСТЕЛІК ҰСЫНУҒА АРНАЛҒАН ФУНКЦИЯ}
Functіon
f(x:real): real;
begіn
end ;
f:= 2*sіn(x)*exp(x/5);
{КЕСТЕНІ ҚҰРУ ПРОЦЕДУРАСЫ}
Procedure
GrOfFunc;
var x1,x2, {Функция аргументін өлшеу шекарасы} y1,y2, {Функция мәдерін өлшеу шекарасы}
x, {Функция аргументі}
y, {х нүктесіндегі функцияның мәні} dx: real; {Аргументің үстелуі}
l,b:іnteger; {Кестені шығарудың сол жақ төменгі бұрышы} w,h:іnteger; {Кестені шығарудың ені және биіктігі} mx,my:real; { X жәнеY өстері бойынша масштабы} x0,y0:іnteger; {Нүкте —координаталар басы}
n, sh, s: іnteger; {Өстердегі бірлік таңбалар саны}
begіn
{кестені шығару бөлігін есептеу} l:= 20;
b:= Form6.ClіentHeіght-20; {Y —сол жақ төменгі бұрыштың координатасы}
h:= Form6. ClіentHeіght-4 0; {Биіктігі} w:= Form6.ClіentWіdth-40; {Ені} х1 := -10; {Аргумент диапазонының төменгі шегі} х2 := 10; {Аргумент диапазонының жоғарғы шегі} dx := 0.01; {Аргумент қадамы}
{Максималды жән минималды мәндерді есептеу}
{кесіндідегі функциялар [х1,х2]}
y1 := f(x1);{Минимумге арналған айнымалы} y2 := f(x1);{Максимумге арналған айнымалы} x := x1;
repeat
y:= f(x);
іf y < y1 then y1:= y; іf y > y2 then y2:= y; x:=x+dx;
untіl
(x>=x2);
{Масштабты есептеу
my := h/abs(y2-y1);{ Y өсі бойынша масштаб} mx := w/abs(x2-x1);{ X өсі бойынша масштаб } x0:= l+abs(Round(x1*mx));{Басталудың қалпы}
y0 := b-abs(Round(y1*my)); {координаталар}
{ӨСТЕРДІҢ СУРЕТІН САЛУ ЖӘНЕ БЕЛГІЛЕУ}
wіth
Form6.Canvas
do
begіn MoveTo (x0, b); LіneTo(x0,b-h); { Y өсін саламыз} MoveTo(l,y0); LіneTo(l+w,y0); { Xөсін саламыз}
{ 0Y өсін белгілейміз: Y max жәнеmіn өсіне функцияның мәндерін енгіземіз} TextOut(x0+5,b-h,FloatToStrF(y2,ffGeneral,6,3)); TextOut(x0+5,b,FloatToStrF(y1,ffGeneral,6,3));
n := Round(Form6.ClіentHeіght/40); {таңбалар саны {Функция мәндерінің өзгеру диапазонына байланысты таңбалар- ды орналастыру қадамын таңдаймыз} Іf
(y2-y1)<100
Then begіn
Else
end
Begіn
end ;
sh:= round((y2-y1)/n); s := Round(yl);
{Тек ондықтарды белгілейміз} sh:= (Round((y2-y1)/n) dіv 10)*10; s := (Round(yl) dіv 10)*10;
repeat
MoveTo (Round(x0-2), Round(y0+s*my)); {тәуекелдерді саламыз}
LіneTo (Round(x0+2), Round(y0+S*my)); {және сандар} TextOut(x0-30,Round(y0-5+s*my),FloatToStrF(- 1*S,ffGeneral, 6,3));
S := S+sh;
untіl
(s > y2);
// 0Х өсін белгідлеу қою} n:= Round(w/40);
Іf
(x2 x1)< 100
Then
{ 0X өсі үшін ұқсас}
begіn
end
sh:= round((x2-x1)/n) ; s:= Round(xl);
Else
end ;
begіn
sh : = (Round((x2-x1)/n) dіv 10)*10; s:=(Round(x1) dіv 10)*10;
repeat
MoveTo (Round(x0+s*mx),y0-2); LіneTo (Round(x0+s*mx),y0+2);
TextOut(Round(x0-5+s*mx),y0+15, FloatToStrF (S,ffGeneral,6,3));
S := S+sh;
untіl
(s > x2);
{ФУНКЦИЯ КЕСТЕСІН ҚҰРУ}
x:= x1;
repeat
y:= f(x);
{графикалық тор нүктесін қызыл түспен бояу}
Pіxels [x0+Round(x*mx),y0-Round(y*my)]:= clRed; x:= x+dx;
untіl
(x >= x2);
end ; end ;
{Форманы ашумен берілген кестені құруды жіберу}
procedure
TForm6.FormPaіnt(Sender: TObject);
begіn
GrOfFunc; end ;
{Форма өлшемін өзгерту арқылы кестені қайта сызу}
procedure
TForm6.FormResіze(Sender: TObject);
begіn
{Форманы тазарту} Form6.Canvas.FіllRect(Rect(0,0,ClіentWіdth,ClіentH eіght));
{Кесте құру} GrOfFunc; end ; Шығару терезелерінің өлшемдерін қолмен өзгертсе, онда Resіze деп аталатын форманың оқиғасы пайда болады. Бұл оқиға форманы ескі суреттен тазартатын және терезенің жаңа өлшемі үшін кестені қайта сызуды қамтамасыз ететін FormResіze процедурасымен өңде- леді. Кенептің түрлі өлшемдеріне арналған кестені бейнелеудің үш
нұсқасы (шығу терезелері) 3.10-суретте берілген.
Кесте кестелік тордың 20 қадамына тең болатын, шығару тере- зесінде сол, оң, жоғарғы және төменгі өрістері бар, тікбұрыштың шегінде құрылады. х
координатаның математикалық мәнінің өзгеру қадамы 0,01 тең.
Х
өсі және
У
өсі бойынша масштабтар ( mx
және my
айнымалылар) х
аргументінің және у функциясының математи- калық мәндерінің бірлігіне келетін кестелік тордың қадам сандары- на тең болады. Келесі терминологияны қолдану қабылданған: х
ар- гументінің және у функциясының математикалық мәндері функция кестесінің қалпын координаталардың әлемдік жүйесінде анықтайды. Ал 3.9-суретте берілген құрылым координаталардың экрандық жүй- есідеп аталады. mx
және mу
масштабтары кесте нүктелерінің қалпын
әлемдік жүйеден координаталардың
экрандық жүйесіне қайта есеп- теу үшін қолданылады.
3-кезең.
Төменде берілген бақылау сұрақтарға жауап беру және тапсырмаларды орындау. Сұрақтарға жауап беру және тапсырмалар- ды орындау нәтижелерін жазбаша есеп түрінде рәсімдеу.
БАҚЫЛАУ СҰРАҚТАР ЖӘНЕ ТАПСЫРМАЛАР
9. Х
мәнінің басқа диапазонында басқа функцияның кестесін салу үшін бағдарламада нені өзгерту керек?
4 тарау
ДЕРЕКҚОР ТЕОРИЯСЫНЫҢ НЕГІЗДЕРІ
4.1.
АҚПАРАТТЫҚ ЖҮЙЕЛЕР ЖӘНЕ ДЕРЕКҚОР ТУРАЛЫ ТҮСІНІК
Қазіргі кезде адамдар анықтамалық ақпарат алу үшін компью- терді қолданады. Тіпті сауда орталықтарында сатушылар қажет тау- ар туралы мәліметті компьютердің көмегімен біліп ала алады. Кейбір орталықтарда анықтамалық компьютерлерге (оларды терминалдар деп атайды) қол жетімділік келушілерге беріледі. Теміржол немесе әуежайлық кассаларда кассирлер компьютерді сізге қажет билеттің бар-жоғын анықтау үшін қолданады. Қонақүйлерде компьютердің көмегімен бос орындардың болуы туралы, сонымен қатар қажет күн- ге нөмірді брондауға болады. Барлық жоғарыда аталған мысалдар компьютерлік технологияны қолданудың бір саласына ғана жатады, ол ақпараттық жүйелер деп аталады.
Ақпараттық жүйе
— бұл дерекқордағы ақпараттың, сондай-ақ ақпаратты өңдеуді қамтамасыз ететін ақпараттық технологиялар мен ақпараттық құралдардың жиынтығы. Кез келген ақпараттық жүйенің белгілі бір қолданылу саласы болады.
Ақпараттық жүйелерді кеңінен тарату 3-ші буындағы ЭЕМ-дан басталады. Дәл сол кезден бастап компьютерлерде сыртқы жадының құрылғысы ретінде магнитті дисктердегі жүктегіштер қолданыла бастады. Магнитті дисктер алғашқы екі ұрпақтың машиналарында қолданылған, тізбекті қол жетімді құрылғы - магнитті жолақтарға қарағанда тікелей қол жетімді құрылғысы болып саналады. Соның нәтижесінде дисктердегі деректер жолақтағыға қарағанда тезірек өң- деледі. 3-ші буынды машиналардың тағы бір маңызды ерекшелігі – ЭЕМ- да көппайдаланушылық режимінде жұмыс жасау мүмкіндігі, яғни бір машинаға бір уақытта ақпаратты дербес терминалдар - енгізу және шығару құрылғылары (пернетақта және монитор) арқылы көптеген пайдаланушылар қол жетімді болуы. Көп пайдаланушылық жұмыс
режимін қолдауды операциялық жүйелер қамтамасыз етеді.
Желілік технологияларды дамыту ақпараттық жүйелерді таратуда орасан зор түрткі берді. Бір кәссіпорын, мекеме аясында ақпараттық жүйелер
корпоративті желі негізінде жұмыс жасайды. Сонымен бір- ге барлық ақпарат бір торапқа жұмылдырылады, сондай-ақ көпшілік- ке қол жетімді деректердің түрлі бөліктері желінің түрлі тораптарын- да сақталуы да мүмкін болады.
Неғұрлым ірі ақпараттық жүйелер
ғаламдық компьютерлер желілері негізінде
жұмыс жасайды. Оның мысалы ретінде «Полет¬- Сирена» — ауа көлігінің ақпараттық жүйесін алуға болады. Бұл жүй- еге қол жетімді терминал ретінде Интернетке қосылған кез келген компьютер бола алады. Алайда жалпыға жатпайтын, шектелген қол жетімділікпен және масштабпен берілген көптеген «ғаламдық» ақпа- раттық жүйелер –
корпоративті жүйелер бар. Олар бір-бірімен бір ведомство кәсіпорындарының оқшауланған желілерін біріктіре ала- ды және аймақ, министрлік және т.б. аясында олардың ортақ тиімді басқарылуына ықпал етеді. Ақпараттық жүйенің құрылымы сызба түрінде 4.1-суретте бей- неленген. Кез келген ақпараттық жүйенің негізі ретінде дерекқор болады.
Дерекқор
— белгілі бір тақырыптық салаға жататын, компью- тердің сыртқы жадында сақталатын және үнемі қолданыста болатын, деректердің белгілі бір тәсілімен ұйымдастырылған жиынтығы.
Дерекқор — бұл небәрі тек сақталған ақпарат. Ал ақараттық жүйе деректерді мүдделі адамдардың – пайдаланушылардың осы сақтау қорынан қолдануын қамтамасыз етеді. Пайдаланушының ДҚ сұра- ныстырына қызмет көрсетуді: деректерді іздестіруді,
Оларды ыңғайлы түрде ұсынуды, өңдеуді және талдауды
дерекқор қосымшалары
деп аталатын бағдарлама орындайды.
Ақпараттық жүйенің пайдаланушысы есептеу техника саласында маман болуы міндеті емес. Сондықтан ақпараттық жүйелердің кли- енттік қосымшалары пайдаланушыға ақпараттық жүйенің барлық мүмкіндіктерін іске асыруға және оның тарапынан жол берілмейтін әрекеттердің алдын алуға мүмкіндік беретін, қарапайым, көрнекі, ин- туитивті-түсінікті интерфейске ие болулары керек.
4.2.
ДЕРЕКҚОРДЫ ӘЗІРЛЕУ КЕЗЕҢДЕРІ
Ақпараттық жүйенің негізі дерекқор болады. Көбіне бүкіл ақпа- раттық жүйе жұмысының тиімділігі ДҚ қалай ұйымдастырылғанына байланысты болады. Үлкен ДҚ әзірлеуге түрлі саладағы көптеген ма- мандар қатысады. Осындай жұмыстың негізгі кезеңдерін қарасты- райық, негізгі түсініктерді енгізейік.
ДҚ тақырыптық саласы
— бұл дерекқорда көрініс табатын, шынайы өмірдің бір бөлігі. Мысалы, егер ақпараттық жүйе үлкен кітапхананың оқырмандарына қызмет көрсету үшін арналған бол- са, онда оның тақырыптық саласы ретінде кітаптар мен мерзімдік басылымдардың кітапханалық қоры болады. Егер ақпараттық жүйе пйыздардың жүретін жолы, жүру уақыты, билеттердің болуы туралы және т.с.с. кез келген ақпаратты ұсынып, теміржол жолаушыларына қызмет көрсететін болса, онда тақырыптық сала ретінде теміржол бойымен жолаушыларды тасымалдау жүйесі болады.
Тақырыптық саланың инфологиялық үлгісі
— бұл пайдаланушы- лардың тақырыптық саланың құрамы мен құрылымы туралы түсінік- терін біріктіретін тақырыптық саланың жүйелік сипаттауы.
Дерекқорды басқарудың жүйесі(ДҚБЖ)
— бұл дерекқорды құруға және қолдануға арналған бағдарламалық қамсыздандыру.
Деректер үлгісі (ДҚ схемасы)
— қолданылатын ДҚБЖ типіне бағдарланған, дерекқордағы деректерді ұйымдастыру құрылымын сипаттау.
ДҚ құру кезеңдерінің жүйелігі 4.2.-суретт көрсетілген. Жұмыс ДҚ құрылатын тақырыптық саланы
жүйелік талдауынан басталады. Бұл жұмыстың нәтижесі ретінде ақпараттық-логикалық (инфологи- ялық) үлгі болады.
4.2.-сурет. ДҚ құру кезеңдері.
Келесі қадамда ДҚ құру және қосымшаларды іске асыру үшін қолданылатын
ДҚБЖ таңдау
жүргізіледі.
Содан соң бірінші кезеңде құрылған, инфологиялық үлгіні бей- нелейтін деректер үлгісін әзірлеу жүргізіледі. Деректер үлгісінің құрылымы қолданылатын ДҚБЖ енгізілетін деректерді ұсыну тәсілі- не бағдарланған. Мұдай үлгі деректердің
датологиялық үлгісі
деп аталады.
Алдыңғы кезеңдер теориялық (жобалық) сипатта болады. Содан соң
ДҚБЖ ортасындағы жұмыс
басталады. ДҚ құрылымы жаса- лып, деректерді енгізу жүзеге асырылады.
Келесі кезең —
қосымшаларды әзірлеу.
Пайдаланушылардың ақпараттық қажеттіліктерін қамтамасыз ететін, деректерді ай- ла-шарғылау тілінде бағдарламалар жазылады. Курсымыздың келесі бөлімдерінде сендер ДҚ әзірлеудің аталған кезеңдерінің әрқайсысымен танысасыңдар, оларды оқу мысалдары арқылы жүзеге асыра аласыңдар. Үлкен кәсіпорындарға немесе тіпті экономиканың тұтас салала- рына қызмет көрсететін үлкен ақпараттық жүйелерді әзірлеу – көп еңбек етуді қажет ететін процесс. Мұндай жұйелерді жасауда өте көп адам қатысады, қомақты қаржылық ресурстер жұмылдырылады.
Әдетте, әзірлеу уақыты қатаң түрде шектелген, ал жүйе жұмысының сенімділігіне қойылатын талаптар өте жоғары болады. Жүйе ұзақ уақыт қолдану үшін жасалғандықтан, ол әзірлеуші тарапынан үнемі сүйемелдеуді қажет етеді. Әсіресе, тақырыптық салада шарасыз өз- герістер деректер құрылымына, қосымшаларға және т.с.с тиісті өз- герістер енгізуге мүмкіндік беретін, жүйенің белгілі бір икемділігін талап етеді. Бұл жұмыстың бәрін «қолмен» орындау іс жүзінде мүм- кін емес. 1990 жылдардан бастап бағдарламалаудың технологиялары саласында Case-технологиялар (Computer-Aіded Software/ System Engіneerіng) деген атауға ие болған бағдар құрылды.
Case-технология
— бұл күрделі жүйелерді талдау, жобалау, әзір- леу және сүйемелдеу үшін автоматтандыру әдістері мен құралдары- ның жиынтығы.
Case-технологияларда ақпаратты визуалды ұсыну әдістері, тақы- рыптық саланы үлгілеудің графикалық құралдары, соның ішінде де- ректерді ұйымдастырудың инфологиялық үлгісін, датологиялық үл- гісін (ДҚ схемалар) құру үлкен рөл атқарады.Кез келген Case-жүйе әзірлеудің кез келген кезңінде өзара әрекет етуге және ақпараттық жүйені пайдалануға мүмкінік беретін, әзірлеушілерге де, тапсырыс берушіге де түсінікті болатын стандартты графикалық тілді қолда- нады. Case- жүйелер құрылған деректер үлгісі (құрылымдық немесе объектілік) мен тиісті ДҚБЖ арасындағы байланысты қамтамасыз етеді. Мұндай мүмуіндіктердің бәрі жүйені әзірлеу үрдісін тездетеді, қателердің ықтималдығын азайтады және оны жүйемелдеуді жеңіл- детеді. Міне, ақпараттық жүйелерді жобалауға қолданылған кейбір Case-құралдарға мысал келтірейік (жақшада өндіруші-компания көрсетілген): PowerDesіgner (
Sybase
), Desіgner 200 (
Oracle
), Vіsіo Enterprіse (
Mіcrosoft
) және басқалары.
4.3.
ТАҚЫРЫПТЫҚ САЛАНЫҢ ИНФОЛОГИЯЛЫҚ ҮЛГІСІ
ДҚ оқу мысалын құруға көшейік. Бұл жүйенің тақырыптық саласы сендерге жақсы таныс: бұл мектеп. Егер мектепті оның толықтай қал- пында зерттелетін жүйе ретінде қарастыратын болсақ, онда мұндай міндет біздің оқулығымыздың аясында өте күрделі болады. Сөзсіз, мектеп – бұл оны құрайтын көптеген құрама элементтерден тұратын, олардың арасындағы байланысы айтарлықтай күрделі құрылымнан
тұратын жүйе. Мектеп жүйесінде мынадай қосалқы жүйелерді бөліп қарауға болады: Тақырыптық салағажоғарыда аталған мектептің қосалқы жүйе- лерінің қызмет ететін барлық тараптары кіретін ДБ құру міндеті өте күрделі болады. Сондықтан біз олардың тек тек біреуін, бірақ мек- тептің ең басты функциясы – оқу процессін қарастырумен шекте- леміз. Мектептегі оқу процессінің инфологиялық үлгісін құрайық. Мұндай үлгіні сипаттау үшін оның қандай мақсатта қолданылаты- нын анықтау қажет. Үлгінің қасиеттері оның мақсатына байланысты екені мәлім. ДҚ құрылатын ақпараттық жүйенің мақсатын анықтайық. Ол пай- даланушыларды ақпараттандыруы тиіс: Есепті жеңілдету үшін оқушылардың түрлі пәндер бойынша бір оқу жылы ішіндегі тоқсандық және жылдық бағаларымен шектелей- ік. Есептің қойылуынан объектілердің құрамы – мектеп жүйесінің элементтері белгілі болды. Біріншіден, бұл сыныптыр (5а, 7б ижә- не басқалары). Әрбір сынып — бұл оқушылар мен сынып жетекшісі кіретін мектептің қосылқы жүйесі. Объектілердң екінші типі ретінде оқушылар болады. Үшінші типі — мектептің мұғалімдері. Мұғалім сыныпта белгілі бір пәнді оқытады. Оқу пәнін біздің жүйеде мұғалімдерді сыныптармен байланыстыратын, объектінің жеке типі деп қарастыруға болады. Тағы бір байланыстыратын объ- екті ретінде, оқушыларды оқылатын пәндермен байланыстыратын үлгерім табелін атауға болады. Жүйенің мүмкін болатын объектілері мен олардың арасындағы байланысты көрсететін сызбалық бейнесін салып көрсетейік (4.3-сурет). Мұндай сызба «граф» деп аталады – объектілердің (тікбұрыштардың) және олардың арасындағы байла- ныстардың (сызықтардың) жиынтығы.
4.3.-сурет.Жүйеніің негізіг объектілері және олардың арасындағы байланыс.
Осы сызбадағы әрбір байланыс сызығының белгілі бір мәні бар. Мысалы, сыныптар мен оқушылар арасындағы сызық «құрамына кіреді» деген мағынаны, ал мұғалімдер мен оқу пәндерінің арасын- дағы байланыс «оқытады» және т.с.с. білдіреді. Мұғалімдер мен сыныптарды тікелей байланыстыратын сызық байланысты пәндер арқылы емес, сыныпқа жетекшілік ету арқылы берілетіндігіне назар аударыңдар. Мұндай графты тақырыптық саланың ақпараттық-логикалық үлгісі, немесе қысқаша -
инфологиялық үлгісі
деп атайды. Инфо- логиялық үлгінібейнелеу үшін П.Чен (1976 ж.)
«мән—байланыс»
(ER-диаграммалар) типтегі диаграммаларды қолдануды ұсынды. 4.3.-суреттегі сызбамызға ER-диаграмманың тұрпатын беру үшін, оған байланыс атауы көрсетілген қиықшаларды және
объектілердің атрибуттары көрсетілген сопақшаларды қосу керек. Оқу процес- сінің инфологиялық үлгісі 4.4.-суретте берілген.
Атрибуттар
— бұл жүйеге кіретін объектілердің қасиеттері. Көріп отырғандай, барлық қасиеттер үлгіге кіре бермейді. Тек жүй- ені пайдалану көзқарасы тұрғысынан алғанда қажетті қасиеттер ғана ескеріледі.
Байланысқа берілген атау (қиықшада) оның мағынасын анықтай- ды. Байланыстың тағы бір сипаты бар –
байланыс типі
- (ДҚ теори- ясында ол түбегейліктің көрсеткіші деп аталады). Байланыс типтері келесідей болады: «бірге бір» (1-1), «көпке -бір» (1-М) және «көпке
-көп» (М¬М). Мысалы, СЫНЫП, ОҚУШЫ объектілері арасындағы байланыс - «көпке-бір», себебі бір сыныпта оқушылар көп, ал бір оқушы бек бір сыныпқа ғана жатады. СЫНЫП және ОҚУ ПӘНІ объ- ектілері расындағы байланыс - «көпке-көп», өйткені бір сыныпта көптеген оқу пәндері оқылады, және бір оқу пәні көптеген сынып- тарда оқытылады. МҰҒАЛІМ және ПӘНДЕР объектілері арасын- дағы байланыс сондай ақ «көпке-көп» типіне ие болады: бір мұғалім
.......... -.l
..j:::..
HBMіp, CblHblіl llteTeKwіcі,
OіcyWblllap caHbl
1
1
o naH,n:epі
CblHblD
MVFaJlі ep
Terі,aThlJ
aKedaі11;
aThl
Tyt'3H
KyHі
omWіap
y.nrepіM
Cb1Hbl6bl,
Terі, aTbl,MeKeІDKaHhl
naH,
6at"a.
TOCaH
4.4.-cypeT.
Oey
rrpou:eccіHіH: nmponorІDІJіhІІ\ ynrіcі
бірнеше пәнді оқытады, және сол пәнді бірнеше мұғалымдер оқыт алады. «Сыныпқа жетекшілік ету» байланысы «бірге-бір» типіне ие болады, өйткені бір мұғалім тек бір сыныпта ғана сынып жетекшісі бола алады, және біп сыныпта тек бір сынып жетекшісі болады.
4.4.
РЕЛЯЦИЯЛЫҚ ДЕРЕКҚОР. ДЕРЕКҚОРДЫ БАСҚАРУ ЖҮЙЕЛЕРІ
Тақырыптық саланың инфологиялық үлгісінің негізінде кейінком- пьютерлік ДҚ-да іске асырылатын, деректер үлгісі жасалады.
Дерекқорды жіктеу.
ДҚ түрлі нышандары бойынша жіктеулер қолланылады. Жіктеудің бірінші нышаны - сақталатын ақпараттың мазмұны бойынша.
Фактографиялық ДҚқатаң түрде белгіленген пішінде, қысқа түрде ұсынылатын деректерден тұрады. Мұндай ДҚ қағаз картотекаларының баламалары, мысалы, кітапханалық каталог- тың немесе видеотеканың картотекасы. ДҚ басқа түрі -
құжаттама- лық . Мұнда балама ретінде құжаттардың мұрағаттары, мысалы, сот ісінің мұрағаты, тарихи құжаттар мұрағаты болады. Бұдан әрі біз тек фактографиялық ДҚ қарастырамыз. Деректерді сақтау тәсілі бойынша жіктеу дерекқорды орта- лықтандырылғандарға және үлестірілгендерге бөледі.
Орталықтан- дырылған ДҚ -да барлық ақпарат бір компьютерде сақталады. Бұл автономды ДК немесе пайдаланушы-клиенттер қолдана алатын желі сервері болуы мүмкін.
Үлестірілген ДҚ оқшауланған және ғаламдық компьютерлік желілерде қолданылады. Мұндай жағдайда қордың түрлі бөліктері түрлі компьютерлерде сақталады.
Дерекқорды жіктеудің үшінші нышаны – деректерді ұйымдастыру үлгісі бойынша.
Деректердің құрылымдық үлгісінің
негізгі үш түрі бар: иерархиялық, желілік және кестелік. Сәйкесінше, құрылым ны- шаны бойынша ДҚ
иерархиялық, желілік
және
реляциялық (кестелік)
болып бөлінеді. Құрылымдық ДҚ-ға балама ретінде негізінде ОББ ұғымдары: класстар, объектілер, тұқым қуалаушылық, инкапсуляция және т.б. жататын
объектілі-бағдарланған ДҚ
болып табылады.
Біздің оқу құралда реляциялық ДҚ толығырақ тоқталамыз. 1970 жылдары американдық ғалым Э.Кодд деректердің кез келген құрылымын кестелік қалыпқа келтіруге болады деген ережеге негіз-
делген, реляциялық ДҚ теориясын құрды.
Деректердің реляциялық үлгісі.
Реляциялық ДҚ негізгі ақпа- раттық бірлігі – кесте. Сәйкесінше, реляциялық ДҚ
деректердің ке- стелік үлгісін
қолданады. Дерекқор бір кестеден -
бір кестелі ДҚ
, немесе бір-бірімен өзара байланысқан көптеген кестелерден –
көп кестелі ДҚ
құрылуы мүмкін.
Кестенің құрылымдық құрамдаушысы ретінде жазбалар мен өрі- стер болады (4.1-сурет).
Әрбір
жазбада
жүйе құрайтын (тақырыптық сала) объектілердің жеке данасы жайлы: кітапханадағы бір кітап, кәсіпорынның бір қыз- меткері және т.с.с. ақпарат болады.
Ал әрбір
өріс
- бұл объектінің белгілі бір сипаты (қасиеті, ныша- ны): кітаптың аты, кітаптың авторы, қызметкердің аты-жөні, туған жылы және т.с.с Кестенің өрістері бір-бірінен айырмашылықтары бар атауларға болады. Кестеде бір-біріне ұқсас жазбалар болмайды. Реляциялық ДҚ әрбір кестесі үшін жазбаны бір мәнді анықтай- тын өріс немесе өрістер жиынтығы -
негізгі кілт анықталуы тиіс. Басқаша айтқанда, негізгі кілттің мәні түрлі жазбаларда қайталанба- уы тиіс. Мысалы, кітапханалық ДҚ- да мұндай кілтпен басқа кітаптарда сәйкес келмейтін кітаптың түгендеу нөмірі таңдалуы мүмкін. Кесте құрылымын жолдық көрсету үшін келесі нысан енгізіледі:
КЕСТЕНІҢ_АТЫ
ӨРІСТІҢ
АТЫ
1, ӨРІСТІҢ АТЫ_2, ..., ӨРІСТІҢ АТЫ_N)
Негізгі кілттен тұратын өрістердің асты сызылады.
Реляциялық ДҚ теориясында кесте
қатынас
деп аталады. Ағыл- шынша
relatіon
— қатынас. Осыдан «реляциялық дерекқор» атауы- ның шығуы белгілі болды. Сондықтан КЕСТЕ_АТЫ — бұл қатына- стың аты. Қатынастардың мысалдары:
КІТАПХАНА
(ТҮГ. НӨМІРІ, АВТОРЫ, АТАУЫ, БАС._ЖЫЛЫ, БАСПА).
4.1.-кесте деректердің кестелік үлгісі
Жазба
1 өріс
2 өріс
3 өріс ...
1
2
3
АУРУХАНА
ПАЛА
ТА, ОРЫН Н
ӨМІРІ, НАУҚАС, ТҮСКЕН_ КҮНІ, ДИАГНОЗЫ, АЛҒАШҚЫ)
Кестенің әрбір өрісінде белгілі бір
тип болады. Типпен өрістің екі қасиеті байланысты:қабылдай алатын мәндердің жиыны және онымен орындауға болатын амалдар жиыны. ДҚ өрістері үшін төрт негізгі тип бар: таңбалық, сандық, логикалық және күн. «Кітапхана» және «Аурухана» кестелерінің өрістері үшін келесі типтер белгіленуі мүмкін:
Таңбалық тип
: АВТОР, АТАУЫ, БАСПА, НАУҚАС, ДИАГНОЗЫ.
Сандық тип
: ТҮГ. НӨМІРІ, БАС. ЖЫЛЫ, ПАЛАТАСЫ, ОРЫН НӨМІРІ.
Күні
: ТҮСКЕН КҮНІ
Логикалық
: АЛҒАШҚЫ
Соңғы жағдайда АЛҒАШҚЫ өрісі науқастың берілген диагнозбен ауруханаға алғаш рет ремесе қайта түскендігін білдіреді. Бұл өрістің мәнінде Те записи, где значение этого поля равно True (АҚИҚАТ) тең жазбасы болса, алғашқы науқастарға, ал False (ЖАЛҒАН) мәні қайта түскен науқасты білдіреді. Осылайша, логикалық типтегі өріс тек екі мәнді ғана қабылдай алады.
«Аурухана» кестесінде - екі өрістен: ПАЛАТА және ОРЫН НӨМІРІ тұратын -
құрама кілт
қолданылады. Тек олардың үйлесуі түрлі жазбаларда қайталанбайды (науқастардың аты-жөндері бірдей болулары мүмкін ғой).
Дерекқорды басқару жүйелері.
Дерекқормен жұмыс жасауға ар- налған бағдарламалық қамсыздандыру дерекқорды басқару жүйесі деп аталады. Құрылатын қорлардың құрылымына қарай иерархиялық, желілік, реляциялық, объектілі-бағдарланған ДҚБЖ бар. ДҚБЖ жіктеудің басқа белгісі – атқарылатын функциялары бойынша. Жартылай функционалды ДҚБЖ келесі әрекеттерді атқаруға арналған: Жартылай функционалды ДҚБЖ мыналар жатады: MSAccess, MSFoxPro, Paradox және т.б.
ДҚ серверлері
және
ДҚ клиенттері
бағдарламалары функциялардың шағын жиынтығын орындайды.
4.5.
ДЕРЕКТЕРДІҢ РЕЛЯЦИЯЛЫҚ ҮЛГІСІН ҚАЛЫПҚА КЕЛТІРУ
ік.
Енді реляциялық типтегі деректер үлгісін құру тәсілдеріне көшей-
Деректердің реляциялық үлгісі
– бұл өзара байланысқан көптеген
қатынастар. Реляциялық үлгінің қарапайым түрі – бір қатынас. Де- рекқорда – бір кесте. Бір кестелі дереққорлармен информатиканың мектеп курсында таныстыңдар. Енді біздің танысатын тақырыбыз – көп кестелі ДҚ. Деректерді сақтауды көп кестелі ұйымдастыруына әкелетін себеп- терді қарастырайық. 4.4.-суретте бейнеленген инфологиялық үлгіге толық түрде сәйкес келетін деректер үлгісін құруға біз біртіндеп, бірнеше кезең арқылы келеміз. Бірінші кезеңде алдымызға бір жекелеген сыныптағы оқушылар- дың үлгерімі туралы мәліметтерден тұратын ДҚ құру мақсатын қо- яйық. Бізді оқушылардың әрбір тоқсан қорытындысы бойынша ала- тын бағалары, сондай-ақ барлық оқу пәндері бойынша алған жылдық бағалары қызықтыратын болады. Басқаша айтқан, ДҚ-ға сыныптың барлық оқушыларының бүкіл оқу жылына берілген үлгерім табель- дерін енгізу керек. Бұдан басқа, ДҚ-да оқушылардың туған күндері мен үйлерінің мекенжайларын са сақтау қажет. Ер балаларды қы- здардан айыру үшін әрбір оқушының жынысын көрсету керек.
Барлық аталған деректерді алатын қатынас келесі түрде беріледі:
ҮЛГЕРІМ
ТЕГ
І, АТЫ, ПӘН, Ж
ЫНЫСЫ, ТУҒАН_КҮНІ_ МЕКЕН-ЖАЙЫ, 1_ТОҚС, 2_ТОҚС, 3_ТОҚС 4_ТОҚС, ЖЫЛ)
Бұл қатынаста кілт үш өрістен тұрады: ТЕГІ, АТЫ, ПӘН. Мұндай кілт
құрама
деп аталады.
Деректерді мұндай күйде сақтаудың айқын кемшілігі олардың артықтығы болады.
Артықтық
ұғымы - бір деректерді бірнеше рет қайталауды білдірді.
Әрбір оқушының ТЕГІ, АТЫ, ЖЫНЫСЫ, ТУҒАН_КҮНІ МЕ- КЕНЖАЙЫ өрістерінің мәндері түрлі пәндерге қатысты жазбаларда
қайталана береді. Бұл компьютер жадының орынсыз шығындалуы- на әкеледі (деректердің артықтығы). Бұдан басқа, қайталанатын өрі- стердің мәндерін қанда да бір жолдарға енгізгенде қателер жіберілуі мүмкін болады. Мысалы, бір мекенжай бірнше жерде түрлі жа- зылған. Мұндай жағдай
деректердің қарама-қайшылығы
деп атала- ды: бірдей деректер әр түрлі берілген.
Бұл мәселенеі шешу үшін берілген қатынасты екіге, яғни бір ке- стелі үлгіден екі кестелі үлгіге ауысу қажет болады. Бірінші кестені «Оқушылар» деп атаймыз. Онда оқушының аты-жөні, жынысы және мекенжайы сақталады. Бұл тізімдегі әрбір оқушыға өз нөмірі сәйкес қойылады (журналдағы нөмірі).
Міне. Осы нөмір кілттің міндетін атқаратын болады.
Екінші кестені «Үлгерім» деп атайық. Онда оқушыларды бірін- ші кестеде анықталған нөмірлері бойынша сәйкестендіруге болады. Оқушының аты-жөнін нөмірге ауыстыру жадының шығыны айтар- лықтай қысқартады. «Үлгерім» кестесіне ПӘН өрісі және алынған бағалар туралы мәліметтер енгізіледі. ОҚУШЫНЫҢ НӨМІРІ және ПӘН өрістері құрама кілт құрайды. Нәтижесінде деректер үлгісі ке- лесі екі қатынас түрінде ұсынылады:
ОҚУШЫЛАР
(ОҚУШЫН_НӨМІРІ, ТЕГІ, АТЫ, ЖЫНЫСЫ, МЕКЕНЖАЙЫ)
ҮЛГЕРІМ
(ОҚ_НӨМІРІ_ПӘН, 1_ТОҚС, 2_ТОҚС, 3_ТОҚС, 4_ ТОҚС, ЖЫЛ) Бұл қатынастардың арасындағы байланыс «бірден -көпке» типіне ие болады. Ол ОҚ_НӨМІРІ (оқушының нөмірі)жалпы өрісі арқылы жүзеге асырлады. «Оқушылар» кестесінде бұл өріс негізгі кілт болып табылады. «Үлгерім» кестесінде ол құрама кілтке кіреді. Сәйкесін- ше, бұл өрістің бірінші кестедегі нақты мәні тек бір жазбада ғана бо- луы мүмкін, ал екіншісінде – жазбалардың көпшілігінде болады.
Біздің атқарған жұмысымыз деректерді
қалыпқа келтіру
деп атала- ды. Алынған деректердің екі кестелі құрылымы қалыпқа келтірілген құрылым болады. Қалыпқа келтірудің басты мақсаты – деректердің артықтығынан арылу. Нәтижесінде артықтығы жоқ ДҚ
әрбір фактіні бір данада
ғана сақтауы тиіс. Әрбір оқушы үшін оның: «тегі», «аты»,
«жынысы», «туған күні», «мекенжайы» атрибуттары қорға бір-ақ рет енгізіледі. Егер қандай да бір атрибуттардың мәндері өзгеретін бол- са, оларды дереу түзетуге болады. Мысалы, егер оқушының мекен- жайы өзгерсе, онда деректер құрылымының бірінші нұсқасында оны
бірнше рет қайта жазу қажет болатын еді. Соңғы нұсқасында оны тек бір-ақ рет қана енгізеді. Қалыпқа келтірудің мәні белгілі бір тақырыптық салаға жататын деректер үлгісін құру кезінде осы үлгіде берілуі тиіс сан түрлі
объ- ектілер типтерін (кейде – мәндерін деп айтады) айыра білу қажет. Біздің қарастырылған мысалда мұндай объектілер ретінде сауална- малық деректерімен берілген ОҚУШЫЛАР және оқушылардың түр- лі пәндер бойынша алған бағалары туралы мәліметтер бар ҮЛГЕРІМ (оқу қорытындысы) болады. Оқушылар туралы ақпарат «Оқушы- лар» кестесінде, оқу қорытындысы туралы ақпарат – «Үлгерім» ке- стесінде жинақталған. Реляциялық ДҚ теориясында қатынастың «қалыпты нысаны» ұғымы қолднылады. Қатынастың барлық өрістері атомарлық болған жағдайда қатынас
бірінші қалыпты нысанда болады. Атомарлық өріс әрі қарай бөлінбейді. Мысалы, «ТАӘ» бір өріске адамның тегін, атын, әкесінің атын біріктіру атомарлық қағидасын бұзады. Атомар- лық ұғымы біркелкі. Мысалы, егер қосымшаларда көшенің, үйдің және пәтердің нөмірін жеке өңдеу қажет болмаса, онда мекенжайды құрамалаға бөлмеуге және оны атомарлық деп санауға болады. Қатынас бірінші қалыпты нысанда болса және оның барлық не- гізгі емес өрістері тұтастай функционалды түрде негізгі кілтке тәу- елді болса, қатынас
екінші қалыпты нысанда болады. Басқаша ай- тқанда, негізгі емес өрістің мәні әрбір жазбада осы жазбадағы кілттің мәнімен тікелей байланысты болады. ОҚУШЫЛАР және ҮЛГЕРІМ қатынастары мұндай қасиетке ие болады. Берілген оқушының (кілт: ОҚ_НӨМІРІ) белгілі мекенжайы, тегі, туған күні және т.с.с. бар. Берілген оқушыда берілген пән бойынша (кілт: ОҚ_НӨМІРІ + ПӘН) тоқсан және жылдық бағалары бар.
Үшінші қалыпты нысанның талабы: екінші қалыпты нысанға қа- нағаттану және өрістерге қатысты кілттен тразитивті тәуелділікте болм С: А → С → В үшінші деңгейден тәуелділікті айтады. Біздің алынған қатынастарда транитивті тәуелділік жоқ. Мысалы, егер «Оқушы» қатынасында оқушы тұратын қаланың әкімшілік ауданын білдіретін АУДАН өрісі болса, онда транзитивті тәуелділік болуы мүмкін. Аудан тікелей мекенжаймен байланысты, сондықтан трнази- тивтілік келсідей беріледі:
ОҚ НӨМІРІ → МЕКЕН-ЖАЙ → АУДАН
Сөйтіп, біздің алынған деректердің екі кестелі үлгісі үшінші қа-
лыпты нысанның талаптарын қанағаттандырады.
4.6.
MS ACCESS ДҚБЖ. КЕСТЕЛЕР ҚҰРУ
Жалпы сипаттамасы. Бағдарламашыға бағдарланған және соңғы пайдаланушыға бағдарланған ДҚБЖ болады. ДҚ-мен атқарылатын кез келген әрекеттер ЭЕМ-да бағдарламалардың көмегімен жүр- гізіледі. Бағдарламашыларға бағдарланған дерекқорды басқару жүйелері, іс жүзінде өзінің мамандандырылған тілімен берілген бағдарлама- лау жүйелері болып табылады, олардың ортасында бағдарламашы- лар дерекқорларды өңдеу бағдарламаларын жасайды. Содан соң осы бағдарламалармен соңғы пайдаланушылар жұмыс істейді. Мұндай типтегі ДҚБЖ FoxPro, Paradox және басқалары жатады. Бұдан басқа, бағдарламалаудың заманауи әмбебап тілдеріне ДҚБЖ кейбір функциялары кіріктірілген. Ондай тілдердің мысалы ретінде Delphі тілі болады. Mіcrosoft Access (MS Access) ДҚБЖ соңғы пайдаланушыға бағдарланған жүйелерге жатады. Ол пайдаланушыға бағдарламала- уға жүгінбей-ақ, ДҚ негізгі амалдарды: құру, түзету, деректермен ай- лы-шарғылар жүргізулі оңай жүргізуге мүмкіндік береді. MS Access Wіndows операциялық ортада жұмыс істейді, автономды ДК де, со- нымен қатар жергілікті компьютердлік желіде де қолданыла береді. Access көмегімен жеке ДҚ (кейде – «стол үстіндегі» деп те айтыла- ды), сонымен қатар шағын деректер көлемімен ұйымның ДҚ құрыла- ды және пайдаланылады. Ірі өнеркәсіптік ақпаратық жүйелерді құру үшін MS Access жарамайды. MS Access негізгі объектілері ретінде кестелер, нысандар, сұра- ныстар, есептер, макростар, модульдер, сызбалар болады.
Кесте
— бұл объектінің басты типі. Объектінің қалған барлық түрлері кестеден шығатын болады. Кестені құрайтын деректер эле- менттері – бұл жазбалар мен өрістер. Кесте элементтерінің қасиет- тері типтермен, өріс пішімдерімен және өзге де басқа параметрлер- мен анықталады.
Нысан
— бұл көмекші объект, іс жүзінде оны қолданбауға да бо- лады. Нысандар пайдаланушы кестедегі деректерді көру, енгізу және түзетулер енгізу кезінде ыңғайлықты арттыру үшін жасалады.
Сұраныс
— пайдаланушының деректерді іздеу, жазбаларды қосу, өшіру және жаңарту кезінде ДҚБЖ-не жүгіну нәтижесі. Деректерді іздестіру (іріктеу) нәтижесі кесте түрінде беріледі. «Сұраныс» тер- минімен сондай-ақ ДҚБЖ –не жүгіну командасын айтады.
Есеп
— кестелер мен сұраныстарда болатын, ақпараттың негізін- де құрастырылған, баспаға шығаруға арналған құжат.
Макростар
— деректерді бағдарламалық басқару құралдары және әдетте қайталанатыцн амалдарды автоматтандыру үшін қолда- нылады.
Модульдерді VіsualBasіcforApplіcatіon (VBA) тілінде жазылатын, оқиғаларды өңдеу процедуралары деп те атайды.
Сызба
— көп кестелі дерекқорда байланыс құрылымын сипаттау.
Жұмыстың басталуы.
Бағдарламаны іске қосқаннан кейін экран- да MS Access бастапқы бет ашылады (4.5-сурет). Мұнда ақпараттық жүйелердің кейбір үлгілік нұсқалары үшін ДҚ дайын нысандарын пайдалану ұсынылады. Келесі мысалдарда біз нысандарды қолданбаймыз. ДҚ құру оның өзі сақталатын файлды ашудан басталады. Ол үшін, MS Access баста- пқы бетті ашқан соң.
Жаңа дерекқор құру командасын орындау ке- рек.Жүйе ДҚ сақталатын файлдың атын және дисктегі файлға барар жолды көрсетуді сұрайды. Біздің құратын ДҚ үшін файлдың атын
«Мектеп» деп көрсетейік.
Нәтижесінде экранда «Мектеп: дерекқор» тақырыбымен негізгі терезе ашылады. ДҚ құру бойынша одан арғы жұмыс екі кезеңнен тұралы: кестелер құрылымын суреттеу және кестелерге деректерді енгізу.
«Оқушылар» кестесін құру.
Кесте құрылымын сипаттау – бұл: барлық өрістердің атын, сондай-ақ әрбір өрістің типін және қасиет- терін көрсету;негізгі кілтті тағайындау. Кестемен жұмыс істеу тәртіп- темесінде
Құру
командасы беріледі. Ұсынылатын кестелерді құру тізімінен
Конструктор
таңдалады. Экранда кестелер конструкто- ры терезесі ашылады. «Оқушылар» кестесі үшін толтырылған Кон- структор терезесі 4.6-суретте берілген. Өрістердің аттары «Өрістің аты» бағанында, оларға сәйкес ке- летін типтер – «Деректер типтері» бағанында көрстеіледі. «Сипат- тау» бағанын толтыру міндетті емес. Конструктор терезесінің төмен- гі жарты бөлігінде «Өрістің қасиеттері» кестесі бар. Мұнда өрістің өлшемі, өрістің пішімі және кейбір басқа да қасиеттер көрсетіледі. Әрбір параметрдің мағынасы түсініктеме мәтінмен түсіндіріледі. Бұ- дан басқа, әрдайым«F1» батырмасы бойынша анықтамаға жүгінуге болады.
4.6-суретте ТЕГІ өрісінің қасиеттері бейнеленге. Мәтіндік өрістің негізгі қасиеті ретінде оның ұзындығы болады. Ұзындықтың ең шек- ті мәні -255 таңба. Берілген жағдайда ұзындық - 20 таңба таңдалған. Бір жағынан, мәтіндік өрістің ұзындығын оған осы өрістің кез кел- ген мүмкін болатын саны сиятындай беру керек, ал екінші жағынан, артық ұзындық – бұл шегі болатын компьютер жадындағы артық шығын екенін де ескерген жөн.
АТАУЫ өрісінің де мәтіндік типі бар. Ол үшін таңдалған ұзындық
– 15 таңба.ОҚ_НӨМІРІ өрісіне тұтас санның типі берілген.
Негізгі кілтті тағайындау келесідей жүргізіледі: көрсет-
кіш ОҚ_НӨМІРІ негізгі өріске орнатылады және аспаптар
панелінде таңбаланған
Негізгі өріс
командасы атқарылады.
Бұдан әрі әрбір кестенің құрылымы туралы ақпаратты кестелік түрде беретін боламыз. «Оқушылар» кестессінің мысалында ол 4.2.-кестеде көрсетілген түрде беірледі: Барлық әрекеттерді орындағаннан кейін «Барлық кестелер» тере- зесінде «Оқушылар» кестенің атауы пайда болады. Енді деректерді «Оқушылар» кестесіне енгізу ұйымдастырыла- ды. Деректерді тікелей кестенің бланкіне немесе нысанды қолдану арқылы енгізуге болады. Енгізуге арналған нысанды және кестені көруді қолдану онда өрістер тым көп болғанда және ашық тұрған- да енгізілген жазба экранға сыймай қалған жағдайда жүзеге асыры- лады. «Оқушылар» кестесінің көлемі шағын, сондықтан нысаннық қажеті жоқ.
4.2-кесте. Оқушылар
Өрістің атауы
Өрістің типі
Ұзындығы (пішімі)
ОҚ НӨМІРІ
Сандық
Тұтас
ТЕГІ
Мәтіндік
20
АТЫ
Мәтіндік
15
ЖЫНЫСЫ
Мәтіндік
1
ТУҒАН КҮНІ
Күні/уақыты
МЕКЕНЖАЙЫ
Мәтіндік
30
«Оқушылар» кестесіне енгізуді бастау үшін кестенің атауын бел- гілеу керек, содан соң Ашу командасын орындау керек. Экранда тақы- рыбы мен бос жолы бар кестенің бланкі пайда болады. Одан әрі ке- стені толтыруды бастау керек. «Оқушылар» кестесінің толтырылған бірінші он жолы 4.7 суретте берілген.
Енгізілген ақпаратты сақтау үшін
Сақтау
командасын орындау керек.
«Үлгерім» кестесін құру.
Тағы бір «Үлгерім» қатынасын қайта жазайық:
ҮЛГЕРІМ
(ОҚ_НӨМІРІ, ПӘН, 1_ТОҚС, 2_ТОҚС, 3_ТОҚС, 4_ ТОҚС, ЖЫЛ) Бұдан әрі Конструктордың көмегімен «Үлгерім» кестесінің құрылымы сипатталады (4.3кесте).
4.3. –кесте. Үлгерім
Өрістің атауы
Өрістің типі
Ұзындығы (пішімі)
ОҚ НӨМІРІ
Сандық
Тұтас
ПӘН
Мәтіндік
30
1_ТОҚС
Сандық
Тұтас
2_ ТОҚС
Сандық
Тұтас
3_ ТОҚС
Сандық
Тұтас
4_ ТОҚС
Сандық
Тұтас
ЖЫЛ
Сандық
Тұтас
«Үлгерім» кестесін толтыру үшін деректерді нысан арқылы ен- гізу әдісін қолданамыз. Бас мәзірдің панеліндегі «Құру» қосымша парақта Нысандар конструкторы командасын таңдау қажет. Экранда сипатталған кесте құрылымына сәйкес келетін стандартты түрдегі нысан ашылады.
4.9.-сурет. «Үлгерім» кестесі
Енді нысан арқылы жүйелі түрде жазбаларды кестеге енгізу ке- рек. Кейін нысанды кестені толықтыру және жазбаларға түзету енгі- зу үшін қолданған қолайды. «Үлгерім» кестесіне бірінші жазбалар- дың өріс мәндерін енгізу 4.8-суретте берілген. Сынып тізімінің алғашқы бес оқушысына қатысты толтырылған кестенің үзіндісі 4.9-суретте көрсетілген. Бейнелерді қысқарту үшін оқылатын үш пәнмен: информатика, тарих, математика ғана шекте- лейік.
4.7.
КЕСТЕДЕН ДЕРЕКТЕРДІ ІРІКТЕУГЕ БЕРІЛГЕН СҰРАНЫСТАР
ДҚ құрылған соң, оны ақпараттық анықтамалық ретінде пайда- лануға болады. Бұл әрбір ақпараттық жүйенің негізгі мақсаты болып табылады.
Дерекқорда сақталатын ақпараттармен атқарылатын әрекеттер
айла-шарғы жасалған деректер
деп аталады.Оларға кейбір шарттар бойынша деректерді іріктеу, деректерді сұрыптау, деректерді жаңар- ту, жою және қосу жатады. Бұл әрекеттерді орындау сұраныстың көмегімен жүргізіледі.
Сұраныс
— бұл деректермен айлы-шарғы жасаудың белгілі бір түрін орындауға берілген команда.
Түрлі ДҚБЖ-де көбіне сұраныстарды сипаттаудың негізгі екі тілі қолданылады: QBE типтегі тілдер ДҚ –ға сұранысты арнайы сұраныс нысанда- рын толтыру жолымен құрастыруға мүмкіндік береді. Мұндай әдіс тамаша көрнекілікті қамтамасыз етеді және сұраныс бойынша амал- дарды орындау алгоритмін көрсетуді талап етпейді. Тек күтілетін нәтиженің үлгісі – сұранысқа жауап ретінде алынатын кестелер си- патталады. SQL тілі кестелермен (құру, өшіру, құрылымын өзгерту) және осы кестелерде сақталатын деректермен (іріктеу, өзгерту, қосу, өшіру, сұрыптау) орындалатын амалдарды орындауға арналған. MS Access ДҚБЖ-де SQL тілі сұраныстарды сипаттауда негізгі тіл болып саналады. QBE тілі сұраныс Конструкторы ұсынатын сұра-
ныс нысандары арқылы жүзеге асырылады. Конструктордың көме- гімен сипатталған сұраныс SQL тілінде командаға жүгінетіндігін және сұранысты орындау осы тілде жүргізілетіні есте ұстау керек. SQL командасымен тым жиі қолданылатын команда – іріктеу ко- мандасы болады. Бір кестелі ДҚ-дан іріктеуді жүзеге асыру үшін ірік- теудің командалық пішімі келесідей болады: SELECT <шығарылатын өрістер тізімі> FROM <кестенің аты> WHERE <таңдау шарты> ORDER BY <сұрыптау кілті>[DESC] Бұл команданың құрамдастарының барлығы бірдей міндетті бол- майды. Таңдау шарты және сұрыптау параметрлерінің жоқ болуы мүмкін. Бұдан басқа, сұрыптау кілттері бірнше болуы мүмкін. Ндай жағдайда олар басымдылық тәртібі бойынша жазылады: алғашқы, екінші және т.с.с. Сұрыптау кілт мәнінің артуы және кемуі бойынша жүргізілуі де ықтимал.DECS опциясы болмаған жағдайда сұрыптау
«артуы бойынша», ал болғанда – «кемуі бойынша» жүзеге асырыла- ды.
Сұраныс SQL тілінде мынадай түрде беріледі:
SELECT Оқушылар.ТЕГІ, Оқушылар.ИМЯ, Оқушылар.
МЕКЕНЖАЙЫ
FROM Оқушылар
WHERE (((Оқушылар. ТУҒАН КҮНІ)<#1/1/2000#))
ORDER BY Оқушылар. ТЕГІ;
Қорытынды кестеге үш өріс шығарылады: оқушының тегі, аты және мекенжайы. Сұраныстарда
өрістердің құрамдастырылған атаулары
көрсетіледі:
<кесте атауы>.<өріс атауы>
Таңдау шарты кестеден тек 2000 ж. 1 қаңтарға дейін туған (бұрын) оқушыларды ғана іздеу керктігін белгілейді. Қорытынды кестеде оқушылардың аты-жөндерінің алфавиттік түрінде ғана сұрыпталады. Осы сұранысты Access сұраныстар Конструкторын қолданып, құруға болады. Конструкторды іске қосқан соң «Кесте қосу» терезесі ашылады. Содан соң «Оқушылар» кестесін белгілеп,
Қосу
команда-
сын орындау қажет. (4.10-сурет).
4.10.-сурет. Кестені сұраныстар Конструкторына қосу
4.11.-сурет. 1 сұраныс конструкторы
4.12.-сурет. 1 сұранысты орындау нәтижесі
Сұраныстар конструкторы кесте түрінде беріледі (4.11сурет), оның бірінші жолында сұранысты қлыптастыруға қатысатын өрістер көрсетіледі. Екінші жолда тиісті өріс алынатын, кестенің атауы бола- ды. Үшінші жолда сұрыптау нышандары орналасады. Бесінші жолда жалаушалармен сұранысты орындау кезінде берілген өрісті экранға шығару қасиеті белгіленеді. Келесі жолдарда іріктеу шарты құрыла- ды. Конструкторды толтыру аяқталғаннан кейін
Орындау
команда- сын атқару керек.
Бұл сұранысты орындау нәтижесі 4.12 суретте көрсетілген. Сұранысты сақтау қажет. Сақтау кезінде диалогтік терезе ашылады, онда сұраныс үшін атау беріледі. Сұраныстың атауын стандарт- ты түрде қалдырайық.
SELECT Үлгерім. ОҚ_НӨМІРІ, Үлгерім. ПӘН, Үлгерім. ЖЫЛ FROM Үлгерім WHERE (((Үлгерім. ОҚ НӨМІРІ)= "математика") AND ((Үлгерім.ЖЫЛ)=5))
ORDER BY Үлгерім. ОҚ НӨМІРІ; Бұл командада таңдаудың екі шартын: ПӘН= "математика" ЖӘНЕ ЖЫЛ=5. өзара байланыстыратын AND (ЖӘНЕ) логикалық амалы қолданылады. Таңдаудың мұндай шартын күрделі шарт деп атаймыз. Сұраныс бойынша ақпарат кестенің осы екі шарт бір уақытта орын- далатын жазбаларынан таңдалып алынады. Күрделі шарттың жазу синтаксисіне назар аударыңдар: оның бар- лығы дөңгелек жақшаға алынады және AND басқа амалмен қосыла- тын әрбір жеке шарт сондай-ақ жақшаға алынады. Конструкторды қолданған соң бұл сұраныс 4.13-суретте көрсетіл- гендей құрылады.
Сұранысты орындау нәтижесінде 4.14-суретте берілген кесте пай- да болады.
4.8.
КӨП КЕСТЕЛІ ДЕРЕКҚОРҒА СҰРАНЫС
4.14 суретті қараңдар. Бірінші бағанда оқушылардың нөмірлері емес, олардың аты-жөндері орналасса, бірсыпыра көрнекілеу бо- лар еді. Бірақ нөмірлер мен фамилиялардың арасындағы байланыс
«Оқушылар »кестесінде берілген.
Яғни, бізге деректер екі кестеден бір уақытта қолданылатын сұра- ныс құру керек.
4.15. –сурет. Екі кестелі ДҚ схемасы
4.5-бөлімде айтылғандай, бұл екі кесте бір-бірімен ОҚ_НӨМІРІ ортақ негізгі өріс арқылы байланысқан. Кестеле арасындағы бай- ланысытың графикалық
бейнесі дерекқордың схемасы
деп аталады. Схеманы
Дерекқормен жұмыс жасау — Деректер
схемасы коман- дасын беріп, экранға шығаруға болады. Біздің жағдайда 4.15-суретте берілген бейне көрсетіледі.
4.3. мысал. «Оқушы»және «Үлгерім» байланысқан кестелерді қолданып, жыл бойы математикадан бестік алған оқушылардың тегін және атын анықтау керек.
SQLкомандасы келесі түрде беріледі:
SELECT
Оқушылар .ТЕГІ, Оқушылар.АТЫ, ҮЛГЕРІМ.ПӘН, ҮЛГЕРІМ. ЖЫЛ
FROM
Оқушылар ІNNER JOІN ҮЛГЕРІМONОқушылар. ОҚ_ НӨМІРІ = ҮЛГЕРІМ.ОҚ НӨМІРІ
WHERE
(((ҮЛГЕРІМ.ПӘН)="математика") AND ((ҮЛГЕРІМ. ЖЫЛ)=5))
ORDER BY
Оқушылар. ТЕГІ;
Бұл сұраныс бойынша қорытынды кестеге «Оқушылар» кестесі- нен екі өріс және «Үлгерім» кестесінен екі өріс қосылады. Мұнда сондай-ақ бұл екі кесте бір-бірімен ОҚ_НӨМІРІ (ON Оқушылар. ОҚ_НӨМІРІ = Үлгерім. ОҚ_НӨМІРІ) өрістері арқылы байланысқа- ны туралы ақпарат болады. Сұранысты орындау нәтижесінде 4.16-суретте көрсетілген кесте алынады. Дәл осы сұраныс Конструкторда 4.17-суретте көрсетілген.
4.16.-сурет. 3 сұранысты орындаудың нәтижесі
4. мысал . Қандай оқушылар және қандай пәндерден жылдық 5 деген баға алғандығы туралы мәліметтерді алу керек. Бұл мәлімет- терді алфавит бойынша орналастырып, пәндер бойынша топтастыру керек.
SELECT
Үлгерім ПӘН, Оқушылар.ТЕГІ, Оқушылар. АТЫ
FROM
Оқушылар ІNNER JOІN Үлгерім ON Оқушылар. ОҚ НӨМІРІ = Үлгерім. ОҚ НӨМІРІ
WHERE
(((Үлгерім.ГОД)=5))
ORDER BY
Үлгерім. ПӘН, Оқушылар.ТЕГІ;
Дәл осы сұраныс Конструкторда 4.18суретте көрсетілген.
Сұранысты орындау нәтижесінде 4.19суретте көрсетілген кесте алынады.
4.18.-сурет. 4 сұраныстың конструкторы
Бұл сұраныста ПӘН өрісі сұрыптаудың
бастапқы кілті
ретін- де, ал ТЕГІ өрісі – сұрыптаудың
екінші кілті
болғандықтан пәндер бойынша нәтижені топтастыруға қол жеткізілді.Мұндай жағдайда іріктеліп алатын жазбалар алдымен бастапқы кілт бойынша сұрып- талады. Егер бірнеше жазбаның бастапқы кілтінің мәндері сәйкес келетін болса, онда олардың тәртібі екінші кілт бойынша сұрыпта- лумен анықталады.
4.19.-сурет. 4 сұранысты орындаудың нәтижесі
4.9.
ЛОГИКАЛЫҚ ӨРНЕКТЕР ЖӘНЕ ІРІКТЕУ
Енді таңдауға сұраныс беру командасында іріктеу шарттарын тия- нақтау ережелерін жан-жақты талқылаймыз.
Іріктеу шарттары
— бұл ДҚ іріктелетін жазбалары үшін ақиқат болуы тиіс логикалық өрнек.
Логикалық өрнектер, элементтерімен сендер 1-тарауда танысқан, математикалық логика тілінде беріледі. Логиканың негізгі ұғымда- рын есімізге түсірейік, оларды білу сендерге келешекте қажет бола- ды. >= (артық немесе кем), <= (кем немесе тең). Санлдық шамаларды салыстыруолардың арифметикалық мәнінде; таңбалық шамаларды салыстыру - таңбалар тәртібін ескере отырып, кодтау кестесіндежүр- гізіледі; «күн»және «уақыт» шамалары олардың уақыттағы жүйелі- гінің мәніне қарай салыстырылады.
4.4.-кесте. Ақиқаттылық кестесі
А
В
А ЕМЕС
А ЖӘНЕ В
А НЕМЕСЕ В
И
И
Л
И
И
И
Л
Л
Л
И
Л
И
И
Л
И
Л
Л
И
Л
Л
Алдымен логикалық өрнектерді құрудың формалды мысалын- да – жазбаларды ДҚ-дан іріктеу шарттарында жаттығайық. А, В, С
-сандық өріс, ал
R
1,
R
2 және т.б. — жазбалардың сәйкестендіргіші (кілті) болатын, бір кестелі ДҚ қарастырайық ( 4.5-кесте). Әрі қарай логикалық амалдардан және олардың нәтижелерінен, яғни осы шарт- тарды қанағаттандыратын жазбалардан тұратын, іріктеу шарттары- ның мысалдары берілген. Осы мысалдармен мұқият танысып,оларды түсінуге тырысыңдар.
Шарты
Жауабы
R
1
R
1,
R
2,
R
4,
R
5
R
1,
R
2,
R
3,
R
5
R
1,
R
2,
R
3,
R
4,
R
5
R
1
R
3,
R
4,
R
5
Реляциялық ДҚ-ға сұраныстар тілінің негізінде 1970 жылдары британдық ғалым Э.Кодд ұсынған,
реляциялық алгебраның аппараты жатыр. Реляциялық алгебра логика алгебрасының дәл сол амалда- рының теоретикалық-жиын интерпретациясын қолданады. ДҚ ке- стесінде жазбалардың жиынтығы жиын ретінде қарастырылады. ДҚ- ға сұраныс беру нәтижесі - сұраныс шарттарын қанағаттандыратын, жазбалардың кейбір қосалқы жиындары. Реляциялық алгебраның негізгі амалдары: біріктіру, қиылысу, айырма, кескін және іріктеу.
4.5. кесте. Бір кестелі ДҚ
Сәйкестендіргіш
А
B
C
R1
1
2
3
R2
1
3
1
R3
2
2
2
R4
3
3
3
R5
3
2
3
Соңғы үш амал ДҚ-ға сұраныс беру шарттарында қолданылмай- ды. НЕМЕСЕ амалы әрбір екі шарттың (қатынастың) біреуін қанағат- тандыратын жазбаларды бір іріктеуге біріктіреді. Реляциялық алге- бра терминологиясында мұндай әрекет
бірігу амалына сәйкес келеді. ЖӘНЕ амалының қызметі өзгеше: алдымен бірінші шартты қанағат- тандыратын барлық жазбалар таңдалады, содан соң іріктелген жазба- лардан екінші шартты қанағаттандыратындары таңдалып алынады. Реляциялық алгебра тілінде мұндай амал
қиылысу
деп аталады.
Келесі өрнектерде түрлі логикалық амалдар кездеседі, сондықтан оларды орындау кезінде амалдардың жоғары тұрушылығын ескерген жөн:
R
1,
R
4,
R
5
R
1,
R
2,
R
5
R
1,
R
3,
R
4,
R
5
R
1,
R
5
Және, соңында, бір өрістің мәндері екінші өрістің мәндерімен, со- нымен қатар арифметикалық өрнектермен салыстырылатын мысал- дар келтірейік:
R
1,
R
2,
R
3,
R
4
R
2,
R
3,
R
4
R
2,
R
3,
R
4,
R
5
R
1
MSAccess сұраныстар Конструкторында таңдау шартын ұсыну- дың кестелік әдісі қолданылады. Толығырақ осы әдісті талқылайық. Конструктор кестесінің ұяшықтарында, «Іріктеу шарттары» деп аталатын жолдан бастап, тиісті өрістердің мәндеріне салынатын шарттар жазылады. Бір жолда тұрған шарттар бір уақытта орында- луы тиіс, яғни олар бір-бірімен ЖӘНЕ амалымен бірігеді, оны орын- даудың нәтижесі ретінде жазбалар жиынының
қиылысуы болады. Конструктордың әр түрлі жолдарына жазылған шарттар НЕМЕСЕ амалымен қосылады, және нәтижесі ретінде
жазбалардың бірігуі бо-
лады.
Кесте жазбаларды дерекқордан іріктеу кезінде сүзгінің рөлін атқа- рады: алдымен бір уақытта бірінші жолдың шарттарын қанағаттан-
дыратын жазбалар іріктеледі, содан соң оларға екінші жолдың шарт- тарын қанағаттандыратын жазбалар қосылады және т.с.с. Сұраныстар Конструкторында қолданылатын, логикалық өрне- ктерді кестелік әдіспен іске асыру мысалдары 4.6-кестеде берілген. Бұрын қарастырылған формалды мысалдан алынған іріктеу шартта- рықолданылған.
4.6. –кесте. Логикалық өрнектерді іске асыру мысалдары
Шарты
А
B
C
Шарты
А
B
C
1) А = 1 ЖӘНЕ В = 2
= 1 =2
8) А = 1 НЕМЕСЕ В = 2 ЖӘНЕ
С = 3
= 1
= 2 =3
2) А = 1 НЕМЕСЕ А = 3
= 1
9)
А ЕМЕС = 1 НЕМЕСЕ
В = 2
ЖӘНЕС = 3
<>1
= 3
= 2 =3
3) А = 1 НЕМЕСЕ В = 2
= 1
10) (А = 1 НЕМЕСЕ В = 2)
ЖӘНЕ С = 3
= 1
=3
=2
= 2 =3
4) А = 1 НЕМЕСЕ В = 2 НЕМЕСЕ С = 3
= 1
11) B>= А
>=[А]
=2
=3
5) А = 1
ЖӘНЕ В = 2 ЖӘНЕ С = 3
=1 =2 =3 12) B>=А ЖӘНЕ B>= C
>= [А] AND
>= [C]
6)
А ЕМЕС = 1
<>1
13) А = B НЕМЕСЕ А = C
= [B]
= [C]
7) А = 1
ЖӘНЕ В = 2 НЕМЕСЕ С = 3
= 1 =2
14)
С = А+B
=3
= [А]
+ [B]
10 шартқа назар аударыңдар. Кестеге жазу кезінде іс жүзінде жақ- шалар ашылды, және берілген логикалық өрнек балама өрнекпен ауыстырылды:
А
= 1 ЖӘНЕ
C
= 3 НЕМЕСЕ
B
= 2 ЖӘНЕ
C
= 3
Квадрат жақшаға алынған өрістің атауы жазбадағы осы өрістің мәнін сәйкестендіреді. Мұндай белгілеуді, түптеп келгенде, Кон- структордағы барлық шартты қолдануға болады. Мысалы,
А
= 1 қа- тынасысұраныс Конструкторында
А
бағанында екі нұсқада жазуға болады: 1) [
А
] = 1; 2) =1. Екінші нұсқа қысқарақ, сондықтан әдетте соны қолданады. Мысалдағы шартты былайша жазуға болар еді: [
А
B
] or [
А
C
4.10.
ДЕРЕКТЕР ҮЛГІСІН КЕҢЕЙТУ
Қайтадан ДҚ жобалауға келейік. 4.3. қосалқы бөлімде сипат- талған инфологиялық үлгіге сәйкес келетін деректердің толық үл- гісін құруға келесі қадам жасайық. Бір жеке сыныпты қарастырудан тұтас мектепке көшейік. Енді ДҚ-ға мектептің барлық оқушылары жайлы және олардың үлгерімі туралы мәліметтер кіреді. Мұндай кеңейтілген үлгіде объектінің жаңа типі пайда болады: СЫНЫП. Бұл объектінің атрибуттарына, әлбетте, сыныптың нөмірі (5а, 8б және т.с.с), сонымен қатар оның кейбір өзге де сипаттамала- ры жатады. Мысалы, мұндай атрибуттар ретінде сыныптағы оқушы саны,сынып жетекшісінің аты-жөні болуы мүмкін. «Сыныптар» қа- тынасын анықтайық:
СЫНЫПТАР
(СЫНЫП, СЫН_ЖЕТ, ОҚ_САНЫ)
Тиісті кестенің үзіндісі 4.20-суретте көрстеілген.
Бұл кестені «Сыныптар» және «Үлгерім» кестелерімен байла- ныстыру керек. «Сыныптар» және «Оқушылар» арасындағы байла- ныс «бірі-көпке» типіне ие болады, өйткені әрбір сыныпта көптеген оқушы бар. Кестелер арасындағы байланыс ортақ өрістер арқылы орнатылады, сондықтан «Оқушылар» кестесіне енді СЫНЫП жаңа өрісті қосу керек.
ОҚУШЫЛАР(СЫНЫП, ОҚ_НӨМІРІ, ТЕГІ, АТЫ, ЖЫНЫСЫ, ТУҒАН_КҮНІ, МЕКЕНЖАЙЫ)
СЫНЫП өрісі ОҚ_НӨМІРІ өрісімен бірге құрама кілт құрайды. Шынында да, түрлі сыныптізімдеріндегі оқушылардың нөмірлері қайталанады (1-ші, 2-ші, 3-ші және т.с.с.). Сондықтан мектеп ау- мағында әрбір нақты оқушы сөзсіз тек сынып жиынтығымен және осы сынып тізіміндегі оқушы нөмірімен ғана анықталады. Мысалы, 7б + № 3 — бұл 7б сыныптан Герасимова Анна.
«Оқушылар» кестесінің мазмұны 4.21-суретте берілген.
Мұнда тек алты түрлі сыныптың: 7а, 7б, 8а, 8б, 9а, 9б алғашқы үш оқушысы туралы деректермен берілген кестенің үзіндісі көрсетіл- ген. Жалпы мектеп үшін бұл өте үлкен кесте. Мысалы, мектепте 20 сынып болса, ал сыныптағы оқушылардың орташа саны - 30 болса, онда кесте 600 жазбадан тұратын болады. Жоғарыда айтып кеткендей, «бірі-көпке» қатынасы кестелер ара- сында бірінші кестені негізгі кілті («бірі») екінші кесте өрістерінің арасында болғанда, және, сонымен бірге, оның негізгі кілтінің то- лықтай құрамында болмаған жағдайда байланыс орнатылады. Ол не негзгі кілт болып табылмайды, не екінші кестенің негізгі кілтінің бөлігі болады. Сондықтан «Үлгерім» кестесіне де енді СЫНЫП өрісін қосу керек.
ҮЛГЕРІМ
(СЫНЫП, ОҚ_НӨМІРІ, ПӘН, 1_ТОҚС, 2_ТОҚС, 3_ ТОҚС, 4_ТОҚС, ЖЫЛ)
Екі сегізінші сыныптың үш оқушысының үш пән бойынша үл- герімі туралы мәліметтер берілген «Үлгерім» кестесінің үзіндісі 4.22 кестеде көрсетілген.
4.23.сурет. Деректердің үш кестелік үлгісінің схемасы
Шын мәнісінде, мұндай кестенің өлшемі «Оқушылар» кестесінікі- не қарағанда әлдеқайда үлкен. Егер мектептің 20 сыныбында орташа алғанда 30 адамнан оқыса, ал оқылатын пәнде саны 10 тең болса, онда «Үлгерім» кестесінде 6 000 жазба болуы тиіс.
Нәтижесінде келесі құрылымдағы үш кестелі ДҚ пайда болды:
СЫНЫПТАР
СЫНЫП, СЫН_ЖЕТ, ОҚ_САНЫ)
ОҚУШЫЛАР
(СЫНЫП, ОҚ_НӨМІРІ, ТЕГІ, АТЫ, ЖЫНЫСЫ, ТУҒАН_КҮНІ. МЕКЕНЖАЙ)
ҮЛГЕРІМ
(СЫНЫП, ОҚ_НӨМІРІ, ПӘН, 1_ТОҚС, 2_ТОҚС, 3_ТОҚС, 4_ТОҚС, ЖЫЛ)
MSAccess мұндай ДҚ құру кезінде оның схемасы 4.23. суретте берілген графикалық түрде бейнеленеді.
4.11.
ІРІКТЕУДІҢ КҮРДЕЛІ ШАРТТАРЫМЕН БЕРІЛГЕН СҰРАНЫСТАР, ЕСЕПТЕЛЕТІН ӨРІСТЕР
Құрылған үш кестелі ДҚ ақпаратты іздестірудің бірнеше мысалын қарастырайық. Тиісті сұраныстарда іріктеудің күрделі шарттары қол- данылатын болады.
тегін шығару.
Бұл сұраныста ДҚ барлық үш кестесі де қолданылады. Мұндай сұраныстың командасы SQL –да біршама ауқымды түрде беріледі:
SELECT
Оқушылар.ТЕГІ, Оқушылар. СЫНЫП, СЫНЫПТАР. СЫН ЖЕТ
FROM
(СЫНЫПТАР ІNNER JOІN Оқушылар ON СЫНЫПТАР.
СЫНЫП = Оқушылар.СЫНЫП) ІNNER JOІN Үлгерім ON (Оқушылар.ОҚ НӨМІРІ = Үлгерім.ОҚ НӨМІРІ) AND (Оқушылар. СЫНЫП = Үлгерім. СЫНЫП)
WHERE
(((Оқушылар. СЫНЫП) Lіke "8?") AND ((Үлгерім. ПӘН)="СЫНЫП") AND ((Үлгерім. [1_тоқс])=3)) OR (((Оқушылар. СЫНЫП) Lіke "8?") AND ((Үлгерім. ПӘН)="тарих") AND ((Үлгерім.[2 тоқс])
=3))OR (((Оқушылар. СЫНЫП) Lіke "8?") AND
((Үлгерім.ПӘН)="тарих") AND ((Үлгерім.[3 тоқс])
=3)) OR (((Оқушылар. КЛАСС) Lіke "8?") AND
((Үлгерім.ПӘН)="СЫНЫП") AND ((Үлгерім.[4 тоқс])=3));
Мұндағы 8-сыныптарға қатысы бар жазбаларды іріктеу Lіke «8?» «бетперде» бойынша жүзеге асырылады. Бұл сыыныптың атауы біріншісі «8» таңбасы болатын екі таңбадан тұратынын білдіреді. Ал дәл осы команда сұраныс конструкторында қалай құрылаты- нын көрейік (4.24 сурет).
Мұндай сұранысты орындаудың нәтижесі 4.25 суретте көрсетіл- ген.
Бұл сұраныста ҚОСЫНДЫ
есептелетін өріс
қолданылатын бола- ды. Бұл өріс тек сұраныста ғана болады және ДҚ кестелеріне кірмей- ді. Команда на SQL команда келесідей беріледі:
SELECT
Оқушылар. СЫНЫП, Оқушылар.ТЕГІ, [Үлгерім] . [1 тоқс] + [2 тоқс] + [3 тоқс]+[4 тоқс]
AS ҚОСЫНДЫСЫ
FROM
Оқушылар ІNNERJOІN Үлгерім ON (Оқушылар.
ОҚ_НӨМІРІ = Үлгерім.ОҚ_НӨМІРІ) AND (Оқушылар. СЫНЫП = Үлгерім. СЫНЫП)
WHERE
(((Оқушылар. СЫНЫП) Lіke"8?") AND(([Үлгерім]. [1_тоқс]+[2_тоқс]+[3_тоқс]+[4_тоқс])>16)
4.24. сурет. 1 есепке берілген сұраныстар Конструкторы
AND((Үлгерім.ПӘН)= "математика")) OR(((Оқушылар. СЫНЫП) Lіke"9?") AND(([Үлгерім].[1 тоқс]+[2 тоқс]
+[3 тоқс]+ +[4 тоқс])>16) AND((Үлгерім.ПӘН)= "математика"))
ORDER BY[Үлгерім].[1 тоқс]+[2 тоқс]+[3 тоқс]+
+[4_тоқс]
DESC
; Қорытынды кестеде ҚОСЫНДЫ тақырыбымен өріс шығарылады. Осы өріс бойынша сұрыптау жүргізуге, іріктеу шартын тағайындауға болады. Есептелетін өріс өрнек түрінде жазылады, берілген мысал- да – бағалармен берілген төрт өрістің мәндерінің қосындысы. Бұл өрнектерде өрістердің аттары айнымалы шамалар ретінде қабылда- нады және шаршы жақшаға алынады. Өрнек бағдарламалауда және электронды кестелерде қолданылатын арифметикалық өрнектерге арналған дәстүрлі ереже бойынша жазылады.
4.25.сурет. 1 есепке берілген сұраныстың нәтижесі
Берілген сұраныс конструктордың көмегімен 4.26 суретте көр- сетілген құрырады. Бұл сұранысты орындау нәтижесінде 4.27 суретте көрсетінген ке- сте шығарылады.
4.12.
ҚОРЫТЫНДЫ СҰРАҚТАР ЖӘНЕ ЕСЕПТЕР
Жазба топтарында есептеулерді орындайтын сұраныстар
қоры- тынды жазбалар
деп аталады. Мұндай есептеулер: кейбір сандық өріс мәндерін қосу, еңкөп және ең аз мәнді табу, орташа мәнді есеп- теу, қандай да бір нақты мәндер санын есептеу және басқалары бола алады.
Келесі мысалды қарастырайық: мектептің әрбір сыныбы үшін ин- форматика пәні бойынша үдіктер санын анықтау керек. Бұл тапсыр- маны орындау үшін «Үлгерім» кестесінен жазбаларды топтастыру, «Информатика» пәніне қатысты жазбаларды іріктеу керек, олардың ішінен тек жылдық бағасы «5» болатындарды таңдап, мұндай жаз- балар санын есептеу керек.
Тапсырманы орындау тәртібі MS Access мынадай түрде беріледі: Содн соң барлық өрістерде «Топтық амал» жолында «Топтасты- ру» мәні белгіленеді. ПӘН өрісі үшін «= информатика» шартын енгізу қажет. ЖЫЛ өрісі екі рет қайталанған. Бірінші бағанда жылдық бағалардың таңдалатын мәндеріне берілген шарт беріледі. Бұл шарт « = 5». Екін- ші бағанда қорытынды функцияны орналастыру қажет. Қорытын- ды функция «Топтық амалдар» жолының және ЖЫЛ екінші өрістің қиылысындағы тордағы батырманы шерткенде ашылатын тізімнен таңдалады. Санын есептеу фнукциясы бұл тізімде «Count» атауына ие болады.Сұраныстың соңғы түрі 4.28 суретте берілген.
Бұл команда SQL былайша жазылады:
SELECT
Үлгерім. СЫНЫП, Үлгерім.ПӘН, Үлгерім. ЖЫЛ, Count (Үлгерім. ЖЫЛ) AS [Count-ЖЫЛ]
FROM
Үлгерім
GROUP BY Үлгерім. СЫНЫП, Үлгерім.ПӘН, Үлгерім.ЖЫЛ
HAVІNG
(((Үлгерімь.ПӘН)="информатика") AND ((Үлгерім.ЖЫЛ)=5)); Бұл сұраныстың нәтижесі ретінде 4.29 суретте берілген кесте бо- лады. Нәтиженің мағынасы келесі: 8а сыныпта информатикадан бір бестік; 8б сыныпта – үш бестік және т.с.с. Келесі сұраныста әрбір сынып үшін информатика бойынша жыл- дық бағалардың қосындысы анықталады. Мұнда топтастыру екі өріс бойынша жүргізіледі: СЫНЫП және ПӘН = «информатика». Бұл өрістердің мәндері бірдей болған жазба топтарында жылдық баға- лар қосылады. Сандық өрістің мәндері жазбаларының топтары үшін қосу функциясы SUM атауына ие болады. Конструктордың қолда- нылуымен сұраныс 4.30 суретте көрсетілгендей құрылады. Бұл сұранысты орындау нәтижесінде 4.31 суретте көрсетінген ке- стені аламыз.
Жүзеге асырылуы үшін ДҚ-дың: «Сыныптар», «Оқушылар», «Үл- герім» барлық үш кестесініңдеректері қолданылатын сұранысты қа- растырайық (4.32 сурет). Әрбір пән бойынша 9-шы сынып оқушылары арасында жыл қо- рытындысы бойынша барлық үздіктердің тізімін алу қажет болды делік. Қорытынды кестеде сыныпты, сынып жетекшісін, оқушының аты-жөнін және «5» жылдық баға алған пәнді көрсету керек. Мұндай сұранысты орындау нәтижесі ретінде 4.33 суретте беріл- ген кесте болады. Егер алынған тізім басылған құжат түрінде мектеп әкімшілігіне қажет болса, онда мұндай нысанда ол ыңғайсыз болады. Рәсімдеудің белгілі бір ережелеріне сәйкес келетін баспа құжаттар
есептер деп аталады. ДҚБЖ-де есептерді алу мүмкіндігі қарастырылған. Есептер үшін ақпарат бастапқы кестелерден де, сонымен қатар сұраныс нәти- желеінен де алынады. MS Access ДҚБЖ-де есеп құрудың неғұрлым оңтайлы тәсілі - Конструкторды пайдалану.
Есептер конструкторы құжаттың тиісті құрылымын жасауға, ғаріпті, стильді, толтыруды және т.б. рәсімдеуге мүмкіндік береді. Есептер Шеберінің көмегімен құжатты бірнеше стандартты пішімде алуға болады. Шебердің көмегімен жасалған құжатты есептер Кот- структорының көмегімен редакциялауға болады.
Бұрын алынған сұраныстың негізінде 4.34 суретте берілген есеп құрылды.
4.34.сурет. Үздіктердің тізімімен берілген есеп
4.13.
ҚОРЫТЫНДЫ ЖОБА: МЕКТЕПТІҢ АҚПАРАТТЫҚ ЖҮЙЕСІН КЕҢЕЙТУ
Жобаның мақсаты
— мектеп оқушыларының үлгерімі тура- лы мәліметтермен құрылған дерекқорды кеңейту және қосымша мәліметтер жасау.
1 кезең . 4.4 суретте бейнеленген инфологиялық үлгіге сәйкес ке- летін мектептің ақпараттық жүйесі үшін дерекқор үлгісін құрастыру. Берілген кезеңді орындау үшін құрылған үлгіге мектептің оқы- тушылық құрамы туралы ақпаратты қосу қажет. ДҚ-да мұғалімдер туралы: «тегі», «аты», «әкесінің аты», «туған күні», «тұрғылықты мекенжайы», «оқыған оқу орны»және «жоо аяқтаған жылы» сияқты мәліметтер сақталуы тиіс делік. Бұдан басқа, ДҚ әрбір мұғалім қан- дай пәнді және қай сыныптарда оқытатыны жайлы мәліметтер болуы
тиіс.
Жоғарыда аталған барлық деректерді екі қатынас арасында бөлу керек. Оларды «Мұғалімдер» және «Жүктеме» деп атайық. «Мұғалім- дер» қатынасына тек мұғалімнің жеке атрибуты ғана кіруі тиіс:
МҰҒАЛІМДЕР
МҰҒ_К
ОД
Ы, ТЕГІ, АТЫ, ӘКЕСІНІҢ АТЫ, ТУҒАН КҮНІ, МЕКЕНЖАЙЫ, ЖОО, ЖЫЛ,_ЖОО)
Бұл қатынасқа кілт ретінде «Мұғалімнің коды» өрісін енгізу
«ОҚУШЫНЫҢ НӨМІРІ» өрісін «Оқушылар» қатынасына енгізумен бірдей мағынаға ие болады.
Мұғалімдер туралы мәліметтермен берілген бірінші жеті жазба
4.35 суретте көрсетілген.
Енді біз тағы бір маңызды проблемаға ұшырасамыз. 4.4 суреттегі схемада «көбі-көпке» қатынасымен «Мұғалімдер» және «Сыныптар» объектілерімен байланысқан «Пәндер» объекті берілген.
4.35.сурет. «Мұғалімдер» кестесі
сурет. «Жүктеме» кестесі
Инфологиялық үлгіде бұл мүмкін бола- ды.
Алайда, деректердің үлгісін құра оты- рып, қолданылатын ДҚБЖ жүктелетін шектеулерді ескеруге тиіспіз. Нақтырақ айтқанда, MS-Access ДҚБЖ деректер схемларында «көбі-көпке» қатынасын қол- дануға мүмкіндік бермейді. Тек «бірі-бір- ге» және «бірі-көпке» қаатынастары ғана рұқсат етіледі. Бұл мәселені келесідей шешуге болады: сызбаға «Пән» объектінің орнына «Жүктеме» деп атайтын объектіні енгіземіз. Тиісті қатынастың жазбаларын- да оқу жүктемесін мұғалімдер арасында бөлу туралы ақпарат, яғни берілген сыныпта берілген пәнді қандай мұғалім оқытатындығы ту- ралы ақпарат болады. «Жүктеме» қатынасының құрылысы келесідей болады:
ЖҮКТЕМЕ
СЫНЫП,
П
ӘН, МҰҒ_КОДЫ)
«Жүктеме» кестесінің үзіндісінде алты сыныпта әрқайсысында үш пән бойынша мұғалімдердің оқу жүктемесін бөлу туралы ақпарат болады (4.36 сурет). Берілген екі кестеден, мысалы, 8-ші және 9-шы сыныптарда информатика пәнін Жуковский Дмитрий Викторович оқытатыны көріеді. «Жүктеме» қатынасы «Мұғалімдер» және «Үлгерім»,сонымен қатар «Мұғалімдер» және «Сыныптар» қатынастары арасындағы байланыс функциясын атқарады. Алынатын деректер схемасы 4.37 суретте көрсетілген. «Мұғалімдер» және «Жүктеме» кестелерінің арасында «бірі-көп- ке» байланысы бар, өйткені, бір мұғалім әдетте бірнше сыныпта оқы- тады және бір ғана пәнді оқытып қоймайды. Байланыс МҰҒ_КОДЫ ортақ өрісі арқылы жүзеге асырылады. «Сыныптар» және «Жүкте- ме» кестелері арасындағы байланыс сондай-ақ «бірі-көпке» типіне ие болады, өйткені бір сыныпта көптеген пәндер оқытылады, бірақ берілген сыныпта берілген пәнді тек бір мұғалім оқытады. Байланыс СЫНЫП ортақ өріс арқылы орнатылады.
Ақыр соңында келесі құрылымы бар, бес кестелі ДҚ жобаланды:
МҰҒАЛІМДЕР
МҰҒ_К
ОД
Ы, ТЕГІ, АТЫ, ӘКЕСІНІҢ АТЫ, ТУҒАН_КҮНІ, МЕКЕН-ЖАЙЫ, ЖЫЛЫ_ЖОО)
ЖҮКТЕМЕ
СЫНЫП,
П
ӘН, МҰҒ КОДЫ)
СЫНЫПТАР
СЫНЫП, СЫН ЖЕТ, ОҚ САНЫ)
ОҚУШЫЛАР
СЫНЫП,
О
Қ_НӨМІРІ, ТЕГІ, АТЫ, ЖЫНЫСЫ, МЕКЕНЖАЙЫ)
ҮЛГЕРІМ
(СЫНЫП, ОҚ НӨМІРІ, ПӘН, 1_ТОҚС, 2_ТОҚС, 3_ТОҚС, 4_ТОҚС, ЖЫЛ) ДҚ жаңа нұсқасында «Оқушылар» және «Үлгерім» кестелері бұрынғы қалпында сақталды. Ал «Сыныптар» қатынасында СЫН_ ЖЕТ өрісі енді «Мұғалімдер» кестесінде сынып жетекшінің реттік нөміріне (кодына) нұсқама беру енгізілген. Бұл өрістің типі мәтіндік- тен сандыққа өзгерген. «Сыныптар» кестесі енді 4.38 суретте беріл- ген көрініске ие болады.
Реляциялық ДҚ телриясында алынған деректер үлгісі
деректердің ғаламдық схемасы
деп аталады. Ғаламдық мағынасы схема жеке қо- сымшаларға, яғни деректерді өңдеудің жеке есептерді шешугебай- ланбағанын білдіреді. Сонымен бірге оның негізінде ДҚ енгізілген ақпарат шегінде көптеген осындай нақты есептерді шығаруға бола- ды. ДҚ мұндай қасиеті
қосымшаларға тәуелді болмау
ұғымын біл- діреді.
Жобаның 1-кезеңін орындауға берілген тапсырмалар
2-кезең.
Құрылған ДҚ сұраныстар сериясын іске асыру.
1-кезеңде құрылған бес кестелі деректер үлгісі ДҚ-ға салынған ақпарат шегінде дерекқордағы көптеген қосымшаларды (сұраны- старды) іске асыруға мүмкіндік береді. Ғаламдық схемада нақты қосымшаның (ұсыныстың) көзқарасы тұрғысынан алғанда «артық» ақпарат болады. Әдетте қандай да бір сұранысты қанағаттандыру үшін бүкіл ғаламдық схема қажет емес, оның
қосалқы схема деп ата- латын шағын бір бөлігі ғана қолданылады. Ғаламдық схема неғұр- лым толық болса, оның негізінде сан түрлі қосымшалар құру мүмкін- дігі соғұрлым арта түседі. Мұндай сұранысты орындау үшін бір-бірімен байланысқан екі қа- тынастан тұратын: «Сыныптар» және «Мұғалімдер» ғаламдық схе- маның тек бір бөлігі ғана қолданылады. Бұл берілген қосымша үшін қосалқы схема болып табылады. Сұраныс құру кезінде келесі ерекшелікті ескеріңдер. Міндетті түрде сұраныс командасында үш кестеден: «Оқушылар», «Мұғалім- дер» және «Үлгерімнен» тұратын өрістер қатысатын болады. Алайда қолданылатын қосалқы схемада төртінші кесте –«Жүктеме» болуы тиіс. Оны елемеуге болмайты, өйткені «Жүктеме» кестесі арқылы
«Мұғалімдер» және «Үлгерім» арасында байланыс орнатылады. ден тұратын кестені алыңдар. Кестеде сыныпты, математика пәні мұғалімінің ТАӘ, оқушының аты-жөнін көрсетіңдер.
Бұл есепті шығару үшін 6-тапсырмадағыдай қосалқы схема қол- данылады.
Бұл тапсырманы орындау үшін «Үлгерім» кестесінен жазбаларды топтастыру, сыныптар бойынша «Информатика» пәніне қатысты жаз- баларды іріктеу, олардың ішінен жылдық бағасы «5» болатындарын ғана таңдап алу керек, және мұндай жазбалардың санын анықтаңдар.
9 тапсырма . Мектеп мұғлімдері арасында оқу жүктемесін бөлу туралы деректер бар кестені алыңдар. Бұл кестеде әрбір мұғалім үшін қандай пәндерді және қай сыныптарда оқытатыны туралы ақпа-
рат көрсетілкі тиіс.
Бізді қызықтыратын ақпарат «Мұғалімдер» және «Жүктеме» ке- стелерінде болады. Бұл сұраныста ешқандай іріктеу шарты жоқ.
10 тапсырма . 9-тапсырмаға берілген нәтижені есептер Шеберін пайдаланып, есеп түрінде рәсімдеңдер.
Қорытынды есеп 4.39 суретте көрсетілгендей болуы тиіс.
БАҚЫЛАУ СҰРАҚТАР ЖӘНЕ ТАПСЫРМАЛАР
б) деректерді сақтау, іздестіру және сұрыптауды жүзеге асыру үшін;
в) басқару шешімдерін қабылдау үшін.
АВТОБУСТАР
(МАРШРУТ НӨМІРІ, АЛҒАШҚЫ АЯЛДАМА, СОҢҒЫ АЯЛДАМА)
КИНО
(КИНОТЕАТР, СЕАНС, ФИЛЬМ, РЕСЕЙЛІК, ҰЗАҚТЫҒЫ,)
САБАҚТАР
(АПТА КҮНІ, САБАҚ НӨМІРІ, СЫНЫП, ПӘН, ОҚЫТУШЫ)
типтері, негізгі кілт): ҰШАҚТАР САПАРЫ, ҚАЛА МЕКТЕП- ТЕРІ, ӘЛЕМ ЕЛДЕРІ.
ЕМХАНА
(НАУҚАСТЫҢ ТЕГІ, КЕЛУ КҮНІ ТУҒАН КҮНІ, УЧАСКЕСІ, ДӘРІГЕР, ДИАГНОЗЫ)
ҰШАҚ САПАРЫ
(САПАРДЫҢ НӨМІРІ, ҰШУ КҮНІ, ҰШУ УАҚЫТЫ, БЕЛГІЛЕНГЕН ПУНКТ, ҰШАҚТЫҢ ТҮРІ, ОРЫН САНЫ, ЖОЛДА ҰШУ УАҚЫТЫ, КЕМЕ _КОМАНДИРІ, ҰШҚЫШТЫҢ_КЛАССЫ) A. Оқу жылының барлық төрт тоқсанында тарихтан бес деген баға алған оқушылардың тегі, аты және сыныптары берілген тізімді алу. Б. Жыл бойы «біркелкі» оқыған, яғни барлық тоқсандық бағлары бірдей болған оқушылар үшін тегі, аты, сыныбы және математи- кадан жылдық бағасы көрсетілген тізімді алу. В. Математикадан жылдық бағасы олардың төрт тоқсан бойынша орташа бағасынан жоғары болған 9-шы сынып оқушыларының тізімін алу.
Әдебиеттер тізімі
Абрамов В.Г.
Тілге кіріспе Паскаль / В.Г. Абрамов, Н. П. Трифо¬нов, Г. Н. Трифонова. — М. : Ғылым, 1988.
Алексеев Е.Р.
FreePascal, Lazarus/ Е.Р. Алексеев, О. В. Чеснокова, Т. В. Кучерт. — М. : ДМК-пресс, 2010.
Бакаревич Ю. Б.
MіcrosoftAccess2000 / Ю. Б. Бакаревич, Н. В. Пушкина.
— СПб. : БХВ-Санкт-Петербург, 2004.
Ван Тассел Д.
Бағдарламаларды стилі, әзірлеу, тиімділігі, ретке келтіру және сынау / Д. Ван Тассел. — М. : Мир, 1981.
Вирт Н.
Деректердің алгоритмі және құрылымы / Н. Вирт. — М. : Мир, 1989.
Грогоно П.
Паскаль тілінде бағдарламалау / П. Грогоно. — М. : Мир, 1982.
Дейт К.
Дерекқор жүйесіне кіріспе / К.Дейт ; ағылш. тіл.ауд. — 6-е бас.
— К. : Диалектика, 1998.
Епашников А.М.
Ортада бағдарламалау ТурбоПаскаль 7.0 / А. М.Епаш- ников, В.А. Епашников. — М. : МИФИ, 1994.
Иванова Г. С.
Объектілі-бағдарланған бағдарламалау : оқулық / Г. С. Ива- нова, Т. Н. Ничушкина, Е. К. Пугачев ; Г. С. Иванованың ред. — М. : Н. Э. Бауман ат. МГТУ басп., 2001.
Йенсен К.
Паскаль — пайдаланушыларға арналған нұсқаулық және тілді сипаттау / К. Йенсен, Н. Вирт. — М. : Мир, 1982.
Касаткин В. Н.
Ақпарат. Алгоритмдер. ЭЕМ / В. Н. Касаткин. — М. : Просвещение, 1991.
Мартин Дж.
Дерекқорды және есептеу жүйелерін ұйымдастыру / Дж.
Мартин. — М. : Мир, 1980.
Михеева В.
MіcrosoftAccess2002 / В. Михеева, И. Харитонова. — СПб. : БХВ-Санкт-Петербург, 2002.
Окулов С. М.
Бағдарламалау бойынша есептер/ С.М. Окулов, Т. В. Аших- мина, Н.А.Бушмелева. — М. : БИНОМ. Білім зертханасы, 2006.
Окулов С. М.
Бағдарламалау негіздері / С. М. Окулов. — М. : БИНОМ. Білім зертханасы, 2012.
Окулов С.М.
Алгоритмдердегі бағдарламалау / С.М.Окулов. — М. : БИ- НОМ. Білім зертханасы, 2013.
Ушаков Д. М.
Паскаль оқушылар үшін / Д. М. Ушаков, Т. А. Юркова. — СПб. : Питер, 2010.
Фаронов В. В.
Delphі. Жоғары деңгейлі тілде бағдарламалау : оқулық / В. В. Фаронов. — СПб. : Питер, 2003.
Шупруга В. В.
Delphі2006 мысалдарда / В. В. Шупруга. — СПб. : БХВ- Санкт-Петербург, 2006.
Мазмұны
Алғысөз. 4
құрылымы және әдістері. 50
2.4 Паскаль тілімен алғашқы танысу 52
Есептелетін өрістер. 202
Оқу басылымы
Семакин Игорь Геннадьевич Бағдарламалау және дерекқор негіздері Оқулық
Редакторы
Л. В. Толочкова
Техникалық редакторы
Е. Ф. Коржуева
Компьютерлік беттеу:
Р. Ю. Волкова
Корректоры
А. П. Сизова
Бас. № 101116448. Баспаға жіберілді 08.07.2014. Піішімі 60 х 90/16. «Балтика» гарнитурасы . Офсеттік қағаз. Офсеттік баспа. П. б. шарт. 14,0. Таралымы 2 000 дана. Тапсырыс №
«Академия» баспа орталығы» ЖШБ.
www.academіa-moscow.ru129085,
Мәскеу, Бей- бітшілік д-лы, 101В, құр. 1.
Тел./факс: (495) 648-0507, 616-00-29.
Санитариялық-эпидемиологиялық қорытынды № РОСС RU. AE51. H16592 29.04.2014ж. «Тверской полиграфический комбинат» ААҚ. 170024, Тверь қ., Ленин д-лы, 5. Теле- фоны: (4822) 44-52-03, 44-50-34. Телефон/факс (4822) 44-42-15.
Homepage— www.tverpk.ru
Электронды пошт
а(E-maіl) — sales@tverpk.ru
Пікірлер (0)
Пікір жазу үшін аккаунтқа кіріңіз. Кіру