Algoritm tushunchasi
Inson hayoti davomida katta-kichik vazifalar yoki masa- lalarni hal etishni o‘z oldiga maqsad qilib qo‘yadi. Odatda, u o‘z maqsadiga erishishi uchun bajarishi lozim bo‘lgan amal yoki ishlarini hayotiy tajribasi yoki o‘zlashtirgan bilimiga asos- lanib ma’lum bir tartibga keltiradi. Bunga hayotimizdan xilma- xil misollar keltirish mumkin.
1.1- misol
Ko‘chadan o‘tish maqsad qilib qo‘yilgan bo‘lsin. U holda ko‘chadan o‘tayotgan kishi hammamizga odatiy hol bo‘lib qolgan quyidagi harakatlarni bajarishi lozim bo‘ladi:
1) chap tarafga qaralsin, agar transport vositasi yo‘q bo‘lsa,
2- bandga o‘tilsin, aks holda 1-bandga o‘tilsin;
2) o‘ng tarafga qaralsin, agar transport vositasi yo‘q bo‘lsa,
3- bandga o‘tilsin, aks holda 1-bandga o‘tilsin;
3) ko‘chadan o‘tilsin.
1.2- misol
Eni 6 metr va bo‘yi 10 metr bo‘lgan joyni to‘ldirish uchun sotib olinishi kerak bo‘lgan 12x25 sm (eni 12 sm va bo‘yi 25 sm) g‘ishtlar soni topilsin.
Hisoblayotgan kishi geometriya fanidan olgan bilimiga asos- lanib quyidagi ketma-ketlikdagi amallarni bajaradi:
1) joyning yuzasi 5joy santimetr o‘lchov birligida topilsin;
2) bir dona g‘ishtning yuzasi ^gisht santimetr o‘lchov birligida topilsin;
3) g‘ishtlar soni Sson joyning yuzasini g‘ishtning yuzasiga nis- bati deb olinsin.
1.3- misol
Amal bajarisin: 19632107 + 19702202. Bu amalni qanday bajargan bo‘lar edingiz? Ha, to‘gri, bu sonlarni ustun ko‘rinishida deyarli quyidagicha qo‘shasiz:
1) sonlar xonalari to‘g‘ri keladigan tartibda birinchisining tagiga ikkinchisi yozib olinsin;
1-8.docx
Mavzu: Algoritm haqida umumiy
intuitive ta’rif
Algoritm tushunchasi
Inson hayoti davomida kattakichik vazifalar yoki masa lalarni hal etishni o‘z
oldiga maqsad qilib qo‘yadi. Odatda, u o‘z maqsadiga erishishi uchun bajarishi
lozim bo‘lgan amal yoki ishlarini hayotiy tajribasi yoki o‘zlashtirgan bilimiga
asos lanib ma’lum bir tartibga keltiradi. Bunga hayotimizdan xilma xil misollar
keltirish mumkin.
misol
1.1
Ko‘chadan o‘tish maqsad qilib qo‘yilgan bo‘lsin. U holda ko‘chadan o‘tayotgan
kishi hammamizga odatiy hol bo‘lib qolgan quyidagi harakatlarni bajarishi lozim
bo‘ladi:
1) chap tarafga qaralsin, agar transport vositasi yo‘q bo‘lsa,
2 bandga o‘tilsin, aks holda 1bandga o‘tilsin;
2) o‘ng tarafga qaralsin, agar transport vositasi yo‘q bo‘lsa,
3 bandga o‘tilsin, aks holda 1bandga o‘tilsin;
3) ko‘chadan o‘tilsin.
1.2
Eni 6 metr va bo‘yi 10 metr bo‘lgan joyni to‘ldirish uchun sotib olinishi kerak
misol
bo‘lgan 12x25 sm (eni 12 sm va bo‘yi 25 sm) g‘ishtlar soni topilsin.
Hisoblayotgan kishi geometriya fanidan olgan bilimiga asos lanib quyidagi
ketmaketlikdagi amallarni bajaradi:
1) joyning yuzasi 5joy santimetr o‘lchov birligida topilsin;
2) bir dona g‘ishtning yuzasi ^gisht santimetr o‘lchov birligida topilsin;
3) g‘ishtlar soni Sson joyning yuzasini g‘ishtning yuzasiga nis bati deb
olinsin.
1.3
Amal bajarisin: 19632107 + 19702202. Bu amalni qanday bajargan bo‘lar
misol
edingiz? Ha, to‘gri, bu sonlarni ustun ko‘rinishida deyarli quyidagicha qo‘shasiz:
1) sonlar xonalari to‘g‘ri keladigan tartibda birinchisining tagiga ikkinchisi
yozib olinsin;
2) sonlarning birlik xonasidagi raqamlarini qo‘shib, natijani birlik xonasidagi
raqami birliklar tagiga yozilib, o‘nlik xonasi raqami dilda saqlansin;
3) sonlarning o‘nliklardagi va dildagi raqamlarni qo‘shib, natijani birlikdagi
raqami o‘nliklar tagiga yozilib, o‘nlik raqami dilda saqlansin;
va 3banddagi qoida yuzliklar, mingliklar va hokazo uchun tak rorlanadi. Bu
amallar quyidagi korinishda sizga juda tanish:
19632107 + 19702202 39334309 Yuqoridagi misollarda keltirilgan amallar ketmaketligi, boshqacha aytganda,
ko‘rsatmalar yoki buyruqlar ketmaketligi biror kishi tomonidan bajarilgach,
ko‘zlangan maqsadga erishi ladi. Bunday amallar ketmaketligi yoki hayotimizda
har kuni va har soatda uchrab turadigan turli qoidalar ichida biror zaruriy natijaga
erishishga olib keladigan amallarni ketmaket bajarishni talab etadigan qoidalar
informatikaning asosiy tushunchalaridan bin algoritm so‘zi bilan ifodalanadi.
Algoritm so‘zi IX asrda yashab (783yilda tug‘ilgan) o‘z ilmiy ishlari xazinasi
bilan dunyoga tanilgan vatandoshimiz buyuk astronom, matematik va geograf Abu
Abdullo Muhammad ibn Muso alXorazmiy nomidan kelib chiqqan. AlXorazmiy
arifme tikaga bag‘ishlangan «Hind hisobi haqida kitob» risolasida to‘q qizta hind
raqamining sonlarni ifodalashdagi afzalliklari va ular yordamida har qanday sonni
ham qisqa va oson yozish mum kinligini aytadi va hozirgi kunda hamma
o‘quvchilar biladigan sonlar ustida, yuqoridagi 3misoldagi kabi ustun ko‘rinishida
amallar bajarish qoidalarini yoritadi. Ayniqsa, nol (0) qo‘llash ning ahamiyati
haqida tushuncha berib, nolni yozmaslik nati janing xato chiqishiga olib keladi,
degan. Bu risola XII asrda Ispaniyada lotin tiliga tarjima qilingan va butun
Yevropaga tarqatilgan. Bu tarjimaning XIV asrda ko‘chirilgan qo‘lyozmasining
yagona nusxasi Kembrij universitetining kutubxonasida saqlanmoqda. Risola
«Dixit Alxhorithmi», ya’ni «Dediki al Xorazmiy» iborasi bilan boshlanadi.
Algoritm deganda, biror maqsadga erishishga qaratilgan ijrochi baja rishi uchun
mo‘ljallangan ko‘rsatma (buyruq)larning aniq, tushunarli va chekli ketmaketligi
tushuniladi.
Bu algoritm tushunchasining matematik ta’rifi bo‘lmasa ham intuitiv ma’noda
algoritmning mazmunini ochib beruvchi tavsifidir. Algoritmni intuitiv ma’noda bir
necha misollarda izoh laymiz. Birorbir narsani taqiqlovchi qoidalar algoritm
bo‘lol maydi, masalan: «Chekish mumkin emas», «Begonalarning kirishi
taqiqlanadi», «Kirish», «Chekish uchun joy» kabi biror bir narsaga ruxsat etuvchi
qoidalar ham algoritmga xos emas. Lekin «Svetoforni yashil rangida o‘ting» juda
sodda bo‘lsa ham algoritmdir. Demak, yuqorida keltirilgan misollardagi ko‘r
satmalar ketmaketligi algoritm va bu algoritmlarni bajarayotgan inson — ijrochi
bo‘lar ekan. Algoritm ijrochisi faqat insonmi, degan savol berishingiz tabiiy. Bu
savolga javob quyidagicha:
Algoritm ijrochisi — algoritmda ko‘rsatilgan buyruq yoki ko‘r satmalarni
bajara oladigan abstrakt yoki real (texnik yoki biologik) sistema.
Ijrochi bajara olishi uchun algoritm unga tushunarli bo‘lishi lozim. Algoritm
ijrochi tushunadigan tilgagina emas, balki uning bilim va malakasiga ham mos
bo‘lishi kerak. Aks holda ijrochi birorta ham ko‘rsatmani bajara olmasligi mumkin.
Ijrochi bajara olishi mumkin bo‘lgan ko‘rsatma yoki buyruq lar to‘plami
ijrochining ko‘rsatmalar sistemasi deyiladi. Masalan, «16 sonidan kvadrat ildiz
chiqarilsin» ko‘rsatmasi 2sinf o‘quvchisining ko‘rsatmalar sistemasiga tegishli
bo‘lmaydi, lekin 8sinf o‘quvchisining ko‘rsatmalar sistemasiga tegishli bo‘ladi.
Algoritm ijrochiga tushunarli bo‘lishi uchun ijrochining im koniyatlarini bilish lozim. Agar ijrochi inson bo‘lsa, u holda algoritm insonning imkoniyatlaridan kelib
chiqib tuzilishi kerak. Bunda ko‘zlangan maqsad va algoritmdan kelib chiqib inson
tushunadigan til, insonning bilimi, hayotiy tajribasi, kasbiy malakasi, yoshi,
qolaversa, jismoniy imkoniyatlari hisobga olinishi zarur. Agar ijrochi texnik vosita
(masalan, kompyuter, elektron soat, dastgohlar) bo‘lsa, u holda algoritm shu texnik
vositaning imkoniyatlaridan kelib chiqib tuzilishi kerak.
Agar ijrochi kompyuter hisoblanib, uning dasturiy ta‘mi notida berilgan
(«Karra jadvalini hosil qilish») algoritmni bajara oladigan dastur (masalan,
elektron jadvallardan birortasi ham) bo‘lmasa, u holda hech qanday natijaga erishib
bo‘lmaydi. Demak, berilayotgan har qanday ko‘rsatma ijrochining ko‘r satmalar
sistemasidan olinishi, ya’ni ijrochi uni qanday baja rishni bilishi kerak ekan. Bu
algoritmning tushunarlilik xossasini ifodalaydi. Shuni ta‘kidlash joizki,
informatikada algoritmning asosiy ijrochisi sifatida kompyuter xizmat qiladi.
Ijrochi
Bu qo‘llanmada algoritm tuzish usullarini o‘rgatish uchun sizni bir nechta
Ijrochi bilan tanishtiramiz [1], lekin ular kom pyuter yoki inson emas, balki biz
uchun abstrakt sistema. Misol sifatida Robot nomli ijrochi bilan tanishtiramiz.
Robot teng o‘lchamdagi kvadratlarga bo‘lingan tekislikda yashaydi (1.1
rasm). U kvadratlarning birida joylashgan va ixtiyoriy qo‘shni kvadratga o‘tishi
mumkin. Shu bilan birga Robot o‘zi turgan kvadratni bo‘yashi mumkin.
Robot 5 ta ko‘rsatmani bajaradi: yuqoriga quyiga chapga o‘ngga bo‘ya
Bulardan yuqoriga, quyiga, chapga va o‘ngga ko‘rsatmalari Robotni mos
yo‘nalishlar bilan siljishga majbur qiladi. Lekin bo‘ya ko‘rsatmasida Robot
harakatlanmaydi, faqat o‘zi turgan kvadratni bo‘yaydi. Agar kvadrat bo‘yalgan
bo‘lsa u holda bo‘ya ko‘rsatmasida kvadratning rangi o‘zgarmaydi.
Robotning hayotidagi voqealardan eng qizig‘i, ba’zi kvadrat lar orasida devor
borligi (1.2rasm). Odatda, Robot har to mondan devorlar bilan o‘ralgan va
kvadratlardan hosil bo‘lgan to‘g‘ri to‘rtburchak ichida joylashgan bo‘ladi. Lekin
shu to‘g‘ri to‘rtburchak ichida ham devorlar bo‘lishi mumkin.
Ba’zan devorlar murakkab shaklni hosil qiladi, bu shaklni labirint deb
atashadi. Robot devor ichidan o‘ta olmaydi. Agar devor ichidan o‘tmoqchi bo‘lsa,
u holda Robot «sochilib» ketadi. Bunday halokatli holatlarga tushmaslik uchun quyidagi to‘rtta shartni tekshirish
zarur: yuqori bo‘sh quyi bo‘sh chap bo‘sh o‘ng bo‘sh
Bo‘sh so‘zi shu tomonda devor yo‘qligini bildiradi.
Robot o‘zi turgan katakning devorinigina aniqlay oladi. O‘zi turgan kvadrat
bilan devor orasida bitta kvadrat bo‘lsa ham uzoqdagi bu devorni «ko‘ra» olmaydi.
U yonida turgan de vorgagina «tegib» ko‘rishi mumkin. 1.3rasmda turli
holatlarda yuqori bo‘sh degan birgina shartning qiymatini ko‘rish mumkin.
Tushunarliki, yuqori bo‘sh sharti (yoki yuqori bo‘sh da’vosi Rost bo‘lsa) Robot
yuqoriga ko‘rsatmasini «sochilib» ketmasdan bajara olishini bildiradi.
Bu kabi mulohazalar chap bo‘sh sharti va chapga ko‘rsat masi, yana boshqa
juftliklar uchun ham to‘g‘ri. Ro‘yxatni yakunlash uchun Robot biladigan oxirgi
shartni keltiramiz: bo‘yalgan
Bu shart Robot turgan kvadratni bo‘yalgan yoki bo‘yal maganligini tekshirish
imkonini beradi. Agar kvadrat bo‘yalgan bo‘lsa, shart ROST, aks holda YOLG‘ON
bo‘ladi.
Ko‘rib turibsiz, Robotning ko‘rsatmalari juda sodda. Lekin uni o‘rab turgan
muhit xilmaxil imkoniyatlarga boy. Robotning maydonida turli labirintlar,
yo‘laklar, har xil shakldagi xonalar va boshqa figuralar yordamida juda ko‘p
qiziqarli masalalar qo‘yish mumkin. Robotning mikrohayoti — algoritmik tafak
kurni rivojlantirish uchun a‘lo darajadagi mashq maydonidir. Ijrochilarni
boshqalari bilan tanishtirishdan avval ularni nimalar farqlab turishini izohlab
o‘tmoqchimiz. Ijrochini quyidagilar farqlab turadi:
ijrochi muhiti; • ijrochining ko‘rsatmalar sistemasi;
sodda amallar; • INKOR.
•
•
Ijrochi muhiti — ijrochi «yashaydigan» yoki algoritmni baja radigan muhiti.
Ijrochi Robot misolida bu katakli maydon, bo‘yalgan kataklar va devorlar.
Ularning joylashishi va Robotning turgan joyi muhitning aniq holatini beradi.
Har bir ijrochi qat‘iy belgilangan ro‘yxatdagi — ijrochining ko‘rsatmalar
sistemasidagi ko‘rsatmalarni bajara oladi. Har bir ko‘rsatma uchun qo‘llash sharti
(muhitning qanday holatida ko‘rsatmaning bajarish mumkinligi) va ko‘rsatmani
bajarilish natijasi belgilangan bo‘lishi kerak. Masalan, yuqoriga ko‘rsat masi
Robotning yuqorisida devor yo‘q bo‘lsagina bajarish mum kin. Bu ko‘rsatmaning
bajarilish natijasi — Robot yuqoriga bitta katak siljiydi.
Ko‘rsatma chaqirilgandan keyin Ijrochi sodda amal bajaradi. Robot misolida
— yuqoriga bitta katak siljish. INKOR — bu holat bo‘lib, ko‘rsatma muhitning mumkin bo‘lmagan holatida
chaqirilganda yuz beradi. Robot misolida qarasak, agar u devor ichidan o‘tmoqchi
bo‘lsa, «sochilib» ketadi va bu Robot uchun INKOR holatiga olib keladi.
Yodingizda bo‘lsin: Ijrochi algoritm maqsadi haqida hech narsa bilmaydi, u
berilgan ko‘rsatmalarni so‘zsiz bajaradi, xolos.
Algoritmning xossalari
Algoritmning tavsifida «biror maqsadga erishishga qaratilgan» jumlasi
qo‘llanilgan. Bu maqsadni yuqorida keltirilgan mi sollarda ko‘rishimiz mumkin:
ko‘chadan o‘tish, g‘ishtlar soninihisoblash, yig‘indini hisoblash. Bular
algoritmning natijaviylik (cheklilik) xossasi bilan bog‘liq. Bu xossaning mazmuni
shundan iboratki, har qanday algoritm ijrochi chekli qadamdan so‘ng oxiroqibat
ma’lum bir yechimga olib kelishi kerak. Shuni ta‘kidlash joizki, algoritm avvaldan
ko‘zlangan maqsadga eri shishga olib kelmasligi ham mumkin. Bunga ba‘zan
algoritmning noto‘g‘ri tuzilgani yoki boshqa xatolik sabab bo‘lishi mum kin.
Ikkinchi tomondan, qo‘yilgan masala ijobiy yechimga ega bo‘lmasligi ham
mumkin. Lekin salbiy natija ham natija deb qabul qilinadi.
misol
1.4
x2+x+1 = 0 kvadrat tenglama yechilsin.
Bu tenglamaga quyida keltirilgan «ax2+bx+c = 0 (a№0) ko‘ri nishidagi
kvadrat tenglamani yechish» algoritmini qo‘llab, tenglama yechimga ega
emasligini aniqlaymiz. Bu ham natija ekanligi sizga ma’lum.
1) diskriminant: D = b2—4ac hisoblansin;
2) agar D < 0 bo‘lsa, tenglama yechimga ega emas deb olinsin va 5bandga
o‘tilsin;
agar D = 0 bo‘lsa, yagona yechim 2a
o‘tilsin;
3) birinchi yechim —b— D ga, ikkinchi yechim b + ^
ga teng deb olinsin va 5bandga
ga teng deb olinsin;
4) tugallansin.
1.1
mashq
E’tibor qilgan bo‘lsangiz, diskriminantning noldan kichikligi, nolga tengligi
tekshirildi, ammo noldan kattaligi tekshirilmadi. Sababini o‘ylab ko‘ring!
Demak, algoritm doimo chekli qadamdan iborat bo‘lishi va biror natija berishi
kerak ekan. Bu algoritmni diskretlilik (uzluklilik, alohidalik) xossasiga olib
keladi. Algoritmda masalani yechish jarayoni alohida olingan sodda ko‘rsatmalar
ketma ketligini qadambaqadam bajarishdan iborat bo‘lishi kerak. Bu xossa
misollardan yaqqol ko‘rinib turibdi. «Angliyada avto mobilni yo‘lning chap
qismida haydang» qoidasi talabnomabo‘lgani bilan uzluksizlik xarakteriga ega va
shuning uchun ham algoritm hisobiga qo‘shilmaydi.
E’tiboringizni yana bir narsaga qaratamiz. Keltirilgan mi sollarda quyidagi
jumlalar bor: «Ko‘chadan o‘tish» (ariqdan yoki dengizdan emas), «Eni 6 metr va
bo‘yi 10 metr bo‘lgan joyni» (kilometr emas), «eni 12 santimetr va bo‘yi 25 santimetrli g‘ishtlar» (eni 5 santimetr va bo‘yi 100 santimetrli g‘ishtlar emas),
«x2+x+1 = 0 kvadrat tenglama» (x2—1 = 0 kvadrat tenglama emas). Bu jumlalar va
qavs ichida yozilganlarni taqqoslasangiz, olinadigan natija shu jumlalardagi
«qiymat»larga chambarchas bog‘liq ekanligini tushunasiz. Agar bu «qiymatlar»
o‘zgarsa, masalan, qavs ichidagilarga, olinadigan natija umuman bosh qacha
bo‘lishini ko‘rish qiyin emas. Qiymat so‘zini qo‘shtirnoq ichiga olganimizga
sabab, siz doimo qiymat so‘zini faqat sonlar bilan bog‘lab o‘rganib kelgansiz.
Lekin, bilingki, biror masala uchun qiymat har xil turdagi obyektlar bo‘lishi
mumkin ekan. Demak, har bir algoritmning natijasi avvaldan berilgan, ya’ni
boshlang‘ich qiymatlarga bog‘liq bo‘lar ekan. Boshlang‘ich qiymatlar turli
natijalarga olib kelishiga yana bir hayotiy misolga o‘zingiz javob bera olasiz: sizga
va mehmonga kelgan do‘stlarin gizga pishiralayotgan palovga 20 gramm tuz
solish o‘rniga 200 gramm tuz solishsa natija bir xil bo‘ladimi?
Har bir algoritm — bu amallarni belgilovchi qoida bo‘lib, ularning zanjiri
natijasida biz boshlang‘ich qiymatlardan izlangan natijaga kelamiz. Bunday
amallar zanjiri algoritmik jarayon, har bir amal — algoritmning qadami deb
ataladi.
Yana boshlang‘ich qiymat va natija bo‘lishi mumkin bo‘lgan narsalarning
tahliliga qaytamiz. Ko‘rdikki, har bir algoritm uchun boshlang‘ich qiymatlarning
turli hollarini tanlash mumkin. Masalan, g‘ishtlar masalasi algoritmi uchun
boshlang‘ich qiy matlarni tavsiflashda «santimetr» so‘zlarini «uzunlik
o‘lchovlari» kabi tushunish mumkin. Bu holda hosil bo‘ladigan natijaning miqdori
o‘zgaradi, xolos. Ko‘p algoritmlar boshlang‘ich qiymatlarning turli hollari uchun
o‘z kuchini saqlab qoladi. Qo‘shish algoritmini ixtiyoriy natural sonlar jufti uchun
qo‘llash mumkin. Avval aytib o‘tilgan algoritmlarning aniqlangan bu xossasi
(ularni boshlang‘ich qiymatlarning juda ko‘p sondagi hollariga qo‘llash
mumkinligi) ommaviylik deb ataladi. Yuqorida keltirilgan «ax2+bx+c = 0 (a^0)
ko‘rinishidagi kvadrat tenglamani yechish» algoritmi ixtiyoriy a, b, c haqiqiy
sonlar uchun natija beradi, ya’ni algoritmning ommaviylik xossasi o‘rinli ekan.
Algo ritmlaming juda ko‘p xususiy hollarda ishlashi shunday o‘ta muhim va
ahamiyatli xossa, shu sababli ancha vaqtgacha uni algoritmning ilmiy ta’rifiga
kiritilishi shart deb hisoblandi. Bu ko‘pgina qoidalarni fan sohasidan chiqarib
tashlar (ularni «oz miqdordagi» ommaviyligi tufayli) va ham ilmiy tadqiqotni, ham
ularning natijasini amaliyotda qo‘llashni qiyinlashtirar (balki bu ilmiy bo‘lmagan
hol bo‘lsachi?), bu esa jiddiy noqulaylikka sabab bo‘ladi. Boshlang‘ich
qiymatlarning faqat bitta — yagona holiga qo‘llash mumkin bo‘lgan algoritm ham
katta ahamiyat kasb etadi. Ularga turli xil avtomatlardan (masalan, agar aniq bir
tangaga moslangan gazeta sotadigan avtomat, yoki telefon avtomat) foydalanish
algoritmlari tegishlidir, aniq bir joydan boshlanadigan va belgilangan joyga olib
boradigan yo‘nalish bo‘yicha borish algoritmi va boshqalar.
«Ommaviylik» atamasining mavhumligi mashhur, ba‘zan uyum paradoksi deb
ataluvchi, Evbulid paradoksi orqali tasdiqlanadi. Paradoks mazmunini o‘zimizga
savol berib va javobini berib tezda aniqlab olishimiz mumkin. Bitta tosh — uyummi? Yo‘q. Ikkita toshchi? Yana yo‘q. Uchtasichi? Oxir
oqibat, biz yoki uyum mavjud emas degan xulosaga, yoki shunday sondagi toshlar
to‘plami borki, undan bitta oshsa uyum hosil bo‘lishiga olib keladi, deb e’tirof
etishga majbur bo‘lamiz. U yoki bu fikr ham haqiqatga ziddir va bu uyum
atamasining mavhumligining natijasi bo‘lib hisoblanadi. Nima bo‘lganda ham
ommaviylik xossasidan oddiygina «bo‘yin tovlash» mumkin emas. Uni ta’riflashni
ozgina o‘zgartirish hamda shuning asosida yuqorida aytib o‘tilgan mavhumlikni
yo‘qotish zarur.
«Ommaviylik» atamasiga qanday mazmun kiritish kerak? Bu savolga javob
shunday. Har bir algoritm uchun birorbir obyektlar (narsalar, buyumlar va
hokazo) sinfi mavjud va ularning barchasi boshlang‘ich qiymat sifatida olinishi
mumkin, deb hisoblash zarur. Manfiymas butun sonlarni qo‘shish algoritmi uchun
manfiymas butun sonlarning barcha juftligi; avtomatdan «Toshkent oqshomi»
gazetasini sotib olish algoritmi uchun — yagona obyekt — tanga shunday sinf
bo‘la oladi. Algoritmning ommaviyligi — mos sinfning barcha obyektlarini
qo‘llash mumkinligidir, ya’ni, ularning qandaydir miqdorining (chekli yoki
cheksiz) qo‘llash mumkin emasligi emas. Mumkin bo‘lgan, ya’ni joiz
obyektlaming miqdori chekli yoki cheksizligi, yoki miqdori nolga teng bo‘lishi —
bu shu sinfning xususiyatidir.
Agar algoritm yordamida joiz boshlang‘ich qiymat asosida izlangan natijani
olish mumkin bo‘lsa u holda algoritmni joiz boshlang‘ich qiymatga qo‘IIash
mumkin deyiladi. Agar boshlang‘ich qiymat joiz bo‘lsa ham natija olish mumkin
bo‘lmasa, u holda unga algoritm qo‘IIash mumkin emas deyiladi.
Endi joiz boshlang‘ich qiymatlar sinfi qanday ekanligini ko‘rib chiqamiz.
Boshlang‘ich qiymatlar ba‘zan narsa yoki buyumlar, sonlar ekanini ko‘rdik. Bu
fikr olingan natijalar uchun ham o‘rinli. Bu narsalar orasidagi umumiylik nimada?
Algoritm — bu qoidalar va demakki, ular qandaydir tillarda ifoda langan, degan
fikrni e’tiborga olsak, bu umumiylik ko‘rinadi. Bir necha marta bu qoidalarning
aniq bajarilishi qanchalik muhim ekanligi haqida gapirib o‘tdik.
Lekin bunday aniq bajarilishi boshlang‘ich qiymatlar (ular bilan birga izlangan
natijalar ham) birorbir tilda, balki yan gisida, batamom tavsiflanishga imkon
bersagina mumkin. Bu holda har bir boshlang‘ich qiymatga, har bir oraliq natijaga
va nihoyat, izlangan natijaga qandaydir gap mos keladi. Yana, mazkur gapning
«Mazmun»i bir qiymatli bo‘lishi zarur.
Matematikada ko‘pincha maxsus usul qo‘llanadi. Bu usul shundan iboratki,
birorbir obyekt boshqa tabiatli obyekt bilan almashtiriladi, bunda yangi
obyektlarga birlamchilari bilan bir qiymatli mos bo‘ladi. Ko‘rilayotgan holda
boshlang‘ich qiymatlar tilining gaplari bilan boshlang‘ich qiymatlarning o‘zi
orasida bir qiymatli moslik mavjud. Shu sababli, algoritmni matematik ta’riflashda
boshlang‘ich qiymatlar va izlangan natijalar tilning gaplari deb hisoblanishi
mumkin. Bunday almashtirish amaliyot nuqtayi nazaridan mumkinmi? Albatta, mumkin.
Chunki, algoritmning o‘zida boshlang‘ich qiy matlar emas, ularning nomi,
jarayonni bajarish uchun esa amallar va hosil bo‘ladigan natijalarning nomini
bilish yetarli.
Keltirilgan usul algoritm ta’rifini tor ma’noda bo‘lishiga olib keladi, deyish
mumkin. Bunday fikr asoslidir. Lekin bu torayish muhim emas, chunki u
algoritmlar beradigan imkoniyatlarni kamaytira olmaydi.
Bu kabi yondashish boshlang‘ich qiymatlar va natijalar turlarini nisbatan
kamaytiradi, ammo ular avvalgidek turli fizik tabiatga ega bo‘lishi mumkin, lekin
biz uchun bu, ularni nazariyqaraganimizda, turli tillardagi gaplar kabidir.
Narsalarning turlanishini biz tillarning turlanishiga keltirdik. To‘g‘ri, tillar ham
kam emas. Ularni cheksiz to‘plam (faqat mavjudlari emas, balki mavjud bo‘lishi
mumkin bo‘lganlari ham, ya’ni mumkinlari ham) deb hisoblash mumkin. Lekin har
bir algoritm faqat ikkita til bilan bog‘langan: bittasida u ta’riflangan,
ikkinchisining gaplari boshlang‘ich qiymatlar hollarini uning uchun mumkin
bo‘lganlaridir. Birinchi tilni, odatda, algoritmik til deb, ikkin chisini —
operandlar tili deb atashadi. Operandlar deb shunday obyektlarga aytiladiki, ular
ustida algoritm talab qilgan amallar bajariladi. Operandlar tilining barcha gaplari
joiz deb hisob lanadi, bu tilga tegishli bo‘lmagan birorbir belgilar birikmasi ta’rif
bo‘yicha joiz emas.
Mavzu: Umumiy algoritmlar
nazariyasiga doir asosiy kashfiyotlar.
Rekursiya prinsipi.
O‘zini chaqiradigan protseduralar
masala
Robot kengligi 1 ga teng va devorlar bilan o‘ralgan gorizontal to‘g‘ri
to‘rtburchakning chap devoridan biror masofada turibdi. Robotni o‘ng devordan
shuncha masofada bo‘lgan katakka o‘tka zing
Robot bu yerda
turibdi
Robot bu yerga
o‘tishi kerak Masala juda sodda bo‘lib ko‘rinadi. Haqiqatan, agar Robot bilan chap devor
orasidagi, aytaylik, ikkita katakni bilsak uni kerakli katakka jo‘natish qiyin emas:
Robot avval o‘ng devor gacha boradi, keyin ikkita chapga yuradi. Murakkabligi
shundan iboratki, chap devorgacha bo‘lgan masofa ixtiyoriy bo‘lishi mumkin,
bizda esa bu masofani o‘lchash uchun biror usul ham, o‘lchay olsak uning
qiymatidan foydalana olish imkoniyati ham yo‘q. Bu vaziyatdan chiqish, bunaqasi
teztez bo‘lib turadi, kutilmaganda sodir bo‘ldi.
Yechim. Qo‘yilgan masalani yecha oladigan prorsedurani yozishga harakat
qilamiz. Bu protsedurani simmetriya deb ataymiz. Avvalo bizga masalani hech
bo‘lmaganda Robot chap devor oldida turgan birgina holatda yechish mumkinligi
yordam beradi. Bu holda Robot o‘ng devor oldiga borib to‘xtashi kerak:
PROT simmetriya BOSHLANISH
AGAR EMAS chap bo‘sh U HOLDA
TOKI o‘ng bo‘sh BAJAR o‘ngga TAMOM
AKS HOLDA
TAMOM
TAMOM
Endi Robotning chap yonida devor bo‘lmasa, nima qilishi kerakligi haqida
o‘ylaymiz. Keling, chapga bir qadam tash laymiz, Robot bilan chap devor
orasidagi masofa qisqaradi. Balki masofa 0 bo‘lib qolishi ham mumkin! Bu esa
simmetriya protsedurasi kerakli ishni bajarayotganini va biz uni chaqi rishimiz
mumkinligini bildiradi. Protsedura ishlashi tuga ganidan keyin chapga bir qadam
yurish kerak bo‘ladi, chunki Robotdan o‘ng devorgacha bo‘lgan masofa uning
boshlang‘ich joyidan chap devorgacha bo‘lgan masofaga teng bo‘lishi kerak. Mana
nima hosil bo‘ladi:
PROT simmetriya BOSHLANISH
AGAR EMAS chap bo‘sh U HOLDA
TOKI o‘ng bo‘sh BAJAR o‘ngga TAMOM AKS HOLDA
chapga
simmetriya
chapga
TAMOM
TAMOM
Buni qarangki, yozilgan bu algoritm har qanday sharoitda ham to‘g‘ri ishlar
ekan! Qo‘yilgan masalani yechadigan algoritm esa juda sodda ko‘rinishga ega:
simmetriya
Natijada bizda juda g‘alati protsedura hosil bo‘ldi: u o‘zini o‘zi chaqiradi.
Bunday protseduralarni rekursiv deb atashadi. E’tibor bilan uning ishini qadam
baqadam o‘rganib chiqamiz.
Robot bilan chap devor orasidagi boshlang‘ich masofa 0 ga teng bo‘lganda
protsedura to‘g‘ri ishlashini ko‘rdik. Robot bilan chap devor orasidagi masofa bitta
katak bo‘lganda qanday voqea ro‘y berishini ko‘rib chiqamiz. Protsedura boshida EMAS chap bo‘sh sharti YOLG‘ON, shuning uchun
protseduradagi tarmoqlanish tuzilmasining AKS
HOLDA so‘zidan keyingi qismi bajariladi. Bu qismda uchta ko‘rsatma bor:
chapga
simmetriya
chapga
Birinchi ko‘rsatmani bajargach, Robot chap devorga bitta katak yaqinlashadi,
ya’ni devor yoniga borib qoladi. Keyin simmetriya protsedurasi bajariladi. Endi
vaziyat o‘zgardi: Robot chap devor yonida turibdi. Bu vaziyatda protsedura to‘g‘ri
ishlashini bilamiz va u o‘ng devor yoniga boradi. Uchinchi chapga ko‘rsatmasi uni
o‘ng devordan bitta chap katakka o‘tkazadi, ya’ni kerakli katakka tushadi va
protsedura ishi tugaydi.
Siz, albatta, Robot bilan chap devor orasidagi masofa ikkita katak bo‘lganda
protsedura ishining to‘g‘riligini qanday tekshi rishni tushungan bo‘lsangiz kerak.
EMAS chap bo‘sh sharti YOLG‘ON, demak, protsedurada tarmoqlanish
tuzilmaning AKS HOLDA so‘zidan keyingi qismi bajariladi. Birinchi ko‘rsatmani
bajargach, Robot chap devorga bitta katak yaqinlashadi, ya’ni devor bilan uni
orasida bitta katak qoladi. Keyin simmetriya protsedurasi bajariladi va Robotni,
yuqorida ko‘rib o‘tganimizdek, o‘ng devordan bitta chap katakka o‘tkazadi.
Keyingi chapga ko‘rsatmasi uni o‘ng devordan ikkita chap katakka, ya’ni kerakli
katakka o‘tkazadi.
Mulohaza yuritishning bu usuli — induksiya bo‘yicha mulohaza — bizga
birinchi marta duch kelishi emas. U bizga chap devordan ixtiyoriy boshlang‘ich
holatda protsedura ishining to‘g‘riligini tekshirish imkonini beradi.
mashq
Nima uchun oxirgi chapga ko‘rsatmasidan oldingi simmetriya
protsedurasiga chap bo‘sh shartini tekshirmasa ham bo‘ladi?
7.2-
mashq
Robotning 7.2rasmdagi holatlari uchun simmetriya protsedurasi
masala
Robot devorlar bilan o‘ralgan to‘g‘ri to‘rtburchakning ichida turibdi. Robotni
boshlang‘ich holatidan to‘g‘ri to‘rtburchak mar kaziga nisbatan simmetrik bo‘lgan
katakka o‘tkazuvchi algoritm tuzing.
7.1
masala Robot kengligi 1 ga teng gorizontal yo‘lakda turibdi. Yo‘lak chap tomondan
devor bilan chegaralangan, o‘ng tomon — cheksiz. Robotni shunday katakka
o‘tkazingki, bu katakdan chap devorgacha bo‘lgan masofa boshlang‘ish katakdan
chap devorgacha bo‘lgan masofadan ikki marta katta bo‘lsin.
Yechim. Bu masalada Robot chap devor yonida turgan bo‘lsa, nima qilish
tushunarli: u o‘z joyida qolishi kerak. Quyidagicha protsedura tuzamiz:
PROT ikkilangan sakrash BOSHLANISH
AGAR EMAS chap bo‘sh U HOLDA
AKS HOLDA
TAMOM
TAMOM
Nuqtalar o‘rniga qanday ko‘rsatmalar qo‘yilishi kerak? Birinchi bo‘lib,
devorgacha bo‘lgan masofani kamaytirish, ya’ni vaziyatni soddalashtirish uchun
chapga ko‘rsatmasini bajarish kerakdir. Keyin yana ikkilangan sakrash
protsedurasini chaqirish lozim. So‘ngra — devorgacha bo‘lgan masofa ikki marta
katta bo‘lishi uchun o‘ngga ikki qadam tashlash kerak bo‘ladi.
Demak, har bir chapga bir qadam uchun o‘ngga ikki qadam yurish mos keladi.
mashq
1)Ikkilangan sakrash protsedurasini oxirigacha yozib chiqing.
2)EMAS chap bo‘sh shartini chap bo‘sh sharti bilan almashtirib, boshqa ikkilangan
sakrash protsedurasi variantini yozing.
3)Agar Robotning chap devorgacha boshlang‘ich masofasi quyidagicha bo‘lsa,
Robotni ikkilangan sakrash protsedurasini bajarishidagi qadamlari ketmaketligini
yozib chiqing:
a) ikkita katak; b) uchta katak.
Rekursiyadan chiqish
Rekursiv protseduralami har qanday Ijrochi uchun yozish mumkin. Masalan,
Robotni kvadrat bo‘ylab yurishi uchun rekursiv protsedura yozaylik.
masala
Tomoni 5 ga teng kvadratni chizish rekursiv protsedurasini yozing.
Javob.
PROT rekursiv kvadrat BOSHLANISH oldinga oldinga oldinga oldinga oldinga
o‘ngga
rekursiv kvadrat TAMOM
Bu protsedura qanday ishlashini ko‘rib chiqamiz. Demak, rekursiv kvadrat
protsedurasi chaqirilganda oldinga oldinga oldinga oldinga oldinga o‘ngga
ko‘rsatmalari bajariladi. Bunda Robot kvadratning tomoni bo‘ylab yurib 90
gradusga buriladi. Keyin yana rekursiv kvadrat protsedurasi chaqiriladi. Robot
kvadratning boshqa tomoni bo‘ylab yurib o‘ngga buriladi. Keyin yana rekursiv
kvadrat protsedurasi chaqiriladi. Yana ikki tomon o‘tilgach kvadrat bo‘ylab yurish
yakunlanadi. Lekin nimadir bo‘ldi? Robot to‘xta masdan yana shu kvadrat
bo‘ylab yurishni davom ettirmoqda. Bu esa cheksiz davom etadi — algoritm siklga tushib qoldi. Vaziyat yoqimsiz. Biz doimo siklga tushib qolmaslikka harakat qilar
edik. Bu holda undan qutulishning chorasi bormikan? Taas sufki, yo‘q. Haqiqatan,
rekursiv protseduraning chaqirilishi cheksiz davom etmasligi uchun protseduraga
chaqirilish yuzaga kelmaydigan shart kiritish kerak. Lekin bu Robotda bunday
shart yo‘q. Robotning algoritmi uning holatidan qa’tiy nazar, bir xilda
bajarilaveradi.
Shu kabi, Dehqon, Suvchi, Chigirtka, Oshiruvchi, Zohid kabi Ijrochilarda shart
Sharti yo‘q Ijrochilar uchun rekursiv
protseduralarni qo‘llamang!
yo‘q. Bu Ijrochilar uchun rekursiv protseduraning qo‘llanishi yoki siklga tushib
qolinadi yoki keyingi ko‘rsatmani bajarish mumkin bo‘lmay qolib, INKOR yuzaga
keladi. Shuning uchun
Bu qo‘llanmada ko‘rib chiqilgan Ijrochilardan faqat Kamayti ruvchi va
Rekursiv protseduralarni yozganda rekursiv chaqirish yuzaga
kelmaydigan shart ko‘rsatilishi kerak.
Robotda shart bor. Demak, faqat shu ikki Ijrochi uchun rekursiv protseduralarni
yozish ma’noga ega.
Bizning mulohazalarimizdan shunday xulosaga kelish mumkin:
Bu juda kerakli xulosa! Shuning uchun ham avvalgi bo‘limda algoritm
namunalarini keltirganimizda, rekursiv protsedu ralarning shunday shartlarini va
zaruriy amallarining tavsifini yozishdan boshlaganmiz.
masala
7.3
Quyidagi masalalarda rekursiv chaqirish yuzaga kelmaydigan shartlarni hamda
bu holda qanday amallar bajarilishi zarurligini ko‘rsating:
a) kamaytiruvchi tomonidan ixtiyoriy sondan 0 ni hosil qilish;
b)robot o‘tish joyi bo‘lgan gorizontal devor tagida turibdi. O‘tish joyi chapda
yoki o‘ngdaligi noma’lum. O‘tish joyini toping;
d) robot o‘tish joyi bo‘lgan gorizontal devor tagida turibdi. O‘tish joyi
Robotdan chapda. Robot undan o‘tib boshlang‘ich holati ustiga borib turishi kerak;
e) robotdan yuqorida bo‘yalgan katak bor. Robot maydonida devorlar yo‘q.
Robotni bo‘yalgan katakdan yuqoridagi shunday katakka olib kelingki, Robot bilan
bo‘yalgan katak orasidagimasofa Robotning boshlang‘ich holatidagi katak bilan
bo‘yalgan katak orasidagi masofadan uch marta katta bo‘lsin.
Qachon rekursiyasiz ishlash mumkin
Ko‘rinishidan sodda ko‘ringani bilan rekursiya bilan ishlash ancha murakkab.
Haqiqatan, Dehqon, Suvchi, Chigirtka uchun birinchi algoritmlarimizni eslang.
Ularning to‘g‘riligini tekshirish juda oson edi. Biz Ijrochining har bir ko‘rsatmadan
keyingi holatini kuzatib turar va barcha ko‘rsatmalar bajarilgandan keyin uning
holati masala shartini qanoatlantirishiga ishonch hosil qilar edik.
Takrorlash
unchalik murak
kablashtirmadi. Ijrochining harakati avvalgidek uning holatiga bog‘liq emasdi.
tuzilmasining kiritilishi
tekshirishni Yagona qo‘shimcha qiyinchilik shundan iborat ediki, juda qisqa yozuvli algoritm
bajarilishi natijasida Ijrochi juda ko‘p amallarni bajarishi kerak bo‘lardi.
Shart kiritilishi algoritmning to‘g‘riligini tekshirishda bosh qacha aks etadi.
Endi Ijrochining bajarishi kerak bo‘lgan ko‘rsatmalar ketmaketligi Ijrochining
holatiga bog‘liq bo‘ldi — ish boshida Kamaytiruvchi ekranida qanday son aks etib
turardi, Robot maydonida devorlar qanday joylashgan, Robot maydonining qaysi
kataklari bo‘yalgan.
Algoritmning oddiygina bajarilishi va to‘g‘ri natijaning olinishi algoritm to‘g‘ri
ekanligiga ishontira olmaydi. Algoritm biz tekshira olgan yoki tekshirishni
xohlagan hollardagina emas, balki ixtiyoriy holda ham to‘g‘ri ishlashiga ishonch
hosil qilishimiz kerak. Albatta, ishonch hosil qilishning eng yaxshi usuli — bu
algoritm ishining to‘g‘riligini isbotlashdir.
Rekursiyani qo‘llash yana tekshirish qiyinchiligini chuqur lashtiradi.
Haqiqatan, biz endi qaysi ko‘rsatma bajarilayotganini kuzatibgina qolmasdan, bu
ko‘rsatma qayerdan paydo bo‘lganini ham bilishimiz kerak.
Aytaylik, 7.1masala yechimidagi simmetriya rekursiyasi ishini tekshirayotib,
navbatdagi chapga ko‘rsatmasi rekursiv protsedurani uchinchi yoki beshinchi
chaqirishda paydo bo‘lgani va hokazoni yodda saqlashimiz kerak. Yana agar
rekursiv protseduralar algoritmda ko‘p bo‘lib, birbirini chaqirsachi?
Tekshirish qiyinligi — bu rekursiyalardan foydalanishdan tiyilishning
sabablaridan faqat bittasidir. Boshqa sabablar ham bor: rekursiyali dasturlar
rekursiyasiz dasturlarga nisbatan kom pyuterda bajarayotganda sekin ishlaydi va
xotiradan ko‘p joy talab qiladi; rekursiyali dasturlarni rekursiyasiz dasturlarga
almashtirayotganda masalaga boshqa tomondan qarashga yor dam beruvchi ajoyib
fikrlar paydo bo‘lishi mumkin. Shu sababli, masalaning rekursiv yechimini
topgach, yana o‘ylab ko‘ring: rekursiyasiz ishlash mumkin emasmikan?
masala
Kamaytiruvchi uchun ixtiyoriy sonni eng kam qadamda 0 ga olib keluvchi
sonlar uchun protsedurangiz
rekursiv protsedura
bajarilayotgandagi Kamaytiruvchining ko‘rsatmalar ketmaketligini yozing:
tuzing.
Quyidagi
a) 5;
b) 9;
d) 14.
Kataklarni bo‘yab, Robot bilan ishlaganda rekursiyadan qutulish mumkin.
Bunda bo‘yalgan kataklar xotira vazifasini o‘taydi. Bu holda bo‘yalgan sharti
Robot bu katakdan o‘tgan yoki o‘tmaganini bilish uchun imkon beradi.
masala
Robot devordan yuqorida qandaydir masofa uzoqlikda turibdi. Quyidagi
imkoniyatlarda Robotni devorgacha olib borib joyiga qaytarib olib keluvchi
protsedura tuzing:
a) rekursiyani ishlatish mumkin;
b) bo‘yash mumkin, rekursiyani ishlatish mumkin emas. Bu masalalardan birortasi ham sizga qiyinchilik keltirib
chiqarmaydi, deb umid qilamiz.
Oraliq
chaqirish
protsedura
orqali
rekursiv
Ba’zan protseduralarni yozganda uning o‘zini o‘zining ichida boshqa
protsedura orqali chaqirgan qulay. To‘g‘ri to‘rtburchakni bo‘yash masalasining
rekursiv yechimini qaraymiz.
masala
Robot devorlar bilan o‘ralgan to‘g‘ri to‘rtburchakning chap quyi burchagida
turibdi. To‘g‘ri to‘rtburchakning ichida devorlar yo‘q. To‘g‘ri to‘rtburchakning
barcha kataklarini bo‘yash algoritmini tuzing.
Yechim. Ikkita rekursiv protsedurani qo‘llaydigan bo‘yash algoritmini
yozamiz:
PROT to‘g‘ri to‘rtburchakni bo‘ya BOSHLANISH
AGAR EMAS bo‘yalgan U HOLDA
yo‘lakni bo‘ya va qayt TAMOM TAMOM
va
PROT yo‘lakni bo‘ya va qayt BOSHLANISH
TOKI yuqori bo‘sh BAJAR bo‘ya yuqoriga TAMOM
TOKI quyi bo‘sh BAJAR quyiga TAMOM AGAR o‘ng bo‘sh U HOLDA o‘ngga
to‘g‘ri to‘rtburchakni bo‘ya TAMOM TAMOM
Endi algoritm bitta ko‘rsatmadan iborat bo‘ladi.
to‘g‘ri to‘rtburchakni bo‘ya
Bizning yechimimizda to‘g‘ri to‘rtburchakni bo‘ya protsedurasi yo‘lakni bo‘ya
va qayt protsedurasini chaqiradi. O‘z navbatida, yo‘lakni bo‘ya va qayt
protsedurasi to‘g‘ri to‘rtburchakni bo‘ya protsedurasini chaqiradi. Shunday qilib,
to‘g‘ri to‘rtburchakni bo‘ya protsedurasi o‘zinio‘zi oraliq yo‘lakni bo‘ya va qayt
protsedurasi orqali, yo‘lakni bo‘ya va qayt protsedurasi o‘zini o‘zi oraliq to‘g‘ri
to‘rtburchakni bo‘ya protsedurasi orqali chaqiradi.
Bu holda ikkala protsedurani rekursiv deb hisoblaymiz va ular bilan oddiy
protsedura kabi muomala qilamiz. Mavzu: Algoritmlarni baholash
me’zonlari va tahlil qilish usullari. Ikki
tomonlama algoritmlar. Chiziqli
ro’yxatlar va ular ustida asosiy amallar.
Algoritm sifatini baholashning mezonlari
2.1.
Algoritmni to’g’riligini tekshirish
Dastur to’g’riligini isbotlashning eng keng tarqalgan turi bu uni testlardan
o’tkazishdir.
Algoritmni tekshirishda nazoratchi boshlang’ich ma’lumotlarni majmui
algoritmik test deb nomlanadi.
To’g’ri deb shunday algoritmga aytiladiki, u masalaning qo’yilishida talab
qilinadigan natijani har qanday ruxsat etilgan boshlang’ich ma’lumotlar bilan ham
shakllantirib biladi. Odatda, dastur bergan natijalar ma’lum bo’lgan yoki qo’lda
hisoblangan ma’lumotlar bilan taqqoslanadi, va ular to’g’riligi aniqlansa dastur
to’g’ri ishlaydi degan hulosaga kelish mumkin. Ammo bu usul bilan
foydalanuvchini hamma shubhalardan xalos qilib bo’lmaydi, ya’ni dastur
ishlamaydigan hamma holatlarni hisobga olib bo’lmaydi.
Gudman va Xidetniyemi [2] lar tomonidan algoritm to’g’riligini isbotlash uchun
quyidagi uslubiyat taklif qilingan.
Algoritm 0 dan m gacha bo’lgan qadamlar ketmaketligi ko’rinishida tavsiflangan
deb tahmin qilaylik.Har bir qadam uchun qandaydir asoslanishni taklif etamiz.
Xususan, qadamdan oldin va keyin ishlaydigan shartlar haqida lemma kerak
bo’lishi mumkin. Shu bilan birgalikda, algoritm chekliligining isbotini ham taklif
etamiz, va hamma ruxsat etilgan kiritish ma’lumotlarini tekshirib, hamma mumkin
bo’lgan chiqarish ma’lumotlarni olamiz. Algoritmni to’g’riligi bilan samaradorligi
o’rtasida hech qanday aloqa yo’qligini ta’kidlab o’tamiz.Aslida hamma talablarga
bir xil yahshi javob beradigan algoritm kamdankam ishlab chiqiladi.
Algoritmni amalga oshirish
Algoritmni amalga oshirish deganda, EHM uchun dasturni yozish deb tushuniladi.
Buning uchun quyidagi savollarga javob berish kerak:
5.1.
5.2.
5.3.
5.4.
5.5.
5.6.
Dastur yozish yoki tuzishning hilmahil usillari va uslublari mavjud.
Asosiy o’zgaruvchilarni aniqlash.
O’ zgaruvchilarning turlarini aniqlash.
Nechta massiv yoki fayllar va qanday kattalikda ular kerak bo’ladi?
Bog’lanilgan ro’yhatlardan foydalanish ma’nolimi?
Qanday dasturiy qismlar kerak bo’lishi mumkin (tayyor bo’lsa ham)?
Qaysi dasturlash tilini tanlash? Algoritmni va uning murakkabligini tahlil qilish
Algoritmni tahlil qilishdan maqsad algoritmga ma’lumotlarni aniq muvaffaqiyatli
qayta ishlash uchun kerak bo’ladigan xotira hajmi va ishlash vaqtining baholari va
chegaralarini olish. Bir masalani yechadigan ikki algoritmni taqqoslash uchun
qandaydirsonli mezon topish kerak.
Faraz qilaylik, A qandaydir bir turkumdagi masalalarni yechadigan algoritm, n
esa shu turkumdagi alohida bir masalaning kattaligi.Umumiy holda, n oddiy
skalyar yoki massiv yoki kiritiladigan ketma ketlikning uzunligi bo’lishi mumkin.
/ л (n) n kattalikdagi ixtiyoriy masalani yechadigan algoritm A bajarish kerak
bo’lgan asosiy amallami (qo’shish, ayirish, taqqoslash,...) yuqori chegarasini
beradigan ishchi funksiya. Algoritmningsifatini baholash uchun quyidagi mezonni
ishlatamiz.
Agar f A ( n ) o’sish tartibi n dan bog’liq bo’lgan polinomdan katta bo’lmasa, A
algoritm polinomial deb aytiladi, aks holda algoritm A eksponensial hisoblanadi.
Shular bilan birgalikda tahlil jarayonida ko’p matematik fanlarda standart bo’lgan
iboralar ishlatiladi.
f A (n) funksiya O[g(n)] deb belgilanadi, va lim = const Ф 0 bo’lganda, uni
n “ g ( n )
tartibi katta n lar uchun g(n) deb qabul qilinadi. Demak f(n)=O[g(n)].
f A (n) funksiyasi o[z(n)] deb katta n lar uchun belgilanadi, va unda lim = 0
n “ z ( n )
sharti bajariladi.
Bu begilar “katta O” va “kichik o” deb nomlanadi. Agar f(n)=O[g(n)] bo’lsa,
ikkala funksiya ham n ^ w bo’lganda bir xil tezlikda o’sadi.
Agarf(n)=O[g(n)] bo’lsa,unda g(n), f(n) nisbatan ancha tez o’sadi.
Demak, p (n) qandaydir n o’zgaruvchidan bog’liq va k darajadagi polinom
fA (n) = oPk (n) bo’lganda algoritm polynomial
uchun fA (n) = о [ pk (n)] yoki
hisoblanadi, aks holda algoritm eksponensial.
Eksponensial algoritm yahshi ishlamaydigan deb hisoblanadi.Agar algoritmlar
eksponensial bo’lsa, ular orasida eng samaralisini topish kerak, n kattalikdagi
masalani о(2n) qadamda yechadigan algoritm о(n.) yoki о(nn) qadamda masalani
yechadigan algoritmdan afzalroq.Dasturni tekshirish
Biz dasturni har bir qismini tekshiradigan kirituvchi ma’lumotlar to’plamini
tanlashimiz kerak.Ko’p murakkab algoritmlarni matematik tomondan tadqiq qilish
yoki juda qiyin yoki mumkin emas. Bunday holatlarda algoritmni faoliyat
jarayonida va qiyinligi bo’yicha tekshiradi. Bundan tashqari dasturlarni hisoblash
imkoniyatlarini aniqlash uchun ham testlash maqsadga muvofiq.Ko’p dasturlar
qandaydir kiritiladigan ma’lumotlar bilan yahshi ishlasa, boshqalari bilan yomon
ishlaydi.“Yahshi” lardan “yomon” larga o’tish “mayin” bo’lish kerak.Testlash
uchun ma’lumotlar dasturning qiyinligiga, mavjud vaqt resurslariga, kiritish
chiqarishsoniga bog’liq holda tanlanadi. Bu yerda analitik va eksperimental tahlil
birbirini to’ldiradi. Hujjatlashtirish
O’zingiz yozmagan dastur kodini o’qish juda qiyin.Bu muammoni hujjatlashtirish
yordamida yechsa bo’ladi. Hujjatlashtirish o’z ichiga hamma yordamchi
ma’lumotlarni oladi va dasturda nima bajarilishini tushuntirib beradi, xususan,
bloksxemalardagi boshqarishni uzatish, berilganlarni kiritishchiqarish shaklini
batafsil tavsif qilish, siklning parametrlari, yordamchi local va global
proseduralarni bajarilishi va boshqalar.
Hujjatlashtirishning eng asosiy qoidasi bu “boshqalar yozgan dasturlarni qanday
ko’rishni istasangiz, o’zingiz ham dasturni shunday ko’rinishda rasmiylashtiring”.
Masalalar yechish.
1 misol. Berilgan to 'rt xonali butun sonning raqamlari ko paytmasini toping.
Mavzu: Tarmoqlar. Daraxtlar, ularning
turlari. Tanlash va joylashtirish
turkumidagi murakkablikka ega saralash
algoritmlari.
Algoritmni tasvirlash usullari
Algoritmlarni tasvirlashning turli usullari mavjud. Quyida algoritmlarni
tasvirlashning keng tarqalgan usullarini ko‘rib chiqamiz.
1. Algoritmning so‘zlar yordamida ifodalanishi
Avval keltirilgan bir qator misollar inson og‘zaki nutqida qo‘llaniladigan
so‘zlar orqali ifodalangan edi (masalan, ko‘chadan o‘tish algoritmi, g‘ishtlar sonini
hisoblash algoritmi). Algoritmning bunday tasvirlash usulida ijrochi uchun
ko‘rsatma jumlalar orqali ko‘rsatma shaklida beriladi. Qo‘llanmada, asosan, shu
usuldan foydalanamiz.
2. Algoritmning formulalar yordamida ifodalanishi
Bu usul matematika, fizika, kimyo va biologiya kabi fanlarda ko‘plab
qo‘llanilaniladi. Yodingizda bo‘lsa, so‘zlar yordamida ifodalangan g‘ishtlar sonini
hisoblash algoritmini formula orqali ifodalagan edik. Formuladagi «+», «—», «х»,
«:» kabi arifmetik amallarning tartibiga rioya qilgan holda bajarilishi ham algo
ritmga misol bo‘ladi. Avval berilgan ««ax2+ bx+c =0 (аф 0) ko‘rinishidagi kvadrat
tenglamani yechish» algoritmining quyidagi formula orqali ifodasi bilan tanishsiz:
b ±\Jb2 4ac
x1,2 = 2a
Bilasiz, formuladagi amallar ma’lum bir tartib bilan bajarilishi shart.
3. Algoritmning jadval yordamida ifodalanishi
Algoritmning bu ko‘rinishda berilishi ham sizga tanish. Ma salan,
matematikada qo‘llanib kelinayotgan Bradis jadvali deb nomlangan to‘rt xonali
matematik jadval, lotareya yutuqlar jadvali, Mendeleyev kimyoviy elementlar
jadvali. Bunday jad vallardan foydalanish ma’lum bir algoritm qo‘llashni talab
etadi.
Biror funksiyaning grafigini chizish uchun ham funksiyaning argument
qiymatlariga mos qiymatlar jadvalini hosil qilamiz. Bu ham algoritmning jadval
ko‘rinishiga misol bo‘ladi.
4. Algoritmning grafik shaklda ifodalanishi
Algoritmning bu ko‘rinishda ifodalanishi matematikada chi
zilgan grafik, kerakli uyni oson topish uchun dahalarda o‘rnatil gan uylarning
joylashish sxemasi, avtobuslarning yo‘nalish sxemasi orqali sizga tanish.
Algoritmlash asoslarini o‘rganishning yana bir qulay grafik shakli — blok
sxema usulidir. Bloksxemalar bir yoki bir nechta buyruq yoki ko‘rsatmani aks
ettiruvchi maxsus geometrik shakllar — bloklardan tashkil topadi. Bloklar
yo‘nalish chiziqlari orqali tutashtiriladi.
misol
R radiusli doiraning yuzasini hisoblash algoritmi tuzilsin.
Avval aytib o‘tilganidek, algoritmda boshlang‘ich qiymatlar o‘rniga ularning
nomlari ishtirok etishi mumkin va bu algoritm ning ommaviylik xossasiga
aloqadorligini bildiradi. Bu masalada ham radiuslar guruhi R nomi bilan
berilmoqda va uning joiz boshlang‘ich qiymati ixtiyoriy haqiqiy son bo‘lishi
mumkin. Eslatib o‘tamiz, algoritmda turli nomlar ishtirok etishi va ular
boshlang‘ich qiymatlar va natijalar nomi bo‘lishi ham mumkin. Masalaning quyida
keltirilgan yechimidagi S nomi masalani yechimi bo‘ladigan natijalar guruhining
nomidir.
Bu masala algoritmini ikki xil usulda: so‘zlar yordamida va grafik shaklda
tuzamiz:
1) Boshlanish;
2) R ning qiymati
aniqlansin;
3) R ning R ga ko‘paytirib,
S deb olinsin;
4) S ni 3,14 ga ko‘paytirib,
S deb olinsin;
5) javob sifatida
S yozilsin;
6) tugallansin.
S:=3.14*R*R 5. Algoritmning dastur shaklida ifodalanishi
Ma’lumki, kompyuter dasturlar asosida ishlaydi va bosh qariladi. Siz
hozirgacha MS Word, MS Paint va MS Excel kabi amaliy dasturlar bilan
ishladingiz. Lekin har bir amaliy dastur ham juda katta va murakkab algoritmning
bir ko‘rinishidir. Demak, bu kabi algoritmlar bajarilishi uchun ular algoritm
ijrochisiga, ya’ni kompyuterga tushunarli bo‘lishi lozim.
Odatda, algoritmning kompyuter tushunadigan tilda yozilishi dastur deb
ataladi. Kompyuter tushunadigan til esa dasturlash tili deb ataladi. Jahonda
hozirgi kunda minglab dasturlash tillari mavjud va yana rivojlanib bormoqda.
Hozirgi kunda keng tarqalgan va o‘rganish uchun qulay bo‘lgan BASIC, Pascal,
VBA, Delphi, C dasturlash tillari o‘rganiladi.
Algoritmning asos turlari
Qo‘llanmada, asosan, algoritmuk tafakkurning rivojlan tirishini maqsad qilib
qo‘ygan bo‘lsakda, algoritm to‘g‘risida tasavvuringizni kengaytirish maqsadida
yana ba’zi ma’lumotlarni berishni lozim topdik.
Har qanday algoritm mantiqiy tuzilishiga, ya’ni bajarilishiga qarab uch asosiy
turga bo‘linadi: chiziqli (ketmaketlik), tarmoq lanuvchi va takrorlanuvchi.
Algoritmikada bu algoritmlar asosida turlituman yangi algoritmlar hosil
qilinadiki, ular ham o‘z navbatida mustaqil ahamiyatga ega bo‘ladi.
Chiziqli algoritmlar.
Bu turdagi algoritmlarda hech qanday shart
tekshirilmaydi. Shu sababli barcha ko‘rsatmalar ketma ket bajarib boriladi.
«G‘ishtlar sonini hisoblash», «Doira yuzini hisoblash» algoritmlari chiziqli
algoritmlarga misol bo‘ladi. Le kin hayotimizdagi juda ko‘p jarayonlar shartlar
asosida bosh qariladi.
Tarmoqlanuvchi algoritmlar. Shartga muvofiq bajariladigan ko‘rsatmalar
tarmoqlanuvchi algoritm lar deb ataladi.
ishtirok etgan algoritmlar
Algoritmlarning bu turi hayotimizda har kuni va har qadamda uchraydi. Eshikdan
chiqishimiz eshik ochiq yoki yopiqligiga, ovqatlanishimiz, qornimiz och yoki
to‘qligiga yoki taomning turiga, ko‘chaga kiyinib chiqishimiz obhavoga, biror
joyga borish uchun transport vositasini tanlashimiz to‘lash imkoniyatimiz bo‘lgan
pulga bog‘liqdir. Demak, tarmoqlanuvchi algoritmlar chiziqli algoritmlardan
tanlash imkoniyati bilan farqlanar ekan.
Avval yoritilgan «Ko‘chadan o‘tish», «Kvadrat tenglamani yechish»
algoritmlari ham tarmoqlanuvchi algoritmlarga misol bo‘ladi.
misol
Algoritmi formula yordamida berilgan
funksiyaning qiymatini hisoblashga doir tarmoqlanuvchi algo ritmni blok
sxema yordamida tasvirlaymiz:
1) Boshlanish;
2) A va B kiritilsin;
3) agar A > B bo‘lsa 4bandga o‘tilsin; Berilgan ikkita A va B sonlardan kattasini topish (IKT nomi bilan
ataluvchi) algoritmini so‘zlar va bloksxema yordamida tuzing.
aks holda 5bandga o‘tilsin;
4) natija A deb
olinsin va 6bandga o‘tilsin;
5) natija B deb
olinsin;
6) tugallansin.
Bu misoldan quyidagicha xulosa chiqarish mumkin: agar A > B shart bajarilsa
5banddagi ko‘rsatma bajarilmaydi, aks holda, ya’ni A < B bo‘lsa, 4banddagi
ko‘rsatma bajarilmaydi. IKT algoritmi tarmoqlanishni yaqqol tasavvur qilish
imkoniyatini beradi. Takrorlanuvchi (siklik) algoritmlar. Masalalarni tahlil etish jarayonida
algoritmdagi ba’zi ko‘rsatmalar takroran bajarilishini kuzatish mumkin.
Hayotimizda ham juda ko‘p jarayonlar tak rorlanadi. Masalan, darslarning har
hafta takrorlanishi, har kuni nonushta qilish yoki maktabga borish va hokazo.
Ko‘rsatmalari takroriy bajariladigan algoritmlar takrorlanuvchi algoritmlar deb
ataladi.
Takrorlanuvchi algoritmlar «I := I + 1», «S := S + I» yoki «P : = P * I»
ko‘rinishidagi ko‘rsatmalarning ishtiroki bilanajralib turadi (* — ko‘paytirish
amali). Bunday ko‘rsatmalarning mazmunini tushunish uchun takrorlanishning bir
nechta qada mini ko‘rib chiqamiz.
Odatda, yig‘indi uchun boshlang‘ich qiymat (inglizchadan SUMM, ya’ni
yig‘indi ma’noli so‘zning bosh harfi) S:= 0 va ko‘paytma uchun (inglizchadan
PRODUCT, ya’ni ko‘paytma ma’noli so‘zning bosh harfi) P: = 1 deb olinadi,
chunki bu qiymatlar, ya’ni 0 va 1 lar, mos ravishda, yig‘indi va ko‘paytmaning
natijasiga ta‘sir etmaydi:
1 qadamda I := 1 bo‘lsin:
S := S + I = 0 + 1 = 1, P := P * I = 1 * 1 = 1;
2 qadam: I := I + 1 = 1 + 1 = 2:
S := S + I = 1 + 2 = 3, P: = P * I = 1 * 2 = 2;
3 qadam: I := I + 1 = 2 + 1 = 3:
S := S + I = 3 + 3 = 6, P := P * I = 2 * 3 = 6;
4 qadam: I := I + 1 = 3 + 1 = 4:
S := S + I = 6 + 4 = 10, P := P * I = 6 * 4 = 24.
Algoritmikada, matematikada bunday bo‘lishi mumkin emas, I = I + 1 deb
yozilishi mumkin. Bu yozuvda avval o‘ng tomondagi qiymat hisoblanib, so‘ng bu
qiymat chap tomondagi nomning qiymati deb olinadi.
1.8
1 dan 1000 gacha bo‘lgan sonlar yig‘indisini, ya’ni S = 1+2+3+...+ 1000 ni
misol
hisoblash algoritmini tuzing.
C Boshlanish j
T
1) Boshlansin;
2) S = 0 deb olinsin
(ya’ni S:= 0);
3) I ning qiymati 1 deb
olinsin
(ya’ni I:= 1);
4) S ga I qo‘shilib, S deb
olinsin
(ya’ni S:= S+I);
5) I ga 1 qo‘shilib I deb
olinsin
(ya’ni I:= I+1);
6) agar I < 1000 bo‘lsa
4bandga o‘tilsin;
7) javob deb S olinsin;
8) tugallansin. So‘zlar bilan ifodalangan algoritmda bloksxema bilan mu tanosiblikni
bildirish uchun qavslar ichida izohlar berib bordik. Odatda, takrorlanuvchi
algoritmlarda «I:= I+1» ifoda sanagich deb yuritiladi. Bu misol yechimini chiziqli
algoritm shaklida tashkil etish ham mumkin. Buning uchun arifmetik progres
siyaning 1000 ta hadi yi‘gindisini hisoblash formulasidan foydalanish kifoya
(algoritmni mustaqil tuzing). Lekin keyingi misolda bunday qilish ancha mushkul.
misol
1.9
2 xonali sonlar ichidan raqamlari yig‘indisi 7 ga teng sonlar yig‘indisini
hisoblash algoritmini tuzing ([a] — a sonining butun qismi, / — bo‘lish amali).
Ko‘rib o‘tilgan algoritmlarga nazar
ziqli,
tarmoqlanuvchi yoki takrorlanuvchi qismlardan tashkil topganligini kuzatish
mumkin.
tashlasak,
algoritmlar chi
Demak, inson hayotida uchraydigan algoritmlar, asosan, shu uch turdagi
algoritmlarning uzviy birligi sifatida namoyon bo‘ladi.
Nazorat savollari va topshiriqlar
1. Algoritm nima?Misollarkeltiring.
2. Algoritmning qanday xossalarini bilasiz ?
3. Boshlang ‘ich qiymatlar deganda nimani tushunasiz ?
4. Hamma bajara olishi uchun algoritm qanday xossaga ega bo ‘lishi kerak?
5.Tushunarlilik xossasi bajariladigan va bajarilmaydigan ko*rsatmalar ketma
ketligiga misollar keltiring.
6.Ko ‘rsatmalar ijrochiga tushunarli bo ‘lishi uchun qanday sistemadan olinishi
kerak?
7.Ijrochi algoritmni so ‘zsiz bajarishi uchun qanday xossa ahamiyatli? Javobingizni
izohlang.
8. Algoritmning diskretlilik xossasini misollar yordamida tushuntiring.
9. Algoritmning natijaviylik xossasini misollar yordamida tushuntiring.
10.Natijaviylik xossasi bajarilmaydigan ko Rsatmalar ketmaketligiga misollar
keltiring.Algoritmning ommaviylik xossasini misollar yordamida tushuntiring.
11.Algoritmning qanday tasvirlash usullari bor?
12.Algoritmning so ‘zlar orqali ifoda etilishiga hayotiy misollar keltiring.
13.Qaysi fanlarda algoritmni formulalar yordamida berish qulay?
14.Algoritmning formulalar orqali ifoda etilishiga fizika fanidan misollar
keltiring.
15.Algoritmning jadval ko‘rinishida berilishiga misollar keltiring.
16.Algoritmning grafik shaklda berilishiga misollar keltiring.
17.Bloksxemaning asosiy elementlariga misollar keltiring. 18.Algoritmning dastur shaklida berilishiga misollar keltiring.
19.
Qanday algoritmlar chiziqli algoritm deb ataladi? Chiziqli algoritmlarga
hayotiy misollar keltiring.
20.
Qanday algoritmlar tarmoqlanuvchi algoritm deb ataladi? Tarmoqlanuvchi
algoritmlarga hayotiy misollar keltiring.
21.
Qanday algoritmlar takrorlanuvchi algoritm deb ataladi? Takrorlanuvchi
algoritmlarga hayotiy misollar keltiring.
22.
Chiziqli, tarmoqlanuvchi va takrorlanuvchi algoritmlarning birbiridan
farqini tushuntiring.
23.Uchta sondan kattasini (UKT) aniqlab beruvchi algoritm tuzing.
24.Berilgan sonning ishorasini aniqlovchi algoritm tuzing.
25.
Quyidagi ko ‘rsatmalar ketmaketligi qanday algoritm turiga misol bo
‘ladi? Algoritmlar natijasini aniqlang:
a) a: =3, x: =2 *a +a *a;
b) x:=1, x: =x+11, x:=x*x 4;
d) a:=15, b:=a, a:=ab;
a = ?, x= ?
x=?
a=?, b=?
26.
Quyidagi ko ‘rsatmalar ketmaketligi qanday algoritm turiga misol bo
‘ladi? Algoritmlar natijasini aniqlang:
a) 1) a:=3;
2) agar a > 2 bo ‘lsa, u holda x:=2*a+a *a va 4bandga o ‘tilsin;
3) x:=
9a*x;
4) javobi x yozilsin;
5) tugatilsin;
b) 1) x:=1;
2) agar x > 2 bo ‘lsa, u holda x:=x+11 va 4bandga o ‘tilsin;
3) x:=x*x4;
4) javobi x yozilsin;
5) tugatilsin; d) 1) a:=15;
2) b:= a;
3) agar a > b bo ‘lsa, u holda a:=ab va 5bandga o ‘tilsin;
4) a:=a+b;
5) javobi a, b yozilsin;
6) tugatilsin.
Qo‘shimcha masalalar
R1. Robot kengligi 1 katak bo‘lgan gorizontal yo‘lakda turibdi. Undan chapda
qayerdadir bo‘yalgan katak bor. Robotni turgan katagidan bo‘yalgan katakka borib,
yana joyiga qaytarib keltiradigan algoritm tuzing.
R2. Robot kengligi 1 katak bo‘lgan yuqoridan va quyidan devor bilan
chegaralangan gorizontal yo‘lakda turibdi. Undan o‘ngda qayerdadir bo‘yalgan katak bor. Robot turgan katagiga bo‘yalgan katakka nisbatan simmetrik bo‘lgan
chapdagi katakka borishi kerak (7.3rasm). Mos algoritmni tuzing.
R3. Robot kengligi 1 katak bo‘lgan gorizontal yo‘lakda turibdi. Undan chapda
qayerdadir devor bor. Robotni turgan katagidan devorgacha olib borib, yana joyiga
Robot bu yerda
turibdi
Robot bu yerga
o‘tishi kerak
7.3rasm.
qaytarib olib keladigan algoritm tuzing.
R4. Robotni o‘zidan yuqorida joylashgan gorizontal devor yoniga olib
keladigan rekursiv algoritm tuzing.
R5. Robot o‘tgan katagini bo‘yab ketishi mumkin bo‘lsa, u holda
a) R1
b) R3
masalalarni rekursiyasiz yeching.
K1. Samarador Kamaytiruvchi uchun rekursiv protsedurani chaqiradigan
algoritm tuzing.
Mavzu: Rekursiya va rekursiv
funksiyalar. Matematik induksiya.
Rekursiv va iteratsion algoritmlarni
qiyoslash
Programma ta’minotini yaratish amalda murakkab jarayon
hisoblanadi. Programma tuzuvchi programma kompleksini bir butunlikdagi va
uning har bir bo‘lagining ichki mazmunini va ularning sezilmas farqlarini hisobga
olishi kerak bo‘ladi.
Programmalashga tizimli yondoshuv shundan iboratki, programma
tuzuvchi oldiga qo‘yilgan masala oldindan ikkita, uchta va undan ortiq nisbatan
kichik masala ostilarga bo‘linadi. O‘z navbatida bu masala ostilari ham yana
kichik masala ostilariga bo‘linishi mumkin. Bu jarayon toki mayda masalalarni oddiy standart amallar yordamida yechish
mumkin bo’lguncha davom etadi. Shu yo‘l bilan masalani dekompozitsiyalash
amalga oshiriladi.
Ikkinchi tomondan, programmalashda shunday holatlar kuzatiladiki, unda
programmaning turli joylarida mazmunan bir xil algoritmlarni bajarishga to‘g‘ri
keladi. Algoritmning bu bo‘laklari asosiy yechilayotgan masaladan ajratib
olingan qandaydir masala ostini yechishga mo‘ljallangan bo‘lib, yetarlicha
mustaqil qiymatga (natijaga) egadir. Misol uchun quyidagi masalani ko‘raylik:
Berilgan a
,a
,…,a
, b
,b
,…,b
c
,c
,…,c
va x,y,z haqiqiy sonlar
0
1
30
0
1
30
0
1
30
yechish
xa+ x (a
30
29
1
0
2
(b ) a+…+
30
(
xc
1
z
30
)
29
30
) b+…+ y b+ y
29
)
1
...
c
30
30
0
z
(
xc
0
ifodaning qiymati hisoblansin.
Bu misolni yechishda kasrning surat va maxrajidagi ifodalar bir xil algoritm
bilan hisoblanadi va programmada har bir ifodani (masala osti) hisoblash uchun bu
algoritmni 3 marta yozishga to‘g‘ri keladi. Masaladagi 30darajali ko‘phadni
hisoblash algoritmini, masalan, Gorner algoritmini alohida, bitta nusxada yozib,
unga turli parametrlar bir safar a vektor va x qiymatini, ikkinchi safar b vektor va
y qiymatini hamda c vektor va (x+z) qiymatlari bilan murojaat qilish asosiy
masalani yechish mumkin bo‘ladi. Funksiyalar qo‘llanishining yana bir sababini
quyidagi masalada ko‘rishimiz mumkin – berilgan chiziqli tenglamalar sistemasini
Gauss, Kramer, Zeydel usullarining birortasi bilan yechish talab qilinsin. U holda
asosiy programmani quyidagi bo‘laklarga bo‘lish maqsadga muvofiq bo‘lar edi:
tenglama koiffitsentlarini kiritish bo‘lagi, yechish usulini tanlash bo‘lagi, Gauss,
Kramer, Zeydel usullarini amalga oshirish uchun alohida bo’laklar, natijani chop
qilish bo‘lagi. Har bir bo‘lak uchun o‘z funksiyadir majmuasi yaratib, zarur
bo‘lganda ularga bosh funksiya tanasidan murojaatni amalga oshirish orqali bosh
masala yechish samarali hisoblanadi.
Bunday hollarda programmani ixcham va samarali qilish uchun C++ tilida
programma bo‘lagini alohida ajratib olib, uni funksiya ko‘rinishida aniqlash
imkoni mavjud.
Funksiya bu – C++ tilida masala yechishdagi kalit elementlaridan biridir.
Funksiya parametrlari va argumentlari:[1(177187), 3(5156), 4(6772)]
Programmada ishlatiladigan har qanday funksiya e’lon qilinishi kerak. Odatda
funksiyalar e’loni sarlavha fayllarda e’lon qilinadi va #include direktivasi
yordamida programma matniga qo‘shiladi. Funksiya e’lonini funksiya prototipi
tavsiflaydi (ayrim hollarda signatura deyiladi). Funksiya prototipi quyidagi
ko‘rinishda bo‘ladi:
(); Bu yerda funksiya ishlashi natijasida y tomonidan
qaytaradigan qiymatning turi. Agar qaytariladigan qiymat turi ko‘rsatilmagan
bo‘lsa, kelishuv bo‘yicha funksiya qaytaradigan qiymat turi int deb hisoblanadi,
vergul bilan ajratilgan funksiya parametrlarining turi va
nomlari ro‘yxati. Parametr nomini yozmasa ham bo‘ladi. Ro‘yxat bo‘sh bo‘lishi
ham mumkin. Funksiya prototiplariga misollar:
int almashsin(int,int);
double max(double x, double y);
void func();
void chop_etish(void);
Funksiya prototipi tushirib qoldirilishi mumkin, agar programma matnida
funksiya aniqlanishi uni chaqiradigan funksiyalar matnidan oldin yozilgan bo‘lsa.
Lekin bu holat yaxshi uslub hisoblanmaydi, ayniqsa o‘zaro birbiriga murojaat
qiluvchi funksiyalarni e’lon qilishda muammolar yuzaga kelishi mumkin.
Funksiya aniqlanishi – funksiya sarlavhasi va figurali qavsga (‘{‘,’}’)
olingan qandaydir amaliy mazmunga ega tanadan iborat bo‘ladi. Agar funksiya
qaytaruvchi turi void turidan farqli bo‘lsa, uning tanasida albatta mos turdagi
parametrga ega return operatori bo‘lishi shart. Funksiya tanasida bittadan ortiq
return operatori bo‘lishi mumkin. Ularning ixtiyoriy birortasini bajarish orqali
funksiyadan chiqib ketiladi. Agar funksiyaning qiymati programmada
ishlatilmaydigan bo‘lsa, funksiyadan chiqish uchun parametrsiz return operatori
ishlatilishi mumkin yoki umuman return ishlatilmaydi. Oxirgi holda funksiyadan
chiqish – oxirgi yopiluvchi qavsga yetib kelganda ro‘y beradi.
Funksiya programmaning birorta modulida yagona ravishda aniqlanishi
kerak, uning e’loni esa funksiyani ishlatadigan modullarda necha marta yozilishi
mumkin. Funksiya aniqlanishida sarlavhadagi barcha parametrlar nomlari yozilishi
shart.
Odatda programmada funksiya ma’lum bir ishni amalga oshirish uchun
chaqiriladi. Funksiyaga murojaat qilganda, u qo‘yilgan masalani yechadi va o’z
ishini tugatishida qandaydir qiymatni natija sifatida qaytaradi
Funksiyani chaqirish uchun uning nomi va undan keyin qavs ichida
argumentlar ro‘yxati beriladi:
(, ,..., );
1
2
n
Bu yerda har bir funksiya tanasiga uzatiladigan va keyinchalik
hisoblash jarayonida ishlatiladigan o‘zgaruvchi, ifoda yoki o’zgarmasdir.
Argumentlar ro‘yxati bo‘sh bo‘lishi mumkin.
Funksiyalar ham o‘z tanasida boshqa funksiyalarni, o‘zini ham chaqirishi
mumkin. O‘z tanasida o‘zini chaqiradigan funksiyalarga rekursiv funksiyalar
deyiladi. Oldingi boblarda ta’kidlab o‘tilganidek, C++ tilidagi har qanqay
programmada albatta main() bosh funksiyasi bo‘lishi kerak. Ayni shu funksiyani
yuklagich tomonidan chaqirilishi bilan programma bajarilishi boshlanadi.
Quyidagi rasmda bosh funksiyadan boshqa funksiyalarni chaqirish va
ulardan qaytish sxemasi ko‘rsatilgan.
void F1(int Radius, char symbol)
{
…
return;
}
int F2(bool YesNo, int Count, short Key )
{
…
return 0;
}
int main ()
{
int x, b;
Bool a;
Char s;
Short c;
…
F1(x,s);
A=(x>0);
…
F2(a,b,c);
…
return 0;
}
1rasm.
Bosh funksiyadan boshqa funksiyalarni chaqirish va qaytish
Programma main() funksiyasini bajarishdan boshlanadi va “f1(x,y);” –
funksiya chaqirishgacha davom etadi va keyinchalik boshqaruv f1(x,y) funksiya
tanasidagi amallarni bajarishga o‘tadi. Bunda Radius parametrining qiymati
sifatida funksiya x o‘zgaruvchi qiymatini, Symbol parametri sifatida y
o‘zgaruvchisining qiymati ishlatiladi. Funksiya tanasi return operatorigacha
bajariladi. Return operatori boshqaruvni main() funksiyasi tanasidagi f1()
funksiyasi chaqirilgan operatordan keyingi operatorga o‘tishni ta’minlaydi, ya’ni
funksiyadan qaytish ro‘y beradi. Shundan keyin main() funksiyasi operatorlari
bajarilishda davom etadi va “f2(a,b,c);” – funksiya chaqirishi orqali boshqaruv f2()
funksiya tanasiga o‘tadi va hisoblash jarayonida mos ravishda YesNo sifatida a
o‘zgaruvchisining, cout sifatida
o‘zgaruvchisining va key sifatida c
o‘zgarchuvchisining qiymatlari ishlatiladi. Funksiya tanasidagi return operatori
yoki oxirgi operator bajargandan keyin avtomatik ravishda bosh funksiyaga
qaytish amalga oshiriladi.
Aksariyat hollarda main() funksiyasining parametrlar ro‘yxati bo‘sh bo‘ladi.
Agar programmani ishga tushirishda, buyruq satrida ma’lum bir parametrlarni
uzatish (berish) zarur bo‘lsa, main() funksiyasining sintaksisi o‘zgaradi:
int main(int argc, char* argv[]); Bu yerda argc – uzatiladigan parametrlar soni, argv[] birbiridan
punktuatsiya belgilari (va probel) bilan ajratilgan parametrlar ro‘yxatini o‘z ichiga
olgan massivga ko‘rsatkich.
Quyida funksiyalarni e’lon qilish, chaqirish va aniqlashga misollar
keltirilgan:
// funksiyalar e’loni
int mening_funksiyam(int Number, float Point);
char Belgini_uqish();
void bitni_urnatish(short Num);
void Amal_yoq(int,char);_
// funksiyalarni chaqirish
result= mening_funksiyam (Varb1,3.14);
symb=Belgini_uqish();
bitni_urnatish(3);
Amal_yoq(2,Smb1);
// funksiyalarni aniqlash
int mening_funksiyam (int Number, float Point);
{int x;
…
return x;}
char Belgini_uqish();
{
char Symbo1;
cin>>Symbo1;
return Symbo1;
};
void bitni_urnatish(short number)
(global_bit=global_bit|number;};
void Amal_yoq(int x, char ch){};
Funksiyaning programmadagi o‘rnini yanada tushunarli bo‘lishi uchun son
kvadratini hisoblash masalasida funksiyadan foydalanishni ko’raylik.
Funksiya prototipini sarlavha.h sarlavha faylida joylashtiramiz:
long Son_Kvadrati(int);
Asosiy programmaga ushbu sarlavha faylini qo‘shish orqali
Son_Kvadrati() funksiya e’loni programma matniga kiritiladi:
#include
#include “sarlavha.h”
int main()
{
int uzgaruvchi=5;
cout<
long Son_kvadrati(int);
int main()
{
int uzgaruvchi=5;
cout<”;
cin>>n;
cout<<’[‘<> sarlavha faylida joylashgan(3ilova qarang):
foydalaniladi.
Bu
funksiyalar
#include
#include
void chop_qilish (double Numb, double aniqlik=1,bool bayroq=true);
int main()
{double Mpi=3.141592654;
chop_qilish(Mpi,4, false);
chop_qilish(Mpi,2);
chop_qilish(Mpi);
return 0;
}
void chop_qilish(double Numb, double aniqlik=1,bool bayroq=true)
{if(!bayroq)Numb=fabs1(Numb);
Numb=(int)(Numb*pow(10,aniqlik));
Numb=Numb/pow(10,aniqlik);
cout<
// funksiya prototipi
int sum (int a; int b);
int main()
{
// lokal o’zgaruvchi
int x=r;
cout<
int f1();
int f2();
int main()
{
cout<
//global o’zgaruvchi e’loni
int test=100;
void Chop_qilish(void);
int main()
{
//lokal o’zgaruvchi e’loni
int test=10;
//global o’zgaruvchi chop qilish funksiyasini chaqirish
Chop_qilish();
cout<<”Lokal o’zgaruvchi: “<
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Алгоритм
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.