Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Joqari darejeli programmalastiriwda C++ Last

.pdf
Скачиваний:
9
Добавлен:
03.12.2023
Размер:
2.03 Mб
Скачать

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.h> #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);

71

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.

5.3. 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ı.

72

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 ()

{

73

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 berilmegen bolsa, olardıń mánisi 0 esaplanadı. Global ózgeriwshiniń ámel qılıw aymaǵı onıń kóriniw aymaǵı menen ústi-ústine tusedi (birdey).

Sonı aytıp ótiw kerek, tájiriybeli programma dúziwshiler múmkinshiligi barınsha global ózgeriwshilerdi isletpewge háreket etedi, sebebi bunday ózgeriwshiler mánisi programmanıń qálegen jerinen ózgertiw qáwpi barlıǵı sebepli programma islewinde mazmunı tárepten qáteler júzege keliwi múmkin. Bul pikirimizdi tastıyqlaw ushın mısal kóreyik:

#include <iostream.h>

//global ózgeriwshi járiyalanıwı

int test = 100;

void Shıǵarıw(void);

int main()

{

//lokal ózgeriwshi járiyalanıwı

74

int test = 10;

//global ózgeriwshi shıǵarıw funkciyasın shaqırıw

Shıǵarıw();

cout << ”Lokal ózgeriwshi: “ << test <<’\n’; return 0;

}

void Shıǵarıw(void)

{

cout << ”Global ózgeriwshi: “ << test <<’\n’;

}

Programma basında test global ózgeriwshisi 100 mánisi menen járiyalanadı. Keyin, main() funkciyasında test atı menen lokal ózgeriwshisi 10 mánisi menen járiyalanadı. Programmada Shıǵarıw() funkciyasına múráját etilgende, tiykarǵı funkciya denesinen waqtınsha shıǵıladı hám natiyjede main() funkciyasında járiyalanǵan barlıq lokal ózgeriwshilerge múráját etiw múmkin bolmay qaladı. Sol sebepli, Shıǵarıw() funkciyasında global test ózgeriwshisiniń mánisi shıǵarıladı. Tiykarǵi programmaǵa qaytılǵannan keyin, main() funkciyasındaǵı lokal test

ózgeriwshisi global test ózgeriwshisin «jasıradı» hám lokal test ózgeriwshiniń mánisi shıǵarıladı. Programma islewi nátiyjesinde ekranǵa tómendegi nátiyjeler shıǵarıladı:

Global ózgeriwshi: 100

Lokal ózgeriwshi: 10

5.4. :: ámeli.

Joqarıda belgilep ótilgenindey, lokal ózgeriwshi járiyalanıwı tap sonday attaǵi global ózgeriwshini «jasırad» hám bul orınnan global ózgeriwshige múráját etiw múmkinshiligi bolmay qaladı. C++ tilinde bunday jaǵdaylarda da global ózgeriwshige múráját etiw múmkinshiligi saqlanıp qalınǵan. Bunıń ushın «kóriniw aymaǵına ruxsat beriw» ámelinen paydalanıw múmkin hám ózgeriwshi aldına eki noqat – «::» qoyıw kerek boladı. Mısal retinde tómendegi programmanı keltiremiz:

#include <iostream.h>

//global ózgeriwshi járiyalanıwı

75

int ózg = 5; int main()

{

//lokal ózgeriwshi járiyalanıwı int ózg = 70;

//lokal ózgeriwshini shıǵarıw cout << ózg << ‘/n’;

//global ózgeriwshini shıǵarıw cout << :: ózg << ’/n’; return 0;

}

Programma islewi nátiyjesinde ekranǵa aldın 70 hám keyin 5 sanları shıǵadı.

5.5. Yad klassları

Ózgeriwshilerdiń kóriniw aymaǵı hám ámel etiw waqtın anıqlawshı ózgeriwshi modifikatorları bar (5.1-tabica)

5.1-tablica. Ózgeriwshi modifikatorları

 

Modifikator

 

Qollanılıwı

 

 

Ámel qılıw

 

Jasaw dáwiri

 

 

 

 

 

aymaǵı

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

auto

 

lokal

 

 

blok

 

 

waqtınsha

 

 

 

 

 

 

 

 

 

 

 

 

 

register

 

lokal

 

 

blok

 

 

waqtınsha

 

 

 

 

 

 

 

 

 

 

 

 

 

exteru

 

global

 

 

blok

 

 

waqtınsha

 

 

 

 

 

 

 

 

 

 

 

 

 

static

 

lokal

 

 

blok

 

 

barqulla

 

 

 

 

 

 

 

 

 

 

 

 

 

global

 

 

fayl

 

 

barqulla

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

volatile

 

global

 

 

fayl

 

 

barqulla

 

 

 

 

 

 

 

 

 

 

 

 

 

Avtomat

ózgeriwshiler.

auto

modifikatorı

lokal

ózgeriwshiler

járiyalanıwında

isletiledi. Ádette

lokal

ózgeriwshiler

 

járiyalanıwında bul

modifikator kelisim boyınsha qollanıladı hám sol sebepli ámelde onı jazbaydı.

#include <iostream.h>

int main()

{

auto int X = 2; //int X = 2; menen ekvivalent

cout << X;

76

return 0;

}

auto modifikatorı blok ishinde járiyalanǵan lokal ózgeriwshilerge qollanıladı. Bul ózgeriwshiler bloktan shıǵıwı menen avtomat túrde joq bolıp ketedi.

Registr ózgeriwshiler. register modifikatorı kompilyatorǵa, kórsetilgen ózgeriwshini processor registrlerine jaylastırıwǵa háreket etiwdi buyıradı. Eger bul háreket nátiyje bermese ózgeriwshi auto tipindegi lokal ózgeriwshi sıpatında ámel qıladı.

Ózgeriwshilerdi registrlarda jaylastırıw programma kodın orınlaw tezligi boyınsha optimallastıradı, sebebi processor yadındaǵı berilgenlerge salıstırǵanda registrdegi mánisler menen anaǵurlım tez isleydi. Biraq registrlar sanı sheklengenligi ushın hámme waqıtta ózgeriwshilerdi registlarda jaylastırıwdın ilajı bolmaydı.

#include <iostream.h> int main()

{

register int Reg;

...

return 0;

}

register modifikatorı tek ǵana lokal ózgeriwshilerge salıstırmalı qollanıladı, global ózgeriwshilerge qollaw kompiliyaciya qáteligine alıp keledi.

Sırtqı ózgeriwshiler. Eger programma bir neshe modulden ibarat bolsa, olar qandaydur ózgeriwshi arqalı ózara mánis almasıwı múmkin (fayllar arasında). Bunıń ushın ózgeriwshi qaysıdur modulde global tárizde járiyalanadı hám ol basqa faylda (modulde) kóriniwi ushın ol jerde extern modifikatorı menen járiyalaw kerek boladı. extern modifikatorı ózgeriwshiniń basqa faylda járiyalanǵanlıǵın bildiredi. Sırtqı ózgeriwshiler isletilgen programmaǵa mısal.

//baslama.h faylında

void Bayraq_Almassın(void);

//modul_1.cpp faylında

bool Bayraq;

77

void Bayraq_Almassın(void){Bayraq = !Bayroq;} //másele.cpp faylında

#include <iostream.h> #include <baslama.h> #include <modul_1.cpp> extern bool Bayraq; int main()

{

Bayraq_Almassın(); if(Bayraq)

cout << ”Bayraq TRUE” << endl;

else

cout << ”Bayroq FALSE” << endl; return 0;

}

Aldın baslama.h faylında Bayraq_Almassın() funkciya baslaması járiyalanadı, keyin modul_1.cpp faylında sırtqı ózgeriwshi járiyalanadı hám Bayraq_Almassın() funkciyanıń denesi anıqlanadı hám aqırında másele.cpp faylında Bayraq

ózgeriwshisi sırtqı etip járiyalanadı.

Statikalıq ózgeriwshiler. Statikalıq ózgeriwshiler static modifikatorı menen járiyalanadı hám óz qásiyetine bola global ózgeriwshilerge uqsaydı. Eger bul tiptegi ózgeriwshi global bolsa, onıń ámel qılıw aymaǵı – járiyalanǵan orınnan programma tekstiniń aqırına shekem boladı. Eger statikalıq ózgeriwshi funkciya yamasa blok ishinde járiyalanatuǵın bolsa, ol funkciya yamasa blokqa birinshi kiriwde inicializaciya etiledi. Ózgeriwshiniń bul mánisi funkciya keyingi shaqırılǵanında yamasa blokqa qayta kiriwde saqlanıp qaladı hám bul mánisti ózgertiw múmkin. Statikalıq ózgeriwshilerdi sırtqı dep járiyalap bolmaydı.

Eger statikalıq ózgeriwshi inicializaciya etilmegen bolsa, onıń birinshi múrájáttaǵı mánisi 0 esaplanadı.

Mısal retinde, qaysıdur funkciyanı neshe márte shaqırılǵanlıǵın anıqlaw máselesin kóreyik:

#include <iostream.h>

78

int Sanaǵısh(void); int main()

{

int nátiyje;

for(int i = 0; i < 30; i++) nátiyje = Sanaǵısh();

cout << nátiyje; return 0;

}

int Sanaǵısh(void)

{

static short counter = 0;

...

counter++; return counter;

}

Bul jerde tiykarǵı funkciyadan counter statikalıq ózgeriwshige iye Sanaǵısh() funkciyası 30 márte shaqırıladı. Funkciya birinshi márte shaqırılǵanda counter

ózgeriwshige 0 mánisin qabıl etedi hám onıń mánisi birge artqan halda funkciya mánisi sıpatında qaytarıladı. Statikalıq ózgeriwshiler mánisleriniń funkciyanıń bir shaqırılıwınan ekinshisine saqlanıp qalınıwı sebepli, keyingi hár bir shaqırıwlarda counter mánisi birewge artıp baradı.

Máselen. Berilgen belgisiz (+,-) pútin sannıń barlıq ápiwayı bóliwshileri anıqlansın. Máseleni sheshiw algoritmi tómendegi tákirarlanıwshı processten ibarat boladı: berilgen san ápiwayı sanǵa (1-qádemde 2 ge) bólinedi. Eger qaldıq 0 bolsa, ápiwayı san shıǵarıladı hám bóliniwshi sıpatında bólinbe alınadı, basqa jaǵdayda náwbettegi ápiwayı san alınadı. Tákirarlaw náwbettegi ápiwayı san bóliniwshige teń bolǵansha dawam etedi.

Programma teksti:

#include<iostream.h>

#include<math.h>

int Náwb_ápiwayı();

int main()

79

{

unsigned int n, p;

cout << ”\nn mánisin kiritiń: ”; cin >> n;

cout << "\n1";

p = Náw_ápiwayı(); while(n >= p)

{

if(n % p == 0)

{

cout << "*" << p; n = n / p;

}

else p = Náwb_ápiwayı();

}

return 0;

}

int Náwb_ápiwayı()

{

static unsigned int ápiwayı = 1; for(;;)

{

ápiwayı++;

short int awa_ápiwayı = 1;

for(int i = 2; i <= ápiwayı / 2; i++) if(ápiwayı % i == 0)

awa_ápiwayı = 0; if(awa_ápiwayı)

return ápiwayı;

}

return 0;

}

Programmada náwbettegi ápiwayı sandı jaratıw funkciya kórinisinde ámelge

asırılǵan. Náwb_ápiwayı() funkciyasınıń hár shaqırılıwında aqırǵı ápiwayı sannan

80