3-маъруза олдшартли ва сўнгшартли такрорланиш. Такрорланишли тармоқланиш ва шартсиз ўтиш орқали ташкил этиш


Такрорлаш операторида қавс ичидаги ифодалар бўлмаслиги мумкин, лекин синтаксис ‘;’ бўлмаслигига рухсат бермайди. Шу сабабли, энг содда кўринишдаги такрорлаш оператори қуйидагича бўлади


Download 1.24 Mb.
bet2/3
Sana24.01.2023
Hajmi1.24 Mb.
#1116078
1   2   3
Bog'liq
3-Маъруза сиртқи.pptx

Такрорлаш операторида қавс ичидаги ифодалар бўлмаслиги мумкин, лекин синтаксис ‘;’ бўлмаслигига рухсат бермайди. Шу сабабли, энг содда кўринишдаги такрорлаш оператори қуйидагича бўлади:

  • Такрорлаш операторида қавс ичидаги ифодалар бўлмаслиги мумкин, лекин синтаксис ‘;’ бўлмаслигига рухсат бермайди. Шу сабабли, энг содда кўринишдаги такрорлаш оператори қуйидагича бўлади:
  • for (;;)cout <<”Cheksiz takrorlash…” ;
  • Агар такрорлаш жараёнида бир нечта ўзгарувчиларнинг қиймати синхрон равишда ўзгариши керак бўлса, такрорлаш ифодаларида зарур операторларни ‘,’ билан ёзиш орқали бунга эришиш мумкин:
  • for(int i=10,j=2;i<=20;i++,j=i+10) {...};
  • Такрорлаш операторининг ҳар бир қадамида j ва i ўзгарувчи-ларнинг қийматлари мос равишда ўзгариб боради.
  • for такрорлаш оператори
  • 16:15
  • Алгоритм
  • боши
  • i, i2, i3
  • тамом
  • йўқ
  • ха
  • i <= 8?
  • i = 1;
  • i = i + 1;
  • i2 = i * i;
  • i3 = i2 * i;
  • Ўзгарувчи циклнинг бошланғич қийматини бериш
  • Хаммаси бажарилдими,текшириш
  • квадрат ва кубни ҳисоблаймиз
  • Натижани чиқариш
  • кейинги iга ўтиш
  • http://acm.tuit.uz/forum
  • 16:15
  • Алгоритм ("цикл " блоки )
  • боши
  • i, i2, i3
  • тамом
  • i2 = i * i;
  • i3 = i2 * i;
  • i = 1,8
  • "цикл" блоки
  • Цикл танаси
  • http://acm.tuit.uz/forum
  • 16:15
  • Дастур
  • 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
  • Тенг устунлар
  • цикл работает, пока это условие верно
  • цикл
  • Цикл боши
  • Цикл охири
  • Цикл сарлавхаси
  • for (i=1; i<=8; i++)
  • i2 = i*i;
  • i3 = i2*i;
  • printf("%4d %4d %4d\n", i, i2, i3);
  • Цикл танаси
  • 16:15
  • Масала. Бутун сонларни кубларини ва квадратларини экранга чиқаринг 8 дан 1гача (камайиш тартибда).
  • Хосса: ўзгарувчи цикл камайиши керак.
  • Ечим:
  • for ( )
  • {
  • i2 = i*i;
  • i3 = i2*i;
  • printf("%4d %4d %4d\n", i, i2, i3);
  • }
  • i = 8; i >= 1; i --
  • http://acm.tuit.uz/forum
  • 16:15
  • Ўзгарувчан цикл
  • 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 (; c < d; ) { ... }
  • 16:15
  • Ўзгарувчан цикл
  • Хосса:
    • Шарт циклнинг кейинги қадами бошланишидан олдин текширилади, агар у ёлғон бўлса цикл бажарилмайди;
    • ўзгартириш (сарлавханинг учинчи қисми) циклнинг навбатдаги қадамининг охирида бажарилади;
    • Агар шарт ёлғон бўлмаса цикл тўхтовсиз ишлаши мумкин (цикл ичига тушиб қолади)
    • Агар цикл танасида битта оператор бўлса, қавсни {} қўймаса ҳам бўлади:
  • for(i=1; i<8; i++) { i--; }
  • for (i = 1; i < 8; i++) a += b;
  • Цикл танасида цикл ўзгарувчиларини ўзгартириш тавсия этилмайди!
  • !
  • 16:15
  • for (i=8; i>=1; i--) printf("Привет");
  • printf("i=%d", i);
  • Ўзгарувчан цикл:
  • Хоссалари:
    • Кўп схемаларда цикл бажарилишидан сўнг ўзгарувчан циклнинг шарти бузилган ҳолдаги биринчи ифодаси киритилади:
  • for (i=1; i<=8; i++) printf("Привет");
  • printf("i=%d", i);
  • i=9
  • i=0
  • http://acm.tuit.uz/forum
  • 16:15
  • Цикл неча маротаба такрорланмоқда?
  • 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 ++;
  • Цикл ичида қолиш
  • a = 1;
  • for(i=1; i<4; i++) a = a+i;
  • a = 7
  • 16:15
  • Вазифа
  • "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
  • 16:15
  • Топшириқ. Иккита бутун сонни киритинг ва улардан каттасини экранга чиқаринг.
  • Ечим ғояси: Экранга биринчи сон чиқиши керак, агарда у иккинчи сондан катта бўлса, ёки иккинчи сон чиқиши керак, агарда биринчи сондан катта бўлса.
  • Фарқли томонлари: амални бажарилиши бир неча шартларга боғлиқ (агар … ёки …).
  • Агар алгоритм бажарилиш кетма-кетлиги бир нечта шартларга боғлиқ бўлса у тармоқланувчи деб аталади.
  • 16:15
  • 1-вариант. Блок-схема
  • бошланиш
  • max = a;
  • киритиш a,b
  • чиқариш max
  • a > b?
  • max = b;
  • тамом
  • ҳа
  • йўқ
  • Тармоқнинг тўлиқ кўриниши
  • «шарт» блоги
  • Агар a = b?
  • ?
  • http://acm.tuit.uz/forum
  • 16:15
  • 2-Вариант. Блок-схема
  • Тармоқнинг тўлиқсиз формаси
  • бошлаш
  • max = a;
  • киритиш a,b
  • чиқариш max
  • max = b;
  • тамом
  • ҳа
  • йўқ
  • b > a?
  • http://acm.tuit.uz/forum
  • 16:15
  • Танлаш оператори
  • Масала: Ой тартиб рақамини киритинг ва шу ой кунларини чиқаринг.
  • Ечим: Ой бўйича кунлар:
    • 28 кун – 2 (февраль)
    • 30 кун – 4 (апрель), 6 (июнь), 9 (сентябрь), 11 (ноябрь)
    • 31 кун – 1 (январь), 3 (март), 5 (май), 7 (июль), 8 (август), 10 (октябрь), 12 (декабрь)
  • Хосса: Ой тартиб рақамидан иккита эмас, балки бир нечта фарқли боғланиш танлаш керак.
  • Маълум усуллар билан ечиш мумкинми?
  • ?
  • http://acm.tuit.uz/forum
  • 16:15
  • Алгоритм
  • боши
  • тамом
  • Танлаш оператори
  • Бирорта ҳам вариант тўғри келмади
  • M ни кирит
  • ҳа
  • йўқ
  • M = 1?
  • D = 31;
  • йўқ
  • M = 2?
  • D = 28;
  • ҳа
  • йўқ
  • M = 12?
  • D = 31;
  • ҳа
  • D ни чоп
  • этиш
  • хато
  • http://acm.tuit.uz/forum
  • 16:15
  • Мураккаб шарт
  • Топшириқ. Фирма 25 дан 40 ёшгача бўлга ходимларни олади. Номзоднинг ёшини киритинг ва белгиланг, фирмага тўғри келадими («тўғри келади" ёки «тўғри келмайди» экранга чиқаринг).
  • Ўзига хослик: иккита шарт бирдан бажариладими? Текшириш керак.
  • Машхур усуллар билан хал қилиш мумкинми?
  • ?
  • http://acm.tuit.uz/forum
  • 16:15
  • 1- Вариант. Алгоритм
  • бошлаш
  • киритиш x
  • ‘тўғри келади'
  • тамом
  • ҳа
  • йўқ
  • x >= 25?
  • ҳа
  • йўқ
  • x <= 40?
  • тўғри келмайди'
  • тўғри келмайди'
  • http://acm.tuit.uz/forum
  • 16:15
  • Номаълум қадамлар сонидаги цикл
  • Масала: Бутун сонни олинг (<2000000) ва ундаги рақамлар сонини аниқланг.
  • Ечим ғояси: кетма-кет охирги рақамни, ҳисоблагични оширамиз.
  • Муаммо: нечта қадам ташлаш кераклиги ноаниқ
  • Ечим: n=0 бўлганда тўхташ керак ва х.к., “хайр n!=0 ” қилиш керак.
  • n
  • count
  • 123
  • 0
  • 12
  • 1
  • 1
  • 2
  • 0
  • 3
  • http://acm.tuit.uz/forum
  • 16:15
  • Алгоритми
  • боши
  • count
  • тамом
  • йўқ
  • ҳа
  • n != 0?
  • count = 0;
  • count = count + 1;
  • n = n / 10;
  • Рақам ҳисоблагични нолга тушириш
  • n ни кирит
  • http://acm.tuit.uz/forum
  • 16:15
  • Дастури
  • 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”<
  • }
  • n1 = n;
  • n1
  • “хайр n != 0“ ни бажариш
  • Нима ёмон?
  • ?
  • long – узун бутун рақам (± 2147483647)
  • %ld –узун сонларни киритиш ва чиқариш формати
  • , n1;
  • 16:15

while такрорлаш оператори

  • while такрорлаш оператори, оператор ёки блокни такрорлаш шарти ёлғон (false ёки 0) бўлгунча такрор бажаради. У қуйидаги синтаксисга эга:
  • while (<ифода>) <оператор ёки блок>;
  • Агар <ифода> рост қийматли ўзгармас ифода бўлса, такрорлаш чексиз бўлади. Худди шундай, <ифода> такрорлаш бошланишида рост бўлиб, унинг қийматига такрорлаш танасидаги ҳисоблаш таъсир этмаса, яъни унинг қиймати ўзгармаса, такрорлаш чексиз бўлади.
  • 16:15

while такрорлаш шартини олдиндан текширувчи такрорлаш оператори ҳисобланади. Агар такрорлаш бошида <ифода> ёлғон бўлса, while оператори таркибидаги <оператор ёки блок> қисми бажа­рилмасдан чеклаб ўтилади.

  • while такрорлаш шартини олдиндан текширувчи такрорлаш оператори ҳисобланади. Агар такрорлаш бошида <ифода> ёлғон бўлса, while оператори таркибидаги <оператор ёки блок> қисми бажа­рилмасдан чеклаб ўтилади.
  • Айрим ҳолларда <ифода> қиймат бериш оператори кўринишида келиши мумкин. Бунда қиймат бериш амали бажарилади ва натижа 0 билан солиштирилади. Натижа нолдан фарқли бўлса, такрорлаш давом эттирилади.
  • Агар рост ифоданинг қиймати нолдан фарқли ўзгармас бўлса, чексиз такрорлаш рўй беради. Масалан:
  • while(1); // чексиз такрорлаш
  • 16:15

Худди 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="<ичига тушиш
  • http://acm.tuit.uz/forum
  • 16:15
  • 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 га алмаштириш ва аксинча ҳолати
  • Ҳар доим мумкин!
  • !
  • 16:15
  • Масала
  • "4": Бутун сонни киритиш ва ундаги рақамлар йиғиндисини киритинг.
  • Мисол:
  • Бутун сонни киритинг: 1234
  • 1234 сонидаги рақамлар йиғиндиси 10га тенг.
  • "5": Бутун сонни киритинг ва унинг таркибида 2 та бир хил сонлар борлигини аниқланг.
  • Мисол:
  • Бутун сонни киритинг: Бутун сонни киритинг:
  • 1234 1224
  • Yo’q Ha
  • http://acm.tuit.uz/forum
  • 16:15
  • Кетма-кетликлар
  • Мисоллар:
    • 1, 2, 3, 4, 5, …
    • 1, 2, 4, 7, 11, 16, …
    • 1, 2, 4, 8, 16, 32, …
  • an = n
  • a1 = 1, an+1 = an+1
  • a1 = 1, an+1 = an + n
  • an = 2n-1
  • a1 = 1, an+1 = 2an
  • b1 = 1, bn+1 = bn+1
  • c1 = 2, cn+1 = 2cn
  • http://acm.tuit.uz/forum
  • 16:15
  • Кетма-кетликлар
  • Масала: Модули 0,001дан катта бўлган ушбу кетма-кетликдаги элементлар йиғиндисини топиш:
  • Элемент кетма-кетлиги (№2 дан бошлаб):
  • n
  • 1
  • 2
  • 3
  • 4
  • 5
  • ...
  • b
  • 1
  • 2
  • 3
  • 4
  • 5
  • ...
  • c
  • 2
  • 4
  • 8
  • 16
  • 32
  • ...
  • z
  • -1
  • 1
  • -1
  • 1
  • -1
  • ...
  • b = b+1;
  • c = 2*c;
  • z = -z;
  • http://acm.tuit.uz/forum
  • 16:15
  • Алгоритми
  • Боши:
  • S
  • тамом
  • йўқ
  • ҳа
  • |a| > 0.001?
  • S = S + a;
  • S = 0; b = 1; c = 2; z = -1; a = 1;
  • Дастлабки ифода
  • a = z*b/c;
  • b = b + 1; c = 2*c; z = -z;
  • биринчи элемент
  • a = 1;
  • S = 0;
  • Янги элемент
  • ўзгариши
  • Қайта ишлаш?
  • ?
  • 16:15
  • Дастури
  • #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);
  • }
  • Кейинги қўшилувчига ўтиш
  • Дастлабки ифода
  • Йиғиндини ошириб бориш
  • Элементлар кетма-кетлигини ҳисоби
  • Математик функция
  • fabs – соннинг модули
  • нима ёмон?
  • ?
  • , b;
  • Нима бўлганда ҳам бўлишда яхлитлаш
  • 16:15

do-while такрорлаш оператори while операторидан фарқли равишда олдин оператор ёки блокни бажаради, кейин такрорлаш шартини текширади. Бу қурилма такрорлаш танасини камида бир марта бажарилишини таъминлайди. do-while такрорлаш оператори қуйидаги синтаксисга эга:

  • do-while такрорлаш оператори while операторидан фарқли равишда олдин оператор ёки блокни бажаради, кейин такрорлаш шартини текширади. Бу қурилма такрорлаш танасини камида бир марта бажарилишини таъминлайди. do-while такрорлаш оператори қуйидаги синтаксисга эга:
  • do <оператор ёки блок>; while (<ифода>);
  • Бундай такрорлаш операторининг кенг қўлланиладиган ҳолатлари - бу такрорлашни бошламасдан туриб, такрорлаш шартини текширишнинг иложи бўлмаган ҳолатлар ҳисобланади.
  • do-while такрорлаш оператори
  • 16:15

Масалан, бирорта жараённи давом эттириш ёки тўхтатиш ҳақидаги сўровга жавоб олиш ва уни текшириш зарур бўлсин. Кўриниб турибдики, жараённи бошламасдан олдин бу сўровни беришнинг маъноси йўқ. Ҳеч бўлмаганда такрорлаш жараёнининг битта қадами амалга оширилган бўлиши керак:

  • Масалан, бирорта жараённи давом эттириш ёки тўхтатиш ҳақидаги сўровга жавоб олиш ва уни текшириш зарур бўлсин. Кўриниб турибдики, жараённи бошламасдан олдин бу сўровни беришнинг маъноси йўқ. Ҳеч бўлмаганда такрорлаш жараёнининг битта қадами амалга оширилган бўлиши керак:
  • #include
  • int main()
  • {
  • char javob;
  • do
  • {
  • ... // программа танаси
  • cout<<”Jarayonni to’xtatish (N):_ ”;
  • cin>>javob;
  • } while(javob !=N)
  • return 0;
  • }
  • 16:15
  • Масала
  • "4": 0,001 аниқликдаги кетма-кет элементлар йиғиндисини топиш:
  • Жавоб:
  • S = 1.157
  • "5": 0,001 аниқликдаги кетма-кет элементлар йиғиндисини топиш:
  • Жавоб:
  • S = 1.220
  • http://acm.tuit.uz/forum
  • 16:15
  • Шартли ўтиш цикли:
  • Масала: Бутун мусбат сонни (<2000000) киритинг ва ундаги рақамлар сонини аниқланг.
  • Муаммоси: Манфий сон ёки нолни қандай киритмаслик мумкин?
  • Ечиш: Агар нотўғри сон киритилса, орқага маълумотларни киритишга (циклга!) қайтилсин.
  • Хоссаси: Цикл танасини бир марта ҳар қандай ҳолларда қилиш керак  цикл шартини текширишни цикл охирида қилиш керак (шартли ўтиш цикли).
  • Шартли ўтиш цикли – Шарти цикл охирида текшириладиган цикл.
  • http://acm.tuit.uz/forum
  • 16:15
  • Шартли ўтиш цикли : алгоритми
  • Боши
  • тамом
  • йўқ
  • ҳа
  • n <= 0?
  • Цикл танаси
  • шарти
  • “хусусий жараён” блоки
  • n ни кирит
  • асосий алгоритми
  • http://acm.tuit.uz/forum
  • 16:15
  • Дастури
  • int main()
  • {
  • long n;
  • do {
  • cout<<“Musbat sonni kiriting\n”;
  • cin>>n;
  • }
  • while ( n <= 0 );
  • ... // асосий алгоритми
  • }
  • шарт
  • Хоссалари:
    • Цикл танаси ҳар доим ҳеч бўлмаганда бир марта бажарилади
    • while («хайр…» ) сўзидан сўнг цикл давомининг шарти қўйилади
  • 16:15
  • Цикл неча марта такрорланади?
  • 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 );
  • Цикл ичига тушиш
  • http://acm.tuit.uz/forum
  • 16:15

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.
  • boshlash
  • P=1
  • K=1, 3
  • P1=1
  • N=1, 5
  • P=P*P1
  • P
  • tamom

(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=“<


Download 1.24 Mb.

Do'stlaringiz bilan baham:
1   2   3




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