Паскаль жүйесінде функцияларды ұйымдастыру технологиясы
Қазақстан Республикасының білім және ғылым
министрлігі
Факультет : ’’ Инженерлік Экономикалық’’
Курстық
жұмыс
Тақырыбы:’’Паскаль жүйесінде
функцияларды ұйымдастыру
технологиясы ’’
Тексерген:
Орындаған:
Алматы 2008 жыл
І.КІРІСПЕ
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . ..... . . . 3
ІІ.
НЕГІЗГІ БӨЛІМ . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
..... . . 6
2. 1
Қосалқы программалар . . . . . . . . . . .
. . . . . . . . . . .... . . . . 6
2. 2 Процедура . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . ....... . . 7
2.3 Функция . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . ..... . .9
2.4
Функцияның процедурадан
айырмашылығы. . . . . . . .11
ІІІ.
ЕСЕПТІҢ ҚОЙЫЛЫМЫ. . . . . . . . . . . . . . . .
. . . . . . . . . . . . 14
3.1. 1-Есеп
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .14
3.1.2 Берілгені. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .... . .14
3.1.3 Есептің алгоритмі . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .... . .
14
3.1.4 Программала
бөлімі . . . . . . . . . . . . . . . . . . . . . . . . . .
.... . .14
3.2.
2-Есеп . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 16
3.2.2 Берілгені . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .
16
3.2.3
Есептің алгоритмі . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .. . . 16
3.2.4 Программа
бөлімі . . . . . . . . . . . . . . . . . . . . . . . . .
. . .. . . . 16
IV.
ПРОГРАММА ЛИCТИНГІ . . . . . . . . . . . . . .
. . . . . . . . . . . .17
V.
ҚОРЫТЫНДЫ . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .20
VI.
ПАЙДАЛАНЫЛҒАН ӘДЕБИЕТТЕР . . . . . . .
. . . . . . . . . . . 21
І.КІРІСПЕ
Паскаль программалау тілінің алғашқы нұсқасын 1968-1970 жылдары Стэнфорд университетінің информатика кафедрасының профессоры,швейцариялық ғалым Никлаус Вирт жасады.Оны Borland корпорациясының қызметкерлері жетіл- дірді (олардың құрған тілдері Turbo Pascal,Borland және Pascal Object Pascal деп аталады).Delphi жүйесінде Object Pascal программалау тілі пайдаланылады. Turbo Pascal стандартты паскальдың барлық құралдарын қамтитын және жаңа құралдармен толықтырылған,кеңейтілген нұсқасы (біз оны кейде Паскаль деп те атаймыз).
1979 жылы қабылдаған стандартты Паскаль тілінің кейінгі нұсқалары жетілдірілген. Қазіргі дербес компью- терлердің пайда болуына байланысты тілдің Turbo Паскаль деп аталатын нұсқасы жасалды. Қазіргі уақытта бұл жұйе- нің бірнеше нұсқалары бар, соңғы жасалған ең қуаттысы 7.0 нұсқасы болып табылады, бірақ, программалау баста- масын жүйенің 5.5 нұсқасынан бастап үйренген дұрыс.
Ал 1975 жылы стандартты Паскальдің компиляторымен Турбо Паскаль программалау тілі пайда болды. Содан бері Паскаль білімдік, кәсіптік- техникалық мектептерде және жоғарғы оқу орындарында <<бірінші>> программалау тілі ретінде қолданыла бастады. Турбо Паскаль тілін пайдаланудың қарапайымдылығынан пайдаланушылар арасында кең орын ала бастады.
Программалау тілдерін оқыту
қазіргі кездегі маңыз- ды
Ақпаратты
өңдеу жазылған есепті шығару алго- ритмі
бойынша жүзеге асады. Алгоритмді жазудың
бірне- ше тәсілі бар екені белгілі. Алгоритмді
жазу тәсілдерінің ішінде компьютерде
орындалатын программа түріндегі-
оның программалау тілінде жазылуы
ерекше орын алады. Программалау
тілі- комьютерге арналған есеп
шығару алгоритмін жазу үшін
пайдаланылатын
ІІ.НЕГІЗГІ БӨЛІМ
2.1 Қосалқы программалар
Программада белгілі бір қайталанып іс- әрекеттерді, атау бойынша бөлек жазып, атау арқылы бір немесе бірнеше рет іске қосуға болатын программаның бөлігін қосалқы программа деп атайды.
Бағдарлама құрған кезде кейбір нұсқаулар жүйесі орындайтын және белгілі бір нәтиже беретін іс- әрекеттер бағдарламаның орындалу барысында бір немесе бірнеше рет қолданылуы мүмкін. Әрине бұл әрекеттер тобын қанша рет пайдалансақ сонша рет бағдарламамызға қайталап жазуымызға болады, алайда ол тиімді болмас еді. Осы іс- әрекеттерді топтап, бірақ рет жазып, Паскальда көмекші бағдарлама ретінде беруге болады. Қажет кезінде осы қосалқы программаны шақырып, программамыздың кез келген жеріне пайдалана аламыз.
Қосалқы программаларды қолдану арқылы программаларды ықшамдауға болады.
Кез келген
программа жазушы күрделі программаларды
кішігірім іс- әрекеттерге бөліп,
оларды жалпы соңғы нәтижеге
жетуге бейімдеп, жүйелеп қосалқы
программалар тобын жасап, соңынан
оларды негізгі программаға біріктіріп
пайдаланады. Turbo Pascal программалау
тілінде қосалқы программаның екі
түрі қолданылады:
1) процедура
2) функция
Turbo Pascal программалау тілінде айнымалыларды негізгі бөлімде сипаттау түрі – ауқымды айнымалылар деп аталады. Егер айнымалылар қосалқы программада сипатталса , онда олар жергілікті айнымалылар деп аталады. Сондай- ақ негізгі программада қосалқы программаны қолданылатын айнымалыларды нақты айнымалылар деп атайды. Ал қосалқы программаның атауында берілген айнымалылар формальді айнымалылар деп аталады.
Әрбір қосалқы программаның
атауы болады және олар айнымалыларды
сипаттау бөлімінен құралып,
операторлық жақшаларда орналасқан
командалар жиынан тұруы
мүмкін.
2.2 Процедура
Атау берілген операторлар тізбегін Pascal тілінде процедура деп атайды. Кез келген процедура программаға ұқсас түрде жазылады,
яғни олардың тақырыбы және баяндау бөлімі оператор болуы мүмкін.
Процедураның жалпы түрі:
PROCEDYRE
аты (формальдіпарамерлер:
Label
Процедура ішінде
Const
Локальді еұрақты шамаларды
Type
Локальді түрлерді жазу;
Var
Локальді айнымалыларды жазу;
Begin
Процедура денесі жазылады;
End;
Программаның орындалуы негізінде программаның операторларының орындалуынан басталады. Процедура орындалып болған соң оның нәтижесін шығаратын параметрлер процедураға негізгі программадан қай жерден көшті сол жерге беріледі, одан соң негізгі программа орындала береді.
Негізгі программада сипатталған атау негізгі және қосалқы программада да пайдалана алады. Осындай атаулар глобальді атаулар
деп аталады. Қосалқы программада сипаттталған атаулар тек қосалқы программада ғана пайдаланады. Осындай атаулар локальді деп аталады.
Процедуралар
айнымалыларды сипаттау бөлімінен
кейін қажет болған жағдайда
ішкі процедуралар және ішкі
функцияларды сипаттап, оларды
мүмкіндігінше қолдануға болады.
PROCEDURE
PROC _1(A1, B1, …: TYPE_1);
[PROG_1 процедурасында қолданылатын айнымалыларда сипаттау бөлімі]
PROCEDURE
PROC_2(A2, B2, …:TYPE _2);
[PROG_2 процедурасында қолданылатын айнымадыларда сипттау бөлімі]
Begin
PROC_ 2 процедурасының
негізгі бөлігі
End;
.
.
.
Begin
PROC_1 процедурасының
негізгі бөлігі
End;
Процедурада
тек қарапайым айнымалыларды ғана
емес, индексті айнымалыларды (массивтерді)
пайдалануға болады.
Мысал.
Нақты сандар
тізбегі (бір өлшемді кесте)Ai, i=1,n
бе- рілген. осыытізбектегі ең кіші элементті
және оның но- мірін табуға процедураны
пайдаланып программа құрайық.
program BK1;
Type MA=array[1..50] of integer;
Var
A: MA;
M:real;
K:integer;
N:integer;
j:integer;
Procedure MIN;
Var i:integer;
Begin
M:=A[1]; K:=1;
For i:=2 to n do
if A[i]<M then begin M:=A[i]; K:=1
End;
End;
Begin
Writeln (‘n-массивөлшемін енгіз: ‘);
Readln (n);
Writeln (‘массив элем.’’ENTER’’ арқылы енгіз:’);
For j :=1 to n do read (A[i]);
MIN;(*MIN-процедурасын шақыру*);
Writeln;Writeln(‘мин.
Writeln (‘мин. элемент нөмірі K=’,K:3);
End.
2.3 Функция
Басқа да тілдер тәрізді Pascal тілінде де функцияны арнайы программа ретінде жеке жазуға болады. Сондықтан оны қосалқы программа ретінде қарастыра аламыз.
Функцияның процедурадан ерекшелігі мынада:
1) Функция
бір ғана белгілі мән
қабылдайды және функцядан
алынатын нәтиже біреу;
2) Нәтиже
функция аты арқылы алынады
да негізгі программада
қолданылады.
Функцияның
жалпы түрі:
FUNCTION
FUNC_NAME (A1, A2, . . .:TYPE_1): TYPE2;
[процедурада
қолданылатын айнымалыларды сипаттау
бөлімі ]
BEGIN
Процедураның
негізгі бөлігі
END;
Мұндағы:
FUNC_NAME
– функцияның атауы. Функция
атауына бос орын белгісі
қолданылмай символдар тізбегінен
құра алады. Функция атауы әріптен
басталуы тиіс ( мысалы, sum, prl, user 2 ).
A1, A2, . . . –
қосалқы программада
TYPE_1 – айнымалылар типтері ( мысалы: x:integer; y:real; және т. б.);
TYPE2 – функцияның типі;
BEGIN – функцияның басы.
END – функцияның
соңы.
Функция
нақтылы параметрлердің мәндерін
бергеннен кейін өз аты арқылы
шақырылады. Сонымен қатар функцияны
тікелей өрнектің ішінде шақыруға
болады. Функцияның операторлар
бөлімінде бір арнайы меншіктеу
операторы болуы керек. Оның
сол функцияның аты жазылады,
оң жағында нәтиже келтіріледі.
Функцияда есептелген нәтиже
функцияның атына меншіктеледі.
Ал нәтиженің типі функцияның
мәнін тек функция атауы
арқылы пайдаланылады.
1-мысал.
z= 7(3x+4y-1) +5/(3x+4y-1)- 2sinx+10 функциясының мәнін есептеу керек. 3х+4у-1 өрнегінің мәні көмекші программа- function арқылы есептелсін.
Program f;
var x, y, x: real;
function fn(t, p: real):real;
begin fn:=3*t+4*p-1;
end;
begin
write (‘x, y=?’);
readln (x, y);
z :=7*fn(x, y)+5/fn(x, y)-2*sin(x)+10;
write (z);
end.
Мұндағы
у айнымалысына меншіктелген өрнекке
енгізілген fn(x, y)- fn атаулы көмекші
программа- функцияны шақыру. Шақыруды
орындау кезінде компьютер алдымен
x, y айнымалыларының типтерін t, p параметр-
лерінің типтерімен салыстырып, олардың
бірдейлігін тексерген соң, х мәнін t-ге,
y мәнін p-ге меншіктейді (t:=x, p:=y). Одан
әрі, көмекші программаны орындайды да,
есептелген fn мәнін негізгі программадағы
fn шақыруының орнына қояды.
Паскальда Sin, Cos, Arctg тригонометриялық
функциялары ғана берілген, қалғанын
өзіміз көмекші бағдарлама түрінде жазып
алуымызға болады, мысалы:
Function Arcsin (X:Real):Real;
Begin
IF Abs(x)= 1 THEN RCsIN :=0
ELSE ArcSin := ArcTan(X/Sqrt(1-Sqr(x)));
End;
Function ArcCos (X:Real)Real;
Begin
IF X=0 THEN ArcCos :=pi/2
ELSE ArcCos :=ArcTan(Sqrt(1-Sqr(xc))/X);
End;
A> 0 болғандағы A санының X дәрежесін есептеу функциясы:
Function Dareje (A, X:Real): Real;
Begin
Dareje: =Exp(X*Ln(A));
End;
Ондық логартфмді
есептету функциясы:
Function Log10(X:Real):Real;
Begin
Log10: =Ln(X)/Ln(10);
End;
Осылай
кез келген өзімізге қажетті математикалық
функцмялардан формулаларды пайдаланып,
модуль жасап, кітапхана құрып алуымызға
болады.
2.4 Функцияның процедурадан
айырмашылығы
Сонымен
процедура мен функцияны
салыстырғанда олардың мынандай
ерекшіліктері анықталды:
1) Процедура мен функцияның ұқсастығы , олардың екеуінде де айнымалыларды, белгілерді, тұрақтыларды бейнелеу бөліктері болады.
2) Олардың бір – бірінен айырмашылығы процедурада procedure, ал функцияда function қызметші сөздері қолданылады.
3) Процедурада нәтиже параметрінің типі процедура атауынан соң тұратын, жақша ішінде бейнеленсе, ал функцияда нәтиже үшін арнайы параметр алынбайды. Сондықтан функция типі аргументтер, типтері бейнеленген жақша сыртында, қос нүкте арқылы көрсетіледі.
4) Негізгі
программада функцияның мәнін
тек функция атауы
арқылы қолданылады.
Функция тақырыбының процедура тақырыбынан айырмашылықтары:
-тізім соңындағы жабу жақшасынан соң қос нүкте қойылып , одан әрі функция типі жазылады;
- формальді
параметрлер – нақты
Мұнда анықталушы функция (өрнек) мәнін есептеу опраторының жазылуында да өзгешелік бар: өрнек меншіктелетін айнымалының атауы- function тақырыбындағы атаумен бірдей болуы тиіс. Негізгі программаға енгізілетін функцияның шақыру командасы да жеке оператор түрінде емес, sin, cos,т.б. стандартты функциялар сияқты,өрнекке енгізіліп жазылады.
1-мысал.
х = 1.7, х = 3.52, х = 18.7 үшін у = 3х2 + -10
функциясы мәндерінің қосындысын табу керек (s= (x1) + y(x2)+ y(x3)?)
Функцияны пайдаланып, қосындысын табу программасы:
Program mander;
uses crt;
var x1, x2, x3, y1, y2, y3, s:real;
function espt (t:real):real;
begin espt:=3*sqr(t)+sqrt(6*t)-10 end;
begin clrscr;
write(‘x1, x2, x3=?’);
readln(x1, x2, x3);
s: =espt(x1)+espt(x2)+espt(x3);
write(‘s= ‘,s);
end.
Компьютер негізгі программадағы
espt(x1) шақыруын оқып, espt атаулы көмекші
программа- функцияға өтеді де, x1-ді t-ге
меншіктеп, өрнек мәнін есептейді. Есептелген
мәнді негізгі программадағы espt(x1) шақыруының
орнына қояды, тағы сол сияқты.
МЫСАЛЫ:
Процедура
мен функция айырмашылығы мына төменгі
екі санның қосындысын
табу программасынан түсініп
көрейік:
Program EkiCProc;
Uses Crt;
Var
Can 1, Can 2 : Real;
Summe : Real;
Procedure Summ 1 ( Var Sum : Real; Can 1, Can 2 : Real );
Begin
Sum := Can 1 + Can 2
End;
Function Summ 2 ( Can 1, Can 2 : Real):Real;
Begin
Sum := Can 1 + Can 2; {Қосындыны функциямен табу }
End ;
BEGIN
Write (‘Қосындысын табатын екі санды енгіз . . .’);
Read ( Can 1, Can 2);ClrScr;
Sum 1(Summe, Can 1, Can 2); {Қосындыны процедурамен табу }
Writeln (‘ екі сан қосындысы = ‘ , Summe : 5 : 0);
Summe := Summ 2 (Can 1, Can 2 ); { Қосындыны функциямен табу }
Writeln (‘ Екі сан қосындысы = ‘ , Summ 2 (Can 1, Cfn 2 ) :5 :0);
END.
Мысалдан функция процедураның
ерекше бір түрі екені
байқалады, яғни функция
аты шақыруға ғана
пайдалынылмай, оның мәнінің
айнымалысы сияқты да
пайдалануға болады. Сордықтан
оның атын бірден жауабын
беруге де пайдаландық.
Writeln ( ‘ Екі сан қосындысы = ‘ , Summ 2 ( Can 1, Can 2) :5 : 0);
Процедураны шақыру командасына
Summ 1(Summe, Can 1, Can 2)қосымша Summe
айнымалысын екі санның
қосындысын белгілеуге пайдалану
программамызды нақтылай
түсті. Бұл шақыру командасын
функциядағыдай Summe := Summ 2 (Can
1, Can 2); меншіктеу командасы
арқылы жауабын бергізуге
пайдалана алмайды екенбіз.
ІІІ.
ЕСЕПТІҢ ҚОЙЫЛЫМЫ
3.1.
1-Есеп
3.1.1 Берілгені
Пернетақтамен
енгізуді қамтамасыз ететін бүтін сәйкес
келетін екі таңбалы санына функция
жазу керек. Қолданушы кез-келген пернені
басқанда оған сәйкес келетін символ
экранға шығады, егер ол символ сан
болса функция арқылы қолданушы
“Back spac” пернесі мен сандарға өзгертулерді
енгізе алады. Егер қаолданушы бір сан
енгісе онда “Enter” пернесін басқанда
функция өз жұмысын аяқтап және қолданушының
енгізген, процедураға шақырған санын
қайтаруы керек.
3.1.2.Есептің
алгоритмі
Бұл есепте а саны қолданушымен енгізілген сан. GetInt функциясы бір немесе екі, бүтін және тура санды енгізуге арналған. Back space пернесінің коды болып есептеледі. Enter-ді басқан кезде функцияға енгізілген сан қайтарылады.
Var бөлімінде CH, DEC, BUF, n, x,y айнымалыларын
сипатталады. Шартты операторын қолданамыз.
3.1.3. Программалау
бөлімі
1-есеп
uses crt;
Var a:integer;
function GetInt:integer;
const
K_BACK=8;
K_ENTER=13;
VAR
CH:CHAR;
DEC:BYTE;
BUF:ARRAY [1..2] of char;
n:integer;
x,y:integer;
begin
buf[1]:=' '; buf[2]:=' ';
n:=0;
repeat
ch:=readkey;
dec:=ord(ch);
if (ch>='0') and (ch <='9') and (n<2) then
begin
write (ch);
n:=n+1;
buf [n]:=ch;
end
else
if (dec=K_BACK) AND (n>0) then