Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
paskal.pdf
Скачиваний:
89
Добавлен:
17.02.2016
Размер:
544.21 Кб
Скачать

Есептер

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]