- •1. ТУРБО ПАСКАЛЬ ПРОГРАММАЛАУ ОРТАСЫ
- •2.1. Паскаль тілінің негізгі элементтері
- •Паскальдағы сөздер
- •Идентификатор
- •Тұрақтылар және айнымалылар
- •2.2. Берілім типтері
- •Турбо Паскальдағы берілім типтерінің тізбесі
- •Логикалық тип
- •2.4. Амалдар, математикалық функциялар, өрнектер
- •2.5. Программаның құрылымы
- •2.6. Енгізу-шығару процедуралары
- •Экранға шығару форматтары
- •2.7. Қарапайым операторлар
- •2.8. Алгоритмдеудің негізгі құрылымдары
- •2.9. Тізбектеу құрылымды алгоритмдер
- •2.10. Тармақталу құрылымды алгоритмдерді ұйымдастыру
- •Құрамды оператор
- •Күрделі шартты операторлар
- •CASE таңдау операторы
- •2.11. Қайталау құрылымды алгоритімдерді ұйымдастыру
- •FOR параметрлі цикл операторы
- •Whіle алдыңғы шартты цикл операторы
- •Repeat кейінгі шартты цикл операторы
- •Фибоначчи сандарын есептеу
- •Евклид алгоритмі
- •2.12. Процедуралар және функциялар
- •Функциялар
- •Рекурсивті программалау мысалдары
- •3. ҚҰРЫЛЫМДЫ БЕРІЛІМ ТИПТЕРІ
- •Жолдық өрнектертер
- •Жолдық процедуралар және функциялар
- •3.2. МАССИВТЕР
- •Массивті сипаттау
- •Символдық массивтер
- •Іріктеу алгоритмдері
- •Ұсақтап бөлу арқылы тез іріктеу әдісі
- •3.3. ЖИЫНДАР
- •Жиындарға қолданылатын амалдар
- •3.4 ЖАЗБАЛАР
- •Типті сипаттау
- •Сатылы жазбалар
- •Файлдық типтер және айнымалылар
- •Сыртқы файлды программамен байланыстыру
- •Файлдан оқу
- •Файлға жазу
- •Файлды толықтыру
- •Мәтіндік файлдар
- •Қолданылған әдебиеттер
Есептер
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 бойынша қайталамасыз теру санын есептейтін программа құру керек.
Қайталамасыз теру саны мына формула бойынша есептеледі:
Cnk = |
n! |
|
k!( n − k )! |
||
|
Белгілеулер:
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 do |
|
rez := 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 do rez := rez * i; factorial := rez;
End;
Begin
52
Writeln(‘Введите n и k для подсчета числа Ckn : ’);
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 айнымалыларына меншіктеледі. |
|||
Бұл программаның оындалуын схема түрінде бейнелейік: |
|||
Program Example_fact |
|
|
|
n |
5 |
Function factorial |
|
k |
3 |
n |
5 |
a1 |
- |
i |
|
a2 |
- |
|
120 |
a3 |
- |
|
|
c |
- |
|
|
a1 := factorial(n) |
|
Begin |
|
|
End; |
||
a2 := factorial(k) |
|
||
a3 := factorial(n-k) |
|
|
|
c := a1 Div (a2*a3) |
|
|
|
Мысал |
|
|
|
Натурал санның цифрларының санын есептейтін функция жазу |
|||
керек. Сол функцияны қолданып, берілген екі санның цифрларының |
|||
артықтыған анықтау қажет. |
|
|
|
Шешімі |
|
|
|
Ол үшін сан нөлге тең болғанға дейін, соңғы цифрларын |
|||
жекелеп алып санау керек. Санағыштың мәнін цикл сайын 1-ге өседі |
|||
(алғашқы мәні – 0). |
|
|
|
Онда мынадай функцияны сипаттауға болады: |
|||
Function Quantity(x : Longint) :Byte; |
|
||
Var k : Byte; |
{k –санағышты сипаттау} |
||
Begin |
|
{санағыштың алғашқы мәні} |
|
k := 0; |
|||
While x <> 0 do |
{сан нөлге тең болғанға дейін} |
||
Begin |
{санағыш мәні 1-ге өседі} |
||
|
Inc(k); |
||
|
x := x Div 10; |
{санның соңғы цифры «кесіледі} |
End; |
{функцияның атына нәтиже } |
Quantity := k; |
|
End; |
{меншіктеледі} |
Енді осы функцияны пайдаланып, берілген екі санның цифрларының санының артықтыған анықтайтын программа құрайық:
Program Example_Quan;
54
Var n1, n2 : Longint;
k1, k2, Byte;
Function Quantity(x : Longint) :Byte;
Var k : Byte;
Begin
k := 0; |
|
While x <> 0 do |
|
Begin |
|
Inc(k); |
|
x := x Div 10; |
|
End; |
|
Quantity := k; |
|
End; |
|
Begin |
{сандарды енгізу} |
Writeln(‘Введите два числа ’); |
|
Readln(n1, n2); |
{1-ші санның цифрлар саны} |
k1 := Quantity(n1); |
|
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