நிரலாக்க மொழிகள் முதன்முதலில் உருவாக்கப்பட்ட காலந்தொட்டு, என்கணித செயல்பாடுகளுக்கு (Arithmetic Operations) உண்டான முக்கியத்துவம் அப்படியேதான் இருக்கிறது. அவற்றை மேற்கொள்வதற்கான இயக்கிகளை(Operators) எல்லா நிரலாக்க மொழிகளும் வழங்குகின்றன. பைத்தான் மட்டும் சும்மாவா என்ன?
பின்வருபவை பைத்தானின் என்கணித இயக்கிகள்:
+, -, *, /, //, %, **
மேலே குறிப்பிடப்பட்டிருக்கும் முதலிரண்டு இயக்கிகள் குறித்து உங்களுக்குக் குழப்பமேதும் இருக்காது என்பதால் நேரடியாகவே உதாரணங்களைப் பார்த்து விடுவோம்.
>>>10+15
25
>>>-10-3
-13
>>>a=23
>>>b=14
>>>a+b
37
>>>a-b
9
பள்ளிகளில் நமக்குக் கற்பித்த ‘x’ (பெருக்கல் குறி) பைத்தானுக்கு பொருந்தாது. பெருக்கல் செயல்பாட்டினை குறிக்க ‘*’ (ஸ்டார் குறி) என்ற இயக்கிதான் நிரல்களில் பயன்படுத்தப்பட வேண்டும்.
>>25*76
1900
>>>x=-27
>>>y=0
>>>x*y
0
வகுத்தல் செயல்பாட்டுக்கு என்று இரண்டுவிதமான இயக்கிகளை பைத்தான் வழங்குகிறது. முதலாவது /(வகுத்தல்). ஒரு எண்ணை இன்னொன்றிலிருந்து வகுக்கப் பயன்படுகிறது. இந்த இயக்கி தரும் முடிவுகள் எப்பொழுதுமே float தரவு வகையைச் சார்ந்ததாக மட்டும் தான் இருக்கும்(நேர்காணல்களில் அடிக்கடி கேட்கப்படும் கேள்வி (நே.அ.கே.கே)). வகுத்தலுக்காக நீங்கள் தேர்ந்தெடுக்கப்படும் எண்கள்(தொகுதி, பகுதி) எந்த தரவு வகையை சார்ந்ததாக இருந்தாலும் சரி, / இயக்கி தரும் முடிவு floatஆகத் தான் இருக்கும். உதாரணத்துக்கு,
>>> m=26
>>> n=5
>>> m/n
5.2
>>> m=35
>>> n=7.2
>>> m/n
4.861111111111111
>>> m=28.2
>>> n=4.5
>>> m/n
6.266666666666667
வகுத்தல் செயல்பாட்டுக்கு என்று இருக்கும் மற்றொரு இயக்கி ‘//’ (floor division). ‘/’ மற்றும் ‘//’ இடையேயான வேறுபாடு என்ன? (நே.அ.கே.கே)
‘//’ இயக்கியைத் தரை வகுத்தல் என்று குறிப்பிடலாம். ‘/’ மற்றும் ‘//’ ஆகிய இரண்டுமே வகுத்தல் செயல்பாட்டில் பெறப்படும் ஈவை (Quotient) குறிப்பதற்காகப் பயன்படுபவைதான். அவை தரும் முடிவுகள் என்ன மாதிரியான தரவு வகையாக இருக்கிறது என்பதை வைத்துத் தான் வேறுபடுத்திப் பார்க்க முடியும்.
‘//’ இயக்கி வகுத்தலுக்குப் பிறகு கிடைக்கும் மதிப்பை முழு எண்ணாக(integer) மட்டுமே பயனருக்குத் தரும். ஒருவேளை பின்னத்தின் பகுதியோ, தொகுதியோ floatஆக இருக்கும் பட்சத்தில், முடிவும் floatல் இருக்கும். ஆனால் தசம புள்ளியைத் தொடர்ந்து கட்டாயம் பூஜ்ஜியம் மட்டுமே இடம்பெற்றிருக்கும்.
மண்டை மேல் நண்டு ஊறுகிறது என்பவர்களுக்காக,
1. ‘/’ தரும் முடிவுகள் floatல் மட்டுமே இருக்கும்.
தொகுதி, பகுதியின் தரவு வகைகள் குறித்தெல்லாம் கவலைப்படத் தேவையில்லை.
2. ‘//’ தரும் முடிவுகள் integerஆக மட்டுமே இருக்கும். ஆனால் ‘//’இல், பின்னத்தின் தொகுதி, பகுதியின் தரவு வகைகள் குறித்து கருத்தில் கொள்வது அவசியம். ஒருவேளை அவற்றில் ஏதாவதொன்று, அல்லது இரண்டுமே floatஆக இருக்கும் பட்சத்தில், கிடைக்கபெறும் மதிப்பும் floatஇல் இருக்கும். ஆனால், தசம புள்ளியைத் தொடர்ந்து வரவேண்டிய எண்களுக்குப் பதிலாகப் பூஜ்ஜியம் இடம்பெற்றிருக்கும்.
‘//’ (தரை வகுத்தல்) என்பது அருகிலிருக்கும் முழு எண்ணுக்கு மதிப்பைக் குறைக்கும் வேலையைப் பார்க்கிறது.
மேலே வகுத்தலுக்குப் பார்த்த அதே உதாரணத்தைக் காண்போம்.
>>> m=26
>>> n=5
>>> m//n
5
>>> m=35
>>> n=7.2
>>> m//n
4.0
>>> m=28.2
>>> n=4.5
>>> m//n
6.0
வகுத்தல் செயல்பாட்டில் ஈவை மட்டுமே பார்த்துக்கொண்டிருந்தால் எப்படி? மீதியை (reminder) எப்படி நிரலில் சேமிப்பது? அதற்குத்தானே இருக்கிறார் நமது ‘%’ (modulus) . வழக்கமாக இந்த சின்னம் சதவீதத்தைக் குறிக்கும், ஆனால் பைத்தானுக்கு இது பொருந்தாது. மாறாக வகுத்தலில் பெறப்படும் மீதியைச் சேமிக்க ‘%’ பயன்படுகிறது.
>>> p=27
>>> q=5
>>> p%q
2
>>> s=36
>>> t=7
>>> s%t
1
>>> a=35.8
>>> b=3
>>> a%b
2.799999999999997
இப்போது விளையாடுவதற்கான நேரம் அல்லது வீட்டுப்பாடம். பின்வருபவனற்றை ஊடாடும் முறையில் எழுதி அதன் திரை சொட்டை எனக்கு(9789855667) வாட்சப்பில் அனுப்புங்கள். முடிவுகள் ஏன் அப்படி வெளியாகின்றன என்ற காரணத்தையும் சேர்த்து எழுதுபவர்களுக்கு கடந்த காலங்களில் கம்பெனி என்ன செய்ததோ அதையே திருப்பி செய்யும்.
>>> 2/0
>>> 2//0
>>> 2%3
>>> 1000%10000
நிறைவாக அடுக்குக்குறி ‘**’ (power). இயக்கி.
>>> 2**3
8
>>> 2**3.0
8.0
>>> 1**0
1
>>> 5**0
1
என்கணித செயல்பாடுகளுக்கென்று பயன்படுத்தப்படும் இயக்கிகளில் எவையெல்லாம் intergerல் முடிவுகளைத் தருகிறது? எவையெல்லாம் floatல் என்று தொகுத்து நினைவில் நிறுத்திக்கொள்வது ஒரு நல்ல பயிற்சி.
சரி, இப்போது ஒரு எளிமையான கால்குலேட்டருக்கு நிரல் எழுதுவோமா?
வெளியீடு:
000
நிரலாளராக நீங்கள் ஒரு முடிவை எடுக்க வேண்டும், இரண்டு மதிப்புகளை ஒப்பிட்டு அவற்றில் பெரியது, சிறியது எது எனக் கண்டறிய வேண்டிய நிர்ப்பந்தம். என்ன செய்யலாம்? இந்த காட்சியில் தான் தொடர்பு நிலை இயக்கிகள்(Relational Operators) அறிமுகமாகின்றன.
பின்வருபவை பைத்தான் தரும் தொடர்பு நிலை இயக்கிகள்:
<, >, <=, >=, ==, !=
ஒப்பீட்டளவில் இதன் அறிமுகம் கொஞ்சம் எளிமையானது. இதன் முடிவுகள் எப்பொழுதுமே Booleanஆக மட்டுமே இருக்கும், அதாவது True அல்லது False.
‘<’ – முதல் மதிப்பு இரண்டாவதை விடச் சிறிதானதாக இருந்தால் True இல்லையென்றால் False.
‘>’ – முதல் மதிப்பு இரண்டாவதை விடப் பெரிதானதாக இருந்தால் True இல்லையென்றால் False.
>>> c=9
>>> d=8
>>> c<d
False
>>> d<c
True
‘<=’ – முதல் மதிப்பு இரண்டாவதை விடச் சிறிதான ஒன்றாகவோ அல்லது அதற்கு நிகராகவோ இருந்தால் True இல்லையென்றால் False
‘>=’ – முதல் மதிப்பு இரண்டாவதை விடப் பெரிதான ஒன்றாகவோ அல்லது அதற்கு நிகராகவோ இருந்தால் True இல்லையென்றால் False
>> s<t
False
>>> s<=t
True
>>> s>t
False
>>> s>=t
True
‘==’ – முதல் மதிப்பு இரண்டாவதுக்கு நிகராக இருந்தால் True இல்லையென்றால் False.
‘!=’ – முதல் மதிப்பு இரண்டாவதுக்கு நிகராக இல்லாமல் இருந்தால் True இல்லையென்றால் False.
>>> x=10
>>> y=10
>>> x==y
True
>>> x!=y
False
>>> x=10
>>> y=10.0
>>> x==y
True
>>> x!=y
False
>>> x=11
>>> y=12
>>> x!=y
True
தொடர்புநிலை இயக்கிகள் மிக அதிகமாக நிபந்தனை மற்றும் மறு செய்கை நிரல் வரிகளில் பயன்படுத்தப்படுகின்றன (Conditional and Iterative Statements).
எப்படி என்பதை வரும் வாரங்களில் பார்ப்போம்.
(தொடரும்)