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

Joqari darejeli programmalastiriwda C++ Last

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

Tap for operatorı kibi, ‘,’ járdeminde <ańlatpa> da bir neshe ámeller sinхron túrde orınlaw múmkin. Máselen, san hám onıń kvadratların shıǵaratuǵın programmada usı jaǵday kórsetilgen:

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

{

int n, n2;

cout << "Sandı kiritiń(1..10):_"; cin >> n;

n++;

while(n--, n2 = n * n, n > 0)

cout << "n = " << n << " n^2 = " << n2 << endl; return 0;

}

Programmadaǵı tákirarlaw operatorı orınlanıwında n sanı 1 ge shekem kemeyip baradı. Hár bir qádemde n hám onıń kvadratı shıǵarıladı. Shárt ańlatpasında operatorlardıń jazılıw izbe-izliginiń áhmiyeti bar, sebebi eń aqırǵı operator tákirarlaw shárti sıpatında qaraladı hám n mánisi 0 bolǵanda tákirarlaw juwmaqlanadı.

Keyingi programmada berilgen onlıq sannıń ekilik kórinisin shıǵarıw máselesin sheshiwde while operatorın qollaw kórsetilgen.

#include <iosteam.h> int main()

{

int sanaǵısh = 4;

short san10, process = 1; while(process) //sheksiz tákirarlaw

{

cout << ”Onlıq sandı kiritiń(0..15)_”; cin >> san10;

cout << ’/n’ << san10 << ”Sanınıń ekilik kórinisi:

”;

51

while(sanaǵısh)

 

{

 

if(son10 & 8)

//son10 & 00001000

cout << ’1’;

 

else

 

cout << ’0’;

san10=san10<<1; //razryadtı 1 orın shepke jıljıtıw

sanaǵısh--;

}

cout<<’\n’;

cout << ”Process toqtasın(0), dawam etsin(1):_ ”; cin >> process;

sanaǵısh = 4;

}

return 0;

}

Programmada ishpe-ish jaylasqan tákirarlaw operatorları isletilgen. Birinshisi, sannıń ekilik kórinisin shıǵarıw processin dawam ettiriw shárti boyınsha ámel qıladı. Ishki jaylasqan ekinshi tákirarlaw operatorındaǵı ámeller - hár qanday, 0 den 15 ge shekemgi bolǵan sanlar tórt razryadlı ekilik san kórinisinde bolıwına tiykarlanǵan. Onda kiritilgen sannıń ishki, ekilik kórinisinde úshinshi razryadında 0 yamasa 1 turǵanlıǵı anıqlanadı (“san10 & 8”). Shárt nátiyjesi nátiyje 1 (shın) bolsa, ekranǵa ‘1’, keri jaǵdayda ‘0’ belgisi shıǵarıladı. Keyingi qádemde san razryadları shepke birewge jıljıydı hám jáne úshinshi razryadtaǵı cifr shıǵarıladı. Tákirarlaw sanaǵısh mánisi 0 bólgansha yaǵnıy tórt márte orınlanadı hám basqarıw ishki tákirarlaw operatorınan shıǵadı.

while tákirarlaw operatorı járdeminde ónimli programma kodın jazıwǵa jáne bir mısal, bul - eki natural sanlardıń eń úlken ulıwma bóliwshisin (EÚUB) Evklid algoritmi menen tabıw máselesin keltiriwimiz múmkin:

int main()

{

int a, b;

52

cout << ”A hám B natural sanlar EÚUB tabıw.\n”; cout << ”A hám B natural sanlardı kiritiń: ” cin >> a >> b;

while(a != b) a > b ? a -= b : b -= a; cout << ”Bul sanlar EÚUB = ” << a; return 0;

}

Pútin tiptegi a hám b mánisleri aǵımnan óqılǵannan keyin olardıń mánisleri ózara teń bolmaǵansha tákirarlaw processi isleydi. Tákirarlawdıń hár bir qádeminde a hám b sanlardıń úlkeninen kishisi alınadı. Tákirarlawdan keyingi kórsetpe quralında a ózgeriwshisiniń mánisi nátiyje sıpatında shıǵarıladı.

4.10. Do-while tákirarlaw operatorı

Do-while tákirarlaw operatorı while operatorınan parıqlı túrde aldın operator yamasa bloktı orınlaydı, keyin tákirarlaw shártin tekseredi. Bul qurılma tákirarlaw denesin keminde bir márte orınlanıwın támiynleydi. do-while tákirarlaw operatorı tómendegi sintaksiske iye:

do <operator yamasa blok>; while (<ańlatpa>);

Bunday tákirarlaw operatorınıń keń qollanılatuǵın jaǵdayları - bul tákirarlawdı baslamastan turıp, tákirarlaw shártin tekseriwdiń ilajı bolmaǵan jaǵdaylar esaplanadı. Máselen, qandayda bir processti dawam ettiriw yamasa toqtatıw haqqındaǵı sorawǵa juwap alıw hám onı tekseriw zárúr bolsın. Kórinip turıptı, processti baslamastan aldın bul sorawdı beriwdiń mánisi joq. Hesh bolmaǵanda tákirarlaw processiniń bir qádemi ámelge asırılǵan bolıwı kerek:

#include <iostream.h>

using namespace std;

int main()

{

char juwap;

do

{

... // programma denesi

53

cout << ”Processti toqtatıw (N):_ ”; cin >> juwap;

} while(juwap != N) return 0;

}

Programma tap “Processti toqtatıw (N):_ ” sorawına ‘N’ juwabı kiritilmegenshe dawam etedi.

Bul operator da sheksiz tákirarlanıwı múmkin:

do; while(1);

Másele. Hár qanday 7 den úlken pútin sandaǵı pul muǵdarın 3 hám

5 sumlıqlarda beriw múmkinligi dáliyllensin. Qoyılǵan másele p=3n+5m teńlemesin qanaatlandırıwshı m, n sanlar juplıqların tabıw máselesi esaplanadı (p-pul muǵdarı). Bul shárttiń orınlanıwın m hám n ózgeriwshileriniń múmkin bolǵan mánisleriniń barlıq kombinaciyalarında tekseriw zárúr boladı.

#include <iostream.h> int main()

{

unsigned int Pul; //Pulkiritiletuǵın pul muǵdarı unsigned n3, m5; //n-3 swmlıqlar, m-5 swmlıqlar sanı bool qate = false; //Pul mánisin kiritiwdegi qátelik do

{

if(qate)

cout << "Pul mánisi 7 den kishi!";

qate = true; //keyingi tákirarlaw qáte esaplanadı cout << "\nPul mánisin kiritiń (>7): ";

cin >> Pul;

} while(Pul <= 7); //7 ge teń yamasa úlken san kiritilgenshe

n3 = 0; //hesh qanday 3 swmliq joq do

{

m5 = 0; //hesh qanday 5 swmliq joq do

54

{

if(3 * n3 + 5 * m5 == Pul)

cout<<n3<<" dana 3 swmlıq + "<<m5<<" dana 5

swmliq\n";

 

m5++;

//5 swmlıqlar birewge asırıladı

} while(3 * n3 + 5 * m5 <= Pul);

n3++;

//3 swmlıqlar birewge asırıladı

}while(3 * n3 <= Pul); return 0;

}

Programma pul mánisin kiritiwdi soraydı (Pul ózgeriwshisine). Eger pul mánisi 7 sanınan kishi bolsa, bul haqqında хabar beriledi hám tákirar túrde mánis kiritiw talap etiledi. Pul mánisi 7 den úlken bolǵanda, 3 hám 5 swmlıqlardıń múmkin bolǵan tolıq kombinaciyasın ámelge asırıw ushın ishpe-ish tákirarlawlar ámelge asırıladı. Sırtqı tákirarlaw n3 (3 swmlıqlar muǵdarı) boyınsha, ishki tákirarlaw bolsa m5 (5 swmlıqlar muǵdarı) boyınsha, bul muǵdardaǵı pullar mánisi Pul mánisinen artıp ketpegenshe dawam etedi. Ishki tákirarlawda m5 ózgeriwshisiniń hár bir mánisinde «3*n3+5*m5==Pul» shárti tekseriledi, eger ol orınlı bolsa, sheshim variantı sıpatında n3 hám m5 ózgeriwshiler mánisleri shıǵarıladı.

Pul mánisi 30 swm kiritilgende (Pul=30), ekranǵa

0 dana 3 swmlıq + 6 dana 5 swmlıq

5 dana 3 swmlıq + 6 dana 5 swmlıq

10 dana 3 swmlıq + 0 dana 5 swmlıq

sheshim variantları shıǵarıladı.

4.11. Break operatorı

Tákirarlaw operatorlarınıń orınlanıwında sonday jaǵdaylar júzege keliwi múmkin, onda qaysıdur qádemde, tákirarlawdı aqırına jetkermesten tákirarlawdan shıǵıw zárúrligi bolıwı múmkin. Basqasha aytqanda, tákirarlawdı «úziw» kerek bolıwı múmkin. Bunda break operatorınan paydalanadı. break operatorın tákirarlaw

55

operatorı denesiniń qálegen (zárúr) orınlarına qoyıw arqalı sol orınlardan tákirarlawdan shıǵıwdı ámelge asırıw múmkin. Itibar beretuǵın bolsaq, switch-case operatorınıń túp mánisine de break operatorın qollanıw arqalı erisilgen.

Ishpe - ish jaylasqan tákirarlaw hám switch operatorlarında break operatorı tek ǵana ózi jaylasqan bloktan shıǵıw imkaniyatın beredi.

Tómendegi programmada eki ishpe-ish jaylasqan tákirarlaw operatorınan paydalanǵan jaǵdayda paydalanıwshı tárepinen kiritilgen qandayda bir sandı 3 hám 7 sanlarına salıstırmalı qanday aralıqqa túsiwi anıqlanadı. Sırtqı tákirarlawda “San kiritin (0- toqtaw):_” sorawı beriledi hám juwap juwap_san ózgeriwshisine oqıladı.

Eger san nolden parıqlı bolsa, ishki tákirarlaw operatorında bul sannıń qandayda bir aralıqqa túsiwi anıqlanıp, sol haqqında хabar beriledi hám ishki tákirarlaw operatorınan shıǵıladı. Sırtqı tákirarlawdaǵı sorawǵa juwap sıpatında 0 kiritilse, programma óz jumısın juwmaqlaydı.

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

{

int juwap_san=0; do

{

while(juwap_san)

{

if(juwap_san < 3)

{cout << ”3 kishi !”; break;}

if(3 <= juwap_san && juwap_san <= 7)

{cout << ”3 hám 7 aralıqta !”; break;} if(juwap_san > 7)

{cout << ”7 den úlken !”; break;}

}

cout << ”\nSan kiritiń (0-toqtaw):_”; cin >> juwap_san;

}while(juwap_san != 0) return 0;

56

}

Ámeliyatta break operatorınan sheksiz tákirarlawdan shıǵıwda paydalanıladı.

for (;;)

{

// 1- shárt if(...)

{

...

break;

}

// 2- shárt if(...)

{

...

break;

}

...

}

Bul mısalda sheksiz for tákirarlawınan 1 yamasa 2-shárt orınlanǵanda

shıǵıladı.

Másele. Belgisiz pútin sanlar izbe-izligi 0 mánisi menen juwmaqlanadı,

0 izbe-izlik aǵzası esaplanbaydı. Izbe-izlikti kemeymeytuǵın jaǵdayda tártiplengen yamasa tártiplenbegenligi anıqlansın.

#include <iostream.h> int main()

{

unsigned int Ai_1 = 0, Ai;

cout << "Sanlar izbe-izligin kiritiń"; cout << " (0-juwmaqlanıw belgisi):\n ";

cin >> Ai;

// izbe-izliktin birinshi aǵzası

while(Ai)

 

{

 

Ai_1 = Ai;

 

cin >> Ai;

// náwbettegi aǵza

 

57

if(Ai_1 > Ai) break;

}

if(Ai_1)

{

cout << "Izbe-izlik tártiplengen"; if(!Ai)

cout << " emes!";

else

cout << ”!”;

}

else

cout << "Izbe-izlik bos!"; return 0;

}

Programma iske túskende, dáslep izbe-izliktiń birinshi aǵzası óz aldına oqıp alınadı (Ai ózgeriwshisine). Keyin Ai mánisi nolge teń bolmaǵansha tákirarlaw operatorı ámel qıladı. Tákirarlaw denesinde Ai mánisi aldınǵı mánis sıpatında Ai_1

ózgeriwshisine eslep qalınadı hám náwbettegi aǵza Ai ózgeriwshisine oqıladı. Eger aldınǵı aǵza náwbettegi aǵzadan úlken bolsa, break operatorı járdeminde tákirarlaw processi úziledi hám basqarıw tákirarlawdan keyingi shárt operatorına ótedi. Bul jerdegi shárt operatorları mazmunı tómendegishe: eger Ai_1 nolden parıqlı bolsa, izbe-izliktiń keminde bir aǵzası kiritilgen boladı (izbe-izlik bar) hám aqırǵı kiritilgen aǵza tekseriledi. Óz náwbetinde eger Ai nolden parıqlı bolsa, bul jaǵday aǵzalar ortasında kemeymew shárti orınlanbaǵanlıǵı sebepli aǵzalardı kiritiw processi úzilgenin bildiredi hám bul haqqında хabar shıǵarıladı. Keri jaǵdayda izbeizliktiń kemeymeytuǵın jaǵdayda tártiplengen boladı.

4.12. Continue operatorı

Continue operatorı tap break operatorı kibi tákirarlaw operatorı denesin orınlawdı toqtatadı, biraq tákirarlawdan shıǵıp ketpesten keyingi qádemine «sekirip» ótiwin buyıradı.

58

Continue operatorın qollanıwǵa mısal sıpatında 2 hám 50 sanlar aralıǵındaǵı

ápiwayı sanlardı tabıwshı programma tekstin keltiremiz.

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

{

bool bólinedi = false; for(int i = 2; i < 50; i++)

{

for (int j = 2; j < i/2; j++)

{

if(i % j) continue;

bólinedi = true; break;

}

//break orınlanǵanda basqarıw ótetuǵın orın if(!bólinedi)

cout << i << ” “; bólinedi = false;

}

return 0;

}

Keltirilgen programmada qoyılǵan másele ishpe-ish jaylasqan eki tákirarlaw operatorları járdeminde sheshilgen. Birinshi tákirarlaw operatorı 2 den 50 ge shekem sanlardı jaratıwǵa xızmet qıladı. Ishki tákirarlaw bolsa hár bir jaratılıp atırǵan sandı 2 sanınan sol sannıń yarımına shekem bolǵan sanlarǵa bólip, qaldıǵın tekseredi, eger qaldıq 0 sanınan parıqlı bolsa, náwbettegi sanǵa bóliw dawam etedi, keri jaǵdayda bolinedi ózgeriwshisine true mánis berip, ishki tákirarlaw úziledi (san óziniń yarımına shekem bolǵan qandayda bir sanǵa bóliner eken, demek ol ápiwayı emes hám keyingi sanlarǵa bólip tekseriwge qájet joq). Ishki j boyınsha tákirarlawdan shıqqannan keyin bolinedi mánisi false bolsa (!bolinedi), i sanı ápiwayı boladı hám ol shıǵarıladı.

59

4.13. Goto operatorı hám metkalar

Metka - bul izinde eki noqat (‘:’) qoyılǵan identifikator. Metka menen qandayda bir operator belgilenedi hám keyinirek, programmanıń basqa bir bóleginen oǵan shártsiz ótiw ámelge asırıladı. Metka menen hár qanday operator belgileniwi múmkin, sonday aq járiyalaw operatorı hám bos operatorları da. Metka tek ǵana funkciyalar ishinde ámel qıladı.

Metka shártsiz ótiw goto operatorı járdeminde orınlanadı. goto operatorı arqalı tek ǵana onıń ózi jaylasqan funkciya ishindegi operatorlarǵa ótiw múmkin. goto operatorınıń sintaksisi tómendegishe:

goto <metka>;

Ayrım jaǵdaylarda, goto operatorınıń «sekirip ótiwi» esabına qátelikler júzege keliwi múmkin. Máselen,

int i = 0;

i++;

if(i) goto m;

int j;

m: j += i;

operatorlarınıń orınlanıwı qátelikke alıp keledi, sebebi j járiyalanbay qaladı. Shártsiz ótiw operatorı programmanı dúziwdegi kúshli hám sol menen

birgelikte qáwipli qurallardan biri esaplanadı. Kúshliligi sonda, onıń járdeminde algoritmniń «bası berk» orınlarınan shıǵıp ketiw múmkin. Ekinshi tárepten, bloklardıń ishine ótiw, máselen, tákirarlaw operatorlarınıń ishine «sekirip» kiriw kútilmegen jaǵdaylardı júzege keltiriwi múmkin. Sol sebepli, imkan barınsha goto operatorınan paydalanbaw kerek, isletilgen jaǵdayda da tómendegi qaǵıydaǵa ámel qılıw zárúr: «blok ishine, if…else hám switch operatorları ishine, hámde tákirarlaw operatorları denesine sırttan kiriw múmkin emes».

Negizi, metka járdeminde programmanıń qálegen orınına ótiw múmkin bolsa da, baslanǵısh mánis beriw járiyalawlarınan sekirip ótiw ruxsat etilmeydi, biraq bloklardan sekirip ótiw múmkin.

Máselen:

...

60