Joqari darejeli programmalastiriwda C++ Last
.pdfenum 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 |
|
|