Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5-LEKCIYA.docx
Скачиваний:
1
Добавлен:
27.11.2023
Размер:
962.25 Кб
Скачать

5-LEKCIYA. FUNKCIYALAR. FUNKCIYA ANÍQLAMASÍ. REKURSIV FUNKCIYALAR. FUNKCIYALARDÍ QAYTA JÚKLEW. PAYDALANÍWSHÍ KITAPXANASÍN SHÓLKEMLESTIRIW.

Programma támiynatın jaratıw ámelde qıyın process esaplanadı. Programma dúziwshi programma kompleksin bir pútinliktegi hám onıń hár bir bóleginiń ishki mazmunın hám olardıń sezilmes parıqların esapqa alıwı kerek boladı.

Programmalastırıwǵa sistemalı jandasıw sonnan ibarat, programma dúziwshi aldına qoyılǵan másele aldınnan eki, úsh hám onnan artıq salıstırmalı kishi másele astılarına bólinedi. Óz náwbetinde bul másele astıları da jáne kishi másele astılarına bóliniwi múmkin. Bul process tap mayda máselelerdi ápiwayı standart ámeller járdeminde sheshiw múmkin bolǵansha dawam etedi. Usı jol menen máseleni dekompoziciyalaw ámelge asırıladı.

Ekinshi tárepten, programmalastırıwda sonday processler baqlanadı, onda programmanıń túrli jerlerinde mazmunı tárepten birdey algoritmlerdi orınlawǵa tuwrı keledi. Algoritmniń bul bólekleri tiykarǵı sheshilip atırǵan máseleden ajıratıp alınǵan qandayda bir másele astın sheshiwge arnalǵan bolıp, jeterli dárejede ǵarezsiz mániske (nátiyjege) iye esaplanadı. Misal ushın tómendegi máseleni kóreyik:

Bul mısaldı sheshiwde bólshektiń alımı hám bólimindegi mánisler birdey algoritm menen esaplanadı hám programmada hár bir ańlatpanı esaplaw ushın bul algoritmdi 3 márte jazıwǵa tuwrı keledi. Máseledegi 30-dárejeli kóp aǵzanı esaplaw algoritmin, maselen, Gorner algoritmin bólek, bir nusxada jazıp, oǵan túrli parametrler - bir márte a vektor hám x mánisin, ekinshi mártebe b vektor hám y mánisin, hámde c vektor hám (x+z) mánisleri menen múráját etiw arqalı tiykarǵı máseleni sheshiw múmkin boladı. Funkciyalar qollanılıwınıń jáne bir sebebin tómendegi máselede kóriwimiz múmkin - berilgen sızıqlı teńlemeler sistemasın Gauss, Kramer, Zeydel usıllarınıń birewi menen sheshiw talap etilsin. Bul jaǵdayda tiykarǵı programmanı tómendegi bóleklerge bóliw maqsetke muwapıq bolar edi: teńleme koefficientlerin kiritiw bólegi, sheshiw usılın tańlaw bólegi, Gauss, Kramer, Zeydel usılların ámelge asırıw ushın óz aldına bólekler, nátiyjeni shıǵarıw bólegi. Hár bir bólek ushın óz funkciyalar kompleksin jaratıp, kerek bolǵanda olarǵa bas funkciya denesinen múrájátti ámelge asırıw arqalı bas másele sheshiw paydalı esaplanadı.

Bunday jaǵdaylarda programmanı qolaylı hám paydalı etiw ushın C++ tilinde programma bólegin óz aldına ajıratıp alıp, onı funkciya kórinisinde anıqlaw múmkinshiligi bar.

Funkciya bul - C++ tilinde másele sheshiwdegi eń áhmiyetli elementlerden biri esaplanadı.

Funkciya parametrleri hám argumentler

Programmada isletiletuǵın hár qanday funkciya járiyalanıwı kerek. Ádette funkciyalar járiyalanıwı baslama fayllarda beriledi hám #include direktivası járdeminde programma tekstine qosıladı.

Funkciya járiyalanıwın funkciya prototipi súwreteydi (ayrım jaǵdaylarda signatura delinedi). Funkciya prototipi tómendegi kóriniste boladi:

<qaytarıwshı mánis tipi> <funkciya atı>(<parametrler dizimi>);

Bul jerde <qaytarıwshı mánis tipi>- funkciya islewi nátiyjesinde ol tárepinen qaytaratuǵın mánis tipi. Eger qaytarılatuǵın mánis tipi kórsetilmegen bolsa, kelisim boyınsha funkciya qaytaratuǵın mánis tipi int dep esaplanadı, <parametrler dizimi>

- útir menen ajıratılǵan funkciya parametrleriniń tipi hám atları dizimi. Parametr atın jazbasada boladı. Dizim bos bolıwı da múmkin. Funkciya prototiplerine mısallar:

int almassın(int, int);

double max(double x,double y);

void func();

void shıǵarıw(void);

Funkciya prototipi túsirilip qaldırılıwı múmkin, eger programma tekstinde funkciya anıqlanıwı onı shaqıratuǵın funkciyalar tekstinen aldın jazılǵan bolsa. Biraq bul jaǵday jaqsı usıl esaplanbaydı, ásirese óz-ara bir-birine múráját etiwshi funkciyalar járiyalawda mashqalalar júzege keliwi múmkin.

Funkciya anıqlanıwı - funkciya baslaması hám figuralı qawısqa (‘{‘,}’) alınǵan qandayda bir ámeliy mazmunǵa iye deneden ibarat boladı. Eger funkciya qaytarıwshı tipi void tipinen parıqlı bolsa, onıń denesinde álbette sáykes tiptegi parametrge iye return operatorı bolıwı shárt. Funkciya denesinde birewden artıq return operatorı bolıwı múmkin. Olardıń qálegen birewin orınlaw arqalı funkciyadan shıǵıp ketiledi. Eger funkciyanıń mánisi programmada isletilmeytuǵın bolsa, funkciyadan shıǵıw ushın parametrsiz return operatorı isletiliwi múmkin yáki ulıwma return isletilmeydi. Aqırǵı jaǵdayda funkciyadan shıǵıw – aqırǵı jawılıwshı qawısqa jetip kelgende ámelge asırıladı.

Funkciya programmanıń qálegen bir modulinde tek bir nusxada anıqlanıwı kerek, onıń járiyalanıwı bolsa funkciyanı isletetuǵın modullerde bir neshe márte jazılıwı múmkin. Funkciya anıqlanıwında baslamadaǵı barlıq parametrler atları jazılıwı shárt.

Ádette programmada funkciya belgili bir jumıstı ámelge asırıw ushın shaqırıladı. Funkciyaǵa múráját qılǵanda, ol qoyılǵan máseleni sheshedi hám óz jumısın juwmaqlawında qandayda bir mánisti nátiyje sıpatında qaytaradı. Funkciyanı shaqırıw ushın onıń atı hám onnan keyin qawıs ishinde argumentler dizimi beriledi:

Bul jerde hár bir <argument> - funkciya denesine uzatılatuǵın hám keyin esaplaw processinde isletiletuǵın ózgeriwshi, ańlatpa yamasa turaqlı esaplanadı. Argumentler dizimi bos bolıwı múmkin.

Funkciyalar hám óz denesinde basqa funkciyalardı, ózin de shaqırıwı múmkin. Óz denesinde ózin shaqıratuǵın funkciyalarǵa rekursiv funkciyalar delinedi.

C++ tilindegi hár qanday programmada albette main() bas funkciyası bolıwı shárt. Tap usı main() funkciyasınıń júklewshi tárepinen shaqırılıwı menen programma orınlanıwı baslanadı.

1-súwret. Bas funkciyadan basqa funkciyalardı shaqırıw hám qaytıw

1 – súwrette bas funkciyadan basqa funkciyalardı shaqırıw hám olardan qaytıw sxeması kórsetilgen.

Programma main() funkciyasın orınlawdan baslanadı hám «f1(x,y)» -funkciya shaqırıwǵa shekem dawam etedi hám keyin basqarıw f1(x,y) funkciya denesindegi ámelderdi orınlawǵa ótedi. Bunda Radius parametriniń mánisi sıpatında funkciya x ózgeriwshi mánisin, Symbol parametri sıpatında y ózgeriwshiniń mánisi isletiledi. Funkciya denesi return operatorına shekem orınlanadı. return operatorı basqarıwdı main() funkciyası denesindegi f1() funkciyası shaqırılǵan operatordan keyingi operatorǵa ótiwdi támiynleydi, yaǵnıy funkciyadan qaytıw júzege keledi. Sonnan keyin main() funkciyası operatorları orınlanıwında dawam etedi hám «f2(a,b,c)» - funkciya shaqırılıwı arqalı basqarıw f2() funkciya denesine ótedi hám esaplaw proсessinde sáykes túrde Yes-No sıpatında a ózgeriwshisiniń, count sıpatında b ózgeriwshisiniń hám key sıpatında c ózgeriwshisiniń mánisleri isletiledi. Funkciya denesindegi return operatorı yaki aqırǵı operator orınlaǵannan keyin avtomat túrde bas funkciyaǵa qaytıw ámelge asırıladı.

Kópshilik jaǵdaylarda main() funkciyasınıń parametrler dizimi bos boladı. Eger júkleniwshi programmanı iske túsiriwde buyrıq qatarı arqalı júkleniwshi programma iske túsirilgende oǵan parametrlerdi uzatıw kerek bolsa, main() programması funkciyasınıń sintaksisi ózgeredi:

int main (int argc, char*argv[]);

Bul jerde argc – uzatılatuǵın parametrler sanı, argv[] – bir-birinen punktuaciya belgileri (hám probel) menen ajıratılǵan parametrler dizimin óz ishine alǵan massivke kórsetkish.

Tómende funkciyalardı járiyalaw, shaqırıw hám anıqlawǵa mısallar keltirilgen:

//funkciyalar járiylanıwı

int meniń_funkciyam(int Number, float Point);

char Belgini_oqıw();

void bitti_ornatıw(short Num);

void Ámel_joq(int, char);

//funkciyalardı shaqırıw

result = Meniń_funkciyam(Varb1,3.14);

symb = Belgini_oqıw();

bitti_ornatıw(3);

Ámel_joq(2,Smbl);

//funkciyalardı anıqlaw

int Meniń_funkciyam(int Number, float Point)

{

int x;

...

return x;

}

char belgini_oqıw()

{

char Symbol;

cin >> Symbol;

return Symbol;

};

void bitti_ornatıw(short number)

{

global_bit = global_bit | number;

};

void Ámel_joq(int x, char ch){};

Funkciyanıń programmadaǵı ornın jánede túsinikli bolıwı ushın san kvadratın esaplaw máselesinde funkciyadan paydalanıwdı kóreyik.

Funkciya prototipin baslama.h baslama faylında jaylastıramız:

long San_Kvadratı(int);

Tiykarǵı programmada usı baslama faylın qosıw arqalı San_Kvadratı()funkciya járiyalanıwı programma tekstine kiritiledi:

#include <iostream.h>

#include <sarlavha.h>

int main()

{

int Ózgeriwshi = 5;

cout << San_Kvadratı(Ózgeriwshi);

return 0;

}

long San_Kvadratı(int x)

{

return x * x;

}

Tap usı máseleni baslama faylınan paydalanbaǵan halda funkciya járiyalanıwın programma tekstine jazıw arqalı da sheshiw múmkin:

#include <iostream>

long San_Kvadratı(int);

int main()

{

int Ózgeriwshi = 5;

cout << San_Kvadratı(Ózgeriwshi);

return 0;

}

long San_Kvadratı(int x)

{

return x * x;

}

Programma isleniwinde ózgeris bolmaydı hám natiyje sıpatında ekranǵa 25 sanın shıǵaradı.

Másele. Eki ápiwayı san «egizek» delinedi, eger olar bir-birinen 2 ge parıq qılsa (máselen, 41 hám 43 sanları). Berilgen natural n ushın [n..2n] aralıqtaǵı barlıq egizek» sanlar juplıqları shıǵarılsın. Máseleni sheshiw ushın berilgen k sanınıń ápiwayı san yamasa ápiwayı san emesligin anıqlawshı logikalıq funkciyanı dúziw zárúr boladı. Funkciyada k sanı 2..k/2 ge shekem sanlarǵa bólinedi, eger k bul sanlardıń birewinede bólinbese, ol ápiwayı san esaplanadı hám funkciya true mánisin qaytaradı. Bas funkciyada, berilgen n ushın [n..2n] aralıqtaǵı (n, n+2), (n+1,n+3),…(2n-2, 2n) san juplıqlarınıń ápiwayı sanlar ekenligi tekseriledi hám shártti qanaatlantıratuǵın juplıqlar shıǵarıladı.

Programma kodı:

bool ÁpiwayıSan(unsigned long k);

int main()

{

unsigned long n, i;

unsigned char egizek = 0;

cout << ”n -> ”;

cin >> n;

cout << ’[‘ << n << ”..” << 2 * n << ’]’;

for(i = n; i <= 2 * n - 2; i++)

if(ÁpiwayıSan(i) && ÁpiwayıSan(i + 2))

{

if(!egizek)

cout << ”aralıǵındaǵı egizek ápiwayı sanlar:\n”;

else

cout<<”; ”;

egizek = 1;

cout << ’{‘ << i << ’,’ << i + 2 << ’}’;

}

if(!egizek)

cout << ” aralıǵında egizek ápiwayı sanlar joq.”;

;

else cout << ’.’;

return 0;

}

bool ÁpiwayıSan(unsigned long k)

{

unsigned long m;

for(m = 2; m <= k / 2; m++)

if(k % m == 0)

return false;

return true;

}

Natural n sanı ushın 100 kiritilse, programma tómendegi sanlar juplıqların shıǵaradı:

[100..200] aralıqtaǵı egizek ápiwayı sanlar:

{101,103}; {107,109}; {137,139}; {149,151};

{179,181}; {191,193}; {197,199}.

Соседние файлы в предмете Программирование на C++