Pages

Sunday, 31 July 2016

Declaring Variable as Constant



Declaring Variable as Constant

कई बार वेरिएबल की वैल्यू को पूरे प्रोग्राम मे एक जैसा (constant) रखने की आवश्यकता होती हैं। हालांकि इसके लिए #define प्रीप्रोसेसर का इस्तेमाल कर कोंस्टंट का निर्माण किया जा सकता हैं। पर वेरिएबल को भी कोंस्टंट बनाया जा सकता हैं।

सी भाषा मे वेरिएबल को कोंस्टंट जैसा बनाने के लिए कीवर्ड का इस्तेमाल करते हैं। const कीवर्ड इसके लिए उपयोग मे लिया जाता है। 

const int std_num = 98 ;

const सी भाषा मे एक नया क्वालिफायर हैं जिसके मानक ANSI ने परिभाषित किए हैं। यह की-वर्ड कंपाइलर को std_num नाम का वेरिएबल बनाया हैं। जिसका डाटा टाइप इंटीजर हैं। इसकी वैल्यू प्रोग्राम क्रियान्वयन के समय सुधारी (modify) नहीं की जा सकती हैं। तथा इस वेरिएबल नेम को असाइनमेंट आपरेटर के दाए भाग मे उपयोग किया जा सकता हैं पर बाए भाग मे उपयोग नहीं किया जा सकता हैं।

इस प्रकार यह वेरिएबल भी एक कोंस्टंट की तरह कार्य करेगे और इसे एक कोंस्टंट माना जाता हैं।

Saturday, 30 July 2016

OPerator Precedence and associativity in C



Precedence of arithmetic Operators

Precedence ऑफ अरिथमेटिक का तात्पर्य, अरिथमेटिक आपरेटर के क्रियान्वित होने के क्रम तथा दिशा से संबन्धित हैं। कोई एरिथमेटिक एक्स्प्रेशन बिना ब्रेकेट के बाए से दाए को क्रियान्वित होती हैं। सी भाषा मे दो प्रकार के priority लेवेल्स बनाए गए हैं।

High priority -> जिनमे गुणा (*), भाग (/) और मॉड्युलेशन (%) को किसी भी एक्स्प्रेशन मे सबसे पहले प्रोसेस किया जाता हैं।

Low priority -> जिनमे प्लस (+) और माइनेस (-) शामिल हैं, इनसे गुणा, भाग और मोड के बाद प्रोसेस किया जाता हैं।

उदाहरण के लिए हमारे पास यह एक्स्प्रेशन हैं x = a - b / 3 + c* 2 -1
जहां a = 9, b = 12 और c = 3 इसका मतलब ऊपर वाला एक्स्प्रेशन कुछ इस रहह हुआ a = 9 – 12 / 3 + 3 * 2 – 1 जिसे हम दो pass मे करेंगे।

First Pass
चरण पहला : 9 – 4 + 3 * 2 – 1
दूसरा चरण : 9 – 4 + 6 – 1

Second Pass
तीसरा चरण : 5 + 6 – 1
चौथा चरण : 5 + 5
पंचवा चरण : 10

हालांकि किसी एक्स्प्रेशन मे जब कोष्टक (ब्रेकेट) लगा हो तो ऑपरेटर की प्राथमिकता बादल जाती हैं जैसे किउपर वाले एक्स्प्रेशन मे अगर हम ब्रेकेट लगा दे तो उसमे कैसे आपरेटर की प्राथमिकता बदलती हैं देखते हैं। उदाहरण के लिए हमारे पास यह एक्स्प्रेशन हैं x = 9 - 12 / (3 + 3) * (2 -1)
अब 
देखिये की कैसे सबसे ऊपर दिये एक्स्प्रेशन मे हमने इस बार ब्रेकेट लगा दिया हैं, तो उसका क्रियान्वयन कैसे होगा।

First Pass
पहला चरण : 9 – 12 / 6 * (2 – 1 )
दूसरा चरण : 9 – 12 / 6 * 1

Second Pass
तीसरा चरण : 9 – 2 * 1
चौथा चरण : 9 – 2
पंचवा चरण : 7

नीचे दिये गए टेबल मे आप आपरेटर का विवरण तथा उनके प्रोसेस होने की दिशा के बारे मे जानकारी पाएंगे।  जिसमे यह बताया गया हैं की कौनसा सा आपरेटर किस दिशा से प्रोसेस होता हैं। और उनकी क्या प्राथमिकता हैं। प्राथमिकता को दर्शाने के लिए हमने यहाँ पर रैंक की सहायता ली हैं सबसे ज्यादा प्राथमिकता वाले आपरेटर को 1 rank दिया हैं उसके बाद वाले को 2 और इसी तरह प्राथमिकता के आधार पर उन्हे नंबर दिये गए हैं।

Operator
Description
Associativity
Precedence
( )
[ ]
Parentheses (function call) (see Note 1)
Brackets (array subscript)
left-to-right
1
++ --
+ -
! ~
(type)

*
&
sizeof
Prefix increment/decrement
Unary plus/minus
Logical negation/bitwise complement
Cast (convert value to temporary value of type)
Dereference
Address (of operand)
Determine size in bytes on this implementation
right-to-left
2
*  /  %
Multiplication/division/modulus
left-to-right
3
+  -
Addition/subtraction
left-to-right
4
<<  >>
Bitwise shift left, Bitwise shift right
left-to-right
5
<  <=
>  >=
Relational less than/less than or equal to
Relational greater than/greater than or equal to
left-to-right
6
==  !=
Relational is equal to/is not equal to
left-to-right
7
&
Bitwise AND
left-to-right
8
^
Bitwise exclusive OR
left-to-right
9
|
Bitwise inclusive OR
left-to-right
10
&&
Logical AND
left-to-right
11
| |
Logical OR
left-to-right
12
? :
Ternary conditional
right-to-left
13
=
+=  -=
*=  /=
%=  &=
^=  |=
<<=  >>=
Assignment
Addition/subtraction assignment
Multiplication/division assignment
Modulus/bitwise AND assignment
Bitwise exclusive/inclusive OR assignment
Bitwise shift left/right assignment
right-to-left
14
,
Comma (separate expressions)
left-to-right
15

ऊपर दिये टेबल मे सभी आपरेटर की एसोसिएटिविटी (सहचारिता) और उसकी प्रेसिडेंस (प्राथमिकता) को दर्शाया गया हैं, जैसा की आप देख सकते हैं की टेबल मे comma को 15 प्रेसिडेंस रैंक दी गई हैं जिसका मतलब हैं की comma लो प्राइओरिटी (low priority) वाला आपरेटर हैं जो किसी भी एक्स्प्रेशन मे सबसे अंतिम मे प्रोसेस किया जाएगा।

Variable Declaration, intialization and assignment



वेरिएबल डिक्लारेशन (वेरिएबल की घोषणा)

प्रोग्राम मे आकड़ो या डाटा को उपयोग करने के लिए उसे एक नाम दिया जाता हैं जिसे हम वेरिएबल के नाम से जानते हैं। पर यह नामकरण कैसे होता हैं इसका एक विधि होती हैं जिसे हम इस सेक्शन मे जानेंगे। सबसे पहले आप को यह पता होना चाहिए की नामकरण की इस प्रक्रिया को सी भाषा मे वेरिएबल घोषणा तथा अँग्रेजी मे वेरिएबल डिक्लारेशन कहते हैं।
वेरिएबल के नाम का चयन निम्न बिन्दुओ के आधार मे किया जाता हैं।

1 – एक वेरिएबल-नेम अल्फा-न्यूमेरिक अक्षरो का समूह हो सकता हैं। जैसे std12, a1, a2 ये सभी मान्य हैं।

2 – किसी भी वेरिएबल-नेम का पहला अक्षर न्यूमेरिक (नंबर) नहीं होना चाहिए। जैसे 1a, 2std ये अमान्य हैं।

3 – किसी भी वेरिएबल-नेम का पहला अक्षर अल्फाबेट या अंडरस्कोर “_” से प्रारम्भ होना चाहिए। std, a24, _gh, _nam आदि मान्य हैं।

4 – वेरिएबल-नेम केस सेंसेटिव होते हैं यानि std और Std दोनों अलग अलग वेरिएबल-नेम हैं, क्योंकि पहले मे प्रयुक्त सभी अक्षर छोटे हैं, पर दूसरे वेरिएबल-नेम मे पहला अक्षर बड़ा हैं।

5 -  की-वर्ड वेरिएबल-नेम के रूप मे उपयोग नहीं किया जा सकता हैं।

6 – वेरिएबल-नेम के बीच मे कोई भी स्पेशल कैरेक्टर उपयोग नहीं किया जा सकता हैं। जैसे सेमीकालम, हैश, डॉलर, व्हाइट-स्पेस आदि वर्जित हैं।
अब देखते हैं की वेरिएबल का डिक्लारेशन (वेरिएबल को परिभाषित) कैसे करते हैं। वेरिएबल को परिभाषित करने के लिए डाटा टाइप और वेरिएबल नेम (आइडेंटिफ़ायर्स) की आवश्यकता होती हैं। जैसे 

1 – अगर आप बिना दशमलव की संख्या को स्टोर करने के लिए वेरिएबल बना रहे हैं तो आपको इंटीजर डाटा टाइप का चयन करना चाहिए। इंटीजर डाटा टाइप मुख्य रूप से तीन प्रकार से उपयोग किए जा सकते हैं।
1-  इंटीजर
2-  शॉर्ट इंटीजर
3-  लॉन्ग इंटीजर

1 – इंटीजर

इंटीजर मे वेरिएबल को परिभाषित करने के लिए int कीवर्ड का उपयोग करते हैं। अगर आप -32768 से 32767 तक संख्या को स्टोर करने के लिए वेरिएबल बनाना हैं तो निन तरीके से आप लिखे।
int a ; या signed int a;
यदि आप 0 to 65,535 तक की संख्या को वेरिएबल मे स्टोर करना चाहते हैं तो निम्न तरीके से आपको वेरिएबल परिभाषित करना होगा।
unsigned int a;

2 – शॉर्ट इंटीजर

शॉर्ट इंटीजर मे वेरिएबल परिभाषित करने के लिए short int कीवर्ड का इस्तेमाल करते हैं। 0 से 255 तक की वैल्यू को स्टोर करने के लिए निम्न तरीके से लिखना होता हैं।
Unsigned short int a;
और -128 से 127 तक की वैल्यू को स्टोर करने के लिए निम्न तरीके से लिखा जा सकता हैं।
Signed short int a; या short int a;

3 – लॉन्ग इंटीजर 

लॉन्ग इंटीजर वेरिएबल को परिभाषित करने के लिए long int कीवर्ड का इस्तेमाल करते हैं। तथा आप -2,147,483,648 से 2,147,483,647 तक की वैल्यू को वेरिएबल मे स्टोर करने के लिए signed long int का इस्तेमाल करते हैं तथा  0 से 4,294,967,295 तक की वैल्यू को स्टोर करने के लिए unsigned long int लिखना होता हैं।

2 – अगर आपको दशमलव संख्या को स्टोर करना चाहते हैं तो आप निम्न तरीके से कर सकते हैं जैसे –
float a ;
double a;
long double a;
float का इस्तेमाल आप जब करते हैं जब आपको दशमलव युक्त किसी संख्या को वेरिएबल मे स्टोर करना हो। इसकी रेंज 1.2E-38 से 3.4E+38 तथा इससे ज्यादा रेंज की संख्या को स्टोर करने के लिए double का इस्तेमाल करते हैं जिसकी रेंज 2.3E-308 से 1.7E+308 हैं और इससे भी ज्यादा रेंज की संख्या को स्टोर करने के लिए long double डाटा टाइप का इस्तेमाल करते हैं। जिसकी रेंज 3.4E-4932 से 1.1E+4932 तक होती हैं

वेरिएबल initialization

वेरिएबल इनीसियलाइज़ेशन का तात्पर्य वेरिएबल को प्रथम बार कोई वैल्यू देना कहलाता हैं। वेरिएबल को परिभाषित करने के बाद, वेरिएबल मे पहली बार कोई वैल्यू इन्सर्ट करने की प्रक्रिया वेरिएबल इनीसियलाइजेशन कहलाता हैं। जैसे
int a ;
अभी अभी हमने ऊपर एक वेरिएबल को परिभाषित किया हैं, जिसका प्रकार हमने int रखा हैं। यह कम्प्युटर की मेमोरी मे 2 byte की जगह लेगा, जिसमे आप -32768 से 32767 तक की संख्या को वैल्यू के रूप मे इस वेरिएबल मे स्टोर कर सकते हैं।
a = 2;
अब आप देखेंगे की a की परिभाषा के बाद यह पहला मौका हैं जहां पर हम a नाम के स वेरिएबल मे कोई वैल्यू को स्टोर कर रहे हैं। यह प्रक्रिया वेरिएबल इनीसियलाइजेशन कहलाती हैं।

वेरिएबल असाइनमेंट 

वेरिएबल असाइनमेंट का तात्पर्य हैं, की वेरिएबल मे स्टोर पुरानी वैल्यू को हटकर उस वेरिएबल मे कोई नई वैल्यू को स्टोर कर देना। कोई भी वेरिएबल प्रोग्राम के क्रियान्वयन के समय कई बार उपयोग मे लाया जाता हैं, इस दौरान कई बार उसकी वैल्यू को प्रोग्राम प्रोसेस करता हैं और पुरानी वैल्यू की जगह नई वैल्यू को स्टोर कर देता हैं।
जैसे
int a;
ऊपर दिया कोड वेरिएबल डिक्लारेशन हैं, जहा पर a नाम का वेरिएबल बनाया हैं, जिसका प्रकार int (इंटीजर) हैं।


a = 2;
ऊपर हमने वेरिएबल को वैल्यू 2 से इनीसियलाइज किया हैं।
a = 5 ;
अब आप देख रहे हैं की a मे 5 को स्टोर किया गया हैं, क्योंकि 5 पहली वैल्यू नहीं हैं जो a मे स्टोर की गई हो, इसके पहले 2 को a मे स्टोर किया जा चुका हैं। इस लिए इस बार जब 5 को a मे स्टोर किया गया तो, यह प्रक्रिया असाइनमेंट कहलाई जाएगी।
 

Popular Posts