C ++ का प्रोग्रामिंग में प्रोग्रामिंग 3 से मॉड्यूल(module) 3 में स्वागत है। यह मॉड्यूल(module) हम एरेस(arrays) और तारों के बारे में चर्चा करेंगे। हमने मॉड्यूल(module) 2 में देखा है कि सी प्रोग्राम(program) और सी ++ प्रोग्राम(program) के बीच बुनियादी(basic) अंतर क्या हैं। हम उसी नोट पर चलते रहेंगे। इस मॉड्यूल(module) में हम विशेष रूप से C और C ++ में एरेस(arrays) के उपयोग को समझने की कोशिश करेंगे। हम C ++ में वेक्टर(vector) नामक एक मूल धारणा का परिचय देंगे, जो कि एरेस(arrays) की तरह सुंदर है, लेकिन बहुत अधिक शक्तिशाली है और हम यह देखने की कोशिश करेंगे कि सी में स्ट्रिंग(string) का उपयोग कैसे किया जाता है और इसके विपरीत कैसे स्ट्रिंग(string) प्रकार C ++ में संचालित होता है। तो, ये ऐसे बिंदु हैं जिन्हें हम कवर करेंगे। शुरू करने के लिए हमने एक साथ दो प्रोग्राम(program) दिखाए, दोनों को। वे वास्तव में IO हैडर(header) में अंतर को छोड़कर समान हैं। तो, सी के रूप में सरणी(array) का एक मूल उपयोग सी ++ में बिल्कुल उसी संकेतन में और उसी अर्थ के साथ किया जा सकता है। तो, पहला संदेश है एरेस(arrays) का उपयोग C ++ में ठीक उसी तरह किया जा सकता है जैसा कि आप सी। में जानते हैं। इसलिए, हम यहाँ विभिन्न सरणी(array) तत्वों के लिए कुछ मान निर्दिष्ट कर रहे हैं और उन्हें प्रिंट कर रहे हैं, केवल अंतर प्रिंटफ(printf) का उपयोग करने या cout का उपयोग करने के संदर्भ में है। । अब, सी में मुख्य मुद्दों में से एक, उन एरेस(arrays) का उपयोग करने के संदर्भ में जो आप सभी का सामना करना पड़ा होगा, जब मैं सी में एक सरणी(array) का उपयोग करना चाहता हूं, तो मुझे जानना होगा; मुझे सरणी(array) के आकार को निर्दिष्ट करने की आवश्यकता है, जिसका अर्थ है कि उन तत्वों की अधिकतम संख्या जो सरणी(array) में पहले से हो सकती हैं, जो कि प्रोग्राम(program) लिखने के समय या प्रोग्राम(program) को संकलित करने के समय विशिष्ट हो। इसलिए, अगर मुझे वह आकार नहीं पता है, तो मुझे एक आकार प्रदान करने की आवश्यकता है, जो कि मेरे द्वारा निष्पादित किए जाने वाले किसी भी एक मामले में, कार्यक्रम में चलने वाले से अधिक हो सकता है। निश्चित रूप से इस स्थिति को संभालने के दो तरीके हैं। एक है, मैं परिभाषित करता हूं, एक बड़ी सरणी(array) घोषित करता हूं और यह किया जा सकता है; यह या तो हार्ड कोडित हो सकता है, आकार को प्रोग्राम(program) के भीतर हार्ड कोडित किया जा सकता है या आकार को एक मैनिफ़ेस्ट(manifest) कॉन्स्टैंट(constant) का उपयोग करके कुछ हद तक नरम कोडित किया जा सकता है और दूसरा मामला जिसे आपने सी प्रोग्रामिंग में पहले देखा है, आप स्पेस को गतिशील रूप से आवंटित करने के लिए मॉलोक(malloc) का उपयोग करेंगे और रन समय पर सरणी(array) आवंटित करें और फिर आप इसका उपयोग करें और यदि आप मॉलोक(malloc) का उपयोग कर रहे हैं, तो आपको इसे खाली करने के लिए भी याद रखना होगा, जब आप उस सरणी(array) का उपयोग करते हैं। तो, आइए देखें कि कैसे हम C से C ++ में माइग्रेट करते हैं। तो, यह केवल बाएं हाथ की तरफ सी उदाहरण दिखा रहा है। हम हार्ड कॉलम को गिराने के आकार को सही कॉलम पर कोड(code) कर रहे हैं जो हम एक ही काम कर रहे हैं, सिवाय इसके कि अब आपके पास एक प्रकट निरंतर MAX है, जिसे 100 मान दिया गया है और हम उस MAX का उपयोग कर रहे हैं। मैनिफ़ेस्ट कॉन्स्टेंट का उपयोग करने का लाभ 10 अलग-अलग एरेज़ हो सकते हैं, जिनका आकार 100 तक निर्दिष्ट किया जाना है। अब, यदि मैं उन सभी को हार्ड कोड(code) देता हूं और कुछ समय बाद मुझे उन सभी आकारों को 100 से 1000 तक बदलने की आवश्यकता है, तो 10 स्थानों पर मुझे जाने और संपादित करने की आवश्यकता होगी और मैं बस उन सभी को करना भूल सकता हूं, लेकिन अगर मैं हैश को परिभाषित करता हूं या किसी मैनिफ़ेस्ट कॉन्स्टैंट का उपयोग करता हूं, तो मैं केवल एक स्थान पर परिवर्तन कर सकता हूं, MAX 100 से 1000 तक की परिभाषा बदल सकता हूं और वे सब बदल जाएंगे। इसलिए, C में एक बेहतर प्रोग्रामिंग प्रैक्टिस है, जिसमें मैनिफ़ेस्ट(manifest) कॉन्स्टेंट(constant) का उपयोग किया जाता है और हार्ड कोड(code) वैल्यू का नहीं, आप यह पहले से ही जानते हैं। अब, आप C और C ++ के बीच समान स्थिति को सही कॉलम पर दिखाते हैं, अब आपके पास C ++ प्रोग्राम(program) है। निश्चित रूप से, सरणी(array) आकार, अधिकतम सरणी(array) आकार MAX के रूप में हैश को 100 के रूप में परिभाषित किया जा सकता है, लेकिन जो हम यहां दिखाते हैं वह मुख्य के हेडर के ठीक बाद की रेखा पर केंद्रित है। हम कोने ब्रैकेट इंट(int) के भीतर वेक्टर(vector) और फिर सरणी(array) नाम और कोष्ठक के भीतर लिख रहे हैं, हम आकार मैक्स(MAX) दिखाते हैं। वेक्टर(vector) C ++ में एक नया परिचय है। यह एक अंतर्निहित प्रकार नहीं है; कृपया इसे बिल्ट-इन टाइप न समझें। यह कुछ ऐसा है जो C ++ मानक लाइब्ररी(library) द्वारा प्रदान किया गया है। इसलिए, यदि आप अपना ध्यान # सूची के मामले में शीर्ष पर ले जाते हैं, तो आप # पाएंगे, वहाँ # ज्ञान है । तो, मानक लाइब्ररी(library) हैडर(header) वेक्टर(vector) है जिसमें एक वेक्टर(vector) प्रकार के लिए सभी आवश्यक घोषणा परिभाषाएं हैं और आप इसे इस तरह से उपयोग कर सकते हैं; इसका मतलब है कि सभी मामलों में वेक्टर(vector) के लिए वेक्टर(vector) क्या पसंद करता है। तो, आप सिर्फ 'फॉर' लूप के भीतर ध्यान केंद्रित करते हैं, आप देखते हैं कि एरे तत्वों को कैसे एक्सेस किया जा रहा है। बायीं ओर, यह एक प्रसिद्ध सरणी(array) int arr[MAX] है। हम इसे arr[i] के रूप में लिखते हैं दाईं ओर, यह एक सदिश है कि हम सरणी(array) तत्वों तक पहुंचने के लिए समान अनुक्रमण संकेतन का उपयोग करते हैं। तो, वेक्टर(vector) पहुंच संकेतन के संदर्भ में समान है और पारंपरिक सरणी(array) के साथ पढ़ने या लिखने का उपयोग करने का परिणाम है, लेकिन इसका यह लाभ है कि इसका आकार अनिवार्य रूप से संकलन समय पर तय नहीं किया गया है। अब, इस उदाहरण में हमने केवल यह दिखाया है कि एक निश्चित प्रारंभिक आकार MAX के साथ वेक्टर(vector) का उपयोग कैसे करें। इसलिए, जब हम वेक्टर(vector) और कॉर्नर ब्रैकेट इंट(int) के भीतर कहते हैं, तो हमारा मतलब है कि कॉर्नर ब्रैकेट के भीतर, हम उस तत्व का प्रकार प्रदान कर रहे हैं, जो एरे से बना होता है, जिसे हम C में int arr[MAX] के रूप में लिखते हैं, इसे कोने कोष्ठक के भीतर वेक्टर(vector) के रूप में लिखें और जो कुछ भी हम यहां चौकोर कोष्ठक के भीतर अधिकतम आकार के रूप में प्रदान करते हैं, हम इसे arr नाम के बाद एक पैरामीटर(parameter) के रूप में पास करते हैं। तो, यह सिर्फ एक उल्लेखनीय अंतर है, अभी इसे केवल लेखन की एक अलग संकेतन के रूप में स्वीकार करें, एरेस(arrays) की घोषणा करें और एक बार जब आप ऐसा कर लें कि बाकी कार्यक्रम आप भूल सकते हैं, तो आप विशेष रूप से एक वेक्टर(vector) का उपयोग कर सकते हैं जिसे आप अभी जारी रख सकते हैं उन्हें एरेस(arrays) के रूप में उपयोग करें। अब इसके साथ, मुझे दिखाते हैं कि आपको वास्तव में कहाँ फायदा होगा। अब, हम मनमाने आकार के एरेस(arrays) का उपयोग करने के दूसरे तंत्र पर ध्यान केंद्रित करते हैं जो कि आप बिल्कुल भी नहीं जानते हैं कि एक सरणी(array) कितनी बड़ी हो सकती है, यह आपको केवल तभी पता चलेगा जब प्रोग्राम(program) उपयोगकर्ता द्वारा निष्पादित किया जाता है। तो, उपयोगकर्ता संभवतः सरणी(array) का आकार, तत्वों की संख्या प्रदान करेगा जो उपयोगकर्ता चाहते हैं। इसलिए, सी प्रोग्राम(program) पर, बाईं ओर देखें कि पहले हम उपयोगकर्ता से पूछ रहे हैं; कितने तत्व हैं, और उपयोगकर्ता एक गिनती मूल्य प्रदान करता है और यदि आपको सी में ऐसा करना है, तो उसे मॉलोक(malloc) का उपयोग करके सरणी(array) को गतिशील रूप से आवंटित करना होगा जैसा कि दिखाया गया है और उसी के साथ आगे बढ़ें। निश्चित रूप से आपको मॉलोक(malloc) में एक बहुत ही जटिल रूप लिखने की आवश्यकता होगी क्योंकि आपको वास्तव में यह कहने की ज़रूरत है कि आपको कितनी मेमोरी चाहिए, मॉलोक(malloc) आपको एक void स्टार पॉइंटर(pointer) लौटाता है, आपको उसे याद रखना और उसे इंट(int) स्टार में डालना होगा। C प्रोग्रामिंग की वे सभी बारीकियाँ मौजूद हैं; अब बस उसी तर्ज पर अपना ध्यान दाईं ओर स्थानांतरित करें। अब, हम वेरिएबल(variable) की घोषणा कर रहे हैं, क्योंकि वेरिएबल(variable) के वेक्टर(vector) को arr किया गया है और पहले जो हमने दिखाया था, उसके विपरीत कृपया ध्यान दें, हम किसी भी MAX साइज़ को नहीं पास कर रहे हैं। इसलिए, यदि हम एक MAX आकार नहीं पास करते हैं, तो हमें एक डिफ़ॉल्ट(default) आकार का एक वेक्टर(vector) मिलता है, C ++ मानक लाइब्ररी(library) में कुछ डिफ़ॉल्ट(default) आकार होंगे जो निश्चित नहीं हैं, लेकिन कुछ डिफ़ॉल्ट(default) आकार की सरणी(array) वहां होगी, लेकिन फ़ोलोविंग लाइन हम कुछ लिखते हैं जो आप संकेतन में परिचित नहीं हैं। हम arr.resize() लिख रहे हैं, हम इसे वेक्टर(vector) प्रकार के सदस्य फ़ंक्शन(function) के आकार के रूप में कहते हैं। यह क्या करता है, इस आकार परिवर्तन फ़ंक्शन(function) में है यदि हम एक मान पास करते हैं जैसे हम चर गणना के माध्यम से गुजर रहे हैं, तो वेक्टर(vector) तत्वों की गिनती संख्या का आकार बदल देगा। तो, चलिए मान लेते हैं कि वेक्टर(vector) का निर्माण जिस डिफ़ॉल्ट(default) आकार के साथ किया गया था, वह 10 है और अब रन टाइम में उपयोगकर्ता को इनपुट के लिए 100 की गिनती के रूप में दिया जाता है, जब arr.resize() किया जाता है तो मान 100 के रूप में पास हो जाएगा और वेक्टर(vector) मूल दस तत्वों से सौ तत्वों में बदल जाएगा। तो, आकार का उपयोग वेक्टर(vector) की संख्या या उस तत्व के वेक्टर(vector) गुण के रूप में होने या बढ़ने के लिए बहुत आसानी से किया जा सकता है। तो, इसके साथ ही आप इस सभी मॉलॉक का उपयोग करने से छुटकारा पा लेते हैं और यह जटिल धारणा और उस स्थान को मुक्त करने के लिए याद रखता है। हम सिर्फ वेक्टर(vector) का उपयोग कर सकते हैं और आवश्यकतानुसार उनका उपयोग कर सकते हैं जो C ++ प्रोग्राम(program) में एरेस(arrays) का उपयोग करता है क्योंकि वेक्टर(vector) कंटेनर सी में समान तंत्र की तुलना में कहीं अधिक सुविधाजनक और कॉम्पैक्ट है। अगला, आइए हम एक लेते हैं तुम जैसे हो, तार की संभाल में देखो; पहले से ही ज्ञात होगा कि 2 संख्यात्मक प्रकारों के अलावा जो पूरी संख्याओं में अंतर है और फ़्लोटिंग(floating) पॉइंट(point) नंबर हैं, अगले सबसे व्यापक रूप से उपयोग किए जाने वाले और सबसे आवश्यक प्रकार या मूल्य जिन्हें हमें अपने स्ट्रिंग्स(strings) से निपटने की आवश्यकता है जहां हम वर्णों के अनुक्रम के बारे में बात कर रहे हैं, और हमारे पास क्या है; यदि हम C में काम कर रहे हैं, तो हमारे पास अब C स्ट्रिंग(string) है। C में स्ट्रिंग(string) के रूप में एक डिफ़ॉल्ट(default) प्रकार नहीं है, लेकिन इसमें एक string.h मानक लाइब्रेरी हैडर(header) है जो स्ट्रलेन(strlen), strcpy, strcat इत्यादि जैसे कई प्रकार के स्ट्रिंग(string) फ़ंक्शन(function) प्रदान करता है और इसके साथ C स्ट्रिंग(string) केवल वर्णों का एक सरणी(array) है, जो हम कहते हैं कि NULL द्वारा समाप्त किया गया है, जिसका अर्थ है कि यदि आप बाएं से दाएं सरणी(array) को स्कैन करते हैं, तो आप इस बात पर विचार करते रहेंगे कि आपके पास एक स्ट्रिंग(string) है जब तक कि आप पहले अशक्त वर्णों या ASCII मान 0 वाले वर्णों तक नहीं आते हैं; कृपया ध्यान दें कि इस NULL के बाद की सरणी(array) में, कई अन्य वर्ण अभी भी शेष हो सकते हैं, लेकिन उन्हें स्ट्रिंग(string) का हिस्सा नहीं माना जाता है। अब, इस सम्मेलन के साथ यदि हम स्ट्रिंग(string) से स्ट्रिंग(string) फ़ंक्शन(function) का उपयोग करते हैं। एच हेडर तो आप विभिन्न प्रकार के स्ट्रिंग(string) ऑपरेशन प्राप्त करने में सक्षम होंगे जैसा कि आप सभी परिचित हैं। इसके विपरीत, C ++ अब C ++ मानक लाइब्ररी(library) में एक स्ट्रिंग(string) प्रकार का परिचय देता है। यह वैसा ही है जैसा हम वेक्टर(vector) के बारे में बात करते हैं। तो, स्ट्रिंग(string) भी एक अंतर्निहित प्रकार नहीं है, लेकिन यह एक प्रकार है जो मानक लाइब्ररी(library) के माध्यम से जोड़ा जाता है और आपको तार प्राप्त करने के लिए C ++ मानक लाइब्ररी(library) के स्ट्रिंग(string) हेडर का उपयोग करना होगा और इसमें कुछ अद्भुत व्यवहार हैं जैसे लिखने में सक्षम होना एक अतिरिक्त अभिव्यक्ति के रूप में स्ट्रिंग(string) के संघनन। इसलिए, हम उन लोगों का वर्णन करेंगे। यहाँ C प्रोग्राम(program) और C ++ प्रोग्राम(program) के बीच एक सरल समानांतर है। यह प्रोग्राम(program) दो स्ट्रिंग्स(strings) के साथ शुरू होता है जो प्रोग्राम(program) के भीतर परिभाषित किया जाता है हैलो दुनिया और हम पहले स्ट्रिंग(string) के बाद दूसरे स्ट्रिंग(string) को बदलना चाहते हैं। इसलिए, हम केवल उन्हें पहले स्ट्रिंग(string) के साथ दूसरी स्ट्रिंग(string) द्वारा पीछा करना चाहते हैं और एक संक्षिप्त स्ट्रिंग(string) बनाते हैं। तो, अगर आपको ऐसा करना है कि C में, बाईं ओर आप देख सकते हैं कि आपको क्या करने की आवश्यकता होगी, तो आपको एक सरणी(array) की आवश्यकता होगी, जिसमें संक्षिप्त स्ट्रिंग(string) को समाहित करने के लिए हमें इसे स्ट्रिंग(string) कहा जा सके, आपको पहले कॉपी करना होगा स्ट्रिंग(string) str1 str में और फिर आपको str2 को पहले से ही कॉपी किया हुआ है। तो, यह बस उसके बाद आएगा, इसलिए पहले हैलो हैलो करेगा उसके बाद एक रिक्त को str पर कॉपी किया जाएगा और फिर दुनिया को संक्षिप्त स्ट्रैची(strcpy) मिलेगा और strcat काम करता है और फिर आप इसे प्रिंट कर सकते हैं। इसके विपरीत, C ++ में आप स्ट्रिंग(string) हेडर में एक स्ट्रिंग(string) प्रकार है। इसलिए, आप स्ट्रिंग(string) हेडर को शामिल करते हैं, अब आप उन्हें घोषित नहीं करते हैं, क्योंकि कैरेक्टर एरे आप उन्हें स्ट्रिंग(string) के रूप में घोषित करते हैं, जो उस हेडर में दिए गए प्रकार का नाम है; कृपया ध्यान दें कि यह नाम सभी निचले मामलों में है और फिर आपके पास स्ट्रिंग(string) वैरिएबल, नाम str1 है और आप इसे निरंतर स्ट्रिंग(string) हैलो खाली या दुनिया को इनिशियलाइज़ करते हैं। बहुत ही दिलचस्प बातें यह है कि जब आप इसे संक्षिप्त करना होगा तो आपको वास्तव में पहली स्ट्रिंग(string) की प्रतिलिपि बनाने की आवश्यकता नहीं है और फिर संगति करें, आप बस यह कह सकते हैं कि मैं str2 को str1 में जोड़ रहा हूं। तो, हम कहते हैं कि str1 + str2, इसलिए यह बहुत अधिक है जैसे कि मेरे पास चर x 3 का मान है, चर y का मान 5 है। मैं x प्लस y का अर्थ 3 प्लस 5 है, जो कि 8 है। इसलिए यह पूर्णांक है इसके अलावा। यह स्ट्रिंग(string) के प्रकार में एक स्ट्रिंग(string) जोड़ के समान है, यह एक संघनन ऑपरेशन बन जाता है और हम C ++ में अद्भुत शक्ति देखेंगे जो कि आप अपने तरीके से ऑपरेटरों को परिभाषित करने में सक्षम होंगे जो भी आप उन्हें व्याख्या करना चाहते हैं। उदाहरण के लिए, आप इसका उपयोग आयतों के लिए बीजगणित लिखने के लिए कर सकते हैं, आपके पास दो आयतें हो सकती हैं, यदि आपके पास एक आयत प्रकार है और आप परिभाषित कर सकते हैं तो दो आयतों का जोड़ मूल रूप से आयत बनाने के लिए इस आयत का एक संघ बना रहा है जिसमें बड़े आयत शामिल हैं इन दोनों आयतों और इतने पर। तो, स्ट्रिंग(string) के संदर्भ में यह सुविधाएँ C ++ में उपलब्ध है, इसलिए स्ट्रिंग्स(strings) से निपटना वास्तव में आसान हो जाता है। सी ++ में विशेष रूप से ध्यान दें कि सी में, आपको वास्तव में यह जानना होगा कि परिणाम का आकार क्या है? ताकि, आप फिर से वेरिएबल(variable) str के लिए एक एरे को बड़े रूप से परिभाषित कर सकें क्योंकि अगर यह str आकार में पर्याप्त नहीं है तो स्ट्रैपी, स्ट्रैकट बाद में C ++ में फेल हो जाएगा। जब आप ऐसा करते हैं तो आपको इसमें से किसी को भी परेशान करने की आवश्यकता नहीं है चर स्ट्रिंग(string) को एक प्रकार के स्ट्रिंग(string) के रूप में घोषित करें और आप इसे str1 + str2 के संघनन के साथ आरंभीकृत करते हैं। कंपाइलर स्वचालित रूप से आकार को प्रबंधित करने से डरता है और आपको एक स्ट्रिंग(string) देगा जो समवर्ती को सम्‍मिलित करने के लिए काफी बड़ा है। तो, स्ट्रिंग्स(strings) की पूरी हैंडलिंग में बहुत आसान है। इसके अलावा, वास्तव में केवल तार जोड़ने के साथ समाप्त नहीं होता है या तारों के संघनन के लिए अतिरिक्त ऑपरेटर का उपयोग नहीं करता है, आप कई अन्य ऑपरेशन कर सकते हैं। वास्तव में, आपको वास्तव में किसी भी स्ट्रिंग(string) डॉट एच फ़ंक्शन(function) की आवश्यकता नहीं है जो आपके पास सी मानक लाइब्ररी(library) में है और अधिक प्राकृतिक ऑपरेटरों का उपयोग करके उनके कार्य को प्राप्त करें जैसे कि आप स्ट्रिंग(string) कॉपी करने के स्थान पर असाइनमेंट का उपयोग कर सकते हैं, आप उपयोग कर सकते हैं सभी तुलनात्मक ऑपरेटर स्ट्रैम्प का उपयोग करने के स्थान पर कम से कम बराबर से अधिक के बराबर के बराबर है। हम जानते हैं कि स्ट्रैम्प का उपयोग करना अपेक्षाकृत जटिल कार्य है क्योंकि यह ले सकता है; यह दो तार लेता है; दो सी स्ट्रिंग्स(strings) जो कार्ड स्टैक(stack) पॉइंटर्स हैं और आपको एक वैल्यू देता है जो या तो -1 हो सकता है या 0 हो सकता है या +1 हो सकता है, जिसके आधार पर स्ट्रिंग(string) बड़ा या बराबर होता है यदि स्ट्रिंग्स(strings) बराबर और इतने पर हो। अब, आप C ++ में स्ट्रिंग(string) प्रकार के साथ नहीं हैं, आपको इसमें से किसी में आने की आवश्यकता नहीं है। आप बस तुलना ऑपरेटरों का उपयोग कर सकते हैं और तार की तुलना उसी तरह से कर सकते हैं जैसे आप पूर्णांक या फ्लोटिंग पॉइंट संख्या की तुलना करते हैं। तो, यह C ++ की एक बहुत मजबूत विशेषताएं है और विशेष रूप से स्ट्रिंग(string) के लिए, यह एक बहुत ही सुविधाजनक तरीका है। इसलिए, यहां तक कि सी ++ की गहरी समझ में आए बिना आप केवल स्ट्रिंग(string) का उपयोग करना शुरू कर सकते हैं और अपने सभी कार्यक्रमों को अधिक स्मार्ट और लिखने में आसान बना सकते हैं। इस मॉड्यूल(module) में हमने दिखाया है - हम एरेस(arrays) के साथ कैसे काम कर सकते हैं, वेक्टर(vector) कैसे वास्तव में एरेस(arrays) को चर आकार में आसान बना देता है और स्ट्रिंग(string) प्रकारों का उपयोग करके C ++ में स्ट्रिंग्स(strings) का संचालन बहुत आसानी से कैसे किया जा सकता है। मानक लाइब्ररी(library)।