Бірінің ішіне екіншісін кіріктіріп пайдаланған бірнеше қарапайым циклдерді кіріктірілген циклдер деп атайды. Кіріктірілген циклдерде ішкі цикл сыртқысына толық ену керек. Бір-біріне кіріктірілген екі қарапайым циклдің жазылу түрі 1-сызбада берілген. Кіріктірілген циклдерді күрделі цикл деп те атайды.
Циклде қолданылған n саны бүтін сандар типіне жатады (1-сызба). Егер программада бір цикл қолданылса, онда ол n рет жұмыс істейді. Егер программада кіріктірілген 2 цикл қолданылса, онда бұл циклдер тобы n * n рет жұмыс істейді. Мысалы, төменде берілген цикл жалпы саны 100 рет жұмыс істейді.
for i in range(1, 11)
for j in range(1, 11)
for i in range (1,101)
for j range (1, 101)
for k range (1, 101)
Кіріктірілген циклдер көмегімен барлық нұсқалар тексерілетін жағдайларды, қарастырылатын есептерді шығаруға қолданған тиімді. Бірақ циклдерді бір-біріне 2-3-тен артық кіріктіру тиімсіз. Ол программаның жұмыс істеу уақытын ұзартады. Егер программада үш қарапайым циклді бір-біріне кіріктіріп қолдансақ, онда программаның жұмыс істеу уақыты n3-ге тең болады. Бұл шаманың өте үлкен екенін мына мысалдан да білуге болады. Мысалы, n = 100 болса, онда кіріктірілген 3 цикл 1 000 000 рет жұмыс істейді. Егер цикл 1 000 000 рет орындалса және шамамен 1 с уақыт кететінін ескерсек, онда n = 1000 болғанда, цикл 109 рет, яғни миллиард рет жұмыс істейді. Бұған шамамен 1000 секунд, яғни 17 минуттай уақыт кетеді. Сонда бір есептің компьютерде нәтижесін күту үшін 17 минуттай қажет болады. Сол үшін мұндай есептерді қарастырғанда тиімді алгоритмдер арқылы цикл жұмысын азайту қарастырылады.
Кіріктірілген циклдер көмегімен сандық және символдық деректерді тіктөрбұрышты кесте түрінде экранға шығаруға болады. Сандық деректерді тіктөртбұрышты кесте түрінде түсінуге қолайлы. Деректерді тіктөртбұрыш түрінде экранға шығару үшін төмендегі цикл қатарларының коды жазылады. Мысалы, өлшемі 5х5 тіктөртбұрышты көбейту кестесін құру үшін төмендегі программа кодын жазады (1-сурет), ал программа орындалғандағы нәтиже 2-суретте берілген.
1-сурет. Программа коды
2-сурет. Программа нәтижесі
Программа кодынан көріп тұрғанындай, сыртқы цикл 1 рет орындалғанда, ішкі цикл 5 рет орындалады. Деректерді тіктөртбұрыш пішінде беруде print() операторын дұрыс орналастыру маңызды. Бұл жерде "\t" деректердің арасын табуляция арқылы бірдей қашықтыққа жылжытады. Кіріктірілген циклдерді қолдану барысында төменде көрсетілген қателер жиі кездеседі.
Кіріктірілген циклдерді қолданудағы жалпыға тән қателер:
• ішкі және сыртқы циклдердің цикл параметріне бірдей айнымалы жазу;
• кіріктірілген циклдерге ішкі, сыртқы циклдерге қатысты операторларды орналастыруда бос орындардың санынан қателесуден оператор немесе өрнектердің циклге енбей қалу жағдайы;
• цикл параметрлеріне нақты сандарды қолдану.
Практикалық тапсырма. Жай сан. Ұзындығы N болатын сандар тізбегі берілген (N < 100 ). Сандар тізбегіндегі жай сандарды анықтап, экранға шығарыңдар. Жай сан − өзіне және бірге ғана бөлінетін сан.
Есепті шешу алгоритмі. Есепті орындау үшін кіріктірілген циклдерді пайдалану қажет. Санның жай сан екенін тексеру үшін санның квадрат түбірін бүтін мәнге жуықтаймыз. Тексеру керек сандарды сыртқы циклді оқуға пайдаланамыз. Ішкі циклды берілген сандарды жай сан шартына тексеру үшін пайдаланамыз. Ішкі цикл параметрі 2-ден басталып, бүтін мәнге жуықталған санның түбіріне дейін 1 қадаммен өзгереді. Осы сандар аралығында тексерілетін санның бөлгіші болмаса, ол жай санға жатады. Есептің программа коды 2-суретте, ал программаның орындалу нәтижесі 3-суретте берілген.
Мысалы
5
5
45
197
47
18
Нәтиже
5 197 47
Python-да математикалық функцияларды қолдану үшін арнайы модульдер қолданылады. Программада математикалық модульді іске қосу үшін import командасы қолданамыз. Мысалы: math.sqrt(x) – х санының квадрат түбірін береді, онда round (math.sqrt(18))= 4 болады.
Талдау
Практикалық тапсырмадағы «жай сандарды анықтау» программа кодына талдау жасай отырып, программаның әрбір жолына түсніктеме жазыңдар.
Кодқа назар аударыңыз, оны жауап шығу керек ретке келтіріңіз.
adj = ["red", "big", "tasty"]
fruits = ["apple", "banana", "cherry"]
for x in adj:
for y in fruits:
print(x, y)
Кіріктірілген циклдердің жай циклдерден қандай айырмашылығы бар?
Кіріктірілген циклдердің орындалу уақытын қалай есептеуге болады?
Бірнеше циклдерді кіріктіріп пайдаланудың программа жұмысына кері әсері қандай?
Деректерді тіктөртбұрышты кесте түрінде беру программасын жазуда қай оператордың жұмысы маңызды саналады?
Тапсырма 1
Тапсырма 2
Тапсырма 3
«Кіріктірілген циклдер» тақырыбына арналған бір есептің мәтінін құрастыр. Құрастырған есебіңді шешу жолымен программасын ұсын.