Tuesday 29 October 2013

Variable in C


In C "Memory is Syntactic Sugar" असे म्हणतात. Programming World मध्ये language चा syntax प्रोग्रॅमर ला लिहायला व समजायला सोपा असला तर त्याला "Syntactic Sugar" असे गोड नाव आहे. त्याचे कारण म्हणजे डेटा-टाइप व व्हेअरेबल चे नाव वापरुन मेमरी बरोबर आपण direct खेळ करू शकतो. Assembly level language मध्ये अशी कोणतीही सुविधा नसते कारण त्या मध्ये डेटा टाइपच नसतात. गंम्मत आहे ना...! आज मी या पोस्ट मध्ये दिसायला व समजायला एकदम सोप्पा असणारा पण मशीनच्या आत जावून बघितले तर interesting असा variable in C हा विषय निवडला आहे. 

 
Syntactic Sugar










int x;
float y;

char ch;


या वरील तीन स्टेटमेंट्स (ज्याला आपण Type declaration statements म्हणतो) मध्ये int, float, आणी char याला आपण डेटा टाइप म्हणतो. तर x, y, ch ला आपण variables म्हणतो. काय करतात ही स्टेटमेंट्स नक्की...?

ही स्टेटमेंट्स compiler ला मेमरी राखीव ठेवण्यासाठी व्यवस्था करण्याची विनंती करतात! या मध्ये एकंदरीत ३ महत्वाच्या information दडलेल्या आहेत. 

  • प्रत्येक व्हेअरेबल हे मेमरीचा starting address denote करते. 
  • प्रत्येक व्हेअरेबल ला डेटा टाइप आवश्यकच असतो
  • डेटा टाइप म्हणजे compiler ला किती bytes राखीव ठेवायच्या इतक्याच कारणासाठी आवश्यक असतो. 

त्यामुळेच ज्यावेळी आपण int x असे लिहीतो त्यावेळी आपण कंपायलरला सांगत आहोत की तु जी मेमरी राखीव ठेवली आहेस त्याला मी नाव x असे दिले आहे. अर्थात compiler ला मात्र x च्या address शी देणे-घेणे असते व त्या starting address पासून तो integer ला 4 bytes लागत असतील तर पुढील 32 bits access करण्याचे काम करतो. (सांग काम्या हो नाम्या हि मराठी म्हण कशी कंपायलरा तंतोतंत लागू होते...!)

मग प्रश्न असा उरतो की compiler ला कसे कळते की किती bytes द्यायचे ते...? तर integer data types ची definition limits.h या header file मध्ये ठेवलेली असते आणी float data type ची definition मात्र macro चा आधार घेउन floats.h या header file मध्ये ठेवलेली असते. 

त्यामुळे variable म्हणजे मेमरी हे प्रोग्रॅमरने कायम लक्षात ठेवणे जरूरी आहे. म्हणूनच variable is named memory location अशी त्याची व्याख्या करता येइल. शिवाय हे सुद्धा लक्षात घेतले पाहीजे कि ज्या प्रकारचे व्हेअरेबल आहे त्याच प्रकारचा constant त्या मध्ये (memory मध्ये) ठेवता येतो. 

variables declare करतांना C मध्ये काही नियम पाळणे मात्र जरूरी आहे जसे की...

  1. variable चे नाव ठरवतांना त्या मध्ये digits आणी alphabets असू शकतात. 
  2. variable च्या नावाची सुरवात digit ने होउ शकत नाही. variable name मधील पहीले character alphabet च असले पाहीजे. (अर्थात underscore चालतो पण शक्यतो प्रोग्रॅमर ने तो वापरू नये कारण compiler लिहीणाऱ्या प्रोग्रॅमर त्याचा वापर करतात असे convention आहे. 
  3. variable name मध्ये underscore व्यतीरीक्त कोणतेही special character वापरायला allowed नाही 
  4. variable name मध्ये blank space किंवा dot किंवा comma टाकण्याची शक्यता असते पण ही सर्व special characters असल्यामुळे वापरता येत नाहीत
  5. variable चे name हे शक्यतो meaningful, short व sweet असावे. 
  6. C language मध्ये सर्व व्हेअरेबल्स हि block (scope) च्या सुरवातीला करायला लागतात.      
Animated contents of Variables in C


 

  

Saturday 26 October 2013

Character Constant in C


आपण इंटीजर कसा स्टोअर करायचा ते पाहीले. फ्लोट कॉंन्संटंट कसा स्टोअर करायचा ते पाहीले. पहील्या मध्ये डेसीमल पॉइंट नसतो तर दुसऱ्या मध्ये डेसीमल पॉइंट असतो. C language मध्ये असलेल्या Primary Data type पैकी आता गरज आहे ती character कसे स्टोअर करायचे हे माहीत करून घ्यायची. 

प्रथम आपण कॅरेक्टर म्हणजे काय हे पाहीले पाहुया. 

किबोर्ड वरील सर्व Alphabets म्हणजे 

  • lower-case  :  a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z (Small case letters)
  • upper-case :  A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z  (Capital Letters)
  • numeric       :  0|1|2|3|4|5|6|7|8|9
  • special         :  !|%|^|&|*|(|)|-|+|=|{|}|||~|[|]|\|;|'|:|"|<|>|?|,|.|/|#|@|`|_

या सर्वांचा सेट म्हणजे हि सर्व कॅरेक्टर कॉंन्संटंट म्हणता येतील. अर्थात C language मध्ये हि सर्व characters वापरून सुद्धा ४ वर्गात विभागणी करता येइल. जसे की

वरील सर्व कॅरेक्टर्स आहे तशी वापरायची म्हणजेच फक्त एक कॅरेक्टर single quote मध्ये वापरायचे. 
Individual home for every alphabet





















या मध्ये कॅरेक्टर कॉंन्स्टंट ला एक बाइट म्हणजेच 8 bits दिलेले असतात. त्यामुळे त्याची range -128 to +127 इतकी असते. वर दिलेली सर्व कॅरेक्टर्स या format मध्ये represent करता येतात. Computer मध्ये डेटा binary format मध्ये स्टोअर केला जात असल्या मुळे American Standard Code for Information Interchange (ASCII) ने एक standard केले. ज्यामध्ये प्रत्येक कॅरेक्टर ला एक unique value दिली व त्या value ला ASCII value म्हणतात. 
उदा.
  • A ची ASCII value 65, B ची 66, C ची 67....व Z ची ASCII value 90 
  • a  ची ASCII value 97, b ची 98, c ची 99.....व z ची ASCII value 122
  • 0 ची ASCII value 48, 1 ची 49, 2 ची 50......व 9 ची ASCII value 57
 आहेत. शिवाय वर जो special character चा सेट दाखवला आहे त्यांना वरील ASCII values मधील उर्वरीत values म्हणजेच 0 to 47, 58 to 64, 91 to 96 व 123 to 127 दिल्या आहेत. 8 bits मधील sign bit न वापरता अनेक special characters सुद्धा स्टोअर करण्याची व्यवस्था ASCII ने करून दिली व त्याला extended ASCII character set म्हणतात व त्यांच्या साठी 128 to 255 मधील values दिल्या आहेत.        

याचा अर्थच असा की ज्यावेळी तुम्ही 

char ch = 'A'; 

असे स्टेटमेंट लिहाल त्यावेळी memory मध्ये A ची corresponding ASCII value म्हणजेच 65 चा bit pattern store केला जातो. 

या कॅरेक्टर कॉंस्टंटचे नियम म्हणजे:

  1. कॅरेक्टर कॉंस्टंट pair of single quote मध्ये लिहावा लागतो. एका पेक्षा जास्त कॅरेक्टर्स लिहीली तर compile time error मिळते. 
  2.  char हा किवर्ड राखीव ठेवला आहे. 
  3. त्याची range -128 to +127 आहे
 नंतर फार उशीरा म्हणजे १९९० नंतर जगामधील कोणत्याही भाषेमधील कोणतेही कॅरेक्टर स्टोअर करण्याची सुविधा देण्यासाठी Unicode format design केला गेला ज्यासाठी 2 bytes ची व्यवस्था करण्यात आली. त्यामुळे 65535 इतक्या विविध प्रकारची कॅरेक्टर्स स्टोअर करता येतात. अर्थात त्यासाठी प्रोग्रॅम लिहीतांना काही Locale changes करावे लागतात व C language ने wchar_t असा नवीन कॅरेक्टर कॉंस्टंट दिला. हा कॉंस्टंट wide character प्रकारात मोडतो  पण त्याचा फार वापर केला गेला नाही. 

या मध्ये तिसरा प्रकार म्हणजे escape sequence लिहीण्याचा कारण त्यासाठी \ आणी n किंवा n ऐवजी t, a, r, v, \ अशी काही कॅरेक्टर्स वापरली जातात पण हे एकच कॅरेक्टर असते. 

शेवटचा प्रकार म्हणजे स्ट्रींग मध्ये स्ट्रिंग टर्मिनेटींग कॅरेक्टर म्हणून \0 सुद्धा Single character ओळखले जाते.   

इतके वाचून सुद्धा कळाले नसेल तर मग या ठिकाणी व्हिडीओ पहा...!

Tuesday 22 October 2013

Real Constants in C Language


मराठी मध्ये आपण ज्याला अपुर्णांक म्हणतो त्याला इंग्रजी तसेच प्रोग्रॅमिंग लॅंग्वेज मध्ये Real Constants म्हणतात. एखाद्या न संपणाऱ्या लाईन वर कोणताही पॉइंट ज्या नंबर ने दर्शवता येतो त्याला आपण real numbers म्हणतो. अर्थातच या नंबर्स मध्ये फ्रॅक्शन असतो जो डेसीमल पॉइंट वापरून लिहीता येतो. उदा: C language मध्ये

3.3276, 98.451748, -0.3746, -56.45 हे सर्व real constants म्हणता येतील.  

Programming world मध्ये real numbers ना floating point constants असे सुद्धा म्हणतात. अर्थात रियल नंबर  कोणत्या फॉर्मॅट मध्ये represent केला आहे त्या प्रमाणे real number किंवा floating point number म्हणणे कधीही चांगले. 

रियल नंबर दोन प्रकारे represent करता येतो. 

  • Decimal Format
  • Exponential Format

वर दिलेली उदाहरणे Decimal Format ची आहेत कारण त्या प्रत्येक नंबर मध्ये Decimal Point आहेच. 
पण समजा काही नंबर मॅथेमॅटीक्स मध्ये  जसे की:

232000000 किंवा 0.253287 असा असेल तर आपण तो

आपण अनुक्रमे
 


2.32 x 108


आणि


253287 x 10-6

असा लिहू शकतो. या प्रकारा ला खर तर exponential format म्हणतात. यालाच floating point format असे सुद्धा म्हणतात. 









C language मध्ये Real Constant चे काही नियम आहेत ते प्रथम पाहू. कोणते आहेत ते...? तर


  • रियल नंबर मध्ये डेसीमल पॉइंट असतो.
  • जर डेसीमल पॉइंट नसेल तर exponential format असतो.
  • रियल नंबर मध्ये कॉमा (,) अथवा ब्लॅंक स्पेस allowed नाही. 
  • तो +ve अथवा -ve असू शकतो. मात्र Default sign positive असते

मॅथेमॅटीक्स च्या वर दाखवल्या उदाहरणाप्रमाणे प्रमाणे एखादा रियल नंबर खुप मोठ्ठा अथवा छोटा असेल तर C मध्ये e हे अक्षर वापरून नंबर exponential format मध्ये लिहीता येतो. जसे की वरील नंबर C मध्ये 

12345e-4 असा लिहीला जातो. 

या ठिकाणी सुद्धा 12345 या फिक्स डिजीट्स ना mantissa म्हणतात व -4 ला exponent म्हणतात. खालील रुल्स exponential format मध्ये पाळले जातात. 

  1. mantissa part व exponential part मध्ये e लिहीला जातो
  2. exponent पार्ट +ve अथवा -ve असू शकतो.
  3. floating point numbers store करण्यासाठी IEEE standard (Institute of Electrical and Electronics Engineers) वापरले जाते. 
  4. 4 Bytes float constant ची range साधारणपणे 3.4e-38 to 3.4e+38 अशी असते. e च्या ऐवजी E असा लिहीला तरी चालतो. 
  5. IEEE च्या standard नुसार 4 byte (32 Bits) फ़्लोट मध्ये
  • 1 bit sign bit साठी
  • 8 bits exponent साठी आणी
  • 23 bits mantissa साठी 
 reserve ठेवलेले असतात. 

Real constant साठी C मध्ये float, double हे किवर्ड राखीव ठेवले आहेत जे अनुक्रमे 4 व 8 Bytes memory घेतात. 
float साठी %f हा format specifier तर double साठी %lf हा format specifier वापरतात.  

Watch video on how to construct Real Constant in C



Do you like the C Marathi e-learning concept?