Добавил:
bekan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:1-semestr / 4-LEKCIYA
.pdf
4-lekciya. Tákirarlanıwshı processlerdi shólkemlestiriw. Parametrli
tákirarlaw operatorı (for). Shárti aldın hám shárti keyin tákirarlaw
operatorları (while hám do while).
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) (3-súwret).
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 bárqulla ras boladı.
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.
For tákirarlaw operatorı
For tákirarlaw operatorınıń sintaksisi tómendegi kóriniske iye:
for (<ańlatpa1 >; <ańlatpa 2>;<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 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.
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».
<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:

Joqarıda keltirilgen 10 nan 20 ǵa shekem bolǵan sanlar qosındısın bos deneli
tákirarlaw operatorı arqalı esaplaw múmkin:
...
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>
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ǵa sıymaydı.
Másele. Tákirarlaw operatorın ishpe-ish orınlawǵa mısal sıpatında cifrları
bir-birine ózara teń bolmaǵan úsh xanalı natural sanlardı ósiw tártibinde shıǵarıw
máselesin kóriwimiz múmkin:
#include <iostream>
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ı
//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ı.
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
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>
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 <iostream>
using namespace std;
int main()
{
int sanagish = 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:";
while(sanagish)
{
if(san10 & 8)
//son10 & 00001000
cout << '1';
else
cout << '0';
san10=san10<<1; //razryadtı 1 orın shepke jiljitiw
sanagish--;
}
cout<<'\n';
cout << "Process toqtasın(0), dawam etsin(1):_ ";
cin >> process;
sanagish = 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:
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int a, b;
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ı.
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
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; //Pul- kiritiletuǵı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
//hesh qanday 5 swmliq joq
do
{
m5 = 0;
do
{
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ı.
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 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 >
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;
}
Ámeliyatta break operatorınan sheksiz tákirarlawdan shıǵıwda
paydalanıladı.
for (;;)
Соседние файлы в папке 1-semestr
