Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Как проще всего учесть это в программе



Begin

Оператор бөлігі

End.

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

Program аты (input,output);

Uses – модульдерді қосу;

Label – Белгі бөлігі;

Const – Тұрақтылар бөлігі;

Type – Тип бөлігі;

Var – айнымалы бөлігі;

Procedure, Function – процедура және функция бөлігі;

Begin

1- Оператор;

2- Оператор;

......................

n- оператор;

End.

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

Uses –бұл жолда программада пайдаланылатын модульдер тізімінен тұрады. Модульдер стандартты және пайдаланушының құрған модульдері болуы мүмкін. Турбо Паскаль жүйесінде бірнеше стандартты модульдер бар. Олардың негізгілері: SyStem – Паскаль тілінің процедуралары мен функцияларын, Турбо Паскаль тілінің қосымша командаларын сүйемелдейді;

DOS- Паскаль тілінің DOS командаларын пайдалануды сүйемелдейді; CRT – Тексттік режимде экранды басқарады; OVERLAY – оверлейлік программаларды, PRINTER – принтерді пайдалануды, GRAPH – экранның графикалық режимінің жұмысын сүйемелдейді. Бұлардың барлығы TURBO.TPU, GRAPH.TPU файлында орналасқан. SyStem модулі тізімде көрсетуді қажет етпейді, ол автоматты түрде қосылады. Программаның орындалу нәтижесін экраннан көру үшін экран бетін кідіріс жасап, ұстап тұруды ұйымдастыру қажет. Кідірісті үш тәсілмен ұйымдастыруға болды: 1) Readln операторымен; 2) <символдық айнымалы>:=ReadKey операторымен; 3) While NOT Keypressed DO операторымен.



Label –белгі ретінде кез келген бүтін оң сан, символ, символдар тіркесі пайдаланылады. Белгі операторды немесе программаның бөлігін табу үшін қолданылады. Белгі оператор алдында орналасады да, қос нүте арқылы ажыратылады. Қажеттіоператорға, программаның бөлігіне оралу белгі арқылы жүзеге асырылады. Мысалы, Label 5,12,45,Sum, AB.

Берілген мәндерді айнымалыға жазу үшін меншіктеу операторын пайдалануға болады. Мысалы, А:=15, BC:=-16.4.Программаны әмбебап етіп жасау үшін айнымалылардың мәндерін өзгертетін түрде жазу қажет, бұл жағдайда программа айнымалының әр түрі мәндері үшін дұрыс болады. Ол үшін енгізу операторы READ пайдаланылады. Енгізу операторының жалпы түрі READ(а1, а2,...,аn). Мұндағы а1, а2,...,аn – айнымалы атаулары, оларды енгізу операторының параметрлері деп атайды. READ операторы орындалғанда параметрлер өздеріне сәйкес мәндерді қабылдайды, бұл міндетті енгізу файлы INPUT(енгізу) арқылы жүзеге асырылады.

Паскаль тілінде нәтижені экранға шығару үшін WRITE (жазу) операторы пайдаланылады. WRITE(а1, а2,...,аn). Мұндағы а1, а2,...,аn – жай айнымалылар немесе апострофтар ішіне алынған символдар тобы болуы мүмкін. Мысалы, егер В=17,15 болып, write (‘B=’,B) командасы орындалғанда, экранға В=17,15дерегі көрінеді. Бүтін және нақты сандарды шығару үшін сандардың форматын беру қажет. Формат айнымалы атынан соң қос нүкте арқылы жазылады. Нақты сан форматы екі саннан тұрады: 1-сан – санға берілетін орын, 2-сан – үтірден кейін алынатын бөлшек бөлік саны.



3 Дәріс тақырыбы:

Есептің қойылымы. Математикалық моделін тұрғызу. Алгоритмін құру. Есепті компьютерде шешу. Проектіні тексеру.

ЭЕМ-ң көмегімен есептерді шешуге дайындау процесінде бірнеше кезеңді ерекшелеуге болады:

1. Математикалық модель құруды қамтитын есептің қойылуы (есептің математикалық қойылуы).

2. Есепті шешудің алгоритмін жазу.

3. Прорамманы құрастыру.

4. Программаны жөндеу.

5. ЭЕМ-де есепті шешу және нәтижелерді талдау.

Есептің қойылуы

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

Есеп қойылғанда алғашқы және қажетті деректерді анықтап, атап өту керек, қандай нәтижелер және қандай жағдайда алу қажет екенін айқын түсіну керек. Зерттеу объектісі математикалық терминдерде сипатталады, алғащқы деректер мен қажетті нәтижелер арасындағы байланыс белгіленеді (көбіне формулалардың көмегімен), бұл нақты объектіні зерттеу математикалық зерттеуде түйістіреді.

Егер есеп математикалық болса, формулалары, шешу әдісі, математикалық қойылуы айқын болса, бұл кезеңнің орындалуы қажет болмауы да мүмкін. Іс жүзінде ЭЕМ айтарлықтай айтарлықтай күрделі есептерді шешу үшін жиі қолданылады, сондықтан есептердің қойылу кезеңі едәуір күш салуды, уақытты талап етуі мүмкін. Мұндай есептердің мысалы оқу кестесін құрастыру, өнеркәсіп өндірісінің дамуы нәтижесінде ауа райы өзгеруін болжау, табиғи ресурстарды тиімді пайдалану, экология мәселелері бола алады. Бұл жерде математиаклық символиканы барлық уақытта пайдалану шарт емес, бірақ ойды математикаға тән қатаңдықпен жеткізу қажет. Есептің дәл және нақты қойылуы – есепті жартылай шешу деген сөз.

Есеп шығару алгоритмі

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

алг есептеу (аргзат R1, R2, нәтзат S)

басызат S1, S2

енгізу R1, R2

егер R1<R2 немесе R1<0 немесе R2<0

ондашығару “шешімі жоқ”

әйтпесе S1:=р*R12; S2=p*R22; S:=S1-S2; шығару S

бітті

соңы

Алгоритм алгоритмдік тілде жүзеге асуы мүмкін. Ол сөздік түрінде немесе графикалық көрсетілімде болады.

Программаны құрастыру

Әрбір ЭЕМ-ң машиналық командаларының өз тілі болады және тек сонымен жазылған программаларды орындай алады. Сандар тілі бола тұра, машиналық тіл программалауға жарай бермейді, өйткені программистен программаны жазу және жөндеу үшін көп уақыт талап етеді. Осы себептен Паскаль және т.б. программалау тілдері кеңінен тараған. Алгоритмді программалау тілінде жазу операциясы кодтау деп аталады. Деректерді ЭЕМ-ге енгізу ережелерін, жұртқа ақпаратты көсету пішінін ғана ойластыру қажет. Программаны безендіру үшін машиналық графиканың, дыбыстық сүйемелдеудің құралдарын қосу керек.

алг есептеу (аргзат R1, R2, нәтзат S)

басызат S1, S2

енгізу R1, R2

егер R1<R2 немесе R1<0 немесе R2<0

ондашығару “шешімі жоқ”

әйтпесе S1:=р*R12; S2=p*R22; S:=S1-S2; шығару S

бітті

соңы

Программаны жөндеу

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

Қазіргі салыстырулар бойынша программаны жөндеу программист оны өңдеуге арналған уақыттың 20-дан 40 % дейін жұмсайды. Сондықтан программа жөндеудің тәсілдері мен құралдарын меңгеру өте маңызды. Программаны іске асыру барысында пайда болатын қателер синтаксистік және логикалық (алгоритмдік) болады. Алгоритмдерді программалау тіліне аударғанда жіберілген синтаксистік қателердің көпшілігі ЭЕМ-мен автоматты түрде айқындалады. Қазіргі заманғы ЭЕМ-дері қателер жөніндегі ақпаратты программа мәтінімен қоса шығарады, олардың орындарын және мінездемесін көрсетеді. Есептерді шешудің логикасы бұзылғанда пайда болатын алгоритмдік қателер қате нәтиже алуға, программаның аяқталмай қалуына, оның авариялық аяқталуына әкеледі. Алгоритмдік қателерді тауып, түзету анағұрлым күрделі.

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

Есептерді ЭЕМ-де шығару және нәтижелерді талдау

Тест есебімен айқындалған қателерді жойғаннан кейін, берілген есептің алғашқы деректері дайындалып, ЭЕМ-ге енгізіледі. Шешу нәтижесінде алынған шығыстық деректер (нәтижелер) есепті қоюшымен талданады, өңделеді (графиктер, кестелер сызады). Талдау негізінде тиісті шешімдер, кепілдемелер жасалады.

 

4 Дәріс тақырыбы:

Циклдік алгоритм. Цикл түрлері. Цикл құрылымы.

Есептерді шешу барысында бір типті әрекеттерді көп рет қайталау қажеттілігі жиі кездеседі. Бұл әрекеттерді жүзеге асыратын алгоритмдер циклдік, ал әрекеттердің көп рет қайталанатын бірізділігі (циклдің денесі) циклдер деп аталады. Циклдерді пайдалану ықшам программалар көмегімен есептеулердің үлкен көлемдерін орындауға мүмкіндік береді. Алдын-ала берілген және белгісіз сандар қайталауларымен циклдер ажыратылады.

Алдын ала берілген шарт бойынша қайталау.

Алдын ала берілген шарт бойынша қайталау көп жағдайларда қайталаудың саны белгісіз болған жағдайда пайдаланылады. Бұл оператор While-әзірге және DO-орындау қызмет сөздерінің көмегі арқылы орындалады да алгоритмдік тілдегі “әзірге” қайталану командасына сәйкес келеді. Оның жазылу түрі мынадай:

Әзірге шарт While шарт DO

ЦБ Вegin

Командалар сериясы серия (цикл денесі)

ЦС end

 

 

 

Мұнда шарт орнына логикалық өрнек тұруы да мүмкін. Серия көп жағдайларда циклдің денесі деп аталады да, операторлық жақша ішіне алынып жазылады. Бұл оператор былай орындалады: алдымен шарт тексеріледі, егер шарт орындалса, онда циклдің денесі орындалады, одан соң қайтадан шарт тексеріледі, және тағы да сол сияқты бұл процесс қашан шарт сақталудан қалғанша қайталанады. Егер шарт сақталмаса, басқару операторлық жақшаның соңында тұрған операторға көшіріледі. Басқаша айтқанда логикалық өрнектің мәні жалған болғанша қайталану денесі қайталанып орындала береді. Егер қайталаудың денесі бірнеше оператордан құралса, онда олар Вegin-end қызметші сөздерінің арасына алынып жазылады. Мысалы,

While шарт DO

Вegin

1-оператор;

2-оператор;

..................

n-1 оператор;

n оператор

end;

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

Келесі шарт бойынша қайталау операторы

Бұл оператор көп жағдайларда қайталаудың саны белгісіз болған жағдайда пайдаланылады. Оның жазылу түрі:

REPEAT

Қайталау денесі (серия)

UNTIL <логикалық өрнек>

Мұндағы REPEAT-қайтала, UNTIL-соған дейін – қызметші сөздері.Оның орындалуы: қашан логикалық өрнектің мәні аиқат болғанша циклдің денесі қайталана береді. Алгоритмдік тілде бұл қайталануды “Цикл дейін” дейді, оның “Цикл-әзірге” ден айырмашылығы мұнда қайталанатын командалар сериясы кемінде бір рет орындалады. Демек, бұл қайталануда алдымен циклдің денесіорындалады да, одан соң шарт тексеріледі. Операторлық соңы UNTIL қызмет сөзімен бітетін болғандықтан, мұнда операторлық жақшалар қолданылмайды. Егер қайталану денесінде көшіру операторы болып, ол циклдің сыртындағы оператордың белгісіне басқаруды берсе, онда циклдың орындалуы ары қарай жалғаспайды.

Параметрлі қайталану

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

І үшін m1 бастап m2 дейін h қадам

ЦБ

Серия

ЦС

Сәйкес келеді де, былай жазылады:

FOR I:=m1 TO (Downto) m2 Do

Begin серия (операторлар)

End;

Мұндағы FOR-үшін,TO- дейін, Do – орындау. І-циклдің параметрі, і-Паскаль тілінде міндетті түрде бүтін типтегі айнымалы болуы қажет.m1, m2 –параметрдің сәйкес бастапқы және соңғы мәндері, олар бүтін сандар немесе бүтін мән беретін арифметикалық өрнектер болуы мүмкін. Паскаль тілінде параметрлдің қадамы тек екі мән: 1 немесе –1 қабылдай алады.Қадамның мәніне тәуелді операторда TO немесе Downto қызмет сөздері пайдаланылады. Егер қадам 1-ге тең болса TO, ал қадам –1 болса онда Downto пайдаланылады. Оператордың орындалу тәртібі:

А) параметрдің мәні m2 –мен салыстырылады, егер ол m2-ден кіші болса, онда циклдың денесі бір рет қайталанады. Ал ол m2-ден үлкен болса, онда басқару цикл денесінің соңындағы операторға беріледі де қайталану аяқталады;

В) әрбір қайталағанда, параметрдің алғашқы мәніне бір қосыла отырып, параметрдің ағымдағы мәні m2-ден артық болғанша циклдың денесі қайталана береді.

Егер m1 және m2 арифметикалық өрнектер болса, онда олардың мәндері циклдың орындалар алдында бір-ақ рет орындалады.Егер циклдың денесі бірнеше оператотрлардан тұрса, онда олар операторлық жақшаға алынып жазылады.

5 Дәріс тақырыбы:

Берілгендердің символдық типі. Жолдық тип.

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

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

Жолдар. Символдық ақпаратпен жұмыс істеу.

Символдық ақпараттарды пернетақтадан енгізу және дисплейге шығару жолын қарастырамыз. Пернетақта және дисплей енгізу және шығару стандартты құрылғылары болып табылады да, оларды пайдалану үшін сәйкес INPUT, OUTPUT қызметші сөздерін пайдаланады. Символыдқ берілгендерді өңдеу, сиволдық (белгілік, литерлік) типті беретін CHAR қызметші сөзі қолданылады. CHAR типті айнымалының мән, сол машинада пайдалана алатын кез келген жеке символдар, белгілер бола алады. Егер программада мынадай бейнелеу болса: А,В: CHAR; онда меншіктеу операторын: А:=’k’, B:=A, B:=’5’, A:=’*’ және т.с.с. түрінде жазуға болады. Мұндағы ’’ (апостроф) символдық мән екенін білдіреді. Символдық мән дисплейден немесе принтер арқылы алынған қағаздан көрінгенде ’’ белгісі алынып қалады да, тек символдың өзі көрініп тұрады. Символдық берілгендер үшін =, (< >), >, <, >=, <= қатынас белгілері пайдаланылады, себебі барлық символра, белгілер, цифрлар реттеліп орналасқан. Тізімде қай символ бұрын орналасса, келесі символға қарағанда оның коды кіші деп есептеледі. Әріптер алфавит бойынша орналасады. Кіші латын әріптері бірінен соң бірі алфавит бойынша бір топ құра орналасады, мысалы: ...a, b,…z,…, ал араб цифрлары өсу бойынша: ...0,1,2,...9,... орналасады. Олай болса: ‘a’<’c’, ‘y’>’x’, ‘2’>’1’, ‘x’<>’z’, IF C=’c’ сияқты белгілерді жазуға болады. Әріптерді орналасауы бойынша параметрлі қайталану операторының көмегімен мына программа арқылы экранға шығаруға болады:

Program AR;

Var C:char;

Begin

For C:=’a’ to ‘z’ do

Write (c);

End.

Нәтижесінде дисплейден a, b,…zкөрінеді. Ал алфавитті кері ретепн алу қажет болса, онда төмендегіше жазамыз:

For C:=’z’ downto ‘a’ do

Символдық берілгендерді енгізудің төмендегідей ерекшеліктері бар:

1. Бос символ (пробел) Паскаль тілінде символ орнына жүретіндіктен, символдық айнымалылардың мәндері бос орынсыз жазылады, ол енгізу операторы Read көмегімен енгізіледі.

2. Бір айнымалыға бір ғана символ меншіктеледі.

3. Символдық айнымалылардың басқа ерекшелігі Enter, басылса да оны бос орын символы ретінде қабылдады.

4. Символдық айнымалыларды енгізгенде SHIFT, CAPS, РУС, ЛАТ – пернелерін басқанда оларды жеке символ ретінде қабылдайды да, мән орнына олардың кодтары қабылданады.

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

6. WHILE NOT EOLN DO операторының алдына міндетті түрде READLN операторы тұруы қажет.

Мәтін деп жолдар тізбегін айтады. Паскаль тілінде жол символдар тізбегінен құралады. Әдетте мәтіндерді өңдегенде тек литерлік шамаларды пайдалану тиімсіз келеді, себебі көп есептерде символдарды өңдеу емес, жолдарды өңдеу қажет болады. Паскаль тілінде программада жолдық тұрақтыларды пайдалануға болатыны жоғарыда көрсетілді. Жолдық тұрақты деп енетін символдардың саны 256 артпайтын апостроф ішіне алынған символдар тізбегін айтады. Егер жолдың ішінде апострофты пайдалану қажет болса, оны екі апострофпен алмастырады. Мысалы: ‘Бізге керегі ”өзі” емес пе?’, ’көбейту’ және т.с.с. Жолдық тұрақтыларда бос орын символ ретінде қабылданады. Басқа тілдер тәрізді Паскаль тілінде де жолдық айнымалылар пайдаланылады. Жолдық айнымалылардың типін көрсету үшін тік жақша ішінде жолдың максимальды ұзындығы көрсетілген String қызметші сөзі пайдаланылады. Жолдық айнымалының типі программаның тип бөлігінен кейін қарастырылады немес тікелей айнымалы бөлігінде бейнеленеді. Айнымалы бөлігінде бейнеленуі:

Var

<айнымалы аты>: string [жолдың мах.ұзын.]

Var

Tex: string [29];

At: string [40];

Atay: string [275];

Мұндағы Atay-дағы жол ұзындығы дұрыс көрсетілмеген, себебі 275>255, сондықтан мұнда компьютердің қате деп хабар береді. ЭЕМ-ң жадысынан жолдың алатын көлемін байт өлшемі арқылы алуға болады, ол үшін жолдың максимум ұзындығына 1 қосу жеткілікті. Мысалы алдағы мысалда At-ң өлшемі 41 байт. Қосымша байт жолдың алдында орналасады да, онда жолдың ағымдағы ұзындығы сақталады. Сонымен, жолдың жадыға орналасу схемасын былай крсетуге болады:

У-те жолдың ағымдағы ұзындығы А сақталады;

У+1-де жолдың 1 символы,

У+2-де жолдың 2 символы,

..............................................

У+А-да ағымдағы жолдың соңғы символы,

У+А+1-бос ұяшық

..............................................

У+М-жолға берілген ұяшық.

Мұндағы У-жады ұяшығын, А-ағымдағы жолдың ұзындығын, М-жол үшін алынған максимум ұзындықты белгілейді.

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

Жолға төмендегі амалдар пайдаланылады.

1. Жалғастыру амалы, яғни «+» белгісімен белгіленеді. Мысалы, жолдық өрнек ’инфор’+’матика’ нәтижесі информатика.

2. Салыстыру амалдары, яғни =, (< >), >, <, >=, <= белгілері. Мысалы, өрнек ’инфор’ =’инфор’, нәтиже true, ’инфор1’ >’инфор2’ нәтиже False, ’ВВВ’ >’ВВ’ нәтиже False.

3. Меншіктеу амалы, яғни «:=» белгісі. Бірақ мұнда егер меншіктелетін мән ұзындығы типте көрсетілген ұзындықтан артық болса, онда артық символ алынып тасталады. Мысалы, Бейнелеу А: string [5]; өрнек А:=’информатика’, нәтиже ’инфор’

Жолдың символдарын олардың орналасу орындары (индексі) бойыншатабуға болады. Индекстің типі бүтін болады, ол айнымалы атауынан соң тік жақшаның ішіне алынып жазылады. Мысалы, S=’Программа’, S[2]=’р’, S[6]=’а’ береді.

Паскаль тілінде төмендегі стандартты функциялар пайдаланылады:

1. СНR(I)-I санына (кодына) сәйкес символды береді. Мысалы, СНR(1) =’!’, СНR(250) =’з’.

2. ORD(S) – S символының кодын береді. Мысалы, ORD(!)=1, ORD(з)=250.

3. СОРУ (S, N,M) – S жолының N-1 орындағы символынан бастап M символды бөліп алады. S жолдық айнымалы, N, M – бүтін сан. Егер жолдың ұзындығынан артық болса, онда нәтиже бос орын болады.

4. CONCAT (S1,S2,Sn) – жолдарды реті бойынша жалғастырады. Мысалы, CONCAT (‘a’,’b’,’c’)=’abc’

5. LENGTH (S) – S жолдық айнымалысының мәніндегі символдар санын береді, Мысалы, LENGTH (‘ABCD’)=4, LENGTH (‘a_f_M_D’)=7.

6. POS (S1,S2) – S1 кіші жолы S2 жолының бөлігі болатынын немесе болмайтынын анықтайды. Бұл функциядан шыққан нәтиже бүтін сан болады да, S1-мәні S2-мәніне сәйкес келетін орынды көрсететін санға тең болады. Егер нәтиже нөлге тең болса, онда S1 жолы S1 жолының бөлігі бола алмайды. Мысалы, POS (‘ab’, ‘abcd’)=1, POS (‘ab’, ‘array’)=0.

7. UPCASE (CH) – латын кіші әріптерін оған сәйкес үлкен әріпке аударады. Мысалы, UPCASE(‘a’)= ‘А’.

Жолдық процедуралар:

1. DELETE (S,M,N) – S-тің мәнінің M-ші орнынан бастап, N символды алып тастап нәтижені S-ке жазады.

2. INSERT (S1,S2,N) – S2-ң N позициясынан бастап S1 жолын S2 жолының арасына орналастырады да, нәтижені S2 жазады.

3. STR (I,S) – І санын жолға айналдырады да S-айнымалысына орналастырады.

4. VAL (S,I,cod) – сандық S жолын бүтін немесе нақты санға аударады да нәтижені І-ге жазады, cod=0 қате, оның мәні І-ші қате кеткен орынды көрсететін санға тең.

6 Дәріс тақырыбы:

Берілгендердің фундаментальді типі. Массив, жазба және жиынның қойылымы.

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

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

Тұрмыста тізбектелген сандарды, кестелерді, фамилия тізімдерін көп пайдаланамыз, олар бір өлшемді(жатық немесе тік жол) екі өлшемді(матрица) массив болуы немесе жиын болуы мүмкін.

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

Массив дегеніміз бір типтегі берілгендер жиыны. Басқаша айтқанда, массив – бір атауға біріктірілген айнымалылардың реттелген тізбегі. Айнымалылардың – массив элементерінің типтері бірдей болады.массив бір ғана атпен белгіленеді. Мысалы, нақты сандардан сандардан құралған тізбекті R атаулы массив деуге болады. Мысалы:

1.6, 14.9, -5.0, 8.5, 0.46 –ны бір өлшемді массив деп, оған а деп атау беруге болады. Массивтің әр элементі массивтің атымен белгіленеді де, оның индексі қойылады. Массив элементтері индексі бойынша реттеліпжазылады. Мысалы, А1, А2, ... , Аn немесе жалпы түрде Ai,i=1,2,…,n. Паскаль тілінде массив элементтерінің индексі алгоритімдік тілдегі тәрізді тік жақшаға алынып жазылады, мысалы, А[i]. Жоғарыдағы массивте А[1]=1.6, A[2]=14.9 және т.с.с мәндер қабылданады.

Сөйтіп паскаль тіліндегі массив ұйымы алгритімдік тілдегі кесте ұйымына сәйкес келеді. Алгоритімдік тілдегі ТИП АТАУ өлшем (мысалы, нақ таб A[1:N]) орнына Паскаль тілінде атау : массив [индекстердің алғашқы...соңғы мәні] OF элемент типі – түрінде жазылады.

Егер программада массив пайдаланылатын болса, онда ол айнымалы (VAR) бөлігінде немесе тип (TYPE) бөлігінде бейнеленуі қажет.

Массив айнымалы бөлігінде былай бейнеленеді:

VAR массив аты: ARRAY [t1] OF t2;

Мұндағы ARRAY (массив), OF (одан) – қызмет сөздері, t1-REAL, INTEGER базалық типінен өзге кез келген стандартты тип. Индекстің типі ретінде шектелген, саналатын, логикалық және литерлік типтер пайдаланылады.

Мысалы,

VAR lit=array[char] of real;

org=array[5..15] of char;

bol=array[boolean] of integer;

t2-құраушылар типі, Паскаль тілінде пайдалануға болатын массив элементтерінің типі. Мұны пайдалансақ, жоғарыдағы мысалдағы массивті айнымалы бөлігінде былай бейнелеуге болады:

VAR a:array[1..5] of real

Мұндағы A – элементтері REAL типтегі массив аты, ал индекс 1-ден 5-ке дейін өзгереді.

Индекс типі стандартты, бүтін немесе нақты бола алмайды. Сондықтан бейнелеуді былай жазуға болмайды:

VAR a:array[5] of real;

немесе

VAR a:array[integer] of real;

Массивтерді дұрыс жазуға мысалдар келтірейік:

VAR mas:array[1..n] of real;

жыл: array[қаңтар..желтоқсан] of integer;

L: array[жол] of boolean;

M1: array[char] of шеңбер;

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

VAR a, b, c :array[1..10] of real;

Мұнда әрбір А, В, С – массивтері, элемент – типтері нақты болатын 10 элементтен тұрады.

Программада «индекс» және «индекстің типі» ұғымдарын шатастыруға болмайды.

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

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

Сондықтан да көп жағдайларда массивтерді индексті айнымалылар деп те атайды. Ал индекссіз айнымалыларды массивтерден ажырату үшін қарапайым айнымалылар дейді. Базалық типтегі айнымалыларға қандай амалдар қолданылса, массив элементтеріне де сондай амалдарды қолдануға болады. Мысалы, программаның операторлық бөлігінде массив элементтеріне мынадай амалдар:

A[3]:=C[4]+5;

S:=S+X[K];

P:=X[3*i+1];

және т.с.с. қолданылады.

Егер массив атауында бір ғана индекс болса, онда ол массивті бір өлшемді, ал екі индекс болса – екі өлшемді және т.с.с. n индекс болса, n өлшемді массив дейді. Бір өлшемді массив вектор элементтері, ал екі өлшемді массив матрица деп аталады.

Массив элементтерін енгізу немесе шығару бөліктерін программа үзінділері арқылы көрсетейік:

А) енгізу:

For i=1 to n do

read (A[i]);

………………….

Ә)шығару:

For i=1 to n do

write(A[i],’ ‘)

………………….

Массив элементтерін кездейсоқ сандармен де енгізуге болады. Мысалы, массив өлшемі алдын ала енгізіледі де, 100-ге дейінгі сандардан кездейсоқ түрде массив элементтері енгізіледі:

Randomize;

For I:=1 to n do

C[i]:=random(100);

Жиындар

Алгебрада жиынның мағынасы қандай болса , Паскаль тіліндегі жиының да мағынасы солай беріледі. Бұл ретелмеген бір-бірінен ерекшелігі бар бір типті элементтер жиынтығы. Жиын элементерінің саны 255-тен артпау қажет. Жиындағы әрбір объект жиын элементі деп аталады. Жиын элементері нақтыдан басқа скалярлық типтердің бірінде жатуы тиіс. Бұл тип жиынның базалық типі деп аталады. Базалық тип аралықпен беріледі.Жиын типтерінің мәндерінің облысы базалық тип элементтерінен құрылған барлық ішкі жиындар жиынтығы болып табылады. Паскаль тілінде жиын элементтерінің мәндері квадрат жақшамен көрсетеді: [1,2,3,4],[‘a’, ‘b’, ‘c’], [‘a’,..’z’]. Жиынның элементтері болмаса, ол бос жиын деп аталады да, квадрат жақшамен «[]» белгіленеді. Жиындық типтерді бейнелеу ушін Set және Of қызметші сөздерді пайдалынады. Жиындық типтер типтерді бейнелеу бөлігінде былай анықталады.

 

Туре <атау> = set of < элементтер типі>

Мысалы,

Туре К=set of byte;

Var a:K

Жиындық типтер мен сәйкес айнымалдарды біріктіруге болады.

Var Code: set of 0..7;

Digits :set of ‘0’..’9’;

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

Type up=set of ‘A’..’Z’;

Low=set of ‘A’..’Z’

Const upcase: up=[‘A’..’Z’];

Vocals: Low=[‘a’, ‘e’, ‘i’, ‘o’, ‘y’, ‘и’]

Delimiter: set of char=[‘,’, ‘/’, ‘:’, ‘..’, ‘?’];

Жиынның бір элементінің жадыдан алатын көлемі 1 битті құрайды. Жиын типті айнымалының жадыдан алатын көлемі:

Жады көлемі =(Max div 8)+(Min div 8)+1

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

 

Жиындарға қолданылатын амалдар

Жиындық типтердің берілгендері үшін қиылыстыру, біріктіру, айырымдық және іп амалдары анықталған. Сондай-ақ, “<”, “>”. “<=”, “>=”, “=” және “<>” қатынас белгілері пайдаланылады.

“=” қатынас белгісі. Егер А және В жиындары бірдей элементтерден тұратын болса, онда бұл жиындар тең болып есептеледі. Салыстырылатын жиындардағы элементтердің орналасу ретінің теңдік шартына әсері болмайды.

А жиынының мәні В жиынының мәні Өрнек Нәтиже

[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] [3, 1, 2, 4] A<>B True

[‘a’..’z’ ] [‘b’, ‘z’] A<>B True

[‘c’..’t’] [‘t’..’c’] A<>B False

Үлкен немесе тең қатынас белгісі (>=). Егер В жиынының барлық элементтері А жиынының құрамына кіретін болса, A>=B қатынасының нәтижесі ақиқат болады, ал кері жағдайда жалған болады.

 

А жиынының мәні В жиынының мәні Өрнек Нәтиже

[1, 2, 3, 4] [3, 2, 4] A>=B True

[‘a’..’z’ ] [‘b’, ‘t’] A>=B True

[‘c’, ‘x’, ’t’] [‘t’..’c’] A>=B True

 

Кіші немесе тең (<=) қатынас белгісі. Алдыңғы операцияда пайдаланылғанындай, егер А жиынының барлық элементтері В жиынының құрамына кіретін болса, онда A<=B өрнегінің нәтижесі ақиқат болады, кері жағдайда жалған болады.

 

А жиынының мәні В жиынының мәні Өрнек Нәтиже

[1, 2, 3] [2, 3, 4] A<=B True

[‘d’..’h’ ] [‘b’, ‘t’] A<=B True

[‘c’, ‘x’, ’t’] [‘t’..’c’] A<=B True

 

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

 

А жиынының мәні Өрнек Нәтиже

[1, 2, 3, 4] if A in [2, 3, 4] then True

[‘a’..’z’ ] if A in [‘a’..’n’] then False

[‘c’, ‘x’, ’t’] if A in [x0, x1, x2, x3] True

 

In операциясы бірқатар басқа да амалдарды алмастыра отырып, күрделі шартты тексерулерді тиімді, көрнекі сипаттауға мүмкіндік береді.

Мысалы, if (a=1) or (a=2) or (a=3) or (a=4) or (a=5) then … өрнегін өте қысқа, әрі көрнекі түрде былай сипаттауға болады: if A in [1..6] then…

Жиындардың бірігуі (+). Екі жиынның бірігуі осы екі жиынның элементтерінен тұратын үшінші жиын болып табылады.

А жиынның мәні В жиынның мәні Өрнек Нәтиже

[1,2,3] [1,4,5] A+B [1,2,3,4,5]

[‘a’..’z’] [‘e’..’z’] A+B [‘a’..’z’]

[] [] A+B []

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

А жиынның мәні В жиынның мәні Өрнек Нәтиже

[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 [x3,x4]


Жазбалар

Жазбалар күрделі объектілерді бейнелеуде қолданылатын, икемді де, қолайлы мәліметтер құрылымы. Олар әртүрлі қасиеттерімен сипатталады, әртүрлі ақпараттық жүйелерді құруда қолданылады. Жазба-бұл әртүрлі типті тіркелген сандар шамасынан тұратын тізбек, ол өріс немесе жазудың компоненті деп аталады. Жазба массив тәрізді бірқатар жеке компоненттерден құралады, бірақ жазба компоненті әртүрлі типті мәліметтер болуы мүмкін. Мысалы, адрестік мәліметтер (индек, қала, көше, үй нөмірі, пәтер нөмірі). Мұны жазба түрінде былай сипаттауға болады:

Type adress=record

Index: string [6];

City: String [20];

Street: string [20];

House, flat: integer;

End;

Бұл мысалдан жазбаны былай анықтауға болады:

Type <жазба атауы>=record

1-өріс атауы: тип;

2-өріс атауы: тип;

.............................

n-өріс атауы: тип;

end;

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

Var stud1,stud2:record

Fio:string [20];

Fac: string [20];

Group:string [3];

End;

Жазба түріндегі айнымалының алғашқы мәнін тұрақты ретінде анықтауға болады:

Const aтау: тип атау=тұрақты мәні;

Тұрақты мән дегеніміз-өріс атауы мәні дөңгелек жақшаға алынған тізім элементтері. Тізім элементтері нүктелі үтірмен ажыратылып жазылады. Мысалы, координаттар жүйесінің бас нүктесін анықтайтын жазба былай сипатталады:

Type point=record

x,y,z:integer;

end;

Const or: point=(x:0;y:0;z:0);

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

Var х: adress;

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

х. House: =67; х. Street: =’Ғ.Құрманғалиев’; х. City: =’Атырау’; х. flat: =135; х. Index: =’000611’.

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

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

 

7 Дәріс тақырыбы:

Рекурсивті алгоритмдер.

Рекурсивті деп өзінің көмегімен анықталатын немесе ішінара тұратын объектіні атайды. Рекурсия тек қана математикада емес күнделікті өмірде де кездеседі. Кім өзінің жеке бейнесі көрсетілген жарнамалық картинканы көрген жоқ?

Математикада рекурсивті анықтау қуатты аппарат болып табылады. Міне, бірнеше жалпыға белгілі мысалдар: натурал сан, ағаш және белгілі бір функциялар.

1. Натурал сандар:

а) 0 наурал сан;

б) натурал саннан кейінгі сан натурал сан болады.

2. Ағаш:

а) 0 ағаш (оны «бос ағаш» деп атайды),

б) егер t1 және t2ағаш болса, онда екі төмен орналасқан ағашы бар төбеден тұратын құру да ағаш болады.

3 "Факториал" функциясы п! (теріс емес тұтас сандар үшін):

а) 0! = 1,

б) п >0: п ! = п *(п- 1)!

Рекурсивті анықтаманың қуаттылығы мынада, ол ақырғы айтылымның көмегімен объектілердің ақырсыз жиынын анықтауға мүмкіндік береді. Осыған ұқсас ақырғы рекурсивті программаның көмегімен ақырсыз есептеуді суреттеуге болады, сонымен қатар программада айқын қайталамалар болмайды. Алайда рекурсивті алгоритмдерді өңделетін деректердің құрылымында немесе есептелетін функцияда, шешілетін есепте рекурсия анық бар болған жағдайда қолданған дұрыс. Р рекурсивті программасын жалпы түрде S операторлар жиынының (Р-дан тұрмайтын) және Р-дың өзінің кейбір композициясы ретінде көрсетуге болады:

P=P[S,Р].

Рекурсивті программаларды бейнелеу үшін процедура немесе бағыныңқы программа түсінігінің болуы қажет және жеткілікті, өйткені олар кез келген операторға ат беруге мүмкіндік береді, оның көмегімен оған қатынауға болады. Егер Р кейбір процедурасының өз өзіне айқын сілтемесі болса, онда оны тура рекурсивті деп атайды, егер Р, Р-ға сілтемесі бар (тура және жанама) басқа Q процедурасына сүйенсе, онда Р-ды жанама рекурсивті деп атайды. Сондықтан программаның мәтіні (тексті) бойынша рекурсивтілік барлық уақытта айқын анықталмайды.

Негізінен процедурамен жергілікті (локальды) объектілер жиынын, яғни тек қана осы процедурамен анықталған және одан тыс қолданылмайтын немесе мәні жоқ айнымалылардың, тұрақтының, типтер мен процедуралардың жиынын байланыстырады. Мұндай процедураның әрбір рекурсивті активтенуі кезінде жергілікті байланыстырылған айнымалылардың жаңа жиыны туындайды. Олардың алдыңғы «буынның» төңіректік жиынының сәйкес элементтері сияқты аттары болса да, олардың мәндері соңғысынан ерекше, ал аттар бойынша кез келген қақтығыстар идентификатордың әрекет саласын анықтайтын ережелердің көмегімен шешіледі: идентификатор барлық уақытта айнымалылардың ең соңғы жасалған жиынына жатқызылады. Бұл ереже процедурамен байланысты анықтау бойынша процедуралардың өлшемдері үшін тура болады.

Цикл операторларына ұқсас рекурсивті процедуралар аяқталмайтын есептеулерге жеткізуі мүмкін, сондықтан бұл проблемаға ерекше назар аудару қажет. Жұмыс қай уақытта болса да аяқталуы үшін Р-ға рекурсивті қатынасу қандай да бір уақытта орындалуы тоқтатылатын кейбір В шартымен басқарылуы қажет. Сондықтан рекурсивті алгоритмдердің барынша дәл схемасын келесі формалардың кез келгеніне келтіруге болады:

P=IF B THEN P[S,P],

P= P[S, IF B THEN P].

Кейбір қайталанбалы процестің ақырын дәлелдеудің негізгі тәсілі мынадай:

1. f(x) < 0 – ден циклдың аяқталу шартының ақиқаттығы шығатын (алғы шарты немесе кейінгі шарты бар) f (х) (х —айнымалылар жиыны) функциясы анықталады.

2. Циклдың әрбір өтуі кезінде f (х) азаятыны дәлелденеді.

Осыған ұқсас рекурсияның аяқталуы да дәлелденеді – Р f(x) < 0 –ден ~В шығатын f (х) азайтатыны көрсетіледі. Жекелеп алғанда процедураның аяқталуын қамтамасыз етудің ең сенімді тәсілі – оған кейбір өлшемдер (мән) енгізу, оны п деп атаймыз, және Р-ға рекурсивті қатынау кезінде өлшем ретінде п-1 беру.

Егер бұл жағдайда В ретінде п > 0 қолданылса, онда аяқталуы кепілді. Бұл тағы да екі схемамен бейнеленеді:

Р(п) = IF п > 0 THEN Р [S, Р (п - 1)],

Р(п) = Р [S, IF п > 0 THEN Р (п - 1)].

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

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

Алгоритмдік п рекурсияға жоламау қажет программаларды олардың құрылымын бейнелейтін бірқатар схемамен сипаттауға болады (ерекшелігі, онда барлық конструкциялардың соңында немесе басында кРв жалғыз қатынасуы бар):

Р= IF В THEN (S; P),

Р = (S; IF В THEN P).

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

i =0,1,2,3,4,5,...,

fi=1, 1,2,6,24,120,....

Сандардың біріншісі анықталады -fо=1 анық, ал келесісі алдыңғы санның көмегімен рекурсивті түрде анықталады:

Fi+1=(i+1)* f

Мұндай рекурренттік қатынас п- факториалды санының рекурсивтік есептеу алгоритмін шамалайды.

8 Дәріс тақырыбы:

Қосалқы программа. Функция. Процедуралық тип.

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

3- негізгі программаның көлемі кішірейді;

4- негізгі программада пайдаланылған айнымалыларды қосалқы программада пайдалануға болады;

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

6- қосалқы программаны пайдалану құрылымдық программалауға мүмкіндік береді.

Паскаль тілінде алгоритмдік тіл тәрізді қосалқы программаның екі түрі пайдаланылады. Олар процедура (procedure) және функция (function). Бір программада бір немесе бірнеше процедура және функция пайдаланылуы мүмкін.

Паскаль тілінде процедуралар мен функциялар программаның басында айнымалылар белгіленіп болғаннан кейін жазылады. Негізгі және қосалқы программада бір айнымалы, мысалы, “К” қатар пайдаланылуы мүмкін, бірақ әр программада пайдаланылғанда К-ның физикалық мағынасы бірдей болуы шарт емес. Атау берілген операторлар тізбегін Паскаль тілінде процедура дейді. Яғни: әр қосалқы программаның (процедураның немесе функцияның) атау (аты) болуы керек, қосалқы программаға атау негізінде оралады.

Процедура. Кез келген процедура программаға ұқсас түрде жазылады. Олардың басы, бейнелеу және операторлар бөліктері болады. Процедураны параметрсіз де пайдалануға болады. Екі процедуралық программа схемасы төмендегідей болады.

Program P (input, output)

Ортақ берілгендерді бейнелеу бөлігі

Procedure P1;

Р1-ң процедураларын бейнелеу бөлігі

BEGIN

Р1-ң операторлар бөлігі

END;

Procedure P2;

Р2-ң процедураларын бейнелеу бөлігі

BEGIN

Р2-ң операторлар бөлігі

BEGIN

Негізгі программаның операторлар бөлігі

END.

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

Негізгі программада хабарландырылған (бейнеленген) атау, негізгі және қосалқы программада да (процедуралар да, функцияларда да) пайдаланылады. Мұндай атаулар ортақ (глобальды) атаулар деп аталады. Қосалқы программада хабарланған атаулар тек сол қосалқы программада ғана пайдаланылады. Мұндай атауларды жергілікті (локальды) атаулар.

Функция. Басқа тілдер тәрізді Паскаль тілінде де функцияны арнайы программа ретінде жеке жазуға болады, сондықтан оны көмекші программа ретінде қарауға болады. Функция-программаның процедура – программаадн ерекшелігі мынада:

7- функция бір ғана белгілі мән қабылдайды, функция – программадан алынатын нәтиже біреу;

8-нәтиже функция аты арқылы алынады да, негізгі программада пайдаланылады.

Функция – программаның жазылу түрі:

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

1-мысал. Екі санның қосындысын табаық.

А) Program KR;

Var a:integer;

Procedure KOS (b,c:integer; Var k:integer);

Begin

K:=b+c;

End;

Begin

KOS (15,4,a);

Writeln(‘koc=’,a:2);

End.

B) Program KR;

Var a:integer;

Function KOS (b,c:integer):integer;

Begin

K:=b+c;

End;

Begin

KOS (15,4);

Writeln(‘koc=’,a:2);

End.

Екі программаның нәтижесі бірдей: экранда КОС=19 көрінеді. Сонымен бұл программаларды салыстырғаннан мынаны анықтадық:

9- процедура мен функцияның ұқсастығы – олардың екеуінде де айнымалыларды, белгілерді, тұрақтыларды бейнелеу бөліктері болады;

10- олардың бір-бірінен өзгешелігі процедура – Procedure ал функция Function қызмет сөздері пайдаланылады;

11- процедурада нәтижесі (айнымалы) параметрінің типі процедура атауынан соң тұратын кіші жақша ішінде бейнеленсе, ал функцияда нәтиже үшін арнайы параметр алынбайды, нәтиже (функция мәні) функция атына меншіктеледі, сондықтан функция типі, аргументтер типтері бейнеленген жақша сыртында, қос нүте арқылы көрсетіледі. Мысалы,

Function f (a:real; Var b:real):real;

Function g (var a,b : integer):integer;

Function h(a:integer):char;

12- негізгі программада функцияның мәнін тек функция атауы арқылы пайдаланылады.

X:=x+f(x,y); y:=sin (f(x)/3); немесе while f(x,y)<f(y,x) do x:=f(x,x); Функция мәні символдық бола алатын мүмкіндігін жоғарыдағы һ-функциясын көруге болады.

 

9 Дәріс тақырыбы:

Ақпараттық құрылым. Сызықты тізім.

Элементтердің бірқатар жиынын біріктірудің немесе байланыстырудың ең қарапайым тәсілі – бұл “оларды бір сызыққа созу”, тізім немесе кезек ұйымдастыру. Бұл жағдайда әрбір элементпен келесі элементті көрсететін бір жалғыз сілтемені ғана салыстыру қажет.

Төменде көрсетілген сияқты анықталған Node и Ptr екі типі бар делік. Node типінің әрбір айнымалысы үш компоненттен тұрады, атап айтқанда теңестіру кілтінен (key), келесі элементке сілтемеден (next) және біз осы жерде түсіретін қандай да бір басқа ақпараттан тұруы мүмкін:

TYPE Ptr = ^Node;

Node = RECORD key: INTEGER;

next: Ptr;

data: ...

END;

VAR p, q: Ptr;

 
 

 


Сурет. Тізімнің мысалы.

 

Суретте төбелер тізімі, р айнымалысы берілген бірінші элементке сілтеме берілген. Осындай тізіммен жасауға болатын ең қарапайым операция – оның басына бірқатар элемент қосу. Алдымен Node типті элемент жадыға орналастырылады және оған сілтеме q кейбір көмекші айнымалысын иеленеді. Осыдан кейін сілтемелерге жаңа мән беріледі де операция осымен аяқталады. Бұл былайша программаланады:

Allocate(q, SIZE(Node)); q^.next := p; p := q;

Бұл жерде осы операторлардың реті маңызды екеніне назар аударыңыз.

Элементті тізімнің басына қосу операциясы кез келген тізімді қалай қалыптастыруға болатынын бірден түсіндіреді: бос тізімнен бастау және басына жүйелеп элементтерді қосып отыру. Тұтастай тізім қалытастыру процесін келесідей фрагментпен береміз (байланыстырылатын элементтер саны – п):

p := NIL; (* басында тізім бос *)

WHILE n > О DO BEGIN

Allocate(q, SIZE(Node)); q^.next := p; p := q;

q^.key := n; n := n-1

END;

Бұл тізім құрудың ең қарапайым тәсілі, алайда онда тізімдегі элементтер реті олардың ену ретіне кері болады. Кейбір жағдайларда бұл орынсыз, сондықтан жаңа элементтерді тізімнің басына емес, соңына қосу қажет. Тізімнің соңын барлық тізімді қарай отырып оңай табуға болады, бірақ бұл белгілі бір шығындарды талап ететін өте аңғырт шешім. Соңғы элементті көрсететін q екінші сілтемесін енгізсе жеткілікті. Мұндай әдістің кемшілігі мынада, бірінші болып қосылатын элементтерді қалғандарына қарағанда басқаша өңдеу қажет.

Сілтемені анық пайдалану кейбір операцияларды барынша ықшамдайды, олар басқаша болғанда шиеленісіп кеткен болар еді. Қарапайым операциялардың арасында тізімдерде элементтерді қосу және шығарып тастау (тізімді ішінара өзгерту) және тізімді қарау орындалады. Тізімге қосу операциясын талдаудан бастаймыз.

Тізімнің р сілтемесі көрсететін элементінен кейін q (айнымалы) сілтемесімен берілген элементті қосу қажет деп ұйғарамыз. Төменде бұл үшін орындау қажет сілтемелерге меншіктеу, ал суретте – осы амалдардың нәтижелері берілген:

q^.next := p^.next;

p^.next := q;

Егер көрсетілген p^ элементінен кейін емес, оның алдына қосу талап етілсе, онда байланыстардың бірбағытталған тізбегі жұмысты қиындатуы тиіс сияқты болады, өйткені осының алдындағы элементке “жол” жоқ. Алайда бұл проблема қарапайым түрде шешіледі.

 

 
 

 


Сурет. p^ элементінен кейін тізімге қосу

 

 
 

 


Сурет. p^ элементінің алдына тізімге қосу

 

Сәйкес схема суретте келтірілген (бұл жерде — key жаңа элементінің кілті = 8 деп ұйғарылады):

Allocate(q, SIZE(Node)); q^ := р^;

p^.key := k; p^.next := q;

"Шеберлік тәсіл" мынада, жаңа компонент шын мәнінде р^-ден кейін қосылады, бірақ кейін жаңа компонент пен р^ мәндерін «ауыстырады».

 

 

Сурет. Кейін басқа тізімге енгізе отырып, тізімнен

шығарып тастау

Енді тізімнен шығарып тастау процесін қарастырамыз. р-ден кейінгі белгілі элементті шығарып тастау. Ол шы&


Просмотров 499

Эта страница нарушает авторские права

allrefrs.ru - 2020 год. Все права принадлежат их авторам!