Такрорлаш операторида қавс ичидаги ифодалар бўлмаслиги мумкин, лекин синтаксис ‘;’ бўлмаслигига рухсат бермайди. Шу сабабли, энг содда кўринишдаги такрорлаш оператори қуйидагича бўлади: - Такрорлаш операторида қавс ичидаги ифодалар бўлмаслиги мумкин, лекин синтаксис ‘;’ бўлмаслигига рухсат бермайди. Шу сабабли, энг содда кўринишдаги такрорлаш оператори қуйидагича бўлади:
- for (;;)cout <<”Cheksiz takrorlash…” ;
- Агар такрорлаш жараёнида бир нечта ўзгарувчиларнинг қиймати синхрон равишда ўзгариши керак бўлса, такрорлаш ифодаларида зарур операторларни ‘,’ билан ёзиш орқали бунга эришиш мумкин:
- for(int i=10,j=2;i<=20;i++,j=i+10) {...};
- Такрорлаш операторининг ҳар бир қадамида j ва i ўзгарувчи-ларнинг қийматлари мос равишда ўзгариб боради.
- Ўзгарувчи циклнинг бошланғич қийматини бериш
- Хаммаси бажарилдими,текшириш
- квадрат ва кубни ҳисоблаймиз
- Алгоритм ("цикл " блоки )
- int main()
- {
- int i, i2, i3;
- for (i=1; i<=8; i++)
- {
- i2 = i*i;
- i3 = i2*i;
- printf("%4d %4d %4d\n", i, i2, i3);
- }
- }
- for (i=1; i<=8; i++)
- {
- i2 = i*i;
- i3 = i2*i;
- printf("%4d %4d %4d\n", i, i2, i3);
- }
- Хар бир i қадамдаги ўзгариш:
- i=i+1
- цикл работает, пока это условие верно
- i2 = i*i;
- i3 = i2*i;
- printf("%4d %4d %4d\n", i, i2, i3);
- Масала. Бутун сонларни кубларини ва квадратларини экранга чиқаринг 8 дан 1гача (камайиш тартибда).
- Хосса: ўзгарувчи цикл камайиши керак.
- Ечим:
- for ( )
- {
- i2 = i*i;
- i3 = i2*i;
- printf("%4d %4d %4d\n", i, i2, i3);
- }
- for (бошланғич қиймат;
- циклни давом эттириш шарти;
- ҳар бир қадамдаги ўзгариш)
- {
- // цикл танаси
- }
- 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(i=1; i<8; i++) { i--; }
- for (i = 1; i < 8; i++) a += b;
- Цикл танасида цикл ўзгарувчиларини ўзгартириш тавсия этилмайди!
- for (i=8; i>=1; i--) printf("Привет");
- printf("i=%d", i);
- Хоссалари:
- Кўп схемаларда цикл бажарилишидан сўнг ўзгарувчан циклнинг шарти бузилган ҳолдаги биринчи ифодаси киритилади:
- for (i=1; i<=8; i++) printf("Привет");
- printf("i=%d", i);
- Цикл неча маротаба такрорланмоқда?
- a = 1;
- for(i=1; i<4; i++) a++;
- a = 1; b=2;
- for(i=3; i >= 1; i--)a += b;
- a = 1;
- for(i=1; i >= 3; i--)a = a+1;
- a = 1;
- for(i=1; i<= 4; i--)a ++;
- a = 1;
- for(i=1; i<4; i++) a = a+i;
- "4": а ва b ни киритинг, ҳамда квадратлари ва кубларини а дан b гача чиқаринг
- Мисол:
- Интервал чегараларини кўрсатинг:
- 4 6
- 4 16 64
- 5 25 125
- 6 36 216
- "5": 10 нинг квадратлари ва кубларини қуйидаги кетма-кетликда чиқариш: 1, 2, 4, 7, 11, 16, …
- Мисол:
- 1 1 1
- 2 4 8
- 4 16 64
- ...
- 46 2116 97336
- Топшириқ. Иккита бутун сонни киритинг ва улардан каттасини экранга чиқаринг.
- Ечим ғояси: Экранга биринчи сон чиқиши керак, агарда у иккинчи сондан катта бўлса, ёки иккинчи сон чиқиши керак, агарда биринчи сондан катта бўлса.
- Фарқли томонлари: амални бажарилиши бир неча шартларга боғлиқ (агар … ёки …).
- Агар алгоритм бажарилиш кетма-кетлиги бир нечта шартларга боғлиқ бўлса у тармоқланувчи деб аталади.
- Тармоқнинг тўлиқ кўриниши
- Тармоқнинг тўлиқсиз формаси
- Масала: Ой тартиб рақамини киритинг ва шу ой кунларини чиқаринг.
- Ечим: Ой бўйича кунлар:
- 28 кун – 2 (февраль)
- 30 кун – 4 (апрель), 6 (июнь), 9 (сентябрь), 11 (ноябрь)
- 31 кун – 1 (январь), 3 (март), 5 (май), 7 (июль), 8 (август), 10 (октябрь), 12 (декабрь)
- Хосса: Ой тартиб рақамидан иккита эмас, балки бир нечта фарқли боғланиш танлаш керак.
- Маълум усуллар билан ечиш мумкинми?
- Бирорта ҳам вариант тўғри келмади
- Топшириқ. Фирма 25 дан 40 ёшгача бўлга ходимларни олади. Номзоднинг ёшини киритинг ва белгиланг, фирмага тўғри келадими («тўғри келади" ёки «тўғри келмайди» экранга чиқаринг).
- Ўзига хослик: иккита шарт бирдан бажариладими? Текшириш керак.
- Машхур усуллар билан хал қилиш мумкинми?
- Номаълум қадамлар сонидаги цикл
- Масала: Бутун сонни олинг (<2000000) ва ундаги рақамлар сонини аниқланг.
- Ечим ғояси: кетма-кет охирги рақамни, ҳисоблагични оширамиз.
- Муаммо: нечта қадам ташлаш кераклиги ноаниқ
- Ечим: n=0 бўлганда тўхташ керак ва х.к., “хайр n!=0 ” қилиш керак.
- count = count + 1;
- n = n / 10;
- Рақам ҳисоблагични нолга тушириш
- int main()
- {
- long n;
- int count;
- cout<<”Butun sonni kiriting\n”;
- cin>>n;
- count = 0;
- while (n != 0)
- {
- count ++;
- n = n / 10;
- }
- cout<< n <<“ sonida”<
- }
- long – узун бутун рақам (± 2147483647)
- %ld –узун сонларни киритиш ва чиқариш формати
while такрорлаш оператори - while такрорлаш оператори, оператор ёки блокни такрорлаш шарти ёлғон (false ёки 0) бўлгунча такрор бажаради. У қуйидаги синтаксисга эга:
- while (<ифода>) <оператор ёки блок>;
- Агар <ифода> рост қийматли ўзгармас ифода бўлса, такрорлаш чексиз бўлади. Худди шундай, <ифода> такрорлаш бошланишида рост бўлиб, унинг қийматига такрорлаш танасидаги ҳисоблаш таъсир этмаса, яъни унинг қиймати ўзгармаса, такрорлаш чексиз бўлади.
while такрорлаш шартини олдиндан текширувчи такрорлаш оператори ҳисобланади. Агар такрорлаш бошида <ифода> ёлғон бўлса, while оператори таркибидаги <оператор ёки блок> қисми бажарилмасдан чеклаб ўтилади. - while такрорлаш шартини олдиндан текширувчи такрорлаш оператори ҳисобланади. Агар такрорлаш бошида <ифода> ёлғон бўлса, while оператори таркибидаги <оператор ёки блок> қисми бажарилмасдан чеклаб ўтилади.
- Айрим ҳолларда <ифода> қиймат бериш оператори кўринишида келиши мумкин. Бунда қиймат бериш амали бажарилади ва натижа 0 билан солиштирилади. Натижа нолдан фарқли бўлса, такрорлаш давом эттирилади.
- Агар рост ифоданинг қиймати нолдан фарқли ўзгармас бўлса, чексиз такрорлаш рўй беради. Масалан:
- while(1); // чексиз такрорлаш
Худди for операторидек, ‘,’ ёрдамида <ифода> да бир нечта амаллар синхрон равишда бажариш мумкин. Масалан, сон ва унинг квадратларини чоп қиладиган программада ушбу ҳолат кўрсатилган: - Худди for операторидек, ‘,’ ёрдамида <ифода> да бир нечта амаллар синхрон равишда бажариш мумкин. Масалан, сон ва унинг квадратларини чоп қиладиган программада ушбу ҳолат кўрсатилган:
- #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;
- }
- while ( shart )
- {
- // sikl tanasi
- }
- Хоссалари:
- Мураккаб шартлардан фойдаланиш мумкин:
- Агар дастур танасида фақат битта оператор бўлса, {} қавсларни ёзиш шарт эмас.
- while ( a < b && b < c ) { ... }
- Хоссалари:
- Циклга ҳар сафар кирганда шарт ҳисобланаверади
- Агар циклга кирганда шарт ёлғон бўлса, цикл умуман бажарилмайди
- Агар шарт ҳеч қачон ёлғон бўлмаса, дастур такрорланаверади
- a = 4; b = 6;
- while ( a > b ) a = a– b;
- a = 4; b = 6;
- while ( a < b ) d = a + b;
- Цикл неча марта такрорланади?
- a = 4; b = 6;
- while ( a < b ) a ++;
- a = 4; b = 6;
- while ( a < b ) a += b;
- a = 4; b = 6;
- while ( a > b ) a ++;
- a = 4; b = 6;
- while ( a < b ) b = a - b;
- a = 4; b = 6;
- while ( a < b ) a --;
- 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 --;
- }
- С++ тилида for ни while га алмаштириш ва аксинча ҳолати
- Ҳар доим мумкин!
- "4": Бутун сонни киритиш ва ундаги рақамлар йиғиндисини киритинг.
- Мисол:
- Бутун сонни киритинг: 1234
- 1234 сонидаги рақамлар йиғиндиси 10га тенг.
- "5": Бутун сонни киритинг ва унинг таркибида 2 та бир хил сонлар борлигини аниқланг.
- Мисол:
- Бутун сонни киритинг: Бутун сонни киритинг:
- 1234 1224
- Yo’q Ha
- Мисоллар:
- 1, 2, 3, 4, 5, …
- 1, 2, 4, 7, 11, 16, …
- 1, 2, 4, 8, 16, 32, …
-
- Масала: Модули 0,001дан катта бўлган ушбу кетма-кетликдаги элементлар йиғиндисини топиш:
- Элемент кетма-кетлиги (№2 дан бошлаб):
- S = 0; b = 1; c = 2; z = -1; a = 1;
- a = z*b/c;
- b = b + 1; c = 2*c; z = -z;
- #include
- int main()
- {
- int b, c, z;
- float S, a;
- S = 0; z = -1;
- b = 1; c = 2; a = 1;
- while (fabs(a) > 0.001) {
- S += a;
- a = z * b / c;
- z = - z;
- b ++;
- c *= 2;
- }
- cout<<"S = “ << S);
- }
- Элементлар кетма-кетлигини ҳисоби
- Нима бўлганда ҳам бўлишда яхлитлаш
do-while такрорлаш оператори while операторидан фарқли равишда олдин оператор ёки блокни бажаради, кейин такрорлаш шартини текширади. Бу қурилма такрорлаш танасини камида бир марта бажарилишини таъминлайди. do-while такрорлаш оператори қуйидаги синтаксисга эга: - do-while такрорлаш оператори while операторидан фарқли равишда олдин оператор ёки блокни бажаради, кейин такрорлаш шартини текширади. Бу қурилма такрорлаш танасини камида бир марта бажарилишини таъминлайди. do-while такрорлаш оператори қуйидаги синтаксисга эга:
- do <оператор ёки блок>; while (<ифода>);
- Бундай такрорлаш операторининг кенг қўлланиладиган ҳолатлари - бу такрорлашни бошламасдан туриб, такрорлаш шартини текширишнинг иложи бўлмаган ҳолатлар ҳисобланади.
- do-while такрорлаш оператори
Масалан, бирорта жараённи давом эттириш ёки тўхтатиш ҳақидаги сўровга жавоб олиш ва уни текшириш зарур бўлсин. Кўриниб турибдики, жараённи бошламасдан олдин бу сўровни беришнинг маъноси йўқ. Ҳеч бўлмаганда такрорлаш жараёнининг битта қадами амалга оширилган бўлиши керак: - Масалан, бирорта жараённи давом эттириш ёки тўхтатиш ҳақидаги сўровга жавоб олиш ва уни текшириш зарур бўлсин. Кўриниб турибдики, жараённи бошламасдан олдин бу сўровни беришнинг маъноси йўқ. Ҳеч бўлмаганда такрорлаш жараёнининг битта қадами амалга оширилган бўлиши керак:
- #include
- int main()
- {
- char javob;
- do
- {
- ... // программа танаси
- cout<<”Jarayonni to’xtatish (N):_ ”;
- cin>>javob;
- } while(javob !=N)
- return 0;
- }
- "4": 0,001 аниқликдаги кетма-кет элементлар йиғиндисини топиш:
-
- Жавоб:
- S = 1.157
- "5": 0,001 аниқликдаги кетма-кет элементлар йиғиндисини топиш:
- Жавоб:
- S = 1.220
- Масала: Бутун мусбат сонни (<2000000) киритинг ва ундаги рақамлар сонини аниқланг.
- Муаммоси: Манфий сон ёки нолни қандай киритмаслик мумкин?
- Ечиш: Агар нотўғри сон киритилса, орқага маълумотларни киритишга (циклга!) қайтилсин.
- Хоссаси: Цикл танасини бир марта ҳар қандай ҳолларда қилиш керак цикл шартини текширишни цикл охирида қилиш керак (шартли ўтиш цикли).
- Шартли ўтиш цикли – Шарти цикл охирида текшириладиган цикл.
- Шартли ўтиш цикли : алгоритми
- int main()
- {
- long n;
- do {
- cout<<“Musbat sonni kiriting\n”;
- cin>>n;
- }
- while ( n <= 0 );
- ... // асосий алгоритми
- }
- Хоссалари:
- Цикл танаси ҳар доим ҳеч бўлмаганда бир марта бажарилади
- while («хайр…» ) сўзидан сўнг цикл давомининг шарти қўйилади
- Цикл неча марта такрорланади?
- a = 4; b = 6;
- do { a ++; } while (a <= b);
- a = 4; b = 6;
- do { a += b; } while ( a <= b );
- a = 4; b = 6;
- do { a += b; } while ( a >= b );
- a = 4; b = 6;
- do b = a - b; while ( a >= b );
- a = 4; b = 6;
- do a += 2; while ( a >= b );
1) y = xⁿ funksiyasini rekurent formula orqali hisoblash dasturini tuzing. (x-ixtiyoriy son, n=10) - # include
- void main ( )
- { float x=2.56, y=1;
- for (int i=1; i<=10; i=i+1)
- y = y*x;
- cout <<“y=“<< y << endl;
- }
| 2) P = n!; (n=13) - # include
- void main ( )
- { int n; long p =1;
- f or ( n=1; n<=13; n++)
- p= p * n;
- cout << “N faktorial =“<
- }
| - 3) Quyidagi murakkab takrorlanuvchi algoritmning dasturini tuzamiz.
(xatosini topamiz!!!!) # include # include void main ( ) { float p, p1; for (int n=1; n<=3; n++) p1=1; for (int k=1; k<5; k++) p1=p1*k*(n+1)/n*(k+1); p=p*p1; cout<<“p=“<
# include # include void main ( ) { float p=1, p1; for (int k=1; k<=3; k++) { p1=1; for (int n=1; n<=5; n++) p1=p1*k*(n+1)/(n*(k+1)); p=p*p1; } cout<<“p=“<
Do'stlaringiz bilan baham: |