Алгоритмнің түсінігі, түрлері. Алгоритмдер
Скачать 61.84 Kb.
|
Циклдік алгоритмдерБіз бірдей әрекеттер қайталанып келетін процестерді жиі байқаймыз немесе оларға қатысамыз. Мысалы, дүкендегі сатушының қалай жұмыс істейтінін қарастырайық. Барлық сатып алушыларға ол бір схема бойынша қызмет көрсетеді: тауарды беру – ақшаны алу – чекті шығару – қайтарымын беру. Тек тауарлардың көлемі мен түрлері ғана өзгереді. Кинотеатрдағы бақылаушы мына схема бойынша жұмыс жасайды: билетті алу – сеансты тексеру – билетті жырту – билетті қайта беру. Осылай күні бойы жүздеген рет қайталанады. Сонымен қатар бір әрекетті бірнеше рет көлікке азық-түлік тиейтін жүк тасушы да; конвейрдегі жұмысшы да; бөлмеге тұсқағаз жабыстырушы маляр да; сіз де шай ішкенде немесе таңертең сабаққа барғанда қайталайсыз. Бұйымдарды сұрыптау алгоритмін қарастыруға қайта оралайық. Бұл алгоритмде бір бұйыммен өндірілген бір реттік әрекет баяндалған. Ол № 1 немесе № 2 дүкенге жіберілді және алгоритм осымен аяқталды. Бірақ шынайы бұйымдардың сұрыптауға үлкен көлемде түсетіні. Яғни, алгоритмде баяндалған әрекеттер қайта-қайта қайталануы тиіс. Ұзақтығы қандай? Сірә, конвейрде бұйым болған кезде шығар. Сұрыптау процесі көп рет қайталануы үшін алгоритмді қалай өзгертуге болады? Нақты қандай әрекеттерді қайталау керек және қай уақытқа дейін? Шешімнің екі нұсқасы бар: шарт жасау, оны орындау барысында әрекетті қайталап отыру қажет, шарт қалай бұзылады, солай қайталауды тоқтатып, алгоритмді жалғастыруға көшу керек (мысалы, шарбақ тақтайларын ол біткенше сырлау, содан кейін ғана түскі үзіліске кірісу); бірдей әрекеттерді қажетті деңгейге жеткенше қайталау (мысалы, бөшкеге он литр су құю). Бірінші нұсқа анағұрлым әмбебеп – ол тақтай саны әртүрлі шарбақтараға сәйкес келе береді, сонымен бірге алдын ала белгісіз болған жағдайдарда да. Бірақ бұл алгоритм нұсқасын орындаушы жасалған шарттың орындалуын тексере алуы керек (шарбақ аяқталды ма?), адам үшін қиындық тудырмайтын нәрселердің машина үшін ауыр болуы мүмкін. Ал екінші нұсқа машина үшін қиындық тудырмайды – механикалық, электрлік, электрондық және басқа да есептегіштер бұрыннан бар және олар әртүрлібір бұл нүсқа иілігіштіктен ада және алгоритмді орындау шарты өзгереген кезде (мысалы бөшкені кішірегіне ауыстырған кезде) алгоритмнің өзіндегі нұсқауды өзгерту қажет (құйылатын шелектің санын өзгерту). Алгоритмдегі қайталанатын әрекет топтары циклдіқалыптастырады. Бірдей әрекеттер қайталанап келетін алгоритмдер циклдікалгоритмдер деп аталады. Қайталау шарты бұзылған жағдайда алгоритмді орындаушы циклден тыс тұрған келесі әрекеттерге көшеді. Алгоритмде бұйымдарды сұрыптау мен олардың саны алдын ала белгісіз болғандықтын, бірінші нұсқаны пайдаланып көреміз – орындалуы сұрыптау процесін қайталау үшін қажетті шартты тауып алуға тырысамыз. Мұндай шарт конвейрде кезекті бұйымдардың бар болуы. Егер сұрыптауды адам жүргізсе, бұл бұйымды кездестіру оңай. Егер сұрыптаушы алгоритмді орындаушы машина болған жағдайда, ол конвейрдегі бұйымның бар екендігін тексере алуы тиіс. Машина мұны қалай жасайды, әрі қарай қарастырайық. Ал қазір сұрыптау алгоритмін циклдің қайталану шартымен толықтырамыз: Конвейрде бұйым бар кезде іс-әрекетті орындау:Бұйымдыөлшегішқұрылғыгыорнату. Бұйымдиаметрінөлшеу. Егердиаметрбелгіленгенненүлкенболса,ондабұйымды№1дүкенгеқою. Әйтпесебұйымды№2дүкенгеқою. Тарамақталудыңсоңы. Циклдың соңы.Мұндағы жартылай қою шрифпен белгіленген жолдардың әрекеттің, яғни, циклдің қайталануына қатысы бар. Алгоритмде тармақталу да бар, бірақ олар ашық шрифпен жазылған. Орындаушыға нақты қандай әрекеттерді қайталау керектігі түсінікті болуы үшін бұл әрекеттер (циклдар) ерекшеленіп тұруы тиіс, яғни, циклдың шегі көрсетілуі қажет. Циклдың қайталануы 1. Әзірконвейрдешартының орындалуына байланысты болғандықтан, осы шарт жазылған жол циклдың бір шеті болуы мүмкін. Басқа шекараны Циклдыңсоңыжолымен орнатады. Егер 1-шарт сақталса, онда көрсетілген шекаралар арасында орналасқан 2...6-әрекеттер орындалады. 1-шарт бұзылған жағдайда орындаушының келесі 7-жолдан кейінгі Циклдың соңы әрекетіне көшуі керек (егер алгоритмнің жалғасы болса). Қарастырылған алгоритмде циклді қайталау мүмкіндігін анықтайтын шартты тексеру цикл әрекетінің өзін орындауды бастамас бұрын жүргізілді. Бірақ кейде циклдың қайталану қажеттілігін тек оны орындағаннан кейін алынған нәтиже бойынша бағалау мүмкін болады. Осы не басқа нұсқаны таңдау орындалған әрекеттердің мәніне байланысты. Мысалы, конвейрлерді темір жол вагондарына тиеген кезде кезекті конвейрді тиеп болған соң ғана вогонда тағы да бос орынның бар екендігін және тиеуді жалғастыруға болатындығын анықтауға болады. Бұл жағдайда циклдың қайталану шарты бар жол оның төменгі шекарасы балып саналады, ал жоғарғы шекарасын Циклдың басталуыжолымен орнатады. Вагонға конвейрді тиеудің циклдық алгоритмін құрастырамыз: Циклдың басталуы.Кезектіконвейрдікранменкөтеру. Конвейрдівагонғаорналастыру. Конвейрдівагонғаарту. Крандыбастапқы қалпынакелтіру. Вагонда бос орын бар кезде, цикл әрекетін қайталау.Вагонесігінжауып,сүргісоғу. 6- шартты орындау кезінде 2...5- әрекеттер қайталанады, одан кейін 6-шарттың орындалуы қайта тексеріледі. Егер ол бұзылған болса, цикл қайталанбайды және орындаушы 6-шарттан кейінгі келесі 7-Вагонесігін жауып,сүргісоғунұсқауына өтеді. Бұл алгоритмге оның орындалуы басталмай тұрып тексерілген алдын алушы шарттарды да енгізуге болады. Тиеуге арналған контейнерлердің мүлдем болмауы да мүмкін немесе олардың бүкіл вагонды толтыруға жеткіліксіз болуы ықтимал, онда контейнерлер бар кезде ғана тиеу жұмысы жүзеге асырылады. Бұл жағдайда бұрын жазылған алгоритмнің барлығы контейнерлердің бар болу шарты кезінде қайталанатын циклды ұсынады және бұл шарттың орындалуын тексеру де осы циклға кіреді: Циклдың басталуы.Тиеугеарналғанконтейнербаркезедеәрекеттердіорындау: Кезектіконтейнердікранменкөтеру. Контейнердівагонғаорналастыру. Контейнердівагонғаарту. Крандыбастапқы қалпынакелтіру. Вагонда бос орын бар кезде цикл әрекетін қайталау.Циклдыңсоңы. 2-ші немесе 7-ші шарттың бұзылуы кезінде орындаушы келесі 8- жолдан кейінгі Циклдыңсоңынакөшеді. Біз циклдық алгоритмнің екі тәсілін қарастырдық: алдын алушы шартпен және кейінгі шартпен. Циклдік алгоритмнің екінші нұсқасын қарастырамыз. Бұған дейін айтып өткеніміздей, мұндай алгоритммен қайбір шарттардың орындалуын (немесе орындалмауын) бағалай алмайтын атқарушылар жұмыс жасайды, бірақ олар сандармен жұмыс жасай алады. Мысалы, химиялық кәсіпорында 10 резервуарды сұйықтықпен автоматты түрде толтыруды қамтамасыз ету керек. Қайталанушы операциялардың санын есептегіш құрал бастапқы қалыпта нөлде тұр. Резервуарлар бір қатарға тығыз орналасқан. Сұйықтық ағатын шлангы резервуарлардың бойына орналасуы мүмкін және бастапқы жағдайда ол бірінші резервуарға жақын. Әрбір резервуарда ол толған кезде дабыл қағатын датчигі бар. Резервуарларды толтыру алгоритімі төмендегідей болуы мүмкін: Циклдың басталуы.Шлангынырезервуардыңенінеорналастыру. Шлангыныңбұрандасынашу. Датчиктіңрезервуардыңтолғандығытуралыдабылыныңбар-жоғынтексеру. Дабылтүскен кездебұранданыжабу. Есептегіштіңішіндегісін1геұлғайту. Есептегіштің ішіндегісі 10нан төмен болса, әрекетті қайталау.Бұл шарт соңымен алгоритм, себебі кезекті резервуарды толтырып болғаннан кейін ғана толтыру операциясын тағы да қайталау керектігі анықталады ( яғни, барлық 10 резервуар да толды ма). Бірақ бұл алгоритмді алдыңғы шартпен құрастырса да болады: Есептегіштің ішіндегісі 10-нан төмен болса, әрекеттерді орындау:Есептегіштіңішіндегісін1-геұлғайту. Шлангынырезервуардыңенінеорналастыру. Шлангыныңбұрандасынашу. Датчиктіңрезервуардыңтолғандығытуралыдабылыныңбар-жоғынтексеру. Дабылтүскен кездебұранданыжабу. Циклдің соңы.Екі алгоритмде де есептеуіштің ішіндегісі 10-ға тең болған кезде циклдің қайталау шартын кезекті тексеру кезінде оның енді толтырылмайтынын көрсетеді және орындаушы келесі 8-әрекетке көшеді (егер ол алгоритмде бар болса). Соңғы екі алгоритмде Егеркөрсеткішдабылытүссешартын тексеру нақты қатысады. Бұранданыжабукезекті әрекеті тек қана «Иә» деген жауапта орындалады, яғни, алгоритмнің бұл бөлігі тарамақтанудан тұрады. Біріқ біз циклдердің ұйымдасуын қарап жатқандықтан, алгоритмнің бұл бөлігі артық тәтпіштеусіз келтірілген. |