R
Robot bu yerda Robot bu yerga
turibdi o‘tishi kerak
7.3-rasm.
-2. 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.3-rasm). Mos algoritmni tuzing.
R-3. Robot kengligi 1 katak bo‘lgan gorizontal yo‘lakda turibdi. Undan chapda qayerdadir devor bor. Robotni turgan katagidan devorgacha olib borib, yana joyiga qaytarib olib keladigan algoritm tuzing.
R-4. Robotni o‘zidan yuqorida joylashgan gorizontal devor yoniga olib keladigan rekursiv algoritm tuzing.
R-5. Robot o‘tgan katagini bo‘yab ketishi mumkin bo‘lsa, u holda
R-1
R-3
masalalarni rekursiyasiz yeching.
K-1. 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
yechish
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 30-darajali 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.