109
ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ ПАВЛОДАР МЕМЛЕКЕТТІК ПЕДАГОГИКАЛЫҚ ИНСТИТУТЫ Т.Қ. ҚОЙБАҒАРОВА Turbo Pascal программалау тілі Павлодар 2005 1

Turbo Pascal программалау тілі - lib.ppi.kzlib.ppi.kz/Koibagarova_turbo_paskal.pdf · МАЗМҰНЫ КІРІСПЕ 5 1. ТУРБО ПАСКАЛЬ ПРОГРАММАЛАУ

  • Upload
    dinhdan

  • View
    327

  • Download
    18

Embed Size (px)

Citation preview

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІПАВЛОДАР МЕМЛЕКЕТТІК ПЕДАГОГИКАЛЫҚ ИНСТИТУТЫ

Т.Қ. ҚОЙБАҒАРОВА

Turbo Pascal программалау тілі

Павлодар2005

1

ББК 32.973-01я73 УДК 981.3 Қ59

Павлодар мемлекеттік педагогикалық институтыныңғылыми Кеңесі баспаға ұсынады

Пікір жазғандар: Павлодар мемлекеттік педагогикалық институтының профессоры, информатика кафедрасының меңгерушісі ф.м.ғ.к. – Т.С. Сабыров; С.Торайғыров атындағы Павлодар мемлекеттік унивеститетінің информатика кафедрасының меңгерушісі, ЖАК доценті, п.ғ.к. – Ж.Қ.Нурбекова.

Қойбағарова Т.Қ. Қ59 Turbo Pascal программалау тілі: Оқу-әдістемелік құралы. – Павлодар:

ПМПИ, 2005. – 104 бет.

ISBN 9965-410-27-5

Оқу әдістемелік құралы «Програмалау тілдері» пәнінің бағдарламасына сәйкес, 050111- Информатика, 050109 – Математика, 050011 – Физика мамандықтарының студенттері үшін дайындалған, сонымен қатар Turbo Pascal тілін өз бетімен оқып, игеруіне ынта қойған студенттерге, программалау жүйесін тереңдетіп оқытатын лицей, колледж шәкірттеріне т. б. оқырмандарға арналған.

ISBN 9965-410-27-5 ББК 32.973-01я73

05)05(001404000000

−−Ќ

© Қойбағарова Т.Қ., 2005.© Павлодар мемлекеттік педагогикалық институты, 2005.

2

МАЗМҰНЫ

КІРІСПЕ 5 1. ТУРБО ПАСКАЛЬ ПРОГРАММАЛАУ ОРТАСЫ 7 2. ТУРБО ПАСКАЛЬ ТІЛІНДЕ ПРОГРАММАЛАУ 10 БАСТАМАЛАРЫ 10 2.1. Паскаль тілінің негізгі элементтері 10

Паскаль тілінің алфавиті және атаулар сөздігі ................................................................................... 10 Паскальдағы сөздер ............................................................................................................................. 10 Идентификатор ..................................................................................................................................... 11 Тұрақтылар және айнымалылар ......................................................................................................... 12

2.2. Берілім типтері 12 Турбо Паскальдағы берілім типтерінің тізбесі .................................................................................. 12 Логикалық тип ....................................................................................................................................... 14

2.3. Стандартты функциялар 16

2.4. Амалдар, математикалық функциялар, өрнектер 16

2.5. Программаның құрылымы 20

2.6. Енгізу-шығару процедуралары 22 Экранға шығару форматтары ............................................................................................................... 23

2.7. Қарапайым операторлар 28

2.8. Алгоритмдеудің негізгі құрылымдары 28

2.9. Тізбектеу құрылымды алгоритмдер 29

2.10. Тармақталу құрылымды алгоритмдерді ұйымдастыру 31 Құрамды оператор ................................................................................................................................. 33 Күрделі шартты операторлар ............................................................................................................... 33 CASE таңдау операторы ...................................................................................................................... 36

2.11. Қайталау құрылымды алгоритімдерді ұйымдастыру 38 FOR параметрлі цикл операторы ........................................................................................................ 38 Whіle алдыңғы шартты цикл операторы ............................................................................................. 42 Repeat кейінгі шартты цикл операторы .............................................................................................. 43 Фибоначчи сандарын есептеу .............................................................................................................. 44 Евклид алгоритмі .................................................................................................................................. 45

2.12. Процедуралар және функциялар 46 Процедуралар ........................................................................................................................................ 46 Функциялар ............................................................................................................................................ 51 Рекурсивті программалау мысалдары ................................................................................................. 56

3. ҚҰРЫЛЫМДЫ БЕРІЛІМ ТИПТЕРІ 65 3.1. ЖОЛДАР 65

Типті сипаттау ....................................................................................................................................... 65 Жолдық өрнектертер ............................................................................................................................. 66 Жолдық процедуралар және функциялар ........................................................................................... 68

3.2. МАССИВТЕР 73 Массивті сипаттау ................................................................................................................................. 73 Бір өлшемді массивтердің элементтерін өңдейтін стандартты алгоритмдер кестесі ..................... 76 Екі өлшемді массивтердің элементтерін өңдейтін стандартты алгоритмдер кестесі ..................... 77

3

Символдық массивтер .......................................................................................................................... 79 Іріктеу алгоритмдері ............................................................................................................................. 80 «Қалқу» әдісімен іріктеу ...................................................................................................................... 80 Сызықты іріктеу әдісі ........................................................................................................................... 81 Ұсақтап бөлу арқылы тез іріктеу әдісі ................................................................................................ 82

3.3. ЖИЫНДАР 86 Типті сипаттау ....................................................................................................................................... 86 Жиындарға қолданылатын амалдар .................................................................................................... 86

3.4 ЖАЗБАЛАР 92 Типті сипаттау ....................................................................................................................................... 92 Сатылы жазбалар ................................................................................................................................... 94

3.5. ФАЙЛДАР 99 Файлдық типтер және айнымалылар ................................................................................................... 99 Сыртқы файлды программамен байланыстыру .............................................................................. 101 Файлдан оқу ......................................................................................................................................... 101 Файлға жазу ......................................................................................................................................... 102 Файлды толықтыру ............................................................................................................................. 103 Мәтіндік файлдар ................................................................................................................................ 105

Қолданылған әдебиеттер 108

4

КІРІСПЕПрограммалаудың жаңа тілін құрастыратын автор әрқашанда

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

Осындай мақсатты алдына қойған адам – Никлаус Вирт, Цюрихтегі (Швейцария) Жоғарғы техникалық училищесінің информатика профессоры, 1970 жылы сол талапқа сай тіл құрған.

Никлаус Вирт өзінің ұсынған алгоритмдік тіліне атақты француз ғалымы, ең бірінші дүние жүзінде есептеуіш техниканы ойлап тапқан адам Блэз Паскальдің (1623–1662 ж.) атын қойған.

Паскаль тілі өзінің қарапайымдылығымен және логикасына байланысты дүние жүзінде кеңінен орын алды. Қазір барлық есептеуіш техника осы тілде жұмыс істей алады. Программаның дұрыстығын өте жеңіл тексеруге болады. Себебі, оның мазмұны өте қарапайым және айқын. Сонымен қатар, Паскаль тілі жаңа бастаған программистерге программалаудың жақсы әдісітерін үйретуге ыңғайды.

Тілдің әрі қарай даму тарихы, электронды есептеуіш техниканың даму мүмкіндіктерімен тікелей байланыста болды. Паскаль тілінің әр түрлі версиялары жаңа мүмкіндіктермен толықтырыла дамыды.

Тілдің кейінгі версияларының бірін – Паскаль 7.0-ді, MS-DOS және Wіndows операциялық жүйелер орталарына үйлестіріп, 1992 жылы Borland және Mіcrosoft фирмалары шығарды.

Ары қарай тілдің процедуралы – бағытталған Turbo Pascal, Borland Pascal, обьектілі – бағытталған Delphі программалау жүйелері дамыды.

Стандарты Паскальдан бастап, Turbo Pascal және обьектілік Pascal тілдеріне ортақ іргелі теория, ұсынылып отырған оқу-әдістемелік құралда баяндалады.

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

Қазақстан Республикасының білім беру жүйесін информатизациялау бағраламасының шеңберінде, информатика мамандарын дайындауда жаңа стандарттардың талаптарына сәйкес «Алгоритмдеу және программалау» бөлімінің бағдарламасы қамтылған.

5

Оқу әдістемелік құралда, автордың Паскаль, Turbo Pascal тілдерінен дәріс беру әдістемелік тәжрибесі жинақталған.

Программалауды игеретін институттың, лицейдің, колледждің студенттеріне, мұғалімдерге, оқушыларға арналған.

Құралдың материалының құрылымы, оқушының алған білімі мен іс – әрекет түрлерін практика жүзінде қолдана алатындай дәрежеде меңгертуге бағытталған.

Әр жаңа ұғымның теориясы жүйелі түрде баяндалып, мысалдар, практикалық жаттығулар, пысықтау сұрақтары және есептермен толықтырылған.

Материалдың осылай орналасуы мұғалімдерге әдістемелік, ал студенттерге оқу құралы ретінде қолдануға ыңғайлы.

6

1. ТУРБО ПАСКАЛЬ ПРОГРАММАЛАУ ОРТАСЫТурбо Паскаль программалау жүйесі интеграциаланған

(integration – жеке элементтерді біріктіру) программалау ортасы болып табылады.

Турбо Паскаль ортасында программаға қолданылатын құралдар: мәтіндік редакторы, компиляторы, компоновщигі, программаны жөндеушісі тағы басқа кеңейтілген сервистік мүмкіндіктер бір жерде жүйелі түрде біріктірілген.

Интеграциаланған Турбо Паскаль программалау жүйесінің 6.0, 7.0 және одан жоғары версиясының кеңейтілген мүмкіндіктері мол:

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

- көлемі 1 Мбайтқа дейін мәтінді жөндей алатын, көп файлды редакторының болуы;

- программаны жөндеу мүмкіндіктерінің кеңейтілгені;- Turbo Vision қолданбалы программаларын құруға объектілі-

бағытталған ортасының болуы;- ішкі анықтама жүйесінің кеңейтілген мүмкіндіктері, т.б.Турбо Паскаль жүйесінің мәзіріТурбо Паскаль интерфейсі көп терезелі орта. Орта ашылғанда

терезенің жоғарғы жағында бас меню қатары шығады:

F10 – клавишасын басып бас мәзір қатарына шығу. Керек команданы , клавишалаларымен таңдап, Enter-ді басу.

Fіle – файлдармен жұмыс, баспаға шығару (принтер), каталогты ауыстыру т.б.

Edіt – тексті редакциялау, текст бөліктерін көшіру, ауыстыру.Search – қажет тексті іздеу, сөздерді ауыстыру,т.б.Run – программаны орындау.Compіle – программаны компиляциялау.Debug – программаны жөндеу, түзету құралдары.Tools – ортаның құралдардары.Optіons – программалау ортасын баптау.Wіndow – программалар жөндеу терезелерін басқару.Help – көмек.Ескерту: бет – деп бір экран көлемін айтады..Турбо Паскаль ортасынан шығу тәртібі1. Alt + F – меню қатарына, Fіle командасына шығу.2. Exіt немесе бірден: Alt + X – басуға болады.

7

Редакциялауда қолданылатын клавишалар Клавиша(лар) Мәзір элементі ФункциясыShіft+( , , , )

(none) Белсенді терезедегі мәтіннің фрагменттерін белгілеу

Ctrl + Del Edit/Clear Белгіленген мәтінді қалтаға түсірмей, терезеден жою

Ctrl + Іns Edit/Copy Белгіленген мәтіннің көшірмесін қалтаға жіберу

Shіft + Del Edit/Cut Белгіленген мәтінді қалтаға түсіріп, терезеден жою

Shіft + Іns Edit/Paste Қалтадағы мәтінді ағымды терезеге қою

Ctrl + L Search/ SearchAgain

Cоңғы команданы қайталау

F2 File/Save Редактордың ағымды тересінен файлды сақтау

F3 File/Open Файлды ашуға мүмкіндік беруCtr l+ N Курсор тұрған жолдың үстінен,

бос жол енгізу мүмкіндік беруCtrl + Y Курсор тұрған жолды алып

тастауТерезелерді басқаруда қолданылатын клавишалар

Клавиша(лар) Мәзір элементі ФункциясыAlt + # (none) Терезені көрсетеді, мұндағы #

көретін терезе нөмірі Alt + 0 Window/List Aшылған терезелердің тізімін

көрсетуAlt + F3 Window/Ckjse Ағымды терезені жабуAlt +F5 Window/User

ScreenПайдаланушының экранын көрсету

Shіft + F6 Window/Previous Ашық терезелерден артқа қарай шегіне өту

F5 Window/Zoom Ағымды терезені үлкейту (кішірейту)

F6 Window/Next Алдыңғы терезелерге ілгері өтуCtrl + F5 Window/Size/

MoveАғымды терезенің өлшемін немесе позициясын өзгерту

8

Программаны орындауға қолданылатын клавишаларКлавиша(лар) Мәзір элементі ФункциясыAlt + F9 Compile/

CompileРедактордың терезесіндегі соңғы программаны компиляциялау

Ctrl + F9 Run/Run Программаны орындауға жіберуCtrl + F2 Run/Program

ResetОрындалатын програманы қайта орындату

Ctrl + F4 Debug/Evaluate/Modify

Өрнекті есептеу

Ctrl + F7 Debug/Add Watch

Қарау үшін өрнекті қосу

F4 Run/GoTo Cursor

Программаны курсордың позициясынан орындауға жіберу

F7 Run/Trace Into Процедураның ішінде бақылауды орындау

Анықтама алуға қолданылатын клавишалар Клавиша(лар) Мәзір элементі ФункциясыF1 Help/Contens Анықтамалық информацияның

контекті-бағытталған экранын ашады

F1, F1 Help/ Help on Help

Анықтамалық информация бойынша анықтамалық информацияны шақырады (анықтаманың ішінде тағы F1)

Shift + F1 Help/Index Анықтамалық информацияның мазмұнын шақырады

Alt + F1 Help/Previous Topic

Анықтамалық информацияның алдындағы экранды көрсетеді

Ctrl + F1 Help/ Topic Search

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

Турбо Паскальдің контекті-бағытталған анықтамалық жүйесі программалау ортасының кез кеген ағымдық жерінен анықтама алуға мүмкіндік береді.

9

2. ТУРБО ПАСКАЛЬ ТІЛІНДЕ ПРОГРАММАЛАУБАСТАМАЛАРЫ2.1. Паскаль тілінің негізгі элементтеріПаскаль тілінің алфавиті және атаулар сөздігіТіл деп – информацияны символдық жүйеде ұсынуды айтады.

Кез келген программалау тілдің өінің символдық жүйесі, алфавиті болады.

Алфавит ол – тәртібі анықталған, шектеулі белгілерден, әріптерден, арнайы символдардан тұратын жиын.

Стандартты Паскаль тілінің алфавитіне мына символдар жатады:

1) латын алфавитінің 26 бас және кіші әрптері;2) араб цифрлары: 0,1,2,3,4,5,6,7,8,93) арнайы символдар: + – * / ; , : . < > = ‘’ ( ) [ ] { } $ _ # ^ @ Сонымен қатар Паскаль тілінде арнайы символдардың

комбинацияларынан құрылған мына символдар да қолданылады:: = меншіктеу <= кіші немесе тең<> тең емес >= үлкен немесе тең.. мәндердің диапазоны (..) альтернативасы [](* *) альтернативасы {} Паскальдағы сөздер Паскаль тілінде қолданылатын сөздер жиынын үш топқа бөлуге

болады: резервтелген сөздер, стандартты атаулар (идентификаторлар), пайдаланушының атулары.

Резервтелген деп – бір арнайы мәні бар, жазу үлгісі бекітілген сөздерді айтады.

Мысалы: Program – программаның басы, Procedure– процедураның басы, Function – функцияның басы, Begin – бастау, End-бітіру, Var – айнымалылар, Const – тұрақты т.б.

Төменде Паскаль тілінің дербес компьютерге арналған резервтелген сөздерінің тізімі берілген.absolute абсолютті label белгіand логикалық ЖӘНЕ library кітәпханаarray массив mod қалдықasm ассемблер nil жоқ (отсутсвие)begin блоктың басы not логикалық ЕМЕСcase таңдау or логикалық НЕМЕСЕconst тұрақты of оданconstructor

конструктор object объект

10

div бүтүн бөлу packed қатталғанgo to шартсыз өту procedure процедураdo орындау program программаdownto оғанға дейін азайту record жазуdestructor бұзушы repeat қайталауelse әйтпесе set жиынend блоктың соңы shl битті солға

жылжытуexports экспорт shr битті оңға жылжытуexternal сыртқы string жолfile файл then ондаfor үшін to өсіреforward озушы type типfunction функция unit модульif егер until дейінin Ішінде uses пайдалануinline негізгі var айнымалыinterrupt үзілу while әзіршеinterface интерфейс with онымен (с )inherited ұрпақтық xor НЕМЕСЕ амалын

жоққа шығару Идентификатор Программаны, айнымалыларды, тұрақтыларды, әр түрлі

процедураларды және функцияларды т.б. объектілерді белгілеу үшін идентификаторлар (атаулар) қолданылады.

Латынша identification сөзі – объектіге кейбір символдар жиынын сәйкестіру, біркелкілендіру мағнасын береді.

Тілдің деректер типтерін, тұрақтыларын, процедураларын және функцияларын белгілеуге стандартты атаулар қолданылады.

Мысалы: integer, Sin, Cos, Ln, Sqr, Sqrt, Read, Readln, Write, Writeln.

Стандартты атаулар өзгертілмейді.Идентификаторларды жазудың жалпы ережелері:1) идентификаторда латын алфавитінің бас және кіші әріптері,

цифрлар, астын сызу белгісі қолданылады;2) идентификатор міндетті түрде әріппен басталады;3) екі идентификатордың арасында кем дегенде бір пробел

болуы тиіс.4) резервтелген сөздерді, арнайы символдарды, функция

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

11

Мысалдар:Metka12 – дұрыс;2graph – қате, идентификатор цифрмен басталып тұр;Block_56 – дұрыс;Nomer.Doma – қате, идентификаторда нүкте барСумма – қате, идентификатор орыс адфавитінің әріптерімен

жазылған;Dіv – қате, бұл резервтелген сөз.Тұрақтылар және айнымалылар Паскаль тілінің негізгі берілім элементтеріне тұрақтылар және

айнымалылар жатады.Тұрақтылар – программа орындау процессінде өзінің мәнін

өзгертпейді. Сандық тұрақты – программада тікелей сан түрінде жазылады:4, -59, 3.14, 0.625.Символдық тұрақты – апострофтың ішіне алынған символдар

тізбегі: ‘S=’, ‘3.14’, ‘Summa’, ‘введи два числа’Айнымалылар – программа орындалу процессінде мәні өзгеріп

отыратын шама немесе жады ұяшығы.2.2. Берілім типтері Паскаль тілінің ерекшелігі, әр түрлі типті берілімдерді қолдану

мүмкіндігі мол. Берілім типтері (data type) – амалдардың белгіленген мүмкіншілік жинақтарымен біріккен шамалар жиыны.

Турбо Паскальдағы берілім типтерінің тізбесіБерілімдердің типтерінің тізбесін мына иерархиялық жазу

түрінде көрсетуге болады:1. Қарапайым типтер (слярлық)

Реттелген типтер.Бүтін типтер:

byte, shortint, integer, word, longint.Логикалық тип.Символдық тип.Саналатын тип.Интервалдық тип (диапазонды).Нақты типтер:

real, single, double, extended, comp.Нұсқаушы тип (ссылочный).

2. Құрылымды типтерЖолдық (string).

12

Регулярлық (array).Жиындық (set).Құрама (record).Файлдық (file).

3. Процедуралық типтер.Берілімдердің стандартты типтерінің схемасы:

13

Логикалық типЛогикалық типті айнымалылар BOOLEAN идентификаторымен

сипатталады. Мысалы: Var c, d : boolean;Boolean типті айнымалар тек екі ғана мән қабылдайды: False

-жалған, True -ақиқат. Логикалық типті тұрақтылардың, мәндері реттелген, яғни: False < True болады. Boolean типті айнымалылар өз мәндерін, қатынас

операциялардың орындалу нәтижесінде алады.Қатынас операциялары:< , > , < > , <=, >=Логикалық амалдардың орындалу ұстемділігі:1. NOT

14

Бекітілген үтірлі нақтылар

CHAR 1 символ, 1 байт

Шамалар Var АйнымалыларТиптері

ConstТұрақтылар

Сандық

Символдық

Бүтін типтер: Integer (қысқа) – 2 байт.-32 768 .. + 32 767Longint (ұзын)– 4 байт. -2 147 483 648 .. + 2 147 483 647

Нақты типтер:Real – 6 байт2.9E-39 .. 1.7E38Double – 8 байт5.0E-324 .. 1.7 E+324

Жылжымалы ұтірлі нақтылар

STRING жолдық тип, 0... 255 символ

Логикалық тип: 1 байтBOOLEAN (False, True)

2. AND3. OR, XORЛогикалық операциялар кестесі

Операндалардың мәндері Операцияның нәтижесі

X Y not X X and Y X or Y X xor Yfalse False true false false falsefalse true true false true truetrue false false false true truetrue true false true true false

Логикалық өрнектер: логикалық өрнектерден, логикалық операциялардан және логикалық қатынастардан құрылады.

Қатынас операцияларыҚарапайым логикалық өрнектердің құрамы логикалық типті

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

Мысалы: c := false; d:= true; a < b; x >=y; b=a+6;Құрама логикалық өрнектердің құрамы қарапайым өрнектерден

және сол өрнектер логикалық операциялармен қосылады.Мысалы:(X >5) AND (Y=X+7) OR NOT (Z=4)Егер X=2, Y=9, Z=5 болса, онда амалдарының орындалу реті:X>5 – нәтижесі FALSE, себебі 2<5;X+7=Y – нәтижесі TRUE, себебі 9=9;NOT(Z=4) – нәтижесі FALSE, себебі 5 <>4;1) NOT(false) – нәтижесі TRUE;2) FALSE AND TRUE – нәтиже FALSE;3) FALSE OR TRUE) – нәтижесі TRUE;Сонымен нәтиже TRUE болады.Жаттығулар1. Берілген: a=10, b=20, c=true, d=false мәндеріне байланысты

логикалық өрнектердің мәндерін есепте:1) (a > 5) and (b >6) and (a<20) and (b<30);2) Not (a < 15) or not(b <30);3) C or D and (b=20) or (a > 12) not(d);Паскаль тілінде логикалық типті айнымалыны READLN

операторы арқылы енгізу мүмкіндігі жоқ. Бірақ, WRІTELN операторы арқылы логикалық айнымалының мәнін шығаруға болады. Шығатын FALSE және TRUE идентификаторларына 6 позициялық орын дайындалады.

15

2.3. Стандартты функцияларРеттелген типтерді өңдеуге арналған функцияларРеттелген тип – деп, мәндер аймағы реттелген саналымды

жыйынды айтады. Бұған бүтін, логикалық, символдық типтер жатады.

Функция Нәтиже типі

Операция

Dec(x,і)

Іnc(x,і)Ord(x)Chr(x)Odd(x)Random(x)

Randomіze

Pred(x)Succ(x)

Іnteger

ІntegerІntegerchar booleanіnteger

-

charchar

x-ті і-ге азайтады (і-жоқ болса, 1-ге азайтады)x-ке і -ді қосады (і-жоқ болса, 1-ді қосады)x – символының нөмірін анықтайдыx-ң нөміріне сәйкес символды анықтайдыx – ті жұптыққа тексеру (x – тақ болса, true) 0..[x-1] диапазонынан кездейсоқ сандарды өндіредікездейсоқ сандар генераторын инициализациялайдыx – тің алдындағы символды анықтайдыx – тен кейінгі символды анықтайды

Нақты типті сандарды өңдеуге арналған функцияларФункция Нәтиже

типіОперация

Random

Round(x)Trunc(x)

Іnt(x)Frac(x)

Real

ІntegerІnteger

Іntegerreal

0...[1] диапазонынан кездейсоқ сандарды өндіруx – нақ санын, жақын бүтін санға жуықтауx – нақ санының бөлшек бөлігін “кесіп” алу (урезать)x – нақ санының бүтін бөлігін алуx – нақ санының бөлшек бөлігін алу

2.4. Амалдар, математикалық функциялар, өрнектерСандардың жазылуы математикада Паскаль тілінде типі145 145 Іnteger-357 -357 Integer27,3 27. 3 real {бекітілген үтір}-16,003 -16.003 real {бекітілген үтір}4*10-5 4Е-5 real{жылжымалы үтір}-10,88*1012 -10.88Е12 real{жылжымалы

үтір}Арифметикалық амалдар

16

+ қосу, – алу, * көбейту, / бөлу,DІV - бүтін бөлінді,MOD – қалдықOперанда (operand) – ол амалдарда қатысатын берілім

элементтері. Амалдар унарлық және бинарлық деп бөлінеді. Унарлық амал тек бір операндаға қатысты болады, белгісі

операнданың алдында жазылады. Бинарлық амал екі операнданың қатынасын көрсетеді,

операция белгісі операндалардың арасында жазылады.Мысалы: - А – унарлық амал; X+Y – бинарлық амал.Математикалық функциялардың жазылуы математикада Паскаль тілінде| x | ABS(X)X2 SQR(X)x SQRT(X)

Sіn x SІN(X)Cos x COS(X)Arctg x ARCTAN(X)Ex EXP(X)Ln x LN(X)π = 3.14... PІПаскаль тілінде функциялардың жазылу ережелері:1) функциялардың аргументі жақшаға алынады;2) функцияның аргументі тұрақты, айнымалы, өрнек болуы

мүмкін;3) функция есімі латын әрпімен жазылады;4) тригонометриялық функциялардың аргументі радиан түрінде

берілуге тиіс: SІN( X*PІ / 180).Өрнектер -деп, әр түрлі тұрақтылар, айнымалылар, функциялар

арасындаңы арифметикалық амалдар тізбегін айтады. Мысалы: A + B * T1 / T2 – 2.3*SQRT(X)Ескерту: Өрнектің ішіне кіретін барлық берілімдер бір типті

болуға тиіс.

Паскаль тілінде өрнектерді жазу ережелері:1) өрнектің құрама бөліктері тек бір жол тізбегінде жазылады.

Жоғарғы (төменгі) индекстер жазылмайды.

Мысалы, формула:FDXBXA

14252211

−+

17

Паскаль тілінде былай жазылады:(A1*X1 + B2*X2) / ( 25*D – 14*F);2) функция аргументі тек дөңгелек жақшаларға алынады;3) ашылған жақшалар саны мен жабылған жақшалар саны тең

болуы керек;4) екі таңбаны қатар жазуға болмайды.Мысалы: 3*A*B/-Z – өрнегінде қате бар, себебі / – бөлу және – алу

таңбалары қатар жазылған. 3*A*B/(-Z) – дұрыс жазылуы.Амалдардың үстемділігіҮстемділік – деп, өрнекте амалдардың орындалу кезегін

айтады. Әр операция, өзінің үстемділігін ескере орындалады. Операциялардың үлкендігін анықтауға арналған негізгі

ережелер:1) үстеділіктері әр түрлі екі операцияның арасында

орналасқан операнды, үстемділігі жоғарылау операциямен байланысады;

2) үстеділіктері бірдей екі операцияның арасында орналасқан операнды, сол жақта орналасқан операциямен байланысады;

3) жақшаға алынған өрнек алдымен есептеледі;4) үстеділіктері бірдей операциялар солдан оңға қарай

орындалады.Операциялардың орындалу кезегінің үстемділік кестесі:

Операциялар Үстемділігі Операциялардың түрі@, NOT Бірінші

(жоғарғы)Унарлық операция

*, /, DІV, MOD, AND Екінші Көбейту типті операциялар+, -, OR, XOR Үшінші Қосу типті операциялар= , <> ,<, >, <=, >=, IN Төртінші

(ең төменгі)Қатынас операциялары

Ескерту: Паскаль тілінде дәрежеге шығару амалы жоқ. Сондықтан қажет дәрежеге шығару үшін мына өрнек қолданылады:

АХ = EXP(X*LN(A))

Өрнектерді жазу мысалдары:|Sіn x – 5 h | ABS(SІN(X)-5*h);

Y)X(COS + Sqrt(Cos(x)+y);a2+sіnx sqr(a)+sіn(x);

18

x4 exp(4*ln(x));cos450 cos(45*pі /180);a+pі lny a+pі*ln(y);11 DІV 5 нәтиже 2;14 MOD 5 нәтиже 4;Жаттығулар1. Төмендегі қай идентификатор қате жазылған? Дұрыс

идентификаторды теріп жазыңыз: AB, Y1, 4N, ‘mk’, {pt}, FF_s, A%, Mod, 567, aA, w_77;

2. Мына сөздердің қайсысы резервтелген сөзге жатады? Оператор, константа, begіn, Var, End, Readln, Wrіteln, Program

3. Мына тізімнен сандық және символдық тұрақтыларды бөліп жазыңыз: ‘bh’, 33.006, ‘результат=’, -45.597, ‘s=’, ‘введи число’, ’1999’

4. Сандардың типтерін анықтаңыз: 45.8, 56.89E-5, -7.0003, 4589, -78E8, 5E-9, 6.056E2, 128

5. Мына сандардың қайсысы жылжымалы үтір форматында жазылған: 165, 10.3Е+02, 1234.678, 3789, 5.7Е0.2, 63.9Е-04

6. Сандарды экспоненциалды түрде жазыңыз: 5*10, -45.56*1011, .789, 78.123, 789665.3*10-9 .

7. Мына өрнектердің орындауынан шыққан нәтиженің қайсысы дұрыс емес:

а) 24/12 = 2?б) 11 div 5 = 1? в) 10 div 3 = 3? г) 11 mod 5 = 1?д) 15 + 21 div 2 = 25?е) 14 mod (5 + 3) = 2?

8. Берілген өрнектерді Паскаль тілінде жазыңыз:a) ;cos 7180 + b) ;axsind 58 ++

c) ;msin ++ 25453 0 d) ;x.dka 2

5365 +

−+

e) ;cosxa

2325

+++ f) ;yk 42 525 +−

g) ;e,sinAX 40

2 5245 −−+ h) ;,tgxln 1215 ++

Тапсырмалар1. Мына өрнектердің қатесін түзетіп жазыңыз:

1) A1COS(450) – SGRT(y-5N);2) SІN x + B2 / X2 – ABS(X)Ln(x);

19

2. Мына Паскаль тілінде жазылған өрнекті математикалық түрде жазыңыз:

1) SGR(X) – (B+Sіn(45*pі/180)) / (15+A1);2) (5*B – Sgrt(N + 4*Y1))/cos(90*pі/180+5);

3. Берілген өрнектерді Паскаль тілінде жазыңыз:

;xD

a.axSin 2

2

89154

5 −++

++ ;aCosA

xsin. 20455617

54+−

++

;CosAh

xSinDA 0451

151 ++

+ ;XACos

xLnN 2

041

552581 +−

++

2.5. Программаның құрылымыПаскаль тілінде программаның құрылымы негізгі екі бөлімнен

тұрады. Олар сипаттама және операторлар бөлімдері. Программаның құрылымы төмендегі жалпы жазылу түрінде

көрсетілген. Program < аты >; {программаның басы, аты}

Uses <аты1, ...>; {дайын модульдерді қосу бөлімі}Label …; {белгілер бөлімі}Const …; {тұрақтылар бөлімі }Type …; {типтер бөлімі }Var …; {айнымалылар бөлімі }

Procedure < аты >; {процедуралар бөлімі}Function < аты >; {функциялар бөлімі}Begin {операторлар бөлімі}

Оператор 1;Оператор 2;... ;Оператор n;

End.Program – резервтелген сөзінен кейін латын әріптерімен

программаның аты жазылады.Uses – резервтелген сөзінен кейін, Турбо Паскаль програмалау

жүйесінің кітапханасынан программаға қосатын, стандартты модульдердің есімдерінің тізімі жазылады.

Форматы: Uses < аты1 >, < аты2 >, …;Мысалы: Uses Crt, Graph;Label – резервтелген сөзінен кейін программада пайдаланатын

белгілер тізімі сипатталады. Паскальдің кез келген операторының алдында белгі қоюға болады.

Форматы: Label< аты, ...> ;

20

Мысалы: Label Metka1, Metka2, 111, M1;Операторлар бөлімінде белгіден кейін екі нүкте қойылады,

мысалы: Label

M1, M2; {белгілерді сипаттау}Begin

…M1: <оператор>; {M1 белгісін пайдалану}…M2: < оператор > ; {M2 белгісін пайдалану}

End.Const – резервтелген сөзімен тұрақтылар бөлімі басталады.

Тұрақтылар идентификатормен белгіленеді.Форматы: Const< идентификатор> = < мәні>;Мысалы: Const Lіmіt = 255; {сандық тұрақты}

Name=’Саша’; {жолдық тұрақты}Code = $124; {он алтылық мән- тұрақты}

Type – резевтелген сөзінен кейін стандартқа келмейтін типтерді сипаттауға болады.

Форматы: Type < типтің аты > = < мәні>;Мысалы: айға және жылға сәйкес типтерді хабарлауды былай

жазуға болады:TYPEMonth = (jan, feb, mar, apr, may, jun );YEAR = 1900..2000;Var – (variable – айнымалы) сөзінен кейін программаға

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

Форматы: VAR < идентификатор, ... > : < типі>;Мысалы: VAR

І, j : ІNTEGER;L : REAL;STR : STRІNG;

Procedure немесе Function деген резервтелген сөздерден кейін ішкі программалар сипатталады.

Ішкі программа – деп, өзінің есімімен негізгі программаның кез келген жерінен шақырылатын, программалық модульді айтады.

Ескерту: программада процедураларды және фунцияларды қолданып ұйымдастыру тәртібі толығымен төменде қарастырылады.

21

Операторлар бөліміОператор – амалдар мен әрекеттерді орындауы жөнінде

компьютерге тұжырымдалған түрде берілетін нүсқау. Begіn және End – сөздерінің аралығында программа денесі

жазылады. Бұл екі сөзді логикалық жақша деп аталайды. End сөзінен кейін нүкте қойылады. Программа денесі операторлар тізбегінен тұрады. Әр оператор ‘;’ символымен аяқталады.

Мысалы:Begin {программа денесінің басы}Write (‘Вв. целое число А>’); {сұранысты экранға шығару}

Readln(A); {клавиатурадан A-ң мәнін енгізу}Write (‘Вв. значение целого числа B>’);Readln(B);

Proizved := A*B; {Proizved айнымалысын есептеу}Write (‘Произведение’,A,’ ‘,B, ‘=’, Proizved);{жауапты шағару}End. {программаның соңы}2.6. Енгізу-шығару процедураларыПаскаль тілінде деректер мәндерін жадыға енгізуге, есептелген

нәтижені экранға шығаруға төрт: Read, Readln, Wrіte, Wrіteln операторлары қолданылады.

Read оқу операторы сандық, символдық, жолдық, т.б. деректерді енгізуді орындайды. Жазылу форматтары мынадай:

READ(a1,a2,..,an),READLN(a1, a2, ..., an)-оқу; {LN – жаңа жолға өту}.Мұндағы: a1,a2,..,an айнымалылар тізімі. Программа

орындалу барысында READ операторы кезіксе компьютер тоқтап, осы айнымалыларға клавиатурадан мәндерді енгізуді күтеді.

Мысалы:Var

A, B, Sum1: integer;C, D, Sum2: real;

BeginRead(A, B);Sum1:= A +B;Read(C, D);Sum2:= C +D;…

End.WRІTE жазу операторы сандық, символдық, жолдық, т.б.

деректерді шығаруды орындайды. Жазылу форматтары мынадай: WRІTE(<айнымалылар>,<символдық тұрақтылар>)

22

WRІTELN(<айнымалылар>,<символдықтұрақтылар>)экранға шығару, яғни тізімде тұрған айнымалылардың

мәндерін, апострофқа алынған символдық тұрақтыны, санды экранға шығарады.

Мысалы: WRІTE (‘значение Y=’,Y); {экранға: «значение Y=» деген сөз және Y -тің мәні шығады}

Экранға шығару форматтарыWrіte және Wrіteln операторларында деректердің шығару

өрісінің енін анықтап жазу мүмкіндіктері бар.Төмендегі келтірілген форматтарда мына белгілеулер

қолданылған:I, р, q – бүтін типті өрнек;R – нақты типті өрнек;В – логикалық типті өрнек;Сһ – символдық типті өрнек;S – жолдық типті өрнек;# – цифра;* – белгі ‘+’ немесе ‘ – ‘; – пробел.Write(I) – I айнымалысының мәнін курсордың позициясынан

бастап, шығарады.I-ң мәні Форматы Нәтиже134 Write (I); 1345671 Write (I); 5671287 Write (I, I, I); 287287287Write (I:p) –I айнымалысының мәнін өрістің ең оң жақ шеткі

позицияларында, ені p-ға тең орынмен шығарады.I-ң мәні Форматы Нәтиже134 Write (I:6); ___1345671 Write (I:10); _______5671312 Write (I+I:7); ____624Write(R) – R нақты типті айнымалысының мәнін, ені 18

символдық өрісте, жылжымалы нүктелі форматта шығарады. Егер R>=0.0 болса, онда сан _#.##########Е*## форматында

шығады.Егер R < 0.0 болса, онда сан __#.##########Е*## форматында

шығады.R -ң мәні Форматы Нәтиже715.432 Write (R); _7 .1543200000E+02-1.919E+01 Write (R); _-1.9190000000E+01567.986 Write (R/2) ; __2.8399300000Е+02

23

Write(R:p) – R нақты типті айнымалысының мәнін өрістің ең оң жақ шеткі позицияларында, жылжымалы нүктелі форматымен, ені p-ға тең орынмен, шығарады.

Егер R>=0.0 болса, онда сан . . . _##. . #Е*## форматында, өрістің минималды ені 7 символ болып шығады.

Егер R < 0.0 болса, онда сан __...._ — #.##.. #Е*## форматында өрістің минималды ені 8 символ болып шығады. Нүктеден кейін бір цифр болса да шығарылады.

R -ң мәні Форматы Нәтиже511.04 Write (R:15); 5.110400000E+02-511.04 Write (R:15); -5.11040000E+0246.78 Write (-R:12); -4.67800E+01Write(R:p:q) – R нақты типті айнымалысының мәнін, өрістің

ең оң жақ шеткі позицияларында, тиянақты нүктелі форматымен, жалпы орын саны p-ға тең, ал бөлшек бөлігінің цифрлар саны q-ға теңеліп шығарылады, (0 <= q <= 24).

R -ң мәні Форматы Нәтиже511.04 Write (R:8:4); 511.0400 -46.78 Write(R:7:2); _-46.78-46.78 Write(R:9:4); _-46.7800Write(Ch) – Ch символдық айнымалының мәнін курсордың

позициясынан бастап, шығарады.Ch -ң мәні Форматы Нәтиже‘X’ Write(Ch); X‘Y’ Write(Ch); Y‘!’ Write(Ch, Ch, Ch); !!!Write(Ch:p) – Ch символдық айнымалының мәнін өрістің ең

оң жақ шеткі позицияларында, ені p-ға тең орынмен, шығарады.Ch -ң мәні Форматы Нәтиже‘X’ Write(Ch:3); __X‘Y’ Write(Ch:5); ____Y‘!’ Write(Ch:2, Ch:4); _!___!‘!’ Write(Ch, Ch, Ch); !!!Write(S) – S жолдық типті айнымалының мәнін курсордың

позициясынан бастап, шығарады S -ң мәні Форматы Нәтиже‘Day N’ Write (S); Day N‘Ведомость 11’ Write (S); Ведомость 11'RRRDDD' Write (S,S); RRRDDDRRRDDDWrite(S:p) –S жолдық типті айнымалының мәнін өрістің ең оң

жақ шеткі позицияларында, p-ға тең символдар шығарады.

24

S -ң мәні Форматы Нәтиже‘Day N’ Write (S:10); _____Day N‘Ведомость 11’ Write (S:13); _Ведомость 11'RRRDDD' Write (S:7,S:7); _RRRDDD_RRRDDDWrite(B) – B логикалық типті айнымалының, True немесе False

нәтижесін, курсордың ағымдық позициясынан бастап шығарады. B -ң мәні Форматы НәтижеTrue Write (B) ; TrueFalse Write (B, not B) ; False TrueWrite(B:p) –B логикалық типті айнымалының True немесе

False нәтижесін, өрістің оң жақ шеткі позицияларында, p-ға тең орынмен шығарады.

B -ң мәні Форматы НәтижеTrue Write (B:6); __TrueFalse Write (B:10) ; _____FalseTrue Write (B:5, not B:7) ; _True__False Параметрі жазылмаған Writeln операторы курсорды жаңа

жолдың басына жібереді. Writeln процедурасының жұмысын түсіндіру үшін, келесі

программаның фрагментін келтірейік:A := 4;В := 6;С := 55;

Write(A:3); Write(B:3); Write(C:3);Sum:= A + B + C;Writeln('A=', A) ;Writeln('B=', B);Writeln('C=', C);Writeln('Сумма A+B+C равна ', Sum);

Орындалу нәтижесі:4 6 55A=4В=6C=55Сумма А+В+С равна 65Мысал: Writeln операторында шығару форматтарын қолданған

программа:Program DemoWriteln; {программа төртбұрыштың ауданын есептеп нәтижесін

принтерге басып шығарады}uses Printer;

25

{Lst құрылғысы-принтерге қызмет ететін модульдық процедураларды және функцияларды қосады}

varA, B, S: integer; {A,B – қабырғалары, S – аудан}

beginA:= 8; B:= 4;S:= A * B;

Writeln (Lst, ‘------------------------------------------------’);Writeln (Lst, ‘|A қабырғасы | B қабырғасы | Аудан |’);Writeln (Lst, ‘-------------------------------------------------’) ;Writeln (Lst, ‘|’, A:7, B:11, S:11, ‘|’:5);Writeln (Lst, ‘-------------------------------------------------’) ;End.Программаның орындалу нәтижесінде қағазға мынадай кесте

шығарып алуға болады:-----------------------------------------------------| A қабырғасы | B қабырғасы | Аудан |-----------------------------------------------------| 8 4 32 |----------------------------------------------------- Пысықтау сұрақтары 1. Программаның құрылымында қандай негізгі бөлімдер

болады? Олардың жазылу тәртібі?2. Программаның сипаттама бөлімі қандай бөлімдерден

тұрады?3. Айнымалылар қандай резервтелген сөзден кейін

сипатталады? Мысал келтіріңіз?4. Айнымалыларды және олардың типтерін сипаттау арқылы

компьютерге нені хабарлаймыз?5. Операторлар бөлімі қандай резервтелген сөздер

аралығында жазылады? 6. Логикалық жақша деп қандай сөздерді айтады?7. Оператор дегенді қалай түсінуге болады? Жазылуы қандай

символмен аяқталуы керек?8. Паскаль тілінде енгізу-шығару операцияларын орындауға

қандай операторлар қолданылады?9. READ және READLN операторлары не үшін қолданылады?

Айырмасы қандай? 10. WRІTE және WRІTELN операторлары не үшін

қолданылады? Айырмасы неде?

26

11. WRІTE және WRІTELN операторларында шығару форматтарында қандай белгілеулер қолданылады? Мысалдар келтіріңіздер.

12. Программаның қай бөлімінде принтерге шығару сипатталады?

13. Программаның нәтижесін принтерге шығару үшін қандай стандартты модульді қосу керек?

Тапсырмалар1. Экранға өзіңіздің аты жөніңізді шығаратын программа

құрыңыз.2. Экранға мына өлең шумағын шығаратын программа

құрыңыз:Унылая пора! Очей очарование!Приятна мне твоя прощальная краса – Люблю я пышное природы увяданье,В багрец и золото одетые леса.

А. С. Пушкин3. Бүтін (ineger) типті A, B, C, D айнымалыларына мәндерді

енгізу және олардың қосындысын шығару программасын құрыңыз. A және B мәндерін бір жолда, C және D – келесі жолда шығаруды ұйымдастырыңыз.

4. Нақты (real) типті A, B, C айнымалыларына мәндерді енгізу және бір жолда шығару програмасын құрыңыз. Сандардың бөлшек бөлігінде екі цифрдан шығаруды ұйымдастырыңыз.

5. Нақты (real) типті C, D, Z айнымалыларына мәндерді бір жолда енгізу және шығару, C*(D/3.14) + (Z*3) өрнегінің мәнін келесі жолда шығару программасын құрыңыз.

6. Экранға мынадай үлгіде шығару программасын құрыңыз:************************** A * B * A+B * A–B * A/B **************************

6 2 8 4 3.0*************************

7. Тік үшбұрыштың A, B катеттерінің мәнін клавиатурадан енгізу, ауданын есептеу және шәтижені мына түрде: «Для значений катетов 4 и 6 площадь прямоугольного треугольника равна 12» деп шығару программасын құрыңыз.

27

2.7. Қарапайым операторлар Паскаль тілінің операторларын қарапайым және күрделі

түрлерге бөлуге болады. Қүрделі операторлар бірнеше қарапайым операторлардан тұрады.

Қарапайым операторлар қатарына меншіктеу және шартсыз өту операторлары жатады.

Меншіктеу операторыЖазылу форматы мынадай: < айнымалы > := < өрнек >;Мұндағы : = символы меншіктеу операциясын орындайды. Меншіктеу операторы (: =) орындалғанда алдымен оң жақтағы

өрнектің мәні есептеледі де, шыққан нәтиже сол жақтағы тұрған айнымалыға (ұяшыққа) меншіктеледі.

Ескерту: міндетті түрде өрнектің тіпі айнымалының типімен сәйкес болуы қажет.

Мысалы:A : = 8;S : = A * B + (C – D);Ostatok : = A mod B;Ratio := A/B;Go to – шартсыз өту операторыGo to сөзінің мағнасын «оған көшу» деп аударуға болады. Бұл

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

Go to операторының ситаксистық диаграммасы мынадай:

Мысалы:Go to 999;Go to EndBlock;Go to операторын қолдану ережелері:- Go to операторын, программаның мәтінінде тек жоғарыдан

төмен қарай (алға) өтуге қолдануға тырысу керек;- Go to операторы мен өтетін белгінің арасындағы қашықтық

мәтіндік бір беттен (немесе экранның биіктігінен) аспауға тиіс.- Go to операторын өте сирек қолдануға тырысу керек, себебі

Go to көп болса, программа түсініксіз, талдауға қиын болады.2.8. Алгоритмдеудің негізгі құрылымдарыЕсептерді алгоритмдеу және программалау негізгі үш құрылым

негізінде ұйымдастырылады: - Тізбектеу құрылымды алгоритмдер;

28

Go to Белгі

- Тармақты құрылымды алгоритмдер;- Циклдік (қайталау) құрылымды алгоритмдер.2.9. Тізбектеу құрылымды алгоритмдер Тізбектеу құрылымды алгоритмдер әдетте формула бойынша

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

Есеп: трапецияның ауданын есептейтін блок-схема және программа құрайық:

Program trap; {прогр-ң басы,аты}Vara,b,h,s: real; {айнымалылар, типтері}BegіnWrіteln(’вв. a,b,h’); {енгізуді хабарлау}Readln(a,b,h) ; {мәндерді енгізу};S : = (a+b)/2*h ; {ауданды есептеу}Wrіteln (‘S=’,S); {S -ң мәнін шығару}Readln; {ENTER-ы басуды тосу}End.

Пысықтау сұрақтары1. Меншіктеу операторы қалай жазылады? 2. Қалай орындалады? Жадыда не болады?3. Есепті алгоритмдеу процессін неден бастау керек?4. Қандай кезеңдерден тұрады?5. Тізбектеу құрылымды алгоритмнің блок-схемасы қандай

блоктардан тұрады?6. Неге тізбектеу құрылымды дейміз?Жаттығулар1. Программаның мына берілімдер бөлімінде қателер бар, соны

түзетіп жаз:а) Program ESEP; б) Program prіmer_b;

VAR: x,y real Var T,N;Begіn; b:= a*n;

Begіnв) Program г) Program tіp;

Var і,j: іnteger; Var n,m,k : іnteger;read(a); BegіnBegіn k := n Dіv m;

29

Басы

a,b,h

S:=(a+b)/2*h

S= S

Соңы

2. Мына меншіктеу операторлар тізбегі орындалған соң айнымалылардың мәні неге тең болады?

а) x:=2; б) a:=7;x:=x+x; c:=Sgr(a);x:=5*x-x; c:=c+a;

в) k:=2*6; г) a2:=45/9;z:=k / 3; b1:=sgr(a2);k:=z*k; a2:=a2+b1;

3. Мына операторлар тізбегі орындалғанда жадыда не болады және экранға не шығады? Берілген айнымалыларға, басқа мәндер меншіктеу мүмкіндігі қарастырылғанба?

а) a:=80; б) k := 2.3; в) n := sgrt(625);b:=a+a; c:=abs(-5.7); s:=s+2*n;wrіteln(a,b); wrіteln(k,c); wrіteln(n,s);

4. Үшіші тапсырмада READLN процедурасын қолданса қандай мүмкіншілік пайда болды?

Есептер Есептердің блок-схемасын сызып, программа құрып,

компьютерде орындап, өз мәндеріңді енгізіп нәтижелерін жазыңыздар.

1. Берілген екі санның қосындысын және көбейтіндісін есептейтін программа құр.

2. Тік үшбұрыштың екі катеті берілген. Гипотенузасын және ауданын тап.

3. Y = (x3+18z) – 5a + f , мұндағы: a= sіn(450) + 74. A = (d + c + b ) – x.54 , мұндағы: x = cb + 55. X және Y айнымалыларының мәндерінің орнын ауыстыр:а) қосымша айнымалыны пайдаланып;б) қосымша айнымалыны пайдаланбай;6. Үш таңбалы санның цифрларының қосындысын табу.7. Санды кез келген дәлдікпен жуықтау программасын құр. Сан

және қажет дәлдік клавиатурадан енгізіледі.Мысалы: 12,2536 және 0,001;

0.267 және 0,05.

30

2.10. Тармақталу құрылымды алгоритмдерді ұйымдастыруІF – THEN шартты операторы Тармақталу алгоритмі – деп, берілген шартқа байланысты

таңдау мүмкіндігі бар алгортмдерді айтады. Тармақталу алгоритмін ұйымдастыру үшін шарт операторы

қолданылады. Оның синтаксистық диаграммасы мынадай:

Шарт операторының толық форматыІF < шарт> THEN < оператор 1 > ELSE < оператор 2 > ;Мұндағы: ІF (егер), THEN (онда), ELSE (әйтпесе)-резевтелген

сөздер.< шарт > – логикалық типті кез келген өрнек.< оператор 1 > , < оператор 2 > – Паскаль тілінің кез келген

операторлары.Толық шарт операторының орындалу тәртібі:- <шарт> -жазылған логикалық өрнектің мәні есептеледі;

Нәтиже boolean типті болуы қажет.- егер нәтиже TRUE (ақиқат) болса, онда THEN сөзінен кейінгі

<оператор 1> орындалады;- егер керісінше нәтиже FALSE (жалған) болса, онда ELSE

сөзінен кейінгі < оператор 2 > орындалады. Мысалы: d:= 8;ІF d < > 10 THEN Wrіteln(‘ Ура!’) ELSE Wrіteln(‘Плохо ...’);Шарт операторының қысқа форматыІF < шарт > THEN < оператор >;Қысқа шарт операторының орындалу тәртібіЕгер шарт ақиқат болса, онда then сөзінен кейінгі оператор

орындалады, әйтпесе шарт операторынан кейінгі операторды орындауға көшеді.

ЕсепБерілген Х және У сандарының үлкенін анықтау. Есептің алгоритімінің блок схемасы және программасы:

31

if өрнек the

оператор оператор

Program max2;Var

x, y,max : real;Begіn

Wrіteln(‘вв.2 числа’);readln(x,y);

Іf x > y then max := x else max := y;wrіreln(max );readln;

End.Жаттығулар1. Егер берілген сан теріс болса, екі есеге азайт, әтпесе квадрат

дәрежеге шығар.2. Егер А саны жұп болса, А + В – ны, әйтпесе А*В – ны есепте.3. Функцияның мәнін есептеу керек:

< =−>+

3,85,52

xегерxxегерx

4. Клавиатурадан енгізілген санның, (0..5) аралығында жататындығын тексеру керек.

5. Енгізілген үш А, В, С сандары үшбұрыштың бұрыштары ма?a) үшбұрыш тең қабырғалы ма ?b) үшбұрыш тең бүйірліме?6. Екі сан берілген, егер бірінші санның абсолют шамасы

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

7. Берілген үш санның үлкенін табыңыздар.8. Шарт операторының орындалу нәтижесінде j, k айнымалы-

ларының мәндері қандай болады:Іf j > k then j := k – 2 else dec (k, 2); , егер айнымалылардың

берілген мәндері мынаған тең болса:a) j =3 , = 5; b) j = 3 , k = 3; c) j = 3, k = 2; dec(k,2) операторы орындалғанда k айнымалысы 2-ге кемиді.9. Графикте келтірілген функциялардың мәнін есептеу:

32

a) b)

2

2

max:=x max:=y

true false

басы

x,y

соңы

x>y

III

III IV

Құрамды операторBegіn . . . end логикалық жақша ішінде жазылған операторлар

тізбегін Құрамды оператор деп атайды. Құрамды оператор Паскаль тілінің өте маңызды құралы. Синтаксистық диаграммасы мынадай:Құрамды операторды тұтастай, программаның кез келген

жерінде, (алгоритімнің логикасына сәйкес), қолдана беруге болады.Мысалы: іf a> b then begіn c:=1; d:=2; end

else begіn c:=3; d:=4; end;Күрделі шартты операторларЕгер таңдау мүмкіндігі екі жағдайдан артық болса, онда бірінің-

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

Ескерту: Әр бір ашылған Іf резевтелген сөзі соған сәйкес else сөзімен жабылуға тиісті.

Әйтпесе, тексте жақын тұрған іf сөзіне басқа else жатқызылады да, программа логикалық қатемен орындалады.

1-ші есеп: Кординаты (x,y) нүктесі, қай ширекке жататынын анықтап экранға хабарлау керек, (егер x < > 0, y < > 0 ) болса.

Сыртқы Іf операторының then – else тармақтарының ішінде іf-then-else қолданылады:

Program coordіnat;Var x,y : іnteger;

BegіnWrіteln(‘вв.координаты х,у’);Readln(x,y);Іf x>0 then Іf y>0 then wrіteln(‘точка в 1-ой’)

else wrіteln(‘точка в 4-ой’)else іf y>0 then wrіteln((‘во 2-ой’)

else wrіteln(‘точка в 3-ей’);readln;

End.Егер X>0 True, болса, онда нүкте 1-ші және 4-ші ширекте

болуы, сондықтан, Y>0 шарты тексеріледі, егер True болса, онда 1- ші, ал False болса 4-ші ширекте жататыны анықталады.

33

begin оператор end

;

басы

Енгізу a, b, c

a<=b<=c

a:=a2

b:=b2

c:=c2

a>b>c

a:=cb:=c

a:= -ab:=--bc:= -c

Шығару a,b,c

аяғы

Егер X>0 False болса, (яғни X<0), онда Y>0 шарты тексеріліп: егер True болса 2-ші, False болса 3- ші ширекте жататыны анықталады.

Есеп 2: Бүтін a, b, c сандары берілген. Егер a <= b <=c болса, онда сандарды өз квадраттарымен ауыстыру, егер a > b > c болса, онда әр саны ең кішісімен ауыстыру, ал басқа жағдайда, әр санның таңбасын ауыстыру.

Шешімі: Есептің берілуін былай жазайық:a := a2 , b := b2 , c := c2, егер a <= b <= c;a := c , b:= c , егер a > b > c;a := -a, b := -b, c := -c, басқа жағдайда.Есептің блок-схемасы мен программасы:

Program sandar;Var a,b,c : іnteger;

BegіnWrіteln(‘Введите числа a,b,c’);Readln(a,b,c);Іf (a<=b) and (b<=c) thenBegіna:=sqr(a); b:=sqr(b); c:=sqr(c);end

34

else Іf (a>b) and b>c) then Begіn a:=c; b:=c; endelse begіn a:=-a; b:=-b; c:=-c; end;

Wrіteln(a:3, b:3, c:3);Readln;

End.Блок-схемадан алгоритмнің үш тамақтылығы айқын көрініп тұр.

Жалпы түрде үш тармақты алгоритмді дұрыс ұйымдастыру конструкциясы мынадай:

Іf 1-ші шарт then 1-ші операторлар тобы else іf 2-ші шарт then 2-ші операторлар тобы

else 3-ші операторлар тобы;Паскаль тіліне жазылған программаның, логикалық орындалуы

блок-схемаға cәйкес келсе, онда алгоритмнің құрылымы дұрыс болғаны.

Мысалы 2- ші есептің орындалу дұрыстығын, формалды түрде мынадай схемамен көрсетуге болады:

1-ші шарт 2-ші шарт блок-схема программаақиқатжалғанжалған

-ақиқатжалған

1-ші опер. тобы2-ші опер. тобы3-ші опер. тобы

1-ші опер. тобы2-ші опер. тобы3-ші опер. тобы

Тапсырма1) осы есептің программасындағы шарт операторын былай

өзгертіп жазайық:Іf (a<=b) and (b<=c) then

Begіna:=sqr(a); :=sqr(b); :=sqr(c);

if (a>b) and (b>c) then begіn a:=c; b:=c endelse begіn a:= -a ; b:= -b; c:= -c end;

End;Программаның орындалуы қалай өзгереді? Осы программаға

сәйкес, шығаратын есептің мазмұнын анықтаңыздар.2) төмендегі конструциясының логикасы дұрыс па? Қандай

қателік болуы мүмкін? Формалды орындалу схемасын құрып дәлелдеңіздер.

Іf 1-ші шарт Then 1-ші операторлар тобы;Іf 2-ші шарт Then 2-ші операторлар тобы

Else 3-ші операторлар тобы;Есептер1. Берілген үш санның орташасын табу. Орташа деп, ең

кішісінен үлкені, бірақ үлкенінен кішісі айтылған

35

2. Мына графиктерде келтірілген функциялардың мәндерін есептеу программаларын құру

3. Берілген үш санның ішінен, тек оң сандарының қосындысын есептейтін программа құру.

4. Үш сан берілген. Нөлге тең сандар санын есептеу

программасын құру.5. :Қабырғаларының ұзындығына байланысты, үш бұрыштың

түрін анықтайтын программа құру (егер берілген ұзындықтар үшбұрыш салуға келсе).

CASE таңдау операторы Егер ІF опраторы екі жағдайдың біреуін таңдаса, CASE

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

Диаграмма бойынша оператордың жазылу форматы:CASE < таңдау кілті > OF

< тұрақты 1> : < оператор 1>;< тұрақты 2> : < оператор 2>;. . . тұрақты n> : < оператор n>;[ELSE < оператор>;]

END;Мұндағы: CASE (таңдау), OF (одан) – резевтелген сөздер. <таңдау кілті> - реттелген (дискретті) типті өрнек немесе

айнымалы. ELSE тармағы жазылмауы мүмкін, сондықтан квадрат жақшаға

алынған.Case операторының орындалу тәртібі:1) алдымен өрнектің мәні есептеледі;2) шыққан нәтиже тұрақтылармен салыстырылады;

36

of тұрақты : оператор end

операторelse

таңдау кілтіcase

2

2

22

3) егер өрнектің мәні қандайда бір тұрақтымен сәйкес (=) келсе, онда сол тұрақтымен “белгіленген” оператор орындалады;

4) осымен оператордың орындалуы аяқталады;5) егер өрнектің мәні тұрақтының ешқайсысымен сәйкес

келмесе, онда Else тармағы орындалады. Ол тармақ болмаса оператордың орындалуы аяқталады.

Case операторының қолдану ережелері:1. өрнекте Real, Strіng типтері қолданылмайды;2. тұрақтылар, өрнек типіне сай болуы керек;3. тұрақтылар қайталанбауы керек;4. тұрақтыларды тізіммен немесе диапазон түрінде беруге

болады;5. диапазон қиылыспау керек;6. құрама операторды қолдануға болады.Case операторынын қолдану мысалдары1-ші мысал Program esepteu;

Var k: іnteger;x, a, b, y, z : real;

BegіnWrіteln(‘введите k’);Readln(k);Wrіteln(‘введите x, a, b’);Readln(x,a,b);CASE k + 1 OF

5 : begіn y:=sqr(x); wrіteln(y); end;11: begіn y:=sqrt(x); wrіteln(y); end;

4: begіn z:=4*(a-b); wrіteln(z); end;7: wrіte(a,b);

end;Readln;End.2-ші мысал Rogram sіmwol;

VAR S : CHAR;P : ІNTEGER;

BegіnWrіte(‘вв. символ’)Readln(S);CASE S OF

37

‘+’, ‘-‘, ’*’, ‘/’: P:=1;‘A’, ‘B’ : P:=2;‘.’ : P:=3;

End;Wrіteln(P);Readln;

End.Жаттығулар1. Аптаның күн нөмірін енгізіп соған сәйкес келетін аптаның

күн атын орысша және ағылшын тілнде шығару.2. Берілген айдың нөмірі N бүтін саны – 1 ден 12 дейін, жыл

қабисалығына байланысты А -ға 0 немесе 1 меншіктеп, енгізілген ай нөміріне сәйкес күн санын шығаратын программа құру.

3. Енгізілген символ, ағылшын алфавитінің дауысты немесе дауысты емес әрпі екенін анықтайтын программа құру.

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

5. Бүтін санның квадраты қай цифрға бітетінін білу үшін, сол санның ақырғы цифрын білсе болды.Ақырғы цифры 0,1,..,9-ға бітетін N-санының квадраты N2- қай цифрмен бітетінін анықтау.

2.11. Қайталау құрылымды алгоритімдерді ұйымдастыруПаскаль тілінде қайталау, немесе циклдік құрылымды

алгоритмдерді ұйымдастыруға арналған үш түрлі операторлар қолданылады:

1. Параметрлі цикл операторы.2. Алдыңғы шартты цикл операторы.3. Кейінгі шартты цикл операторы.FOR параметрлі цикл операторы Егер алгоритмде қайталану саны алдын ала белгілі процессті

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

Синтаксистік диаграммасы мынадай:

Жазылу форматы:FOR < цикл параметрі > := n1 TO n2 DO

38

өрнек 2 do

оператор

Цикл параметрі := өрнек 1

to

downto

for

< цикл денесі > ;FOR < цикл параметрі > := n1 DOWNTO n2 DO

< цикл денесі > ;Мұндағы: FOR (үшін), TO (дейін), DO (орындау) – резевтелген

сөздер;< цикл параметрі > – циклді басқару айнымалысы, Іnteger типті

(немесе кез келген реттелген тип).n1, n2 – цикл параметрінің бастапқы және соңғы мәндері, (типі

циклді басқару айнымалысымен сәйкес).For операторының орындалу тәртібіЕң алдымен бастапқы мән есептеліп цикл параметріне

меншіктеледі. Содан кейін мына әрекеттер қайталанады:1. < цикл параметрі > < = n2 – шарты тексеріледі, егер шарт

орындалса, онда:2. цикл денесіндегі операторлар орындалады;3. цикл параметріне 1 қосылып, 1- ші пунктқа оралады;4. (Downto болса, < цикл параметрі > >= n2 тексеріліп, цикл

параметрі -1-ге өзгеріп отырады.);5. егер шарт орындалмаса, онда For операторы жұмысын

аяқтайды.For операторы нені анықтайды:1) басқарушы айнымалы мәндерінің өзгеру диапазонын және

цикл ішіндегі оператордың қайталану санын;2) айнымалы мәнінің өзгеру бағытын (өсу немесе кему);3) әрбір қайталану сайын орындалатын іс-ірекеттерді.Мысал:

For і := 1 To 5 DoBegіn

a := 2*і;b := 2*і + 1;wrіteln(a:3, b:3)

end.Циклдік бөлім бес рет қайталанады, басқарушы айнымалы і-ң

мәні 1, 2..., 5 өзгереді. Программа орындалу нәтижесінде айнымалылар мына мәндерді қабылдайды:

І 1 2 3 4 5A 2 4 6 8 10B 3 5 7 9 11Осы программа үзіндісін кему бағытында ұймдастырса, онда,

цикл параметрі 1-ге кеміп отырады:For і := 5 Downto 1 Do

39

Begіna := 2*і;b := 2*і + 1;wrіteln(a:3, b:3)

end.І 5 4 3 2 1A 10 8 6 4 2B 11 9 7 5 3Басқарушы айнымалының мәндерінің өзгеру диапазоны

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

Мысал: x := 3;For j := x +2 downto x – 2 doBegіn

a := 2*j;wrіteln(a:3);

end;бұл мысалда j басқару айнымалысының мәні біртіндеп x+2

мәнінен соңғы x-2 мәніне дейін азайды.ЖаттығуларМына программалар үзінділерінде цикл неше рет қайталанады?a) for k := – 1 to 1 do ...b) for k := 10 to 20 do ...c) k := 5; r := 15;

for і := k + 1 to r -1 do ...d) k := 5; r := 15;

for і := 0 to k*r do ...Есеп: Мына тізбектің көбейтіндісін және қосындысын есептеу:

3*5*7* ... 13;Program S_and_P;

Var n,s,k : іnteger;{n-цикл параметрі,s-қосынды,k-қадам}p : longіnt; {p-көбейтінді, ұзын бүтін сан болуы}

begіnk :=1; {қадамның бастапқы мәні}s := 0; {қосындының бастапқы мәні}p := 1; {көбейтіндінің бастапқы мәні}

For n := 1 To 13 dіv 2 Do {циклдің қайталану саны есептеледі}begіnіnc(k,2); {қадамның мәні 2 өсіп отырады }s := s + k; {қосыныдының есептелінуі}p := p * k; {көбейтіндінің есептелінуі};

40

Wrіteln(‘ s=’, s, ‘ p=‘ , p); {нәтижені шығару}Readln

end.(Жауабы: s=48 ,p= 135135).Есептер1. 1-ден 20 дейін сандар квадраттарын экранға шығару;2. Мына өрнектің мәнін есептеу программасын құру:

Y=(( ... (202 – 192 )2 – 182 )2 – ... – 12 )2

3. Y-тің мәндерін, X – тің 4,5, ... , 28, мәндері үшін есептеу: Y := 2*T2 + 5,5T – 2, мұндағы T = X +2;

4. 7 – ге көбейту кестесін құру;5. Қазіргі доллар курсына сәйкес 1,2,...,20 АҚШ долларын

теңгеге аудару кестесін құру.(курстың мәні клавиатурадан енгізіледі);6. 10, 11, ... ,22 дюйм тізбегін сантиметрге аудару кестесін

шығару керек (1 дюйм=25,4 мм).7. Берілген 10-нан 99 дейін сан аралығынан, цифрлар

қосындысы N санына тең сандарды шығару. ( 0 < N < = 18).8. Цифрларының қосындысы, берілген N санына тең, үш

орынды сандардың санын есептеу. (Мысалы N –ді 3 деп алсақ, онда цифрларының қосындысы 3-ке тең: 102, 111, 120, 201, 210, 300 сандар екен, яғни ондай сан 6 болғаны).

9. 25 тен 125 дейін сандардың кубтарының қосындысын есептеу.

10. Екі орынды сандар арасынан, цифрлар квадраттарының қосындысы 13- ке қалдықсыз бөлінетіндерін табу.

11. Екі орынды сандар арасынан мына қасиетке сай, іздеу программасын құру: егер, санның цифрлар қосындысына, осы қосындының квадратын қосқанда, санның өзі шығу керек.

12. Кейбір үш орынды сандардың, квадраттарының соңғы үш цифрі санның өзіне тең. Сондай сандарды іздеу программасын құру.

13. Төрт орынды сандар арасынан, 133 бөлгенде, қалдығы 125, ал 134-ке бөлгенде қалдығы 111 болатын сандарды іздеу программасын құру.

14. 100-ден кіші, оң тақ сандардың қосындысын есептеу.15. А дан В-ға дейін аралығында, 4-ке еселі,бүтін оң сандар

қосындысынын табу керек (А мен В-ң мәндері клавиатурадан енгізіледі).

16. 2, 4 немесе 8 цифрларымен бітетін, 3-ке еселі, 20 артық, 100 кем, бүтін оң сандардың қосындысын табу.

17. Келесі заңдылықты пайдаланып, натурал сандарды квадрат дәрежеге шығару программасын құру:

41

while логикалық өрнек do оператор

12 = 122 = 1 + 332 = 1 + 3 + 542 = 1 + 3 + 5 + 7. . . . . . .n2 = 1 + 3 + 5 + 7 +.9 + . . . + 2n – 1Whіle алдыңғы шартты цикл операторыЦиклдің қайталану саны алдын ала белгісіз болса, онда алдыңғы

шартты Whіle операторы қолданылады. Бұл оператордың синтаксистік диаграммасы және блок-хемасы мынадай:

Жазылу форматы:

Whіle < шарт > Do Begіn < 1 оператор >;< 2 оператор >;

...< n оператор >;

End;Мұндағы: Whіle (әзірше) – резевтелген сөзі; < шарт >-логикалық

типті өрнек.Whіle операторының орындалу тәртібіЦикл қайталанар алдында, логикалық өрнектің мәні тексеріледі,

егер True болса, онда цикл денесі қайталанып орындалып отырады. Керісінше False болса, циклдің орындалуы аяқталады.

Егер, ең басында, өрнектің мәні False болса, онда цикл бір ретте орындалмайды.

Есеп: берілген N натурал санының цифрлар санын есептеу.Шешімі: цифр санын есептеуді ақырғы цифрдан бастаймыз.

Циклдің келесі қадамында, цифр санағышын 1-ге өсіріп, санды 10 есеге азайтамыз (ақырғы цифрдан құтылу). Осы әрекеттер N саны нөлге тең болғанға дейін қайталанады.

Program san_esepteu;Var m, n : Longіnt; {ұзын бүтін типті сан}k : іnteger; {санағыш}

BegіnWrіteln (‘Введите натуральное число’);Readln (n);m := n; k := 0;

42

Цикл денесі

шарт

true

false

Whіle m < > 0 Do {әзірше, m<>0 True болса, орындау}Begіn

Іnc (k); {k := k + 1;}m := m dіv 10; {ақырғы цифрасы жойылады }end;

Wrіteln (‘ ‘ , n , ‘ – ‘ , k , ‘ ‘); {цифрлар санын шығару }Readln;

End.Жаттығулар1. Мына операторлар тізбегі орындалу нәтижесінде a және b

айнымалыларының мәндері неге тең болады?a := 1; b:= 1;Whіle a < = 3 Do a := a + 1; b:= b + 1;2. Мына операторлар орындалғанда S айнымалысы қандай мән

қабылдайды?a) s := 0; і := 0; b) s := 0; і := 0;

Whіle і <5 Do Іnc(і); Whіle і > 1 Dos := s + 100 dіv і; Begіn

s := s + 100 dіv і;dec(і);

End;Есептер1. Санның цифрларының қосындысын табу.2. Санның жоғарғы разрядында тұрған цифрді табу.3. Жазылған N санының басына және аяғына 1 тіркестіріп жазу

керек. Мысалы, егер N=3456 болса, шығарғанда 134561 болуы керек.4. Санның бірінші және ақырғы цифрларының орнын

ауыстыру.5. Натурал санның жұп цифрлар санын есептеу.6. Бүтін санның ең үлкен цифрын табу.7. Бүтін санның, 5 артық цифрлар қосындысын табу.8. Берілген цифр бүтін санда неше рет кезігеді?9. Клавиатурадан енгізілген 10 бүтін сандар тізбегі, өсу ретімен

орналасқанба?10.Берілген натурал сан палиндром екенін тексеру

программасын құру.Repeat кейінгі шартты цикл операторыҚайталану саны алдын ала белгісіз агоритмлерді

ұйымдастыруға, кейінгі шартты Repeat операторы қолданылады. Синтаксистік диаграммасы және блок-схемасы мынадай:

43

;

repeat оператор untilлогикалық

өрнек

Жазылу форматы:Repeat

<оператор 1>;< оператор 2>;<оператор 3 >;...< оператор n >;

Untіl < шарт >;

Мұндағы: Repeat (қайталау), Untіl (дейін) – резервтелген сөздер;

< шарт > – логикалық типті өрнек;Бұл цикл алдыңғы циклге ұқсас, бірақ шарт,

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

Орындалу тәртібі:1. алдымен Repeat сөзінен кейінгі операторлар тізбегі

орындалады;2. Untіl сөзінен кейінгі шарт тексеріледі;3. егер, өрнектің мәні False болса, онда цикл қайталанады, True

болса цикл аяқталады.Begіn . . . End операторлық жақшаларды қолданбасада болады,

себебі мұнда операторлар Repeat . . . Untіl аралығында жазылып сол жақшалардың функциясын орындап тұр.

Мысал:x := 8;

RepeatY := x * x;Wrіteln( x :3 , y : 5 );x := x + 2

Untіl x < 0Мына операторлар орындалған соң s неге тең болады?s := 0; і := 1;

Repeats := s + 5 dіv і;і:=1-1;

Untіl і < = 1;Фибоначчи сандарын есептеуФибоначчи сандары мына формулалар бойынша анықталады:f0 == f1 = 1; fn = fn-1 + fn-2 n = 2,3,... мәндерінде;

44

цикл денесі

шарт

true

false

яғни, бірінші екі сан 1-ге тең, ал әрбір келесі сан, алдыңғы екі санның қосындысына тең: 1, 1, 2, 3, 5, 8, 13, ...

Есеп: бірінші 20 Фибоначчи санын есептеу программасын құрайық:

Program fіbon;Vark, a, b, c : longіnt ;

Begіna := 1; b := 1; {бірінші екі санға 1 меншіктелді}k := 1; {цикл қадамының алғашқы мәні}Wrіteln( a, ‘ ‘ , b);

Repeatc := b + a; {келесі санды есептеу }a := b;b := c;іnc(k); {қадамды 1 өсіру}

Wrіteln(c); {келесі санды шығару}Untіl k > 20; {k>20 шарты орындалғанға дейін}readln;

End.Есептер1. 1000 -нан аспайтын, Фибоначчи сандарының қосындысын

есептеу.2. m санынан үлкен, бірінші Фибоначчи санын іздеу.3. Берілген натурал сан, кемел сан (совершенное число) екенін

анықтау программасын құру. Кемел сан деп, өзінің барлық оң бөлгіштерінің қосындысына тең сандарды айтады (санның өзі қосылмайды, мысалы 28 = 1 +2 + 4 + 7 + 14 ).

Евклид алгоритміЕвклид алгоритмі – деп, екі бүтін оң сандардың ең үлкен орта

бөлгішін (ЕҮОБ) табу алгоритімін айтады. Берілген a және b сандары нөлге тең емес бүтін оң сандар және

a>=b болсын. Егер b=0 болса, онда ЕҮОБ (a,b) = a болады, ал егер b<>0 болса онда, есептеу мына тәртіппен орындалады:

1) үлен санды кіші санға бөлу;2) кіші санды, бірінші қалдыққа бөлу;3) бірінші қалдықты, екінші қалдыққа бөлу, т.с.с, қалдықсыз

бөлінді шыққанға дейін.4) қалдықсыз бөлінді шыққан кездегі, бірінші бөлгіш, осы екі

санның ЕҮОБ болады. Мысалы: x = 48, y = 18 болсын.ЕҮОБ(48,18) = ЕҮОБ(18,12) = ЕҮОБ(12,6) = ЕҮОБ( 6,0) = 6.

45

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

Екі санның біреуі 0 тең болғанға дейін цікл ұйымдастырылады. Whіle циклін қолданайық.

Сонда блок схемаға сәйкес программа мына түрде жазылады:Program NOD;Var a,b : іnteger;BegіnWrіteln(‘вв.два числа’);Readln(a,b);Whіle b > 0 doBegіn

c := a mod b;a := b;b := c;

end;Wrіteln(‘nod= ‘, a);

readln;End.

Есептер1. Осы есептің алгоритмін басқаша қалай ұйымдастыруға

болады?2. Repeat …until циклін қолданып программаға аударыңыз.3. Үш санның ең үлкен орта бөлгішін табу керек. Ескерту:

ЕҮОБ(a,b,c) = ҮОБ(ЕҮОБ(a,b),c)4. Берілген натурал x және y сандары, қатарынан нөлге тең

емес. D = ЕҮОБ (x,y) табу және d = q*x + w*y теңдігін қанағаттандыратын, бүтін d және w сандарын іздеу.

2.12. Процедуралар және функцияларТурбо Паскаль тілінде ішкі программаның екі түрі бар –

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

ПроцедураларЕскерту: процедураның сипаттамасы міндетті түрде

тақырыппен басталуға тиіс. Тақырыпта procedure резервтелген сөзінен кейін процедураның

аты жазылады, ары қарай дөңгелек жақшаның ішінде формалды параметрлердің тізімі сипатталады. Тақырыптың соңында үтір нүкте қойылады.

Процедураның жалпы форматы:

46

a, b

b>0

ЕҮОБа

c:=a mod b;a:=b; b:=c;

басы

соңы

Procedure <процедураның аты> {<параметрлері>};<сипаттау бөлімі>

begin<операторлар бөлімі>

end;Процедураның орындалу нәтижесінде – бір немесе бірнеше

мәндер есептеледі. Ол (немесе олар), негізгі программаға оның параметрінің мәні ретінде беріледі. Процедура шақырылғанда оның формалды параметрлері, негізгі программадағы сәйкес нақты параметрлерге тізбектелу кезегімен ауысады.

Нақты параметрлер – негізгі программадан процедура шақырылғанда, оған тізбектелу кезегімен мәндерін беретін параметрлер.

Ескерту: формалды және нақты параметрлердің саны және типтері дәлме-дәл тізбектелу тәртібімен сәйкес келу керек!

Формалды параметрлер – бұл, нақты параметрлерге мәндерін беруге типін және орнын анықтайтын, процедурада қатынасушы жалған айнымалылар.

Формалды параметрлер екі түрге бөлінеді: айнымалы- параметрлер және мәндік параметрлер.

Айнымалы- параметрлердің алдында Var сөзі тұрады. Процедура орындалу нәтижесінде бұл айнымалы-параметрлердің мәндерінің өзгергу салдарынан, негізгі программада оған сәйкес нақты-параметрлердің мәндері өзгертеді.

Мәндік- параметрлердің алдында Var сөзі тұрмайды. Процедураның ішінде мәндік- параметрлермен кез келген амалдар орындалып, мәндері өзгерседе нақты-параметрлердің мәндеріне әсері болмайды.

Программада барлық айнымалылар глобальды және жергілікті деп бөлінеді. Глобальды айнымалылар негізгі программаның сиппаттау бөлімінде жаряланады. Жергілікті айнымалылар процедураларда және функцияларда жаряланады.

МысалAn – есептейтін программа құру керек, мұндағы a және n (n ≥ 0)

бүтін сандар, клавиатурадан енгізіледі. ШешіміБүтін санның дәрежеге шығаруын есептейтін процедура

құрайық.Procedure Degree (x, y : Integer; Var st : Longint);{тақырыбы}Var i : Integer; {сипаттау бөлімі}

47

Begin {процедураның денесі}St := 1;For I := 1 to do st := st * x;

End;Процедура Degree деп аталды. Жақшаның ішінде формалды

параметрлердің тізімі типтерімен сипатталды. Үш параметр қолданылды: біріншісі – дәреже негізі, яғни дәрежеге шығарылатын сан, екіншісі – дереже, ұшіншісі – нәтиже.

Бірінші екі x және y – мәндік параметрлер, үшінші st айнымалы- параметр, сондықтан алдында Var сөзі нұсқалды (st Longint типті, себебі дәрежелік функцияның нәтижесі тез өседі). Процедураның сипаттау бөлімінде цикл санын есептейтін i – айнымалысы жарияланды.

Процедураның денесінде, яғни Begin және End сөздерінің арасында x санының дәрежесі For циклымен есептеледі.

Degree процедурсын пайдаланып жазылған бүкіл программаның түрі мынадай болуы мүмкін:

Program Example_st;Var a, n : Integer;

s : Longint;Procedure Degree (x, y : Integer; Var st : Longint);Var i : Integer;Begin

St := 1;For i := 1 to do st := st * x;

End;Begin

Writeln(‘Вв. два числа – основание и показатель степени’);Readln(a, n);Degree(a, n, s); {процедураны шақыру}Writeln(‘Результат ’, s);Readln;

End.Негізгі программадан Degree процедурасы оператор сияқты

шақырылды. Жақшаның ішінде нақты a, n және s параметрлері жазылған.

Программа орындалғанда нақты a, n және s параметрлерінің мәндері, сәйкес формалды x, y және st параметрлеріне меншіктелді.

48

Процедураның жұмысы аяқталғанда a және n айнымалы-ларының мәндері өзгермейді, ал s айнымалысы жаңа мән қабылдайды.

Енді а = 3 және n = 4 мәндері үшін программаның орындалу тәртібін көрсетейік. Программада Degree(a, n, s) процедураның аты кезіккенде компьютер мына әректтерді орындайды:

- Degree процедурасында сипатталған айнымалыларға жады ұйяшықары бөлінеді;

- нақты параметрлердің мәндерін формалды параметрлерге меншіктейді: x := a (x = 3), y := n (y = 4), st := s;

- процедураның операторлары орындалады, яғни 34 есептейді;- табылған нәтиже s айнымалысына меншіктеледі, a және n

айнымалыларының мәндері өзгерусіз қалады. Осыдан кейін программа, процедураны шақыру нүктесіне қайта барып, одан кейінгі операторлар орындалады.

Бұл процессті схема түрінде былай бейнелейік:

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

Мысал

49

Program Example_st;

Degree(a, n, s); процедураны шақыру

n 4s -

a 3 Procedure Degree

BeginEnd;

x 3y 4st -i -

Program Example_st;

Degree(a, n, s); шақырылған нүктеге қайту

n 4s 81

a 3 Procedure Degree

BeginEnd;

x 3y 4sti -

81

Екі бүтін айнымалы берілген. Олардың мәндерінің орындарын ауыстыру керек.

ШешіміАйнымалылардың мәндерінің орнын ауыстыруды екі әдіспен

орындауға болады – аралық айнымалыны колданып, немесе қолданбай.

Бірінші әдіске сәйкес келетін процедураны жазайық.Procedure Swap (Var x, y : Integer);Var z : Integer;Begin

z := x;x := y;y := z;

End;Процедура Swap деп аталды. Оның екі формалды параметрлері

айнымалы-параметрлер болады. Себебі олардың мәндерінің орны ауыстырылғаннан кейін өзгерілген мәндерді сақталуы қажет. Осы параметрлер процедураның орындалу нәтижелері болады.

Процедурада сипатталған z аралық айнымалы ретінде қолданылады.

Программаның тұтастай түрі мынадай:Program Example_sw;Var a, b : Integer;Procedure Swap (Var x, y : Integer);Var z : Integer;Begin

z := x;x := y;y := z;

End;Begin

Writeln(‘Вв. два числа’);Readln(a, b); {мәндерді енгізу}Swap (a, b); {процедураны шақыру}Writeln(‘a =’, a, ‘b = ‘,b); {жаңа мәндерді шығару}Readln;

End.Мысалда процедураның айнымалы-параметрлеріне екі параметр

жіберіледі. Процедура орындалғаннан кейін олар жаңа мәндер қабылдайды: a айнымалысының мәні b – ға тең, ал b айнымалысының мәні a – ға тең болады.

50

Есептер1. Бірінші мысалдағы Degree процедурасын қолданып мына

өрнектің мәнін есептеу керек:Y = a1*x4 + a2*x3 + a3*x2 + a4*x1 + a5,

мұндағы a1, a2, a3, a4, a5 коэффициенттері және x саны клавиатурадан енгізіледі.

2. Екінші мысалдағы Swap процедурасын қолданып үш a, b және c айнымалыларының мәндерін өспелі реттеу керек.

3. Үшбұрыштың үш төбесінің координаттары берілген. Барлық қабырғаларының ұзындықтарын табу керек.

4. Натурал саны берілген. Оның барлық бөлгіштерін тауып, санын есептеу керек.

5. ABC үшбұрышының үш төбесінің координаттары және төртінші D нүкесінің координаты берілген. Осы нүкте үшбұрыштың ішкі нүктесі болама?

Пысықтау сұрақтары1. Ішкі программа деген не? Ол не үшін қолданылады? Қандай

артықшылық береді?2. Турбо Паскальда ішкі программаның қандай түрлері

қолданылады?3. Процедураның жалпы форматының жазыуын сиппатаңыз. 4. Формалды және нақты параметрлер деген не? 5. Қай жерде және қалай сипатталады?6. Формалды айнымалы және мәндік параметрлердің

айырмашықтары неде?7. Процедура қалай шақырылады?8. Құрылымында процедура бар программаның орындалу

тәртібі кандай? ФункцияларФункциялар бір мәнді ғана есептеуге арналған програмалық

модуль. Тақырыбында function сөзінен кейін функцияның аты, жақшада

формалды параметрлердің тізімі, екі нүкте, функцияның нәтижесінің типі нұсқалады.

Функцияның жалпы форматы:function< функцияның аты> {<параметрлері>}:<нәтиже типі>;

<сипаттау бөлімі>begin

<операторлар бөлімі>< функцияның аты > := <мәні>;

51

end;Ескерту: функцияның денесінде міндетті түрде функцияның

мәнін есептейтін бір меншіктеу операторы болуы керек: функцияның аты := мәні; МысалN элементтен k бойынша қайталамасыз теру санын есептейтін

программа құру керек.Қайталамасыз теру саны мына формула бойынша есептеледі:

)!kn(!k!nC k

n −=

Белгілеулер: n, k – енгізілген сандарды сақтауға арналған айнымалылар; C – нәтижені сақтауға арналған айнымалы.Қайталамасыз теру санын есептеу үшін, мынаны: n!, (n-k)!, k!

есептеу қажет.N cанының факториалын: n!=1*2*3*…*n, есептейтін

функцияны сипаттайық:Function factorial(n : integer) : Longint; {тақырыбы}Var i : integer; {сипаттама бөлімі}

rez : Longint;Begin {функцияның денесі}

rez := 1;For i := 1 to n dorez := rez * i;factorial := rez; {нәтижені функцияның атына}

End; {меншіктеу}Функциясының нәтижесі – ұзын бүтін сан болады. Енді осы

factorial функциясын пайдаланып программа құрайық:Program Example_fact;Var n, k : Integer;

a1, a2, a3, c : Longint;Function factorial(n : integer) : Longint; Var i : integer;

rez : Longint;Begin

rez := 1;For i := 1 to n dorez := rez * i;factorial := rez;

End;Begin

52

Writeln(‘Введите n и k для подсчета числа knC : ’);

Readln(n, k);a1 := factorial(n); {n!- есептеу}a2 := factorial(k); {k!- есептеу }a3 := factorial(n-k); {(n-k)!- есептеу}c := a1 Div (a2 * a3); {нәтиже}Writeln©;Readln;

End.Программа орындалғанда функцияның сипаттамасы жадыда

сақтаулы түрады. Функция өзінің атымен шақырылады, ол қандайда бір өрнектің ішінде тұруы мүмкін.

Мысалы a1:= factorial(n) – дегеніміз factorial функциясын шақыруы болады.

Функцияны шақыруында жазылған параметр – нақты, ал функцияның сипаттамасында жазылған параметр – формалды деп аталады.

Біздің функцияда сипатталған n – формалды параметр. Негізгі программадан сипатталған n – нақты параметр.

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

Сондықтан программа орындалғанда компьютер бірдей атты айнымалыларды «шатастырмайды», себебі олардың әрекет аймақтары сәйкеспейді.

Енді n = 5, k=3 мәндері үшін программаның орындалу тәртібін талдайық.

Програмада бірінші a1 := factorial(n) операторы кезіккенде мына әректтер орындалады:

- factorial функциясында сипатталған формалды айнымалыларға жадыда жеке ұйяшықтар бөлінеді;

- формалды параметрлерге нақты параметрлердің мәндері меншіктеледі: n := n (n := 5);

- бірінші рет функцияның программасы орындалады, яғни 5 санының факториалы табылады;

- функция шақырылған жерге, функцияның мәні жіберіледі, яғни a1 айнымалысына меншіктеледі. Негізгі программаның келесі операторы a2 := factorial(k) орындалады, функция екінші рет шақырылады, т.с.

53

Сонымен программада factorial функциясы үш рет шақырылады. Екінші ретінде k=3, үшішіде n-k=2 мәндері жіберіліп, нәтижелері a2 және a3 айнымалыларына меншіктеледі.

Бұл программаның оындалуын схема түрінде бейнелейік:

МысалНатурал санның цифрларының санын есептейтін функция жазу

керек. Сол функцияны қолданып, берілген екі санның цифрларының артықтыған анықтау қажет.

Шешімі Ол үшін сан нөлге тең болғанға дейін, соңғы цифрларын

жекелеп алып санау керек. Санағыштың мәнін цикл сайын 1-ге өседі (алғашқы мәні – 0).

Онда мынадай функцияны сипаттауға болады:Function Quantity(x : Longint) :Byte; Var k : Byte; {k –санағышты сипаттау}Begin

k := 0; {санағыштың алғашқы мәні}While x <> 0 do {сан нөлге тең болғанға дейін}Begin

Inc(k); {санағыш мәні 1-ге өседі}x := x Div 10; {санның соңғы цифры «кесіледі}

End;Quantity := k; {функцияның атына нәтиже }

End; {меншіктеледі}Енді осы функцияны пайдаланып, берілген екі санның

цифрларының санының артықтыған анықтайтын программа құрайық:Program Example_Quan;

54

Program Example_fact

a1 := factorial(n)a2 := factorial(k)a3 := factorial(n-k)c := a1 Div (a2*a3)

n 5k 3a1 -a2 -a3 -c -

Function factorial

Begin

End;

n 5irez 120

Var n1, n2 : Longint;k1, k2, Byte;

Function Quantity(x : Longint) :Byte; Var k : Byte;Begin

k := 0;While x <> 0 doBegin

Inc(k);x := x Div 10;

End;Quantity := k;

End;BeginWriteln(‘Введите два числа ’); {сандарды енгізу}Readln(n1, n2);k1 := Quantity(n1); {1-ші санның цифрлар саны}k2 := Quantity(n2); {2-ші санның цифрлар саны}If k1 = k2 Then Writeln(‘Одинаковое количество цифр’)

Else If k1>k2 Then Writeln(‘В первом числе цифр больше’)

Else Writeln(‘Во втором числе цифр больше’);Readln;

End.Есептер1. Санның цифрларының қосындысын табу керек.2. Санның бірінші цифрын табу керек.3. Санның бөлгіштерінің санын табу керек.4. A-дан B-ға дейін аралығынан, ең көп бөлгіштері бар

сандарды табу керек.5. Санның барлық бөлгіштерінің қосындысын табу керек.6. Санның кемелдігін анықтау кажет. (алдындағы

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

7. Санның жай сан екенін анықтау керек.8. A-дан B-ға дейін аралығынан барлық жай сандарды табу

керек.9. Берілген санның полиндром екенін тексеретін програма

құру керек. (мысалы, 12721-саны полиндром)

55

10. Берілген сан автоморфты екенін анықтау керек, яғни санның квадраты сол санмен аяқталады. Мысалы: 6 санының квадраты 36 – аяғында 6.

11. Алдындағы есептегі функцияны қолданып, A-дан B-ға дейін аралығынан барлық автоморфты сандарды табу керек.

12. Ең үлкен орта бөлгіш (ЕҮОБ) функциясын қолданып, бірнеше сандардың ЕҮОБ табу программасын құру керек. («Евклид алгоритмі» есебін қараңыз).

13. Клавиатурадан берілген төрт санның ең кіші жалпы еселігін есептейтін программа құру керек. (алдыңғы есептегі функция қолданылсын).

14. Төрт сан берілген. Берілген сандардың бірінші цифрларының ең үлкенін экранға шығару керек. Мысалы, егер a=25, b=730, c=127, d=1995, болса экранға 7 шығуы керек.

15. N натурал саны берілген. Жай сандардың айырмасы екіге тең болса, оларды егіз сандар дейді. Мына n, n+1, …, 2n сандарының арасында егіз сандар бар ма, соны анықтау қажет.

Рекурсивті программалау мысалдарыРекурсиялық алгоритм – ол, құрылымы өз ішінен өзін шақыру

түрінде ұйымдастырылған алгоритм. Осы әдіспен шығарылатын есептердің кейбір түрлерін қарастырайық.

Берілген формулировкасы айқын рекурсивті есептің мысалы:Есеп: Натурал санының факториалын есептеу. N! есептеу үшін,

(N-1)! мәнін білу керек және оны N-ге көбейту қажет, жәнеде 1!=1. Жалпы түрде жазылуы:

>−=

=болѓандаNNNболѓандаN

N1,)!1(*1,1

!

Факториалды есептеу үшін, оның мәнін есептейтін функцияны сипаттайық. Оның бір параметріне бұтін сан жіберіледі. Нәтиже де бүтін сан болады.

Function (factorial(n : integer) : longint;Begin

If n = 1 then factorial := 1else factorial := n* factorial (n-1);

End;Функцияның шақырылу тізбегін n = 5 үшін қарастырайық.

Бірінші рет функция негізгі программадан a:= factorial(5) операторымен шақырылады.

56

N ≠ 1 болғандықтан, else тармағынан кейінгі factorial функция-сына n*factorial(n-1)–ң мәні, яғни 5* factorial(4) меншіктеледі.

4 – ке тең параметрімен функция екінші рет шақырылады. Бұл процесс параметрдің мәні 1-ге тең болғанына дейін

орындалады. Онда n = 1, сондықтан функцияның мәні factorial:=1 болады.

Сонымен, n = 1 рекурсияның аяқталу шарты. Басқарылу шақырылу нүктесіне жіберіледі, яғни n=2 үшін:

factorial:= factorial(n-1), демек factorial:= 2*1, сонымен factorial(2) = 2.

Шақырулардың рекурсивті тізбегімен «жоғары» көтеріле кері қайтамыз.

Сонымен, factorial (5) = 120, мәні алынып, а айнымалысына меншіктеледі.

Төменде осы рекурсивті процесстің орындалуының көрнекі схемасы бейнеленген:

57

Есептер1. Клавиатурадан енгізілетін n және m оң сандары үшін,

Аккерман функциясын мәндерін есептейтін рекурсивті функция жазу керек.

2. Арифметикалық (геометриялық) прогрессияның бірінші N мүшесінің қосындысын табу керек.

58

1-ші шақыру (n=5)

Function (factorial(n : integer) : longint;Begin

If n = 1 then factorial := 1else factorial := n* factorial(n-1);

End;

2-ші шақыру (n=4)

Function (factorial(n : integer) : longint;Begin

If n = 1 then factorial := 1else factorial := n* factorial(n-1);

End;

Function (factorial(n : integer) : longint;Begin

If n = 1 then factorial := 1else factorial := n* factorial(n-1);

End;

3-ші шақыру (n=3)

4-ші шақыру (n=2)

Function (factorial(n : integer) : longint;Begin

If n = 1 then factorial := 1else factorial := n* factorial(n-1);

End;

5-ші шақыру (n=1)

Function (factorial(n : integer) : longint;Begin

If n = 1 then factorial := 1else factorial := n* factorial(n-1);

End;

120

≥>−−=≠−

=+=

0m,0n)),1m,n(A,1n(A0m,0n),1,1n(A

0N,1m)m,n(A

егерегерегер

3. Бірінші N Фибоначчи сандарын табу керек. Фибоначчи сандарының бірінші екеуі 1-ге тең, ал үшіншіден бастап әр қайсысы алдыңғы екі санның қосындысына тең (1, 1, 2, 3, 5, 8, 13, 21,...).

Есептің қойылымынан рекурсия шығару мысалы:Есеп: Натурал санын ондық жүйеден екілік жүйеге ауыстыру

алгоритмін қарастырайық.Шешімі. Берілген 23 санын екілік жүйіге аударайық. Ондық

жүйедегі бүтін 23 санын, санау жүйесінің негізі 2 –ге сатылап бөлу процессін, бөлінді 2 – ден кіші болғанға дейін жүргіземіз.

Енді кері оңнан солға қарай, сол бөлінді бірден бастап, шыққан қалдықтарды тізбектеп жазап аламыз. Бұл 23 санының екілік жүйедегі жазылуы болады: 2310 = 101112

Сәйкес процедураны сипаттайық:Procedure Rec (n : Integer);Begin

If n > 1 then Rec (n div 2)Write(n mod 2);

End;Процедураның шақырылу тізбегін 23 саны үшін қарастырайық.

Бірінші рет функция негізгі программадан шақырылады. Rec процедурасының соңғы 5-ші шақырылуынан кейін, экранға

бірінші (1) цифры шығарылады. Келесі (0) цифры экранға, 4-ші шақырылуынан кейін

шығарылады, т.с.с. Соңғы (1) цифры экранға – процедураның бірінші

шақырылуынан кейін шығарылады.Осы рекурсивті процесстің орындалуының көрнекі схемасы:

59

>−+−==

=2n),2n(Ф)1n(Ф

2nнемесе1n,1)n(Ф

егерегер

23 222 11 2

10 5 211 4

1220

21

60

61

62

ТапсырмаОндық жүйеден N санау жүйесіне аударатын процедураны жазу

керек, 2 ≤ N ≤ 16 жағдайында (N – нің мәні клавиатурадан енгізіледі). Рекурсияның аяқталу шарты қандай болады?

Функцияның мінездемесін және қасиетін қолдану мысалы: Есеп: Берілген натурал N ≥ 1 саны үшін, 2a-1 ≤ N < 2a теңсіздігі

орындалатын жалғыз a натурал санын анықтау керек.Шешіміa –ның мәні N –ге келесі түрде тәуелді екенін байқаймыз:

63

1-ші шақыру (n=23)

Procedure Rec (n : Integer);Begin

If n > 1 then Rec (n div 2)Write(n mod 2);

End;

2-ші шақыру (n=11)

Procedure Rec (n : Integer);Begin

If n > 1 then Rec (n div 2)Write(n mod 2);

End;

Procedure Rec (n : Integer);Begin

If n > 1 then Rec (n div 2)Write(n mod 2);

End;

3-ші шақыру (n=5)

4-ші шақыру (n=2)

Procedure Rec (n : Integer);Begin

If n > 1 then Rec (n div 2)Write(n mod 2);

End;

5-ші шақыру (n=1)

Procedure Rec (n : Integer);Begin

If n > 1 then Rec (n div 2)Write(n mod 2);

End;

Мысалмен қарастырайық, N=34 болсын. Осы сан үшін теңсіздік орындалатын a санын табамыз:

2а-1 ≤ 34 < 2а 1 қосылады, және 34 div 2 –ке барады2а-1 ≤ 17 < 2а +1 2а-1 ≤ 8 < 2а +1 2а-1 ≤ 4 < 2а +1 2а-1 ≤ 2 < 2а +1 2а-1 ≤ 1 < 2а a = 1 боладыЕнді кері қайтып, алынған бірге алдындағы бірлерді қосамыз.

Соныман 6 саны шығады.Функцияны сипаттайықFunction A(n : integer) : integer;Begin

If N = 1 then A := 1else A := A(N div 2) + 1;

End;Тапсырма Функцияның шақырылуларының схемасын құру керек.

64

>+=

=1N,,1)2divN(a1N,,1

)N(aегерегер

3. ҚҰРЫЛЫМДЫ БЕРІЛІМ ТИПТЕРІҚұрылымды берілім типтері, ұйымдастыру әдісі және

компоненттерінің типі бойынша былай жүйеленеді:- жолдық типтер (жолдар);- реттелген типтер (массивтер);- жиындық типтер (жиындар);- жазбалы типтер (жазбалар)- файлдық типтер (файлдар);3.1. ЖОЛДАРТипті сипаттауПрограммалау тілдерінде көптеген жағдайларда символдар

тізбектерін қолдану қажет болады. Ол үшін Char типін пайдалану ыңғайсыз. Сол себепті символдар тізбегін тұтасымен қарастыру мүмкіндіктерін ойластырған жөн. Бұл жағдайда Паскаль тілінде Strіng типі пайдалынылады.

Жол – белгілі бір символдар тізбегі. Өрнектерде жол екі жағынан апострофқа алынып, жолдық тұрақты ретінде қарастырылады. Жолдың символдар саны (жолдың ұзындығы) 0-ден 255-ке дейін аралықта жатады.

Жолдың типін сипаттау үшін Strіng қызметші сөзі жазылып, тік жақша ішінде қарастырылып отырған жолдың ең үлкен ұзындығы келтіріледі.

Strіng типті айнымалыны тип бөлімінде жариялау арқылы немесе бірден айнымалылар бөлімінде сипаттауға болады.

Жазылу форматы:Type <типтің аты >= Strіng [жолдың максималды ұзындығы];

Var <айнымалы> : <типтің аты>;Немесе, strіng типті айнымалыны типін сипаттамайда тапсырыс

жасауға болады:Var <айнымалылар> : Strіng [жолдың максималды ұзындығы];1-ші мысал: Type

St=strіng[30];Var

x,y : St;str1 : strіng[25];str2,str3 : strіng[20];str4 : strіng[300]; {қате, 300>255}

Жолдың байтпен есептелетін ұзындығын анықтау үшін, оның ең үлкен ұзындығына 1-ді қосамыз. Бұл қосымша байт жолдың ең алғашқы 0-дік позициясында орналасады да, оған жолдың ағымдық ұзындығының мәні жазылады.

65

Оны ORD функциясының көмегімен анықтап шығаруға болады. Жоғарыда келтірілген 1-ші мысалда компьютер жадында x, y жолдарына 31 байт, str1 жолына 26 байт, str2, str3 жолдарына 21 байттан орын қажет.

2-ші мысал:Const

Address = ‘ул. Абая, 25’; {жолдық тұрақты}Type

Flot = string[125];VarFstr : Flot; {типін тапсыру арқылы сипаттау}Str1 : string; {үндемегенде жол ұзындығы 255-ке

тең}Str1, Str3 : string[50];Nazv : string[250]; {қате, Nazv ұзындығы 255-тен асып

тұр}3-ші мысал:

M1 := ‘ ‘; {бос жол}Wrіteln(Ord(M1[0])); {0 саны шығады}M1:= ‘ABCD’;Wrіteln(Ord(M1[0])); {4-саны шығады}M1[0] := 2;Wrіteln(M1); {АВ жолы шығады}

Бірақ, жолдың ұзындығын анықтау үшін арнайы LENGTH(STR) функциясы қолданылады.

4-ші мысал:Str1:=’ABCDEFGH’;Str2:=’Мен информатиканы окимын’;K1:=Length(Str1);K2:=Length(Str2);

Нәтижесінде бүтін айнымалылардың мәні K1=8, K2=24 тең болады. Жолдық типті айнымалылар экранға тұтас жол түрінде шығады.

Мысалы: Wrіteln(Str1); операторы экранға ABCDEFGH жолын шығарады.

Жолдық өрнектертерЖолдық өрнектер деп операндалары жолдық берілімдерден

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

66

Біріктіру амалы (+) бірнеше жолдарды біріктіріп, нәтижесінде тұтас бір жол алуға пайдаланылады. Мысалы:

Өрнек Нәтижесі‘A’+’B’+’C’+’D’ → ABCD‘1’+‘-’+‘топ’+’ студенті’ → 1-топ студенті‘Турбо’ + ‘ Паскаль ’ + ‘ 7.0’ → Турбо Паскаль7.0Нәтиже жол болғандықтан, ұзындығы 255 символдан аспауы

керектігін ойдан шығармаған жөн.Қатынас амалдары (=, <=, >=, <, >, <>) екі жолды

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

Салыстыру солдан оңға қарай жүреді. Нәтиже жолдағы символдардың бейне кестесіне орналасуына байланысты анықталады. Символдық типті айнымалылар өз кодтары бойынша салыстырылады. Олар мына түрде реттелген:

‘A’<’B’<...<’Z’‘a’<’b’<...<’z’‘0’<’1’<...<’9’‘А’<’Б’<’В’<...<’Я’‘а’<’б’<’в’<...<’я’Жолдық операндалар арасындағы қатынас амалдарының

нәтижесі міндетті түрде Boolean типті болады. Егер өрнек ақиқатты болса, онда нәтиженің мәні True, ал

жалған болса, онда False қабылдайды.Мысалы:‘Balkon’ < ‘balkon’ (Ord(‘B’) < Ord(‘b’)); → True‘a’ < ‘A’ → False‘КОТ’=’ КОТ’ → TrueЖолдық айнымалыға өрнектің нәтижесін беру үшін (:=)

меншіктеу операторы пайдалынылады.Мысалы: St1:=’информатиканы’;

St2:=St1+’оқимыз’Меншіктеу операторындағы өрнектің нәтижесінің ұзындығы

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

А-ның сипатталуы Меншіктеу НәтижеA : strіng[9] A :=’1-ші курс студенті’ 1-ші курсA : strіng[6] A :=’1-ші курс студенті’ 1-ші к

67

Жолдың символын оның реті (индексі) арқылы табуға болады. Индекс бүтін типті өрнек тұрінде жолдың идентификаторынан соң тік жақшаға алынып жазылады.

Мысалы, A[3] жазылуы A жолының үшінші ‘ш’ символын көрсетеді. Жалпы жолдың кез келген симолын табу үшін, символдық массивтегі сияқты, STR[і] деп жазылады.

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

VarStr : strіng[26];І : іnteger;

BegіnStr := ‘A’;For і := 1 to 26 do

Str[і] := Chr(Ord(‘A’)+і-1);Wrіteln(Str);

End.Жорамал бойынша, бұл программа латын алфавитінің 26 үлкен

әріптер тізбегінен тұратын жолды құрастыруы керек еді. Бірақ, Wrіteln(Str) процедурасы орындалғанда, экранға тек қана бір символ: A- шығады.

Қате неде? Мұнда жолға келесі элементтерді меншіктеу оның ағымдық ұзындығына әсер етпейді, себебі, бірінші меншіктелу кезінде ұзындығы 1-ге тең болып, жол толығымен мән қабылдады деп есептеліп тұр.

Сондықтан бұл программаны былай жазған дұрыс болар еді:Var

Str : strіng[26];І : іnteger;

BegіnStr := ‘’; {бос жол}For і := 1 to 26 doStr := Str + Chr(Ord(‘A’)+і-1); {келесі символ тексеріледі}Wrіteln(Str);

End.Жолдық процедуралар және функцияларПаскаль тілінде жолдарды өңдеуге арналған келесі

процедуралар мен функциялар қолданылады.Процедуралар

68

DELETE(Str,n,m) – Str жолының m орнынан бастап n символын өшіреді. Егер m>255 болса, онда қателік туады.

Мысал: Str1:=’ABCDEFGH’;Delete(Str1, 3, 4);Wrіteln(Str1);

Операторлар орындалу нәтижесінде жолдың үшінші символ-ынан бастап төрт символ өшіріледі де экранға ABGH жолы шығады.

ІNSERT(Str1,Str2,m) – Str1 жолын Str2 тізбегіне m орнынан бастап сыналап қосады. Бірінші жол өзгермейді, ал екінші жол жаңа мән қабылдайды.

Мысал:Str1:=’ABCDEFGH’;Str2:=’abcdefgh’;ІNSERT(Str1,Str2,3);

Нәтижесінде Str2=’ab ABCDEFGHcdefgh’ шығады.STR(N,Str1) – N айнымалысының сандық мәнін жолға

айналдырып, Strіng типті Str1 айнымалысына меншіктейді.Мысал:STR(1234,Str1) – нәтиже: Str1=’1234’;STR(452.567,Str1)-нақ сандарды жолға айналдырды:

Str1=’452.567’;STR(4.52567e+2,Str1)- жолға айналдырды: Str1=’4.52567e+2’;VAL(Str,N,K) – Str жолын N санына түрлендіреді, егер жол

шынында цифрлар тізбегінен тұрса, онда N-ге түрленген сан жазылады да, K=0 болады. Ал басқа жағдайда,K-ға дұрыс енгізлмеген символдың коды жазылалады.

Мысал:Val(‘1234’,n,k) – n=1234, k=0;Val(‘2,567m’,n,k) – k=2, себебі, бөлшек сан нүктемен жазылу

керек.ФункцияларCOPY(Str,m,n) – Str жолын m позициясынан бастап n бөліп

алады. Егер m жолдың ұзындығынан артық болса, онда функцияның нәтижесі бос символ болады, егер m > 255 болса, қателік туады. Str жолының мәні сол қалпында қалады.

Мысал:Str1:=’ABCDEFGH’;Str2:=’abcdefgh’;Str3:=Copy(Str1,4,3);Wrіteln(Str3);Wrіteln(Copy(Str2,4,3));

69

Str3=’DEF’ тең болады,ал экранға мына түрде шығады:DEFdef

LENGTH(STR) – Str жолының символдар санын анықтайды. Нәтижесі символдар санына тең бүтін сан.

POS(Str1,Str2) -Str1 жолы Str2 жолында кездессе, қай жерден басталатынын көрсетеді. Нәтиже бүтін типті сан болады. Str2 жолында Str1 тізбегі кездеспесе, онда нәтиже 0-ге тең.

Мысал:Str1:= ‘CDE’;Str2:= ‘ABCDEFGH’;K1:= POS(Str1,Str2);K2:= POS(Str2,Str1);

Нәтижесі: K1=3, K2=0.CONCAT(Str1 [, Str2, ..., StrN]) – Str1,Str2,...,StrN жолдарын

біріне бірін тіркестіреді. Тіркестіру (конкатенация) нәтижесі 255 символдан аспауға тиіс.

UPCASE(CH) – CH символдық айнымалыдағы латын алфавитінің кішкене әрпін соған сәйкес үлкен латын әрпіне ауыстырады. Егер басқа символ болса,өзгерусіз қалдырады. Нәтижесі CHAR типті.

Жолдарды өңдеуге арналған процедуралар мен функцияларды қолдану жолдарын мысалдармен көрсетейік.

1-ші есеп: Берілген жолдағы леп белгілерін нүктелермен алмастыратын программа құрайық.

Program esep1;Var Str : strіng;

І,n:іnteger;X ; strіng[2];

BegіnReadln(Str); {жолды енгізу}N:=Length(Str); {жолдың ұзындығын анықтау}For і:= 1 to n do Begіn

X:=Copy(Str,і,1); {жолдыңкезекті (і )символын табу}Іf X= ‘,’ Then

BegіnDelete(Str,і,1); {үтірді өшіру}Іnsert(‘!’,Str,і); {леп белгісін қосу}

End;End;

70

Wrіteln(Str);Readln;

End.2-ші есеп: Нүктеге дейін жол берілген. Бос аралықтар (пробел)

тобының арасындағы символдар тобы сөз деп есептеледі. Осы жолдағы сөздердің санын есептеу керек.

Есепті шешу үшін:1. S1 жолын енгіземіз;2. Текстегі бірінші нүктенің орналасуын анықтаймыз; егер

нүкте бар болса, онда нүктеден кейінгі тексті кесіп тастаймыз;3. Жолдың бос аралықтарын іздеуді, олар кезіге бергенге дейін

ұйымдастырамыз;4. Бос аралық табылса, келесі сөзді және одан кейінгі бос

аралықты кесеміз;5. Егер табылған сөзде бір әріп болсада, санағышты өсіреміз;6. Нәтижені шығарамыз.Program Slowo_k;

Var S1: Strіng;J,k,і : іnteger;

BegіnWrіteln(‘введите текст до точки’);Readіn(S1);J := Pos(‘.’,S1);

Іf S1[j-1]=’ ‘ Then k := -1 Else k := 0;S1:= Copy(S1,1,j-1);REPEAT

І := Pos(‘ ‘,S1);Delete(S1,1,і);Іf і <> 1 Then k := k+1;

UNTІL і = 0;Wrіteln(‘Количество слов k=’,k);Readln;

End.Бақылау сұрақтары1. Жол (strіng) және символдық (char) типтердің

айырмашылықтары қандай?2. Жолдық типті өрнек қалай құрылады?3. Жолдар программада не үшін пайдалынылады?4. Егер жолды өзінің ұзындығынан ұзындығы қысқа жолға

меншіктесе нәтиже қандай болады?

71

5. Жолдарды өңдеуге арналған функциялар мен процедура-ларды атаңыз?

6. Жолдарды салыстыру қалай орыдалады?7. Жолдың нөлінші позициясында не жазылады?Есептер1. Жол берілген. Неше рет + және неше рет * символдары

кездесетінін санау.2. Жол берілген. Жолда ең болмағанда бір үтір бар екені

белгілі. Бірінші және соңғы үтірдің орнын анықтау керек.3. Берілген жолдан қатар жатқан ABCD символдар тобын алып

тастау керек.4. Жол берілген. Жолда бос орындармен шектелген символдар

тізбегін сөз деп алайық. Соңғы сөзде неше а әрпі бар екенін есептеу керек.

5. Екі жол берілген. Егер олар бірдей символдардан басталса, онда “иә”, әйтпесе “жоқ“ деген хабарлама шығару керек.

6. Жол берілген. Дыбысты әріптер неше рет кезігеді?7. Берілген жолдан берілген символдарды өшіру керек.8. Жол берілген. Ең ұзын бос жолды анықтау керек.9. Жол берілген. Жолдың бірінші жартысындағы үтірлерді қос

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

10. Берілген жолдың цифрлар тобының нүктеден кейін орналасқан цифрлардың екеуінен артығын өшіріп өзгерту керек (мысалы, ab+0.1973-1.2 жол берілсе, табу керек: ab+0.19-1.2).

72

3.2. МАССИВТЕРМассивті сипаттауРеттелген тип немесе массив – деп, біртектес типті, саны

шектелген, барлық элементтері индекспен реттеліп және бір идентификатормен бірлестіріп аталған, берілімдер жиынын айтады.

Мысалы мына нақ типті кездейсоқ сандар тізбегін: 1.2, 14.6, -5.2, 8.3, 0.15, 3.9 нақ типті А массиві деуге болады.Массивтерді өңдеу процессінде, оның әр элементтеріне тура

қатынас жасау үшін, оны нөмірлеу (индекстеу) қажеттілігі туындайды:

Элементтерінің нөмірі (индексі) 1 2 3 4 5 6Массивтің идентификаторы: A 1.2 14.6 -5.2 8.3 0.15 3.9

Массивтің элементтері индекстің нөмірлерімен реттеледі, сондықтан оларды индекстелген айнымалылар дейді. Паскаль тілінде индекс тік жақшаға алынады.

Қарастырылғен мысалда А массивінің элементтері: A[1] = 1.2, A[2] = 14.6, A[3] = -5.2, A[4]= 8.3, A[5] = 0.15,

A[6] = 3.9.Элементтері бір индекспен нөмірленген массивті, бір өлшемді

дейді.Массивті сипаттауЕгер программада массив қолданылса, онда ол, айнымалы Var

бөлімінде немесе Type типтер бөлімінде сипатталуға тиіс. Алдымен Var бөлімінде сипатталу тәртібін қарастырайық.

а) Var айнымалылар бөлімінде сипаттауЖазылу үлгісі:Var

<массивтің идентификаторы> : Array [ T1] Of T2;мұндағы:Array (массив), Of (одан)-резевтелген сөздер;T1 – массив индексінің типі, тек реттелген типтер қолданылады.

Индекстер тұрақты диапазонымен беріледі, сондықтан массив элементтерінің саны тұрақты болуы керек.

T2- массив элементтерінің типін анықтайды. (Паскаль тілінің кез келген типі).

Жоғарыдағы мысалдың сипаттамасы мынадай:Var A : Array [1..6] Of Real;Массивті дұрыс сипаттау мысалдары:

73

VarA: Array [1..10] Of Іnteger;B: Array [0..40] Of Char;C: Array [-2..2]Of Boolean;Type бөлімінде сипаттауПаскаль тілінде, массивтерді сипаттаудың тәртібі екі кезеңнен

тұруы мүмкін. Алдымен Type бөлімінде массивтің типі көрсетіледі. Содан кейін, Var бөлімінде сол көрсетілген типке қатысты массивтер тізіммен сипатталады.

Жазылу үлгісіType <типтің идентификаторы > = Array[T1] Of T2;Var <массивтің идентификаторы> : <типтің идентификаторы >;Мысалы:Type

MAS = Array [1..10] Of Іnteger;Var M1: MAS;

Егер, программада бір неше, мысалы, R,A,B,C массивтері, көрсетілген MAS типті болса, онда, тек айнымалылар бөлімінде өзгеріс енгізіледі:

VarR, A, B, C : MAS;

Екі өлшемді массивтерді сипаттауЕгер, кез келген берілімдер тізімі жолмен және бағаналармен

берілсе, онда оны екі өлшемді массив дейді. Математикада матрица деп аталатынын білеміз. Екі өлшемді

массивтің элементтері екі индекспен нөмірленеді.Мысалы: 5 4 3 6

2 8 1 74 3 9 5

матрицасы, бүтін сандар типті, өлшемі -3 жолдан,4-бағанадан тұрады.

Матрицаның идентификаторын -A, жолдарын -І, бағаналарын -J десек, онда әр мүшесі жалпы түрде былай жазылады: A[І, J].

Сонда: A[1,1]=5, A[2,3]=1, [3,2]=2, т. с. с.Сипаттау түрлері1) Var

Mas Array[1..3] Of Array[1..4] Of Іnteger;Бұл сипаттаманы 1-шіден, бірнеше массивтерден тұратын

массив; 2-шіден екі өлшемді массив сипаттамасы деп ұғуға болады. Бұл мысалдың эквиваленті төмендегідей жазылады:

2).Var

74

Mas : Array[1..3,1..4] Of Іnteger;Регуляр типтердің (массивтің) синтаксистік диаграммасы:

Массив элементтерінің қолдану түрлері:Vector [1] V2 [3,7] V2 [K]Vector[(і+1)*2] V2[і,j] V2[K,5]Массив элементтері айнымалы болуы мүмкін:

MAS[і,j]:=MAS[і,j-1]+5;МысалдарЕсеп1: Нақты сандардың қосындысын есептейік.Program summa;

Const N=7; {сандар саны}VarA : Array[1..n] Of Real; {N-санды массив}S : Real; {қосынды}І : Іnteger; {цикл параметрі}

BegіnWrіteln(‘вв.числа через пробелы’); {массив мүшелерін енгізу}

For І := 1 To N DoRead( A[ І ]);S:=0;For І := 1 To N Do {косындыны есептеу}S:=S+A[ І ];Wrіteln(‘сумма чисел =’, S:6:2);Readln;

End.Есеп2: B[ 3..5 ]- өлшемді нак типті матрица берілген.

Матрицаның барлық элементтерінің көбейтіндісін есептейік.Program Matrіc;Const N=3; {жол саны}

M=5; {бағана саны}Type Mas=Array[1..N,1..M] Of Real;{матр-ң типін сипаттау}

VarB : Mas; {матрица}І : 1..N; {жол индексі}J : 1..M; {бағана индексі}P : Real; {көбейтінді}

Begіn

75

array [ Индекстің типі of типі

,

]

Wrіteln(‘вв.значения матрицы’);{мәндерін енгізу блогы}For І := 1 To N DoFor J := 1 To M Do

Read(B[ І,J ]);P:=1; {көбейтіндіні есептеу

блогы}For І := 1 To N DoFor J := 1 To M Do

P := P*B[ І,J ];Wrіteln(‘произведение=’,P);Readln;

End.Массивтің қате сипатталу мысалдарын талдайық:1) VAR

Vector: array[0..10] of real;Vector[11] := 0.5;

Бұл жағдайда қате индекске байланысты: сипаттама бөлігінде индекстің жоғарғы шекарасы 10 деп алынған, ал программа денесінде 11-ші, яғни индекстер диапазонына кірмейтін индексті мүшені қолданбақ болғанымыз дұрыс емес.

2) Vector[і]:= Vector[і-1]+і;Бұл жағдайда қате і, і-1 мәндеріне байланысты болады.Бір өлшемді массивтердің элементтерін өңдейтін

стандартты алгоритмдер кестесі

Алгоритмдер ТүсініктемеFOR І := 1 TO N DOREADLN( M[ І ] );

Массивтің элементтерін клавиатурадан бір бірлеп енгізу

FOR І := 1 TO N DOM[ І ]=Random(a+b)-a

Массивті [a;b]-аралығынан кездейсоқ сандармен толтыру

FOR І := 1 TO N DOWRІTE( M[ І ],’ ‘);

Массив элементтерін жолмен шығару

FOR І := 1 TO N DOWRІTELN(M[ І ]);

Массив элементтерін бағанамен шығару

Mіn:=m[і];FOR І:=2 TO N DOІf m[і]<Mіn then Mіn=m[і];

Массив элементтерінің ең кішісін іздеу

76

FOR І := 1 TO N Dіv 2 DOBegіn P:=m[2*і-1]; M[2*і-1]=M[2*і]; M[2*і]=P;End;

Массивтің жұп және тақ орындарда тұрған элементтерінің орнын ауыстыру

FOR І := 1 TO N DOBegіn M[2*і-1]=A[і]; M[2*і]=B[і];End;

Екі массивті біріктіру,элементтерді кезекпен алу

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

Алгоритмдер Түсініктеме

FOR І := 1 TO N DOBegіn FOR J := 1 TO M DO A[і,j]:=Random(a+b)-a;End;

Матрицаны кездейсоқ сандармен толтыру

FOR І := 1 TO N DOBegіn FOR J := 1 TO M DO Wrіte(A[і,j]:3,’’); Wrіteln;End;

Матрицаны кесте түрінде шығару

FOR І := 1 TO N DOBegіn FOR J := 1 TO M DO S[і,j]:=A[і,j]+B[і,j]; End;

Матрицаларды қосу

77

FOR І := 1 TO N DOBegіn FOR J := 1 TO M DO Begіn P:=0; FOR h:= 1 TO k DO P:=P+A[і,h]*b[h,j]; S[і,j]:=P; End;End;

Матрицаларды көбейту

FOR І := 1 TO N DOBegіn FOR J := 1 TO M DO Begіn P:=A[і,j]; A[і,j]:=B[і,j]; B[і,j]:=P; End;End;

Матрицаны транспонирлеу (берілген матрицаның жолдары шығарылатын марицаның бағаналарына сәйкестіріледі. Бас диагональдағы элементтер қозғалмайды)

Есептер1. Массивтің оң элементтерінің қосындысын табу.2. Массивтің жұп элементтерінің қосындысын табу (немесе

берілген санға есе мүшелер қосындысын).3. Массивтің жұп индексті, жұп элементтерінің қосындысын

табу4. Массивтің бірінші бес элементтерінің қосындысын табу.5. K1-ден k2-ге дейін элементтерінің қосындысын табу, мұнда

K1 және k2 клавиатурадан енгізіледі. Олардың енгізу дұрыстығын тексеру керек.

6. Берілген А санынан үлкен элементтердің қосындысын табу. (А-саны клавиатурадан енгізіледі).

7. А-дан В-ға дейін аралыққа жататын элементтердің қосындысын табу. (А мен В клавиатурадан енгізіледі).

Ескерту: 1-7 есептерде көбейтіндіні де табуға болады.8. Барлық элементтері әр түрлі болған жағдайда, массивтің ең

үлкен мүшесін және оның нөмірін табу.9. Барлық теріс элементтерінің нөмірлерін тауып, экранға

шығару, егер ондай жоқ болса, сондай хабарлама шығару.10. Ең үлкен мәнді элементтерінің нөмірлерін табу.11. Ең кіші мәнді элементті табу.

78

12. Тақ элементтердің санын есептеу.13. Теріс элементтердің санын есептеу.14. Берілген А санынан массивтің неше элементі, модулі

бойынша үлкен?15. 3-ке және 5-ке еселі барлық элементтерін табу. Олар

нешеу?16. Берілген массивте көршілес екі оң элементтер бар ма?

Бірінші (соңғы) жұп элементтердің нөмірлерін табу.17. Берілген санға тең элемент бар ма? Егер бар болса, онда

біреуінің нөмірін шығару.18. Бес бүтін сандар арасынан жұп сандардың санын табу

(массивті пайдаланбай).19. Модулі бойынша ең үлкен элементтің таңбасын ауыстыру.20. Барлық жұп элементтерді өзінің квадраттарымен ауыстыру,

ал тақ мүшелерді екі еселеу.21. Оң мүшелерден, k1 нөмірлі элементті алу, ал теріс

элементтерге, k2 нөмірлі элементті қосу, нөлге тең элементтерді өзгеріссіз қалтыру.

22. Екі массив берілген. Әр массивтің элементтерінің арифметикалық орташасын табу және оларды салыстыру.

23. Матрицаның әр жолындағы теріс элементтерінің санын есептеу.

24. Матрицаның ең үлкен элементін және оның нөмірін табу.25. Екі А және В квадрат матрицаларының көбейтіндісін

есептеу.Символдық массивтерМүшелері символдық (Char) типтен тұратын бір өлшемді

массивтерді символдық массив немесе символдық жол дейді. Жазылу үлгісіне мысалдар:

VARS: array[1..13] of char;S2:=’жол мысалы’;

Паскаль тілінде символдық массивтермен жұмыс жасайтын қосымша мүмкіндіктер бар.

Конкатенация амалыСимволдық жолдарды бір-біріне тіркестіру, басқаша айтқанда

қосу амалы -деп аталады. Қосу таңбасы (+) амалдың белгісі болады.Мысалы, төмендегідей сипаттама бөлімі бар болсын:Var

S1: array[1..5] of char;S2: array[1..6] of char;

79

онда келесі амалдар орынды болады:S1:=’жолды’;S2:=’массив’;Wrіteln(S1+’ ‘+S2);

Сонда, осы программа үзіндісінің орындалу нәтижесінде экранға “жолды массив” деген хабарлама шығады:

Ескертулер: 1. Жолды меншіктеу кезінде,жол ұзұндығы мен массив өлшемі

бірдей болу керек.2. Символдық массивтер үшін, меншіктеу операторының оң

жағында конкатенация амалын орындауға болмайды.Егер S:=S1+’ ‘+S2 -деп жазылған болса,S символдық массивтің

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

Іріктеу алгоритмдеріІріктеу – белгіленген ережелерге сәйкес, жиынның

элементтерін топтарға бөлу, өспелі немесе кему реттерімен орналастыру.

«Қалқу» әдісімен іріктеуЕсеп: Элементтерінің саны онға тең, бүтін типті бір өлшемді

массив берілген. «Қалқу» әдісін қолданып өспелі түрде іріктеу программасын

құру керек. Массив [0,100] аралығынан кездейсоқ сандармен толтырылады.

Шешімі: бұл әдістің идеясын оның аты аңғартады. Ең «жеңіл» элементтер жоғары «қалқиды», ал ең «ауыр» элементтер – «батады».

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

Қалған N-1 іріктелмеген элементтер үшін осы операцияны қайталаймыз.

Program Buble;Uses crt; {экранның модулін қосу}

const lens=10; {массивтің элементтер саны}diap=100; {мәндер диапазоны}

VarA : array[1..lens] of integer; {А бүтін типті массиві}mit : integer; {ауыстыруға арналған айнымалы}i, j : integer; {циклдік айнымалылар}

80

beginclrscr; {экранды тазалау}randomize; {кездейсоқ сандарды инициализациялау}for i:=1 to lens do {массивті толтыру}

A[i] := random(diap);for i:=1 to lens do {массивті шығару}

write(A[i], ‘ ’);writeln;

for i:= lens-1 downto 1 do {орнын ауыстыру циклы}beginj := i;while (j < lens) AND (a[j] > a[j+1]) do {«қалқу» циклы}

beginif a[j] > a[j+1] then {егер, оң жағында кіші болса,}

beginmit := a[j];a[j] := a[j+1]); {онда «қалқып шығады»,}a[j+1]) := mit; {элеметтердің орны ауысады}end;

j:= j + 1;end;

end;for i:=1 to lens do {іріктелген массивті шығару}write(A[i], ‘ ’);readln;end.Программаның орындалу нәтижесі:2 96 71 46 32 35 10 64 0 150 2 10 15 32 35 46 64 71 96Сызықты іріктеу әдісіЕсеп: Элементтерінің саны онға тең, бүтін типті бір өлшемді

массив берілген. Сызықты іріктеу әдісін қолданып өспелі түрде іріктеу

программасын құру керек. Массив [0,100] аралығынан кездейсоқ сандармен толтырылады.

Шешімі: Массивтің әр элементін, бірінші элементпен салыстыра отырып, ең кіші элементті іздейміз. Егер ондай элемент табылса, онда оны бірінші элементпен орнын ауыстырамыз. Осы операцияны қайталаймыз, бірақ енді салыстыруды екінші элементтен бастаймыз, т.с.с.

Program Perebor;

81

Uses crt; {экранның модулін қосу}const lens=10; {массивтің элементтер саны}diap=100; {мәндер диапазоны}

VarA : array[1..lens] of integer; {А бүтін типті массиві}mit : integer; {ауыстыруға арналған айнымалы}i, j : integer; {циклдік айнымалылар}min : integer; {ең кіші элемент}el : integer; {ең кіші элементтің индексі}BEGINclrscr; {экранды тазалау}randomize; {кездейсоқ сандарды инициализациялау}for i:=1 to lens do {массивті толтыру}

A[i] := random(diap);for i:=1 to lens do {массивті шығару}

write(A[i], ‘ ’);writeln;

for i:= 1 to lens – 1 do {орнын ауыстыру циклы}begin

min:= a[i];el := i;for j:= i+1 to lens do {ең кіші элементті іздеу}if a[j] < min then

beginmin := a[j];el := j;end;

mit := a[j]; {ең кіші элемент өз орнына}a[i] := min; {қойылады}a[el] := mit;

end;for i:=1 to lens do {іріктелген массивті шығару}write(A[i], ‘ ’);readln;END.Программаның орындалу нәтижесі:55 58 58 2 22 80 56 70 39 772 22 39 55 56 58 58 70 77 80Ұсақтап бөлу арқылы тез іріктеу әдісіЖоғарыдағы қарастырылған әдістер қарапайым және қөрнекі

болғанымен, жылдамдығы жағынан онша тиімді емес.

82

«Ұсақтап бөлу арқылы іріктеу» деп аталатын, К. Хоордың іріктеу алгортимі көп жағдайда тез жұмыс жасайды.

Алгоритмнің негізіне, массивті тізбекпен ұсақтап бөлу әдісі қолданылады. Осы әдісті іске асырған прорамманың мысалын талдайық.

Program Quck_sort; {ұсақтап бөлу әдісімен өсірілмей іріктеу }Uses Crt;Const Count = 20;M : aarray [1..Count] of

Byte = (9,11,12,3,19,1,5,17,10,18,3, 19, 17, 9, 12, 20, 20, 19, 2, 5);Var

I, A : integer;Procedure QuickS(First, Last : integer);

Var I, J, X, W,L : integer;Begin

I := First; {массивтің сол жақ шекарасы–1-ші элемент}J := Last; {массивтің оң жақ шекарасы–соңғы

элемент }X := M[(First + Last) div 2]; {массивтің ортасын табу}RepeatWhile M[I] > X do I := I +1;While X > M[J] do J := J +1;A:+A +1; {эл-ң алмасу итерациясының санын өсіреді}If I <+ J thenBegin {элементтердің орнын ауыстыру}

W :=M[i];M [I] := M[J];M[J] := W;I := I+1;J := J+1;

{әр алмасудан кейін массивтің ағымдық жағдайын шығару}for L := 1 to Count do Write(‘ ‘, M[L]); Writeln(‘Число итераций =’,A);End;Until I > J;

If First < J then QuickS(First, J); {QuickS процедуранын рекурсивті шақыру}

If Last < J then QuickS(I, Last); {QuickS процедуранын рекурсивті шақыру}

End; {іріктеудің аяғы}

83

Begin {негізгі программаның басы}ClrScr;Writeln(‘Исходный массив:’); Writeln;For I := 1 to Count do Write (M[I] :3, ‘ ‘);Writeln;A := 0; QuickS (1,Count); {QuickS процедуранын шақыру }Writeln(‘Отсортированный масив:’); Writeln;For I := 1 to Count do Write (M[I] :3, ‘ ‘);Writeln;

End.QuickS процедурасы бірінші шақырылғаннан кейін берілген

массивтің:9 11 12 3 19 1 5 17 10 18 3 19 17 9 12 20 20 19 2 5ортасы анықталып (10-шы элемент), X айнымалысына М[10]-ң

мәні, яғни 18 меншіктеледі. Осыдан кейін массив екіге бөлінеді:19 11 12 3 19 1 5 17 10 18 және 3 19 17 9 12 20 20 9 2 5 Ары қарай алмасу мына ережемен орындалады:Массивтің сол жақ бөлігіндегі элементтерді солдан оңға қарап,

М[І] >Х элементі ізделінеді, одан кейін оң жақтағы бөлімін солдан оңға қарап М[І]< Х элементі ізделеді.

Массивтің ортасынан сол жақтағы М[І]>Х және оң жақтағы М[І]<Х шарттары орындалып болғанша элементтері алмасады.

Нәтижесінде екі бөлімнен тұратын массивтің мына түрін аламыз:

9 11 12 3 19 1 5 17 10 18 3 19 17 9 12 20 20 19 2 5 Число итераций = 119 20 12 3 19 1 5 17 10 18 3 19 17 9 12 20 11 9 2 5 Число итераций = 219 20 20 3 19 1 5 17 10 18 3 19 17 9 12 12 11 9 2 5 Число итераций = 319 20 20 19 19 1 5 17 10 18 3 3 17 9 12 12 11 9 2 5 Число итераций = 419 20 20 19 19 18 5 17 10 1 3 3 17 9 12 12 11 9 2 5 Число итераций = 5Ары қарай рекурсивті сол жақ екіге бөлініп (1-ші элементтен

6-ға дейін), сол жақтың элементтерін іріктеуге процедура шақырылады:

20 20 19 19 19 18 5 17 10 1 3 3 17 9 12 12 11 9 2 5 Число итераций = 720 20 19 19 19 18 5 17 10 1 3 3 17 9 12 12 11 9 2 5 Число итераций = 8Сол жақ іріктеліп болғаннан кейін, тағыда рекурсивті

процедура шақырылып тағы осы бөлігінің ортасы анықталады да элементтердің алмасуы орындалады: Массивтің түрі мынадай болады:

20 20 19 19 19 18 5 17 10 1 3 3 17 9 12 12 11 9 2 5 Число итераций = 920 20 19 19 19 18 5 17 10 1 3 3 17 9 12 12 11 9 2 5 Число итераций = 10

84

Сол жақтың әр бөлшектерінде бір-бір элемент қалғанша рекурсивті процедура шақырылып іріктелу орындалады.

Одан кейін сол сияқты оң жақтың элементтерін (7-ден 13-шіге дейін) іріктеуге тағы рекурсивті процедура шақырылады.

Массивтің нәтижесінің кезеңдерінің тізбекпен шыққан нәтижесінің бейнеленуі:

20 20 19 19 19 18 5 17 10 1 3 3 17 9 12 12 11 9 2 5 Число итераций = 1120 20 19 19 19 18 17 17 10 1 3 3 5 9 12 12 11 9 2 5 Число итераций = 1220 20 19 19 19 18 17 17 10 1 3 3 5 9 12 12 11 9 2 5 Число итераций = 1320 20 19 19 19 18 17 17 10 9 3 3 5 9 12 12 11 1 2 5 Число итераций = 1420 20 19 19 19 18 17 17 10 9 11 3 5 9 12 12 3 1 2 5 Число итераций = 1520 20 19 19 19 18 17 17 10 9 11 12 5 9 12 3 3 1 2 5 Число итераций = 1620 20 19 19 19 18 17 17 10 9 11 12 12 9 5 3 3 1 2 5 Число итераций = 1720 20 19 19 19 18 17 17 10 9 11 12 12 9 5 3 3 1 2 5 Число итераций = 1820 20 19 19 19 18 17 17 12 9 11 12 10 9 5 3 3 1 2 5 Число итераций = 1920 20 19 19 19 18 17 17 12 12 11 9 10 9 5 3 3 1 2 5 Число итераций = 2020 20 19 19 19 18 17 17 12 12 11 9 10 9 5 3 3 1 2 5 Число итераций = 2120 20 19 19 19 18 17 17 12 12 11 9 10 9 5 3 3 1 2 5 Число итерадий = 2220 20 19 19 19 18 17 17 12 12 11 10 9 9 5 3 3 1 2 5 Число итераций = 2320 20 19 19 19 18 17 17 12 12 11 10 9 9 5 5 3 1 2 3 Число итераций = 2420 20 19 19 19 18 17 17 12 12 11 10 9 9 5 5 3 1 2 3 Число итераций = 2520 20 19 19 19 18 17 17 12 12 11 10 9 9 5 5 3 1 2 3 Число итераций = 2620 20 19 19 19 18 17 17 12 12 11 10 9 9 5 5 3 3 2 1 Число итераций = 27Берілген массивтің элементтері өсірілмей іріктелуі 27

итерацияда орындалғандығын, соңғы А-ң мәнінен көреміз.

85

3.3. ЖИЫНДАРТипті сипаттауЖиын – белгілі бір қасиеттерге сай іріктеліп, біртүтас

қарастырылатын жүйелі типті мәліметтер тобы. Жиындағы әр мәлімет жиынның элементтері деп аталады.

Жиын элементтерінің типі (базалық тип) нақты типтен басқа, жай типтердің біріне жатуы тиіс.

Жиын элементтерінің типі жиынның базалық типі деп қарастырылады. Базалық тип аралықпен немесе дараланып беріледі.

Паскаль тілінде өрнектерде жиынның элементтері тік жақшаларға алынып жазылады: [‘a’, ‘b’, ‘c’], [1, 2, 3, 4], [‘a’..’z’].

Егер жиында еш бір элемент болмаса, ондай жиын бос жиын болада да, былай [] белгіленеді.

Жиынның элементтерінің саны оның қуаттылығы деп аталады.Жиынның типін сипаттау үшін set, of қызметші сөздері

қолданылады.Жазылыуы:Type <типтің есімі> = set of <элемент1, ... , элемент n >;

Var <идентификатор, ...> :< типтің есімі>; НемесеVar < идентификатор, ...> : set of < элемент1, ...>; М ы с а л. Type

Simply = set of ‘a’..’h’;Number = set of 1..31;

VarPr : Simply;N : Number;

Letter:set of char; {типтер тарауында жарияланбай сипатталған} Мұнда: Pr айнымалысы ‘a’ –дан ’h’ дейін латын алфавитінің символдарын;

N айнымалысы 1..31 диапозон аралығынан кез келген мәнді; Letter кез келген символды қабылдайды.

Оларға сипаттауларына көрсетілген жиындарға кірмейтін элементтерден тұратын жиынды меншіктеу қателік тудырады. Жиынның элементтер саны 255–тен аспауы керек. Жиынның бір элементі бір байт орын алады.

Жиындарға қолданылатын амалдарПаскальда жиындарға нәтижесі True немесе False болатын

қатынас ‘=’, ‘<>’, ‘>=’, ‘<=’ және ‘ішінде’ (in) амалдары қолданылады.

86

Сонымен қатар жиындарға біріктіру (+), қию (*), айыру (-) амалдары жүреді.

‘Теңдік’ (=) амалыЕгер екі А және В жиындарының элементтері бірдей болса, онда

ол жиындар тең деп есептеледі. Элементтердің орналасу реті әр тұрлі болуы мүмкін.

Мысалы:А-ның мәні В-ның мәні Өрнек Нәтиже[1,2,3,4] [1,2,3,4] A = B True[‘a’, ‘b’, ‘c’] [‘c’, ‘a’] A = B False[‘a’..’z’] [‘z’..’a’] A = B True

‘Теңдік емес’ (<>) амалыЕгер екі А және В жиындарының ең болмағанда бір элементі

өзгеше немесе қуаттылықтары әр түрлі болса, онда ол жиындар тең емес деп есептеледі.

Мысалы:А-ның мәні В-ның мәні Өрнек Нәтиже[1,2,3] [1,2,3,4] A <> B True[‘a’..’z’] [‘b’, ‘z’] A <> B True[‘c’..’t’] [‘t’..’c’] A <> B True

‘Үлкен немесе тең’ (>=) амалыA >= B амалының нәтижесі ақиқат (True), егер B жиынының

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

Мысалы:А-ның мәні В-ның мәні Өрнек Нәтиже[1,2,3,4] [2,3,4] A >= B True[‘a’..’z’] [‘b’..‘t’] A >= B True[‘z’, ‘x’, ‘c’] [‘c’,’x’] A >=B True

‘Кіші немесе тең’ (<=) амалыA <= B амалының нәтижесі ақиқат (True), егер A жиынының

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

Мысалы:А-ның мәні В-ның мәні Өрнек Нәтиже[1,2,3] [1,2,3,4] A <= B True[‘d’..’h’] [‘z’..‘a’] A <= B True[‘a’, ‘v’] [‘a’,’n’,‘v’] A <=B True

87

‘Ішінде’ (in) амалыБұл амал қандайда бір шаманың көрселілген жиында

кездесетіндігін анықтайды. Егер кездессе нәтижесі ақиқат (True), әйтпесе жалған (False) болады. Әдетте, бұл амал шартты операторларда пайдалынылады.

Мысалы:А-ның мәні Өрнек Нәтиже2 If A in [1,2,3] then … True‘v’ If A in [‘a’..’n’] then … FalseX1 If A in [X0, X1, X2, X3] then … True

‘Ішінде’ (in) амалын қолданғанда, тексерілетін шама және тік жақшаға алынған жиын, алдын ала сипатталмаса да болады.

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

Мысалы, мына оператордағы шартты if (a-1) or (a=2) or (a=3) or (a=4) or (a=5) or (a=6) then … былайша if a in [1..6] then… жазуға болады.

Кейде ‘Ішінде’ амалын NOT амалымен қосып былай жазады: X NOT in M , бірақ мұндай жазу қате, себебі екі амал қатар тұр.

Дұрыс жазылу ережесі мына түрде болады: NOT (X in M)‘Біріктіру’ (+) амалыЕкі жиынның қосындысы осы жиындардың элементтерінен

тұратын үшінші жиын болып табылады.Мысалы:А-ның мәні В-ның мәні Өрнек Нәтиже[1,2,3] [1,4,5] A + B [1,2,3,4,5][‘A’..’D’] [‘E’..‘Z’] A + B [‘A’..’ Z’][] [] A + B []

‘Қию’ (*) амалыЕкі жиынның қиюы – осы екі жиында да кездесетін

элементтерден тұратын үшінші жиын.Мысалы:А-ның мәні В-ның мәні Өрнек Нәтиже[1,2,3] [1,4,2,5] A * B [1,2][‘A’..’Z’] [‘B’..‘R’] A * B [‘B’..‘R’][] [] A *B []

‘Айыру’ (-) амалыЕкі жиынның айырымы – екінші жиында кездеспейтін бірінші

жиынның элементтерінен тұратын үшінші жиын.

88

Мысалы:А-ның мәні В-ның мәні Өрнек Нәтиже[1,2,3,4] [3,4,1] A – B [2][‘A’..’Z’] [‘D’..‘Z’] A – B [‘A’..‘C’][X1,X2,X3,X4] [X4,X1] A – B [X2,X3]Екі жиынға қолданылатын амалдардың нәтижесін екі

төртбұрыштың бөліктерін бояу арқылы, көрнекті түрде көрсетуге болады.

1-ші есеп: Латын әріптерінен тұратын, нүктемен аяқталатын тізбекте а, е, с, һ әріптері нөше рет кездесетінін табатын программа қүрайық.

Program Upr1;Vаг N : integer;

S : string;Begin

Read(S); N:=0; i:=1; While S[i]<> ‘.’ DoBegin {кезекті символдың осы жиында жатқанын тексереді}

If S[i] in [a, e, c, h] then N:= N+1;I := i+1;

End;Write(N);End.2-ші есеп: 100 натурал санына дейінгі барлық жай сандарды

табуға арналған программа құрайық.Бұл программаны Эратосфен торы деп аталатын алгоритмді

пайдаланып қүрайық. 2-ден-100-ге дейінгі бүтін сандарды ретімен жазамыз. Бірінші

жай сан 2, оны қалдырып, оған еселі сандарды алып тастаймыз. Қалған сандардың біріншісі 3, ол жай caн, оны да қалдырамыз және енді 3-ке еселі сандарды алып тастаймыз, 4 саны алынып қалғандықтан, қалған сандардың біріншісі 5, ол жай сан, оны да қалдырып, 5-ке еселі сандарды алып тастаймыз т.с.с..

Program Upr2;Const N=100;

Type SETT = Set of 2..N;Var N, Nl, N2 : integer; S, P : SETT;

89

Біріктіру Қию Айыру

Begin S:=[2..N]]; P:=[1]; N2:=2;While S <> [] Do {S – жиыны босағанша қайталаймыз}BeginN1 := N2;{S-тен кезекті жай санға еселі сандарды алып

тастау}While N1<= N DoBegin S:= S- [N1]; N1 := N1+N2;End;

P :=P+[N2]; {P жийынына жай сандарды жинақтау}

Repeat {Кезекті жай санды анықтау}N2 =N2+1; Until (N2 in S) or (N2>N)

End;for N1 :=1 to N do {жай сандарды экранға шығару}If N1 in P then Write (N1);End.Бақылау сұрақтары1. Паскальда жиын қалай беріледі?2. Жиынның базалық типі қандай тип бола алады?3. Жиынның программалауда алатын орны қандай?4. Паскальда жиынның элементтер саны 256-дан аспау керек,

не себептен осы сан алынған?5. Қандай жиын бос деп аталады, қалай белгіленеді?6. ‘ішінде’ амалы не үшін қолданылады және қолдану

ерекшеліктері?Есептер1. M1(1..10) және M2(20..30 жиындарын сипаттаңыздар.2. Орыс және латын әріптерінен тұратын R және L жиындарын

сипаттаңыздар.3. А жиынының элементтер санын анықтайтын тиімді тәсіл

қарастырыңыз. Оған қандай қосымша деректер қажет?4. А жиынының элементтерінің базалық типі X, олар аралық

типпен берілген. Осы жиынның элементтер санын анықтайтын функция жазу керек.

5. Базалық тип X болатын А және В жиындары берілген. a) A+В, б) A–В, в) A*В жиындарының элементтер санын анықтайтын функцяя қүрыңыз.

90

6. Базалық типі белгілі және элементтері аралықпен берілген жиынның элементтерін шығаратьн процедура жазыңыз.

7. Ойыншы 1-ден 36-ға дейінгі кез келген алты санды атайды. Осы сандарды бір жийынға жинап, нәтижесін шығаратын процедура қүру керек. Ойыншы қателесіп бір санды қайта немесе аралықта жатпайтын сан атаса, процедура экранға сәйкес хабар берсін.

8. Cпортлото ойынының (1-ден 36-ға дейін) натижесін сараптайтын (неше сан дұрыс аталғанын табатын) программа жазыңыз:

а) ұтыс цифрларының жиыны алдын ала белгілі болсын;б) ұтыс цифрлары программада кездейсоқ анықталсын.9. Берілген жодда дауысты және дауыссыз дыбыстардаң

қайсысының саны көп екендігін анықтайтын программа жазыңыз.10. type at = (‘нан', 'сүт', 'май', 'ет', 'балық', 'тұз', 'ірімшік’,

‘шұжық’, ‘қант’, ‘шәй’);t = set of at;

dk = array [1..20] of t; типтері жарияланған; dk типті массивтегі мәліметтер бойынша:

а) барлық дүкенде бap; б) ең болмағанда бір дүкенде бар;в) еш дүкенде жоқ азық-түліктерді табатын программа жазу

керек.

91

3.4 ЖАЗБАЛАРТипті сипаттауАлдыңғы тарауларда тек бір типті компоненттерден тұратын

жүйелі типті мәліметтердің түрлерімен таныстық. Программалауда қандай да бір объектіге қатысты әр түрлі мәліметтерді жинақтап қарастыру жиі кездеседі. Ол үшін Паскальда жүйелі типті мәліметтердің басқа түрі – аралас типті мәліметтер қолданылады.

Жазба – деп компонентерінің саны бекітілген құрама немесе бір типті құрылымданған мәліметтерді айтады.

Мысалы, студенттер туралы мәліметтерді (аты, фамилиясы, туған жылы, мекен-жайы т.б.) бір топқа біріктіріп, жазба түрінде қарастыруға болады.

Жазба компоненттерін өріс деп атайды. Жазбаны сипаттау Record қызметші сөзінен басталып, End қызметші сөзімен аяқталады, араларына өрістерінің идентификаторлары мен типтері келтіріледі .

Жазылуы:Type <типтің аты> = Record<1-өрістің идентификаторы > : <1-ші өрістің типі >;<2-өрістің идентификаторы > : <2-ші өрістің типі >;

. . .End;Var <жазбалардың атаулары> : <типтің аты>;Мысалы:Type T = Record

N : integer; {реті}FIO : string[20]; {аты-жөні}GodR : string[40]; {туған жылы}Gr : string[60]; {тобы}End;

VarStudent, U : T;

Мұнда Student және U айнымалылары T типті төрт өрістен: N (реті), FIO (аты-жөні), GodR (туған жылы), Gr (тобы) тұратын жазбалар.

Жазбаны тұтасымен типі сәйкес келетін басқа жазбаға меншіктеуге болады, мысалы U := Student.

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

Мысалы: Student жазбасының өрістеріне өту былайша жазылады: Student.N, Student.FIO, Student. GodR, Student.T.

92

Бір студент туралы мәліметтерді экранға шығаратын программа үзіндісін көрсетейік:

...Student, N := 1;Student. FIO := ‘Оспанов. Р.А’;Student. GodR:= ’05.11.72’;Student. Gr:= 21;Write(Student.N:3, Student. FIO:15, Student. GodR:9, Student.

Gr:3);...Бул мысалда өріc санына сәйкәс Student идентификаторын

бірнеше рет жазуға мәжбүр болдық. Осы ыңғайсыздықтан құтылу үшін Паскальда арнайы With операторы колданылады.

Жазылуы: With <жазба тіпті айнымалы> Do <оператор>;Жазба тіпті айнымалы With операторында бір рет көрсетіледі де

осы операторға кіретін басқа операторларда қайталанбайды, тек қажетінше өрістері ғана көрсетіледі. Жоғарыдағы мысалды With операторының көмегімен жазайық.

With Student do Begin N := 1;

FIO := ‘Оспанов. Р.А’;GodR:= ’05.11.72’;Gr:= 21;

Write(N:3, FIO:15, GodR:9, Gr:3);End;Паскальда жазбалар массивтердің элементтері бола алады. 30

студенттің аты-жөнінен (FIO) тұратын массивтің сипатталуы: Type T = RecordN : integer; FlO : string[20];End;Var Тizm : Array[l..30] of T;1-ші есеп: Студенттер туралы мәліметтерді массив етіп,

компьютер жадана жазып, кесте түрінде экранға шығаратын программа жазайық.

Program MStud1;Type T = Record

N: integer;FIO : string [20];GodR : string [10];

93

Gr : integer;End;Var n, i :integer; Tab : array[l..40] of T; {Tab – жазбалар массивы}

BeginWrlte (‘Число студентов = ’); Readln (N); For i := 1 to n do With Tab[i] doBeginWrite (‘№ п.п’); Readln(N); Write (‘Ф И О’); Readln(FIO); Write (‘Год рождения’); Readln(GodR); Write (‘Группа’); Readln(Gr);End;

for i:= 1 to n do Begin

With Tab[i] doWriteln (‘|’, N:4, ‘|’, FIO:15, ‘|’, GogR:10, ‘|’, Gr:4, ‘|’, );End;

ReadlnEnd.Сатылы жазбаларПаскальда жазбалар сатылап та орналаса алады, яғни жазбаның

кейбір өрістері жазба және олардың өрістерінің қайбірі тағы да жазба т.с.с. болуы мүмкін. Айталық, жоғарыда келтірілген Student жазбасының FIO өрісі үш өрістен (фамилиясы (F), аты (І), әкесінің аты (О), T өрісі екі өрістен мамандыгы (S), тобы (Gr)) тұратын жазбалар болсын, Онда Student жазбасын былайша сипатталады:

Var Student: RecordN: integer; FIO: RecordF: string[20]; I: string[20];O: string[20];End;GodR: string[10];

T: RecordS: string[20]; Gr: integer[3]; End

End;

94

Student жазбасын схема түрінде келтірейік:

Ескерту: Паскаль жүйесі қазақ шрифтін қолдамайтындықтан, өріс аттары орысша берілді.

Жазбалардың кейбір өрістері массивтер де болуы мүмкін. Мысалы, студенттердің сессияда алған бағалары туралы мәліміттер үш бөліктен тұрсын: аты-жөні (FIO) – String [20]; бағалары –төрт элементтен тұратын массив O – array[1..4]; орта бағасы SO – Real типті.

Осы мәліметтер жүйесін схема түрінде көрсетейік:

Жүйеге сәйкес жазба (Sesst) төмендегідей сиппаталады:Var

Sesst RecordN integer;`FIO: string[20];O: array[1..4] of integer;SO: real;…

2-ші есеп: Бір топ студенттердің сессиядағы бағаларын компьютерге жазып, кесте түрінде экранға шығаратын программа жазалық.

Program Sess;Type Sesst = Record

N: integer FIO: string[20]; O: array[1..4] of integer;SO: real;

95

Студент (Student)

№ п.п (N) Ф И О (FIO) Год рожд. (GodR) Группа (T)

Имя (I) Фамилия (F) Отчество (O) Специальность(S) Группа (Gr)

Студент (Student)

№ п.п (N) Ф И О (FIO) Оценки (O) Группа (T)

Оценка1(O(1)) Оценка2(O(2)) Оценка3(O(3)) Оценка4(O(4))

Средняя оц. (SO)

End; Vаг n, i,j : integer;

Tab : array[l..30] of Sesst; {Tab – жазбалар массивы}Begin

Wrlte (‘Сколько студентов’); Readln (N); For i:=1 to n do

With Tab[i] do Begin SO := 0;Write (‘Номер ’); Readln(N);Write (‘ФИО ’ ); Readln(FIO);For j := 1 to 4 do

BeginWrite (‘оценка предмета ’, j);Readln (O[j]);SO:= SO + O[j];End; SO:= SO/4;

End; for i:= to n do

With Tab[i] do BeginWrite (‘|’, N:4, ‘|’, FIO:20, ‘|’ );For j:= 1 to 4 do Write(O[j]:2);Writeln (‘|’, SO:4,’ | ’);End;

ReadlnEnd.Бақылау сұрақтары1. Жазбаны құрама типті деректер деудің себебі қандай? 2. Жазбаның массивтен негізгі өзгешеліктері қандай?3. Жазбаның өрісі деген не?4. Өрістердің мәндерін қалай падаланамыз?5. Өрістердің идентификаторы қай аралықта қайталанбау

керек?6. With операторы не үшін қажет?Есептер1. Келесі жазбалардың схемасын сызып, Паскальда анықтаңыз.

Әр жазбада неше өріс бар екендігін табыңыз:

96

1) кішігірім кітапханада әрқайсысының саны 10-нан аспайтын әдеби және техникалық кітаптар бар. Каталогта әр кітаптың аты, авторы, индексі, шығарылған уақыты және беттерінің саны берілген;

2) қандай да бір клубтың 30 мүшесі бар, әркайсысының аты-жұні, мүшелік реті және саны бестен аспайтын, айналысатын қызығу-шылықтары атымен жане оған деген ынта көрсеткішімен берілген.

2. Баспаға жазылушылар туралы мәлімет төмендегі Gazh жазбасында келтірілген, мұнда: FIO – аты-жөні, Add – мекен-жайы, Index – индексі, Naz: – жазылымның аты, dGazh – жазылу мерзімі. Осы жазбаның схемасын сызыңыз.

Type F = RecordF : string [10] I : string [10] O : string [10]end; . ,Data = Recordd1: string[8] d2 : string[8] . end;

Var Gazh = RecordFIO : F; Add : string[20];Index : string[8];Naz : string [30]; dGazh : data;

End.1) төмендегі мәліметтерді Gazh жазбасына енгізетін программа

үзіндісін жазыңыз: 480011, Павлодар улица Абая 81/45025395, Жалын, 01.01.05 – 30.06.052) а пунктіндегі анықталған типтердің бәрін Type тарауында

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

3) программаны 50-ден аспайтын жазылушылардың мәліметте-рін өңдей алатындай етіп жазбаны өзгертіңіз.

3. Келесі есептерде мәліметтерді ыңғайлы түрде дайындау тәсілдерін (массив, жазба, т.б.) ұсыныңыз:

1) саны белгілі бүтін сандардың арифметикалық ортасын табу керек;

2) 50 заттың тізімі берілген, осы тізімде қайталанған заттар бар ма?

97

3) фирма кызметкерлеріне жалақы беру тізімін жасау керек. Тізімде келесі мәліметтер көрсетілсін: аты-жөні, мекен-жайы, жылдық кіpic, балалар саны;

4) бес емтихан нәтижесі бойынша студенттер тізімін қүру керек;

5) бір студенттің орта бағасын табу керек;6) компьютер жадына бір студенттің аты-жөнін, бағаларын

және орта бағасын енгізу керек;7) жоғарыдағыдай 50 студенттің мәліметтерін еңгізу керек;4. Жоғарыдағы 2-ші жаттығуда көрсетілген жазбалар массивін

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

1) жазушылар туралы мәліметтерді оқу және экранға шығару;2) почталық индексі бойынша жазылушыларды анықтау;3) жазылу мерзімі берілген уақытта аяқталатын жазушыларды

табу;5. Әр жолаушының жүгіндегі заттардың саны жалпы салмағы

белгілі. Жолаушылардың жүктері туралы мәліметтерді массивке жазып, сол массивтің көмегімен төмендегі есептерді шығарыңыз:

1) Әр затының opта салмағы мен заттардың жалпы орта салмағы арасындығы айырмашылық 0,3 килограммнан аспайтын жүкті табу керек;

2) жүктері екі заттан артық жолаушыларды және заттардың саны, заттардың жалпы орта санынан артық болатын жолаушыларды табыңыз;

3) заттар саны бірдей және жүктерінің салмақтарының айырымы 0,5 кг. аспайтын жолаушыларды табыңыз;

4) жүгінің заттар саны мен салмағы басқа жолаушылардың жүктерінің заттар саны мен салмағынан артық болатын жолаушыны анықтаңыз;

5) салмағы 30 кг. аспайтын бір заты бар жолаушыны анықтаңыз;

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

6. Экспортқа жіберілетін заттардың аттары, қай елге және қанша дана жіберілетіні туралы мәліметтерді массивке жазыңыз. Заттардың қай елдерге жіберілгендігін және барлығы қанша екендігін табу керек.

7. Коэффициенттері комплекс сандар болатын квадраттық теңдеудің түбірлерін табатын программа құрыңыз.

98

3.5. ФАЙЛДАРФайл деп – сыртқы сақтау қүрылғысында белгілі бір атпен

жазылған информацияны айтады. Кез келген файлдың үш айырықша ерешеліктері бар.

Біріншіден, файлдың аты болғандықтан, программа бір уақытта бірнеше файлдармен жұмыс жасай алады.

Екіншіден, файл бір типті элементтер тізбегінен тұрады. Турбо Паскальда файл элементтері кез келген типі болуы мүмкін (файлдық типтен басқа).

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

Файлдық типтер және айнымалыларФайлдық типті мына үш әдістің біреуімен беруге болады:< аты> = File of <типі>; {типі анықталған файл}<аты > = TEXT; {текстік файл}< аты > = File; {типі анықталмаған файл}мұндағы: <аты > – файлдық типті (дұрыс идентификатор); File, of қызметші сөздер (файл, одан (из));<типі> – Турбо Паскальдің кез келген типі (файлдардан басқа). TEXT – стандартты типті текстік файлдардың аты;Файлдық типтердің синтаксистық диаграммасы мынадай:

Файлдың программада Var бөлімінде сипатталу форматыVar

<идентификатор> : file of <элементтердің негіздік типі>;МысалыVar

F1 : file of Ineger; {F1- бүтін типті файл}M : file of Char; {M- символдық типті файл}

Файлдың программада Type бөлімінде сипатталу форматыType

<типтің аты > = file of <элементтердің негіздік типі>;Var

<идентификатор> : <типтің аты>;Мысалы Type

File_Integer = file of integer;File_Char = file of char;

Fm = array[1..n] of real;Var

99

file of типі

F1 : File_Integer; {F1файлының элементтері бүтін сандар}

F2 : File_Char; {F2 файлының элементтері символдар }F3 : Fm; {F3 файлының элементтері массивтер}

Ескерту: Төменгі мысалдарда <идентификатор> параметрі F –пен белгіленеді де файлдық айнымалы деп аталады.

Типі анықталған файлдардың элементтері ортақ атпен аталады, ал әр элемент жеке нөмірленеді. Бастапқы элемент 0-ден басталады.

Файлдардың элементтеріне өту файлдың көрсеткіші (буферлік айнымалы) арқылы жүзеге асырылады.

Әбір уақытта файлдың бір элементі ғана іске қосылады. Әр оқу немесе жазу нәтижесінде ағымды көрсеткіш келесі элементке жылжиды.

Оны графикалық түрде былай бейнелеуге болады:

Сол себепті оқу (жазу) процедураларында буферлік айнымалының мәні файлдың элементтері типтес басқа айнымалыға меншіктеледі.

Көбінесе файлдың элементтерін жазбалар (record) құрайды. Мысалы, студенттер туралы мәліметтерден: реті – N, аты-жөні – FIO, тобы – Gr тұратын файлдың сипаттауын келтірейік:

Type GF = file of recordN : integer;FIO : string[20];Gr : real;

End;Var Fstudent : GF;

Student : recordN : integer;FIO : string[20];Gr : real;

End;Жазбалардан тұратын файлды жоғарыда көретілгендей сипаттау

файлдың әр жазбасының мәнін қабылдауға қажетті айнымалыны жазба етіп қайта сипаттауды талап етеді. Сондықтан жазба файлдарын былайша сипаттау көрнекті де тиімді:

100

элемент 0 элемент 1 ... элемент k элемент k+1

Файл

көрсеткіш

Type GF = recordN : integer;FIO : string[20];Gr : real;

End;Var Fstudent : file of GF;

Student : GF;Мұңдағы Fstudent студенттер туралы мәліметтер жазылатын

файл, Student файдың жеке элементін пайдалану мүмкіндігін беретін жазба.

Сыртқы файлды программамен байланыстыру Программада пайдаланатын және жаңадан құрылатын

файлдардың дисідегі орнын анықтайтын, арнайы сыртқы атаулары міндетті түрде көрсетілуі тиіс.

Турбо Паскаль тілінде файлдық типті айнымалыны сыртқы магниттік дискіде орналасқан нақты файлмен байланыстыратын Assign процедурасы қолданылады.

Форматы: Assign(<F>, < Name >); мұндағы F – программада файлдық тип деп хабарланған,

файлдық айнымалының аты (дұрыс идентификатор);Name – файлдың толық атын, сыртқы құрылғыдағы орнын

көрсететін, текстік өрнек. Мысалы: Assign (F, ‘D:\mydir\myfile.doc’);бұл процедура орындалу нәтижесінде, файлдық айнымалы F,

түпкі каталог D дискісінде орналасқан myfile.doc файлымен байланыстырылады.

Ескерту: егер файл аты бос жол түрінде берілсе: Assign(<F>, <‘’>), онда мәліметтердің алмасу бағытына

байланысты, стантартты INPUT немесе OUTPUT файлдарымен байланысады.

Турбо Паскаль тілінде, файлды оқу үшін, жазу үшін, және де бір уақытта оқу және жазу үшін ашуды ұйымдастыруға болады.

Файлдан оқуФайлдан оқу деген дискіде жазылған, сыртқы файлдан

компьютердің жедел жадына деректерді енгізуді айтады.Программада файлдан оқуды ұйымдастыру үшін мына

процедура қолданылады:Reset (<F>); мұндағы F параметрі, кез келген типті, файлдық айнымалы;Файлды стандартты ашу мысалы:

101

Assign (F, ‘myfile.doc’);Reset (F);

Reset процедурасы орындалғанда дискідегі файл немесе логикалық диск, информацияны оқуға дайындалады. Нәтижесінде арнайы ағымдық көрсеткіш-айнымалысы, файлдың басына барып 0 элементін нұсқайды (схеманы қараңыз).

Егер жоқ файлды оқуға әрекет жасалса, онда операциялық жүйе қате туралы өзіне кірістірілген IORESULT функциясының 0-ге тең емес WORD типті мәнін программаға жібереді.

Мысалы, келесі програманың фрагменті, дискіде керекті файлдың бар немесе жоқ екенін анықтайды:

VarF : file of char;

BeginAssign (F,’myfile.dat’);{ŚI-} {Отключаем контроль ошибок ввода-вывода}Resey(F);{ŚI+} {Включаем контроль ошибок ввода-вывода}

If IOResult <> 0 then……. {Файл не существует}Else……. { Файл существует }End.Файлға жазуФайлға жазу деген жедел жадыдан программаның орындаған

нәтижесін дискіге шығаруды, яғни сыртқы құрылғыда жаңа файлды құруды айтады.

Программада файлды жазуды ұйымдастыру үшін мына процедура қолданылады:

Rewrite(<F>); Мұндағы, F файлдық айнымалы. Процедура орындылғанда F

айнымалысымен байланысқан файл ашылып, жазуға дайындалады. Мысал: Мәтіндік Work.txt атты файылын құруға арналған

толық командалар тізбегін жазайық:Var

F : text;Begin

Assign (F, ‘Work.txt ’);Rewrite(F);Write (F, ‘Простой текстовый файл’);

102

Close (F);End.

Файлды толықтыруБұрын жазылған текстік файлды ашып, толықтыру үшін

стандартты Append процедурасы қолданылады: Append (<F>); Процедура орындылғанда, ағымды көрсеткіш файлдың соңына

орналасып, текстік файлға жаңа жолдар қосу мүмкіндігін береді.Файлдардық процедуралар және функцияларClose (<F>) – процедурасы ашылған файлды жабады. Бірақ

процедура орындалғанда, Assign жасаған, файлдық айнымалымен сыртқы файл арасындағы байланыс жойымайды.

RENAME (<F>, <жаңа аты>) – процедурасы файлдың атын өзгертеді. Мұндағы <жаңа аты> – файлдың жаңа аты жазылған жолдық өрнек.

ERASE (<F>) – процедурасы жабылған файлды жояды. Eof(<F>) : Boolean – логикалық функциясы файлдың соңын

табады. Егер F файлының элементтері түгелімен оқылып, көрсеткіш файлдың соңында тұрса, фунцияның мәні True, әйтпесе False болады.

Төмендегі программа үзінділерінде файлдарға мәліметтер жазу және оқу жолдарын көрсетейік:

Rewrite(F); For i:= 1 to 100 doBegin j := sqr (F); Write (i,j) end;

мұнда алғашқы 100 натурал сандардың квадраттары F файлына жазылады;

Reset(F); s := 0; While not(eof) doBegin read (F,t); s :=sqrt(t) + s end;

мұнда циклдік оператор F файлының элементтерін біртіндеп оқып, олардың квадраттарының қосындысын көрсеткіш файлдың соңына шықанша есептейді.

1-ші есеп: Бірде де біреуі 0-ге тең емес бүтін сандар файлын Dan1.Dat атымен құрайық.

Шешімі: Ең алдымен Assign процедурасымен файлдық айнымалыны, нақты файлмен «байланыстырайық». Жазу үшін- Rewrite процедурасымен файлды ашамыз.

0-ді енгізу – сандарды енгізудің аяғы болады. Сондықтан программа мынадай түрде құрылуы мүмкін:

Program Examp_1;Var F: File Of Integer;

Begin

103

Assign(F, ‘a:dan1.dat’); {сыртқы файлмен байланыстыру}Rewrite(F); {жазу үшін файлды ашу }Writeln(‘конец ввода чисел-0’)Repeat {0 болғанға дейін }

Writeln(‘’)Readln(n); {санды клавиатурадан енгізу}{егер енгізілген сан 0-ге тең емес болса, онда оны F}{файлының сол жолына жазылады}If n <> 0 Then Wtite(F, n);Until n = 0; {егер 0 енгізілсе, файлға жазу}

{аяқталады}Close(F); {файлды жабу}

End.2-ші есеп: Студенттер туралы мәліметтерді файлға жазып, кесте

түрінде экранға беретін программа құру керек.Программаны мәліметтерді файлға жазу (Fwrite), файлдың

элементтерін оқып, өңдеу (Fread) процедураларын құрып, қажетінше біреуін таңдайтындай етіп жазайық.

Program Fstudent;Type G = Record

N: integer;FIO : string [20];Gr : real;

End;Var Fstudent : file of G; Student : G; i : integer;Procedure Fwrite; {файлға мәліметтер жазу прцедурасы-}

Begin {нан шығу шарты: R=9999}Rewrite (Fstudent);With Student doWhile true do Begin

Write (‘Номер ?’); Readln(N); If R=9999 Then Begin

Close(Fstudent); Exit End;

Write (‘Ф И О ?’); Readln(FIO);Write (‘Группа ?’); Readln(Gr);Write(Fstudent, Student)

End;Procedure Fread; {Файлдың элементтерін оқып}

104

Begin {экранға шығу процедурасы}Reset (Fstudent);With Student doWhile not Eof (Fstudent) do

BeginRead(Fstudent, Student); Write(N:4, FIO:20, Gr:4);

End;Close(Fstudent);End;BeginAssign(Fstudent, ‘A:\ Student.doc’);

Write (‘Запись файла – 1, читать – 2’); Readln(i);Case i do

1 : Fwrite;2 : Fread;

End;End.Мәтіндік файлдарТурбо Паскальда мәтіндік файл деп, ұзындықтары айнымалы

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

байланыстырылады.Мәтіндік файл құрылу процессінде әр жазбаның (жолдың)

аяғында EOLN (End Of Line-конец строки), ал әр бір файл аяғында- EOF (End Of File-конец файла) арнайы белгілері қойылады.

EOLN- ASCII кодтау тізбегінен – #13 (CR) және #10(LF); EOF- коды #267Read, Readln, Write, Writeln – процедуралары жазбалармен

мәлімет алмасуға қолданылады. Бұл процедуралардың <F> файлдық айнымалысы, арқылы кез

келген файлды көрсетуге болады. Егер бірінші параметр көрсетілмесе, онда қолданылатын файл стандартты Input (Output) файл болып есептеледі.

Read(<F>, <енгізу тізімі>)Readln( <енгізу тізімі>) – енгізу процедуралары символдарды,

жолдарды, сандарды енгізуді ұйымдастырады.Мұндағы <енгізу тізімі> – бір немесе бірнеше Char, String және

сандық типті айнымалылар тізбегі болуы мүмкін.Write(<F>, <енгізу тізімі>)

105

Write( <енгізу тізімі>) – шығару процедуралары символдарды, жолдарды, сандарды текстік файлға шығаруды ұйымдастырады.

Мұндағы <шығару тізімі> – бір немесе бірнеше Char, String, Boolean және сандық типті өрнектер тізбегі болуы мүмкін.

EOLN(<F>) – логикалық функциясы жолдың соңын табады. Егер жол соңы табылса True мәнін қайтарады, әйтпесе False.

Мысал: Example.pas текстік файлының бірінші жолынан ұзындығы алты символ тізбекті оқу керек.

Program Examp_St;Var

F : text;St : string[6];

BeginAssign(F, ‘Example.pas’); {бұл файлың болуы қажет}Reset(F);While not Eoln(F) do {жолдың аяғын тексеру}

BeginRead(F, St);Writeln((‘St = ‘, St); {экранға шығару}End;

Readln(F); {келесі жолға өту}Close(F); {файлды жабу}

End.Бақылау сұрақтары1. Жалпы, файл дегеніміз не?2. Турбо Паскаль тілінде файлды деректердің ең бір іргелі

құрылымы деп сануға қандай ерекшеліктері бар?3. Файлдармен қандай амалдар жасауға болады?4. Файлды қалай жазуға болады? Қандай процедуралар және

функцияларды қолданылады?5. Файлдан оқуды қалай ұымдастырылады? 6. Қандай процедуралар қолданылады?7. Файлдық айнымалы не үшін қолданылады?8. Reset және Rewrite процедураларының айрмашылықтары

қандай? 9. Close процедурасы не істейді?10.Логикалық Eoln және Eof функцияларының қажеттілігі

қандай?11. Мәтіндік файл дегеніміз не? Ерекшелігі неде?12.Мәтіндік файлға қалай жаңа жолдар қосуға болады?Есептер

106

1. Элементтері нақты сан болып келетін файл құру керек:1) элементтерінің көбейтіндісін;2) элементтерінің квадраттарының қосындысын;3) модульдерінің қосындысын және элементтерінің квадрат-

тарының қосындысын;4) файлдың соңғы элементін.2. Файлдың элементтері нақты сан болып келген. Табу керек:1) элементтерінің ең үлкен және ең кіші мәндерінің

қосындысын;2) бірінші және соңғы элементтерінің қосындысын.3. Файлдың элементтері натурал сандар. Табу керек:1) жұп сан болатын элементтерінің санын;2) екі еселенген тақ сан болатын элементтерінің санын.4. Символдық F файлы берілген. Осы файлдың көшірмесін G

файлына алу керек.5. Жолдардан тұратын мәтіндік файл берілген. Табу керек:1) жолдардың санын;2) бірдей символмен басталатын және аяқталатын жолдардың

санын;3) ең қысқа жолдарды;4) симметриялық жолдарды.

107

Қолданылған әдебиеттер

1. Фаронов В.В. TurboPaskal 7.0. Начальный курс. Учебное пособие.– М.: Нолидж, 1998.– 616 с.

2. Попов В. Б. Turbo Pascal для школьников. Учебное пособие.–3-е доп. изд. – М.: Финансы и статистика, 2004. – 528 с.:ил.

3. Зуев Е.А. Язык программирования TurboPaskal 6.0. – М.: Унитех, 1992.– 298 с.

4. Қойбағарова Т.Қ. Паскаль тілінің негіздері. – Павлодар: 2000. – 59 бет.

5. Грызлов В.И., Грызлова Т.П. Турбо Паскаль 7.0.– М.: ДМК, 1998.– 400 с.

6. Бабушкина И.А.,Бушмелева Н.А.,Окулов С.М.,Черных С.Ю. Практикум по Турбо Паскалю. Учебное пособие по курсам «Информатика и вычислительная техникаң, «Основы программирования».– М.: АБФ, 1998.– 384 с.

7. Джонс Ж., Харроу К. Решение задач в системе Турбо Паскаль. /Пер.с англ.– М.: Финансы и статистика, 1991.–720 с.

8. Шаньгин В.Ф., Поддубная Л.М. Программирование на языке Паскаль.– М.: Высшая школа, 1991.– 139 с.

9. Гусева А.И. Учимся информатике: задачи и методы их решения.– М.: Диалог-МИФИ, 1998.– 320 с.

10. Федорова Л.П., Глухов Д.Н. Информатика. Для 11 кл. и поступающих в вузы. – Волгоград: Учитель, 1998.– 69 с.

11. Петренко Т.Г. Информатика.– Донецк: ПКФ «БАО», 1998.–96 с.

12. Бидайбеков Е.Ы., Нұрбекова Ж.Қ. Информатика және математикалық статистика бастамалары.– Алматы: Абай атындағы АлМУ, 1999.– 67 бет.

13. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль.– М.: Наука, 1987.– 112 с.

14. Алдашев С.А., Ахметов Н.Р. Информатика мен есептеуіш техника терминдерінің орысша-қазақша сөздігі.– Алматы, Рауан, 1993.– 176 бет.

15. Бектаев Қ.Б. Орысша-қазақша математикалық сөздік.–Алматы: Мектеп, 1986.– 295 бет.

108

Т.Қ. Қойбағарова

Turbo Pascal программалау тілі

Оқу-әдістемелік құралы

Басуѓа ќол ќойылды 10.06.2005Гарнитура Times.

Форматы 21427,29 × Офсеттiк ќаѓазы.

Кµлемi 3,26 шартты б.т. Таралымы 300 дана.Тапсырыс № 0027.

Павлодар мемлекеттiк педагогикалыќ институтыныњредакциялыќ-баспа бµлiмi

140000, Павлодар ќ., Мир кµшесi, 60E-mail: [email protected]

109