DKS={echkini o‘tkaz; bo‘rini o‘tkaz; karamni o‘tkaz; suzib o‘t}
Birinchi bo‘lib qaysi yo‘lovchini olib o‘tish kerak? Tushunarliki, bo‘rini o‘tkazib bo‘lmaydi – bu holda echki karam bilan bir qirg‘oqda qoladi va uni yeb qo‘yadi. Shunday sababga ko‘ra karamni ham olib o‘tib bo‘lmaydi. Ammo echkini bemalol olib o‘tish mumkin (bo‘rilar karam yemaydi). Shundan keyin dehqon bo‘sh qayiq bilan qaytadi – echkini qaytarib olib kelishning ma’nosi yo‘q. Demak, masala yechimining birinchi ikki qadami quyidagicha:
Qadam
|
Ko‘rsatma
|
Chap qirg‘oq
|
O‘ng qirg‘oq
|
0
|
–
|
Dehqon, bo‘ri, echki, karam
|
–
|
1
|
echkini o‘tkaz
|
bo‘ri, karam
|
Dehqon, echki
|
2
|
suzib o‘t
|
Dehqon, bo‘ri, karam
|
|
Shundan keyin dehqonda ikkita imkoniyat bor:
bo‘rini o‘tkazish
karamni o‘tkazish
Agar u bo‘rini o‘tkazib qo‘yib chap qirg‘oqqa qaytsa, u holda bo‘ri va echki o‘ng qirg‘oqda qoladi, bu esa echki uchun o‘ta xavfli. Lekin bo‘ri o‘rniga karamni o‘tkazib qo‘yib chap qirg‘oqqa qaytsa, o‘ng qirg‘oqda echki va karam yuqoridagi singari karam uchun xavfli holatda qoladi. Bu holatlar masalaning yechimi yo‘q degan tasavvur hosil qiladi. Lekin, unday emas. Ya’ni, masalan, dehqon bo‘rini o‘tkazib qo‘yib orqaga bo‘sh qaytmasin, o‘zi bilan echkini olib o‘tsin! Keyingi qadamlar o‘z-o‘zidan ko‘rinib turgani uchun masala yechimini ko‘rsatmalar orqali yozish mumkin:
Qadam
|
Ko‘rsatma
|
Chap qirg‘oq
|
O‘ng qirg‘oq
|
0
|
–
|
Dehqon, bo‘ri, echki, karam
|
–
|
1
|
echkini o‘tkaz
|
bo‘ri, karam
|
Dehqon, echki
|
2
|
suzib o‘t
|
Dehqon, bo‘ri, karam
|
echki
|
3
|
bo‘rini o‘tkaz
|
Karam
|
Dehqon, bo‘ri, echki
|
4
|
echkini o‘tkaz
|
Dehqon, echki, karam
|
bo‘ri
|
5
|
karamni o‘tkaz
|
Echki
|
Dehqon, bo‘ri, karam
|
6
|
suzib o‘t
|
Dehqon, echki
|
bo‘ri, karam
|
7
|
echkini o‘tkaz
|
–
|
Dehqon, bo‘ri, echki, karam
|
Masalani yechimi yagonadek tuyulishi mumkin, lekin agar dehqon 3-qadamda bo‘rini emas karamni olib o‘tsa, u holda shu qadamdan boshlab algoritmni davom ettirib ikkinchi yechim algoritmini hosil qilish mumkin.
Algoritmni so‘z orqali tasvirlashni to‘laroq tushunib olish uchun quyidagi masalani qaraymiz.
۩. Bo‘g‘irsoq uchun “oldindagi” katak qalpoqchasi ko‘rsatayotgan katakdir, masalan u o‘ngga burilganda ko‘rinishda bo‘ladi. Bo‘g‘irsoq bitta oldindagi katakka yura oladi yoki turgan katagida o‘ngga yoki chapga burila oladi. Bo‘g‘irsoq bir katakdan bir necha marta o‘tishi ham mumkin. Bo‘g‘irsoq o‘zi turgan katakdan bilan belgilangan katakka biror yo‘l bilan bora oladigan bo‘lsa, zaruriy ko‘rsatmalar ketma-ketligini yozing.
Masala shartiga asoslanib ijrochi Bo‘g‘irsoqning ko‘rsatmalar sistemasini yoza olamiz, ya’ni BKS={oldinga; o‘ngga; chapga}. Endi masala yechimi sifatida quyidagi algoritmlardan birini olish mumkin:
-
Qadamlar soni
|
1-algoritm
|
2-algoritm
|
3-algoritm
|
4-algoritm
|
1
2
3
4
5
6
7
8
9
10
11
12
|
chapga;
oldinga;
oldinga.
|
o‘ngga;
o‘ngga;
o‘ngga;
oldinga;
oldinga.
|
oldinga;
chapga;
oldinga;
oldinga;
chapga;
oldinga.
|
o‘ngga;
oldinga;
oldinga;
chapga;
oldinga;
chapga;
oldinga;
oldinga;
oldinga;
oldinga;
chapga;
oldinga.
|
Shu ikki masalani tahlil etishning o‘zi quyidagi natijaga olib keladi:
Masala yechimiga olib boruvchi algoritm yagona bo‘lmasligi ham mumkin!
Umuman, algoritm tuzish jarayonini ham bir necha qadamga ajratish mumkin.
Birinchi qadamda, tuzilgan algoritm masala yechimini berishi yetarli ekan. Keyingi qadamlar esa dasturchining bilim darajasi va algoritmik tafakkuriga qarab masala yechimini soddalashtirishi yoki algoritmdagi qadamlar sonini kamaytirishi bilan bog‘liq bo‘ladi.
Algoritmlarni tasvirlashni yana bir qulay shakli blok-sxema usulidir. Bloksxemalar yo‘nalish chiziqlari orqali tutashtirilgan ma’lum buyruq yoki ko‘rsatmalar mazmuniga moslikni aks ettiruvchi maxsus geometrik shakllar – (bo‘laklardan) bloklardan tashkil topadi:
Boshlanish va tugallanish bloklari bir xil ko‘rinishda bo‘lgani uchun farqlash maqsadida ichiga “boshlanish” va “tamom” so‘zlarini, ma’lumotlarni kiritish va chiqarish bloklari ham bir xil ko‘rinishda bo‘lgani uchun farqlash maqsadida kiritishda ma’lumotlardan avval, chiqarishda esa ma’lumotlardan keyin “” belgisini qo‘yamiz.
Algoritmlarni blok-sxema orqali tasvirlash dasturchilarni matn yozishdek “mashaqqatli” ishdan xalos etish bilangina emas, balki o‘zining ko‘rgazmaliligi bilan ham e’tiborni tortadi. Blok-sxemalarda turli ifoda, tengsizlik va formulalarni qo‘llash mumkinligi dasturchi ishini yanada soddalashtiradi.
Yuqorida ko‘rib o‘tilgan masalalar algoritmlarini blok-sxema usulida ham tasvirlash mumkin. Bu vazifani o‘quvchiga takrorlash sifatida qoldiramiz. Quyida ikkita sodda masalalarni yechish algoritmini so‘zlar va blok-sxema yordamida ifodalaymiz. Algoritmda yuqori registrdagi harflarni (ya’ni, bosh harflarni) maxsus tuzilmalar uchun qoldirib, uning sodda ko‘rsatmalarini quyi registrda (ya’ni, kichik harflarda) yozamiz.
۩. Berilgan O da M=23∙O+1963 ifodaning qiymatini hisoblash algoritmini tuzing.
-
Yechim. Masala shartida “berilgan O da” ibora ishlatilgani uchun algoritmda O ning qiymati kiritilishi kutiladi. Yuqoridagi izohlar va belgilashlar yordamida algoritmlarni quyidagicha yozish mumkin.
|
Algoritm (so‘zlar orqali):
boshlanish;
O ning qiymati aniqlansin;
23 ni O ga ko‘paytmasiga 1963 ni qo‘shib M ga o‘tkazilsin; 4) javob sifatida M yozilsin; 5) tamom.
|
Algoritm (blok-sxema):
|
۩. Radiusi R ga teng doiraning yuzasini hisoblash algoritmi tuzilsin.
-
Yechim. Masala shartida “radiusi R ga teng” ibora ishlatilgani uchun algoritmda doira radiusi R ning qiymati kiritilishi kutiladi. Doira yuzining radius orqali S=π∙R2 kabi ifodalanishi maktab geometriya kursidan ma’lum. Yuqoridagi izohlar va belgilashlar yordamida algoritmlarni quyidagicha yozish mumkin.
|
Algoritm (so‘zlar orqali):
boshlanish;
R ning qiymati aniqlansin;
R ni kvadratiga 3,14 ga ko‘paytirib S ga o‘tkazilsin;
javob sifatida S yozilsin; 5) tamom.
|
Algoritm (blok-sxema):
|
Do'stlaringiz bilan baham: |