பாடம்-5
சி-மொழித் தரவினங்கள்
(Data Types in C)
சி-மொழித் தரவினங்கள்
(Data Types in C)
ஒரு குறிப்பிட்ட பணியைச் செய்து முடிப்பதற்குக் கம்ப்யூட்டரில் புரோகிராம் எழுதுகிறோம். புரேகிராம் என்பது கம்ப்யூட்டருக்குத் தரப்படும் கட்டளைகளின் தொகுப்பாகும். வெறும் கட்டளைகளை வைத்துக் கொண்டு கம்ப்யூட்டரால் எதுவும் செய்ய முடியாது. புரோகிராம் செயல்படுவதற்குத் தேவையான விவரங்களை உள்ளீடாகத் தரவேண்டும். இவ்விவரங்களைத்தான் டேட்டா என்கிறோம். தமிழில் ‘தரவு’ எனலாம்.
ஆக, கம்ப்யூட்டர் புரோகிராம் என்பது ஒரு பணியைச் செய்து முடிப்பதற்கான தீர்வுநெறி (Algorithm), தரவுகள் (Data) - ஆகிய இரண்டையும் உள்ளடக்கியதாகும். சென்ற அத்தியாயத்தில் குறிப்பிட்டுள்ள LEAPYEAR.C என்ற புரோகிராமை எடுத்துக் கொள்ளுங்கள். அது நாம் தரும் ஆண்டினை, லீப் ஆண்டா எனப் பரிசோதித்துச் சொல்லும். நாம் உள்ளீடாகத் தரும் ஆண்டினை டேட்டா என்கிறோம். இத்தகைய தரவுகளை அடித்தளமாகக் கொண்டு, அவற்றைக் கையாளும் கட்டளைகளின் உதவியுடன் சிக்கலான புரோகிராம் மாளிகைகளை எழுப்புகிறோம்.
புரோகிராம்களில் பயன்படுத்தப்படும் ஒவ்வொறு டேட்டாவும் குறிப்பிட்ட இனத்தைச் சேர்த்ததாகவே இருக்கும். LEAPYEAR.C புரோகிராமில்,
int y;
என்று குறிப்பிட்டுள்ளோம். y என்பது ‘இன்டிஜர்’ இனத்தைச் சேர்ந்தது என்பது இதன் பொருள். இதுபோலப், பல்வேறு இனத் தரவுகளைக் கம்ப்யூட்டரில் கையாளுகிறோம்.
ஓர் அலுவலரின் பெயர், வயது, பிறந்த நாள், சம்பளம், திருமணம் ஆனவரா இல்லையா என்ற விவரம் - இவற்றையெல்லாம் புரோகிராமில் எடுத்தாள வேண்டியுள்ளது. இவை முறையே எழுத்துச் சரம் (String), முழுஎண் (Integer), தேதி (Date), பதின்மப் புள்ளி எண் (Real), ஆமில்லை (Logical) போன்ற வெவ்வேறு இன மதிப்புகளாகும். ஒவ்வொரு கம்ப்யூட்டர் மொழியும் தமக்கே உரிய தரவினங்களைக் கொண்டுள்ளன. சி-மொழியில் கையாளப்படும் தரவின வகைகளைப் பார்ப்போம்.
சி-மொழியில் நான்கு அடிப்படைத் தரவினங்கள் (Basic Data Types) உள்ளன. .இவை மூலத் தரவினங்கள் (Primitive Data Types) என்றும் அழைக்கப்படுவதுண்டு. எளிய தரவினங்கள் (Simple Data Types) என்றும் கூறுவர். தரவினம் என்பது ஒரு குறிப்பிட்ட தரவை மட்டுமின்றி அதைப் பயன்படுத்துவது பற்றிய விதிமுறைகளையும் சேர்த்தே குறிக்கிறது. ஒரு தரவினம் குறிப்பிட்ட மதிப்புகளையே (values) ஏற்கும். குறிப்பிட்ட செயல்பாடுகளையே (operations) அதன்மீது நிகழ்த்த முடியும்.
சி-மொழியின் தரவினங்களில் சில உள்-வகைகளும் உள்ளன. மூலத் தரவினங்களின் அடிப்படையில் உருவாக்கப்படும் தருவிக்கப்பட்ட தரவினங்களும் (Derived Data Types) சி-மொழியில் கையாளப்படுகின்றன.
மூலத் தரவினங்கள் (Basic Data Types)
சி-மொழியின் அடிப்படை அல்லது மூலத் தரவினங்கள்:
1. char
2. int
3. float
4. double
2. int
3. float
4. double
char என்பது ஒற்றை எழுத்து, எண் அல்லது சிறப்புக் குறியைக் (special character) குறிக்கிறது. int என்பது முழு எண்களையும் float என்பது மெய்யெண் (Real Number) எனப்படும் புள்ளி எண்களையும் double என்பது துல்லியப் புள்ளி எண்களையும் குறிக்கின்றன. ஒன்றுக்கு மேற்பட்ட எழுத்துகள் அடங்கிய சரத்தைக் (String) குறிக்கத் தனியான தரவினம் சி-மொழியில் கிடையாது. அதே வேளையில், எண்வகை இனம் int, float, double என்ற மூன்று தனித்தனி தரவினங்களாக அமைந்துள்ளன.
இந்த நான்கு மூலத் தரவினங்களையும் அடிப்படையாகக் கொண்டு அர்ரே, ஸ்ட்ரக்சர், யூனியன், ஈநம், பாயின்டர் என்னும் தருவிக்கப்பட்ட தரவினங்களும் (Derived Data Types) கையாளப்படுகின்றன. இவற்றைப்பற்றி பின்வரும் அத்தியாயங்களில் விரிவாகப் படிப்போம். சி-மொழியில் ஸ்டிரிங் தரவினம் இல்லை. ஸ்டிரிங்குகளைக் கையாள கேரக்டர் அர்ரேக்கள் பயன்படுத்தப்படுகின்றன. சி-மொழியில் தேதிக்கென்று தனி இனம் கிடையாது. அதேபோல் சரி/தவறு (True/Flase) என்ற லாஜிக்கல் இனமும் கிடையாது. ஜீரோ என்கிற எண் மதிப்பு False என்பதற்கும், ஒன்று அல்லது ஏதேனும் ஒரு நிறை எண் (Positive number) True என்ற நிலைக்கும் பயன்படுத்தப்படுவது சி-மொழியின் சிறப்புக் கூறாகும்.
உள்-வகைகள்
நான்கு மூலத் தரவினங்களும், அவை ஏற்கும் மதிப்பெல்லைகளை அடிப்படையாகக் கொண்டு, பல்வேறு உட்பிரிவுகளாகப் பிரிக்கப்படுகின்றன: int இனம் மூன்று வகையாக எடுத்தாளப்படுகிறது.
1. short int
2. int
3. long int
2. int
3. long int
மேற்கண்ட மூன்று இனங்களும் நினைவகத்தில் எடுத்துக் கொள்ளும் இடம் (பைட் எண்ணிக்கை) கம்ப்யூட்டரைப் பொறுத்து மாறுபடுகின்றது. அதாவது பீசி, மினி, மெயின் ஃபிரேம்களில் இந்த அளவுகள் மாறுபடலாம். ஆனால் short int என்பது int-ஐவிட அதிக பைட்டுகளை எடுத்துக் கொள்ள முடியாது. சில கம்ப்யூட்டர்களில் short int நினைவகத்தில் எடுத்துக் கொள்ளும் பைட்டு எண்ணிக்கை int எடுத்துக் கொள்வதில் பாதியாக இருக்கலாம். அதேபோல் long int என்பது int அளவைப்போல் இரு மடங்கு இருக்கும். எல்லா கம்ப்யூட்டரிலும் அப்படி இருக்கும் என்று சொல்ல முடியாது. ஆனால் int என்பது long int-ஐவிட அதிக அளவுடையதாக இருக்க முடியாது.
புரோகிராம்களில் தரவினங்களைக் குறிப்பிடுகையில் short int என்பதை வெறுமனே short எனவும், long int என்பதை long எனவும் குறிப்பிட்டால் போதும். டர்போ-சி கம்ப்பைலரைப் பொறுத்தவரை short int என்பதும் int என்பதும் ஒன்றுதான். long int என்பது int -ஐவிட இரு மடங்கு பைட்டு அளவுடையது.
பதின்மப் புள்ளி எண்களைப் பொறுத்தவரை double இனம் float இனத்தைவிட இரு மடங்கு பைட்டுகளை நினைவகத்தில் எடுத்துக் கொள்ளும். இதுவும் கம்ப்யூட்டர் சார்ந்த (Machine Dependent) அளவீடுதான். double இனம் long float எனவும் வரையறுக்கப்படும். அன்சி-சி, long double என்னும் ஒரு புதிய உள்-வகைக்கு வழியமைத்துக் கொடுத்துள்ளது. இது double இனத்தைவிட அதிக அளவு இடத்தை எடுத்துக் கொள்ளும்.
சி-மொழியில் char, int ஆகிய தரவு இனங்களை signed, unsigned ஆகிய பண்புகளினால் வேறுபடுத்திக் காட்ட முடியும். தரவு இனங்களை அறிவிக்கும்போது signed char, unsigned char எனவும் signed int, unsigned int எனவும் signed long, unsigned long எனவும் அறிவிக்க முடியும். signed இனம் நெகட்டிவ், பாஸிட்டிவ் ஆகிய இரு மதிப்புகளையும் ஏற்கும். unsigned இனம் பாஸிட்டிவ் மதிப்புகளை மட்டுமே ஏற்கும். இதன் காரணமாய் unsigned இனம் ஏற்கும் உச்சமதிப்பு signed இனத்தின் உச்சமதிப்பைவிட இருமடங்கு இருக்கும்.
short, long, signed, unsigned ஆகியவை தனித் தரவினங்களாகக் கருதப்படுவது இல்லை. இச்சொற்கள் பண்பேற்றிகள் (Qualifiers அல்லது Modifiers) என்று அழைக்கப்படுகின்றன. எனவேதான் இத்தகைய அடைமொழி பெற்ற தரவினங்களை ‘உள்-வகை’ எனக் குறிப்பிட்டுள்ளோம். தரவின அறிவிப்பில் வெறுமனே char, int, long எனக் குறிப்பிட்டால் signed char, signed int, signed long ஆகிய இனங்களையே குறிக்கும்.
தரவு இனம், மதிப்பெல்லை, நினைவக அளவு
இதுவரை நாம் பார்த்த தரவினங்கள் மற்றும் அவற்றின் உள்-வகைகள் ஏற்கும் மதிப்புகளின் எல்லைகளையும், இவ்வினங்கள் நினைவகத்தில் எடுத்துக் கொள்ளும் பைட் அளவுகளையும் கீழே உள்ள பட்டியலில் காண்க:
தரவு இனம் | மதிப்பின் எல்லை | நினைவக அளவு (பைட்டில்) |
signed char | -128 to +127 | 1 |
char | -128 to +127 | 1 |
unsigned char | 0 to 255 | 1 |
signed short int | -32768 to +32767 | 2 |
short int | -32768 to +32767 | 2 |
unsigned short int | 0 to 65535 | 2 |
signed int | -32768 to +32767 | 2 |
int | -32768 to +32767 | 2 |
unsigned int | 0 to 65535 | 2 |
signed long int | -2147483648 to +2147483647 | 4 |
long int | -2147483648 to +2147483647 | 4 |
unsigned long int | 0 to 4294967295 | 4 |
float | .4 x 10-38 to 3.4 x 1038 | 4 |
long float | .7 x 10-308 to 1.7 x 10308 | 8 |
double | .7 x 10-308 to 1.7 x 10308 | 8 |
long double | .7 x 10-4932 to 1.7 x 104932 | 10 |
பட்டியலின் இறுதியில் குறிப்பிட்டுள்ள நினைவக அளவு கம்ப்யூட்டருக்குக் கம்ப்யூட்டர் வேறுபடலாம். சில கம்ப்பைலர்கள் char என அறிவிக்கப்படும் தரவினத்தை எப்போதும் unsigned char இனமாகவே கருதிக்கொள்ளும். அதாவது char என்பது 0 முதல் 255 வரையிலான மதிப்புகளையே எடுத்துக்கொள்ளும். நெகட்டிவ் மதிப்புகளை ஏற்காது. எனவே char இனத்தைக் கம்ப்பைலருக்கு ஏற்பப் பயன்படுத்த வேண்டும் என்பதை மனதில் கொள்க.
int என அறிவிக்கப்பட்ட மாறியில் 36767-ஐவிடப் பெரிய எண்ணை இருத்தி வைக்க முடியாது. எடுத்துக்காட்டாக 200 x 200 என்ற பெருக்குத் தொகையின் விடையை ஓர் int மாறியில் இருத்த முடியாது. உங்கள் புரோகிராமில்,
int n;
n = 200 * 200;
n = 200 * 200;
என்று, கட்டளைகள் அமைந்துள்ளதாக வைத்துக் கொள்வோம். புரோகிராமைக் கம்ப்பைல் செய்யும்போது, கம்ப்பைலர் பிழை எதுவும் சுட்டாது. புரோகிராமைச் செயல்படுத்தும்போது இயக்கநேரப் பிழை (Run Time Error) எதுவும் நிகழாது. ஆனால், புரோகிராம் தவாறான விடையைக் காட்டும். n என்னும் மாறியில் 40000 என்னும் மதிப்பு இருக்காது. இதுபோன்ற தருணங்களில் n என்னும் மாறியை long என அறிவித்துக் கொள்ள வேண்டும். உங்கள் புரோகிராம்களில் கணக்கீடுகளை மேற்கொள்ளும்போது தரவினங்களின் மதிப்பெல்லைகளை நினைவில் வைத்துக் கொள்வது முக்கியம்.
[பாடம்-5 முற்றும்]
பாடம்-6
சி-மொழியில் மாறிகள்
(Variables in C)
சி-மொழியில் மாறிகள்
(Variables in C)
கம்ப்யூட்டர் மொழிகளில் டேட்டாவை இரண்டு வகையாகக் கையாள முடியும்:
1. மாறிகள் (variables)
2. மாறிலிகள் (constants)
2. மாறிலிகள் (constants)
ஒரு புரோகிராம் செயல்படுத்தப்படும்போது, மதிப்பு மாறக்கூடிய வாய்ப்பிருக்கும் டேட்டா, மாறி (variables) எனப்படுகிறது. LEAPYEAR.C புரோகிராமை எடுத்துக் கொள்வோம். அதில் y-ன் மதிப்பு ஒவ்வொரு முறை புரோகிராம் இயக்கப்படும்போதும், நமது உள்ளீட்டுக்கு ஏற்ப மாறுகின்றது. எனவே, இதனை மாறி என்கிறோம். மாறிலி (constants) என்பது மாறா மதிப்பைக் கொண்டது. மாறிலி அறிவிக்கப்படும்போது அதில் இருத்தப்படும் மதிப்புப் புரோகிராமில் பின் எப்போதும் மாற்றப்பட முடியாதது. முதலில் மாறிகள் பற்றிக் காண்போம்.
நாம் பார்த்த நான்கு தரவு இனங்களில் மட்டும் இன்றி, அவற்றின் உள்-வகைகளிலும், தருவிக்கப்பட்ட தரவு இனங்களான அர்ரே, ஸ்ட்ரக்சர், யூனியன், ஈநம், பாயின்டர் ஆகிய தரவு இனங்களிலும் மாறிகள் அறிவிக்கப்பட்டுக் கையாளப்படுகின்றன. சி-மொழியில் லாஜிக்கல் (அல்லது பூலியன்) மாறிகள், ஸ்டிரிங் மாறிகள் கிடையாது என்பதை மனதில் இருத்துங்கள்.
மாறிகளைப் புரோகிராம்களில் எடுத்தாள்வதற்குப் பல்வேறு வழிமுறைகளும் விதிமுறைகளும் வரையறுக்கப்பட்டுள்ளன. அவற்றை எடுத்துக்காட்டுகளுடன் விரிவாகக் காண்போம்.
மாறிகளின் பெயர்கள்
புரோகிராமில் பயன்படுத்தப்படும் டேட்டா கம்ப்யூட்டரின் நினைவகத்தில் பதிந்து வைக்கப்பட்டு எடுத்தாளப்படுகின்றது. தேவையானபோது எடுத்தாள அதற்கு ஒரு பெயர் இருக்க வேண்டும். எனவே, புரோகிராமில் பயன்படுத்தப்படும் டேட்டாவுக்குப் பொருத்தமான ஒரு பெயரைச் சூட்டுகிறோம். அதாவது, டேட்டாவை நினைவகத்தில் பதிந்து வைக்க ஓர் இடத்தை ஒதுக்கீடு செய்து, அந்த இடத்துக்கு ஒரு பெயர் (Label) சூட்டுகிறோம். அப்பெயரையே மாறி (variable) என்கிறோம்.
மாறிகளின் பெயர்கள் எப்படி அமைய வேண்டும் என்பதற்கான விதிமுறைகள்:
(1) மாறிகளின் பெயர்கள் அதிக அளவாக எட்டு எழுத்துகள் இருக்கலாம். ஆனால் புதிய கம்ப்பைலர்கள் 16 அல்லது அதற்கு மேற்பட்ட எழுத்துகளையும் ஒத்துக் கொள்கின்றன. அதிக அளவாக 31 எழுத்துகளை அடையளம் காண முடியும் என அன்சி-சி வரையறுத்துள்ளது.
(2) மாறிகளின் பெயர்கள் எண்ணாகவோ, எண்ணில் தொடங்குமாறோ இருக்கக் கூடாது.
(3) மாறிகளின் பெயரில் இடவெளி (space) இடம்பெறக் கூடாது.
(4) அண்டர் ஸ்கோர் தவிர பிற சிறப்புக் குறிகள் இடம்பெறக் கூடாது.
(5) மாறிகளின் பெயர்களாக சி-மொழியின் சிறப்புச் சொற்களைப் (Reserved Words) பயன்படுத்தக்கூடாது.
மாறிகளின் சரியான பெயர்களுக்கு எடுத்துக்காட்டுகள்:
1. a, b, c, ab, xyz, A, Bc,aBC
2. a1, B2, C2c, x1y2z3
3. name, age, pay, area, redius
4. SUM, Sum, sum, average, dBASE
5. a_1, file_2, basic_pay, data_of_birth
6. lotus123, art312C, sys5ver6
2. a1, B2, C2c, x1y2z3
3. name, age, pay, area, redius
4. SUM, Sum, sum, average, dBASE
5. a_1, file_2, basic_pay, data_of_birth
6. lotus123, art312C, sys5ver6
மாறிகளுக்கு எப்போதுமே பொருத்தமான பெயர்களைச் சூட்ட வேண்டும். வெறுமனே ஒற்றை எழுத்துகளை மட்டுமே மாறிகளின் பெயர்களாக அறிவிப்பது சிறந்த முறை ஆகாது. ஒரு பணியாளரின் பெயர், வயது, சம்பளம் போன்றவற்றைக் கையாள முறையே a, b, c எனக் குறிப்பிடக் கூடாது. பொருத்தமாக name, age, salary எனப் பெயரிடலாம். total amount, rate of interest என இரண்டு மூன்று சொற்களில் மாறிகளின் பெயர்களை அமைக்க விரும்பினால் சொற்களுக்கு இடையே அண்டர் ஸ்கோர் பயன்படுத்தி, total_amount, rate_of_interest என மாறிகளின் பெயர்களை அறிவிக்க வேண்டும். மாறிகளின் பெயர்கள் எப்போதும் சிறிய எழுத்தில் இருப்பதே மரபு.
மாறிகளின் தவறான பெயர்களுக்கு எடுத்துக்காட்டுகள்:
(1) 2, 32, 123 - எண்களாக இருக்கக் கூடாது
(2) 2A, 4BCD, 5digit - எண்ணில் தொடங்கக் கூடாது
(3) basic pay, date of birth - இடவெளி கூடாது
(4) yes/no, bill.amt, month-total - சிறப்புக் குறிகள் கூடாது
(5) int, char, float - சிறப்புச் சொற்கள் கூடாது
(6) while, do, else, return - கட்டளைச் சொற்கள் கூடாது
(2) 2A, 4BCD, 5digit - எண்ணில் தொடங்கக் கூடாது
(3) basic pay, date of birth - இடவெளி கூடாது
(4) yes/no, bill.amt, month-total - சிறப்புக் குறிகள் கூடாது
(5) int, char, float - சிறப்புச் சொற்கள் கூடாது
(6) while, do, else, return - கட்டளைச் சொற்கள் கூடாது
மாறிகளை அறிவித்தல்
புரோகிராம்களில் மாறிகளை அறிவிக்கும் முறைக்குச் சில எடுத்துக்காட்டுகளைப் பார்ப்போம்.
char ch;
int age;
long salary;
float radius;
double area;
int age;
long salary;
float radius;
double area;
ஒரே இனத்தில் ஒன்றுக்கு மேற்பட்ட மாறிகளையும் அறிவிக்க முடியும்.
int i, j, k;
float radius, area;
float radius, area;
ஒரே இனமாக இருந்த போதிலும் வேறுவேறு பயன்பாடுகளுக்கான மாறிகளைத் தனித்தனி வரிகளில் அறிவிப்பது மரபாகும்.
int i, j;
int length, breadth;
int length, breadth;
அறிவிப்பும் வரையறுப்பும் (Declaration & Definition)
ஒரு மாறி, மதிப்பை ஏற்ற பிறகே ‘இனிஷியலைஸ்’ செய்யப்பட்டதாகக் கொள்ளப்படும். இனிஷியலைஸ் செய்யப்பட்ட பிறகே அந்த மாறி வரையறுக்கப்பட்டதாகக் (defined) கருதப்படும். இனிஷியலைஸ் செய்யப்படாத மாறியை எக்ஸ்பிரஷன்களில் பயன்படுத்தினால் கம்ப்பைலர் எச்சரிக்கை செய்யும்.
ஒரு மாறியை இரண்டு வழிகளில் இனிஷியலைஸ் செய்யலாம். மாறியை அறிவித்த பிறகு புரோகிராமின் வேறோர் இடத்தில் அதில் மதிப்பை இருத்துவது ஒரு முறை. அறிவிக்கும்போதே அதில் தொடக்க மதிப்பை இருத்துவது இன்னொரு முறை.
int a;
...........
a = 5;
...........
a = 5;
என்று மதிப்பிருத்தலாம்.
int sum = 0;
int a = 100;
char ch = ‘A’;
int a = 100;
char ch = ‘A’;
என்றும் மாறிகளை வரையறுக்கலாம். ஒரே அறிவிப்பில் ஒன்றுக்கு மேற்பட்ட மாறிகளை அறிவிக்கும்போது, சிலவற்றை மட்டும் இனிஷியலைஸ் செய்யலாம்.
int m, n, sum = 0;
int start = 1, end, step = 5, sum;
int start = 1, end, step = 5, sum;
என்றெல்லாம் அறிவிக்க முடியும். மிகவும் கறாராகக் கூறுவது எனில்,
int m;
என்று மாறியை மட்டும் மதிப்பிருத்தாமல் குறிப்பிடுவது ‘அறிவிப்பு’ (Declaration) எனப்படும்.
int m = 5;
என்றோ,
int m;
m = 5;
m = 5;
என்றோ மாறியை இனிஷியலைஸ் செய்வது ‘வரையறுப்பு’ (Definition) எனப்படும். எந்தவொரு மதிப்பையும் ஏற்காமல் அறிவிப்பு நிலையிலேயே இருக்கும் மாறி வரையறுக்கப்படாத மாறி எனப்படுகிறது.
சி-மொழிப் புரோகிராமில் பெரும்பாலும் மாறிகள் புரோகிராமின் அல்லது ஒரு ஃபங்ஷனின் தொடக்கத்திலேயே அறிவிக்கப்படுகின்றன. மிக அரிதாக ஒரு பிளாக்குக்குள் மாறிகள் அறிவிக்கப்படுவதுண்டு. { } என்னும் இரட்டை அடைப்புக் குறிகளுக்குள் அமையும் கட்டளைத் தொகுதி சி-மொழியில் பிளாக் எனப்படுகிறது இதைப்பற்றி பின்னர் விரிவாக படிப்போம்.
main() அல்லது வேறு ஃபங்ஷனில் அல்லது பிளாக்கில் மாறிகளின் அறிவிப்புக்கு முன்பாக printf(), scanf() ஃபங்ஷன்களோ அல்லது வேறெந்தக் கட்டளையுமோ இடம்பெறக் கூடாது. இன்னொரு கோணத்தில் சொல்வதெனில், சி-மொழிப் புரோகிராமில் மாறிகளை இடையிடையே நினைத்த இடத்தில் அறிவித்துக் கொள்ள முடியாது. மேலேயுள்ள புரோகிராமை நன்றாகக் கூர்ந்து கவனியுங்கள். radius, pai, area ஆகிய மாறிகள்/மாறிலிகள் தொடக்கத்திலேயே அறிவிக்கப்பட்டுள்ளன.
printf(“\nEnter redius:”);
scanf(“%d, &redius);
float area;
area = pai * redius * redius;
scanf(“%d, &redius);
float area;
area = pai * redius * redius;
என்று கட்டளைகள் அமைத்தால் புரோகிராம் கம்ப்பைல் ஆகாது.
ஒரு ஃபங்ஷனுக்குள் அல்லது ஒரு பிளாக்கினுள் ஒரே பெயரில் இரண்டு மாறிகள் இருக்க முடியாது. அதாவது ஒருமுறை அறிவித்த மாறியை மீண்டும் அறிவிக்க முடியாது. அதாவது, ஏற்கெனவே அறிவிக்கப்பட்ட ஒரு மாறியின் பெயரில் வேறொரு மாறியை அறிவிக்க முடியாது. வெவ்வேறு ஃபங்ஷன்களில் அல்லது வெவ்வேறு பிளாக்குகளில் ஒரே பெயரில் வெவ்வேறு மாறிகளைப் பயன்படுத்த முடியும்.
மாறிகளை அறிவிக்கும் விதம் தொடர்பாக, மனதில் பதிய வைக்க வேண்டிய விவரங்களைத் தொகுத்துக் காண்போம்:
(1) மாறிகள் புரோகிராம், ஃபங்ஷன் அல்லது பிளாக்கின் தொடக்கத்திலேயே அறிவிக்கப்பட வேண்டும்.
(2) மாறிகளின் இனத்தை முன்கூட்டியே தெரிவித்துவிட வேண்டும். இனம் சுட்டாத மாறி இருக்க முடியாது. வேறுசில மொழிகளில் இருப்பதுபோல் முதலில் மாறியை அறிவித்துவிட்டுப் பிறகு இனத்தைத் தீர்மானிக்க சி-மொழியில் அனுமதி இல்லை.
(3) ஒரு ஃபங்ஷனுக்குள் அல்லது ஒரு பிளாக்கினுள் ஒரே பெயரில் இரண்டு மாறிகள் இருக்க முடியாது.
(4) ஓர் இன மாறியில் வேறு இன மதிப்பை இருத்த முடியாது. (int மாறி என அறிவித்து விட்டால், அதில் float மதிப்பை இருத்தி வைக்க முடியாது). இனமாற்றம் செய்து இருத்தலாம். இனமாற்றம் பற்றிப் பிறகு படிப்போம்.
(5) ஒரு மாறியை அறிவிக்கும்போதே அதில் தொடக்க மதிப்பையும் இருத்த முடியும்.
(6) ஒரே இனமுள்ள பல மாறிகளை ஒரே வரியில் முன்னறிவிக்கலாம். இரண்டு மாறிகளுக்கிடையே காற்புள்ளி இடவேண்டும்.
(7) மதிப்பு இருத்தப்பட்ட மாறி இனிஷியலைஸ் செய்யப்பட்ட மாறி எனப்படும். இனிஷியலைஸ் செய்யப்பட்ட மாறி வரையறுக்கப்பட்ட மாறி ஆகிறது.
(8) வரையறுக்கப்படாத அதாவது இனிஷியலைஸ் செய்யப்படாத (மதிப்பு இருத்தப்படாத) மாறிகளை எக்ஸ்பிரஷன்களில் பயன்படுத்தக் கூடாது.
[பாடம்-6 முற்றும்]
பாடம்-7
சி-மொழியில் மாறிலிகள்
(Constants in C)
சி-மொழியில் மாறிலிகள்
(Constants in C)
ஒரு புரோகிராமில் எப்போதுமே மாற்றப்படும் சாத்தியக்கூறு இல்லாத ஒரு டேட்டாவை மாறிலி (Constant) என்கிறோம். சி-மொழியில் இரண்டு வகையாக மாறிலிகள் செயல்படுத்தப்படுகின்றன. (1) #define பதிலீடுகள் மூலமாக. இத்தகைய மாறிலிகள் ‘குறியீட்டு மாறிலிகள்’ (Symbolic Constants) என்று அழைக்கப்படுகின்றன. (2) const என்னும் பண்பேற்றி (Qualifier) மூலமாக. இத்தகைய மாறிலிகள் ‘பண்பேற்றிய மாறிகள்’ (Qualified Variables) எனப்படுகின்றன. இவ்விரண்டு வகைகளையும் எடுத்துக் காட்டுகளுடன் பார்ப்போம்.
நேரடி மதிப்பு
புரோகிராமில் எப்படிப்பட்ட இடங்களில் மாறிலியைப் பயன்படுத்த முடியும் என்பதற்கு ஒரு சரியான எடுத்துக்காட்டைப் பார்ப்போம். பயனாளரிடம் இருந்து ஆர அளவை (radius) பெற்று வட்டத்தின் பரப்பளவைத் திரையிடும் புரோகிராமைப் பாருங்கள்:
/* Program No. */
/* AREA1.C */
#include <stdio.h>
main()
{
int radius;
float area;
printf(“\nEnter radius: “);
scanf(“%d”, &radius);
area = 3.14 * radius * radius;
printf(“Area of the circle is %f”, area);
}
/* AREA1.C */
#include <stdio.h>
main()
{
int radius;
float area;
printf(“\nEnter radius: “);
scanf(“%d”, &radius);
area = 3.14 * radius * radius;
printf(“Area of the circle is %f”, area);
}
இந்தப் புரோகிராமில் பரப்பளவைக் காணும் கட்டளையில் 3.14 என்னும் மதிப்பை நேரடியாகப் பயன்படுத்தி உள்ளோம். இந்தப் புரோகிராமை எத்தனை முறை இயக்கினாலும், ஆர அளவை எப்படிக் கொடுத்தாலும் 3.14 என்னும் மதிப்பு மாறப்போவதில்லை. ஒரே புரோகிராமில் வெவ்வேறு இடங்களில் வட்டத்தின் பரப்பளவை காணவேண்டி இருந்தாலும் இதே 3.14 மதிப்பைத்தான் பயன்படுத்த வேண்டியிருக்கும்.
3.14 என்பது இந்தப் புரோகிராமில் மட்டும் அல்ல உலகிற்கே ஒரு பொதுவான எண் அல்லவா? இப்படிப்பட்ட உலகப் பொதுவான எண்களை மட்டும் அல்ல உங்கள் புரோகிராமிற்கு மட்டும் பொதுவான (மதிப்பு மாறாத) எண்களைக்கூட இப்படி நேரடியாகக் கணக்கீடுகளில் பயன்படுத்தக் கூடாது. இந்தப் புரோகிராமைப் படிப்பவர்களுக்கு 3.14 என்ற எண்ணின் முக்கியத்துவம் புலப்படாமலே போகும். புரோகிராமை எழுதியவர்க்கே, பல நேரங்களில், எக்ஸ்பிரஷன்களில் காணப்படும் இதுபோன்ற எண்கள் புதிர் எண்களாகத் தோன்றும். மொழி வல்லுநர்கள் இத்தகைய எண்களை ‘மேஜிக் எண்கள்’ எனக் கிண்டலாகக் குறிப்பிடுவர். புரோகிராமுக்குப் பொதுவான இப்படிப்பட்ட மாறா மதிப்புகளை நேரடியாகப் பயன்படுத்தக்கூடாது என்பது அவர்களின் கருத்து. அவற்றை ஒரு மாறிலி வழியாகவே பயன்படுத்த வேண்டும். எப்படி எனப் பார்ப்போம்.
குறியீட்டு மாறிலி
சி-மொழியில் குறியீட்டு மாறிலிகளை வரையறுக்க, #define என்னும் கட்டளைச் சொல் பயன்படுத்தப்படுகிறது. புரோகிராமின் தொடக்கத்தில்,
#define PAI 3.14
என்று அறிவித்து விட்டுப் புரோகிராமின் உள்ளே,
area = PAI * radius * radius;
என்று பரப்பளவைக் கணக்கிட வேண்டும். கீழே உள்ள புரோகிராமை நோக்குங்கள்:
/* Program No. */
/* AREA2.C */
#include <stdio.h>
#define PAI 3.14
main()
{
int radius;
float area;
printf(“\nEnter radius: “);
scanf(“%d”, &radius);
area = PAI * radius * radius;
printf(“Area of the circle is %f”, area);
/* AREA2.C */
#include <stdio.h>
#define PAI 3.14
main()
{
int radius;
float area;
printf(“\nEnter radius: “);
scanf(“%d”, &radius);
area = PAI * radius * radius;
printf(“Area of the circle is %f”, area);