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

Joqari darejeli programmalastiriwda C++ Last

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

enum Sanlar2 {eki = 2, tórt = eki * 2};

Turaqlınıń mánisleri teris san bolıwı da múmkin:

enum Sanlar3 {minus2 = -2, minus1, nol, bir};

2.6. Tipti basqa tipke keltiriw

C++ tilinde bir tipti basqa tipke keltiriwdiń áshkar hám áshkar emes jolları

bar.

Ulıwma alǵanda, tipti basqa tipke áshkar emes keltiriw ańlatpada hár túrli tiptegi ózgeriwshiler qatnasqan jaǵdaylarda ámel qıladı (aralas tipler arifmetikası). Ayrım jaǵdaylarda, ásirese tayanısh tipler menen baylanıslı tipke keltiriw ámellerinde qátelikler júzege keliwi múmkin. Máselen, esaplaw nátiyjesindegi sannıń yadtan waqıtınsha iyelegen ornı uzınlıǵı, onı ózlestiretuǵın ózgeriwshi ushın ajıratılǵan orın uzınlıǵınan úlken bolsa, mániske iye razryadlardı joǵaltıw jaǵdayı júz beredi.

Áshkar túrde tipke keltiriwde, ózgeriwshi aldına qawıs ishinde basqa tip atı jazıladı:

#include <iostream.h>

 

using namespace std;

 

int main()

 

 

{

 

 

int Integer_1 = 54;

 

int Integer_2;

 

float Floating = 15.854;

 

Integer_1

= (int)Floating;

//áshkar keltiriw;

Integer_2

= Floating;

//áshkar emes keltiriw;

cout << “Taza Integer(Áshkar):“ << Integer_1 << ”\n”; cout << “Taza Integer(Áshkar emes): “<<Integer_2<<”\n”; return 0;

}

Programma nátiyjesi tómendegi kóriniste boladı:

Taza Integer(Áshkar): 15

Taza Integer(Áshkar emes): 15

21

Másele. Berilgen belginiń ASCII kodı shıǵarılsın. Másele belgi tipindegi

mánisti áshkar túrde pútin san tipine keltirip shıǵarıw arqalı sheshiledi.

Programma teksti:

#include <iostream.h> using namespace std; int main()

{

unsigned char A;

cout << "Belgini kiritiń:"; cin >> A;

cout << '\''<<A<<"'-belgi ASCII kodi="<<(int)A<<'\n'; return 0;

}

Programmanıń

Belgini kiritiń:

sorawına

A <enter>

ámeli orınlansa, ekranǵa

'A'-belgi ASCII kodi=65

qatarı shıǵarıladı.

22

III Bap. Ańlatpalar hám operatorlar

3.1. Arifmetikalıq ámeller

Berilgenlerdi qayta islew ushın C++ tilinde ámellerdiń júdá kóp toplamı anıqlanǵan. Ámel - bul qandayda bir háreket bolıp, ol bir (unar) yamasa eki (binar) operandlar ústinde orınlanadı, esap nátiyjesi onıń qaytarıwshı mánisi esaplanadı.

Tayanısh arifmetikalıq ámellerge qosıw (+), alıw (-), kóbeytiw (*), bóliw (/) hám bóliw qaldıǵın alıw (%) ámellerin keltiriw múmkin.

Ámeller qaytaratuǵın mánislerdi ózlestiriw ushın mánis beriw ámeli (=) hám onıń túrli modifikaciyaları isletiledi: qosıw, mánis beriw menen (+=), alıw, mánis beriw menen (-=), kóbeytiw, mánis beriw menen (*=), bóliw, mánis beriw menen (/=), bóliw qaldıǵın alıw, mánis beriw menen (%=) hám basqalar. Bul jaǵdaylardıń ulıwma kórinisi:

<ózgeriwshi> <ámel> = <ańlatpa>;

Tómendegi programma tekstinde ayrım ámellerge mısallar keltirilgen.

#include<iostream.h> using namespace std; int main()

{

int a =

0, b = 4, c = 90;

char z = ’\t’;

 

a = b;

 

 

 

cout << a

<< z;

// a = 4

a = b + c

+ c + b;

 

cout << a

<< z;

// a = 4 + 90 + 90 + 4 = 188

a = b - 2;

 

 

cout << a

<< z;

// a = 2

a = b * 3;

 

 

cout << a

<< z;

// a = 4 * 3 = 12

a = c / (b + 6);

 

cout << a

<< z;

// a = 90 / (4 + 6) = 9

cout << a

% 2 << z;

// 9 % 2 = 1

 

 

 

23

a += b;

 

 

cout << a << z;

// a = a + b = 9 + 4 = 13

 

a *= c - 50;

 

 

cout << a << z;

// a = a*(c-50)=13*(90-50)=520

a -= 38;

 

 

cout << a << z;

// a = a – 38 = 520 – 38

= 482

a %= 8;

 

 

cout << a << z;

// a = a % 8 = 482 % 8 =

2

return 0;

 

 

}

Programma orınlanıwı nátiyjesinde ekranda tómendegi sanlar qatarı payda boladı.

4

188

2

12

9

1

13

520

482

2

3.2. Ańlatpa túsinigi

C++ tilinde ańlatpa – ámeller, operandlar hám punktuaciya belgileriniń izbeizligi bolıp, kompilyator tárepinen berilgenler ústinde belgili bir ámellerdi orınlawǵa kórsetpe dep qabıl etiledi. Hár qanday ‘;’ belgi menen tamamlanatuǵin ańlatpaǵa til kórsetpesi delinedi.

C++ tilindegi til kórsetpesine mısal:

x = 3 * (y - 2.45);

y = Summa(a, 9, c);

3.3. Inkrement hám dekrement ámelleri

C++ tilinde operand mánisin birge asırıw hám kemeytiwdiń qolaylı usılları bar. Bular inkrement (++) hám dekrement (--) unar ámelleri esaplanadı.

Operandqa salıstırmalı bul ámellerdiń prefiks hám postfiks kórinisleri boladı.

Prefiks kórinisinde ámel til kórsetpesi boyınsha jumıs orınlanıwınan aldın operandqa qollanıladı. Prostfiks jaǵdayda bolsa ámel til kórsetpesi boyınsha jumıs orınlanǵannan keyin operandqa qollanıladı.

Prefiks yamasa postfiks ámel túsinigi tek mánis beriw menen baylanıslı ańlatpalarda orınlı:

x = y++;

// postfiks

24

index = --i; // prefiks

count++; // unar ámel, “++count;” penen ekvivalent

abc--; // unar ámel, “--abc; “ penen ekvivalent

Bul jerde y ózgeriwshiniń mánisi x ózgeriwshisine ózlestiriledi hám keyin birge asırıladı, i ózgeriwshisi mánisi birge kemeytirilip indeks ózgeriwshisine ózlestiriledi.

3.4. Sizeof ámeli

Hár qıylı tiptegi ózgeriwshiler kompyuter yadında hár túrli kólemdi iyeleydi. Bunda, hátteki bir tiptegi ózgeriwshiler de qaysı kompyuterde yamasa qaysı operaciyalıq sistemada ámel qılıwına qarap túrli kólemdegi yadtı iyelewi múmkin.

C++ tilinde qálegen (tayanısh hám tuwındılıq) tiptegi ózgeriwshilerdiń ólshemleri sizeof ámeli járdeminde anıqlanadı. Bul ámeldi turaqlıǵa, tipke hám ózgeriwshige qollanıw múmkin.

Tómende keltirilgen programmada kompyuterdiń platformasına sáykes túrde tiplerdiń ólshemleri shıǵarıladı.

int main()

{

cout << ”int tipi ólshemi: ” << sizeof(int) << ”\n”; cout << ”float tipi ólshemi :”<< sizeof(float) << ”\n”; cout <<”double tipi ólshemi:”<< sizeof(double) << ”\n”; cout << ”char tipi ólshemi :” << sizeof(char) << ”\n”; return 0;

}

3.5. Razryadlı logikalıq ámeller

Programma dúziw tájriybesi sonı kórsetedi, ádette qoyılǵan máseleni sheshiwde qandayda bir jaǵday júzege kelgeni yamasa kelmegenin ańlatıw ushın

0 hám 1 mánis qabıl etiwshi bayraqlardan paydalanıladı. Bul maqsette bir yamasa onnan kóp baytlı ózgeriwshilerden paydalanıw múmkin. Mısalı, bool tipindegi

ózgeriwshini usı maqsette isletiwge boladı. Basqa tárepten bayraq sıpatında bayttıń razryadlarınan da paydalanıw múmkin. Sebebi, razryadlar tek eki mánisti 0 hám

25

1 sanların qabıl etedi. Bir baytta 8 razryad bolǵanı ushın onda 8 bayraqtı kodlaw imkaniyatı bar.

Kóz aldımızǵa keltireyik, qorǵaw sistemasına 5 dana xana jalǵanǵan hám sistema taxtasında 5 shıraqsha (indikator) xanalar jaǵdayın bildiredi: xana qorǵaw sisteması baqlawında ekenligine sáykes indikatordıń janıp turıwı (razryadtıń 1 mánisi) hám xananı sistemaǵa jalǵanbaǵanlıǵın indikator óshkenligin (razryadtıń 0 mánisi) bildiredi. Sistema jaǵdayın ańlatıw ushın bir bayt jeterli boladı hám onıń kishi razryadınan baslap besewinde usı maqsette isletiw múmkin.

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ind5

ind4

ind3

ind2

ind1

 

 

 

 

 

 

 

 

 

 

 

Mısalı, bayttıń tómendegi jaǵdayı 1, 4 hám 5 xanalar qorǵaw sistemasına

jalǵanǵanın bildiredi:

 

 

 

 

 

 

 

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

 

 

 

 

 

X

X

X

1

1

0

0

1

 

 

 

 

 

 

 

 

 

 

 

Tómendegi tablicada C++ tilinde bayt razryadları ústinde logikalıq ámeler toplamı keltirilgen.

3.1-tablica. Bayt razryadları ústinde logikalıq ámeller

Ámeller

Mazmunı

 

 

&

Logikalıq (razryadlı) HÁM (kóbeytiw)

 

 

|

Logikaliq (razryadlı) YÁKI (qosıw)

 

 

^

Biykarlawshı YÁKI

 

 

~

Logikalıq BIYKARLAW (inversiya)

 

 

Razryadlı logikalıq ámelleriniń orınlanıw nátiyjelerin tablica kórinisinde kórsetiw múmkin.

3.2-tablica. Razryadlı logikalıq ámelleriniń orınlanıw nátiyjeleri

26

A

B

C=A&B

C=A|B

C=A^B (xor)

C=~A

 

 

 

 

 

 

0

0

0

0

0

1

 

 

 

 

 

 

0

1

0

1

1

1

 

 

 

 

 

 

1

0

0

1

1

0

 

 

 

 

 

 

1

1

1

1

0

0

 

 

 

 

 

 

Joqarıda keltirilgen mısal ushın qorǵaw sistemasın ańlatıwshı bir baytlı char tipindegi ózgeriwshini járiyalaw múmkin:

char q_taxtası = 0;

Bul jerde q_taxtası ózgeriwshisine 0 mánis beriliwi, barlıq xanalar qorǵaw

sistemasına jalǵanbaǵanlıǵın ańlatadı:

 

 

 

 

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

 

 

 

0

0

0

0

0

0

0

0

 

 

 

 

 

 

 

 

 

Eger 3-xananı sistemaǵa jalǵaw zárúr bolsa

q_taxtası = q_taxtası | 0x04;

ámelin orınlaw kerek, sebebi 0x0416 = 000001002 hám logikalıq YAKI ámel nátiyjesinde q_taxtası ózgeriwshisi baytı tómendegishe kóriniste boladı.

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

 

0

0

0

0

0

1

0

0

 

 

 

 

 

 

 

 

Usınday jol menen basqa xanalardı sistemaǵa jalǵaw múmkin, zárúr bolsa bir waqıttıń ózinde ekewin (zárúr bolsa barlıǵın):

q_taxtası = q_taxtası | 0x1F;

Logikalıq kóbeytiw arqalı xanalardı qorǵaw sistemasınan shıǵarıw múmkin:

q_taxtası = q_taxtası & 0xFD;

// 0xFD16 = 111111012

Tap usı nátiyjeni ‘~’ ámelinen paydalanǵan halda da alıw múmkin. Ekinshi xana sistemaǵa jalǵanǵanlıǵın bildiriwshi bayt mánisi - 000000102, demek, usı jaǵdaydı biykarlaǵan halda logikalıq kóbeytiwdi orınlaw kerek.

q_taxtası = q_taxtası & (~0x02);

27

Hám aqırında, eger 3-xana indikatorın, onıń qanday mániste bolıwına qaramastan qarama – qarsı jaǵdayǵa ótkeriwdi «biykar etiwshi YAKI» (xor) ámeli járdeminde orınlaw múmkin:

q_ taxtası = q_taxtası ^ 0x04; //0x0416 = 000001002

Razryadlı logikalıq ámellerdi mánis beriw operatorı menen birgelikte orınlanıwınıń tómendegi kórinisleri bar:

&= - razryadlı HÁM mánis beriw menen;

|= - razryadlı YAKI mánis beriw menen;

^= - razryadlı biykarlawshı YAKI mánis beriw menen.

3.6. Jıljıtıw ámeleri

Bayttaǵı bitler mánisin shepke yamasa ońǵa jıljıtıw ushın, sáykes túrde “” hám “ ” ámelleri qollanıladı. Ámelden keyingi san bitler neshe orın shepke yamasa ońǵa jıljıtıw kerekligin bildiredi.

Mısalı:

unsigned char A = 12;

// A = 000011002

= 0x0C16

 

 

A = A << 2;

// A

=

001100002

=

0x3016

=

4810

A = A >> 3;

// A

=

000001102

=

0x0616

=

610

Razryadlardı n márte shepke (ońǵa) jıljıtıw sani 2n sanına kóbeytiw (bóliw)

ámeli menen ekvivalent bolıp hám oǵan salıstırǵanda tez orınlanadı. Sonı itibarǵa alıw kerek, operand belgili san bolsa, onda shepke jıljıwda eń sheptegi belgi razryadı tákirarlanadı (belgi saqlanıp qalınadı) hám teris sanlar ústinde bul ámel orınlanǵanda matematikalıq kóz qarastan qáte nátiyjeler payda boladı:

char B = -120;

// B = 100010002

= 0x8816

 

B = B << 2;

// B = 001000002

= 0x2016

= 3210

B = -120;

// B

=

100010002

=

0x8816

 

B = B >> 3;

// B

=

111100012

=

0xF116

= -1510

Usı sebepli, bul razryadlı jıljıw ámelleri belgisiz (unsigned) tiptegi mánisler ústinde orınlanǵanı durıs boladı.

28

3.7. Salıstırıw ámelleri

C++ tilinde mánislerdi salıstırıw ushın salıstırıw ámelleri anıqlanǵan (3.3- tablica). Salıstırıw ámeli binar ámel bolıp tómendegi kóriniske iye:

<operand1> <salıstırıw ámeli> <operand2>

Salıstırıw ámelleriniń nátiyjesi – salıstırıw orınlı bolsa, true (shın), keri jaǵdayda false (jalǵan) mánis boladı. Eger salıstırıwda arifmetikalıq ańlatpa qatnassa, oniń mánisi 0 mánisinen parıqlı jaǵdaylar ushın 1 dep esaplanadı.

3.3-tablica. Salıstırıw ámelleri hám olardıń qollanılıwı

Ámeller

Qollanılıwı

Mazmunı(oqılıwı)

 

 

 

<

a < b

“a kishi b”

 

 

 

<=

a <= b

“a kishi yáki teń b”

 

 

 

>

a > b

“a úlken b”

 

 

 

>=

a >= b

“a úlken yáki teń b”

 

 

 

==

a == b

“a teń b”

 

 

 

!=

a != b

“a teń emes b”

 

 

 

3.8. Útir ámeli

Til qurılmalarındaǵı bir neshe ańlatpalardı kompilyator tárepinen tolıq bir ańlatpa dep qabıl etiwi ushın «útir» ámeli qollanıladı. Bul ámeldi qollanıw arqalı programma jazıwda belgili bir ónimdarlıqqa erisiw múmkin. Ádette «útir» ámeli if hám for operatorlarında keń qollanıladı. Mısalı, if operatorı tómendegi kóriniste bolıwı múmkin:

if(i = CallFunc(), i < 7)

Bul jerde, aldın CallFunc() funkciyası shaqırıladı hám onıń nátiyjesi i ózgeriwshisine ózlestiriledi, keyin i mánisi 7 menen salıstırıladı.

3.9. Ámellerdiń ústinlikleri hám orınlanıw baǵıtları

Arifmetikadaǵıday C++ tilinde de ámeller belgili bir tártip hám baǵıtta orınlanadı. Bizge belgili matematikalıq ańlatpalarda birdey ústinliktegi

29

(prioritettegi) ámeller ushırasa (máselen, qosıw hám alıw), olar shepten ońǵa orınlanadı. Bul tártip C++ tilinde de orınlı, bıraq ayırım jaǵdaylarda ámel ońnan shepke orınlanıwı múmkin (ásirese mánis beriw ámelinde).

Ańlatpalar mánislerin esaplawda ámeller ústinligi esapqa alınadı. Birinshi náwbette eń joqarı ústinlikke iye bolǵan ámel orınlanadı.

Tómendegi tablicada C++ tilinde isletiletuǵın ámeller (operatorlar), olardıń ústinlik koefficientleri hám orınlanıw baǵıtları ( - ońnan shepke, - shepten ońǵa) keltirilgen.

3.4-tablica. Ámellerdiń ústinlikleri hám orınlanıw baǵıtları

Operator

Anıqlaması

Ústinlik

Baǵıtları

 

 

 

 

::

Kóriniw aymaǵına ruxsat beriw

16

 

 

 

 

 

[ ]

Massiv indeksi

16

 

 

 

 

 

( )

Funkciyanı shaqırıw

16

 

 

 

 

 

.

Struktura yáki klass elementin saylaw

16

 

 

 

->

 

 

 

 

 

 

 

++

Postfiks inkrement

15

 

 

 

 

 

--

Postfiks dekrement

15

 

 

 

 

 

++

Prefiks inkrement

14

 

 

 

 

 

--

Prefiks dekrement

14

 

 

 

 

 

sizeof

Ólshemdi alıw

14

 

 

 

 

 

(<tip>)

Tipke sáwlelendiriw

14

 

 

 

 

 

~

Razryadlı logikalıq BIYKARLAW

14

 

 

 

 

 

!

Logikalıq biykarlaw

14

 

 

 

 

 

-

Unar minus

14

 

 

 

 

 

+

Unar plyus

14

 

 

 

 

 

&

Adressti alıw

14

 

 

 

 

 

*

Qurallı múráját

14

 

 

 

 

 

new

Dinamikalıqalıq obyektti jaratıw

14

 

 

 

 

 

delete

Dinamikalıqalıq obyektti joq qılıw

14

 

 

 

 

 

 

30