Operatorlar
Əvvəlki paraqrafda biz proqramlaşdırmanın əsas elementlərindən biri - DƏYİŞƏNLƏR, onların tipləri və dəyişənlər üzərində hesab əməlləri ilə tanış olduq. Bu paraqrafda isə biz C++ dilində yazılmış proqramların digər əsas elementləri - OPERATORLAR ilə tanış olacağıq.
OPERATORLAR proqramlaşdırmada hər hansı şərtdən asılı olaraq, proqramın növbəti icra istiqamətini müəyyənləşdirir. Misal üçün hər hansı şərtdən asılı olaraq bu və ya digər kod hissəsi icra olunar, hər hansı kod hissəsi bir neçə dəfə təkrar olunar və ya bir neçə kod hissəsindən biri icra olunar.
3.1 Şərt operatorları
Biz 3 qrup operatorlarla tanış olacağıq: Şərt, Dövr, Seçim. Şərt operatoru çox sadədir. Əvvəlki proqram nümunələrində biz müxtəlif proqram kodları icra etdik.
Misal üçün:
std::cout<<" x = "<<x<<"\n";
kod hissəsi ilə biz x-in qiymətini ekranda çap edirdik və bu zaman heç bir şərtdən istifadə etmirdik. Şərt operatoru bizə bu imkanı verir, yəni biz istədiyimiz şərtdən asılı olaraq x-in qiymətini çap edərik və ya heç bir iş görmərik.
Tutaq ki, məsələ belədir: Əgər x-in qiyməti 234-dən böyükdürsə, onda onu çap et.
Kod aşağıdakı kimi olacaq:
if (x > 234)
std::cout<<" x = "<<x<<"\n";
Şərt operatorunun sintaksisi aşağıdakı kimidir:
if (/* şərt */)
{/* yerinə yetirilməli əməliyyatlar */}
else
{/* digər əməliyyatlar */}
Qeyd edək ki, əgər cəmi bir əməliyyat yerinə yetirilirsə, onda {} mötərizələrinə ehtiyac yoxdur.
İzahı:
Əvvəlcə şərt yoxlanılır, əgər doğrudursa, onda {} arasında olan əməliyyatlar yerinə yetirilir, əks halda else–dən sonrakı {} mötərizələri arasında olan əməliyyatlar yerinə yetirilir.
Digər misal:
int x;
if (x<5)
std::cout<<x<<" 5 -den kiçikdir "<<"\n";
else
std::cout<<x<<" 5 -den boyukdur "<<"\n";
Əgər verilmiş kod hissəsinin icra olunması üçün bir deyil, bir neçə şərt ödənməlidirsə, onda biz bu şərtlərin hamısını "və" (&&) operatoru ilə birləşdirə bilərik.
Aşağıdakı kimi:
if ((şərt1) && (şərt2) && (şərt3)) {
emel1;
emel2;
...
}
Əgər yuxarıdakı kod hissəsinin icra olunması üçün şərt1, şərt2, şərt3-dən heç olmasa birinin ödənməsi kifayətdirsə, onda biz bu şərtlərin hamısını "və ya" (||) operatoru ilə birləşdirə bilərik.
Aşağıdakı kimi:
if ((şərt1) || (şərt2) || (şərt3)) {
emel1;
emel2;
...
}
Qeyd edək ki, if operatorunun { } mötərizələri arasında olan kod hissəsi ancaq və ancaq şərt ödəndiyi halda icra olunur. Lakin bir çox hallarda bizə lazım olur ki, bu şərtin əksi olan halda da, hansısa əməliyyatları icra edək. Bu zaman biz else-dən istifadə edirik. else-dən proqramda sərbəst şəkildə istifadə edə bilmərik, else mütləq if-ə bitişik olmalıdır.
Şərt operatoruna aid proqram nümunələri:
//prg_3_1.cpp
#include<iostream>
int main()
{
int x;
std::cout<<"zəhmət olmasa, x-in qiymətini daxil edin\n";
std::cin>>x;
if (x<5)
std::cout<<x<<" 5-dən kiçikdir\n";
else
std::cout<<x<<" 5-dən böyükdür\n";
return 0;
}
Nümunə
Proqramı kompilyasiya edək və hər dəfə müxtəlif qiymətlər daxil etməklə, bir neçə dəfə yerinə yetirək.
C:\cpp\prog2\Debug>prog2.exe
zəhmət olmasa, x-in qiymətini daxil edin
6
6 5-dən böyükdür
C:\cpp\prog2\Debug>
C:\cpp\prog2\Debug>prog2.exe
zəhmət olmasa, x-in qiymətini daxil edin
4
4 5-dən kiçikdir
C:\cpp\prog2\Debug>
C:\cpp\prog2\Debug>
Müqayisə əməlləri
C++ dilində iki ifadənin qiymətini müqaisə etmək üçün aşağıdakı müqaisə əməllərdən istifadə olunur:
== bərabərdir != fərqlidir > böyükdür < kiçikdir <= kiçikdir bərabərdir >= böyükdür bərabərdir
Misal üçün, əgər mən x və y dəyişənlərinin qiymətlərinin bərabər olduğunu yoxlamaq istəsəm, onda aşağıdakı şərtdən istifadə edərəm:
if (x==y) {…}
3.2 Dövr operatorları
for, while, do while
Dövr operatorları müəyyən əməliyyatların bir neçə dəfə təkrar yerinə yetirilməsinə imkan verir. Bu operatorlardan proqramlaşdırmada çox geniş istifadə olunur.
for operatoru
for operatorunun sintakisisi aşagıdakı kimidir:
for (sayğacın ilkin qiyməti; dövrün başa çatma şərti; sayğacın dəyişmə qaydası) { əməliyyatlar; }
Nümunə proqram:
//prg_3_2.cpp
#include<iostream>
int main(int argc, char *argv[])
{
int k;
for (k=0; k<10; k=k+1)
{
std::cout<<"salam dünya\n";
}
return 0;
}
Nümunə
Proqramı kompilyasiya edib yerinə yetirək.
C:\cpp\prog2\Debug>
C:\cpp\prog2\Debug>prog2.exe
salam dünya
salam dünya
salam dünya
salam dünya
salam dünya
salam dünya
salam dünya
salam dünya
salam dünya
salam dünya
C:\cpp\prog2\Debug>
Tapşırıq:
Yuxarıdakı proqramda for (k=0; k<10; k=k+1) sətrini for (k=5; k<10; k=k+1), for (k=0; k<3; k=k+1), for (k=0; k<10; k=k+7), for (k=0; k<10; k=2) sətirləri ilə əvəz edib proqramı icra edin. Hər dəfə müxtəlif nəticələr alacağıq. Sonuncu halda isə, ekranda Salam dunya ifadəsi sonsuz sayda çap olunacaq (proqramın icrasını dayandırmaq üçün CTRL+Z düyməsini daxil edin).
Birinci halı təhlil edək.
for (k=0; k<10; k=k+1)
Sayğac olaraq k dəyişənindən istifadə olunur və ona başlanğıc qiymət olaraq 0 mənimsədilir ( k=0;).
Dövrün sona çatması şərti kimi k<10; göstərilib. Bu o deməkdir ki, nə qədər ki, k < 10 şərti ödənir, dövrdə verilmiş əməliyyatlar təkrar icra olunacaq. Sayğacın qiymətinin dəyişmə qaydası kimi k=k+1 (! sonda ; simvolunun yoxluğuna diqqət yetirin) göstərilib, yəni dövr hər dəfə təkrar olunduqda sayğacın qiyməti 1 vahid artır.
Proses aşağıdakı şəkildə baş verir: Əvvəlcə k dəyişəni 0 qiyməti alır. Sonra dərhal k<10 şərti yoxlanılır. Şərt ödənir, belə ki, 0 < 10 ifadəsi doğrudur və avtomatik olaraq dövr operatorunun əməliyyatları icra olunur (ekranda “salam dunya” sətri çap olunur). Daha sonra növbə sayğacın qiymətinin dəyişməsinə gəlir. Bunun üçün biz for -da k = k + 1; yazmışıq. Bu əməliyyat k-nın əvvəlki qiyməti nə idisə, onu 1 vahid artırır. Baxdığımız hal üçün ( k-nın qiyməti 0 olan hal ) k-nın yeni qiyməti 1 olur. Şərt yoxlanılır. Bu proses k 10qiyməti alana kimi davam edir. Bu zaman k < 10 şərti ödənmir və for operatoru sona çatır.
while operatoru
for operatorunda biz sayğac təyin etdik, dövrün başa çatması şərtini və sayğacın dəyişmə qaydasını verdik. Bəzən isə elə olur ki, dövrün başa çatması şərtinin nə vaxt ödənəcəyi əvvəlcədən bilinmir. Bu zaman while operatorundan istifadə olunur.
while operatorunun sintaksisi aşağıdakı kimidr.
while (şərt) { əməliyyatlar; }
Nümunə:
char x;
x='b';
while (x!='a') {
std::cout<<"Salam dünya\n";
std::cout<<" yeni simvol daxil edin\n";
std::cin>>x;
}
Bu kod icra olunduqda, ekranda Salam dünya sətri çap olunacaq və proqram istifadəçinin hər hansı simvol daxil etməsini gözləyəcək. Əgər bu simvol 'a'-dırsa, dövr sona çatacaq, əks halda, dövr təkrar olunacaq .
Tapşırıq :
Bu kodu yoxlamaq üçün proqram tərtib edib, icra edin.
while dövr operatorunun digər forması do while operatorudur. do while operatorunun sintaksisi belədir:
do { əməliyyatlar; }
while (şərt);
Bu operatorun while operatorundan yeganə fərqi odur ki, bu halda şərtin nə zaman ödənməsindən asılı olmayaraq, əməliyyatlar ən azı 1 dəfə yerinə yetiriləcək.
3.3 switch operatoru
Əgər müəyyən halda proqramın icra istiqaməti bir neçə şərtdən asılıdırsa, bu zaman if operatoru ilə bu şərtlərin mürəkkəb konfiqurasiyasından istifadə etmək əvəzinə switchoperatorundan istifadə edirlər.
switch operatorunun sintaksisi aşağıdakı kimidir:
switch ( dəyişən ) {
case qiymət1:
/* əgər dəyişənin qiyməti == qiymət1 */
/* yerinə yetirilməli proqram hissəsi */
break;
case qiymət2:
/* əgər dəyişənin qiyməti == qiymət2 */
/* yerinə yetirilməli proqram hissəsi */
break;
...
default:
/* yuxardakı şərtlərin heç biri ödənmədikdə */
/* yerinə yetirilməli proqram hissəsi */
}
switch operatoru dəyişənin qiymətini yuxarıdan aşağı case ifadəsinin qarşısında dayanan qiymətlə yoxlayır və bərabər olarsa, onda iki nöqtə : -dən sonra gələn bütün operatorları yerinə yetirir. break rast gəlinən yerdə switch operatoru işini dayandırır və proqramda switch-dən sonra gələn operator yerinə yetirilir. switch operatoru ilə bağlı mühüm məqamlardan biri də odur ki, case ifadələrində qiymət kimi ancaq tam tipli dəyişənlərdən istifadə etmək olar (int). default seçimindən istifadə etmək vacib deyil. Əgər qiymətlərdən heç biri ödənməsə, onda default: seçimində göstərilən operatorlar yerinə yetiriləcək.
Nümunə proqram:
//prg_3_3.cpp
#include <iosteram>
int main()
{
int color = 0;
std::cout<<"Hər hansı rəng seçin(qırmızı=1,yaşıl=2,qara=3):\n";
std::cin>>color;
switch (color){
case 1: std::cout<<"siz qırmızı rəngi seçdiniz\n";
break;
case 2: std::cout<<"siz yaşıl rəngi seçdiniz\n";
break;
case 3: std::cout<<"siz qara rəngi seçdiniz\n";
break;
default: std::cout<<"siz heç bir rəng seçmədiniz\n";
}
return 0;
}
Nümunə
Proqramı kompilyasiya edib yerinə yetirək.
C:\cpp\prog2\Debug>
C:\cpp\prog2\Debug>prog2.exe
Hər hansı rəng seçin(qırmızı=1,yaşıl=2,qara=3):
2
siz yaşıl rəngi seçdiniz
C:\cpp\prog2\Debug>
C:\cpp\prog2\Debug>
3.4 continue və break
continue və break operatorları dövr operatorlarının daxilində istifadə olunur.
break operatoru icra olunduqda, dövr dərhal başa çatır.
continue operatoru icra olduqda, dövr daxilində continue -dən sonra gələn əməliyyatlar icra olunmadan dövr yeni tsiklə keçir.
3.5 Şərtin qiyməti
Şərt və dövr operatorlarında diqqət yetirilməli digər bir məqam da, şərtin qiyməti ilə bağlıdır. C++ dilində hər şey rəqəmlərlə göstərilir - ünvan, məlumat, sətir, simvol... Şərtlər də istisna deyil: 0 - yanlış, 0-dan böyük qiymətlər isə doğru kimi qəbul olunur. Misal üçün, aşağıdakı yazılış doğrudur (Bu kod icra olunduqda heç nə yerinə yetirilməyəcək, çünki şərt ödənmir, 0-dır)
if (0)
{
std::cout<<"Bakıda havalar yaxşı keçir \n";
}
Aşağıdakı bu kod isə, icra olunduqda sonsuz sayda "Bakıda havalar soyuq keçir" sətri çap olunacaq (şərt həmişə ödənir - 1).
while (1)
{
std::cout<<"Bakıda havalar soyuq keçir \n";
}