Masala. Har qanday 7 katta butun sondagi pul miqdorini 3 va 5 so‘mliklarda berish mumkinligi isbotlansin. Qo‘yilgan masala p=3n+5m tenglamasi 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.
int main()
{
unsigned int pul; //pu1- kiritiladigan pul miqdori
unsigned 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 sopn 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<
m5++; //5so'mliklar bittaga oshiriladi
}
while(3*n3+5*m5<=pul);
n3++; //3 so'mliklar bittaga oshiriladi
}
while(3*n3<=pul);
return 0;
}
Programma pul qiymatini kiritishni so‘raydi (pu1 o‘zgaruvchiga).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’mlikchop etiladi.
5 ta 3 so’mlik +6 ta 5 so’mlik
10 ta 3 so’mlik +0 ta 5 so’mlik
echim variantlari chop etiladi.
Do while takrorlash operatori
Do while ifodasi while strukturasiga o'xshashdir. Bitta farqi shundaki while da shart boshiga tekshiriladi. Do while da esa takrorlanish tanasi eng kamida bir marta ijro ko'radi va shart strukturaning so'ngida test qilinadi. Shart true bo'lsa blok yana takrorlanadi. Shart false bo'lsa do while ifodasidan chiqiladi. Agar do whileichida qaytarilishi kerak bo'lgan ifoda bir dona bo'lsa {} qavslarning keragi yo'qdir. Quyidagicha bo'ladi:
do
ifoda;
while (shart);
Lekin {} qavslarning yo'qligi dasturchini adashtirishi mumkin. Chunki qavssiz do while oddiy while ning boshlanishiga o'xshaydi. Buni oldini olish uchun {} qavslarni har doim qo'yishni tavsiya etamiz.
int k = 1;
do {
k = k * 5;
} while ( !(k>1000) );
Bu blokda 1000 dan kichik yoki teng bo'lgan eng katta 5 ga karrali son topilmoqda.while shartini ozroq o'zgartirib berdik, ! (not - inkor) operatorining ishlashini misolda ko'rsatish uchun. Agar oddiy qilib yozadigan
bo'lsak, while shartining ko'rinishi bunday bo'lardi: while (k<=1000); Cheksiz takrorlanishni oldini olish uchun shart ifodasining ko'rinishiga katta e'tibor berish kerak. Bir nuqtaga kelib shart true dan false qiymatiga o'tishi shart
Do'stlaringiz bilan baham: |