Mavzu: while va do while operatorlari yordamida dasturlar tuzish.
While takrorlash operatori: While takrorlash operatori, operator yoki blokni takrorlash sharti yolg’on (false yoki 0) bo‘lguncha takror bajaradi.
While sikl operatori takrorlanishlar soni oldindan aniq bo‘lmagan hollarda takrorlanishni biror-bir shart asosida bajaradi. Berilgan shart oldin tekshiriladi va keyin shartning rost yoki yolg‘onligiga qarab kerakli operatorlar ketma-ketligi bajariladi. Bu operatorning C++ tilidagi sintaksisini keltiramiz:
while () ;
Agar rost qiymatli o‘zgarmas ifoda bo‘lsa, takrorlash cheksiz bo’ladi. Xuddi shunday, takrorlash boshlanishida rost bo’lib, uning qiymatiga takrorlash tanasidagi hisoblash ta’sir etmasa, ya’ni uning qiymati o‘zgarmasa, takrorlash cheksiz bo’ladi.
While takrorlash shartini oldindan tekshiruvchi takrorlash operatori hisoblanadi. Agar takrorlash boshida yolg‘on bo‘lsa, while operatori tarkibidagi qismi bajarilmasdan chetlab o’tiladi.
Ayrim hollarda qiymat berish operatori ko‘rinishida kelishi mumkin. Bunda qiymat berish amali bajariladi va natija 0 solishtiriladi. Natija noldan farqli bo‘lsa, takrorlash davom ettiriladi.
Agar rost ifodaning qiymati noldan farqli o‘zgarmas bo‘lsa, cheksiz takrorlash ro‘y beradi.
Masalan: While(1); // cheksiz takrorlash
Xuddi for operatoridek, ‘,’ yordamida da bir nechta amallar sinxron ravishda bajarilishi mumkin. Masalan, son va uning kvadratlarini chop qiladigan dasturda ushbu holat ko‘rsatilgan:
#include
int main(){
int n, n2;
cout<<’’sonni kiriting(1..10):_’’;
cin>>n;
n++;
while(n--,n2=n*n, n>0)
cout<<’’n=’’<return 0;
}
Masala. Har qanday 7 dan katta butun sondagi pul miqdoriga ega kupyuralarni 3 va 5 so‘mlik kupyuralarda berish mumkinligi isbotlansin. Qo‘yilgan masala p=3n+5m tenglamasini qanotlantiruvchi m, n sonlar juftliklarini topish masalasidir (p-pul miqdori). Bu shartning bajarilishini m va n o‘zgaruvchilarining mumkin bo‘lgan qiymatlarining barcha kombinatsiyalarida tekshirish zarur bo’ladi.
#include
int main()
{
unsigned int pul;
|
|
|
//pu1- kiritiladigan pul miqdori
|
unsigned int n3,m5;
|
|
|
//n-3 so’mliklar , m-5 so’mliklar soni
|
bool xato=false;
|
|
|
//pu1 qiymatini kiritilgandagi xatolik
|
do{ if (xato) cout<<’’kiritilgan pul qiymati 7 dan kichik !’’;
xato=true ; //keyingi takrorlash xato hisoblanadi
cout<<’’\npul qiymatini kiriting (>7):’’;
cin>>pul;
}
while (pul<=7); // toki 7 sonidan katta son kiritulguncha
n3=0 ; //birorta ham 3 so’mlik yo’q do{
m5=0; // birorta ham 5 so’mlik yo’q do
{
if (3*n3+5*m5==pul)
cout<<n3<<’’ta 3 so’mlik + ‘’<m5++ //5 so’mliklar bittaga oshiriladi
}
while(3*n3+5*m5<=pul);
n3++; //3 so’mliklar bittaga oshiriladi
}
while(3*n3<=pul); return 0;}
Dastur pul qiymatini kiritishni so‘raydi(pu1 o‘zgaruvchisiga). Agar pul qiymati 7 sonidan kichik bo‘lsa, bu haqda xabar beriladi va takror ravishda qiymat kiritish talab qilinadi. Pul qiymati 7 dan katta bo’lganda, 3 va 5 so‘mliklarning mumkin bo‘lgan to‘la kombinatsiyasini amalga oshirish uchun ichma-ich takrorlashlar amalga oshiriladi. Tashqi takrorlash n3 (3 so‘mliklar miqdori) bo‘yicha, ichki takrorlash esa m5 (5 so‘mliklar miqdori) bo‘yicha, toki bu miqdordagi pullar qiymati pul qiymatidan oshib ketmaguncha davom etadi. Ichki takrorlashda m5 o’zgaruvchisining har bir qiymatida «3*n3+5*m5=pu1» sharti tekshiriladi, agar u o‘rinli bo‘lsa, yechim varianti sifatida n3 va m5 o’zgaruvchilar qiymatlari chop etiladi.
Pul qiymati 30 so‘m kiritilganda, ekranga 0 ta 3 so’mlik +6 ta 5 so’mlik chop etiladi. 5 ta 3 so’mlik +6 ta 5 so’mlik 10 ta 3 so’mlik +0 ta 5 so’mlik yechim variantlari chop etiladi.
Do'stlaringiz bilan baham: |