Автор: Пользователь скрыл имя, 20 Ноября 2010 в 19:19, задача
Есептерді шешу барысында бір түрлі әрекеттерді бірнеше рет қайталау қажеттілігі жиі кездеседі. Бұл әрекеттерді анықтайтын параметрлердің мәндері әр түрлі болады. Осындай әрекеттерді жүзеге асыратын алгоритмдер циклдік, ал әрекеттердің бірнеше рет қайталанатын тізбегі (циклдің денесі) циклдер деп аталады. Қайталану саны белгілі бір шартқа байланысты немесе алдын ала белгілі болады. Циклдерді пайдалану ықшам бағдарламалар көмегімен есептеулердің үлкен көлемдерін орындауға мүмкіндік береді.
Есептерді шешу барысында бір
түрлі әрекеттерді бірнеше рет
қайталау қажеттілігі жиі
ҚАЙТАЛАНУ САНЫ БЕЛГІСІЗ ЦИКЛДЕР
Циклді қанша рет қайталау керек екені кейде алдын-ала белгісіз болады, бірақ белгілі бір шарт қанағаттандырылса, онда ол цикл орындалуға тиіс.
Іске асыру пішіндері:
QBASIC
Циклдің шартты операторы:
WHILE шарт цикл денесі
WEND
DO WHILE немесе UNTIL цикл денесі
LOOP
DO цикл денесі
LOOP WHILE немесе UNTIL
Шарт ақиқат болғанда цикл орындалады (WHILE) немесе жалған болғанда (UNTIL)
1-мысал: 1, 3, 5, … 15 сандарды екі еселеу дәрежелеу кестесін құру.
Шешуі:
Егер Х цикл айнымалысының басқарушысын (параметрді) алғашқы мәнінен – 1-ден соңгы мәніне – 15-ке дейін, Y=X2 формуласын пайдаланып, 2 қадаммен өзгертіп отырса, сандарды екі есе дәрежелеу кестесін құруға болады.
Кестенің бірінші жолын құру үшін мынадай әрекеттерді орындау қажет:
1. X-ке алғашқы мәнін беру: Х=1
2. Y-ті анықтау: Y=X2
3. Пайда болған нәтижені шығару.
Алгоритмнің одан әрі құрылуы үшін қайталанатын әрекеттерді ерекшелеу және егер сондай әрекеттер бар болса, оларды орындау үшін ұйымдастыру қажет. Берілген есепте қайталанатын әрекеттерге мыналар жатады:
1. Y=X2 формуласы бойынша есептеу.
2. Нәтижені шығару.
3. Параметрдің келесі мәнін анықтау.
Егер алғашқы мәні Х=1 болса, Х-тің алдыңғы мәнін қадам шамасына өзгерте отырып, Х-тің келесі мәндерін меншіктеу командасы арқылы алуға болады: Х=X+2.
Цикл денесіне жоғарыда аталған әрекеттер кіреді. Бұл цикл шексіз деп аталады және елеулі кемшілігі бар, ол аяқтала алмайды, өйткені циклдің аяқталу шарты берілмеген. ЭЕМ-де алгоритм орындаудағы мұндай қате циклдің аяқталмай қалуы деп аталады.
Егер Х 15-тен үлкейіп кетсе, циклді аяқтау керек, Х≤15 болса, цикл орындалуы керек.
Циклдің дұрыс ұйымдастырылуы үшін мыналар қажет:
1. Параметрдің алғашқы мәнін беру.
2. Циклдің аяқталу шартын тексеру.
3. Циклдің жаңадан қайталануы алдында
параметрді өзгерту.
Бағдарламасы:
REM шаршылар кестесі
DIM X, Y AS INTEGER
X=1
DO WHILE X<=15
Y=X̂̂ 2
PRINT X, Y
X=X+2
LOOP
Қызметші сөздер арасында цб (цикл басы) және цс (цикл соңы) - көрсетілген командалар сериясы (цикл денесі) берілген шарт сақталмағанша қанша рет орындалуы қажет болса, сонша рет орындалады. Егер шарт басынан бастап орындалмаса, серия бір рет те орындалмайды.
Циклдік алгоритмдер бойынша Бейсик тілінде бағдарламалар құру өте жауапты жұмыс, өйткені цикл ұйымдастыру ережелерінің біреуі бұзылуы түсінуге де, жөндеуге де болмайтын бағдарламалардың пайда болуына әкеледі. Көбіне мұндай бағдарлам алардың логикалық қателері болады.
Ең жиі кездесетін қателер:
1. Циклдің аяқталуын тексеру шарты жоқ. Айтып өткеніміздей , бұл циклдің аяқталмай қалуына әкеледі.
2. Циклдің жаңадан қайталануы алдында параметрді озгертетін команда жою (X=X+2). Бұл жағдай да циклдің аяқталмай қалуына әкеледі, бірақ алдыңғы қатеден өзгешелігі шаршылар кестесі шексіз басыла беретіндігінде, бұл жағдайда кестеде тек Х=1 ғана Y-тің мәндерінің есептеулері болады.
3. Параметрдің алғашқы мәнін (X=1) қоятын команда қалып қалған. Келесі жолды орындағанда Х-ке мән берілмегендіктен, ЭЕМ Х айнымалысына 0 жазады, яғни Х=0 командасын орындайды. ЭЕМ экранында қате нәтиже - 0, 2, 4, .., 14 сандарды екі есе дәрежелеу кестесі пайда болады.
2-мысал: 1, 3, 5, .., 15 сандар дәрежелерінің қосындысын есептейтін алгоритмнің бағдарламасын кұрыңыз.
Шешуі:
Қосындыны есептеу мынадай тізбекпен орындалады:
1.Егер Х=1 болса, бірінші қосылғыш Y анықталады, S=S+Y командасы оны S қосындысының алдыңғы мәніне қосады. S-бастапқы мәні 0-ге тең болуы керек, бұл жағдайда циклдің бірінші орындалуынан кейін, S-тің мәні бірінші қосылғыштың мәніне тең болады.
2. Параметр қадам шамасына өзгереді, келесі қосылғыштың мәні айқындалып, қосындының алдыңғы мәніне қосылады.
3. X<=15 шарты орындалғанша бұл әрекеттер қайталана береді.
Бағдарлама:
REM шаршылар қосындысы
DIM X, Y, S AS INTEGER
X=1: S=0
DO WHILE X<=15
Y=X̂̂̂̂̂̂`2: S=S+Y: X=X+2
LOOP
PRINT «S=»; S
3-мысал. 1, 3, 5, .., 15 сандар дәрежелерінің көбейтіндісін анықтайтын бағдарламаны Бейсик тілінде құрыңыз.
Шешуі:
1-әдіс
REM дәрежелер көбейтіндісі
DIM X, Y, P AS INTEGER
X=1: P=1
DO WHILE X<=15
Y=X`2: P=P*Y: X=X+2
LOOP
PRINT «P=»; P
2-әдіс
REM дәрежелер көбейтіндісі
DIM X, Y, P AS INTEGER
X=1: P=1
DO UNTIL, X>15
Y=X`2: P=P*Y: X=X+2
LOOP
PRINT «P=»; P
Бағдарлама құрылымы алдыңгы мысалдың бағдарламасына ұқсас.
Циклді бірінші орындаудан соң
Р мәні бірінші қосымша
Циклдің денесі шарт ақиқат (егер WHILE түйінді сөзі қолданылса) немесе жалған (UNTIL түйінді сөзі қолданылса) болғанша орындала береді. Егер шарт алғашқыда орындалмаса, онда циклдің денесі бір рет те орындалмауы мүмкін.
Кейде шартты бірінші тексеру
алдында цикл денесін ең
4-мысал: Қосындыны есептеп шығару:
22+23+24+25.
Шешуі:
Қосындыларды жинақтау
S:=S+ кезекті қосылғыш.
Қосылғыштар бір-бірінен тек дәреже көрсеткішінің мәнімен ерекшеленеді. Егер Х айнымалысы енгізілсе, 2x формуласы бойынша әр қосылғышты анықтауға болады, онда Х 2-ден X5-ке дейін 1 қадаммен өзгереді. Олай болса, S былай анықталады: S:=S+2X
REM формула бойынша есептеу
DIM S, X AS INTEGER
S=0: X=2
WHILE X<=5
S=S+2`X
X=X+1
WEND
PRINT «S=»; S
Орындау хаттамасы
S=0;
X=2
2≤5? (иә)
S=0+22=4
X=2+1=3
3≤5? (иә)
S=0+32=9
X=3+1=4
4≤5?(иә)
S=0+42=16
X=4+1=5
5≤5? (иә)
S=0+52=25
X=5+1=6
6≤5 (жоқ)
S=0