- Цикл – бу бир хил кетма-кетликда бажариладиган кўпқиррали харакат.
- Маълум қадамлар сонидаги цикл
- Номаълум қадамлар сонидаги цикл (шартли цикл)
- Масала. Бутун сонларнинг квадратларини ва кубларини экранга чиқаринг 1 дан 8 гача (a дан b гача).
- Хосса: бир хил харакатлар 8 марта бажарилади.
- Маълум усуллар билан ечиш мумкинми?
- Ўзгаривчи циклнинг бошланғич қийматини бериш
- Хаммаси бажарилдими,текшириш
- квадрат ва кубни хисоблаймиз
- Алгоритм ("цикл " блоки )
- void 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
Си тилида дастурлаш - Номаълум қадамлар сонидаги цикл
- Мисол: Ғўладан тахтани арралаб олиш керак. Бунинг учун неча марта арра билан ҳаракат қилиш (арралаш) керак?
- Масала: бутун сонни олинг (<2000000) ва ундаги рақамлар сонини аниқланг.
- Ечим ғояси: кетма-кет охирги рақамни, ҳисоблагични оширамиз.
- Муаммо: нечта қадам ташлаш кераклиги ноаниқ
- Ечим: n=0 бўлганда тўхташ керак ва х.к., “хайр n!=0 ” қилиш керак.
- count = count + 1;
- n = n / 10;
- Рақам ҳисоблагични нолга тушириш
- void main()
- {
- long n;
- int count;
- printf(“Бутун сонни киритинг\n");
- scanf("%ld", &n);
- count = 0;
- while (n != 0)
- {
- count ++;
- n = n / 10;
- }
- printf(“%ld сонда %d рақам топилди", n, count);
- }
- long – узун бутун рақам (± 2147483647)
- %ld –узун сонларни киритиш ва чиқариш формати
- while ( шарт )
- {
- // цикл танаси
- }
- Хоссалари:
- Мураккаб шартлардан фойдаланиш мумкин:
- Агар дастур танасида фақат битта оператор бўлса, {} қавсларни ёзиш шарт эмас.
- 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 ни while га алмаштириш ва аксинча
- for( i=1; i<=10; i++)
- {
- // цикл танаси
- }
- i = 1;
- while ( i <= 10 ) {
- // цикл танаси
- i ++;
- }
- for ( i=a; i>=b; i--)
- {
- // цикл танаси
- }
- i = a;
- while ( i >= b ) {
- // цикл танаси
- i --;
- }
- Си тилида for ни while га алмаштириш ва аксинча ҳолати
- Ҳар доим мумкин!
- "4": Бутун сонни киритиш ва ундаги рақамлар йиғиндисини киритинг.
- Мисол:
- Бутун сонни киритинг: 1234
- 1234 сонидаги рақамлар йиғиндиси 10га тенг.
- "5": Бутун сонни киритинг ва унинг таркибида 2 та бир хил сонлар борлиги тўғри эканлигини аниқланг.
- Мисол:
- Бутун сонни киритинг: : Бутун сонни киритинг:
- 1234 1224
- Йўқ. Ҳа.
- Мисоллар:
- 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
- void 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;
- }
- printf ("S = %10.3f", S);
- }
- Элементлар кетма-кетлигини ҳисоби
- "4": 0,001 аниқликдаги кетма-кет элементлар йиғиндисини топиш:
-
- Жавоб:
- S = 1.157
- "5": 0,001 аниқликдаги кетма-кет элементлар йиғиндисини топиш:
- Жавоб:
-
- S = 1.220
- Масала: Бутун мусбат сонни (<2000000) киритинг ва ундаги рақамлар сонини аниқланг.
- Муаммоси: Манфий сон ёки нолни қандай киритмаслик мумкин?
- Ечиш: Агар нотўғри сон киритилса, орқага маълумотларни киритишга (циклга!) қайтилсин. Хоссаси: Цикл танасини бир марта ҳар қандай ҳолларда қилиш керак цикл шартини текширишни цикл охирида қилиш керак (шартли ўтиш цикли).
- Шартли ўтиш цикли – Шарти цикл охирида текшириладиган цикл.
- Шартли ўтиш цикли : алгоритми
- void main()
- {
- long n;
- do {
- printf(“Мусбат сонни киритинг\n");
- scanf("%ld", &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 );
- Масала (нотўғри коддан ҳимоя воситаси билан)
- "4": Натурал сонни киритинг ва унинг рақамлари сони 10 га тенглигини текширинг.
- Мисол:
- Сонни киритинг>= 0: Сонни киритинг >= 0:
- -234 1233
- Мусбат сон керак. Йўқ
- Сонни киритинг >= 0:
- 1234
- Ҳа
- "5": Натурал сонни киритинг ва қандай сонлар бир неча марта такрорланаётганини текширинг.
- Мисол:
- Сонни киритинг>= 0: Сонни киритинг >= 0:
- 2323 1234
- Тарорланяпти: 2, 3 такрорланиш йўқ.
Do'stlaringiz bilan baham: |