Pages

Thursday, 18 August 2016

Decision Making Statement



(डिसीजन मेकिंग स्टेटमेंट) Decision Making Statement

सी-भाषा का उपयोग प्रोग्राम बनाने के लिए किया जाता हैं, पहले के समय मे प्रोग्राममिंग का उपयोग सांखिया गणना (numeric processing) करने के लिए किया जाता था। पर धीरे धीरे प्रोग्रामिंग लैंगवेज के विकास के साथ प्रोग्राममिंग की सीमाएं बढ़ती गई, जिसके अंतर्गत अब कई प्रकार की समस्यायों को हल करने के लिए प्रोग्रामिंग की जाने लगी। जिसकी वजह से प्रोग्राममिंग मे विशेष गुणो की आवश्यकता भी पड़ने लगी। जिसमे मुख्य गुण हैं डिसीजन मेकिंग और लूपिंग।

डिसीजन मेकिंग स्टेटमेंट का उपयोग प्रोग्राम मे एक से ज्यादा परिणामो के विकल्प बनाने के लिए उपयोग किया जाता हैं। जिससे कम्प्युटर किसी भी इनपुट के आधार पर निर्णय यानि डिसीजन ले सके। बहुत ही साधारण शब्दो मे कहे तो सी प्रोग्राम मे ऐसे स्टेटमेंट जिनका उपयोग डिसीजन लेने के लिए किया जाए उन्हे डिसीजन मेकिंग स्टेटमेंट कहते हैं।“

वर्तमान मे किसी भी प्रोग्राम मे इनपुट रन-टाइम मे दिया जाता हैं, इसलिए प्रोग्राम को इस तरह बनाया जाता हैं की वह इनपुट के आधार पर प्रोग्राम के परिणाम को तय कर सके। इसके लिए प्रोग्रामर प्रोग्राम मे विकल्प (option) बनाते हैं, जिसके लिए डिसीजन मेकिंग स्टेटमेंट का उपयोग किया जाता हैं।

डिसीजन मेकिंग की आवश्यकता कब पड़ती हैं? डिसीजन मेकिंग की आवश्यकता प्रोग्राम मे उस समय पड़ती हैं जब आप इनपुट्स लेते हैं, और उस इनपुट से दो या दो से ज्यादा परिणाम संबन्धित हो, तब आपको डिसीजन मेकिंग का उपयोग करना होता हैं।

माना हमने एक प्रोग्राम बनाने जा रहे हैं जिसमे हम संख्या को इनपुट करेंगे यह संख्या किसी विषय मे मिले नंबर हैं, जैसे ही कम्प्युटर मे हम संख्या डाले तो कम्प्युटर यह बता दे की इनपुट की गई वैल्यू, पास हैं या फ़ैल हैं। जैसे 32 डालू तो कम्प्युटर बता दे की फ़ैल और 54 डालू तो बता दे की पास।

आंगे बढ़ाने से पहले आप को यह सुनिश्चित हो जाना चाहिए की ऊपर दिया प्रोग्राम का कार्य आपको समझ मे आ गया। अब जैसा की अपने देखा की जैसे ही हम कोई संख्या कम्प्युटर मे डालते हैं, कम्प्युटर को दो विकल्पो (पास या फ़ैल) मे से एक विकल्प का चयन करना होता हैं। पर कम्प्युटर कैसे पता करेगा की जो संख्या इनपुट की गई हैं, वह पास विकल्प की हैं या फ़ैल विकल्प की हैं। यही पर डिसीजन मेकिंग स्टेटमेंट का महत्व प्रारम्भ होता हैं। कम्प्युटर किसी भी डिसीजन को लेने के लिए प्रोग्राम मे लिखे डिसीजन मेकिंग स्टेटमेंट को पढ़ता हैं, फिर निर्णय (डिसीजन) लेता हैं।

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


5 – switch statement
6 – nested switch statement
7 – ternary operator [ओपेरेटर सेक्शन मे वर्णित हैं]

Friday, 12 August 2016

Double and Long Double Input from Keyword Using Scanf() Function



डबल या लॉन्ग डबल वैल्यू का scanf के माध्यम से इनपुट :

डबल टाइप दसम्लव वैल्यू को होल्ड करने के लिए उपयोग किया जाता हैं, यह फ्लोट से ज्यादा बड़ी संख्या को होल्ड करता हैं। जिसकी रेंज 2.3E-308 to 1.7E+308 हैं जबकि फ्लोट की रेंज 1.2E-38 to 3.4E+38 होती हैं। फ्लोट वैल्यू को स्टोर करने के लिए 4 byte उपयोग करता हैं जबकि डबल टाइप मे वैल्यू को स्टोर करने के लिए 8 byte का इस्तेमाल किया जाता हैं।

डबल टाइप के वेरिएबल मे वैल्यू को की-बोर्ड से इनपुट करने के लिए scanf() फंक्शन का इस्तेमाल होता हैं। scanf फंक्शन मे डबल टाइप की वैल्यू को इन्सर्ट कराने के लिए, फ़ारमैट स्ट्रिंग “%lf” का इस्तेमाल करते हैं। जैसे

scanf ( “%lf, &a ) ;

लॉन्ग डबल फ्लोट और डबल टाइप के मुक़ाबले ज्यादा बड़ी संख्या को होल्ड करने के लिए उपयोग होता हैं। क्योंकि लॉन्ग डबल वैल्यू को स्टोर करने के लिए मेमोरी मे 10 byte का इस्तेमाल करता हैं। जिसके बजह से लॉन्ग डबल 3.4E-4932 से 1.1E+4932 रेंज तक मे डाटा को स्टोर कर सकता हैं। वैल्यू को की-बोर्ड से इनपुट करने के लिए scanf() का ही इस्तेमाल करते हैं, इसके लिए प्रोग्रामर को “%Lf” फॉर्मेट स्पेसीफायर का इस्तेमाल करते हैं। जिससे scanf() आसानी से समझ जाता हैं की यूजर किस प्रकार की वैल्यू इनपुट करना चाहता हैं। लॉन्ग डबल को scanf() फंक्शन के साथ निम्न प्रकार से उपयोग करेंगे।

scanf ( “%Lf” , &a );

नोट – ध्यान रहे डबल का फार्मेट स्पेसिफायर “%lf” होता हैं जबकि लॉन्ग डबल का फार्मेट स्पेसिफायर मे “%Lf” होता हैं। डबल मे L छोटा होता हैं जबकि लॉन्ग डबल मे L कैपिटल होता हैं।

Input Float Value From SCANF() Function



फ्लोट वैल्यू का scanf के माध्यम से इनपुट :

फ्लोट वैल्यू को इनपुट करने के लिए scanf फंक्शन मे d की जगह f का उपयोग करते हैं। परंतु % और f के बीच मे कोई width specifier उपयोग नहीं होता हैं। जैसा इंटीजर मे उपयोग होता हैं।
इसके अलावा * भी उपयोग किया जा सकता हैं। अगर %*f फार्मेट का उपयोग किया जाता हैं तो यह इसके समांतर इन्सर्ट किए गए वैल्यू को read नहीं करेगी। जैसा की पिछले टापिक मे हमने पढ़ा हैं। अब एक छोटे उदाहरण की सहायता से इसे समझते हैं।

  scanf(“ %f, &a) ;

अगर आप फ्लोट टाइप की वैल्यू को इन्सर्ट करना चाहते हैं तो ऊपर दिया गया फंक्शन सबसे सरल तरीका हैं किसी भी फ्लोट को इनपुट करने का। इसके अलावा आप निम्न फ़ारमैट का इस्तेमाल भी कर सकते हैं।

scanf ( “%g, &a );
scanf ( “%e, &a );

आप फ्लोट वैल्यू को इनपुट करने के लिए उक्त फंक्शन का भी इस्तेमाल कर सकते हैं। “%g” और “%e” ये दोनों फार्मेट स्ट्रिंग या कनवर्ज़न स्पेसिफायर कहते हैं। “%eexponential फॉर्म मे डाटा को इनपुट करने के लिए उपयोग किया जाता हैं। जबकि “%g” का इस्तेमाल exponential या floating मे इनपुट करने के लिए किया जाता हैं।

जैसे अगर आपने scanf ( “%e, &a ); का इस्तेमाल किया तब आप a के लिए exponent फॉर्म मे वैल्यू को इनपुट कर सकते हो, उदाहरण 0.12E+2 जिसका अर्थ हैं की a मे  12.00000 स्टोर होगा।

नोट ->  कम्प्युटर मे फ्लोट वैल्यू mantisa और exponent के रूप मे सुरक्शित होता हैं।

Friday, 5 August 2016

Scanf input Function for integer value



इंटीजर वैल्यू का scanf के द्वारा इनपुट  :

यदि आप इंटीजर वैल्यू का इनपुट लेना चाहते है और आप scanf फंक्शन उपयोग कर रहे हैं तो इस फंक्शन का इस्तेमाल विशेष फार्मेट के उपयोग से करना होता हैं। इंटीजर के निम्न फार्मेट का इस्तेमाल किया जा सकता हैं।
              %w d
यहाँ पर % यह इंगित कर रहा हैं की जो भी वैल्यू की-वोर्ड से प्रेषित होगी उसका प्रकार बदलकर हमारी (यानि प्रोग्राम) की आवश्यकता अनुसार करना होगा। इसके बाद आप देख रहे हैं की w लिखा हुआ हैं, w यह इंगित करता हैं की जब भी आप की-बोर्ड से इनपुट लेंगे, तो इनपुट किए गए वैल्यू की width कितनी होगी। जब भी format लिखेंगे तो w की जगह डिजिट लिखा जाएगा, जितनी अक्षर या डिजिट का इनपुट चाहिए उतनी संख्या आपको w के स्थान मे लिखने चाहिए। d का अर्थ यह हुआ की इनपुट की हुई संख्या इंटीजर के रूप मे स्वीकार्य होगी।
उदाहरण :1
                  scanf ( “%4d, &num1 ) ;

यहाँ पर हम scanf फंक्शन का इस्तेमाल कर रहे हैं। इस फंक्शन मे हम दो आर्गुमेंट का इस्तेमाल कर रहे हैं, पहला आर्गुमेंट “%4d” (इस आर्गुमेंट से पता चलता हैं की scanf किस प्रकार का इनपुट लेने वाला हैं) हैं जबकि दूसरा आर्गुमेंट &num1 हैं। %4d मे जिसमे % का कार्य ऊपर बताया गया हैं, 4 यहाँ पर w के स्थान मे हैं जिसका कम यह निर्देशित करना हैं की इनपुट मे कितने डिजिट या अक्षर प्रेषित होंगे। और d यह बता रहा हैं की इनपुट किया हुआ वैल्यू इंटीजर ही होना चाहिए, अन्यथा वह स्वीकार्य नहीं होगा।

            दूसरा आर्गुमेंट &num1 हैं, यहाँ पर num1 एक वेरिएबल हैं, जिसके लिए scanf फंक्शन से इनपुट लिया जा रहा हैं। num1 वेरिएबल के आंगे & “एड्रेस आपरेटर” लगा हुआ हैं जो यह बता रहा हैं की scanf फंक्शन के माध्यम से जो भी इनपुट लिया जाएगा, वह num1 वेरिएबल के मेमोरी एड्रेस मे स्टोर होगा।

जैसे scanf (“%2d%3d&a, &b)

अब अगर आप 23452 फिर 234 इनपुट करे तो बताए a और b मे क्या वैल्यू स्टोर होगी।
a = 23 और b = 452, एसा इसलिए क्योंकि %2d का अर्थ हुआ की 2 डिजिट का इंटीजर वैल्यू जबकि हमने इनपुट किया था 23452 इसके शुरू के दो डिजिट a मे स्टोर हो गए जबकि बाकी बचे तीन डिजिट b मे स्टोर हो गए। और दूसरी बार इनपुट किया गया वैल्यू 234 स्किप्ड हो जाएगा।

अगला उदाहरण scanf (“%d%2d ”, &a, &b);

अब इनपुट करते हैं, 1234 और 564 अब बताए a और b मे क्या स्टोर होगा?? a मे 1234 स्टोर होगा जबकि b मे 56 ही स्टोर होगा। ऐसा इसलिए क्योंकि जब भी %d लिखते हैं और width की जानकारी नहीं देते हैं तो इंटीजर अपने लिमिट तक के संख्या को स्टोर कर सकता हैं। जबकि b के लिए format स्ट्रिंग %2d उपयोग हुआ हैं जिसका अर्थ हैं की b वेरिएबल के लिए केवल दो डिजिट की संख्या स्वीकार्य करनी हैं। जिसके परिणाम स्वरूप 564 इनपुट तो किया गया पर यह 3 डिजिट की संख्या थी इसलिए इसके शुरू के दो डिजिट b मे स्टोर किए गए और बाकी बचा डिजिट को हटा दिया गया।

उदाहरण 3 scanf (“%*d%2d”, &a, &b);

इस उदाहरण मे उपयोग किए गए scanf फंक्शन के माध्यम से a और b मे क्या वैल्यू स्टोर होगी, अगर हम दो इनपुट 342 और 3412 देते हैं? यहाँ पर a मे 34 और b मे गरबेज वैल्यू स्टोर होगी।
इसका कारण : %*d अगर यह format स्ट्रिंग scanf मे लिखा हुआ हैं तो इसका तात्पर्य यह हैं की इसके समांतर जिस वैल्यू को इनपुट कर रहे हैं उस वैल्यू को scanf स्किप (skip) कर देता हैं, इस लिए जब ऊपर दिये उदाहरण मे %*d के समांतर 342 को इनपुट किया गया तो पूरी की पूरी वैल्यू स्किप हो गई, यानि उसे रीड (read) नहीं किया गया।

            इसके बाद %*d के तुरंत बाद अगला format स्ट्रिंग लिखा हुआ हैं, %2d जिसकी वजह से scanf दूसरी बार यूजर से इनपुट लेगा। जिसके समानान्तर हमने 3412 को इनपुट किया क्योंकि इसमे कोई भी * (स्टार) नहीं था इस लिए ये स्किप नहीं होगा, यानि यह इनपुट पढ़ा गया पर केवल 2 डिजिट ही पढे गए जो हैं 34 क्योंकि इनपुट a वेरिएबल के लिए लेना था पर पहला वैल्यू स्किप हो गया, तो दूसरा वैल्यू को वेरिएबल a मे स्टोर करेंगे। इस लिए a मे 34 स्टोर होगा, जबकि तीसरा format स्ट्रिंग ऊपर दिये उदाहरण मे नहीं लिया गया हैं इस लिए अब कोई भी इनपुट नहीं लिया जाएगा , और b बिना वैल्यू के रहेगा, जिससे उसके पास पुरानी वैल्यू ही रहेगी। जिसे गरवेज वैल्यू बोलते हैं।

Popular Posts