5-Ma’ruza mashg’uloti. Mavzu: for takrorlash operatorlari while, do-while takrorlash operatorlari. Reja


Download 349.5 Kb.
bet5/5
Sana09.12.2021
Hajmi349.5 Kb.
#179595
1   2   3   4   5
Bog'liq
5-maruza

#include stream.h>

int main()

{int delay;

...

for (delay=5000; delay>0; delay--); // bо‘sh operator



return 0;



}

Yuqorida keltirilgan 10 dan 20 gacha bо‘lgan sonlar yig‘indisini bо‘sh tanali takrorlash operatori orqali hisoblash mumkin:



...

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

...

Takrorlash operatori tanasi sifatida operatorlar bloki ish-latishini faktorialni hisoblash misolida kо‘rsatish mumkin:



#include stream.h>

int main()

{

int a;

unsigned long fact=1;

cout <<”Butun sonni kiriting:_ ”;

cin >>a;

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

{

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

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

}

return 0;

}

Programma foydalanuvchi tomonidan 0 dan 33 gacha oraliqdagi son kiritilganda amal qiladi, chunki 34! qiymati unsigned long uchun ajratilgan razryadlarga sig‘maydi.



Masala. Takrorlash operatorining ichma-ich joylashuviga misol sifatida raqamlari bir-biriga о‘zaro teng bо‘lmagan uch xonali natural sonlarni о‘sish tartibida chop qilish masalasini kо‘rishimiz mumkin:

#include stream.h>

int main()

{

unsigned char a2,a1,a0; // uch xonali son raqamlari

for (a2=1’;a2<=9’;a2++)//sonning 2-raqami

for(a1=0’;a1<=9’;a1++)//sonning 1-raqami

for(a0=0’;a0<=9’;a0++)//sonning 0-raqami

// raqamlarni оzaro teng emasligini tekshirish

if(a0!=a1 && a1!=a2 && a0!=a2) //о‘zaro teng emas

cout<2<1<0<<’\n’;

return 0;

}

Programmada uch xonali sonning har bir raqami takrorlash operatorlarining parametrlari sifatida hosil qilinadi. Birinchi, tashqi takrorlash operatori bilan 2-xonadagi raqam (a2 takrorlash parametri) hosil qilinadi. Ikkinchi, ichki takrorlash operatorida (a1 takrorlash parametri) son kо‘rinishining 1-xonasidagi raqam va nihoyat, unga nisbatan ichki bо‘lgan a0 parametrli takrorlash operatorida 0-xonadagi raqamlar hosil qilinadi. Har bir tashqi takrorlashning bir qadamiga ichki takrorlash operatorining tо‘liq bajarilishi tо‘g‘ri kelishi hisobiga barcha uch xonali sonlar kо‘rinishi hosil qilinadi.



while takrorlash operatori

while takrorlash operatori, operator yoki blokni takrorlash sharti yolg‘on (false yoki 0) bо‘lguncha takror bajaradi. U quyidagi sintaksisga ega:

while () ;

Agar rost qiymatli о‘zgarmas ifoda bо‘lsa, takrorlash cheksiz bо‘ladi. Xuddi shunday, takrorlash boshlanishida rost bо‘lib, uning qiymatiga takrorlash tanasidagi hisoblash ta’sir etmasa, ya’ni uning qiymati о‘zgarmasa, takrorlash cheksiz bо‘ladi.

while takrorlash shartini oldindan tekshiruvchi takrorlash operatori hisoblanadi. Agar takrorlash boshida yolg‘on bо‘lsa, while operatori tarkibidagi qismi baja-rilmasdan cheklab о‘tiladi.

Ayrim hollarda qiymat berish operatori kо‘rinishida kelishi mumkin. Bunda qiymat berish amali bajariladi va natija 0 bilan solishtiriladi. Natija noldan farqli bо‘lsa, takrorlash davom ettiriladi.

Agar rost ifodaning qiymati noldan farqli о‘zgarmas bо‘lsa, cheksiz takrorlash rо‘y beradi. Masalan:

while(1); // cheksiz takrorlash

Xuddi for operatoridek, ‘,’ yordamida da bir nechta amallar sinxron ravishda bajarish mumkin. Masalan, son va uning kvadratlarini chop qiladigan programmada ushbu holat kо‘rsatilgan:



#include stream.h>

int main()

{

int n,n2;

cout<<"Sonni kiriting(1..10):_";

cin>>n;

n++;

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

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

return 0;

}

Programmadagi takrorlash operatori bajarilishida n soni 1 gacha kamayib boradi. Har bir qadamda n va uning kvadrati chop qilinadi. Shunga e’tibor berish kerakki, shart ifodasida operator-larni yozilish ketma-ketligining ahamiyati bor, chunki eng oxirgi operator takrorlash sharti sifatida qaraladi va n qiymati 0 bо‘lganda takrorlash tugaydi.



Keyingi programmada berilgan о‘nlik sonning ikkilik kо‘rini-shini chop qilish masalasini yechishda while operatorini qо‘llash kо‘rsatilgan.

#include stream.h>

int main()

{

int sanagich=4;

short son10,jarayon=1;

while (jarayon) // cheksiz takrorlash

{cout <<O’nlik sonni kiriting(0..15)_”;

cin >>son10;

cout<<’/n’<<son10<<Sonining ikkilik ko’rinishi: ”;

while (sanagich)

{if(son10 & 8) //son10 & 00001000 cout<<’1’;

else cout<<’0’;

son10=son10<<1; //razryadlarni 1 оrin chapga surish

sanagich--;

}

cout<<’\n’;

cout<<”Jarayonni to’xtasin(0),davom etsin(1):_ ”;

cin >> jarayon;

sanagich=4;

}

return 0;

}

Programmada ichma-ich joylashgan takrorlash operatorlari ishlatilgan. Birinchisi, sonning ikkilik kо‘rinishini chop qilish jarayonini davom ettirish sharti bо‘yicha amal qiladi. Ichki joylash-gan ikkinchi takrorlash operatoridagi amallar - har qanday, 0 dan 15

gacha bо‘lgan sonlar tо‘rtta razryadli ikkilik son kо‘rinishida bо‘lishiga asoslangan. Unda kiritilgan sonning ichki, ikkilik kо‘rinishida uchinchi razryadida 0 yoki 1 turganligi aniqlanadi (“son10&8”). Shart natijasi natija 1 (rost) bо‘lsa, ekranga ‘1’, aks holda ‘0’ belgisi chop etiladi. Keyingi qadamda son razryadlari chapga bittaga suriladi va yana uchinchi razryaddagi raqam chop etiladi. Takrorlash sanagich qiymati 0 bо‘lguncha ya’ni tо‘rt marta bajariladi va boshqaruv ichki takrorlash operatoridan chiqadi.

while takrorlash operatori yordamida samarali programma kodi yozishga yana bir misol bu - ikkita natural sonlarning eng katta umumiy bо‘luvchisini (EKUB) Evklid algoritmi bilan topish masalasini keltirishimiz mumkin:



int main()

{

int a,b;

cout<<”A va B natural sonlar EKUBini topish.\n”;

cout<<”A va B natural sonlarni kiriting: ”

cin>>a>>b;

while(a!=b)a>b?a-=b:b-=a;

cout<<”Bu sonlar EKUBi=”<

return 0;

}

Butun turdagi a va b qiymatlari oqimdan о‘qilgandan keyin toki ularning qiymatlari о‘zaro teng bо‘lmaguncha takrorlash jarayo-ni rо‘y beradi. Takrorlashning har bir qadamida a va b sonlarning kattasidan kichigi ayriladi. Takrorlashdan keyingi kо‘rsatma vositasida a о‘zgaruvchisining qiymati natija sifatida chop etiladi.



do-while takrorlash operatori

do-while takrorlash operatori while operatoridan farqli ravishda oldin operator yoki blokni bajaradi, keyin takrorlash shartini tekshiradi. Bu qurilma takrorlash tanasini kamida bir marta bajarilishini ta’minlaydi. do-while takrorlash operatori quyidagi sintaksisga ega:

do ; while ();

Bunday takrorlash operatorining keng qо‘llaniladigan holatlari - bu takrorlashni boshlamasdan turib, takrorlash shartini tekshirishning iloji bо‘lmagan holatlar hisoblanadi. Masalan, birorta jarayonni davom ettirish yoki tо‘xtatish haqidagi sо‘rovga


javob olish va uni tekshirish zarur bо‘lsin. Kо‘rinib turibdiki, jarayonni boshlamasdan oldin bu sо‘rovni berishning ma’nosi yо‘q. Hech bо‘lmaganda takrorlash jarayonining bitta qadami amalga oshirilgan bо‘lishi kerak:

#include stream.h>

int main()

{

char javob;

do

{

... // programma tanasi

cout<<”Jarayonni to’xtatish (N):_ ”;

cin>>javob;

} while(javob !=N)

return 0;

}

Programma toki ”Jarayonni to’xtatish (N):_ ” sо‘roviga ‘N’ javobi kiritilmaguncha davom etadi.



Bu operator ham cheksiz takrorlanishi mumkin:

do; while(1);

Masala. Har qanday 7 katta butun sondagi pul miqdorini 3 va 5 sо‘mliklarda berish mumkinligi isbotlansin. Qо‘yilgan masala p=3n+5m tenglamasi qanoatlantiruvchi m, n sonlar juftliklarini topish masalasidir (p-pul miqdori). Bu shartning bajarilishini m va n о‘zgaruvchilarining mumkin bо‘lgan qiymatlarining barcha kombinatsiyalarida tekshirish zarur bо‘ladi.

#include stream.h>

int main()

{

unsigned int Pul; //Pul- kiritiladigan pul miqdori

unsigned n3,m5; //n-3 sоmliklar,m-5 sоmliklar soni

bool xato=false; //Pul qiymatini kiritishdagi xatolik

do

{

if(xato)cout<<"Pul qiymati 7 dan kichik!";

xato=true; // keyingi takrorlash xato hisoblanadi

cout<<"\nPul qiymatini kiriting (>7): ";

cin>>Pul;

}

while(Pul<=7);//toki 7 katta son kiritilguncha

n3=0; //birorta ham 3 sо‘mlik yо‘q

do

{

m5=0; //birorta ham 5 sо‘mlik yо‘q

do

{

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

cout<3<<" ta 3 so’mlik+"<5<<" ta 5 so’mlik\n";

m5++; // 5 sоmliklar bittaga oshiriladi

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

n3++; //3 sоmliklar bittaga oshiriladi

} while(3*n3<=Pul);

return 0;

}

Programma pul qiymatini kiritishni sо‘raydi (Pul о‘zgaruvchi-siga). Agar pul qiymati 7 sonidan kichik bо‘lsa, bu haqda xabar beriladi va takror ravishda qiymat kiritish talab qilinadi. Pul qiymati 7 dan katta bо‘lganda, 3 va 5 sо‘mliklarning mumkin bо‘lgan tо‘la kombinatsiyasini amalga oshirish uchun ichma-ich takrorlashlar amalga oshiriladi. Tashqi takrorlash n3 (3 sо‘mliklar miqdori) bо‘yicha, ichki takrorlash esa m5 (5 sо‘mliklar miqdori) bо‘yicha, toki bu miqdordagi pullar qiymati Pul qiymatidan oshib ketmaguncha davom etadi. Ichki takrorlashda m5 о‘zgaruvchisining har bir qiymatida «3*n3+5*m5==Pul» sharti tekshiriladi, agar u о‘rinli bо‘lsa, yechim varianti sifatida n3 va m5 о‘zgaruvchilar qiymatlari chop etiladi.

Pul qiymati 30 sо‘m kiritilganda (Pul=30), ekranga

0 ta 3 so’mlik + 6 ta 5 so’mlik

5 ta 3 so’mlik + 6 ta 5 so’mlik

10 ta 3 somlik + 0 ta 5 so’mlik

yechim variantlari chop etiladi.




Download 349.5 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling