Курстық жұмыс: Информатика | Процедуралар және түрлерімен сипаты
Мазмұны
Кіріспе
1. Процедуралар және түрлерімен сипаты
2. Процедураға мысал
3. Функциялар және олардың түрлерімен сипаты
4. Функцияларға мысал
5. Процедуралар мен функциялардың бір – бірімен айырмашылығы
6. мысалдар
Қорытынды
Процедуралармен функциялардың қолданылуы
Қолданылған әдебиеттер
1. Процедура және олардың түрлері мен сипаты.
Кез – келген программалық бірліктен оператор арқылы шақырып пайдалануға болатын жеке программалық бөлікті — процедура деп айтады.
Кейбір есептеу процестерінде оның белгілі бір бөлігін рет әр түрлі мәндерге сәйкес қайталап есептеуге тура келеді. Мәселен , х2 + рх + q = 0 теңдеуің p және q айнымалылардың әр түрлі мәнджері үшін шешу қажет болсын. Мұнда біз теңдеу дискриминантының түріне қарап нақты немесе комплекс түбірлерін анықтайтын екі мәнді табамыз. Әрине бұл мәндер p және q айнымалыларды қандай болса да белгілі бір формуламен анықтайды. Егер осындай теңдеулерді шешу күрделі есептеу процестерінде бірнеше рет кездесетін болса, онда программаның көлемін ұлғайтпау жәнге трансляцияға кететін уақытты үнемдеу, сондай – ақ трансляцмядан алынған жұмыс программасы көлемінің шағын болуы үшін теңдеуі шешудің бөлек ішкі программасын, яғни процедурасын құрайды.
Параметрсіз процедура. Біз процедура сипатында бірнеше формальды параметрлердің кейбіреулері нақты мәндер қабылдауы мүмкіндігін айтқан болатынбыз. Ал кейбір жағдайларда процедураны шақыру тек бір ғана өздерінің сандық мәндерін өзгертіп отыратын нақты параметрлер арқылы жүргізіледі. Міне, мұндай жағдайда формальды параметрлерді пайдаланудың құндылығы кемиді. Сондықтан да АЛГОЛ тілінде параметрсіз процедураны пайдалану ұғымы пайда болған.
Параметрсіз процедураның тақырыбы.
Procedure p
деп жазылады. Мұндағы Р – идентификатор.Процедураны шақыру қажет жерге тек осы идентификаторды келтіру болып табылады, яғни нақты параметрлері болмайды.
Параметрсіз процедура денесінде глобальды және локальданған объектілер ғана болады. Ал бастапқы шамалардың мәндерін процедура денесіне беру глобальды аынымалылардың идентификаторлары атқарады. Параметрсіз процедураны шақыру алдыңда бастапқы шамалардың ролін атқаратын глобальды идентификаторларға мәндер қабылданған болуы тиіс. Процедураның орындалуы нәтижесінде табылған мәндер глобальды параметрлерге қабылданады да, сонан соң келесі жазылған операторларда пайдаланады.
Б і р і н ш і м ы с а л . ЭВМ – ге I, m, n үш оң сандар жиыны енгізілген. Осы үш санға сәйкес кесінділер арқылы үшбұрыштар тұрғызу мүмкіндігін анықтау керек.
Бұл есепті шешу үшбұрыштың кез – келген екі қабырғасының қасындысы үшінші қабырғасынан үлкен деген қағиданы тексерудің процедурасын бір рет жасап, сонан соң қажетті жерге оны пайдалана беруге болады. Тек процедураны шақырар алдыңда жаңа үш мән енгізілуі керек . Осы есепті шешудің 50 түрлі үш сан жиынтықтарына арналаған программасына жасайық:
Begin real l, m, n; Boolean R;
Procedure YBR; R : =l< m + n ^ m < l + n ^ m< l +m;
Integer I, N; N:=50; for:=1 step 1 unfil N do
Begin енгізу (l, m, n); YBR қырытындылау (R) end
End
Параметрсіз процедуралар үшін де локальды және глобальды объектілер байланысты процедура денесінің модификациялануы және процедура операторының орындалуы туралы ережелер түгелімен сақөталған. Параметрсіз функциялық процедурада сәйкес түрде анықталады. Негізгі айырмашылығы : көрсеткіші идентификатор түрде келтіріледі және өрнектерге қарапайым айнымалы сияқтя болып қатысады.
Е к і н ш і м ы с а л . Екі материалдық нүктенің қозғалысын сипаттайтын прорамманың әр жерінде екі нүктенің ара қашықтығын r = (x1-x2)2+(y1-y2)2+(z1-z2)2 формыласы арқылы есептеу керек болсын.
Ш е ш у і . Ол үшін программаының басында real procedure d; d:= SQRT (X1+X2)2+(Y1-Y2)2+(Z1-Z2)2 сипатын орналастырып, сонан соң арифметикалық өрнектердің әр жерінде d идентификаторын әзір есептелген мән ретінде пайдалана беруге болады. Мысалы:
U:=2*d+3; Y2:=Y2+n; v:= d-5
операторлары орындалғанда d мәні пайдаланып тұр.
Рекурсивті процедуралар . АЛГОЛ тілінде ашық түрде процедура денесінде осы процедураның өзің шақырауға, сондай – ақ процедура идентификаторын осы процедураны шақырғанда нақты параметр ретінде пайдалануға болады. Мұндай мүмкіндіктер процедураның рекурсивтенуің туғызады.
Рекурсивті процедуралар деп — процедура денесінде осы процедураның өзі тікелей немесе басқа процедура арқалы шақырылуын айтады. Рекурсивті процедура мысалы ретінде n санының факториал есептеуге арналған өте ықшам жазылған функциялық процедураны алуға болады:
Integer procedure factorial(n); value n;
Integer n; factorial := if n=1 then 1 else
n X factorial (n-1)
Егер n=1 болса, онда процедура денесінде осы процедура шақырылады. Егер n=2 болса, онда factorial (2) алгоритмінің жазылуына сәйкес 2Хfaktorial(1)болып, яғни 2Х1!=2!ретінде анықталады. Ал n! есептеу үшін factorial(n) функциялық процедура n рет шақырылады. Өйткені есептеу процесі ең сонынан басталады., яғни n санына faktorial (n-2) көбейтілуі тиіс, ал factorial(n-1) табу үшін N-1 саны faktorial(n-2)көбейтілуі тиіс, тағы сол сияқты, ең ақырында factorial (1) – ге дейін халғаса береді.
Бірақ факториалды осылай есептеу тиімсіз. Сондықтан жоғарыдағы процедураны цикл операторын енгізіп жасаған қолайла.
Integer procedure factorial(n); value n;
Integer n; begin I, N; N:=1
for:=1 step 1 unfil N do
N:=NX1; factorial:=N
End
Бұл процедурада рекурсивті түрле шақыру жоқ, тек факториал итеритивті түрде есептелген. Соңғы процедураға сәйкес табылатын машиналық жұмысшы программаның көлемі рекурсивті процедураға сәйкес қарағанда анағұрлым шағын. Алайда рекурсивті процедураларды пайдалану тиімсіз деген қорытынды тумайды. Өйткені кейбір есептеу процестерінде , әсіресе бір тілдеаудару сияқты есептеулерде рекурсивті процедураларды пайдалану арқылы тиімді жұмыс программалары құрылады.
Рекурсивті процедуралар мен процедураны рекурсивті шақыру АЛГОЛ – да программаны тұжырымды және қысқа түрде жазуға мүмкіндік береді.
Процедураның сипатталуы.
Процедураны сипаттау оның тақырыбынан басталады:
Procedure (< параметрлері>);
Мұнда
Аты – процедураға берілетін ат (идентификатор),
Параметрлері – тпитері көрсетілген формальды параметрлер (айнымалылар) тізімі.
Процедура тақырыбынана кейін сипаттаулар бөлімі , сонан кейін операторлар бөлімі жазылып , ең сонынан end қызметші сөзінен кейін нүлтелі үтір қойылады. Процедураның сипаттаулар бөлімінде оған қажет басқа ішлі программалар сипатталуы мүмкін. Процедураны шақыру процедура операторының көмегімен жүзеге асады.
Процедураны шақыру . Процедура денесіндегі операторлар процедура шақылырған жерде орындалады. Процедураның шақыру формальды параметрлерді нақты параметрлермен ауыстырууболып табылады.Бұлконструкцияны процедура операторы деп атайды. Процедура сипатындағы формальды параметрлер саны процедура операторындағы нақты параметрлер сонымен бірдей болуы тиіс. Жоғарыдағы мысалда келтірілген процедура.
SIMP (A, B, H, EPS, S1)
Түрінде шақырылады. Мұнда A, B, H, EPS, S1 – нақты параметрлер және олар A, B, H, EPS, S1 – формальды парамерлерге сәйкес алынған. Нақты параметрлердің мәндері процедура денесіндегі есептеулерге қатысатын бастапқы мәндер немесе сол есептеулер нәтижесінде пайда болатын нақты деректер.
Әрбір формальды параметр идентификатор, ол нақты параметрсіз өрнек, жол, сол блок ішінде шақырылған басқа бір процедура, массив немесе ауыстырғыш идентификаторының бірі бола алады. Нақты параметрлер тізімі араларына үтір қойылып, бірінің соңына бірі жазылған нақты параметрлерден тұрады. Енді х2 + рх + q = 0 квадрат теңдеуінің түбірлерін есептеудің процедурасын келтірейік
Procedure КВТ (а, в, с. х1,х2);
Begin х1:=(-b + sqrt (b2-4*a*c)/(2*a);
X2:= (-b + sqrt (b2-4*a*c)/(2*a);
End;
Егер екә рет есептелетін квадрат түбірдіжкек айнымалымен белгілесек , ондап пролцедура денесіне құрамды оператор емес блок болып шығады.
Procedure КВТ (а, в, с. х1,х2);
Begin real d; d:= sqrt (b2-4*a*c)/(2*a);
х1:=(-b +d)/(2*a);
X2:= (-b –d)/(2*a);
End;
Процедураға мысалдар.
1 – есеп . Т матрицасының элементтерін енгізетін процедура жазыңдар .
Процедураны сипаттауды былай құрастыруға болады:
PROCEDURE TAB (VAR L, K: INTEGER);
VAR I,J:INTEGER;
BEGIN
FOR I:=1 TO L DO BEGIN
FOR I:=1 TO K DO BEGIN
WRITE(T[‘,I,’,’,J,’]=’);
READ(T[I,J]) END;
WRITELN END;
END
Бұл сипаттауда L мен K — INTEGER типіндегі фармальды параметрлер ,ал I мен J – локальдіпараметрлер, олар сол процедураның ішінде ғана қолданылады.
PROGRAM PG9_1;
CONST U=100;
VAR N, M: INTEGER;
T:FRRFY [1…U,1…U]OF INTEGER ;
PROCEDURE TAB (VAR L, K: INTEGER);
VAR I,J:INTEGER;
BEGIN
FOR I:=1 TO L DO BEGIN
FOR I:=1 TO K DO BEGIN
WRITE(T[‘,I,’,’,J,’]=’);
READ(T[I,J]) END;
WRITELN END;
END
BEGIN
WRITELN(‘матрица өлшемін енгіз N x M’);
WRITE (‘N=’); READ(N);
WRITE (‘M=’); READ(M);
TAB(N, M)
END
Есепті шешу алгоритмі:
1. Программа денесін айнымалыларды сипаттаудан бастаймыз.
2. ТАВ процедурасын сипаттаймыз.
3. Матрицаның жолдарымен бағандарын анықтайтын N мен M натурал сандарын енгіземіз.
4. Фактілі параметрлі N және M болатын TAB(N, M) процедурасын шақырамыз.
5. Программа жұмысын анықтаймыз.
Айнымалылар:
1. ТАВ процедурасында:
Т – енгізілетінматрица (глобалды айнымалы);
I, J – матрица өлшемі (глобалды айнымалы);
2. Негізгі программа :
Т – енгізілетінматрица (глобалды айнымалы);
N, M – матрица өлшемі (глобалды айнымалы);
2 – есеп . Т матрицасының элементтерін енгізетінжәне жауапқа шығаратын процедура жазыңдар……