Добавил:
bekan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:1-semestr / 7-LEKCIYA
.pdf
7-lekciya. Funkciyalar menen islew. Funkciya anıqlaması. Funkciyalardı
qayta júklew.
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}.
Kelisim boyınsha argumentler
C++ tilinde funkciya shaqırılǵanda ayrım argumentlerdi túsirip qaldırıw
múmkin. Buǵan funkciya prototipinde usı parametrlerdiń kelisim boyınsha
mánislerin kórsetiw arqalı erisiw múmkin. Máselen, tómende prototipi keltirilgen
funkciya hár túrli shaqırıwǵa iye bolıwı múmkin:
//funkciya prototipi
void Pútin_San(int i, bool Bayraq = true, char Blg = ’\n’);
//funkciyanı shaqırıw variantları
Pútin_San(1, false, ‘a’);
Pútin_San(2, false);

Pútin_San(3);
Birinshi shaqırıwda barlıq parametrler sáykes argumentler arqalı mánislerin
qabıl etedi, ekinshi jaǵdayda i parametri 2 mánisin, Bayraq parametri false mánisin
hám Blg ózgeriwshisi kelisim boyinsha „\n‟ mánisin qabıl etedi.
Kelisim boyınsha mánis beriwdiń bir shárti bar - parametrler diziminde
kelisim boyınsha mánis berilgen parametrlerden keyingi parametrler de kelisim
boyınsha mániske iye bolıwı shárt. Joqarıdaǵı mısalda i parametri kelisim boyınsha
mánis qabıl etken jaǵdayda, Bayraq yaki Blg parametrleri mánissiz bolıwı múmkin
emes. Mısal retinde, berilgen sandı kórsetilgen anıqlıqta shıǵarıwshı programmanı
qarayıq. Qoyılǵan máseleni sheshiwde sandı dárejege asırıw funkciyası - pow()
hám jıljıwshı nóqatlı uzın sannan modul alıw fabs1() funkciyasınan paydalanıladı.
Bul funkciyalar prototipi <math.h> baslama faylında jaylasqan (3-qosımshaǵa
qarań):
#include <iostream>
#include <math.h>
void Shıǵarıw(double Numb, double Anıqlıq = 1, bool Bayraq =
true);
int main ()
{
double Mpi = -3.141592654;
Shıǵarıw(Mpi, 4, false);
Shıǵarıw(Mpi, 2);
Shıǵarıw(Mpi);
return 0;
}
void Shıǵarıw(double Numb, double Anıqlıq = 1, bool Bayraq =
true)
{
if(!Bayraq)
Numb = fabsl(Numb);
Numb = (int)(Numb * pow(10, Anıqlıq));
Numb = Numb / pow(10, Aniqliq);
cout << Numb << ‘\n’;
}
Programmada sandı túrli anıqlıqta (Anıqlıq parametri mánisi arqalı) shıǵarıw
ushın hár túrli variantlarda shiǵariw() funkciyası shaqırılǵan. Programma islewi
natiyjesinde ekranǵa tómendegi sanlar shıǵarıladı:
3.1415
-3.14
-3.1

Parametrdiń kelisimi boyınsha beriletuǵın mánisi turaqlı, global ózgeriwshi
yaki qandayda bir funkciya tárepinen qaytarılatuǵın mánis bolıwı múmkin.
Lokal hám global ózgeriwshiler.
Ózgeriwshiler funkciya denesinde yaki onnan sırtta járiyalanıwı múmkin.
Funkciya ishinde berilgen ózgeriwshilerge lokal ózgeriwshiler delinedi. Bunday
ózgeriwshiler yadtaǵi programma steginde jaylasadı hám tek ózi járiyalanǵan
funkciya denesinde ámelga asırıladı. Basqarıw tiykarǵı funkciyaǵa qaytıwı menen
lokal ózgeriwshiler ushın ajıratılǵan yad bosatıladı (óshiriledi).
Hár qanday ózgeriwshi óziniń ámel qılıw aymaǵı hám jasaw waqtı
qásiyetleri menen xarakterlenedi.
Ózgeriwshi ámel qılıw aymaǵı degende ózgeriwshini isletiw múmkin bolǵan
programma aymaǵı (bólegi) túsiniledi. Bul túsinik penen ózgeriwshiniń kóriniw
aymaǵı túsinigi tuwrıdan-tuwrı baylanıslı. Ózgeriwshi ámel qılıw aymaǵınan
shıqqanda kórinbey qaladı. Ekinshi tárepten, ózgeriwshi ámel qılıw aymaǵında
bolıwı, biraq kórinbewi múmkin. Bunda kóriniw aymaǵına ruxsat beriw ámeli «::»
járdeminde kórinbes ózgeriwshige muráját etiw múmkin boladı.
Ózgeriwshiniń jasaw waqtı dep, ol bar bolǵan programma bóleginiń
orınlanıwına ketken waqıt intervalına aytıladı.
Lokal ózgeriwshiler ózleri járiyalanǵan funkciya yaki blok shegarasında
kóriniw aymaǵına iye. Bloktaǵı ishki bloklarda tap usı attaǵı ózgeriwshi
járiyalanǵan bolsa, ishki blokta bul lokal ózgeriwshi de ámel qılmay qaladı. Lokal
ózgeriwshi jasaw waqtı - blok yamasa funkciyanı orınlaw waqtı menen anıqlanadı.
Bul jaǵday sonı bildiredi, túrli funkciyalarda bir-birine ulıwma baylanıslı
bolmaǵan birdey attaǵı lokal ózgeriwshilerdi isletiw múmkin.
Tómendegi programmada main() hám sum() funkciyalarında birdey attaǵı
ózgeriwshilerdi isletiw kórsetilgen. Programmada eki sannıń qosındısı esaplanadı
hám shıǵarıladı:
#include <iostream.h>
//funkciya prototipi
int sum(int a, int b);

int main()
{
//lokal ózgeriwshiler
int x = 1;
int y = 4;
cout << sum(x, y);
return 0;
}
int sum(int a, int b)
{
//lokal ózgeriwshi
int x = a+b;
return x;
}
Global ózgeriwshiler programma tekstinde funkciya anıqlanıwınan sırtta
járiyalanadı hám járiyalanǵan jerinen baslap programma aqırına shekem ámel
qıladı.
#include <iostream.h>
int f1();
int f2();
int main ()
{
cout << f1() << ‛ ‛ << f2() << endl;
return 0;
}
int f1()
{
return x; //kompilyaciya qátesi júz beredi
}
int x = 10; //global ózgeriwshi járiyalanıwı
int f2()
{
return x * x;
}
Joqarıda keltirilgen programmada kompilyaciya qátesi júz beredi, sebebi f1()
funkciya ushın x ózgeriwshisi belgisiz esaplanadı.
Programma tekstinde global ózgeriwshilerdi olar járiyalanǵannan keyin
jazılǵan qálegen funkciyada isletiw múmkin. Sol sebepli, global ózgeriwshiler
programma tekstiniń basında jazıladı. Funkciya ishinen global ózgeriwshige
múráját etiw ushın funkciyada onıń atı menen birdey atta lokal ózgeriwshiler
bolmawı kerek. Eger global ózgeriwshi járiyalanıwında oǵan baslanǵısh mánis
Соседние файлы в папке 1-semestr
