Thursday, April 9, 2009

सीखिए सी - 6: सी प्रोग्राम की विशेषताएं - 4

void main ()

सी एक स्ट्रक्चर्ड प्रोग्रामन भाषा है। इसका मतलब यह है कि सी के प्रोग्राम अनेक छोटे खंडों से मिलकर बनते हैं। कोई भी समस्या पहली नजर में विकराल और असाध्य सी लगती है, लेकिन जब हम उसे परस्पर जुड़ी छोटी समस्याओं में बांट देते हैं, और इन छोटी समस्याओं से अलग-अलग से निपटते हैं, तो बड़ी समस्या भी अपने आप सुलझ जाती है।

सी के प्रोग्राम लिखते समय भी प्रोग्रामर इस नीति का अनुसरण करता है। वह जिस समस्या के लिए प्रोग्राम लिख रहा हो, उसे अनेक छोटी समस्याओं में बांट देता है और प्रत्येक छोटी समस्या के लिए अलग-अलग प्रोग्राम लिख देता है, और बाद में इन सबको जोड़कर एक बड़ा प्रोग्राम बनाता है, जो मूल समस्या का निराकरण पेश करता है।

इन छोटे प्रोग्रामों को सी में फंक्शन कहा जाता है। प्रत्येक फंक्शन की कुछ विशेषताएं होती हैं, जो ये हैं –
1. प्रत्येक फंक्शन का एक अद्वितीय नाम होता है।
2. प्रत्येक फंक्शन उसे बुलानेवाले फंक्शन को कोई न कोई डेटा प्रकार लौटाता है।
3. प्रत्येक फंक्शन कोई न कोई डेटा प्रकार स्वीकारता है।

फंक्शनों के संबंध में एक और बात जानने की है। वह यह कि प्रत्येक फंक्शन को दूसरा कोई फंक्शन आह्वान करता है।

इसे इस तरह से समझिए। मान लीजिए आप मकान बनवा रहे हैं। उसके लिए आपको बढ़ई, मिस्त्री, लुहार, इलेक्ट्रीशियन, नलसाज, आदि की जरूरत है। ये सब फंक्शन हुए। आप भी एक फंक्शन हैं, जिसका कार्य है मकान बनवाना। पर आपकी हैसियत कुछ खास है। यदि आप न हों, तो मकान बनवाने काम होगा ही नहीं, क्योंकि आप ही बढ़ई, मिस्त्री, नलसाज आदि को इकट्ठा करके उन्हें काम सौंपते हैं।

इसी तरह हर सी प्रोग्राम में भी एक खास फंक्शन होता है, जिसे main () कहा जाता है। हर प्रोग्राम में इस main () फंक्शन का होना अनिवार्य है। संकलक किसी प्रोग्राम का संकलन शुरू करने से पहले यही देखता है कि main () कहां है? यदि प्रोग्राम में main () फंक्शन न हो, तो संकलक इसे एक गंभीर त्रुटि मानकर संकलन कार्य को रोक देता है।

तो यों समझिए कि हर प्रोग्राम में main () फंक्शन का होना अनिवार्य है। हमारे प्रोग्राम 1 में भी यह फंक्शन है। चूंकि यह एक छोटा सा प्रोग्राम है, इसमें केवल main () फंक्शन ही है, लेकिन वास्तविक सी प्रोग्रामों में main () के अलावा भी बीसियों फंक्शन होंगे।

अब देखते हैं main () के पहले जो void शब्द है, वह किस लिए है। हमने पहले कहा था कि प्रत्येक फंक्शन उसे बुलानेवाले फंक्शन को कुछ न कुछ लौटाता है। कई बार यह रिक्त राशि भी हो सकती है, यानी आप यों समझ लें कि वह कुछ नहीं लौटाता। लेकिन सी की दृष्टि से यह कुछ नहीं भी, कुछ होता है! है न गूढ़ बात! खैर, इस रिक्त राशि को NULL कहते हैं, और main () के पहले जो void शब्द है (जिसका शाब्दिक अर्थ है, खाली) यही सूचित करता है, कि main () फंक्शन कुछ भी नहीं लौटाता है। बात भी सही है, main () ठहरा प्रोग्राम का मालिकाना फंक्शन वह क्या किसी को लौटाएगा, उसका काम है, सबसे कुछ न कुछ लेना।

तो void का मतलब है कि यह फंक्शन कुछ लौटाता नहीं है। और यदि आप प्रोग्राम 1 को ध्यान से देखें, तो आपको विदित हो जाएगा कि वह कुछ भी नहीं लौटा रहा है किसी को। वह केवल Namaskar. को कंप्यूटर स्क्रीन पर छाप देता है।

आगे आप ऐसे फंक्शन लिखेंगे जो अनेक प्रकार के डेटा टाइपों में से कोई न कोई एक डेटा टाइप दूसरे फंक्शनों को लौटाएंगे। इन फंक्शनों के आगे इस डेटा टाइप का संकेत शब्द रहेगा।

अब void main () की एक तीसरी विशेषता पर आते हैं। वह है गोल कोष्ठक ()। आपके मन में यह सवाल जरूर उठ रहा होगा, कि यह किस लिए है और कोष्ठक के अंदर कुछ क्यों नहीं है। आपका सवाल वाजिब है, और उसका उत्तर नीचे दिया गया है।

मैंने शुरू में कहा था कि सी प्रोग्रामों में सब कुछ फंक्शनों द्वारा कराया जाता है। अब जब फंक्शनों से कुछ कराना हो, तो उन्हें कुछ न कुछ देना भी होगा, जिस पर वे कुछ करें। चक्की वाले उदाहरण को ही लें, तो, चक्की में जब तक हम गेंहूं न डालें, वह आटा पैदा कैसे करेगी। चक्की में गेहूं डालने के लिए एक कीपनुमा पात्र होता है, जिसमें हम गेंहूं डालते हैं, और चक्की गेहूं को पीसकर आटा बनाकर उसके निचले भाग के नली से निकाल देती है।

main () में, अथवा किसी भी अन्य फंक्शन में, जो गोल कोष्ठक है, वह चक्की के कीपनुमा पात्र के जैसा ही है। इसमें हम वह डेटा टाइप रखते हैं, जिस पर वह फंक्शन कोई कार्य करता है। मान लीजिए आपने ऐसा कोई फंक्शन लिखा हो, जो दो पूर्णांक संख्याओं का योग पता करता है। तो हम इस फंक्शन को ये दो संख्याएं देंगे, और वह इनका योग निकालकर हमें देगा।

किसी भी फंक्शन को जो कुछ भी हमें देना हो, उसे हम इन गोल कोष्ठकों में रखेंगे। यहां रखने से ये संख्याएं उस फंक्शन के लिए उपलब्ध हो जाएंगी, और उन राशियों पर फंक्शन अपना कम कर सकेगा। हालांकि अभी आपने उतनी सी नहीं सीखी है कि इस तरह के फंक्शन आप लिख सकें, पर आपको उसका कोड यहां अवलोकनार्थ दे रहा हूं।

int add (int x, inty) {
return (x+y);
}

यह छोटा सा फंक्शन है जो उसे दी गई दो पूर्णांक संख्याओं x और y का योग निकालकर देता है।

योग निकालने के लिए उसे दो संख्याएं देने की जरूरत है। इन्हें उसके गोल कोष्टकों के अंदर रखा गया है। यह जरूरी नहीं है कि गोल कोष्ठकों में दो ही राशियां हों, वहां आप जितनी चाहे राशियां रख सकते हैं। इन सब राशियों को उस फंक्शन का प्राचर (आर्ग्युमेंट) कहा जाता है।

प्राचर शून्य से लेकर जितने भी हो सकते हैं, लेकिन हर फंक्शन केवल एक राशि को लौटा सकता है, और उस राशि के डेटा टाइप को सूचित करनेवाला शब्द उस फंक्शन के नाम के पहले लिखा जाता है। यहां दो पूर्णांकों को जोड़ने पर हमें एक पूर्णांक प्राप्त होगा, जिसके लिए int डेटा टाइप पर्याप्त है। int मने integer (पूर्णांक)।

तो संक्षेप में यह कि हर सी प्रोग्राम में एक main() फंक्शन होता है। फंक्शन के पहले उसके द्वारा लौटाई गई राशि का डेटा टाइप लिखा जाता है। फंक्शन को दी जानेवाली राशियों को उसके गोल कोष्टकों में रखा जाता है। इन राशियों के साथ उनके डेटा टाइप का उल्लेख करना भी जरूरी है। इसीलिए हमारे add फंक्शन के गोल कोष्ठकों में int x और int y लिखा गया है। इससे add फंक्शन को पता चलता है कि उसे जो दो राशियां x और y दी गई हैं, वे पूर्णांक किस्म की राशियां हैं। यह जानकारी जरूरी है क्योंकि, जैसा कि हम आगे सीखेंगे, सी में राशियां कई प्रकार की हो सकती हैं।

5 comments:

  1. very good attempt in mother-tounge if any compiler works in hindi then give the name & at last please start the c++ blog parallely why wait for end of c?

    ReplyDelete
  2. प्रिय सुधीर जी, जहां तक मैं जानता हूं, विशुएल स्टूडिय में जो सी++ संकलक है,वह हिंदी में भी चलता है। लेकिन कोड आपको अंग्रेजी में ही लिखने पड़ेगे।

    हिंदी में कोड लिखने के लिए हिंदी में किसी कंप्यूटर विशारद को कोई प्रोग्रामन भाषा लिखनी होगी, पर वह तो तभी हो सकेगा जब हमारे आईआईटियों में शिक्षण माध्यम हिंदी हो जाएगा और वहां पढ़-पढ़ा रहे लोग हिंदी में सोचने की क्षमता प्राप्त कर लेंगे और इस ओर प्रवृत्त होंगे।

    सी++ सी का ही परिवर्धित रूप है, और जो सी के लिए मैं यहां बता रहा हूं, वह सब सी++ पर भी लागू होता है। सी++ में इन्हेरिटेंस, क्लास, मेथड़, ओपरेटर ओवरलोडिंग आदि कई उन्नत संकल्पनाएं हैं जो ओब्जेक्ट ओरिएंटेड प्रोग्रामन के लिए आवश्यक है। यह सब काफी जटिल है और इन पर लेख तैयार करने में समय लगेगा।

    पर मेरी कोशिश यही है कि इस ब्लोग में इन सब कंप्यूटर भाषाओं पर ट्यूटोरियल लिखूं। देखिए यह कब संभव हो पाता है।

    ReplyDelete
  3. thanks very much

    हिन्दी चिटठा जगत में आपका स्वागत है , ऐसे ही अपनी लेखनी से हमें परिचित करते रहें

    धन्यवाद
    मयूर दुबे
    अपनी अपनी डगर

    ReplyDelete
  4. मैं पढ रही हूं आपको ... शायद समझ में आ जाए।

    ReplyDelete
  5. sir agar aapki anumati ho to me aapki ye c language ka tute mere blog btechbyjani.tk par copy paste kar lu.

    ReplyDelete