Masala. Butun sonlarni kublarini va kvadratlarini ekranga chiqaring. (8 dan 1 gacha kamayish tartibda).
Xossa: o’zgaruvchi sikl kamayishi kerak.
Yechim:
for ( )
{
i2 = i*i;
i3 = i2*i;
printf("%4d %4d %4d\n", i, i2, i3);
}
i = 8; i >= 1; i --
O’zgaruvchan sikl
for (; ; )
{ // sikl tanasi }
Misollar
for (a = 2; a < b; a+=2) { ... }
for (a = 2, b = 4; a < b; a+=2) { ... }
for (a = 1; c < d; x++) { ... }
for (; c < d; x++) { ... }
for (; c < d; ) { ... }
O’zgaruvchan sikl
Xossa:
Shart siklining keying qadami boshlanishdan oldin tekshiriladi, agar u yolg’on bo’lsa sikl bajarilmaydi;
Agar shart yolg’on bo’lmasa, sikl to’xtovsiz ishlashi mumin (sikl ichiga tushib qoladi)
Agar sikl tanasida bitta amal bo’lsa qavsni {} qo’ymasa ham bo’ladi.
for(i=1; i<8; i++) { i--; }
Sikl tanasida sikl o’zgaruvchilarni o’zgartirish tavsiya etilmaydi
!
for (i = 1; i < 8; i++) a += b;
O’zgaruvchan sikl
for (i=8; i>=1; i--) printf("Привет");
printf("i=%d", i);
for (i=1; i<=8; i++) printf("Salom");
printf("i=%d", i);
i=9
i=0
Sikl necha marta takrorlanadi
a = 1;
for(i=1; i<4; i++) a++;
a = 4
a = 1; b=2;
for(i=3; i >= 1; i--)a += b;
a = 7
a = 1;
for(i=1; i >= 3; i--)a = a+1;
a = 1
a = 1;
for(i=1; i<= 4; i--)a ++;
Sikl ichida qolish
a = 1;
for(i=1; i<4; i++) a = a+i;
a = 7
Noma’lum qadamlar sonidagi sikl
Masala: Butun sondagi raqamlar sonini aniqlang.
Yechim g’oyasi: oxirgi raqamdan boshlab sanaladi.
Muammo: nechta qadam bo’lishi noma’lum
Yechim: n=0 bo’lganda to’xtash kerak.
Old shartli takrorlanish operatori
while takrorlash operatori, operator yoki blokni tarorlash sharti yolg’on (false yoki 0) bo’lguncha takror bajaradi. U quyidagi sintaksisga ega:
while () ;
Agar rost qiymatli o’zgarmas ifoda bo’lsa, takrorlash cheksiz bo’ladi. Huddi 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(1); // чексиз такрорлаш
Algoritmi
Boshlash
count
tamom
yo’q
ha
n != 0
count = 0;
count = count + 1;
n = n / 10;
Raqamlar sonini hisoblovchi o’zgaruvchi
n
Shartni bajarish
Dasturi
int main()
{long n,n1; int count;
cout<<"Butun sonni kiriting\n";
cin>>n; n1=n;
count = 0;
while (n != 0)
{count ++;
n = n / 10; }
cout<
}
Shartni bajarish
long – uzun butun raqam (± 2147483647)
“%ld” – kiritish va chiqarish formati
Old shartli takrorlanish operatori
Huddi for operatoridek, ‘,’ yordamida da bir nechta amallar sinxron ravishda bajarish mumkin. Masalan son va uning kvadratlarini chop qiladigan dasturda ushbu holat ko’rsatilgan:
#include
using namespace std;
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<
return 0;
}
Old shartli takrorlanish
while ( shart )
{
// sikl tanasi
}
Xossalari:
Murakkab shartlardan foydalanish mumkin:
Agar dastur tanasida faqat bitta ifoda bo’lsa, qavs {} larni yozish shart emas.
while ( a < b && b < c ) { ... }
while ( a < b ) a ++;
Old shartli takrorlanish
Xossalari:
Sikl sharti har safar tekshiriladi.
Agar sikl sharti yolg’on bo’lsa, sikl umuman bajarilmaydi.
Agar sikl sharti yolg’on bo’lmasa, dastur takrorlanaveradi.
a = 4; b = 6;
while ( a > b ) a = a– b;
a = 4; b = 6;
while ( a < b ) d = a + b;
Sikl necha marta takrorlanadi
a = 4; b = 6;
while ( a < b ) a ++;
2 marta
a = 6
a = 4; b = 6;
while ( a < b ) a += b;
1 marta
a = 10
a = 4; b = 6;
while ( a > b ) a ++;
0 marta
a = 4
a = 4; b = 6;
while ( a < b ) b = a - b;
1 marta
b = -2
a = 4; b = 6;
while ( a < b ) a --;
Sikl ichiga tushish
for ni while ga almashtirish
for( i=1; i<=10; i++)
{
// sikl tanasi
}
i = 1;
while ( i <= 10 ) {
// sikl tanasi
i ++;
}
for ( i=a; i>=b; i--)
{
// sikl tanasi
}
i = a;
while ( i >= b ) {
// sikl tanasi
i --;
}
So’ng shartli tarorlanish 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 qo‘llaniladigan holatlari - bu takrorlashni boshlamasdan turib, takrorlash shartini tekshirishning iloji bo‘lmagan holatlar hisoblanadi.
So’ng shartli tarorlanish operatori
Masalan, birorta jarayonni davom ettirish yoki to‘xtatish haqidagi so‘rovga javob olish va uni tekshirish zarur bo‘lsin. Hech bo‘lmaganda takrorlash jarayonining bitta qadami amalga oshirilgan bo‘lishi kerak:
#include
using namespace std;
int main()
{
char javob;
do
{ ... // программа танаси
cout<< "Jarayonni to’xtatish (N):_ ";
cin>>javob;
}
while(javob !=N);
return 0;
}
Bu operator ham cheksiz takrorlanishi mumkin: do { } while(1);
So’ng shartli takrorlanish blok-sxemasi
Boshlanish
Tamom
yo’q
ha
n <= 0
Sikl tanasi
Shart
“Xususiy jarayon” bloki
n
Qism dastur
So’ng shartli takrorlanish dasturi
int main()
{
long n;
do {
cout<< "Musbat sonni kiriting\n";
cin>>n;
…
}
while ( n <= 0 );
... }
Shart
Xossasi: Sikl tanasi har doim hech bo’lmaganda bir marta bajariladi
a = 4; b = 6;
do { a ++; } while (a <= b);
3 марта
a = 7
a = 4; b = 6;
do { a += b; } while ( a <= b );
1 марта
a = 10
a = 4; b = 6;
do { a += b; } while ( a >= b );
a = 4; b = 6;
do b = a - b; while ( a >= b );
2 марта
b = 6
a = 4; b = 6;
do a += 2; while ( a >= b );
Sikl ichiga tushish
Sikl ichiga tushish
Sikl necha marta takrorlanadi
Масала (нотўғри коддан ҳимоя воситаси билан)
Натурал сонни киритинг ва унинг рақамлари сони 10 га тенглигини текширинг.
Мисол:
Сонни киритинг>= 0: Сонни киритинг >= 0:
-234 1233
Мусбат сон керак. Йўқ
Сонни киритинг >= 0:
1234
Ҳа
Натурал сонни киритинг ва қандай сонлар бир неча марта такрорланаётганини текширинг.
Мисол:
Сонни киритинг>= 0: Сонни киритинг >= 0:
2323 1234
Тарорланяпти: 2, 3 такрорланиш йўқ.
http://acm.tuit.uz/forum
11:53
XULOSA
Xulosa o’rnida shuni ta’kidlab o’tish joizki, masalaning yechim go’yasiga asosan takrorlanish operatorlarining biridan yoki ichma-ich takrorlanishlarda har qaysidan foydalanish maqsadga mufoviq.