கணினி அறிவியல் - பிரிப்பு | 11th Computer Science : Chapter 7 : Composition and Decomposition
பிரிப்பு (Decomposition)
ஒரு பெரிய சிக்கலை, பல சிறிய, நிர்வகிக்கக் கூடிய சிக்கல்களாக பிரிக்கும் செயல், பிரிப்பு எனப்படும். இது சிக்கலைத் தீர்க்கும் தொடக்க செயல் நுட்பமாகும். பிரிக்கப்படும் சிறிய சிக்கல்கள் தீர்க்கப்பட்டு, மீண்டும் ஒன்றிணைக்கப்பட்டு, முழுமையான தீர்வைக் காணமுடியும். பெரும்பாலும், சிக்கல்கள் ஒரு முறையான அமைப்பாக இருக்கும். அவ்வாறு ஒரு முறையான அமைப்பாக உள்ள சிக்கல்கள், சிறிய சிக்கல்களாக பிரிக்கப்படும். பின்னர், ஒவ்வொரு சிறிய பகுதியும், பல நுண்ணிய பகுதிகளாக பிரிக்கப்பட்டு, தீர்க்கப்பட்டு, ஒன்றிணைக்கப்பட்டு, முழு சிக்கலுக்கும் தீர்வு காணப்படும்.
1. மெருகேற்றம் (Refinement)
ஒருபெரிய சிக்கல், பல சிறிய சிக்கல்களாக பிரிக்கப்பட்ட பின்னர், ஒவ்வொரு சிறிய சிக்கல் கூறுகளும் மேலும், இதுவே மெருகேற்றப்படும் எனப்படும்.
1. ஒவ்வொரு சிறிய சிக்கல்களும் பல நுண்ணியபடி நிலையாக விரிவாக்கப்படும்.பின்னர், அந்த ஒவ்வொரு நுண்ணிய படிநிலையும், மேலும் பல படிநிலைகளில் விரிவாக்கம் செய்யப்படும். மெருகேற்றம்
2. சிறிய சிக்கல் கூறுகளை அருவமாக்கவும் முடியும். ஒவ்வொரு சிறிய சிக்கல் கூறுகளும் உள்ளீடு மற்றும் வெளியீட்டை கொண்டிருக்கும். பெரிய சிக்கலை தீர்க்கும் போது, ஒவ்வொரு சிறிய சிக்கல் கூறுகளின் விவரக்குறிப்பை தெரிந்துவைத்துக் கொண்டாலே போதும். அந்த சிறிய சிக்கல் கூறு எவ்வாறு சிக்கலை தீர்க்கிறது என்பதும் தெரிந்து வைத்திருக்க வேண்டிய அவசியமில்லை.
எடுத்துக்காட்டு 7.6: காலையில் பள்ளிக்கு செல்ல தயாராகும் மாணவரின் செயல்களை கீழ் உள்ளவாறு எழுதலாம்.
1. பள்ளிக்குத் தயாராகுதல்
இந்த செயலை மேலும், சில சிறிய பகுதிகளாக பிரிக்கலாம்
1. காலை சிற்றுண்டி உண்ணுதல்
2. சீருடை அணிதல்
3. வீட்டை விட்டு கிளம்புதல்
இதில் ஒரு செயலை மேலும் விரிவான தொடர் செயலாக மெருகேற்றலாம்
1. காலை சிற்றுண்டி உண்ணுதல்
2. இட்லி உண்ணுதல்
3. முட்டை உண்ணுதல்
4. வாழைப்பழம் உண்ணுங்கள்
"சீருடை அணிதல்" என்ற செயல், பின்வருமாறு விரிவாக்கப்படுகிறது.
1. சீருடை அணிதல்
2. நீல நிற ஆடை உடுத்துதல்
3. சாக்ஸ் மற்றும் ஷீ அணிதல்
4. அடையாள அட்டை அணிதல்
மற்றும் வீட்டை விட்டு கிளம்புதல்” பின்வருமாறு விவரிக்கப்படுகிறது.
1. வீட்டை விட்டு கிளம்புதல்
2. மிதிவண்டியை வெளியே எடுத்தல்
3. மிதிவண்டியை ஓட்டுதல்
ஒட்டு மொத்தமாக "பள்ளிக்கு தயாராகுதல்" என்ற செயல்பாடு பின்வருமாறு மெருகேற்றப்படுகிறது
1. -- காலை சிற்றுண்டி உண்ணுதல்
2. இட்லி உண்ணுதல்
3. முட்டை உண்ணுதல்
4. வாழைப்பழம் உண்ணுதல்
5.
6. -- சீருடை அணிதல்
7. நீல நிற ஆடை உடுத்துதல்
8. சாக்ஸ் மற்றும் ஷீ அணிதல்
9. அடையாள அட்டை அணிதல்
10.
11. -- வீட்டை விட்டு கிளம்புதல்
12. மிதிவண்டியை வெளியே எடுத்தல்
13. மிதிவண்டியை ஓட்டுதல்
மெருகேற்றம் என்பது, செயல்முறைகளை வரிசைபடுத்துதல் மட்டுமல்ல. சூழ்நிலைக்கு ஏற்ப மாணவர் எப்படி நடந்து கொள்ளவேண்டும் ஆகும். எவ்வாறு காலை சிற்றுண்டி என்பதை உண்ண வேண்டும் என்பது அவருடைய அளவையும், உணவு மேசையின் மீது என்ன உள்ளது என்பதையும் எந்த ஆடையை அணிய வேண்டும் என்பது வாரத்தின் நாட்களையும், பொறுத்துள்ளது நிபந்தனை மற்றும் சுழற்சி கூற்றுகளை பயன்படுத்தி, சூழ்நிலைக்கு ஏற்ப நமது நடவடிக்கைகளை மெருகேற்ற முடியும்.
1 -- காலை சிற்றுண்டி உண்ணுதல்
2 பசி இருந்தால், மேஜையில் இட்லி இருக்கும்
3 இட்லி உண்ணுதல்
4 பசி இருந்தால், மேஜையில் முட்டை இருக்கும்.
5 முட்டை உண்ணுதல்
6 பசி இருந்தால், மேஜையில் வாழைப்பழம் இருக்கும்
7 வாழைப்பழம் உண்ணுதல்
8
9 --சீருடை அணிதல்
10 புதன் கிழமை எனில்
11 நீல நிற ஆடை அணிதல்
12 இல்லையேல்
13 வெண்ணிற ஆடை அணிதல்
14 சாக்ஸ் ஷீ அணிதல் மற்றும்
15 அடையாள அட்டை அணிதல்
16
17 --வீட்டை விட்டு கிளம்புதல்
18 மிதிவண்டியை வெளியே எடுத்தல்
19 மிதிவண்டியை ஓட்டுதல்
“இட்லி உண்ணுதல்” என்ற செயல், சுழற்சி செயல்முறையால் மேலும், மெருகேற்றப்படும்.
1 இட்லி உண்ணுதல்
2 தட்டில் இட்லிகளை வைத்தல்
3 சட்டினி சேர்த்தல்
4 தட்டில் இட்லி இருக்கும் வரை
5 இட்லி உண்ணுதல்
படம் 7.8ல் "பள்ளிக்கு தயாராகுதல்" என்ற செயல் எவ்வாறு மெருகேற்றப்படுகிறது என்பதை காணலாம்.
படம் 7.9ல் "காலை சிற்றுண்டி உண்ணுதல்” என்ற செயல் பாய்வுப்படமாக தரப்பட்டுள்ளது.
குறிப்பு: இந்த பாய்வுப் படம் மெருகேற்றத்தின் படிநிலை அமைப்பை காட்டவில்லை.
2. செயற்கூறு (Functions)
நெறிமுறை சார் சிக்கல், பல சிறிய சிக்கல்களாக பிரிக்கப்பட்டு, அவை அருவமாக்கப்படுவது, செயற்கூறுகள் ஆகும். ஒரு செயற்கூறு ஒரு துணை நெறிமுறை ஆகும். ஒரு முழுமையான நெறிமுறையைப் போன்று, chutney செயற்கூறும் உள்ளீடு மற்றும் வெளியீடு பெற்றுள்ளது.
ஒரு செயற்கூறு, முதன்மை நெறிமுறையில் பயன்படுத்தப்படுவதற்கு, அந்த செயற்கூறின் விவரக்குறிப்புகளான, செயற்கூறு பெயர், உள்ளீடு மற்றும் வெளியீடு போன்றவற்றை தெரிந்து வைத்திருத்தல் வேண்டும். செயற்கூறுக்கு அனுப்பப்படும் உள்ளீடு குறிப்பிட்ட பண்புக்கூறுகளையும், செயற்கூறின் வெளியீடானது உள்ளீடு- வெளியீடு உறவுநிலையையும் திருப்தி செய்கிறதா என்பதையும் பயனர் அறிந்திருத்தல் அவசியமாகும். அதாவது செயற்கூறின் செயல்பாடு பற்றி பயனர் அறிந்திருத்தல் அவசியமாகும். அது செயல்படும் விதம் பற்றி தெரிந்திருக்க வேண்டியதில்லை.
ஒருவர் நெறிமுறையை பயன்படுத்தி, செயற்கூற்றை செயல்படுத்த முடியும். செயற்கூற்றை செயல்படுத்த பயன்படும் நெறிமுறை பற்றி, அச்செயற்கூறை பயன்படுத்தும் பயனர் தெரிந்து வைத்திருக்க வேண்டிய அவசியமில்லை. அது பயனரிடமிருந்து மறைக்கப்பட்டுள்ளது. ஒரு செயற்கூறு பயன்படுத்தப்படும் போது அது எவ்வாறு செயல்படுகிறது என்பது பற்றி பயனருக்கு தெரிந்திருக்க வேண்டிய அவசியமில்லை.
ஒரு செயற்கூற்றை செயல்படுத்தப் பயன்படுத்தப்படும், நெறிமுறை அதற்கென தனித்த, சொந்த மாறிகளை பராமரிக்கும். இந்த மாறிகள், அந்த குறிப்பிட்ட செயல்கூற்றில் மட்டுமே வினைபுரியும் ஒரு உள்ளமைந்த தன்மையுடையது. அது பயனரின் பார்வையிலிருந்து மறைக்கப்பட்டுள்ளது. அதன் விளைவாக, பயனர் ஒரு சில மாறிகளை மட்டுமே முதன்மை நெறிமுறையில் பராமரித்தால் போதுமானது. அது, முதன்மை நெறிமுறையை குழப்பநிலையிருந்து காக்கும்.
எடுத்துக்காட்டு 7:2. கொடுக்கப்பட்ட a, b, c என்ற மூன்று பக்கங்களில், c என்ற நீண்ட பக்கத்தையுடைய ஒரு முக்கோணம், வலது கோண முக்கோணமா (Right angled triangle) என்பதை காணும் சிக்கல் ஒன்று தரப்பட்டுள்ளது. ஒருமுக்கோணம், வலதுகோண முக்கோணமாக இருக்க வேண்டுமெனில்,
c2 = a2 + b2 என்று இருக்கவேண்டும்
இந்த சிக்கலைத் தீர்க்க, square ( ) என்ற செயற்கூறு, கீழ்கண்டவாறு குறிப்பிடப்பட வேண்டும்.
square(y)
--inputs : y
--outputs : y2
கொடுக்கப்பட்ட முக்கோணம், வலது கோண முக்கோணமா? என சோதிக்க, மேற்காண் செயற்கூற்றை, மூன்று முறை பயன்படுத்த வேண்டும். square() செயற்கூறு ஒரு "கருப்பு பெட்டி" ஆகும். இந்த Square ( ) என்ற செயற்கூறு எவ்வாறு கணக்கிடுகிறது என்பதை பற்றி, இதனை பயன்படுத்துபவர் தெரிந்திருக்க வேண்டியதில்லை. இந்த செயற்கூறின் விவரக்குறிப்பை மட்டும் தெரிந்துகொண்டால் போதுமானதாகும்
1 right_angled(a, b, c)
2 -- inputs: c ≥ a, c ≥ b
3 -- outputs: result = true if c2 = a2 + b2;
4 -- result = false , otherwise
5 if square (c) = square (a) + square (b)
6 result := true
7 else
8 result := false