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

Joqari darejeli programmalastiriwda C++ Last

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

using namespace std; int main()

{

int a, b;

cout << ”a hám b sanlar maksimumın tabıw.”; cout << ”\n a- mánisin kiritiń:”;

cin >> a;

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

cout << ”\n Sanlar maksimumı: “ << (a > b) ? a : b; return 0;

}

4.6. Switch operatorı.

Shárt operatorınıń jáne bir kórinisi switch tańlaw operatorı bolıp, onıń sintaksisi tómendegishe:

switch (<ańlatpa>)

{

case <turaqlı ańlatpa1> : <operatorlar toparı1>; break; case <turaqlı ańlatpa2> : <operatorlar toparı2>; break;

case <turaqlı ańlatpan> : <operatorlar toparın>; break; default : <operatorlar toparın+1>;

}

Bul operator tómendegishe ámel qıladı: birinshi náwbette <ańlatpa> mánisi esaplanadı, keyin bul mánis case gilt sózi menen ajıratılǵan <turaqlı ańlatpai> menen salıstırıladı. Eger olar birdey bolsa, sol qatardagi ‘:’ belgisinen baslap, break gilt sózine shekem bolǵan <operatorlar toparıi> orınlanadı hám basqarıw tarmaqlanıwshı operatordan keyin jaylasqan operatorǵa ótedi. Eger <ańlatpa> hesh bir <turaqlı ańlatpai> menen sáykes kelmese, qurılmanıń default bólegindegi <operatorlar toparın+1> orınlanadı. Sonı belgilep ótiw kerek, qurılmada default gilt sózi tek ǵana bir márte ushırawı múmkin.

41

Mısal ushın, kiriw aǵımınan “Process dawam etilsin be?” sorawına paydalanıwshı tárepinen juwap alınadı. Eger bolımlı juwap alınsa, ekranǵa “Process dawam etedi!” xabarı shıǵarıladı hám programma óz jumısın tarmaqlanıwshı operatordan keyingi operatorlardı orınlaw menen dawam ettiredi, keri jaǵdayda “Process juwmaqlandı!” juwabı beriledi hám programma óz jumısın juwmaqlaydı. Bunda, paydalanıwshınıń ‘y’ yamasa ‘Y’ juwapları processti dawam ettiriwdi bildiredi, basqa belgiler bolsa processti juwmaqlawdı ańlatadı.

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

{

char Juwap = ’ ’;

cout << ”Process dawam etsin be? (‘y’,’Y’): ” cin >> Juwap;

switch(Juwap)

{

case ‘Y’: case ‘y’:

cout<<”Process dawam etedi!\n”; break;

default:

cout<<”Process juwmaqlanadı!\n”; return 0;

}

... // process return 0;

}

Ulıwma alǵanda, tańlaw operatorında break hám default gilt sózlerin isletiw májbúriy emes. Biraq bul jaǵdayda operator mazmunı buzılıwı múmkin. Máselen, default bólegi bolmaǵan jaǵdayda, eger <ańlatpa> hesh bir <turaqlı ańlatpai> menen birdey bolmasa, operator hesh qanday ámel orınlamastan basqarıw tańlaw operatorınan keyingi operatorǵa ótedi. Eger break bolmasa, <ańlatpa> qandayda bir <turaqlı ańlatpai> menen birdey bolǵan jaǵdayda, oǵan sáykes keliwshi operatorlar

42

toparın orınlaydı hám «toqtatpastan» keyingi qatardaǵı operatorlar toparın da orınlawdı dawam etedi. Máselen, joqarıdaǵı mısalda break operatorı bolmasa hám processti dawam ettiriwdi tastıyqlawshı (‘Y’) juwap bolǵan jaǵdayda ekranǵa

Process dawam etedi!

Process juwmaqlanadı!

хabarları shıǵadı hám programma óz jumısın juwmaqlaydı (return operatorınıń orınlanıwı nátiyjesinde).

Tańlaw operatorı sanap ótiliwshi tiptegi turaqlılar menen birgelikte isletilgende nátiyje beredi. Tómendegi programmada reńler gammasın klassifikaciyalaw máselesi sheshilgen.

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

{

enum Reńler{Qızıl, Toq_sarı, Sarı, Jasıl, Kók, Kúlreń, Fiolet};

Reńler Reń;

//...

switch(Reń)

{

case Qızıl: case Toq_sarı: case Sarı:

cout << ”Íssı gamma saylandı.\n”; break; case Jasıl:

case Kók: case Kúlreń: case Fiolet:

cout << ”Suwıq gamma saylandı.\n”; break; default:

cout << ”Raduga bunday reńge iye emes.\n”;

}

return 0;

}

43

Programma orınlanıwında basqarıw tańlaw operatorına kelgende, Reń mánisi

Qızıl, Toq_sarı yamasa Sarı bolsa, “Íssı gamma saylandı” xabarı, eger Reń mánisi

Jasıl, Kók, Kúlreń yamasa Fiolet bolsa, ekranǵa “Suwıq gamma saylandı” xabarı, eger Reń mánisi sanap ótilgen mánislerden parıqlı bolsa, ekranǵa “Raduga bunday reńge iye emes” xabarı shıǵarıladı hám programma óz jumısın juwmaqlaydı.

switch operatorında járiyalaw operatorları da ushırawı múmkin. Biraq switch operatorı orınlanıwında «sekirip ótiw» jaǵdayları bolıwı esabına blok ishindegi ayrım járiyalawlar orınlanbawı hám bunıń aqıbetinde programma ishinde qátelik júzege keliwi múmkin:

//...

int k = 0, n = 0; cin >> n; switch(n)

{

int i = 10; //qáte, bul operator orınlanbaydı case 1:

int j = 20; //eger n = 2 bolsa, bul járiyalaw orınlanbaydı

case 2:

k += i + j; //qáte, sebebi i, j ózgeriwshiler belgisiz

}

cout << k;

//...

Másele. Tómende sanap ótiliwshi tipler hám sol tiptegi ózgeriwshiler

járiyalanǵan:

enum Birlik {decimetr, kilometr, metr, millimetr, santimetr};

float x; Birlik r;

r birlikte berilgen x ózgeriwshisiniń mánisi metrlerde shıǵarılsın.

#include <iostream.h>

using namespace std;

int main()

{

enum

44

Birlik{decimetr, kilometr, metr, millimetr, santimetr}; float x, y;

Birlik r;

cout << "Uzınlıqtı kiritiń: x = "; cin >> x;

cout << "Uzınlıq birlikleri\n"; cout << "0 - decimetr\n";

cout << "1 - kilometr\n"; cout << "2 - metr\n";

cout << "3 - millimetr\n"; cout << "4 - santimetr\n";

cout << "Uzınlıqtıń birligin saylań: r = "; cin >> r;

switch(r)

{

case decimetr: y = x / 10; break; case kilometr: y = x * 1000; break; case metr: y = x; break;

case millimetr: y = x / 1000; break; case santimetr: y = x / 100; break; default:

cout << "Uzınlıq birligi nadurıs kiritildi!"; return 0;

}

cout << y << " metr"; return 0;

}

4.7. Tákirarlaw operatorları

Programma orınlanıwın basqarıwdıń basqa bir kúshli meхanizmlerinen biri - tákirarlaw operatorları esaplanadı.

Tákirarlaw operatorı «tákirarlaw shárti» dep atalıwshı ańlatpanıń shın mánisinde programmanıń belgili bir bólegindegi operatorlardı (tákirarlaw denesin) kóp márte tákirar túrde orınlaydı (iterativ process) (4.3-súwret).

45

Tákirarlaw óziniń kiriw hám shıǵıw noqatlarına iye, biraq shıǵıw noqatınıń bolmawı múmkin. Bul jaǵdayda tákirarlawǵa sheksiz tákirarlaw delinedi. Sheksiz tákirarlaw ushın tákirarlawdı dawam ettiriw shárti barqulla shın boladı.

tákirarlaw

 

 

 

operator1

 

operator2

shárti

 

 

 

 

 

 

 

 

 

 

false

 

 

 

 

 

 

 

 

 

 

4.3-súwret. Tákirarlaw operatorınıń blok sxeması

Tákirarlaw shártin tekseriw tákirarlaw denesindegi operatorlardı orınlawdan aldın tekseriliwi múmkin (for, while tákirarlawları) yamasa tákirarlaw denesindegi operatorları bir márte orınlanǵannan keyin tekseriliwi múmkin (do-while).

Tákirarlaw operatorları ishpe-ish jaylasqan bolıwı múmkin.

4.8. For tákirarlaw operatorı

For tákirarlaw operatorınıń sintaksisi tómendegi kóriniske iye:

for (<ańlatpa1>; <ańlatpa2>;<ańlatpa3>) <operator yamasa blok>;

Bul operator óz jumısın <ańlatpa1> ańlatpasın orınlawdan baslaydı. Keyin tákirarlaw qádemleri baslanadı. Hár bir qádemde <ańlatpa2> orınlanadı, eger nátiyje 0 mánisinen parıqlı yamasa true bolsa, tákirarlaw denesi - <operator yamasa blok> orınlanadı hám aqırında <ańlatpa3> orınlanadı. Eger <ańlatpa2> mánisi 0 (false) bolsa, tákirarlaw processi toqtaydı hám basqarıw tákirarlaw operatorınan keyingi operatorǵa ótedi. Sonı aytıw kerek, <ańlatpa2> ańlatpası útir menen ajıratılǵan bir

46

neshe ańlatpalar birlespesinen ibarat bolıwı múmkin, bul jaǵdayda aqırǵı ańlatpa mánisi tákirarlaw shárti esaplanadı. Tákirarlaw denesi sıpatında bir operator, sonday aq bos operator bolıwı yamasa operatorlar blogı keliwi múmkin.

Mısal ushın, 10 nan 20 ǵa shekem bolǵan pútin sanlar qosındısın esaplaw máselesin kóreyik.

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

{

int Summa=0;

for(int i = 10; i <= 20; i++) Summa += i;

сout << ”Qosındı = ” << Summa; return 0;

}

Programmadaǵı tákirarlaw operatorı óz jumısın, i tákirarlaw parametrine (tákirarlaw sanaǵıshına) baslanǵısh mánis - 10 sanın beriwden baslaydı hám hár bir tákirarlaw qádeminen (iteraciyadan) keyin qawıs ishindegi úshinshi operator orınlanıwı esabına onıń mánisi birewge artadı. Hár bir tákirarlaw qádeminde tákirarlaw denesindegi operator orınlanadı, yaǵnıy Summa ózgeriwshisine i mánisi qosıladı. Tákirarlaw sanaǵıshı i mánisi 21 bolǵanda “i<=20” tákirarlaw shárti false

(0-mánisi) boladı hám tákirarlaw juwmaqlanadı. Nátiyjede basqarıw tákirarlaw operatorınan keyingi cout operatorına ótedi hám ekranǵa qosındı shıǵarıladı.

Joqarıda keltirilgen mısalǵa qarap tákirarlaw operatorlarınıń qawıs ishindegi ańlatpalarına túsindirme beriw múmkin:

<ańlatpa1> - tákirarlaw sanaǵıshı wazıypasın atqarıwshı ózgeriwshige baslanǵısh mánis beriwge xızmet etedi hám ol tákirarlaw processi basında tek ǵana bir márte esaplanadı. Ańlatpada ózgeriwshi járiyalawı ushırawı múmkin hám bul ózgeriwshi tákirarlaw operatorı denesinde ámel qıladı hám tákirarlaw operatorınan sırtta «kórinbeydi».

47

<ańlatpa2> - tákirarlawdı orınlaw yamasa orınlamawdı anıqlap beriwshi logikalıq ańlatpa, eger shárt shın bolsa, tákirarlaw dawam etedi, keri jaǵdayda joq. Eger bul ańlatpa bos bolsa, shárt barqulla shın dep esaplanadı;

<ańlatpa3> - ádette tákirarlaw sanaǵıshınıń mánisin asırıw (kemeytiriw) ushın xızmet etedi yamasa onda tákirarlaw shártine tásir etiwshi basqa ámeller bolıwı múmkin.

Tákirarlaw operatorında qawıs ishindegi ańlatpalar bolmawı múmkin, biraq sintaksis ‘;’ bolmawına ruхsat bermeydi. Sol sebepli, eń ápiwayı kórinistegi tákirarlaw operatorı tómendegishe boladı:

for (;;)cout <<”Sheksiz tákirarlaw…” ;

Eger tákirarlaw processinde bir neshe ózgeriwshilerdiń mánisi sinхron túrde ózgeriwi kerek bolsa, tákirarlaw ańlatpalarında zárúr operatlorlardı ‘,’ menen jazıw arqalı buǵan erisiw múmkin:

for(int i = 10, j = 2; i <= 20; i++, j = i + 10) {...};

Tákirarlaw operatorınıń hár bir qádeminde j hám i ózgeriwshilerniń mánisleri sáykes túrde ózgerip baradı.

For operatorında tákirarlaw denesi bolmawı da múmkin. Máselen, programma orınlanıwın belgili bir múddetke «toqtap» turıw zárúr bolsa, buǵan tákirarlawdıń hesh qanday qosımsha jumısların orınlamastan ámel qılıw arqalı erisiw múmkin:

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

{

int delay;

...

for(delay = 5000; delay > 0; delay--); //bos operator

...

return 0;

}

Joqarıda keltirilgen 10 nan 20 ǵa shekem bolǵan sanlar qosındısın bos deneli

tákirarlaw operatorı arqalı esaplaw múmkin:

...

48

for(int i = 10; i <= 20; Summa += i++);

...

Tákirarlaw operatorı denesi sıpatında operatorlar blogı isletiliwin faktorialdı esaplaw mısalında kórsetiw múmkin:

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

{

int a;

unsigned long fact = 1;

cout << ”Pútin sandı kiritiń:_ ”; cin >> a;

if((a >= 0) && (a < 33))

{

for(int i = 1; i <= a; i++) fact *= i;

cout << a << ” != “ << fact <<’\n’;

}

return 0;

}

Programma paydalanıwshı tárepinen 0 den 33 ge shekem aralıqtaǵı san kiritilgende ámel qıladı, sebebi 34! mánisi unsigned long ushın ajıratılǵan razryadlarǵı sıymaydı.

Másele. Tákirarlaw operatorın ishpe-ish orınlawǵa mısal sıpatında cifrları birbirine ózara teń bolmaǵan úsh xanalı natural sanlardı ósiw tártibinde shıǵarıw máselesin kóriwimiz múmkin:

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

{

unsigned char a2, a1, a0; // úsh xanalı san cifrları for(a2 = ’1’; a2 <= ’9’; a2++) //sannıń 2-cifrı for(a1 = ’0’; a1 <= ’9’; a1++) //sannıń 1-cifrı for(a0 = ’0’; a0 <= ’9’; a0++) //sannıń 0-cifrı

49

//cifrlardıń ózara teń emesligin tekseriw

if(a0 != a1 && a1 != a2 && a0 != a2) //ózara teń emes cout << a2 << a1 << a0 << ’\n’;

return 0;

}

Programmada úsh xanalı sannıń hár bir cifrı tákirarlaw operatorlarınıń parametrleri sıpatında jaratıladı. Birinshi, sırtqı tákirarlaw operatorı menen

2-хanadaǵı cifr (a2 tákirarlaw parametri) jaratıladı. Ekinshi, ishki tákirarlaw operatorında (a1 tákirarlaw parametri) san kórinisiniń 1-хanasındaǵı cifr hám aqırında, oǵan salıstırmalı ishki bolǵan a0 parametrli tákirarlaw operatorında

0-хanadaǵı cifrlar jaratıladı. Hár bir sırtqı tákirarlawdıń bir qádemine ishki tákirarlaw operatorınıń tolıq orınlanıwı tuwrı keliwi esabına barlıq úsh xanalı sanlar kórinisi jaratıladı.

4.9. While tákirarlaw operatorı

while tákirarlaw operatorı, operator yamasa bloktı tákirarlaw shárti jalǵan

(false yamasa 0) bolaman degenshe tákirar orınlaydı. Ol tómendegi sintaksiske iye: while (<ańlatpa>) <operator yamasa blok>;

Eger <ańlatpa> shın mánisli turaqlı ańlatpa bolsa, tákirarlaw sheksiz boladı. Tap sonday, <ańlatpa> tákirarlaw baslanıwında shın bolıp, onıń mánisine tákirarlaw denesindegi esaplaw tásir etpese, yaǵnıy onıń mánisi turaqlı, tákirarlaw sheksiz boladı.

while tákirarlaw shártti aldınnan tekseriwshi tákirarlaw operatorı esaplanadı. Eger tákirarlaw basında <ańlatpa> jalǵan bolsa, while operatorı quramındaǵı <operator yamasa blok> bólegi orınlanbastan sheklep ótiledi.

Ayrım jaǵdaylarda <ańlatpa> mánis beriw operatorı kórinisinde keliwi múmkin. Bunda mánis beriw ámeli orınlanadı hám nátiyje 0 menen salıstırıladı. Nátiyje nolden parıqlı bolsa, tákirarlaw dawam ettiriledi.

Eger shın ańlatpanıń mánisi nolden parıqlı turaqlı bolsa, sheksiz tákirarlaw júzege keledi. Máselen:

while(1); //sheksiz tákirarlaw

50