பாய்வுக் கட்டுப்பாடு | C++ - C++ தேர்ந்தெடுப்பு கூற்றுகள் | 11th Computer Science : Chapter 10 : Flow of Control
தேர்ந்தெடுப்பு கூற்றுகள்
ஒரு நிரலில் தீர்மானிப்புக் கூற்று ஒரு பகுதியிலிருந்து மற்றோரு பகுதிக்கு கட்டுப்பாட்டை ஒரு முறைத் தாவச்செய்கிறது. இதை பல வழிகளில் மேற்க்கொள்ளலாம் முக்கியமாக if...else கூற்று பயன்படுகிறது. இரண்டு குற்றுகளுகக்கிடையே ஒன்றை தேர்வு செய்கிறது மற்றொரு தீர்மானிப்புக் கூற்று switch என்பது ஒரு மாறியின் அடிப்படையில் கிளைப்பிரிப்பு கூற்று தொகுதிகளை உருவாக்கும்
if கூற்று
if கூற்று என்பது ஒரு தீர்மானிப்புக் கூற்றாகும். if கூற்று நிபந்தனையை சோதித்து, நிபந்தனை சரி எனில் சரித்தொகுதி கூற்று அல்லது கட்டளைத்தொகுதி இயக்கப்படும். இல்லையெனில் சரித் தொகுதி தவிர்க்கப்படும். if கூற்றின் தொடரியல்.
if (நிபந்தனை கோவை)
மெய் தொகுதி;
x-கூற்று
மேற்கண்ட கட்டளை அமைப்பில், if என்ற சிறப்புச்சொல் கோவை அல்லது நிபந்தனையை அடைப்புக்குறிக்குள் கொண்டிருக்க வேண்டும். கொடுக்கப்பட்ட கோவையின் மதிப்பு சரி எனில் (0 சுழியம் அல்லாத) சரித்தொகுதி இயக்கப்படும். அதைத் தொடர்ந்து X-கூற்று எடுத்துச் செல்லும். ஒரு சரித் தொகுதி ஒற்றை கூற்று, கலவை கூற்று அல்லது வெற்று கூற்றினை கொண்டிருக்கலாம்.
எடுத்துக்காட்டு 10.1 if கூற்றைப் பயன்படுத்தி ஒரு நபர் வாக்களிக்க தகுதியானவரா என சோதிக்க C++ நிரல் ஒன்று எழுதுக.
#include <iostream>
using namespace std;
int main()
{
int age;
cout<< "\n Enter your age: ";
cin>> age; if(age>=18)
cout<< "\n You are eligible for voting ....";
cout<< "This statement is always executed.";
return 0;
}
if கூற்று, அதற்கு கீழே கொடுக்கப்படும் ஒரே ஒரு நிரல் கூற்றை மட்டுமே இயக்கும். எனவே, நெளிவு அடைப்புக் குறியீடு பயன்படுத்த வேண்டிய அவசியமில்லை.
வெளியீடு
Enter your age: 23
You are eligible for voting….
This statement is always executed.
if-else கூற்று
ஒரு if else கூற்று என்பதும் கட்டுப்பாட்டு பாய்வு கூற்றாகும். இது நிபந்தனையின் அடிப்படையில் ஒரு செயலை செய்யப் பயன்படுகிறது. If else கூற்றில், முதலில் கோவை அல்லது நிபந்தனை சரியா அல்லது தவறா என மதிப்பிடப்படுகிறது. கிடைக்கப்பெற்ற விடை சரியெனில், சரித்தொகுதியுனுள் இடம் பெறும் கூற்றுகள் இயக்கப்படும். தவறு தொகுதி நிறைவேற்றப்படாது, கிடைக்கபெற்ற விடை தவறு எனில், தவறு தொகுதியினுள் இடம் பெறும் கூற்றுகள் இயக்கப்படும், சரித்தொகுதி நிறைவேற்றப்படாது. If else கூற்றின் கட்டளை தொடரியல் பின்வருமாறு:
if (கோவை)
{
மெய் தொகுதி;
}
else
{
மெய்யற்ற தொகுதி;
}
x-கூற்று
மேற்கண்ட கட்டளை அமைப்பில், if கூற்றுடன் கொடுக்கப்பட்ட நிபந்தனை முதலில் மதிப்பீடு செய்யப்படுகிறது. நிபந்தனை சரி எனில், சரித்தொகுதி இயக்கப்பட்டு, பின் கட்டுப்பாடு X கூற்றுக்கு இட்டுச் செல்கிறது,. நிபந்தனை தவறு எனில், தவறு தொகுதி இயக்கப்பட்டு, பின் கட்டப்பாடு X கூற்றுக்கு அனுப்பி வைக்கப்படுகிறது.
எடுத்துக்காட்டு 10.2 if-else கூற்றைப் பயன்படுத்தி கொடுக்கப்பட்ட எண் ஒற்றைப் படை அல்லது இரட்டைப் படை எண்ணா எனக் காணும் C++ நிரல் ஒன்றை எழுதுக.
#include <iostream>
using namespace std;
int main()
{
int num, rem;
cout<< "\n Enter a number: ";
cin>>num;
rem = num % 2;
if (rem==0)
cout<< "\n The given number" <<num<< " is Even";
else
cout<< "\n The given number "<<num<< " is Odd";
return 0;
}
வெளியீடு
Enter number: 10
The given number 10 is Even
மேற்கண்ட நிரலில், கொடுக்கப்பட்ட எண்ணின் வகுமீதி rem என்ற மாறியில் இருத்தப்படும். rem ன் மதிப்பு சுழியம் எனில், கொடுக்கப்பட்ட எண் இரட்டைப் படை எண் (even number) என்ற வெளியீடும், இல்லையெனில், ஒற்றைப் படைஎண் (odd number) என்ற வெளியீடும் கிடைக்கும்.
பின்னலான if கூற்று:
ஒரு if கூற்று, மற்றொரு if கூற்றை கொண்டிருந்தால் அது பின்னலான if கூற்று என்று அழைக்கப்படுகிறது. பின்னலான if கூற்றுகள், பின்வரும் மூன்று வடிவங்களில் அமைக்கப்படும். அவையாவன
(1) ஒரு if கூற்றுக்கு உள்ளே மற்றொரு if கூற்றை அமைத்தல்
(2) ஒரு if கூற்றின் else கூற்றுக்குள் மற்றொரு if கூற்றை அமைத்தல்
(3) ஒரு if கூற்றுக்கு உள்ளே ஒரு if கூற்றும், else கூற்றுக்கு உள்ளே மற்றொரு if கூற்றும் அமைத்தல்.
இந்த மூன்று வடிவங்களின் தொடரியல் கீழே கொடுக்கப்பட்டுள்ளது.
ஒரு if கூற்றுக்கு உள்ளே மற்றொரு if கூற்றை அமைத்தல்
if (கோவை-1)
{
if (கோவை - 2)
{
மெய் பகுதி கூற்றுகள்;
}
else
{
மெய்யற்ற பகுதி கூற்றுகள்;
}
else பகுதியின் உடற்பகுதி;
ஒரு if கூற்றின் else கூற்றுக்குள் மற்றொரு if கூற்றை அமைத்தல்
if (கோவை-1)
{
மெய் பகுதியின் உடற்பகுதி;
}
else
{
if (கோவை - 2)
{
மெய் பகுதி கூற்றுகள்;
}
Else
{
மெய்யற்ற பகுதி கூற்றுகள்;
}
}
ஒரு if கூற்றுக்கு உள்ளே ஒரு if கூற்றும், else - கூற்றுக்கு உள்ளே மற்றொரு if கூற்றும் அமைத்தல்.
if (கோவை)
{
if (கோவை)
{
மெய் பகுதி கூற்றுகள்;
}
else
{
மெய்யற்ற பகுதி கூற்றுகள்;
}
}
else
{
if (கோவை)
{
மெய் பகுதி கூற்றுகள்;
}
else
{
மெய்யற்ற பகுதி கூற்றுகள்;
}
மேலே கொடுக்கப்பட்டுள்ள முதலாவது தொடரியல், முதன்மை if கூற்றுக்குள் கொடுக்கப்பட்டுள்ள கோவை-1 முதலில் மதிப்பிடப்படும். அதன் மதிப்பு சரி எனில், அதனுள் கொடுக்கப்பட்டுள்ள பின்னலான if கூற்றுக்கு கட்டுபாட்டு பாய்வு செல்லும். பின்னலான if கூற்றின் நிபந்தனை சரி எனின், அதனுள் கொடுக்கப்பட்ட சரி தொகுதியின் கூற்றும், தவறு எனில் else கூற்றினுள் கொடுக்கப்பட்டுள்ள தவறு தொகுதியின் கூற்றும் இயக்கப்படும். முதன்மை if கூற்றின் நிபந்தனை கோவை மதிப்பு தவறு எனில், முதன்மை else தொகுதிக்குள் கொடுக்கப்பட்டுள்ள நிரல் கூற்றுகள் இயங்கும். மேலே கொடுக்கப்பட்டுள்ள மூன்று வகையான பின்னல் if கூற்றுகளின் பாய்வுப் படங்கள் கீழே கொடுக்கப்பட்டுள்ளது.
எடுத்துக்காட்டு 10.3 பின்னலான if கூற்றினை பயன்படுத்தி தரநிலைக்கு ஏற்ப விற்பனை தரகை (Commission) கணக்கிட நிரல் ஒன்று எழுது.
#include <iostream>
using namespace std;
int main()
{
int sales, commission;
char grade;
cout << "\n Enter Sales amount: ";
cin >> sales;
cout << "\n Enter Grade: ";
cin >> grade;
if (sales > 5000)
{
commission = sales * 0.10;
cout << "\n Commission: " << commission;
}
else
{
commission = sales * 0.05;
cout << "\n Commission: " << commission;
}
cout << "\n Good Job ..... ";
return 0;
}
வெளியீடு:
Enter Sales amount: 6000
Enter Grade: A
Commission: 600
Good Job .....
if -else-if அடுக்கு
if-else அடுக்கு என்பது பல வழி தீர்மானிப்பு கூற்றாகும். இந்த வகையான கூற்றில், if என்னும் சிறப்புச் சொல்லைத் தொடர்ந்து ஒன்று அல்லது ஒன்றுக்கு மேற்பட்ட else if கூற்றுகள் இடம் பெற்றிருக்கும். இறுதியாக else கூற்றுடன் முடிவு பெறும்.
if-else அடுக்கின் தொடரியல் :
if (கோவை-1)
{
கூற்று -1
}
else
if( கோவை - 2)
{
கூற்று -2
}
else
if (கோவை - 3)
{
கூற்று -3
}
else
{
கூற்று -4
}
கொடுக்கப்பட்டுள்ள கோவை (Expressions) சரி எனில், அந்த தொகுதியுடன் தொடர்புடைய கூற்று நிறைவேற்றப்படும், அந்த அடுக்கில் இடம் பெற்றிருக்கும் மற்ற கூற்றுகள் தவிர்க்கப்பட்டு விடும். எல்லா கோவையும் தவறு எனில் இறுதியான else கூற்று நிறைவேற்றப்படும்
எடுத்துக்காட்டு 10.4 if-else அடுக்கினை பயன்படுத்தி உன்னுடைய தரநிலைக் கண்டறியும் C++ நிரல் எழுதுக.
#include <iostream>
using namespace std;
int main ()
{
int marks;
cout<<" Enter the Marks :";
cin>>marks;
if( marks >= 60 )
cout<< "Your grade is 1st class !!" <<endl;
else if( marks >= 50 && marks < 60)
cout<< "your grade is 2nd class !!" <<endl;
else if( marks >= 40 && marks < 50)
cout<< "your grade is 3rd class !!" <<endl;
else
cout<< "You are fail !!" <<endl;
return 0;
}
வெளியீடு
Enter the Marks :60
Your grade is 1st class !!
மதிப்பெண்கள் 60ஐ விட அதிகமானதாகவோ அல்லது சமமானதாகவோ இருப்பின் "Your grade is 1st class !!" என்ற செய்தி வெளியிடப்படும். அடுக்கில் இடம் பெற்ற மற்றவை தவிர்க்கப்பட்டு விடும். மதிப்பெண்கள் 50க்கும், 59க்கும் இடையே இருக்குமானால் "Your grade is 2nd class !!" என்று வெளியிடப்படும், மற்ற அடுக்கு தவிர்க்கப்பட்டு விடும். மதிப்பெண்கள் 40 க்கும் 49க்கும் இடையில் இருந்தால் செய்தி "Your grade is 3rd class !!" என்று வெளியிடப்படும் இல்லையெனில் "You are fail !!" என்ற செய்தி காண்பிக்கப்படும்.
if else க்கு மாற்றான நிபந்தனை செயற்குறி
நிபந்தனை செயற்குறி அல்லது மும்ம செயற்குறி என்பது if else கூற்றின் மாற்று வழியாகும். நிபந்தனை செயற்குறி ?: என்ற இரண்டு குறியீடுகளை கொண்டுள்ளது. இது மூன்று செயலுருப்புகளை ஏற்கும். நிபந்தனை செயற்குறியின் பாய்வுக்கட்டுப்பாடு கீழே கொடுக்கப்பட்டுள்ளது,
நிபந்தனை செயற்குறியின் தொடரியல்
கோவை 1? கோவை 2 : கோவை 3 ;
மேற்கண்ட தொடரியலில், கோவை 1 என்பது மதிப்பிட வேண்டிய நிபந்தனையை குறிக்கும். நிபந்தனை சரி எனில், கட்டுப்பாடு கோவை 2க்குச் செல்லும். இல்லையெனில் கட்டுப்பாடு கோவை 3க்கு எடுத்துச்செல்லப்படும்.
எடுத்துக்காட்டு 10.5 கொடுக்கப்பட்ட இரண்டு எண்களில் எது பெரியது என கண்டறிய நிபந்தனை செயற்குறியை பயன்படுத்தி ஒரு நிரல் எழுதுக.
#include <iostream>
using namespace std;
int main()
{
int a, b, largest;
cout << "\n Enter any two numbers: ";
cin >> a >> b;
largest = (a>b)? a : b;
cout << "\n Largest number : " << largest;
return 0;
}
வெளியீடு:
Enter any two numbers: 12 98
Largest number : 98
switch கூற்று
switch கூற்று என்பது ஒரு பல வழி கிளைப்பிரிப்பு கூற்றாகும். இது கோவையின் மதிப்பின் அடிப்படையில் பல்வேறு நிரல் பகுதிகளுக்கு கட்டுப்பாட்டை எடுத்துச் செல்வதற்கு எளிதாக வகை செய்கிறது. switch கூற்று ஒன்றுக்கும் மேற்ப்பட்ட if else கூற்றுகளுக்கு மாற்றாக அமைந்துள்ளது.
switch(கோவை)
{
case constant 1:
கூற்று (s);
break;
case constant 2:
கூற்று (s);
break;
.
.
.
.
default:
கூற்று (s);
}
மேற்கண்ட தொடரியலில், கோவைமதிப்பீடு செய்யப்பட்டு, பெறப்பட்ட மதிப்பு ஏதேனும் ஒரு case கூற்றில் கொடுக்கப்பட்ட மாறிலியின் மதிப்புடன் பொருந்தியிருப்பின், அதனுடன் தொடர்புடைய கட்டளைத் தொகுப்பு நிறைவேற்றப்படும். இல்லையெனில் தேர்வுக்கு கீழே உள்ள கூற்றுகள் நிறைவேற்றப்படும். switch கூற்றின் இயங்கு முறை பாய்வுப்படமும் படம் 10.5ல் கொடுக்கப்பட்டுள்ளது.
விதிமுறைகள் :
1. switch கூற்றில் தரப்பட்டுள்ள கோவையின் விடை மாறிலி மதிப்பாக இருத்தல் வேண்டும் இல்லையெனில் அது ஒரு பிழையான வடிவமாகும்.
2. ஒரே மதிப்பு இரண்டு case கூற்றுகளில் அனுமதிக்கப்பட மாட்டாது.
3. default கூற்று கட்டாயமில்லை.
4. switch கூற்றின் நிரல் தொகுதியை நிறைவு செய்ய break கூற்று பயன்படுகிறது. நிரல் பாய்வு break கூற்றை அடையும் போது, switch கூற்றிலிருந்து வெளியேறி, switch கூற்றை தொடர்ந்து கொடுக்கப்பட்டுள்ள நிரல் கூற்றுகளை இயக்கும்.
5. break கூற்று கொடுப்பது கட்டாயமில்லை. break கூற்று கொடுக்கப்படவில்லை எனில், case நிபந்தனை நிறைவேற்றப்படும் நிரல் கூற்றை தொடர்ந்து உள்ள அனைத்து கூற்றுகளும் கட்டுப்பாடின்றி இயங்கும்.
6. பின்னலான Switch கூற்றுகளும் அமைக்கப்படும்.
எடுத்துக்காட்டு 10.6 – switch கூற்றை விளக்கும் C++ நிரல்
#include <iostream>
using namespace std;
int main()
{
int num;
cout << "\n Enter week day number: ";
cin >> num;
switch (num)
{
case 1 : cout << "\n Sunday"; break;
case 2 : cout << "\n Monday"; break;
case 3 : cout << "\n Tuesday"; break;
case 4 : cout << "\n Wednessday"; break;
case 5 : cout << "\n Thursday"; break;
case 6 : cout << "\n Friday"; break;
case 7 : cout << "\n Saturday"; break;
default: cout << "\n Wrong input....";
}
}
வெளியீடு:
Enter week day number: 6
Friday
switch எதிர் if-else : சில வேறுபாடுகள்
"if-else” மற்றும் “switch” ஆகிய இரண்டும் தேர்ந்தெடுப்பு கூற்றுகள். தேர்ந்தெடுப்பு கூற்றுகள், நிபந்தனை சரி அல்லது தவறு என்ற அடிப்படையில், நிரலின் கட்டுப்பாட்டை குறிப்பிட்ட கட்டளைத் தொகுதிக்கு எடுத்துச் செல்கிறது. எனினும், அவை செயல்படும் முறைகளில் சில வேறுபாடுகள் உள்ளன. அவை பின்வருமாறு
if-else மற்றும் Switch கூற்றின் இடையே உள்ள முக்கிய வேறுபாடுகள்
if-else மற்றும் switch கூற்றுகளுக்கிடையான முக்கிய வேறுபாடுகள் :
if-else
• If...else கூற்று, நிபந்தனைக்கூற்றின் அடிப்படையில், if தொகுதியில் கொடுக்கப்பட்ட கூற்றுகளை செயல்படுத்த வேண்டுமா, அல்லது else தொகுதியில் கொடுக்கப்பட்ட கூற்றுகளை செயல்படுத்த வேண்டுமா என்பதை தீர்மானிக்கும்.
• ஒரு if... else கூற்று ஒன்றுக்கும் மேற்பட்ட தேர்ந்தெடுப்புக் கூற்றுகளுக்கு, ஒன்றுக்கும் மேற்பட்ட நிபந்தனைக் கூற்றுகளை பயன்படுத்தும்
• if...else கூற்று, கொடுக்கப்பட்ட நிபந்தனைக்
• கூற்றுகளின் நிகர் நிலையையும், தருக்க நிலையும் சோதிக்கும்
• If கூற்று, முழு எண், எழுத்துரு, மிதப்புப் புள்ளி அல்லது பூலியன் தரவு வகைகளை மதிப்பீட்டுக்கு எடுத்துக்கொள்ளும்.
• கொடுக்கப்பட்ட நிபந்தனையின் முடிவு, பொய் (false) என இருப்பின், else தொகுதியில் கொடுக்கப்பட்ட கூற்றுகள் செயல்படுத்தப்படும்.
switch
• switchல் கொடுக்கப்பட்ட கூற்று, எந்த நிகழ்வை (case) செயல்படுத்த வேண்டும் என்பதை தீர்மானிக்கும்.
• switch கூற்று, ஒன்றுக்கும் மேற்பட்ட தேர்ந்தெடுப்புக் கூற்றுகளுக்கு, ஒற்றை நிபந்தனைக் கூற்றை மட்டுமே பயன்படுத்தும்
• switch கூற்று கொடுக்கப்பட்ட நிபந்தனைகளின் நிகர் நிலையை மட்டுமே சோதிக்கும்
• switch கூற்று எழுத்துரு அல்லது முழு எண் தரவு வகைகளை மட்டுமே மதிப்பீட்டுக்கு எடுத்துக்கொள்ளும்.
• கொடுக்கப்பட்ட நிபந்தனையின் முடிவு, பொய் (false) என இருப்பின், defaultக்குள் கொடுக்கப்பட்ட கூற்றுகள் செயல்படுத்தப்படும்.